77 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
//
 | 
						|
 | 
						|
// Copyright (c) 1997-2001 Microsoft Corporation, All Rights Reserved
 | 
						|
//
 | 
						|
#define _WIN32_WINNT    0x0500
 | 
						|
 | 
						|
#include <windows.h>
 | 
						|
#include <stdio.h>
 | 
						|
 | 
						|
#include <objbase.h>
 | 
						|
#include <wbemcli.h>
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
void main()
 | 
						|
{
 | 
						|
	// Initialize COM. Remember the DS Provider needs impersonation to be called
 | 
						|
	// so you have to call the COM function CoInitializeSecurity()
 | 
						|
	// For this, you must #define _WIN32_WINNT to be greater than 0x0400. See top of file.
 | 
						|
	if(SUCCEEDED(CoInitialize(NULL)) && SUCCEEDED(CoInitializeSecurity(NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_CONNECT, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, 0)))
 | 
						|
	{
 | 
						|
		// Create the IWbemLocator object 
 | 
						|
		IWbemLocator *t_pLocator = NULL;
 | 
						|
		if (SUCCEEDED(CoCreateInstance(CLSID_WbemLocator, 
 | 
						|
			0, 
 | 
						|
			CLSCTX_INPROC_SERVER,
 | 
						|
            IID_IWbemLocator, (LPVOID *) &t_pLocator)))
 | 
						|
		{
 | 
						|
			// Connect to the correct namespace
 | 
						|
			// The DS Provider operates in the root\directory\LDAP namespace
 | 
						|
			IWbemServices *t_pNamespace = NULL;
 | 
						|
			BSTR strNamespace = SysAllocString(L"root\\directory\\LDAP");
 | 
						|
			if(SUCCEEDED(t_pLocator->ConnectServer(strNamespace, NULL, NULL, NULL, 0, NULL, NULL, &t_pNamespace)))
 | 
						|
			{
 | 
						|
 | 
						|
				// This is *very important* since the DSProvider goes accross the process
 | 
						|
				// Every IWbemServices interface obtained form the IWbemLocator has to
 | 
						|
				// have the COM interface function IClientSecutiry::SetBlanket() called on it
 | 
						|
				// for the DS Provider to work
 | 
						|
				IClientSecurity *t_pSecurity = NULL ;
 | 
						|
				if(SUCCEEDED(t_pNamespace->QueryInterface ( IID_IClientSecurity , (LPVOID *) & t_pSecurity )))
 | 
						|
				{
 | 
						|
					t_pSecurity->SetBlanket( 
 | 
						|
						t_pNamespace , 
 | 
						|
						RPC_C_AUTHN_WINNT, 
 | 
						|
						RPC_C_AUTHZ_NONE, 
 | 
						|
						NULL,
 | 
						|
						RPC_C_AUTHN_LEVEL_CONNECT , 
 | 
						|
						RPC_C_IMP_LEVEL_IMPERSONATE, 
 | 
						|
						NULL,
 | 
						|
						EOAC_NONE
 | 
						|
					);
 | 
						|
					t_pSecurity->Release () ;
 | 
						|
				}
 | 
						|
 | 
						|
 | 
						|
				// Fetch the class from CIMOM
 | 
						|
				IWbemClassObject *pWbemClass = NULL;
 | 
						|
				HRESULT result;
 | 
						|
				if(SUCCEEDED(result = t_pNamespace->GetObject(SysAllocString(L"ds_domainDNS"), 0, NULL, &pWbemClass, NULL)))
 | 
						|
				{
 | 
						|
						CIMTYPE cimType;
 | 
						|
 | 
						|
						// Get the CIM TYPE of the property
 | 
						|
						VARIANT dummyUnused;
 | 
						|
						VariantInit(&dummyUnused);
 | 
						|
						BSTR strRajesh = SysAllocString(L"ds_wellKnownObjects");
 | 
						|
						result = pWbemClass->Get(strRajesh, 0, &dummyUnused, &cimType, NULL);
 | 
						|
						SysFreeString(strRajesh);
 | 
						|
						VariantClear(&dummyUnused);
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 |