我正在尝试从 .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(当我提供正确的名称时)。
先感谢您,