C++ 恢复共享文件夹的有效权限时出现问题
我想恢复共享文件夹的有效权限。为此,我使用了CreateFile、GetSecurityInfo和GetEffectiveRightsFromAclA方法。问题是,当我测试权限时,当我设置管理员的SID时,它不起作用。这是因为我的代码实现不好吗?我指定我拥有该文件的权限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
//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您可以检查定义并添加您需要和关心的内容。