home *** CD-ROM | disk | FTP | other *** search
- //----------------------------------------------------------------------
- //
- // 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);
- }
-
-