Lesen der ObjectGUID eines Objekts und Erstellen einer Zeichenfolgendarstellung der GUID
Die objectGUID-Eigenschaft jedes Objekts in Active Directory Domain Services wird im Verzeichnis als Oktettzeichenfolge gespeichert. Eine Oktettzeichenfolge ist ein Array von Ein-Byte-Zeichen. Verwenden Sie die IADs::get_GUID-Methode , um die bindbare Zeichenfolgenform der objectGUID eines Verzeichnisobjekts abzurufen.
Die folgenden Codebeispiele zeigen eine Funktion, die das objectGUID-Attribut liest und eine Zeichenfolgendarstellung der GUID zurückgibt, die zum Binden an das Objekt verwendet wird.
Visual Basic-Beispiel
Dim sADsPathObject As String
Dim sObjectGUID As String
Dim sBindByGuidStr As String
Dim IADsObject As IADs
Dim IADsObject2 As IADs
On Error Resume Next
' Query the user for an ADsPath to start.
sADsPathObject = InputBox("This code binds to a directory object by ADsPath, retrieves the GUID, then rebinds by GUID." & vbCrLf & vbCrLf & "Specify the ADsPath of the object to bind to :")
If sADsPathObject = "" Then
GoTo CleanUp
End If
MsgBox "Binding to " & sADsPathObject
' Bind to initial object.
Set IADsObject = GetObject(sADsPathObject)
If (Err.Number <> 0) Then
MsgBox Err.Number & " on GetObject method"
GoTo CleanUp
End If
' Save the GUID of the object.
sObjectGUID = IADsObject.Guid
MsgBox "The GUID for " & vbCrLf & vbCrLf & sADsPathObject & vbCrLf & vbCrLf & " is " & vbCrLf & vbCrLf & sObjectGUID
' Release the initial object.
Set IADsObject = Nothing
' Build a string for Binding to the object by GUID.
sBindByGuidStr = "LDAP://<GUID=" & sObjectGUID & ">"
MsgBox sBindByGuidStr
' Bind BACK to the Same object using the GUID.
Set IADsObject = GetObject(sBindByGuidStr)
If (Err.Number <> 0) Then
MsgBox Err.Number & " on GetObject method "
GoTo CleanUp
End If
MsgBox "Successfully RE bound to " & sADsPathObject & vbCrLf & vbCrLf & " using the path:" & vbCrLf & vbCrLf & sBindByGuidStr
' Release bind by GUID Object.
CleanUp:
Set IADsObject = Nothing
C++-Beispiel
#define UNICODE
#include <ole2.h>
#include <stdio.h>
#include <activeds.h>
#define PATH_SIZE 1024
void wmain(int argc, wchar_t *argv[])
{
// Initialize COM.
CoInitialize(0);
WCHAR wszADsPathObject[PATH_SIZE + 1];
HRESULT hr;
IADs *pIADsObject = NULL;
IADs *pIADsObjectByGuid = NULL;
// If no ADsPath was specified on the command line, query the user for a ADsPath to start.
if(!argv[1])
{
_putws(L"This code binds to a directory object by ADsPath, retrieves the GUID,\n"
L" then rebinds by GUID. \n\nEnter the ADsPath of the object to bind to :\n");
fgetws(wszADsPathObject, PATH_SIZE, stdin);
}
else
{
wcsncpy_s(wszADsPathObject, argv[1], PATH_SIZE - 1);
wszADsPathObject[PATH_SIZE] = 0;
}
if (!wszADsPathObject[0])
{
return;
}
wprintf(L"\nBinding to %s\n", wszADsPathObject);
// Bind to initial object.
hr = ADsGetObject(wszADsPathObject, IID_IADs, (void**)&pIADsObject);
if (SUCCEEDED(hr))
{
BSTR bstrGuid = NULL;
hr = pIADsObject->get_GUID(&bstrGuid);
if (SUCCEEDED(hr))
{
LPWSTR wszFormat = L"LDAP://<GUID=%s>";
LPWSTR pwszBindByGuidStr;
wprintf(L"\n The GUID for\n\n%s\n\nis\n\n%s\n", wszADsPathObject, bstrGuid);
// Build a string for Binding to the object by GUID.
pwszBindByGuidStr = new WCHAR[wcslen(wszFormat) + wcslen(bstrGuid) + 1];
if(pwszBindByGuidStr)
{
swprintf_s(pwszBindByGuidStr, wszFormat, bstrGuid);
// Bind BACK to the Same object using the GUID.
hr = ADsGetObject(pwszBindByGuidStr, IID_IADs, (void**)&pIADsObjectByGuid);
if (SUCCEEDED(hr))
{
wprintf(L"\nSuccessfully re-bound to\n\n%s\n\nUsing the path:\n\n%s\n",
wszADsPathObject, pwszBindByGuidStr);
// Release bind by GUID Object.
pIADsObjectByGuid->Release();
pIADsObjectByGuid = NULL;
}
delete pwszBindByGuidStr;
}
else
{
hr = E_OUTOFMEMORY;
}
SysFreeString(bstrGuid);
}
pIADsObject->Release();
pIADsObject = NULL;
}
if (FAILED(hr))
{
wprintf(L"Failed");
}
}