将文件夹权限分配给“所有应用程序包”组

卡扎夫

看来Win 8有了一个新的用户组“ ALL APPLICATION PACKAGES”。默认情况下,该组似乎对所有文件夹都具有读取权限。但是,我的要求是在我创建的文件夹上设置一些特定的ACL。该组当前对我的文件夹没有权限,我编写了一些代码来添加“所有应用程序包”的读取权限。我使用的是VS 2010,下面是经过精简的代码段。

http://msdn.microsoft.com/zh-cn/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 for the new ACE. 
ZeroMemory(&ea, sizeof(EXPLICIT_ACCESS));
ea.grfAccessPermissions = STANDARD_RIGHTS_READ;
ea.grfAccessMode = SET_ACCESS;
ea.grfInheritance= SUB_CONTAINERS_AND_OBJECTS_INHERIT;
ea.Trustee.TrusteeForm = TRUSTEE_IS_SID;
// ea.Trustee.TrusteeType = TRUSTEE_IS_GROUP;
// Should I be using SID (S-1-15-2-1) (SetEntriesInAcl() fails) or "ALL_APP_PACKAGES" (SetEntriesInAcl() passes but SetNamedSecurityInfo() fails)
//If I use "Administrators" or "Everyone" as Trustee Name then it works fine but not with "ALL APPLICATION PACKAGES"
ea.Trustee.ptstrName = _T(" ALL_APP_PACKAGES"); 

// Create a new ACL that merges the new ACE into the existing DACL.
dwRes = SetEntriesInAcl(1, &ea, pOldDACL, &pNewDACL);
if(ERROR_SUCCESS != dwRes) 
goto Cleanup; 

// Attach the new ACL as the object's DACL.
dwRes = SetNamedSecurityInfo(pszObjName, SE_FILE_OBJECT, si, NULL, NULL, pNewDACL, NULL);
if(ERROR_SUCCESS != dwRes)  
goto Cleanup;

Cleanup:
if(pSD != NULL) 
LocalFree((HLOCAL) pSD); 
if(pNewDACL != NULL) 
LocalFree((HLOCAL) pNewDACL); 

return dwRes;
}
杰里米

尝试以这种方式设置受托人结构。这个对我有用。

ea.Trustee.TrusteeForm = TRUSTEE_IS_NAME;
ea.Trustee.TrusteeType = TRUSTEE_IS_WELL_KNOWN_GROUP;
ea.Trustee.ptstrName = L"ALL APPLICATION PACKAGES"; 

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将所有受限制的应用程序包添加到文件夹权限

如何将文件夹中的所有文件捆绑到VS2015中的UWP应用程序包中?

在应用程序包中包含所有可绘制文件夹的图标是否必不可少?

将所有文件匹配项从文件夹分配给变量

Python 3.5.1-将变量分配给目标文件夹中的所有文件(文件类型:.jpg)

显示所有应用程序未尊重Ubuntu 18.04 / GNOME软件文件夹组

将文件夹的名称分配给文件的名称

Swift:首次运行应用程序时,如何将文件从应用程序包复制到“文档”文件夹

将所有文件夹/文件推送到应用程序文件吗?

在android应用程序包中指定自定义文件夹地址

如何在并行程序包的“应用”函数中将行更改分配给现有矩阵

分配给程序包中的全局闪亮环境

将所有Android应用程序包发布到Playstore命令行

UWP远程调试错误DEP4300-无法为应用程序包生成根文件夹

WinRT中用于显示保存在“图片”文件夹(而不是应用程序包)中的图像的路径(ImageSource)

如何使用MSBuild为该项目文件夹中的所有文件创建MSdeploy程序包

将应用程序配置重新分配给另一个软件包

将文件包放入iOS应用程序中的特定文件夹位置

我需要什么权限才能将托管身份分配给应用程序角色?

如何编写“ GROUP BY”查询以获取给定应用程序分配给用户的所有角色

如何从SpringBoot应用程序的资源文件夹中读取所有文件?

将组的最大值分配给该组中的所有行

在我的应用程序的资产目录中列出所有文件和文件夹(以及子文件夹),并检查资产是文件还是文件夹

具有Windows服务的WRITE权限和其他应用程序的READ权限的文件夹

是否可以将域分配给动态创建的“文件夹”?

使用PowerShell将挂载点文件夹路径分配给驱动器

如何将 mdpi 文件夹中的图像分配给 Xamarin 中的 ImageView?

如何设置应用程序/缓存和应用程序/日志文件夹的权限?

XAMPP为什么需要更改应用程序文件夹的应用程序权限?