File “如何给予”;“每个人”;通过C++;Windows8上的MFC?

File “如何给予”;“每个人”;通过C++;Windows8上的MFC?,file,visual-c++,windows-8,mfc,file-permissions,File,Visual C++,Windows 8,Mfc,File Permissions,我正在努力更改权限。 在Windows 8上,我需要将文件的权限更改为具有组“Everyone”写入权限。 我该怎么做? 我尝试用C++ MFC编辑一个文件,它已经存在,没有“写”(每个人)检查过,这给我带来了很多问题。 < p>你的应用程序需要有权更改文件的权限。 #pragma comment(lib, "Advapi32.lib") #include "Aclapi.h" #include "Sddl.h" #include <io.h> #include <sys/

我正在努力更改权限。 在Windows 8上,我需要将文件的权限更改为具有组“Everyone”写入权限。 我该怎么做?
我尝试用C++ MFC编辑一个文件,它已经存在,没有“写”(每个人)检查过,这给我带来了很多问题。

< p>你的应用程序需要有权更改文件的权限。
#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();
}
#pragma注释(lib,“Advapi32.lib”)
#包括“Aclapi.h”
#包括“Sddl.h”
#包括
#包括
每个人都允许有空隙(CString路径)
{
PACL pDacl,pNewDACL;
显式访问显式访问;
PSECURITY_描述符ppSecurityDescriptor;
PSID-PSID;
LPTSTR-lpStr;
CString str=路径;
lpStr=str.GetBuffer();
GetNamedSecurityInfo(lpStr、SE_文件_对象、DACL_安全性_信息、NULL、NULL和pDacl、NULL和ppSecurityDescriptor);
ConvertStringSidToSid(“S-1-1-0”和psid);
ExplicitAccess.grfAccessMode=设置访问权限;
ExplicitAccess.grfAccessPermissions=GENERIC_ALL;
ExplicitAccess.grfInheritance=CONTAINER_INHERIT_ACE | OBJECT_INHERIT_ACE;
ExplicitAccess.Truste.MultipleTrusteOperation=无多个受托人;
ExplicitAccess.Trustee.pMultipleTrustee=NULL;
ExplicitAccess.truster.ptstrName=(LPTSTR)psid;
ExplicitAccess.Trustee.TrusteeForm=受托人\u是\u SID;
ExplicitAccess.Trustee.TrusteeType=受托人\u未知;
setEntriesAcl(1,&ExplicitAccess,pDacl,&pNewDACL);
SetNamedSecurityInfo(lpStr、SE_文件对象、DACL_安全信息、NULL、NULL、pNewDACL、NULL);
LocalFree(pNewDACL);
本地免费(psid);
str.ReleaseBuffer();
}

您的应用程序需要具有更改文件权限的权限

#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();
}
#pragma注释(lib,“Advapi32.lib”)
#包括“Aclapi.h”
#包括“Sddl.h”
#包括
#包括
每个人都允许有空隙(CString路径)
{
PACL pDacl,pNewDACL;
显式访问显式访问;
PSECURITY_描述符ppSecurityDescriptor;
PSID-PSID;
LPTSTR-lpStr;
CString str=路径;
lpStr=str.GetBuffer();
GetNamedSecurityInfo(lpStr、SE_文件_对象、DACL_安全性_信息、NULL、NULL和pDacl、NULL和ppSecurityDescriptor);
ConvertStringSidToSid(“S-1-1-0”和psid);
ExplicitAccess.grfAccessMode=设置访问权限;
ExplicitAccess.grfAccessPermissions=GENERIC_ALL;
ExplicitAccess.grfInheritance=CONTAINER_INHERIT_ACE | OBJECT_INHERIT_ACE;
ExplicitAccess.Truste.MultipleTrusteOperation=无多个受托人;
ExplicitAccess.Trustee.pMultipleTrustee=NULL;
ExplicitAccess.truster.ptstrName=(LPTSTR)psid;
ExplicitAccess.Trustee.TrusteeForm=受托人\u是\u SID;
ExplicitAccess.Trustee.TrusteeType=受托人\u未知;
setEntriesAcl(1,&ExplicitAccess,pDacl,&pNewDACL);
SetNamedSecurityInfo(lpStr、SE_文件对象、DACL_安全信息、NULL、NULL、pNewDACL、NULL);
LocalFree(pNewDACL);
本地免费(psid);
str.ReleaseBuffer();
}

谢谢。它正是我所需要的。我在Windows8上的权限搞砸了,它解决了我的整个问题:)谢谢。它正是我所需要的。我在Windows8上的权限搞砸了,它解决了我的整个问题:)