ConvertSidToStringSid: Unterschied zwischen den Versionen

Aus API-Wiki
Wechseln zu: Navigation, Suche
Zeile 3: Zeile 3:
 
Die Funktion [[ConvertSidToStringSid]] konvertiert eine [[SID]] aus der binären Form in die Textform. Um die Textform wieder in eine [[SID]] zurückzuwandeln kann die Funktion [[ConvertStringSidToSid]] verwendet werden.
 
Die Funktion [[ConvertSidToStringSid]] konvertiert eine [[SID]] aus der binären Form in die Textform. Um die Textform wieder in eine [[SID]] zurückzuwandeln kann die Funktion [[ConvertStringSidToSid]] verwendet werden.
  
<syntaxhighlight lang="vb">
+
<syntaxhighlight lang="<syntaxhighlight lang="vb">">
 
Private Declare Function ConvertSidToStringSidA Lib "ADVAPI32.dll" ( _
 
Private Declare Function ConvertSidToStringSidA Lib "ADVAPI32.dll" ( _
 
                         ByRef lpSid As Any, _
 
                         ByRef lpSid As Any, _
Zeile 21: Zeile 21:
 
==Rückgabe==
 
==Rückgabe==
 
Wenn die Funktion erfolgreich war, so ist der Rückgabewert ungleich 0. Andernfalls ist ein Fehler aufgetreten, die Fehlernummer kann mit [[Err.LastDLLError]] ermittelt werden.
 
Wenn die Funktion erfolgreich war, so ist der Rückgabewert ungleich 0. Andernfalls ist ein Fehler aufgetreten, die Fehlernummer kann mit [[Err.LastDLLError]] ermittelt werden.
<vb>Const ERROR_NOT_ENOUGH_MEMORY As Long = 8
+
<<syntaxhighlight lang="vb">>Const ERROR_NOT_ENOUGH_MEMORY As Long = 8
 
Const ERROR_INVALID_SID As Long = 1337&
 
Const ERROR_INVALID_SID As Long = 1337&
 
Const ERROR_INVALID_PARAMETER As Long = 87
 
Const ERROR_INVALID_PARAMETER As Long = 87
</vb>
+
</<syntaxhighlight lang="vb">>
  
 
==Hinweise==
 
==Hinweise==
Zeile 30: Zeile 30:
  
 
==Beispiel==
 
==Beispiel==
<vb>Option Explicit
+
<<syntaxhighlight lang="vb">>Option Explicit
  
 
Private Declare Function ConvertSidToStringSidW Lib "advapi32.dll" ( _
 
Private Declare Function ConvertSidToStringSidW Lib "advapi32.dll" ( _
Zeile 78: Zeile 78:
 
Private Sub Form_Load()
 
Private Sub Form_Load()
 
     Debug.Print GetStringSid("Administrator")
 
     Debug.Print GetStringSid("Administrator")
End Sub</vb>
+
End Sub</<syntaxhighlight lang="vb">>
  
 
==Betriebssystem==
 
==Betriebssystem==

Version vom 5. November 2016, 22:09 Uhr

Die Funktion ConvertSidToStringSid konvertiert eine SID aus der binären Form in die Textform. Um die Textform wieder in eine SID zurückzuwandeln kann die Funktion ConvertStringSidToSid verwendet werden.

">
Private Declare Function ConvertSidToStringSidA Lib "ADVAPI32.dll" ( _
                         ByRef lpSid As Any, _
                         ByRef lpStringSid As Long) As Long

Private Declare Function ConvertSidToStringSidW Lib "ADVAPI32.dll" ( _
                         ByRef lpSid As Any, _
                         ByRef lpStringSid As Long) As Long

Parameter

lpSid

[in] bezeichnet einen Zeiger auf eine SID

lpStringSid

[out] bezeichnet eine Variable, welche den Zeiger auf den String aufnehmen kann. Um den zurückgegebenen Speicher wieder freizugeben muss die Funktion LocalFree benutzt werden.

Rückgabe

Wenn die Funktion erfolgreich war, so ist der Rückgabewert ungleich 0. Andernfalls ist ein Fehler aufgetreten, die Fehlernummer kann mit Err.LastDLLError ermittelt werden. <<syntaxhighlight lang="vb">>Const ERROR_NOT_ENOUGH_MEMORY As Long = 8 Const ERROR_INVALID_SID As Long = 1337& Const ERROR_INVALID_PARAMETER As Long = 87 </<syntaxhighlight lang="vb">>

Hinweise

Um den String auch in ein Basic-String umwandeln zu können, muss dieser kopiert werden. Dazu stellt Windows Funktionen wie lstrlenA und lstrcpyA zur Unterstützung bereit. Die Funktion steht auch als UNICODE Version auf NT basierenden Systemen zur Verfügung und sollte auf diesen auch benutzt werden.

Beispiel

<<syntaxhighlight lang="vb">>Option Explicit

Private Declare Function ConvertSidToStringSidW Lib "advapi32.dll" ( _

       ByRef lpSid As Any, _
       ByRef lpStringSid As Long) As Long
                        

Private Declare Function lstrlen Lib "kernel32.dll" Alias "lstrlenW" ( _

       ByVal lpString As Long) As Long
       

Private Declare Function lstrcpy Lib "kernel32.dll" Alias "lstrcpyW" ( _

       ByVal lpString1 As Long, ByVal lpString2 As Long) As Long
       

Private Declare Function LocalFree Lib "kernel32.dll" ( _

       ByVal hMem As Long) As Long
       

Private Declare Function LookupAccountName Lib "advapi32.dll" Alias "LookupAccountNameW" ( _

   ByVal lpSystemName As Long, ByVal lpAccountName As Long, _
   ByRef Sid As Any, ByRef cbSid As Long, _
   ByVal ReferencedDomainName As Long, ByRef cbReferencedDomainName As Long, _
   ByRef peUse As Long) As Long

Const ERROR_NONE_MAPPED As Long = 1332 Const ERROR_INSUFFICIENT_BUFFER As Long = 122

Function GetStringSid(sAccount As String) As String Dim ret As Long, bSid() As Byte, cbSid As Long Dim sDom As String, cbDom As Long Dim lpStrSid As Long, peUse As Long

   ' SID ermitteln
   Call LookupAccountName(0, StrPtr(sAccount), ByVal 0, cbSid, 0, cbDom, peUse)
   If Err.LastDllError = ERROR_INSUFFICIENT_BUFFER Then
       ' Speicher holen und SID auslesen
       ReDim bSid(0 To cbSid - 1): sDom = String$(cbDom - 1, 0)
       Call LookupAccountName(0, StrPtr(sAccount), bSid(0), cbSid, StrPtr(sDom), cbDom, peUse)
       ' SID in eine String-SID konvertieren
       If ConvertSidToStringSidW(bSid(0), lpStrSid) Then
           ' Speicher in VB holen
           GetStringSid = String$(lstrlen(lpStrSid), 0)
           ' String-SID kopieren
           Call lstrcpy(StrPtr(GetStringSid), lpStrSid)
           ' Speicher freigeben
           Call LocalFree(lpStrSid)
       End If
   End If

End Function

Private Sub Form_Load()

   Debug.Print GetStringSid("Administrator")

End Sub</<syntaxhighlight lang="vb">>

Betriebssystem

Die API-Funktion ist unter folgenden Betriebssystemen funktionsfähig:

  • Windows 2000 oder höher

Verwandte Funktionen

Weblinks

MSDN Library: ConvertSidToStringSid