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为我指明了正确的方向!