WCHAR pszObjName[100] = L"C:\\Program Files\\test";
DWORD dwRes = 0;
PACL pOldDACL = NULL, pNewDACL = NULL;
PSECURITY_DESCRIPTOR pSD = NULL;
EXPLICIT_ACCESS ea;
// 获取文件夹的安全描述符
dwRes = GetNamedSecurityInfo(pszObjName, SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, NULL, NULL, &pOldDACL, NULL, &pSD);
if (dwRes != ERROR_SUCCESS)
{
MessageBox(NULL, L"获取安全描述符失败", L"FAILDE", MB_OK);
//goto Cleanup;
}
else
{
MessageBox(NULL, L"获取安全描述符成功", L"SUCCESS", MB_OK);
}
// 修改访问权限
WCHAR userName[MAX_PATH] = { 0 };
ULONG size = MAX_PATH;
GetUserName(userName, &size);
MessageBox(NULL, userName, L"用户名", MB_OK);
ZeroMemory(&ea, sizeof(EXPLICIT_ACCESSW));
ea.grfAccessPermissions = DELETE| WRITE_DAC| WRITE_OWNER;
ea.grfAccessMode = GRANT_ACCESS;
ea.grfInheritance = SUB_CONTAINERS_AND_OBJECTS_INHERIT;
ea.Trustee.TrusteeForm = TRUSTEE_IS_NAME;
ea.Trustee.ptstrName = userName;
dwRes = SetEntriesInAcl(1, &ea, pOldDACL, &pNewDACL);
if (dwRes != ERROR_SUCCESS)
{
MessageBox(NULL, L"设置访问权限失败", L"FAILED", MB_OK);
//goto Cleanup;
}
else
{
MessageBox(NULL, L"设置访问权限成功", L"SUCCESS", MB_OK);
}
// 更新文件夹的安全描述符
dwRes = SetNamedSecurityInfo((LPWSTR)pszObjName, SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, NULL, NULL, pNewDACL, NULL);
if (dwRes != ERROR_SUCCESS)
{
MessageBox(NULL, to_wstring(GetLastError()).c_str(), L"更新安全描述符失败", MB_OK);
//goto Cleanup;
}
else
{
MessageBox(NULL, L"文件夹访问权限已修改成功!", L"SUCCESS", MB_OK);
}
// 释放资源
if (pSD != NULL)
LocalFree((HLOCAL)pSD);
if (pNewDACL != NULL)
LocalFree((HLOCAL)pNewDACL);
我想给test文件夹增加写入和修改的权限,但是SetNamedSecurityInfo这个函数会失败,获取到的错误码是0,这是为什么啊?需要管理员权限允许吗?