GetAce() 失败 - ERROR_INVALID_PARAMETER
GetAce() failing with - ERROR_INVALID_PARAMETER
我正在尝试使用 Visual Studio 中的一些 C++ 代码修改 ACL。我遇到了几个问题,其中之一是,当我尝试使用 GetAce() 从现有 ACL 中读取 ACE 时,对该函数的调用失败并且 returns 错误 87,ERROR_INVALID_PARAMETER.
问题ACL包含四个条目,前两个读取成功,但后两个失败,参数无效错误。
这是我 运行 的代码片段,如果有人对此有任何见解,我将不胜感激。
// filePath variable is passed in from command line...
PACL existingAcl;
if(GetNamedSecurityInfo(filePath, SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, NULL, NULL, &existingAcl, NULL, &securityDescriptor) != ERROR_SUCCESS) {
OutputDebugString("Could not retrieve ACL.\n");
return false;
}
const int numEntries = existingAcl->AceCount;
for(DWORD i = 0; i < numEntries; i++) {
EXPLICIT_ACCESS* thisAce;
if (!GetAce(existingAcl, i, (LPVOID*) &thisAce)) {
OutputDebugString("Failed to retrieve ACE.\n");
return false;
}
}
我正在循环中直接修改从 ACL 检索到的 ACE 之一的成员,这很可能调整指针或内存的方式破坏了内存分配等。感谢@273K为我指明了正确的方向!
我正在尝试使用 Visual Studio 中的一些 C++ 代码修改 ACL。我遇到了几个问题,其中之一是,当我尝试使用 GetAce() 从现有 ACL 中读取 ACE 时,对该函数的调用失败并且 returns 错误 87,ERROR_INVALID_PARAMETER.
问题ACL包含四个条目,前两个读取成功,但后两个失败,参数无效错误。
这是我 运行 的代码片段,如果有人对此有任何见解,我将不胜感激。
// filePath variable is passed in from command line...
PACL existingAcl;
if(GetNamedSecurityInfo(filePath, SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, NULL, NULL, &existingAcl, NULL, &securityDescriptor) != ERROR_SUCCESS) {
OutputDebugString("Could not retrieve ACL.\n");
return false;
}
const int numEntries = existingAcl->AceCount;
for(DWORD i = 0; i < numEntries; i++) {
EXPLICIT_ACCESS* thisAce;
if (!GetAce(existingAcl, i, (LPVOID*) &thisAce)) {
OutputDebugString("Failed to retrieve ACE.\n");
return false;
}
}
我正在循环中直接修改从 ACL 检索到的 ACE 之一的成员,这很可能调整指针或内存的方式破坏了内存分配等。感谢@273K为我指明了正确的方向!