使用 GetEffectiveRightsFromAcl() 拒绝访问..?

5 c winapi

我\xe2\x80\x99m 尝试检查特定受托者对特定文件的权限,并使用 win32 API GetEffectiveRightsFromAcl()。当域组可以访问该文件时,如果使用本地帐户(管理员或其他帐户)执行该函数,该函数将返回 5(访问被拒绝)。

\n\n

这三个语句总结了我在 GetEffectiveRightsFromAcl() 中看到的行为:

\n\n
    \n
  • 当域组拥有该文件的权限并且程序在本地帐户下运行时:\n访问被拒绝。
  • \n
  • 当域组有权访问该文件并且程序在域帐户或本地系统下\n运行时:成功
  • \n
  • 当域组没有该文件的权限并且程序\n在任何帐户下运行时:成功
  • \n
\n\n

有谁知道这背后的原因?在我看来,这与 Active Directory 安全性有关。哪些设置可能会影响\n以及调试此问题的好方法是什么?

\n\n

另外,我听说 GetEffectiveRightsFromAcl() 通常可能存在问题,应改用 AccessCheck()。但是,我需要能够获取任意 SID 并检查它对文件的访问权限,并且由于 AccessCheck() 需要模拟令牌,我不知道如何从任意 SID 中获取令牌...有什么想法吗?谢谢

\n\n

鲍勃

\n

Iga*_*ban 2

  • 如果域组有权访问该文件,则此函数必须访问活动目录以枚举受托者的组成员身份(至少如果它是域用户)。如果您的程序在本地帐户下运行,则该帐户无权访问活动目录,因此会出现错误返回代码。
  • 域帐户和本地系统有权访问活动目录。本地系统是活动目录中的计算机帐户(计算机就像AD中的用户)。
  • 如果没有域组有权访问该文件,则该函数不必检查活动目录。所以本地用户也能成功。