Я пытаюсь получить имя учетной записи пользователя SID получить из файла .evt (журнал событий). До сих пор я успешно прочитал файл, и у меня есть доступ к 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"";
}
Других решений пока нет …