C++ 恢复共享文件夹的有效权限时出现问题

C++ 恢复共享文件夹的有效权限时出现问题,c++,windows,winapi,C++,Windows,Winapi,我想恢复共享文件夹的有效权限。为此,我使用了CreateFile、GetSecurityInfo和GetEffectiveRightsFromAclA方法。问题是,当我测试权限时,当我设置管理员的SID时,它不起作用。这是因为我的代码实现不好吗?我指定我拥有该文件的权限 //stringName is the file path HANDLE file = CreateFile(stringName.c_str(), GENERIC_READ, FILE_SHARE_R

我想恢复共享文件夹的有效权限。为此,我使用了CreateFile、GetSecurityInfo和GetEffectiveRightsFromAclA方法。问题是,当我测试权限时,当我设置管理员的SID时,它不起作用。这是因为我的代码实现不好吗?我指定我拥有该文件的权限

    //stringName is the file path
    HANDLE file = CreateFile(stringName.c_str(), GENERIC_READ, 
    FILE_SHARE_READ, 
    nullptr, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr);
    PSID pSid;
    //The SID is that of the administrator 
    ConvertStringSidToSidA(stringSid.c_str(), &pSid);

    PACL ppDacl;
    PSECURITY_DESCRIPTOR ppSecurityDescriptor;
    GetSecurityInfo(file, SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, nullptr, 
    &pSid, &ppDacl, nullptr, &ppSecurityDescriptor);

    ACCESS_MASK pAccesMask;
    TRUSTEE_A pTrustee;
    GetEffectiveRightsFromAclA(ppDacl, &pTrustee, &pAccesMask);
    //here conditions are not respected
    if((pAccesMask & GENERIC_READ) == GENERIC_READ)
    {
        std::cout<<"ok"<<std::endl;
    }
    if((pAccesMask & GENERIC_WRITE) == GENERIC_WRITE)
    {
        std::cout<<"ok"<<std::endl;
    }
    if((pAccesMask & GENERIC_EXECUTE) == GENERIC_EXECUTE)
    {
        std::cout<<"ok"<<std::endl;
    }
    if((pAccesMask & GENERIC_ALL) == GENERIC_ALL)
    {
        std::cout<<"ok"<<std::endl;
    }

//stringName是文件路径
HANDLE file=CreateFile(stringName.c_str(),泛型_READ,
文件共享读取,
nullptr,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,nullptr);
PSID-PSID;
//SID是管理员的SID
ConvertStringSidToSidA(stringSid.c_str(),&pSid);
PACL-ppDacl;
PSECURITY_描述符ppSecurityDescriptor;
GetSecurityInfo(文件、SE_文件对象、DACL_安全信息、nullptr、,
&pSid、ppDacl、nullptr和ppSecurityDescriptor);
访问掩码pAccesMask;
受托人;
GetEffectiveRightsFromAclA(ppDacl、pTrustee和pAccesMask);
//这里的条件不受尊重
if((pAccesMask&GENERIC_-READ)=GENERIC_-READ)
{

std::cout在使用
pAccesMask
值之前,确保函数返回错误\u成功

因此,将泛型_的条件检查逻辑更改为:

if ((pAccesMask & READ_CONTROL) == READ_CONTROL && (pAccesMask & SYNCHRONIZE) == SYNCHRONIZE) //GENERIC_READ
{
    std::cout << "GENERIC_READ" << std::endl;
}
if((pAccesMask&READ\u CONTROL)==READ\u CONTROL&&(pAccesMask&SYNCHRONIZE)==SYNCHRONIZE)//通用\u读取
{

std::非常感谢您的回答。我每次都必须添加变量(pAccesMask&SYNCHRONIZE)?@Tom13000您可以检查定义并添加您需要和关心的内容。