Autor |
Beitrag |
lemi4ever
      
Beiträge: 19
|
Verfasst: Di 29.03.05 23:09
Hallo
Ich suchen eine Möglichkeit die SID eines bestimmen User aus der Regedit auslesen zu können. Grund ich muss einen Bereich welcher in der Regedit unter eine speziellen User abgelegt wird auslesen und anschliessend wieder in ein Reg Bereich eintragen.
Kann mir das jemand mit einem Beispiel helfen ?
Gruss
Michael Moderiert von Motzi: Topic aus Sonstiges verschoben am Di 29.03.2005 um 23:16
|
|
Harry M.
      
Beiträge: 754
Win 2000, XP
D2005
|
Verfasst: Di 29.03.05 23:12
was ist denn die SID
_________________ Gruß Harry
Et spes me per dies sine te ducat et amor me ferat, si dolor spem tollit.
|
|
Motzi
      
Beiträge: 2931
XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
|
Verfasst: Di 29.03.05 23:20
SID = security identifier
Also um zu einem Usernamen die SID zu bekommen bzw. umgekehrt gibt es die Funktionen LookupAccountName und LookupAccountSid. Um eine String-Darstellung der SID zu bekommen gibt es ConvertSidToStringSid, da diese Funktion aber erst ab Win2k verfügbar ist, findet man im SDK auch noch diesen C-Code, mit dem das ebenfalls geht:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76:
| BOOL GetTextualSid( PSID pSid, // binary SID LPTSTR TextualSid, // buffer for Textual representation of SID LPDWORD lpdwBufferLen // required/provided TextualSid buffersize ) { PSID_IDENTIFIER_AUTHORITY psia; DWORD dwSubAuthorities; DWORD dwSidRev=SID_REVISION; DWORD dwCounter; DWORD dwSidSize;
// Validate the binary SID.
if(!IsValidSid(pSid)) return FALSE;
// Get the identifier authority value from the SID.
psia = GetSidIdentifierAuthority(pSid);
// Get the number of subauthorities in the SID.
dwSubAuthorities = *GetSidSubAuthorityCount(pSid);
// Compute the buffer length. // S-SID_REVISION- + IdentifierAuthority- + subauthorities- + NULL
dwSidSize=(15 + 12 + (12 * dwSubAuthorities) + 1) * sizeof(TCHAR);
// Check input buffer length. // If too small, indicate the proper size and set last error.
if (*lpdwBufferLen < dwSidSize) { *lpdwBufferLen = dwSidSize; SetLastError(ERROR_INSUFFICIENT_BUFFER); return FALSE; }
// Add 'S' prefix and revision number to the string.
dwSidSize=wsprintf(TextualSid, TEXT("S-%lu-"), dwSidRev );
// Add SID identifier authority to the string.
if ( (psia->Value[0] != 0) || (psia->Value[1] != 0) ) { dwSidSize+=wsprintf(TextualSid + lstrlen(TextualSid), TEXT("0x%02hx%02hx%02hx%02hx%02hx%02hx"), (USHORT)psia->Value[0], (USHORT)psia->Value[1], (USHORT)psia->Value[2], (USHORT)psia->Value[3], (USHORT)psia->Value[4], (USHORT)psia->Value[5]); } else { dwSidSize+=wsprintf(TextualSid + lstrlen(TextualSid), TEXT("%lu"), (ULONG)(psia->Value[5] ) + (ULONG)(psia->Value[4] << 8) + (ULONG)(psia->Value[3] << 16) + (ULONG)(psia->Value[2] << 24) ); }
// Add SID subauthorities to the string. // for (dwCounter=0 ; dwCounter < dwSubAuthorities ; dwCounter++) { dwSidSize+=wsprintf(TextualSid + dwSidSize, TEXT("-%lu"), *GetSidSubAuthority(pSid, dwCounter) ); }
return TRUE; } |
Gruß, Motzi
_________________ gringo pussy cats - eef i see you i will pull your tail out by eets roots!
|
|
Harry M.
      
Beiträge: 754
Win 2000, XP
D2005
|
Verfasst: Di 29.03.05 23:48
da muss ich passen
_________________ Gruß Harry
Et spes me per dies sine te ducat et amor me ferat, si dolor spem tollit.
|
|
lemi4ever 
      
Beiträge: 19
|
Verfasst: Do 31.03.05 07:30
Vielen Dank für die Unterstützung.
Gruss
Michael
|
|
bis11
      
Beiträge: 1247
Erhaltene Danke: 2
Apple Mac OSX 10.11
|
Verfasst: Mo 12.12.05 14:44
Hallo,
da ich kein As in C bin. Kann mir da jemand weiterhelfen, wie ich die SID eines Users mit Delphi nun auslesen kann ?
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 12.12.05 15:10
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55:
| function ConvertSidToStringSid(SID: PSID; var StringSid: LPSTR): Boolean; stdcall; external 'advapi32.dll' name 'ConvertSidToStringSidA';
function GetAccountSid(const Server, User: WideString; var Sid: PSID): DWORD; var dwDomainSize, dwSidSize: DWord; R : LongBool; wDomain : WideString; Use : DWord; begin Result := 0; SetLastError(0); dwSidSize := 0; dwDomainSize := 0; R := LookupAccountNameW(PWideChar(Server), PWideChar(User), nil, dwSidSize, nil, dwDomainSize, Use); if (not R) and (GetLastError = ERROR_INSUFFICIENT_BUFFER) then begin SetLength(wDomain, dwDomainSize); Sid := GetMemory(dwSidSize); R := LookupAccountNameW(PWideChar(Server), PWideChar(User), Sid, dwSidSize, PWideChar(wDomain), dwDomainSize, Use); if not R then begin FreeMemory(Sid); Sid := nil; end; end else Result := GetLastError; end;
procedure TForm1.Button1Click(Sender: TObject); var SID: PSID; strSID: PChar; s: String; err: DWORD; begin err := GetAccountSid('hal9000', 'Michael', SID); if err = 0 then begin if ConvertSidToStringSid(SID, strSID) then s := strSID else s := SysErrorMessage(err); end else s := SysErrorMessage(err);
ShowMessage(s); end; |
|
|
bis11
      
Beiträge: 1247
Erhaltene Danke: 2
Apple Mac OSX 10.11
|
Verfasst: Mo 12.12.05 20:34
Hallo Luckie,
ich danke Dir schon mal. Ich werde es morgen ausprobieren und sollte ich noch fragen haben, werde ich mich hier melden.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 12.12.05 20:51
Das ist Luckie-Qualität, da gibt es nichts zum Probieren, das läuft.
Denn nur wo auch Luckie draufsteht, ist auch Luckie drinne.

|
|
Motzi
      
Beiträge: 2931
XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
|
Verfasst: Mo 12.12.05 22:21
Hab diese Funktion nicht ich irgendwann mal für dich geschrieben? 
_________________ gringo pussy cats - eef i see you i will pull your tail out by eets roots!
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 12.12.05 22:38
Puh, das weiß ich jetzt nicht. Könnte auch von Nico sein. Aber damit meinte ich, dass ich Qualität poste. 
|
|