我正在枚举 Windows 加入域的机器上的本地组。我正在使用 WMI 来执行此操作,因为它非常远程且供应凭证友好。在我的场景中,我的代码始终作为不受信任的主体远程运行,这意味着我必须能够在对目标计算机的远程调用中提供凭据(这听起来很随机,但实际上稍后会相关)。
我正在执行以下形式的 WMI 查询:
SELECT PartComponent FROM Win32_GroupUser WHERE GroupComponent="Win32_Group.Domain='{0}',Name='{1}'"
在这种情况下,域是计算机名称,名称是组本身的名称。
我返回的项目列表是正确的,但每个条目都缺少相关主体的 SID。为这些用户获取 SID 的最有效方法是什么?
我可以通过对每个主体的另一个查询(或对此进行明显的优化)来做到这一点,我很乐意为这个盒子上的本地用户做这件事。但是,对于域用户而言,这意味着与此主体所在域中的 DC 的另一个连接,并且可能有许多连接,因为在此本地组中可能有来自许多受信任域的用户。
我查看了一些明显的其他 API,但没有发现一个对我的事业超级友好的 API。一些,比如使用带有 WinNT://ComputerName/GroupName 形式的路径的 DirectoryEntry(),Group 事件甚至从结果中发出返回的域主体,我发现这很疯狂。其他人不提供友好的凭据,即使他们返回我所追求的组成员身份数据。
说实话,我对 SID 非常满意。主体名称和域名,虽然我觉得它们很方便,但对我来说很不错。
有没有我想念的灵丹妙药?