Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//----------------------------------------------------------------------
//
// Microsoft Active Directory 1.0 Sample Code
//
// Copyright (C) Microsoft Corporation, 1996
//
// File: dump.cxx
//
// Contents: Functions for dumping the properties for an object.
//
//
//----------------------------------------------------------------------
#include "main.hxx"
//
// Given an ADsPath, bind to the object and call the DumpObject routine.
//
int DoDump(char *AnsiADsPath) { HRESULT hr = E_OUTOFMEMORY ; LPWSTR pszADsPath = NULL; IADs * pADs = NULL;
//
// Convert path to unicode and then bind to the object.
//
BAIL_ON_NULL(pszADsPath = AllocateUnicodeString(AnsiADsPath));
hr = ADsGetObject( pszADsPath, IID_IADs, (void **)&pADs );
if (FAILED(hr)) {
printf("Failed to bind to object: %S\n", pszADsPath) ; } else {
//
// Dump the object
//
hr = DumpObject(pADs);
if (FAILED(hr)) {
printf("Unable to read properties of: %S\n", pszADsPath) ; }
pADs->Release(); }
error:
FreeUnicodeString(pszADsPath);
return (FAILED(hr) ? 1 : 0) ; }
//
// Given an ADs pointer, dump the contents of the object
//
HRESULT DumpObject( IADs * pADs ) { HRESULT hr; HRESULT hrSA; IADs * pADsProp = NULL; VARIANT var; ZeroMemory(&var,sizeof(var)); VARIANT * pvarPropName = NULL; DWORD i = 0; VARIANT varProperty; IDispatch * pDispatch = NULL;
//
// Access the schema for the object
//
hr = GetPropertyList( pADs, &var); BAIL_ON_FAILURE(hr);
//
// List the Properties
//
hr = SafeArrayAccessData(var.parray, (void **) &pvarPropName); BAIL_ON_FAILURE(hr);
for (i = 0; i < var.parray->rgsabound[0].cElements; i++){
//
// Get a property and print it out. The HRESULT is passed to
// PrintProperty.
//
hr = pADs->Get( pvarPropName[i].bstrVal, &varProperty ); PrintProperty( pvarPropName[i].bstrVal, hr, varProperty );
}
hr = SafeArrayUnaccessData(var.parray);
error: // Don't destroy hr in case we're here from BAIL_ON_FAILURE
if(var.parray) hrSA = SafeArrayDestroy(var.parray);
return(hr); }
HRESULT GetPropertyList( IADs * pADs, VARIANT * pvar ) { HRESULT hr= S_OK; BSTR bstrSchemaPath = NULL; IADsClass * pADsClass = NULL;
hr = pADs->get_Schema(&bstrSchemaPath); BAIL_ON_FAILURE(hr);
hr = ADsGetObject( bstrSchemaPath, IID_IADsClass, (void **)&pADsClass); BAIL_ON_FAILURE(hr);
//Put SafeArray of bstr's into input variant struct
hr = pADsClass->get_MandatoryProperties(pvar); BAIL_ON_FAILURE(hr);
error: if (bstrSchemaPath) { SysFreeString(bstrSchemaPath); }
if (pADsClass) { pADsClass->Release(); }
return(hr); }
|