Directory Services |
The following example demonstrates a function that returns a string representation of a GUID that can be used to bind to the object.
[C++]
//***************************************************************************
//
// GUIDtoBindableString()
//
// Converts a GUID into a string that can be used for binding with the
// <GUID= or <WKGUID= syntax. The caller must free the allocated string with
// the FreeADsStr when it is no longer needed.
//
//***************************************************************************
HRESULT GUIDtoBindableString(LPGUID pGUID, LPWSTR *ppGUIDString)
{
if((!pGUID) || (ppGUIDString==NULL))
{
return E_INVALIDARG;
}
//Build bindable GUID string.
DWORD dwBytes = sizeof(GUID);
WCHAR szByte[3];
LPWSTR pwszGUID = new WCHAR[(dwBytes * 2) + 1];
if(NULL == pwszGUID)
{
return E_OUTOFMEMORY;
}
*pwszGUID = NULL;
HRESULT hr = S_OK;
LPBYTE lpByte;
DWORD dwItem;
//Loop through to add each byte to the string.
for(dwItem = 0, lpByte = (LPBYTE)pGUID; dwItem < dwBytes ; dwItem++)
{
//Append to pwszGUID, double-byte, byte at dwItem index.
wsprintfW(szByte, L"%02x", lpByte[dwItem]);
lstrcatW(pwszGuid, szByte);
}
//Allocate memory for the string.
*ppGUIDString = AllocADsStr(pwszGUID);
delete [] pwszGUID;
if(NULL != *ppGUIDString)
{
hr = S_OK;
}
else
{
hr = E_OUTOFMEMORY;
}
//Caller must free ppGUIDString using FreeADsStr.
return hr;
}