java环境配置总是自动还原_如何在安装内核驱动程序时禁用Windows以创建自动还原点?...

SysRestore plug-in使用 BEGIN_SYSTEM_CHANGE 调用 SRSetRestorePoint 但是根据MSDN,您可以使用 BEGIN_NESTED_SYSTEM_CHANGE 调用它来仅创建一个还原点 . 我不知道这是否适用于单个进程,或者它是否也适用于您可能用于安装驱动程序的任何子进程,但它可能值得一试 . 代码可能如下所示:

!define MAX_DESC 64

!define MAX_DESC_W 256

!define STATEMGRSTATUS i,l

!define RESTOREPOINTINFOA i,i,l,&m${MAX_DESC}

!define RESTOREPOINTINFOW i,i,l,&w${MAX_DESC_W}

!if "${NSIS_CHAR_SIZE}" <= 1

!define RESTOREPOINTINFO "${RESTOREPOINTINFOA}"

!else

!define RESTOREPOINTINFO "${RESTOREPOINTINFOW}"

!endif

!define BEGIN_NESTED_SYSTEM_CHANGE 102

!define END_NESTED_SYSTEM_CHANGE 103

!define DEVICE_DRIVER_INSTALL 10

Section

System::Call 'KERNEL32::LoadLibrary(t "$SysDir\SrClient.dll")'

Var /Global SRSTATUS

System::Call '*(${STATEMGRSTATUS})i.s'

Pop $SRSTATUS

System::Call '*(${RESTOREPOINTINFO})(${BEGIN_NESTED_SYSTEM_CHANGE},${DEVICE_DRIVER_INSTALL},0,&t${MAX_DESC} "Installed driver XYZ")i.r0'

System::Call 'SrClient::SRSetRestorePoint(ir0,i$SRSTATUS)i.r1'

IntCmpU $1 0 "" +2 +2

System::Call '*$SRSTATUS(${STATEMGRSTATUS})(0)' ; Make sure nStatus is ERROR_SUCCESS

System::Free $0

DetailPrint "SRSetRestorePoint(BEGIN_NESTED_SYSTEM_CHANGE) returned $1"

; TODO: Install driver here

System::Call '*$SRSTATUS(${STATEMGRSTATUS})(.r0,.r1)' ; Extract nStatus and llSequenceNumber

IntCmpU $0 0 "" norpt norpt ; Did the first call to SRSetRestorePoint succeed?

System::Call '*(${RESTOREPOINTINFO})(${END_NESTED_SYSTEM_CHANGE},${DEVICE_DRIVER_INSTALL},r1)i.r0'

System::Call 'SrClient::SRSetRestorePoint(ir0,i$SRSTATUS)i.r1'

System::Free $0

DetailPrint "SRSetRestorePoint(END_NESTED_SYSTEM_CHANGE) returned $1"

norpt:

System::Free $SRSTATUS

SectionEnd

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值