C/C++語言, 調用Windows API更改文件、文件夾或註冊表權限的所有者
所用到的函數
- GetUserName //獲取當前登陸用戶名
- LookupAccountName //獲取用戶名SID
- 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;
}
程序執行前截圖
成功執行程序後