簡體   English   中英

來自.evt文件的WinAPI LookupAccountSid

[英]WinAPI LookupAccountSid from an .evt file

我正在嘗試從.evt文件(事件日志)獲取用戶SID的用戶帳戶名。 到目前為止,我已成功讀取該文件,並且在記錄事件時可以訪問活動用戶的SID。

要從此SID獲取用戶名,我正在使用LookupAccountSid函數:

wstring userNameFromSid(SID  userSid,wstring computerName)
        {
            DWORD size = 256;
            wchar_t * buff = (wchar_t*)malloc(sizeof(wchar_t)*size);
            wchar_t * buffDomain = (wchar_t*)malloc(sizeof(wchar_t)*size);
            SID_NAME_USE SidType;
            wstring result;
            SID tmpSid = userSid;

            if(LookupAccountSid(computerName.c_str(), &tmpSid, buff, &size, buffDomain, &size, &SidType )){
                result= buff;
            }
            else
            { 
                /*Here some code to print error in a Message box*/
            }

            free(buff);
            free(buffDomain);
            return result;
        }

當我嘗試使用本地.evt文件但我的許多.evt文件來自遠程計算機時,這很好用,這就是問題所在。 實際上,當我嘗試使用遠程計算機名稱時,我會得到一個ERROR_NONE_MAPPED代碼。
經過多次研究,我仍然無法解決問題(這開始很煩人)

注意
我嘗試使用隨機的假計算機名稱來改進問題,我得到一個錯誤1722:rpc服務器是不可用的巫婆是預期的,所以我能夠連接rpc(當我給出正確的名稱)。

先感謝您,

您對多個輸入/輸出參數使用相同size變量。 不要那樣做。 請改用單獨的變量。 如果computerName為空,您也不會考慮。

嘗試這個:

static const DWORD MAX_BUFF_SIZE = 256;

wstring userNameFromSid(SID userSid, wstring computerName)
{
    wchar_t buffName[MAX_BUFF_SIZE];
    DWORD buffNameSize = MAX_BUFF_SIZE;
    wchar_t buffDomain[MAX_BUFF_SIZE];
    DWORD buffDomainSize = MAX_BUFF_SIZE;
    SID_NAME_USE SidType;

    if (LookupAccountSid(!computerName.empty() ? computerName.c_str() : NULL, &userSid, buffName, &buffNameSize, buffDomain, &buffDomainSize, &SidType))
    {
        return buffName;
    }

    /*Here some code to print error in a Message box*/
    return L"";
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM