[英]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.