LookupAccountName在Windows 7 64位上失败,1332

时间:2014-03-13 09:17:46

标签: windows-7-x64

我有一个小应用程序试图在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之间没有映射完成。”。请帮忙。

1 个答案:

答案 0 :(得分:1)

一位同事和我自己重新审视了这个问题。我们发现问题是由于Visual Studio项目设置中使用的字符集。默认情况下,Visual Studio将字符集设置为Use Unicode Character Set。但是我们的应用程序需要使用ASCII字符集,因为我们的应用程序需要从命令行读取输入。因此,从命令行读取的输入是ASCII,但我们将该输入传递给LookupAccountName API的宽字符版本,即LookupAccountNameW。这导致API返回1332错误代码。

因此我们将字符集更改为“未设置”并重新编译应用程序。这确保了使用正确形式的API LookupAccountNamA。这解决了这个问题。我相信将字符集设置为“”也可以解决问题。

enter image description here

希望这会有用。