如何在 Windows 8 上通过 C++ MFC 授予“所有人”写入权限?
Posted
技术标签:
【中文标题】如何在 Windows 8 上通过 C++ MFC 授予“所有人”写入权限?【英文标题】:How to give "Everyone" write permissions via C++ MFC on Windows 8? 【发布时间】:2013-08-08 10:32:25 【问题描述】:我正在努力更改权限。 我需要在 Windows 8 上将文件的权限更改为具有组“每个人”的写入权限。 我该怎么做? 我试图用 C++ MFC 编辑一个文件,该文件已经存在而没有检查“写入”(每个人),这给我带来了很多问题。
【问题讨论】:
【参考方案1】:您的应用程序需要有权更改文件的权限。
#pragma comment(lib, "Advapi32.lib")
#include "Aclapi.h"
#include "Sddl.h"
#include <io.h>
#include <sys/stat.h>
void AllowEveryone(CString path)
PACL pDacl,pNewDACL;
EXPLICIT_ACCESS ExplicitAccess;
PSECURITY_DESCRIPTOR ppSecurityDescriptor;
PSID psid;
LPTSTR lpStr;
CString str = path;
lpStr = str.GetBuffer();
GetNamedSecurityInfo(lpStr, SE_FILE_OBJECT,DACL_SECURITY_INFORMATION, NULL, NULL, &pDacl, NULL, &ppSecurityDescriptor);
ConvertStringSidToSid("S-1-1-0", &psid);
ExplicitAccess.grfAccessMode = SET_ACCESS;
ExplicitAccess.grfAccessPermissions = GENERIC_ALL;
ExplicitAccess.grfInheritance = CONTAINER_INHERIT_ACE | OBJECT_INHERIT_ACE;
ExplicitAccess.Trustee.MultipleTrusteeOperation = NO_MULTIPLE_TRUSTEE;
ExplicitAccess.Trustee.pMultipleTrustee = NULL;
ExplicitAccess.Trustee.ptstrName = (LPTSTR) psid;
ExplicitAccess.Trustee.TrusteeForm = TRUSTEE_IS_SID;
ExplicitAccess.Trustee.TrusteeType = TRUSTEE_IS_UNKNOWN;
SetEntriesInAcl(1, &ExplicitAccess, pDacl, &pNewDACL);
SetNamedSecurityInfo(lpStr,SE_FILE_OBJECT,DACL_SECURITY_INFORMATION,NULL,NULL,pNewDACL,NULL);
LocalFree(pNewDACL);
LocalFree(psid);
str.ReleaseBuffer();
【讨论】:
谢谢。它正是我需要的。我搞砸了 Windows 8 上的权限,它解决了我的整个问题 :)以上是关于如何在 Windows 8 上通过 C++ MFC 授予“所有人”写入权限?的主要内容,如果未能解决你的问题,请参考以下文章
如何在Windows 8.1 / 10上可靠地窃取/重新获得MFC /桌面应用程序的焦点?
我可以在 Windows 中静态链接 ws2_32.lib 吗? c++ MFC
如何禁用 Windows C++ MFC 应用程序状态栏中的 CAP NUM SCRL 指示器?