【发布时间】:2016-03-09 19:08:58
【问题描述】:
我有一个小型应用程序,它尝试在 Windows 7 64 位上获取给定用户的 SID。应用程序编译为 64 位。
PSID Sid;
DWORD cbReferencedDomainName, cbSid;
LPTSTR ReferencedDomainName;
SID_NAME_USE eUse;
DWORD dwRc = 0;
printf("Lookup %s\n",lpszAccountName);
cbReferencedDomainName = cbSid = 0;
if (LookupAccountName(NULL, lpszAccountName, 0, &cbSid,
0, &cbReferencedDomainName, &eUse)) {
printf("LookupAccountName passed\n");
return 0;
}
dwRc = GetLastError();
printf("LookupAccountName RC (%d)\n",dwRc);
我以 uid@hostname 格式传递用户名。对于机器上存在的每个用户,该 API 都会失败,GetLastError 返回 1332 -“未完成帐户名称和安全 ID 之间的映射。”。请帮忙。
【问题讨论】:
-
格式错误,不是电子邮件地址。请改用
domain\username。 -
谢谢。机器不在域中。我试过 machinename\user 但也失败了。
-
使用
.\username避免机器名称错误。不要忘记在 C 程序中使用两个反斜杠。 -
MSDN (msdn.microsoft.com/en-us/library/windows/desktop/…) 表示 API 也支持someone@example.com 格式。也试过 .\username 也失败了。
-
我发现对于机器本地的用户帐户,指定 '.\username' 不起作用(导致错误 1332),但只有 'username' 起作用。当尝试以 DOMAIN\user 形式添加域帐户时,由于我的机器不是我试图定位的用户域的一部分,导致错误 1332。将我的机器添加到域中解决了这个问题。
标签: windows-7-x64