我可以从5
始终获得RmGetList
的返回值,原因可能是什么?
我正在关注本教程:http://blogs.msdn.com/b/oldnewthing/archive/2012/02/17/10268840.aspx
我的RmStartSession
和RmRegstierResources
都返回0
,这意味着成功。但请注意,在RmStartSession之后dwSession
始终为0,而我的szSessionKey
保持字符串形式为0ea790d06656a54f84645b5755f7b6d6
null终止。这是一个问题吗?
我的代码是js-ctypes所以我不愿意在winapi中分享这个但是分享它:https://github.com/Noitidart/_scratchpad/blob/master/_WinAPI-RstrtMgr.js#L293
编辑:我了解到dwSession为0是有效的。但是,我仍然无法弄清楚为什么我在RmGetList上获得访问被拒绝,任何人都有任何想法?
答案 0 :(得分:2)
如果文件系统填充程序之类的更高级别的内容阻止文件,RmGetList将返回错误5 无论Windows内核还是用户代码尝试访问该文件,驱动程序过滤器都拒绝从任何进程和功能访问文件xxx 它与重新启动管理器相同,重新启动管理器尝试访问该文件,驱动程序抛出错误5,重新启动管理器不知道如何处理该文件,然后将其重新返回给调用函数,因此您将获得拒绝访问< / p>
如果您尝试对Windows卷中的所有文件进行尝试,则会有很多文件抛出5错误,包括3rd parity防病毒文件或ms防御程序或...
只需使用try catch并忽略它们,因为即使您知道pid锁定了它们,您也无法对其进行任何操作,除了观看
如果您甚至没有读取锁定文件的权限,也会发生这种情况,在这种情况下,请尝试修复安全问题并重试
答案 1 :(得分:1)
我们了解到重启管理器不支持文件夹,当您尝试传递文件夹时会返回错误5: https://blog.yaakov.online/failed-experiment-what-processes-have-a-lock-on-this-folder/
更新:这里有一些如何使用重启管理器API的示例代码: https://github.com/Microsoft/msbuild/blob/master/src/Tasks/LockCheck.cs