我試圖從.evt文件(事件日誌)中獲取用戶SID的用戶帳戶名。到現在爲止,我已經成功讀取了該文件,並且可以在事件記錄時訪問活動用戶的SID。從.evt文件中獲取WinAPI LookupAccountSid
要想從本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(當我給出正確的名稱)。
謝謝你在前進,
的SID只是對他們所創建的域有效。如果那個「遠程」機器不是域的一部分,那麼就沒有機會從這個數字中找回任何東西。通過挑選虛假的用戶名來避免這種情況,所以你生成的輸出是可讀的。 – 2013-05-06 17:25:38
@HansPassant你說得對,問題是我收到的SID實際上是** Active Directory ** SID,我想。所以他們沒有在遠程機器上註冊,而是在ldap服務器上註冊。我將嘗試關注ldap請求和SID研究。 – Bastien 2013-05-07 08:09:28