c++ - 检查一组 SID 以了解给定组中的成员身份

标签 c++ winapi

我有一组 SID 值,如果它们在给定组中则需要显示。我知道如果我有 token 句柄,我可以使用 CheckTokenMembership 来做到这一点。如何从 Windows 中的 SID 获取 token 句柄?

最佳答案

  1. 使用LookupAccountSid获取SID的账号
  2. 使用 NetUserGetGroups 获取此帐户所属的所有组。
    编辑 来自 eryksun 的注释:首先检查目标组的 SID。如果它是 SidTypeGroup,请调用 NetUserGetGroups。如果是 SidTypeAlias,调用 NetUserGetLocalGroups(也称为别名,例如“BUILTIN\Administrators”)
  3. 使用 LookupAccountName 获取组的 SID。
  4. 检查帐户 SID(第 1 步)是否是 SID 集合(第 3 步)的成员。使用 EqualSid 函数。

您可以在旧的 win32.mvps.org 页面上找到合适的旧代码。可惜页面不见了。但 Wayback 机器有帮助。这里是旧版 fksec samples 的链接

你在那里找到了一个易于使用的 sid 类。它还提供了 sid::MemberOfsid::Members 函数。该代码不是我的风格,但它可以工作。

关于c++ - 检查一组 SID 以了解给定组中的成员身份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47078695/

相关文章:

c++ - 在 C++ 头文件中放置 using 指令的位置

c++ - 为要保存的文件添加扩展名

c++ - GetProcAddress() 为我的 Hello World 函数返回 null

c - 使用 Win32 API 逐行读取文本文件

C++计算成绩函数

c++ - C++ 中的 Z3 最大化

c++ - xcode - "attempt to use a deleted function"- 这是什么意思?

C++ SDL,为什么 SDL_LoadBMP() 返回 NULL?

multithreading - 如何将线程函数的地址作为回调传递给winapi?

c++ - 为什么错误 1400 Invalid window handle?