2,640
社区成员
发帖
与我相关
我的任务
分享
#include <windows.h>
#include <tchar.h>
#include <AclAPI.h>
int _tmain()
{
PACL pNewAcl;
EXPLICIT_ACCESS ea;
BuildExplicitAccessWithName(&ea, _T("Guest"), GENERIC_ALL, SET_ACCESS, NO_INHERITANCE);
SetEntriesInAcl(1, &ea, NULL, &pNewAcl);
SetNamedSecurityInfo(_T("C:\\test\\1.txt"), SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, NULL, NULL, pNewAcl, NULL);
LocalFree(pNewAcl);
return 0;
}
#include <windows.h>
#include <tchar.h>
#include <AclAPI.h>
#include <Lmcons.h>
int _tmain()
{
BOOL bRet = FALSE;
PSECURITY_DESCRIPTOR pSD;
PACL pNewDacl;
EXPLICIT_ACCESS ea;
GetNamedSecurityInfo(_T("C:\\test\\1.txt"), SE_FILE_OBJECT, DACL_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION, NULL, NULL, NULL, NULL, &pSD);
SetSecurityDescriptorControl(pSD, SE_DACL_PROTECTED, SE_DACL_PROTECTED);
BuildExplicitAccessWithName(&ea, _T("Guest"), GENERIC_ALL, SET_ACCESS, NO_INHERITANCE);
SetEntriesInAcl(1, &ea, NULL, &pNewDacl);
//当Guest明确被设置拒绝权限时,本进程需要SE_TAKE_OWNERSHIP_NAME权限才能执行成功
if (SetFileSecurity(_T("C:\\test\\1.txt"), DACL_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION, pSD)
&& SetNamedSecurityInfo(_T("C:\\test\\1.txt"), SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, NULL, NULL, pNewDacl, NULL) == ERROR_SUCCESS)
bRet = TRUE;
LocalFree(pNewDacl);
LocalFree(pSD);
return bRet;
}