我想列出PC上的所有用户,我可以通过列出HKEY_USERS注册表下的所有子项来做到这一点。但是我遇到了一个问题。如果用户已注销,则不会显示sid。 关于如何检索已注销用户的sid的任何提示? 附注:我的应用程序是由管理员运行的,我不知道用户,他们的个人资料名称或密码。因此,请记住这一点。
答案 0 :(得分:0)
您可以使用NetUserEnum
来枚举用户(如先前被提名为重复的问题所示)。
虽然不会获得每个用户的SID。最能为您提供的是每个用户的RID。
获取枚举的每个用户的SID的一种方法是给用户NetUserGetInfo
,为其指定由NetUserEnum
返回的用户名:
#define STRICT
#include <windows.h>
#include <lmaccess.h>
#include <lmapibuf.h>
#include <Sddl.h>
#include <stdio.h>
#pragma comment(lib, "advapi32.lib")
#pragma comment(lib, "netapi32.lib")
int main(void) {
USER_INFO_0 *buffer;
DWORD entries;
DWORD total_entries;
DWORD resume_handle = 0;
do {
NetUserEnum(NULL,
0,
FILTER_NORMAL_ACCOUNT,
(BYTE **)&buffer,
4096,
&entries,
&total_entries,
&resume_handle);
for (unsigned i = 0; i < entries; i++) {
USER_INFO_23 *info;
NetUserGetInfo(NULL, buffer[i].usri0_name, 23, (LPBYTE *)&info);
LPTSTR string_sid;
ConvertSidToStringSid(info->usri23_user_sid, &string_sid);
printf("%-20.20S\t%s\n", buffer[i].usri0_name, string_sid);
NetApiBufferFree(info);
}
NetApiBufferFree(buffer);
} while ( resume_handle != 0);
}
但是,尽管他所提名的副本并没有(完全)回答您的问题,但我同意David Heffernan的观点,这可能不是解决您遇到的问题的好方法。