代码之家  ›  专栏  ›  技术社区  ›  Adam Driscoll

为什么会坠毁?

  •  2
  • Adam Driscoll  · 技术社区  · 14 年前

    我一直在敲我的头…我不能假装是一个C++的家伙…

        TCHAR * pszUserName = userName.GetBuffer();
    SID sid;
    SecureZeroMemory(&sid, sizeof(sid));
    SID_NAME_USE sidNameUse;
    DWORD cbSid = sizeof(sid);
    
    pLog->Log(_T("Getting the SID for user [%s]"), 1, userName);
    
    if (!LookupAccountName(NULL, (LPSTR)pszUserName, &sid, &cbSid, NULL, 0, &sidNameUse))
    {
        pLog->Log(_T("Failed to look up user SID. Error code: %d"),1,  GetLastError());
        return _T("");
    }
    
    pLog->Log(_T("Converting binary SID to string SID"));
    

    消息“getting the sid for user[x]is writed”,但随后应用程序崩溃。我想是 LookupAccountName 打电话。

    编辑:

    哎哟! userName 是MFC CString

    1 回复  |  直到 14 年前
        1
  •  7
  •   Peter Ruderman    14 年前

    参数6(cchreferencedDomaInName)应指向一个DWORD。当文档中说“如果referenceddomainname参数为空,则此参数必须为零”时,我相信它们意味着引用的dword必须为0。

    尝试添加:

    DWORD cchReferencedDomainName = 0;
    if (!LookupAccountName(NULL, (LPSTR)pszUserName, &sid, &cbSid, NULL, &cchReferencedDomainName, &sidNameUse))
    ...