C/C++ 创建文件时赋自由访问权限
#define UNICODE
#define _UNICODE
#include <iostream>
#include<Windows.h>
#include <aclapi.h>
int main()
{
SECURITY_ATTRIBUTES sa;
SECURITY_DESCRIPTOR sd;
PACL acl;
sa.bInheritHandle = false;
sa.lpSecurityDescriptor = &sd;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
EXPLICIT_ACCESS ace[3];
ZeroMemory(&ace, 3 * sizeof(EXPLICIT_ACCESS));
BYTE userSID[SECURITY_MAX_SID_SIZE];
PSID user = &userSID;
DWORD userCB;
CreateWellKnownSid(WinBuiltinUsersSid, NULL, user, &userCB);
BYTE adminSID[SECURITY_MAX_SID_SIZE];
PSID admin = &adminSID;;
DWORD adminCB;
CreateWellKnownSid(WinBuiltinAdministratorsSid, NULL, admin, &adminCB);
ace[0].grfAccessPermissions = FILE_READ_ACCESS;
ace[0].grfAccessMode = SET_ACCESS;
ace[0].grfInheritance = NO_INHERITANCE;
ace[0].Trustee.TrusteeForm = TRUSTEE_IS_SID;
ace[0].Trustee.TrusteeType = TRUSTEE_IS_GROUP;
ace[0].Trustee.ptstrName = (LPTSTR)user;
ace[1].grfAccessPermissions = FILE_ALL_ACCESS;
ace[1].grfAccessMode = SET_ACCESS;
ace[1].grfInheritance = NO_INHERITANCE;
ace[1].Trustee.TrusteeForm = TRUSTEE_IS_NAME;
ace[1].Trustee.TrusteeType = TRUSTEE_IS_USER;
ace[1].Trustee.ptstrName = (LPTSTR)L"Administrator";
ace[2].grfAccessPermissions = FILE_ALL_ACCESS;
ace[2].grfAccessMode = DENY_ACCESS;
ace[2].grfInheritance = NO_INHERITANCE;
ace[2].Trustee.TrusteeForm = TRUSTEE_IS_NAME;
ace[2].Trustee.TrusteeType = TRUSTEE_IS_USER;
ace[2].Trustee.ptstrName = (LPTSTR)L"zsf";
SetEntriesInAclW(3, ace, NULL, &acl);
InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(&sd, TRUE, acl, FALSE);
HANDLE newFile=CreateFileW(L"E:\\test3.txt", FILE_ALL_ACCESS, FILE_SHARE_READ|FILE_SHARE_WRITE, &sa, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);
char buf[120] = "HAHAHAHHAHAHA";
DWORD writeBytes;
WriteFile(newFile, (LPVOID)buf, sizeof(buf), &writeBytes, NULL);
}