讀取物件的 objectGUID 和建立 GUID 的字串表示法
Active Directory 網域服務 中每個物件的 objectGUID 屬性會以八位字串的形式儲存在目錄中。 八位字串是一位元組字元的陣列。 使用 IADs::get_GUID 方法來擷取目錄物件 objectGUID 的可繫結字串形式。
下列程式代碼範例顯示讀取 objectGUID 屬性的 函式,並傳回用來系結至物件的 GUID 字串表示。
Visual Basic 範例
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++ 範例
#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");
}
}