Directory Services

Example Code for Creating a Bindable String Representation of a GUID

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;
}