Win 8 似乎有一个新的用户组“所有应用程序包”。默认情况下,该组似乎对所有文件夹具有读取权限。但是我的要求是在我创建的文件夹上设置一些特定的 ACL。该组目前对我的文件夹没有权限,我编写了一些代码来为“所有应用程序包”添加读取权限。我正在使用 VS 2010,以下是精简后的代码片段。
http://msdn.microsoft.com/en-us/library/cc980032.aspx 中列出的“所有应用程序包”的 SID是 ALL_APP_PACKAGES (S-1-15-2-1)。
但无论我作为受托人以何种方式传递或传递什么值,下面的代码都不起作用。例如,在下面的代码中 SetNamedSecurityInfo() 因 ERROR_INVALID_ACL 失败。但是,如果我使用“管理员”或“所有人”帐户,则它可以工作。
我需要分配的确切权限是“读取和执行”、“列出文件夹内容”和“读取”
#include "stdafx.h"
#include "windows.h"
#include "sddl.h"
#include "Aclapi.h"
int _tmain(int argc, _TCHAR* argv[])
{
TCHAR pszObjName[MAX_PATH] = L"C:\\Program Files\\Common Files\\Test\\";
PACL pOldDACL = NULL, pNewDACL = NULL;
PSECURITY_DESCRIPTOR pSD = NULL;
EXPLICIT_ACCESS ea;
SECURITY_INFORMATION si = DACL_SECURITY_INFORMATION;
// Get a pointer to the existing DACL (Conditionaly).
DWORD dwRes = GetNamedSecurityInfo(pszObjName, SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, NULL, NULL, &pOldDACL, NULL, &pSD);
// Initialize an EXPLICIT_ACCESS structure …Run Code Online (Sandbox Code Playgroud)