因业务需求,必须具有HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet 下的子孙(孙)分支所有权限. 有些分支还是不确定的keyName的. 
现在我用以下代码, 据调试, 只获取了 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet下子分支的权限, 不具有操作孙分支的所有权限. 
是参数没有设置好, 还是思路不对? 
        
  PSECURITY_DESCRIPTOR pSD = NULL;  
  EXPLICIT_ACCESS ea;  
  PACL pOldDACL = NULL;
  PACL pNewDACL = NULL;  
   
  CString strKey = _T("MACHINE\\SYSTEM\CurrentControlSet");
  
  GetNamedSecurityInfo(strKey.GetBuffer(),
SE_REGISTRY_KEY,
DACL_SECURITY_INFORMATION,  
NULL, 
NULL,
&pOldDACL,
NULL, 
&pSD);  //设置用户名"Everyone" 对指定的键有所有操作权到结构ea
  ZeroMemory(&ea, sizeof(EXPLICIT_ACCESS));  BuildExplicitAccessWithName(&ea,
_T("Everyone"),      // name of trustee
GENERIC_ALL,   //KEY_ALL_ACCESS,     // type of access
SET_ACCESS,      // access mode 
SUB_CONTAINERS_AND_OBJECTS_INHERIT ); 
 
  //合并结构ea和OldDACL的权限列表到新的NewDACL
  SetEntriesInAcl(1, &ea,  pOldDACL, & pNewDACL);
   //把新的ACL写入到指定的键
  SetNamedSecurityInfo(strKey.GetBuffer(), 
objectType,
DACL_SECURITY_INFORMATION,
NULL, 
NULL,
pNewDACL,
NULL);