6 Appendix A: Full IDL

For ease of implementation, the full IDL is provided, where "ms-oaut.idl" is the IDL found in [MS-OAUT] Appendix A.

 import "ms-dtyp.idl";
 import "ms-oaut.idl";
  
 typedef GUID *REFGUID;
  
 interface IWbemClassObject;
 interface IWbemServices;
 interface IWbemObjectSink;
 interface IEnumWbemClassObject;
 interface IWbemCallResult;
 interface IWbemContext;
 interface IWbemBackupRestore;
 interface IWbemBackupRestoreEx;
 interface IWbemLoginClientID;
 interface IWbemLevel1Login;
 interface IWbemLoginHelper;        
  
 [
     restricted, 
     uuid(8BC3F05E-D86B-11d0-A075-00C04FB68820)
 ]
 coclass WbemLevel1Login {
     interface IWbemLevel1Login;
 };
  
 typedef long HRESULT;
  
 typedef [v1_enum] enum tag_WBEM_QUERY_FLAG_TYPE {
     WBEM_FLAG_DEEP = 0,
     WBEM_FLAG_SHALLOW = 1,
     WBEM_FLAG_PROTOTYPE = 2
 } WBEM_QUERY_FLAG_TYPE;
  
 typedef [v1_enum] enum tag_WBEM_CHANGE_FLAG_TYPE {
     WBEM_FLAG_CREATE_OR_UPDATE = 0x00,
     WBEM_FLAG_UPDATE_ONLY = 0x01,
     WBEM_FLAG_CREATE_ONLY = 0x02,
     WBEM_FLAG_UPDATE_SAFE_MODE = 0x20,
     WBEM_FLAG_UPDATE_FORCE_MODE = 0x40
 } WBEM_CHANGE_FLAG_TYPE;
  
 typedef [v1_enum] enum tag_WBEM_CONNECT_OPTIONS {
     WBEM_FLAG_CONNECT_REPOSITORY_ONLY =  0x40,
     WBEM_FLAG_CONNECT_PROVIDERS       = 0x100
 } WBEM_CONNECT_OPTIONS;
  
 typedef [v1_enum] enum tag_WBEM_GENERIC_FLAG_TYPE {
     WBEM_FLAG_RETURN_WBEM_COMPLETE = 0x0,
     WBEM_FLAG_RETURN_IMMEDIATELY = 0x10,
     WBEM_FLAG_FORWARD_ONLY = 0x20,
     WBEM_FLAG_NO_ERROR_OBJECT = 0x40,
     WBEM_FLAG_SEND_STATUS = 0x80,
     WBEM_FLAG_ENSURE_LOCATABLE = 0x100,
     WBEM_FLAG_DIRECT_READ = 0x200,
     WBEM_MASK_RESERVED_FLAGS = 0x1F000,
     WBEM_FLAG_USE_AMENDED_QUALIFIERS = 0x20000,
     WBEM_FLAG_STRONG_VALIDATION = 0x100000
 } WBEM_GENERIC_FLAG_TYPE;
  
 typedef enum tag_WBEM_STATUS_TYPE {
     WBEM_STATUS_COMPLETE = 0,
     WBEM_STATUS_REQUIREMENTS = 0x01,
     WBEM_STATUS_PROGRESS = 2
 } WBEM_STATUS_TYPE;
  
 typedef [v1_enum] enum tag_WBEM_TIMEOUT_TYPE {
     WBEM_NO_WAIT = 0,
     WBEM_INFINITE = 0xFFFFFFFF
 } WBEM_TIMEOUT_TYPE;
  
 typedef [v1_enum] enum tag_WBEM_BACKUP_RESTORE_FLAGS {
     WBEM_FLAG_BACKUP_RESTORE_FORCE_SHUTDOWN = 1
 } WBEM_BACKUP_RESTORE_FLAGS;
  
 typedef [v1_enum] enum tag_WBEMSTATUS {
     WBEM_S_NO_ERROR = 0x00,
     WBEM_S_FALSE = 0x01,
     WBEM_S_TIMEDOUT = 0x40004,
     WBEM_S_NEW_STYLE = 0x400FF,
     WBEM_S_PARTIAL_RESULTS = 0x40010,
     WBEM_E_FAILED = 0x80041001,
     WBEM_E_NOT_FOUND = 0x80041002,
     WBEM_E_ACCESS_DENIED = 0x80041003,
     WBEM_E_PROVIDER_FAILURE = 0x80041004,
     WBEM_E_TYPE_MISMATCH = 0x80041005,
     WBEM_E_OUT_OF_MEMORY = 0x80041006,
     WBEM_E_INVALID_CONTEXT = 0x80041007,
     WBEM_E_INVALID_PARAMETER = 0x80041008,
     WBEM_E_NOT_AVAILABLE = 0x80041009,
     WBEM_E_CRITICAL_ERROR = 0x8004100a,
     WBEM_E_NOT_SUPPORTED = 0x8004100C,
     WBEM_E_PROVIDER_NOT_FOUND = 0x80041011,
     WBEM_E_INVALID_PROVIDER_REGISTRATION = 0x80041012,
     WBEM_E_PROVIDER_LOAD_FAILURE = 0x80041013,
     WBEM_E_INITIALIZATION_FAILURE = 0x80041014,
     WBEM_E_TRANSPORT_FAILURE = 0x80041015,
     WBEM_E_INVALID_OPERATION = 0x80041016,
     WBEM_E_ALREADY_EXISTS = 0x80041019,
     WBEM_E_UNEXPECTED = 0x8004101d,
     WBEM_E_INCOMPLETE_CLASS = 0x80041020,
     WBEM_E_SHUTTING_DOWN = 0x80041033,
     E_NOTIMPL = 0x80004001,
     WBEM_E_INVALID_SUPERCLASS = 0x8004100D,
     WBEM_E_INVALID_NAMESPACE = 0x8004100E,
     WBEM_E_INVALID_OBJECT = 0x8004100F,
     WBEM_E_INVALID_CLASS = 0x80041010,
     WBEM_E_INVALID_QUERY = 0x80041017,
     WBEM_E_INVALID_QUERY_TYPE = 0x80041018,
     WBEM_E_PROVIDER_NOT_CAPABLE = 0x80041024,
     WBEM_E_CLASS_HAS_CHILDREN = 0x80041025,
     WBEM_E_CLASS_HAS_INSTANCES = 0x80041026,
     WBEM_E_ILLEGAL_NULL = 0x80041028,
     WBEM_E_INVALID_CIM_TYPE = 0x8004102D,
     WBEM_E_INVALID_METHOD = 0x8004102E,
     WBEM_E_INVALID_METHOD_PARAMETERS = 0x8004102F,
     WBEM_E_INVALID_PROPERTY = 0x80041031,
     WBEM_E_CALL_CANCELLED = 0x80041032,
     WBEM_E_INVALID_OBJECT_PATH = 0x8004103A,
     WBEM_E_OUT_OF_DISK_SPACE = 0x8004103B,
     WBEM_E_UNSUPPORTED_PUT_EXTENSION = 0x8004103D,
     WBEM_E_QUOTA_VIOLATION = 0x8004106c,
     WBEM_E_SERVER_TOO_BUSY = 0x80041045,
     WBEM_E_METHOD_NOT_IMPLEMENTED = 0x80041055,
     WBEM_E_METHOD_DISABLED = 0x80041056,
     WBEM_E_UNPARSABLE_QUERY = 0x80041058,
     WBEM_E_NOT_EVENT_CLASS = 0x80041059,
     WBEM_E_MISSING_GROUP_WITHIN = 0x8004105A,
     WBEM_E_MISSING_AGGREGATION_LIST = 0x8004105B,
     WBEM_E_PROPERTY_NOT_AN_OBJECT = 0x8004105c,
     WBEM_E_AGGREGATING_BY_OBJECT = 0x8004105d,
     WBEM_E_BACKUP_RESTORE_WINMGMT_RUNNING = 0x80041060,
     WBEM_E_QUEUE_OVERFLOW = 0x80041061,
     WBEM_E_PRIVILEGE_NOT_HELD = 0x80041062,
     WBEM_E_INVALID_OPERATOR = 0x80041063,
     WBEM_E_CANNOT_BE_ABSTRACT = 0x80041065,
     WBEM_E_AMENDED_OBJECT = 0x80041066,
     WBEM_E_VETO_PUT = 0x8004107A,
     WBEM_E_PROVIDER_SUSPENDED = 0x80041081,
     WBEM_E_ENCRYPTED_CONNECTION_REQUIRED = 0x80041087,
     WBEM_E_PROVIDER_TIMED_OUT = 0x80041088,
     WBEM_E_NO_KEY = 0x80041089,
     WBEM_E_PROVIDER_DISABLED = 0x8004108a,
     WBEM_E_REGISTRATION_TOO_BROAD = 0x80042001,
     WBEM_E_REGISTRATION_TOO_PRECISE = 0x80042002
 }   WBEMSTATUS;
         
  
 [
     restricted, 
     uuid(674B6698-EE92-11d0-AD71-00C04FD8FDFF)
 ]
 coclass WbemContext
 {
     interface IWbemContext;
 };
  
  
 [
     uuid(9A653086-174F-11d2-B5F9-00104B703EFD)
 ]
 coclass WbemClassObject
 {
     interface IWbemClassObject;
 };
  
  
 [
     uuid(C49E32C6-BC8B-11d2-85D4-00105A1F8304)
 ]
 coclass WbemBackupRestore
 {
     interface IWbemBackupRestoreEx;
 };
  
 #define OPTIONAL in, unique
  
 interface IWbemQualifierSet;
  
 [
     local,
     restricted,
     object,
     uuid(dc12a681-737f-11cf-884d-00aa004b2e24)
 ]
 interface IWbemClassObject : IUnknown
 {
 };
  
 interface IWbemServices;
  
  
 [
     object, 
     restricted, 
     uuid(7c857801-7381-11cf-884d-00aa004b2e24)
 ]
 interface IWbemObjectSink : IUnknown
 {
     HRESULT Indicate(
         [in] long lObjectCount,
         [in, size_is(lObjectCount)]
             IWbemClassObject** apObjArray
     );
  
     HRESULT SetStatus(
         [in] long lFlags,
         [in] HRESULT hResult,
         [in] BSTR strParam,
         [in] IWbemClassObject* pObjParam
     );
 };
  
 [
     object, 
     restricted, 
     uuid(027947e1-d731-11ce-a357-000000000001)
 ]
 interface IEnumWbemClassObject : IUnknown
 {
     HRESULT Reset();
  
     HRESULT Next(
         [in]  long lTimeout,
         [in]  ULONG uCount,
         [out, size_is(uCount), length_is(*puReturned)]
               IWbemClassObject** apObjects,
         [out] ULONG* puReturned
     );
  
     HRESULT NextAsync(
         [in]  ULONG uCount,
         [in]  IWbemObjectSink* pSink
     );
  
     HRESULT Clone(
         [out] IEnumWbemClassObject** ppEnum
     );
  
     HRESULT Skip(
         [in] long lTimeout,
         [in] ULONG nCount
     );
 };
  
  
 [
     object,
     restricted,
     local,
     uuid(44aca674-e8fc-11d0-a07c-00c04fb68820)
 ]
 interface IWbemContext : IUnknown
 {
 };
  
  
 [
     object, 
     restricted, 
     uuid(44aca675-e8fc-11d0-a07c-00c04fb68820)
 ]
 interface IWbemCallResult : IUnknown
 {
     HRESULT GetResultObject(
         [in]  long lTimeout,
         [out] IWbemClassObject** ppResultObject
     );
  
     HRESULT GetResultString(
         [in]  long lTimeout,
         [out] BSTR* pstrResultString
     );
  
     HRESULT GetResultServices(
         [in]  long lTimeout,
         [out] IWbemServices** ppServices
     );
  
     HRESULT GetCallStatus(
         [in]  long lTimeout,
         [out] long* plStatus
     );
 };
  
  
 [
     object, 
     restricted, 
     uuid(9556dc99-828c-11cf-a37e-00aa003240c7),
     pointer_default(unique)
 ]
 interface IWbemServices : IUnknown
 {
     HRESULT OpenNamespace(
         [in]  const BSTR strNamespace,
         [in]  long lFlags,
         [in]  IWbemContext* pCtx,
         [out, in, unique] IWbemServices** ppWorkingNamespace,
         [out, in, unique] IWbemCallResult** ppResult
     );
  
     HRESULT CancelAsyncCall(
         [in] IWbemObjectSink* pSink
     );
  
     HRESULT QueryObjectSink(
         [in] long lFlags,
         [out] IWbemObjectSink** ppResponseHandler
     );
  
     HRESULT GetObject(
         [in]  const BSTR strObjectPath,
         [in]  long lFlags,
         [in]  IWbemContext* pCtx,
         [out, in, unique] IWbemClassObject** ppObject,
         [out, in, unique] IWbemCallResult** ppCallResult
     );
  
     HRESULT GetObjectAsync(
         [in]  const BSTR strObjectPath,
         [in]  long lFlags,
         [in]  IWbemContext* pCtx,
         [in]  IWbemObjectSink* pResponseHandler
     );
   
     HRESULT PutClass(
         [in] IWbemClassObject* pObject,
         [in] long lFlags,
         [in]  IWbemContext* pCtx,
         [out, in, unique] IWbemCallResult** ppCallResult
     );
  
     HRESULT PutClassAsync(
         [in] IWbemClassObject* pObject,
         [in] long lFlags,
         [in] IWbemContext* pCtx,
         [in] IWbemObjectSink* pResponseHandler
     );
  
     HRESULT DeleteClass(
         [in] const BSTR strClass,
         [in] long lFlags,
         [in] IWbemContext* pCtx,
         [out, in, unique] IWbemCallResult** ppCallResult
     );
  
     HRESULT DeleteClassAsync(
         [in] const BSTR strClass,
         [in] long lFlags,
         [in] IWbemContext* pCtx,
         [in] IWbemObjectSink* pResponseHandler
     );
  
     HRESULT CreateClassEnum(
         [in]  const BSTR strSuperclass,
         [in]  long lFlags,
         [in]  IWbemContext* pCtx,
         [out] IEnumWbemClassObject** ppEnum
     );
  
     HRESULT CreateClassEnumAsync(
         [in]  const BSTR strSuperclass,
         [in]  long lFlags,
         [in]  IWbemContext* pCtx,
         [in]  IWbemObjectSink* pResponseHandler
     );
  
     HRESULT PutInstance(
         [in]  IWbemClassObject* pInst,
         [in]  long lFlags,
         [in]  IWbemContext* pCtx,
         [out, in, unique] IWbemCallResult** ppCallResult
     );
  
     HRESULT PutInstanceAsync(
         [in] IWbemClassObject* pInst,
         [in] long lFlags,
         [in] IWbemContext* pCtx,
         [in] IWbemObjectSink* pResponseHandler
     );
  
     HRESULT DeleteInstance(
         [in] const BSTR strObjectPath,
         [in] long lFlags,
         [in]  IWbemContext* pCtx,
         [out, in, unique] IWbemCallResult** ppCallResult
     );
  
     HRESULT DeleteInstanceAsync(
         [in] const BSTR strObjectPath,
         [in] long lFlags,
         [in] IWbemContext* pCtx,
         [in] IWbemObjectSink* pResponseHandler
     );
  
     HRESULT CreateInstanceEnum(
         [in] const BSTR strSuperClass,         
         [in] long lFlags,
         [in]  IWbemContext* pCtx,
         [out] IEnumWbemClassObject** ppEnum
     );
  
     HRESULT CreateInstanceEnumAsync(
         [in] const BSTR strSuperClass,          
         [in] long lFlags,
         [in] IWbemContext* pCtx,
         [in] IWbemObjectSink* pResponseHandler
     );
  
     HRESULT ExecQuery(
         [in]  const BSTR strQueryLanguage,
         [in]  const BSTR strQuery,
         [in]  long lFlags,
         [in]  IWbemContext* pCtx,
         [out] IEnumWbemClassObject** ppEnum
     );
  
     HRESULT ExecQueryAsync(
         [in] const BSTR strQueryLanguage,
         [in] const BSTR strQuery,
         [in] long lFlags,
         [in] IWbemContext* pCtx,
         [in] IWbemObjectSink* pResponseHandler
     );
  
     HRESULT ExecNotificationQuery(
         [in] const BSTR strQueryLanguage,
         [in] const BSTR strQuery,
         [in] long lFlags,
         [in]  IWbemContext* pCtx,
         [out] IEnumWbemClassObject** ppEnum
     );
  
     HRESULT ExecNotificationQueryAsync(
         [in] const BSTR strQueryLanguage,
         [in] const BSTR strQuery,
         [in] long lFlags,
         [in] IWbemContext* pCtx,
         [in] IWbemObjectSink* pResponseHandler
     );
  
     HRESULT ExecMethod(
         [in] const BSTR strObjectPath,
         [in] const BSTR strMethodName,
         [in] long lFlags,
         [in] IWbemContext* pCtx,
         [in] IWbemClassObject* pInParams,
         [out, in, unique] IWbemClassObject** ppOutParams,
         [out, in, unique] IWbemCallResult** ppCallResult
     );
  
     HRESULT ExecMethodAsync(
         [in] const BSTR strObjectPath,
         [in] const BSTR strMethodName,
         [in] long lFlags,
         [in] IWbemContext* pCtx,
         [in] IWbemClassObject* pInParams,
         [in] IWbemObjectSink* pResponseHandler
     );
 };
  
 [
     object, 
     restricted, 
     uuid(C49E32C7-BC8B-11d2-85D4-00105A1F8304)
 ]
 interface IWbemBackupRestore : IUnknown
 {
     HRESULT Backup(
         [in, string] LPCWSTR strBackupToFile,
         [in] long lFlags
     );
  
     HRESULT Restore(
         [in, string] LPCWSTR strRestoreFromFile,
         [in] long lFlags
     );
 };
  
  
 [
     object, 
     restricted, 
     uuid(A359DEC5-E813-4834-8A2A-BA7F1D777D76)
 ]
 interface IWbemBackupRestoreEx : IWbemBackupRestore
 {
     HRESULT Pause();
     HRESULT Resume();
 };
  
  
 typedef enum _WBEM_REFR_VERSION_NUMBER {
     WBEM_REFRESHER_VERSION  = 2
 } WBEM_REFR_VERSION_NUMBER;
  
 typedef [v1_enum] enum _WBEM_INSTANCE_BLOB_TYPE {
     WBEM_BLOB_TYPE_ALL = 2,
     WBEM_BLOB_TYPE_ERROR = 3,
     WBEM_BLOB_TYPE_ENUM = 4
 } WBEM_INSTANCE_BLOB_TYPE;
  
 typedef struct _WBEM_REFRESHED_OBJECT {
     long m_lRequestId;
     WBEM_INSTANCE_BLOB_TYPE m_lBlobType;
     long m_lBlobLength;
     [size_is(m_lBlobLength)] byte* m_pbBlob;
 } WBEM_REFRESHED_OBJECT;
  
 [
     restricted, 
     uuid(F1E9C5B2-F59B-11d2-B362-00105A1F8177)
 ]
 interface IWbemRemoteRefresher : IUnknown {
     HRESULT RemoteRefresh(
         [in] long lFlags,
         [out] long* plNumObjects,
         [out, size_is(,*plNumObjects)] 
             WBEM_REFRESHED_OBJECT** paObjects
     );
  
     HRESULT StopRefreshing(
         [in] long lNumIds,
         [in, size_is(lNumIds)] long* aplIds,
         [in] long lFlags
     );
  
     HRESULT Opnum5NotUsedOnWire(
         [in] long lFlags,
         [out] GUID* pGuid
     );
 };
  
  
 typedef struct {
     IWbemRemoteRefresher* m_pRefresher;
     IWbemClassObject*     m_pTemplate;
     GUID                  m_Guid;
 } _WBEM_REFRESH_INFO_REMOTE;
  
 typedef struct {
     [string] wchar_t* m_wszNamespace;
     IWbemClassObject* m_pTemplate;
 } _WBEM_REFRESH_INFO_NON_HIPERF;
  
 typedef enum 
 {
     WBEM_REFRESH_TYPE_INVALID = 0,
     WBEM_REFRESH_TYPE_REMOTE = 3,
     WBEM_REFRESH_TYPE_NON_HIPERF = 6
 }WBEM_REFRESH_TYPE; 
  
 typedef [switch_type(long)] union {
     [case (WBEM_REFRESH_TYPE_REMOTE)]
         _WBEM_REFRESH_INFO_REMOTE m_Remote;
  
     [case (WBEM_REFRESH_TYPE_NON_HIPERF)]
         _WBEM_REFRESH_INFO_NON_HIPERF m_NonHiPerf;
  
     [case (WBEM_REFRESH_TYPE_INVALID)]
         HRESULT m_hres;
  
 } WBEM_REFRESH_INFO_UNION;
  
 typedef struct {
     long m_lType;
     [switch_is(m_lType)] WBEM_REFRESH_INFO_UNION m_Info;
     long m_lCancelId;
 } _WBEM_REFRESH_INFO;
  
 typedef struct {
     [string] LPSTR m_szMachineName;
     DWORD          m_dwProcessId;
     GUID           m_guidRefresherId;
 } _WBEM_REFRESHER_ID;
  
 typedef enum {
    WBEM_RECONNECT_TYPE_OBJECT = 0,
    WBEM_RECONNECT_TYPE_ENUM = 1,
    WBEM_RECONNECT_TYPE_LAST = 2
 }WBEM_RECONNECT_TYPE;
  
 typedef struct {
     long m_lType;
     [string] LPCWSTR m_pwcsPath;
 } _WBEM_RECONNECT_INFO;
  
 typedef struct {  
    long m_lId;  
    HRESULT m_hr;
 } _WBEM_RECONNECT_RESULTS;
  
 [
     restricted, 
     uuid(2C9273E0-1DC3-11d3-B364-00105A1F8177)
 ]
 interface IWbemRefreshingServices : IUnknown
 {
     HRESULT AddObjectToRefresher(
         [in] _WBEM_REFRESHER_ID* pRefresherId,
         [in, string] LPCWSTR wszPath,
         [in] long lFlags,
         [in] IWbemContext* pContext,
         [in] DWORD dwClientRefrVersion,
         [out] _WBEM_REFRESH_INFO* pInfo,
         [out] DWORD* pdwSvrRefrVersion
     );
  
     HRESULT AddObjectToRefresherByTemplate(
         [in] _WBEM_REFRESHER_ID* pRefresherId,
         [in] IWbemClassObject* pTemplate,
         [in] long lFlags,
         [in] IWbemContext* pContext,
         [in] DWORD dwClientRefrVersion,
         [out] _WBEM_REFRESH_INFO* pInfo,
         [out] DWORD* pdwSvrRefrVersion
     );
  
     HRESULT AddEnumToRefresher(
         [in] _WBEM_REFRESHER_ID* pRefresherId,
         [in, string] LPCWSTR wszClass,
         [in] long lFlags,
         [in] IWbemContext* pContext,
         [in] DWORD dwClientRefrVersion,
         [out] _WBEM_REFRESH_INFO* pInfo,
         [out] DWORD* pdwSvrRefrVersion
     );
  
     HRESULT RemoveObjectFromRefresher(
         [in] _WBEM_REFRESHER_ID* pRefresherId,
         [in] long lId,
         [in] long lFlags,
         [in] DWORD dwClientRefrVersion,
         [out] DWORD* pdwSvrRefrVersion
     );
  
     HRESULT GetRemoteRefresher( 
         [in] _WBEM_REFRESHER_ID* pRefresherId,
         [in] long lFlags,
         [in] DWORD dwClientRefrVersion,
         [out] IWbemRemoteRefresher** ppRemRefresher,
         [out] GUID* pGuid,
         [out] DWORD* pdwSvrRefrVersion
     );
  
     HRESULT ReconnectRemoteRefresher(
         [in] _WBEM_REFRESHER_ID* pRefresherId,
         [in] long lFlags,
         [in] long lNumObjects,
         [in] DWORD dwClientRefrVersion,
         [in, size_is(lNumObjects)] 
             _WBEM_RECONNECT_INFO* apReconnectInfo,
         [in, out, size_is(lNumObjects)] 
             _WBEM_RECONNECT_RESULTS* apReconnectResults,
         [out] DWORD* pdwSvrRefrVersion
     );
 };
  
  
 [
     restricted, 
     object, 
     uuid(423EC01E-2E35-11d2-B604-00104B703EFD)
 ]
 interface IWbemWCOSmartEnum : IUnknown
 {
     HRESULT Next(
         [in] REFGUID proxyGUID,
         [in] long lTimeout,
         [in] ULONG uCount,
         [out] ULONG* puReturned,
         [out] ULONG* pdwBuffSize,
         [out, size_is(,*pdwBuffSize)] byte** pBuffer
         );
 };
  
 [
     restricted, 
     object, 
     uuid(1C1C45EE-4395-11d2-B60B-00104B703EFD)
 ]
 interface IWbemFetchSmartEnum : IUnknown
 {
     HRESULT GetSmartEnum(
         [out] IWbemWCOSmartEnum** ppSmartEnum
     );
 };
  
 [
     restricted, 
     object, 
     uuid(d4781cd6-e5d3-44df-ad94-930efe48a887)
 ]
 interface IWbemLoginClientID : IUnknown
 {
     HRESULT SetClientInfo(
         [in, unique, string ] LPWSTR wszClientMachine,
         [in] long lClientProcId,
         [in] long lReserved 
     );
 };
  
  
 [
     object, 
     restricted, 
     uuid(F309AD18-D86A-11d0-A075-00C04FB68820), 
     pointer_default(unique)
 ]
 interface IWbemLevel1Login :  IUnknown
 {
     HRESULT EstablishPosition(
         [in, unique, string] wchar_t* reserved1,
         [in] DWORD reserved2,
         [out] DWORD* LocaleVersion
     );
  
     HRESULT RequestChallenge(
         [in, unique, string] wchar_t* reserved1,
         [in, unique, string] wchar_t* reserved2,
         [out, size_is(16), length_is(16)] unsigned char* reserved3
     );
  
     HRESULT WBEMLogin(
         [in, unique, string] wchar_t* reserved1,
         [in, size_is(16), length_is(16), unique]  
                 unsigned char* reserved2,
         [in] long reserved3,
         [in] IWbemContext* reserved4,              
         [out] IWbemServices** reserved5
     );
  
     HRESULT NTLMLogin(
         [in, unique, string] LPWSTR wszNetworkResource,
         [in, unique, string] LPWSTR wszPreferredLocale,
         [in]   long lFlags,                   
         [in]   IWbemContext* pCtx,              
         [out]  IWbemServices** ppNamespace
     );
         
 };
  
 [
     restricted, 
     object, 
     uuid(541679AB-2E5F-11d3-B34E-00104BCC4B4A)
 ]
 interface IWbemLoginHelper : IUnknown
 {
     HRESULT SetEvent(
         [in] LPCSTR sEventToSet
     );
 };