【问题标题】:How to give "Everyone" write permissions via C++ MFC on Windows 8?如何在 Windows 8 上通过 C++ MFC 授予“所有人”写入权限?
【发布时间】:2013-08-08 10:32:25
【问题描述】:

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

【问题讨论】:

    标签: file visual-c++ windows-8 mfc file-permissions


    【解决方案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 上的权限,它解决了我的整个问题 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    • 2016-09-09
    • 1970-01-01
    • 2015-12-09
    • 2020-01-03
    • 1970-01-01
    相关资源
    最近更新 更多