.evt 파일 (이벤트 로그)에서 가져 오는 사용자 SID의 사용자 계정 이름을 가져 오려고합니다. 지금까지 파일을 성공적으로 읽었으며 이벤트가 기록 될 때 활성 사용자의 SID에 액세스 할 수 있습니다. 내가 로컬있는 .evt 파일을 시도하지만 내있는 .evt 파일의 많은에서 때.evt 파일의 WinAPI 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;
}
이 잘 작동 :
내가 LookupAccountSid로 기능을 사용하고이 SID에서 사용자 이름을 얻으려면 원격 컴퓨터, 그리고 이것이 문제가되는 곳입니다. 실제로 원격 컴퓨터 이름을 사용하려고하면 ERROR_NONE_MAPPED 코드가 표시됩니다.많은 연구 후에, 나는 여전히 문제를 해결할 수없는 (그리고 이것은 성가신 일 시작)
주 :
내가 문제를 수정하기 위해 임의의 잘못된 컴퓨터 이름으로 시도하고 나는 오류 1722 : rpc 서버를 사용할 수 없습니다 마녀 예상, 그래서 내가 rpc 연결할 수 있어요 (내가 올바른 이름을 줄 때). 당신은 인/아웃 매개 변수에 여러 개의 동일한 size
변수를 사용하는
의 SID는이 생성 된 도메인에서만 유효합니다. 해당 "원격"시스템이 도메인의 일부가 아닌 경우 번호에서 아무 것도 검색 할 수 없습니다. 가짜 사용자 이름을 선택하여 생성하는 출력이 읽기 쉽도록합니다. –
@HansPassant 맞습니다. 문제는 내가받는 SID가 실제로 ** Active Directory ** SID라는 것입니다. 그래서 그들은 원격 머신에 등록되어 있지 않고 ldap 서버에 등록되어 있습니다. 나는 LDAP 요청 및 SID 조사에 집중하려고 노력할 것입니다. – Bastien