C/C++語言 Windows API更改文件、文件夾或註冊表權限的所有者

C/C++語言, 調用Windows API更改文件、文件夾或註冊表權限的所有者

所用到的函數

  1. GetUserName                 //獲取當前登陸用戶名
  2. LookupAccountName     //獲取用戶名SID
  3. SetNamedSecurityInfo    //ACL相關函數

#include <stdio.h>
#include <aclapi.h>
#include <windows.h>

/*
	如執行失敗,請檢察程序權限
	可用管理員執行,加入提升進程權限代碼等
	文件和文件夾必須在NTFS格式的磁盤下,FAT32是沒有權限之說的
	Win7上測試通過
*/

int main(void)
{
    CHAR UserName[36] = {0};
    CHAR *Path = "H:\\temp";//要更改的文件或文件夾路徑

    // HKEY_CURRENT_USER\tmp 註冊表需要去掉前邊的HKEY_
    //CHAR *Path = "CURRENT_USER\\tmp";

    // LookupAccountName函數所需要的變量
    DWORD cbUserName = sizeof(UserName);
    CHAR Sid[1024] = {0};
    DWORD cbSid = sizeof(Sid);
    CHAR DomainBuffer[128] = {0};
    DWORD cbDomainBuffer = sizeof(DomainBuffer);
    SID_NAME_USE eUse;

    //獲取當前登陸用戶名
    GetUserName(UserName,&cbUserName);
    //當然也可以自己指定用戶名,必須得系統已有的用戶名

    //獲取用戶名SID
    if (LookupAccountName(
                NULL,UserName,&Sid,
                &cbSid,DomainBuffer,&cbDomainBuffer,&eUse))
    {
        // 更改所有者
        if (!SetNamedSecurityInfo
                (Path,
                SE_FILE_OBJECT, /* 註冊表爲:SE_REGISTRY_KEY */
                OWNER_SECURITY_INFORMATION, /* 更改所有者 */
                &Sid, /* 需要更改所有者的SID */
                NULL,NULL,NULL))
        {
            printf("成功更改所有者\n");
        }
    }
    return 0;
}

 程序執行前截圖

更改前,所有者爲:Administrators

成功執行程序後

成功執行程序後,所有者爲當前用戶名

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章