WinAPI LookupAccountSid из файла .evt

Я пытаюсь получить имя учетной записи пользователя 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 (когда я даю правильное имя).

Заранее спасибо,

0

Решение

Вы используете тот же 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"";
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector