LookupAccountSid: Falscher Parameter
-
Hey,
also wie ist LookupAccountSid zu benutzen ??
Ich erhalte immer nur "Falscher Parameter":CString CReporting::GetAccountFromSID(DWORD dwSid, DWORD dwLength) { PSID pSid = reinterpret_cast<PSID>(&dwSid); SID_NAME_USE NameUse; DWORD dwAccSize = 0, dwDomSize = 0; if (!LookupAccountSid(NULL, pSid, NULL, &dwAccSize, NULL, &dwDomSize, &NameUse)) { CString s = GetErrorText(); return "Not applicable"; } LPTSTR lpszUser = new TCHAR[dwAccSize + 1]; LPTSTR lpszDom = new TCHAR[dwDomSize + 1]; if (LookupAccountSid(NULL, &pSid, lpszUser, &dwAccSize, lpszDom, &dwDomSize, &NameUse)) strAcc.Format("%s\\%s", strDomain, strUser); else { CString s = GetErrorText(); strAcc = "Not applicable"; } return strAcc; }Ich weiß nicht, ob der Cast oben so richtig ist. Ich will mit dem Offset aus der Eventlogrecord-Struktur ("dwSid") den Namen des Users und die zugehörige Domäne ermitteln.
Wer kann mir hier helfen ??
-
Eine SID kann IMHO kein DWORD sein!
Zeig mal den Code woher Du diese Sid beziehst bzw. auf welche Eventlog Daten es sich bezieht.
-
Ich hab gerade den Code nicht hier, aber wie kann ich dann aus dem UserIDOffset (DWORD) aus der Eventlog-Struktur die SID kriegen ??
http://msdn.microsoft.com/en-us/library/aa363646%28VS.85%29.aspxIch lese in meiner Applikation alle Fehler, die am heutigen Tag aufgetreten sind, aus dem Eventlog und baue mir mit den Infos dann den jeweiligen String zusammen und brauche daher auch die SID (bzw. den User- und Domänennamen).
-
Etwas Zeigerrechnen:
PEVENTLOGRECORD p = someting; PSID psid = reinterpret_cast<PSID>(reinterpret_cast<BYTE>(p)+p->UserSidOffset);
-
Ah das stimmt natürlich !
So hab ich auch schon z.B. den nächsten Eintrag in dem Buffer ermittelt...So funktionierts.
Ich danke dir vielmals, es lag natürlich auf der Hand, man muss es nur sehen !
€:
PSID pSid = reinterpret_cast<PSID>(reinterpret_cast<LPBYTE>(pEvRec) + pEvRec->UserSidOffset);