程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 在Win2k下操作有權限限制的注冊表鍵

在Win2k下操作有權限限制的注冊表鍵

編輯:關於C++

在2k系統操作注冊表時,發現某些健必須要有權限問題;

察看各位大大的貼,可惜沒有一個合適的結果;

有人說:可以提高使用者權限;但是事實上好像不是很好用;

經過艱苦.艱苦.艱艱苦苦;終於在msdn上找到了一些好動動;

不敢獨享,(哎,我可不想某人,好東西藏到自己都忘了的地方)

整理出來一些對某些人有用的東西:嘿嘿,代碼如下:

嚴重建議:大家都把好東西往上貼吧!!!!!!

歡迎來信探討: [email protected]

//開始重新配置使用注冊表的權限------------------------------------------------
   LPTSTR lpObjectName;
   SE_OBJECT_TYPE ObjectType;    //#include <aclapi.h>
   PACL OldDACL,NewDACL;
   PSECURITY_DESCRIPTOR SD;
   EXPLICIT_ACCESS ea;
   lpObjectName = "MACHINE\\SYSTEM\\ControlSet001\\Enum\\Root";
   ObjectType =SE_REGISTRY_KEY;
   //建立一個空的ACL;
   if (SetEntriesInAcl(0, NULL, NULL, &OldDACL)!=ERROR_SUCCESS)
     return;
   if (SetEntriesInAcl(0, NULL, NULL, &NewDACL)!=ERROR_SUCCESS)
     return;
   //獲取現有的ACL列表到OldDACL
   if(GetNamedSecurityInfo(lpObjectName, ObjectType,
              DACL_SECURITY_INFORMATION,
              NULL, NULL,
              &OldDACL,
              NULL, &SD) != ERROR_SUCCESS)
      Application->MessageBox("指定的鍵不存在!","提示",MB_OK);
   //設置用戶名"Everyone"對指定的鍵有所有操作權到結構ea
   ZeroMemory(&ea, sizeof(EXPLICIT_ACCESS));
   BuildExplicitAccessWithName(&ea,
                 "Everyone",   // name of trustee
                 GENERIC_ALL,   // type of access
                 SET_ACCESS,   // access mode
                 SUB_CONTAINERS_AND_OBJECTS_INHERIT); //讓自健繼承他的權限; inheritance mode
   
   //合並結構ea和OldDACL的權限列表到新的NewDACL
   if(SetEntriesInAcl(1, &ea, NULL, &NewDACL) != ERROR_SUCCESS)
      goto Cleanup;
   //把新的ACL寫入到指定的鍵
   SetNamedSecurityInfo(lpObjectName, ObjectType,
      DACL_SECURITY_INFORMATION,
      NULL, NULL,
      NewDACL,
      NULL);
   ///////開始操作注冊表//////////////////////////////////////////////////////////
   //...................................................
   ////////////////////////////////////////////////////////////////////////////
   //恢復注冊表的權限;
   BuildExplicitAccessWithName(&ea,
                 "Everyone",   // name of trustee
                 GENERIC_READ,   // type of access
                 SET_ACCESS,   // access mode
                 NO_INHERITANCE); //讓自健繼承他的權限; inheritance mode
   if(SetEntriesInAcl(1, &ea, NULL, &OldDACL) != ERROR_SUCCESS)
     goto Cleanup;
   //把舊的ACL寫入到指定的鍵
   SetNamedSecurityInfo(lpObjectName, ObjectType,
      DACL_SECURITY_INFORMATION,
      NULL, NULL,
      OldDACL,
      NULL);
     //釋放指針
   Cleanup:
   if(SD != NULL)
      LocalFree((HLOCAL) SD);
   if(NewDACL != NULL)
      LocalFree((HLOCAL) NewDACL);
   if(OldDACL != NULL)
      LocalFree((HLOCAL) OldDACL);

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved