天天看點

修改檔案使用者組的通路權限

一朋友問到的,于是參考了範文慶 《精通Windows API--函數接口程式設計執行個體》 書中的相關文檔,自己整理出一個DEMO,有興趣看看!

/

// Securtiy.cpp

// 設定NTFS檔案使用者組權限

// BY Koma 2010.04.13

#include <windows.h>

#pragma comment(lib,"user32.lib")

#pragma comment(lib,"Advapi32.lib")

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR pszCmdLine, int cmdShow)

{

SECURITY_ATTRIBUTES sa; // 和檔案有關的安全結構

SECURITY_DESCRIPTOR sd; // 聲明一個SD

BYTE aclBuffer[1024]; // buffer

PACL pacl = (PACL)&aclBuffer;// 聲明一個ACL,長度是1024

BYTE sidBuffer[100]; // sid buffer

PSID psid = (PSID)&sidBuffer;

// 聲明SID,長度是100

DWORD sidBufferSize = 100;

DWORD domainBufferSize = 80;

char domainBuffer[80];

HANDLE hFile;

SID_NAME_USE snu;

// 初始化SD、初始化ACL

InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION);

InitializeAcl(pacl, 1024, ACL_REVISION);

// 查找使用者Koma,并取該使用者的SID

LookupAccountName(0, "Koma",psid,&sidBufferSize, domainBuffer,&domainBufferSize, &snu);

// 設定該使用者的Access-Allowed的ACE,其權限為All-Access

AddAccessAllowedAce(pacl, ACL_REVISION, GENERIC_ALL, psid);

// 把ACL設定到SD中

SetSecurityDescriptorDacl(&sd, TRUE, pacl, FALSE);

// 把SD放到檔案安全結構SA中

sa.nLength = sizeof(SECURITY_ATTRIBUTES);

sa.bInheritHandle = FALSE;

sa.lpSecurityDescriptor = &sd;

// 開始建立檔案

hFile = CreateFile("D://Test.txt",0, 0, &sa, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0);

if(hFile == INVALID_HANDLE_VALUE)

{

MessageBox(NULL,"建立失敗!",NULL,NULL);

return -1;

}

MessageBox(NULL,"建立成功!",NULL,NULL);

CloseHandle(hFile);

return 0;

}

繼續閱讀