我有一个小应用程序试图在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之间没有映射完成。”。请帮忙。
答案 0 :(得分:1)
一位同事和我自己重新审视了这个问题。我们发现问题是由于Visual Studio项目设置中使用的字符集。默认情况下,Visual Studio将字符集设置为Use Unicode Character Set
。但是我们的应用程序需要使用ASCII字符集,因为我们的应用程序需要从命令行读取输入。因此,从命令行读取的输入是ASCII,但我们将该输入传递给LookupAccountName
API的宽字符版本,即LookupAccountNameW
。这导致API返回1332错误代码。
因此我们将字符集更改为“未设置”并重新编译应用程序。这确保了使用正确形式的API LookupAccountNamA
。这解决了这个问题。我相信将字符集设置为“”也可以解决问题。
希望这会有用。