Scénario pour la conversion GUID dans une chaîne B. Active Directory

J'essaie de comprendre le scénario suivant VB, qui convertit GUID Dans la chaîne de l'Active Directory:

http://support.microsoft.com/d ... 25649
Cet article montre comment convertir la forme hexadécimale de l'identifiant. GUID L'objet dans la forme de la chaîne:

Insérez le code suivant dans le fichier .vbs.

'================================================================
'Set the next line to reflect a DN for an object in the directory
'================================================================
Set obj = GetObject("LDAP://CN=Username,CN=Users,DC=DOMAIN,DC=COM")
MsgBox "The GUID string Value for user " & obj.Get("DisplayName") & _
" is " & ConvertHexStringGUIDToStringGUID(obj.GUID)

'================================================================
' ConvertHexStringGUIDToStringGUID function
'================================================================
Function ConvertHexStringGUIDToStringGUID(strOctet)
Dim tmpGUID, GUIDStr
'Convert the string by flipping the bits around.
GUIDStr = Mid(strOctet, 7, 2)
GUIDStr = GUIDStr + Mid(strOctet, 5, 2)
GUIDStr = GUIDStr + Mid(strOctet, 3, 2)
GUIDStr = GUIDStr + Mid(strOctet, 1, 2)
GUIDStr = GUIDStr + Mid(strOctet, 11, 2)
GUIDStr = GUIDStr + Mid(strOctet, 9, 2)
GUIDStr = GUIDStr + Mid(strOctet, 15, 2)
GUIDStr = GUIDStr + Mid(strOctet, 13, 2)
GUIDStr = GUIDStr + Mid(strOctet, 17, Len(strOctet))

tmpGUID = "{" & Mid(GUIDStr, 1, 8) & "-" & Mid(GUIDStr, 9, 4) & _
"-" & Mid(GUIDStr, 13, 4) & "-" & Mid(GUIDStr, 17, 4) & _
"-" & Mid(GUIDStr, 21, 15) & "}"

ConvertHexStringGUIDToStringGUID = tmpGUID
End Function

J'ai une question:

Quel est le résultat de ce script?

Vous devez avoir un compte de domaine pour exécuter la commande

Set obj = GetObject("LDAP://CN=Username,CN=Users,DC=DOMAIN,DC=COM")

?
Invité:

Christine

Confirmation de:

Première réponse à la dernière question: Oui, vous avez besoin d'un compte de domaine, sinon

GetObject()

Ne réussira pas.

Quant à votre première question:

GUID

La propriété renvoie la chaîne de valeurs hexadécimales ordonnées conformément à
http://msdn.microsoft.com/en-u ... .aspx
. Depuis la première 4 Les octets sont stockés comme DWORD, Derrière lequel suivre 2 WORD, tu devrais prendre
http://en.wikipedia.org/wiki/Endianness
Dans le compte. Voitures Intel stockée WORD et DWORD directement octet (
http://en.wikipedia.org/wiki/L ... _byte
first), Donc, vous devez d'abord changer l'ordre des octets 4 octets. Le reste de la structure de données est une gamme d'octets, de sorte que ces octets sont déjà dans le bon ordre.

Exemple:

Supposons que vous ayez une telle ligne hexadécimale:

000102030405060708090a0b0c0d0e0f

Vous l'auriez brisé comme ceci:

00010203 0405 0607 08090a0b0c0d0e0f
DWORD WORD WORD BYTE[]

En raison du codage de vélo, vous devez modifier l'ordre du premier. 4 octet (Chaque hexadécimal à 2 chiffres représente 1 octet):

03020100 0504 0706 08090a0b0c0d0e0f

C'est ce que cette partie du code fait (mes commentaires):

' reverse DWORD
GUIDStr = Mid(strOctet, 7, 2)
GUIDStr = GUIDStr + Mid(strOctet, 5, 2)
GUIDStr = GUIDStr + Mid(strOctet, 3, 2)
GUIDStr = GUIDStr + Mid(strOctet, 1, 2)
' reverse 1st WORD
GUIDStr = GUIDStr + Mid(strOctet, 11, 2)
GUIDStr = GUIDStr + Mid(strOctet, 9, 2)
' reverse 2nd WORD
GUIDStr = GUIDStr + Mid(strOctet, 15, 2)
GUIDStr = GUIDStr + Mid(strOctet, 13, 2)

Le reste de la chaîne est une gamme d'octets, de sorte que ces octets sont utilisés dans l'ordre suivant:

GUIDStr = GUIDStr + Mid(strOctet, 17, Len(strOctet))

Les instructions suivantes forment une ligne hexadécimale dans une chaîne GUID, Numéros de regroupement appropriés (8-4-4-4-12):

tmpGUID = "{" & Mid(GUIDStr,  1,  8) & "-" & Mid(GUIDStr,  9, 4) & _
"-" & Mid(GUIDStr, 13, 4) & "-" & Mid(GUIDStr, 17, 4) & _
"-" & Mid(GUIDStr, 21, 15) & "}"

Le résultat est la ligne suivante:

{03020100-0504-0706-0809-0a0b0c0d0e0f}

Voir également
http://blogs.msdn.com/b/ericli ... .aspx
D'Eric Lippert pour une explication plus détaillée.

Pour répondre aux questions, connectez-vous ou registre