setacl在处理注册表时有问题,写得不对。修改如下:
csetacl.cpp:
--- CSetACL.cpp.old 2009-04-06 23:44:41.000000000 +0800
+++ CSetACL.cpp 2009-04-06 23:57:16.000000000 +0800
@@ -2288,7 +2288,7 @@
m_nAPIError = RegOpenKeyEx (hRemoteKey ? hRemoteKey : hMainKey, sSubkeyPath, 0, KEY_ENUMERATE_SUB_KEYS | KEY_EXECUTE, &hOpenStd);
// We now know the key exists. Let's try some black magic and open it like a backup program
- if (hOpenStd && (m_nAPIError == ERROR_SUCCESS || m_nAPIError == ERROR_ACCESS_DENIED))
+ if (hOpenStd || m_nAPIError == ERROR_ACCESS_DENIED)
{
DWORD nNewCreated = 0;
DWORD nErrTmp = 0;
@@ -2307,6 +2307,7 @@
if (hOpenBckp && nErrTmp == ERROR_SUCCESS)
{
*hSubKey = hOpenBckp;
+ m_nAPIError = ERROR_SUCCESS;
// The standard key is not needed
RegCloseKey (hOpenStd); |
设置注册表权限方法:
setacl -ot reg -on HKEY_LOCAL_MACHINE\aaaa\hehe -rec yes -actn setowner -ownr n:Administrators -actn clear -clr dacl -actn setprot -op dacl:np