RegDeleteKey因ERROR_ACCESS_DENIED失败

时间:2011-03-11 05:48:15

标签: c++ c windows-mobile windows-ce

Windows Mobile:
作为卸载驱动程序的最后一步,我尝试使用RegDeleteKey API删除注册表子项(HKLM \ Drivers \ BuiltIn \ XYZ),但无法返回ERROR_ACCESS_DENIED代码。

Below are the steps I followed:
1. FindFirstDevice
2. Stored the key and needed values for later use in case I need to reload the driver (Used RegOpenKeyEx and RegQueryValueEx APIs)
3. DeactivateDevice
4. RegCloseKey
5. RegDeleteKey

步骤1到4工作得很好,但是,第5步失败了。请建议。

2 个答案:

答案 0 :(得分:2)

原因可能是

  • 确保删除了每个包含的值对

  • 您可能尝试删除任何人都不允许删除的密钥。尝试更改为您可以删除的另一个密钥,然后再次测试代码。

  • 您可能忘记在其他位置关闭此键的句柄(HKLM \ szSubKey)。您可以创建一个新的应用程序并在那里测试上面的代码。

  • 如果在第三种情况下工作正常,系统或其他进程可能会使用该密钥,因此您无法将其删除。

答案 1 :(得分:0)

为了对此进行更新,我使用总线IOCTL来停用设备,并在完成我必须执行的中间操作后重新激活它。这样我就不必担心处理删除注册表了。这非常整洁安全。不要弄乱设备上的驱动程序,如果在卸载驱动程序时出现问题,可能会导致系统状态错误。 这是关于How WinCE bus drivers work的非常好的文章。