AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

PSID in String umwandeln

Ein Thema von SleepyMaster · begonnen am 7. Nov 2003 · letzter Beitrag vom 8. Nov 2003
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von SleepyMaster
SleepyMaster

Registriert seit: 18. Mai 2003
634 Beiträge
 
#1

PSID in String umwandeln

  Alt 7. Nov 2003, 15:15
Hi ihrs kann mir mal grade jemand ein kurzes Beispiel Poasten, wie ich aus einer PSID einen String mache???
Vielen Dank schon mal
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#2

Re: PSID in String umwandeln

  Alt 7. Nov 2003, 20:27
Es gibt da die API ConvertSidToStringSid:
Code:
BOOL ConvertSidToStringSid(
  PSID Sid,
  LPTSTR* StringSid
);
gibts aber erst ab Win2000

aber es findet sich auch noch ein Code-Schnipsel im PSDK:
Code:
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;
}
Manuel Pöter
  Mit Zitat antworten Zitat
Benutzerbild von SleepyMaster
SleepyMaster

Registriert seit: 18. Mai 2003
634 Beiträge
 
#3

Re: PSID in String umwandeln

  Alt 8. Nov 2003, 10:41
In welcher Unit ist denn die Function deklariert???

Hab mal im Internet gesucht und die meinten:

You can use the function ConvertSidToStringSid, declared in NTCommon.pas aber die hab ich leider nich

Kann mir mal jemand nen Link senden unterdem ich die finde???
(Bei Torry hab ich se ned gefunden)

Vielen Dank
  Mit Zitat antworten Zitat
Benutzerbild von SleepyMaster
SleepyMaster

Registriert seit: 18. Mai 2003
634 Beiträge
 
#4

Re: PSID in String umwandeln

  Alt 8. Nov 2003, 10:47
Hab mir das mal aus VB in Delphi übersetzt:

VB:
Delphi-Quellcode:
Function ConvertSidToStringSid Lib "advapi32.dll" Alias "ConvertSidToStringSidA" ( _
    ByVal Sid As Long, _
    StringSid As Long _
    ) As Long
Delphi
function ConvertSidToStringSidA(ByVal, StringSid: Longint): Longint; stdcall;external 'advapi32.dll'; Aber ist es geht trozdem nicht.

Was hab ich falsch gemacht???
  Mit Zitat antworten Zitat
woki

Registriert seit: 29. Mär 2003
563 Beiträge
 
Delphi 2006 Architect
 
#5

Re: PSID in String umwandeln

  Alt 8. Nov 2003, 11:45
Hi,

gehe ich recht in der Annahme, das es sich bei der PSID um eine Guid handelt, dann stellt Delphi die Funktion guidToSting in der Unit SysUtils zur Verfügung

Grüss
Woki
  Mit Zitat antworten Zitat
Benutzerbild von SleepyMaster
SleepyMaster

Registriert seit: 18. Mai 2003
634 Beiträge
 
#6

Re: PSID in String umwandeln

  Alt 8. Nov 2003, 12:05
Zitat:
...dann stellt Delphi die Funktion guidToSting in der Unit SysUtils zur Verfügung
Macht mein Delphi (7) leider nich!
  Mit Zitat antworten Zitat
Benutzerbild von SleepyMaster
SleepyMaster

Registriert seit: 18. Mai 2003
634 Beiträge
 
#7

Re: PSID in String umwandeln

  Alt 8. Nov 2003, 12:15
Hab mir jetzt mal eine eigene Procedure geschrieben um alle Benutzernamen + deren SIDs zu erhalten (Bin aber noch ein totaler Anfänger also erwartet jetzt nix!). List nur die Werte aus der Registry aus.

Die Procedure
Delphi-Quellcode:
procedure GetUsersAndSIDs(var Users,Sids:TStringList);
var
  reg : Tregistry;
  KeyNames:TstringList;
  i:integer;
begin
Users.Clear;
Sids.Clear;
KeyNames:=TstringList.Create;
Reg:=Tregistry.Create;
reg.RootKey:=HKEY_USERS;
reg.OpenKey('',false);
reg.GetKeyNames(KeyNames);
i:=KeyNames.Count-1;
while i>=1 do
  begin
  reg.CloseKey;
  if (reg.KeyExists(KeyNames.Strings[i]+'\Software\Microsoft\Windows\CurrentVersion\Explorer')) and not((KeyNames.Strings[i]='.DEFAULT')or not((KeyNames.Strings[i][Length(KeyNames.Strings[i])]<>'s')and(KeyNames.Strings[i][Length(KeyNames.Strings[i-1])]<>'e'))) then
    begin
    reg.OpenKey(KeyNames.Strings[i]+'\Software\Microsoft\Windows\CurrentVersion\Explorer',false);
    if reg.ValueExists('Logon User Name') then
      begin
      if reg.ReadString('Logon User Name')<>'then
        begin
        Sids.Add(KeyNames.Strings[i]);
        Users.Add(reg.ReadString('Logon User Name'));
        end;
      end;
    end;
  i:=i-1;
  end;
end;
Der Aufruf
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  Users,Sids:TStringList;
begin
Users:=TStringList.Create;
Sids:=TStringList.Create;
GetUsersAndSIDs(Users,Sids);
Listbox1.Items:=Users;
Listbox2.Items:=Sids;
FreeAndNil(Users);
FreeAndNil(Sids);
end;
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: PSID in String umwandeln

  Alt 8. Nov 2003, 12:44
Moin SleepyMaster,

Zitat von SleepyMaster:
Zitat:
...dann stellt Delphi die Funktion guidToSting in der Unit SysUtils zur Verfügung
Macht mein Delphi (7) leider nich!
Ich denke mal, wenn Du die Unit COMOBJ mit einbindest schon
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von SleepyMaster
SleepyMaster

Registriert seit: 18. Mai 2003
634 Beiträge
 
#9

Re: PSID in String umwandeln

  Alt 8. Nov 2003, 13:16
Joahr! Dann geht ed! Aber ich hab meine eigene Procedure jetzt schon in mein Programm eingebaut.
  Mit Zitat antworten Zitat
Benutzerbild von SleepyMaster
SleepyMaster

Registriert seit: 18. Mai 2003
634 Beiträge
 
#10

Re: PSID in String umwandeln

  Alt 8. Nov 2003, 13:19
Ahhhhhhhhhhhhhhhhh!!!

Das andere geht auch!!! (SysUtils)

Wenn man anstelle von

Zitat:
guidToSting
das mal richtig schreibt und guidToString nimmt
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz