File: System\ServiceModel\Administration\WbemNative.cs
Project: ndp\cdf\src\WCF\ServiceModel\System.ServiceModel.csproj (System.ServiceModel)
//------------------------------------------------------------
// Copyright (c) Microsoft Corporation.  All rights reserved.
//------------------------------------------------------------
 
namespace System.ServiceModel.Administration
{
    using System;
    using System.Collections.Generic;
    using System.Globalization;
    using System.Runtime.InteropServices;
    using System.Runtime.Serialization;
    using System.Security;
    using System.Text;
    using System.Threading;
 
    [SuppressUnmanagedCodeSecurity]
    internal class WbemNative
    {
        internal enum WbemStatus
        {
            WBEM_NO_ERROR = unchecked((int)0x00000000),
            WBEM_S_NO_ERROR = unchecked((int)0x00000000),
            WBEM_S_SAME = unchecked((int)0x00000000),
            WBEM_S_FALSE = unchecked((int)0x00000001),
            WBEM_S_ALREADY_EXISTS = unchecked((int)0x00040001),
            WBEM_S_RESET_TO_DEFAULT = unchecked((int)0x00040002),
            WBEM_S_DIFFERENT = unchecked((int)0x00040003),
            WBEM_S_TIMEDOUT = unchecked((int)0x00040004),
            WBEM_S_NO_MORE_DATA = unchecked((int)0x00040005),
            WBEM_S_OPERATION_CANCELLED = unchecked((int)0x00040006),
            WBEM_S_PENDING = unchecked((int)0x00040007),
            WBEM_S_DUPLICATE_OBJECTS = unchecked((int)0x00040008),
            WBEM_S_ACCESS_DENIED = unchecked((int)0x00040009),
            WBEM_S_PARTIAL_RESULTS = unchecked((int)0x00040010),
            WBEM_S_NO_POSTHOOK = unchecked((int)0x00040011),
            WBEM_S_POSTHOOK_WITH_BOTH = unchecked((int)0x00040012),
            WBEM_S_POSTHOOK_WITH_NEW = unchecked((int)0x00040013),
            WBEM_S_POSTHOOK_WITH_STATUS = unchecked((int)0x00040014),
            WBEM_S_POSTHOOK_WITH_OLD = unchecked((int)0x00040015),
            WBEM_S_REDO_PREHOOK_WITH_ORIGINAL_OBJECT = unchecked((int)0x00040016),
            WBEM_S_SOURCE_NOT_AVAILABLE = unchecked((int)0x00040017),
            WBEM_E_FAILED = unchecked((int)0x80041001),
            WBEM_E_NOT_FOUND = unchecked((int)0x80041002),
            WBEM_E_ACCESS_DENIED = unchecked((int)0x80041003),
            WBEM_E_PROVIDER_FAILURE = unchecked((int)0x80041004),
            WBEM_E_TYPE_MISMATCH = unchecked((int)0x80041005),
            WBEM_E_OUT_OF_MEMORY = unchecked((int)0x80041006),
            WBEM_E_INVALID_CONTEXT = unchecked((int)0x80041007),
            WBEM_E_INVALID_PARAMETER = unchecked((int)0x80041008),
            WBEM_E_NOT_AVAILABLE = unchecked((int)0x80041009),
            WBEM_E_CRITICAL_ERROR = unchecked((int)0x8004100A),
            WBEM_E_INVALID_STREAM = unchecked((int)0x8004100B),
            WBEM_E_NOT_SUPPORTED = unchecked((int)0x8004100C),
            WBEM_E_INVALID_SUPERCLASS = unchecked((int)0x8004100D),
            WBEM_E_INVALID_NAMESPACE = unchecked((int)0x8004100E),
            WBEM_E_INVALID_OBJECT = unchecked((int)0x8004100F),
            WBEM_E_INVALID_CLASS = unchecked((int)0x80041010),
            WBEM_E_PROVIDER_NOT_FOUND = unchecked((int)0x80041011),
            WBEM_E_INVALID_PROVIDER_REGISTRATION = unchecked((int)0x80041012),
            WBEM_E_PROVIDER_LOAD_FAILURE = unchecked((int)0x80041013),
            WBEM_E_INITIALIZATION_FAILURE = unchecked((int)0x80041014),
            WBEM_E_TRANSPORT_FAILURE = unchecked((int)0x80041015),
            WBEM_E_INVALID_OPERATION = unchecked((int)0x80041016),
            WBEM_E_INVALID_QUERY = unchecked((int)0x80041017),
            WBEM_E_INVALID_QUERY_TYPE = unchecked((int)0x80041018),
            WBEM_E_ALREADY_EXISTS = unchecked((int)0x80041019),
            WBEM_E_OVERRIDE_NOT_ALLOWED = unchecked((int)0x8004101A),
            WBEM_E_PROPAGATED_QUALIFIER = unchecked((int)0x8004101B),
            WBEM_E_PROPAGATED_PROPERTY = unchecked((int)0x8004101C),
            WBEM_E_UNEXPECTED = unchecked((int)0x8004101D),
            WBEM_E_ILLEGAL_OPERATION = unchecked((int)0x8004101E),
            WBEM_E_CANNOT_BE_KEY = unchecked((int)0x8004101F),
            WBEM_E_INCOMPLETE_CLASS = unchecked((int)0x80041020),
            WBEM_E_INVALID_SYNTAX = unchecked((int)0x80041021),
            WBEM_E_NONDECORATED_OBJECT = unchecked((int)0x80041022),
            WBEM_E_READ_ONLY = unchecked((int)0x80041023),
            WBEM_E_PROVIDER_NOT_CAPABLE = unchecked((int)0x80041024),
            WBEM_E_CLASS_HAS_CHILDREN = unchecked((int)0x80041025),
            WBEM_E_CLASS_HAS_INSTANCES = unchecked((int)0x80041026),
            WBEM_E_QUERY_NOT_IMPLEMENTED = unchecked((int)0x80041027),
            WBEM_E_ILLEGAL_NULL = unchecked((int)0x80041028),
            WBEM_E_INVALID_QUALIFIER_TYPE = unchecked((int)0x80041029),
            WBEM_E_INVALID_PROPERTY_TYPE = unchecked((int)0x8004102A),
            WBEM_E_VALUE_OUT_OF_RANGE = unchecked((int)0x8004102B),
            WBEM_E_CANNOT_BE_SINGLETON = unchecked((int)0x8004102C),
            WBEM_E_INVALID_CIM_TYPE = unchecked((int)0x8004102D),
            WBEM_E_INVALID_METHOD = unchecked((int)0x8004102E),
            WBEM_E_INVALID_METHOD_PARAMETERS = unchecked((int)0x8004102F),
            WBEM_E_SYSTEM_PROPERTY = unchecked((int)0x80041030),
            WBEM_E_INVALID_PROPERTY = unchecked((int)0x80041031),
            WBEM_E_CALL_CANCELLED = unchecked((int)0x80041032),
            WBEM_E_SHUTTING_DOWN = unchecked((int)0x80041033),
            WBEM_E_PROPAGATED_METHOD = unchecked((int)0x80041034),
            WBEM_E_UNSUPPORTED_PARAMETER = unchecked((int)0x80041035),
            WBEM_E_MISSING_PARAMETER_ID = unchecked((int)0x80041036),
            WBEM_E_INVALID_PARAMETER_ID = unchecked((int)0x80041037),
            WBEM_E_NONCONSECUTIVE_PARAMETER_IDS = unchecked((int)0x80041038),
            WBEM_E_PARAMETER_ID_ON_RETVAL = unchecked((int)0x80041039),
            WBEM_E_INVALID_OBJECT_PATH = unchecked((int)0x8004103A),
            WBEM_E_OUT_OF_DISK_SPACE = unchecked((int)0x8004103B),
            WBEM_E_BUFFER_TOO_SMALL = unchecked((int)0x8004103C),
            WBEM_E_UNSUPPORTED_PUT_EXTENSION = unchecked((int)0x8004103D),
            WBEM_E_UNKNOWN_OBJECT_TYPE = unchecked((int)0x8004103E),
            WBEM_E_UNKNOWN_PACKET_TYPE = unchecked((int)0x8004103F),
            WBEM_E_MARSHAL_VERSION_MISMATCH = unchecked((int)0x80041040),
            WBEM_E_MARSHAL_INVALID_SIGNATURE = unchecked((int)0x80041041),
            WBEM_E_INVALID_QUALIFIER = unchecked((int)0x80041042),
            WBEM_E_INVALID_DUPLICATE_PARAMETER = unchecked((int)0x80041043),
            WBEM_E_TOO_MUCH_DATA = unchecked((int)0x80041044),
            WBEM_E_SERVER_TOO_BUSY = unchecked((int)0x80041045),
            WBEM_E_INVALID_FLAVOR = unchecked((int)0x80041046),
            WBEM_E_CIRCULAR_REFERENCE = unchecked((int)0x80041047),
            WBEM_E_UNSUPPORTED_CLASS_UPDATE = unchecked((int)0x80041048),
            WBEM_E_CANNOT_CHANGE_KEY_INHERITANCE = unchecked((int)0x80041049),
            WBEM_E_CANNOT_CHANGE_INDEX_INHERITANCE = unchecked((int)0x80041050),
            WBEM_E_TOO_MANY_PROPERTIES = unchecked((int)0x80041051),
            WBEM_E_UPDATE_TYPE_MISMATCH = unchecked((int)0x80041052),
            WBEM_E_UPDATE_OVERRIDE_NOT_ALLOWED = unchecked((int)0x80041053),
            WBEM_E_UPDATE_PROPAGATED_METHOD = unchecked((int)0x80041054),
            WBEM_E_METHOD_NOT_IMPLEMENTED = unchecked((int)0x80041055),
            WBEM_E_METHOD_DISABLED = unchecked((int)0x80041056),
            WBEM_E_REFRESHER_BUSY = unchecked((int)0x80041057),
            WBEM_E_UNPARSABLE_QUERY = unchecked((int)0x80041058),
            WBEM_E_NOT_EVENT_CLASS = unchecked((int)0x80041059),
            WBEM_E_MISSING_GROUP_WITHIN = unchecked((int)0x8004105A),
            WBEM_E_MISSING_AGGREGATION_LIST = unchecked((int)0x8004105B),
            WBEM_E_PROPERTY_NOT_AN_OBJECT = unchecked((int)0x8004105C),
            WBEM_E_AGGREGATING_BY_OBJECT = unchecked((int)0x8004105D),
            WBEM_E_UNINTERPRETABLE_PROVIDER_QUERY = unchecked((int)0x8004105F),
            WBEM_E_BACKUP_RESTORE_WINMGMT_RUNNING = unchecked((int)0x80041060),
            WBEM_E_QUEUE_OVERFLOW = unchecked((int)0x80041061),
            WBEM_E_PRIVILEGE_NOT_HELD = unchecked((int)0x80041062),
            WBEM_E_INVALID_OPERATOR = unchecked((int)0x80041063),
            WBEM_E_LOCAL_CREDENTIALS = unchecked((int)0x80041064),
            WBEM_E_CANNOT_BE_ABSTRACT = unchecked((int)0x80041065),
            WBEM_E_AMENDED_OBJECT = unchecked((int)0x80041066),
            WBEM_E_CLIENT_TOO_SLOW = unchecked((int)0x80041067),
            WBEM_E_NULL_SECURITY_DESCRIPTOR = unchecked((int)0x80041068),
            WBEM_E_TIMED_OUT = unchecked((int)0x80041069),
            WBEM_E_INVALID_ASSOCIATION = unchecked((int)0x8004106A),
            WBEM_E_AMBIGUOUS_OPERATION = unchecked((int)0x8004106B),
            WBEM_E_QUOTA_VIOLATION = unchecked((int)0x8004106C),
            WBEM_E_RESERVED_001 = unchecked((int)0x8004106D),
            WBEM_E_RESERVED_002 = unchecked((int)0x8004106E),
            WBEM_E_UNSUPPORTED_LOCALE = unchecked((int)0x8004106F),
            WBEM_E_HANDLE_OUT_OF_DATE = unchecked((int)0x80041070),
            WBEM_E_CONNECTION_FAILED = unchecked((int)0x80041071),
            WBEM_E_INVALID_HANDLE_REQUEST = unchecked((int)0x80041072),
            WBEM_E_PROPERTY_NAME_TOO_WIDE = unchecked((int)0x80041073),
            WBEM_E_CLASS_NAME_TOO_WIDE = unchecked((int)0x80041074),
            WBEM_E_METHOD_NAME_TOO_WIDE = unchecked((int)0x80041075),
            WBEM_E_QUALIFIER_NAME_TOO_WIDE = unchecked((int)0x80041076),
            WBEM_E_RERUN_COMMAND = unchecked((int)0x80041077),
            WBEM_E_DATABASE_VER_MISMATCH = unchecked((int)0x80041078),
            WBEM_E_VETO_DELETE = unchecked((int)0x80041079),
            WBEM_E_VETO_PUT = unchecked((int)0x8004107A),
            WBEM_E_INVALID_LOCALE = unchecked((int)0x80041080),
            WBEM_E_PROVIDER_SUSPENDED = unchecked((int)0x80041081),
            WBEM_E_SYNCHRONIZATION_REQUIRED = unchecked((int)0x80041082),
            WBEM_E_NO_SCHEMA = unchecked((int)0x80041083),
            WBEM_E_PROVIDER_ALREADY_REGISTERED = unchecked((int)0x80041084),
            WBEM_E_PROVIDER_NOT_REGISTERED = unchecked((int)0x80041085),
            WBEM_E_FATAL_TRANSPORT_ERROR = unchecked((int)0x80041086),
            WBEM_E_ENCRYPTED_CONNECTION_REQUIRED = unchecked((int)0x80041087),
            WBEM_E_PROVIDER_TIMED_OUT = unchecked((int)0x80041088),
            WBEM_E_NO_KEY = unchecked((int)0x80041089),
            WBEMESS_E_REGISTRATION_TOO_BROAD = unchecked((int)0x80042001),
            WBEMESS_E_REGISTRATION_TOO_PRECISE = unchecked((int)0x80042002),
            WBEMMOF_E_EXPECTED_QUALIFIER_NAME = unchecked((int)0x80044001),
            WBEMMOF_E_EXPECTED_SEMI = unchecked((int)0x80044002),
            WBEMMOF_E_EXPECTED_OPEN_BRACE = unchecked((int)0x80044003),
            WBEMMOF_E_EXPECTED_CLOSE_BRACE = unchecked((int)0x80044004),
            WBEMMOF_E_EXPECTED_CLOSE_BRACKET = unchecked((int)0x80044005),
            WBEMMOF_E_EXPECTED_CLOSE_PAREN = unchecked((int)0x80044006),
            WBEMMOF_E_ILLEGAL_CONSTANT_VALUE = unchecked((int)0x80044007),
            WBEMMOF_E_EXPECTED_TYPE_IDENTIFIER = unchecked((int)0x80044008),
            WBEMMOF_E_EXPECTED_OPEN_PAREN = unchecked((int)0x80044009),
            WBEMMOF_E_UNRECOGNIZED_TOKEN = unchecked((int)0x8004400A),
            WBEMMOF_E_UNRECOGNIZED_TYPE = unchecked((int)0x8004400B),
            WBEMMOF_E_EXPECTED_PROPERTY_NAME = unchecked((int)0x8004400C),
            WBEMMOF_E_TYPEDEF_NOT_SUPPORTED = unchecked((int)0x8004400D),
            WBEMMOF_E_UNEXPECTED_ALIAS = unchecked((int)0x8004400E),
            WBEMMOF_E_UNEXPECTED_ARRAY_INIT = unchecked((int)0x8004400F),
            WBEMMOF_E_INVALID_AMENDMENT_SYNTAX = unchecked((int)0x80044010),
            WBEMMOF_E_INVALID_DUPLICATE_AMENDMENT = unchecked((int)0x80044011),
            WBEMMOF_E_INVALID_PRAGMA = unchecked((int)0x80044012),
            WBEMMOF_E_INVALID_NAMESPACE_SYNTAX = unchecked((int)0x80044013),
            WBEMMOF_E_EXPECTED_CLASS_NAME = unchecked((int)0x80044014),
            WBEMMOF_E_TYPE_MISMATCH = unchecked((int)0x80044015),
            WBEMMOF_E_EXPECTED_ALIAS_NAME = unchecked((int)0x80044016),
            WBEMMOF_E_INVALID_CLASS_DECLARATION = unchecked((int)0x80044017),
            WBEMMOF_E_INVALID_INSTANCE_DECLARATION = unchecked((int)0x80044018),
            WBEMMOF_E_EXPECTED_DOLLAR = unchecked((int)0x80044019),
            WBEMMOF_E_CIMTYPE_QUALIFIER = unchecked((int)0x8004401A),
            WBEMMOF_E_DUPLICATE_PROPERTY = unchecked((int)0x8004401B),
            WBEMMOF_E_INVALID_NAMESPACE_SPECIFICATION = unchecked((int)0x8004401C),
            WBEMMOF_E_OUT_OF_RANGE = unchecked((int)0x8004401D),
            WBEMMOF_E_INVALID_FILE = unchecked((int)0x8004401E),
            WBEMMOF_E_ALIASES_IN_EMBEDDED = unchecked((int)0x8004401F),
            WBEMMOF_E_NULL_ARRAY_ELEM = unchecked((int)0x80044020),
            WBEMMOF_E_DUPLICATE_QUALIFIER = unchecked((int)0x80044021),
            WBEMMOF_E_EXPECTED_FLAVOR_TYPE = unchecked((int)0x80044022),
            WBEMMOF_E_INCOMPATIBLE_FLAVOR_TYPES = unchecked((int)0x80044023),
            WBEMMOF_E_MULTIPLE_ALIASES = unchecked((int)0x80044024),
            WBEMMOF_E_INCOMPATIBLE_FLAVOR_TYPES2 = unchecked((int)0x80044025),
            WBEMMOF_E_NO_ARRAYS_RETURNED = unchecked((int)0x80044026),
            WBEMMOF_E_MUST_BE_IN_OR_OUT = unchecked((int)0x80044027),
            WBEMMOF_E_INVALID_FLAGS_SYNTAX = unchecked((int)0x80044028),
            WBEMMOF_E_EXPECTED_BRACE_OR_BAD_TYPE = unchecked((int)0x80044029),
            WBEMMOF_E_UNSUPPORTED_CIMV22_QUAL_VALUE = unchecked((int)0x8004402A),
            WBEMMOF_E_UNSUPPORTED_CIMV22_DATA_TYPE = unchecked((int)0x8004402B),
            WBEMMOF_E_INVALID_DELETEINSTANCE_SYNTAX = unchecked((int)0x8004402C),
            WBEMMOF_E_INVALID_QUALIFIER_SYNTAX = unchecked((int)0x8004402D),
            WBEMMOF_E_QUALIFIER_USED_OUTSIDE_SCOPE = unchecked((int)0x8004402E),
            WBEMMOF_E_ERROR_CREATING_TEMP_FILE = unchecked((int)0x8004402F),
            WBEMMOF_E_ERROR_INVALID_INCLUDE_FILE = unchecked((int)0x80044030),
            WBEMMOF_E_INVALID_DELETECLASS_SYNTAX = unchecked((int)0x80044031),
        }
 
        public enum CIMTYPE : int
        {
            CIM_ILLEGAL = 4095,    // 0xFFF
            CIM_EMPTY = 0,    // 0x0
            CIM_SINT8 = 16,    // 0x10
            CIM_UINT8 = 17,    // 0x11
            CIM_SINT16 = 2,    // 0x2
            CIM_UINT16 = 18,    // 0x12
            CIM_SINT32 = 3,    // 0x3
            CIM_UINT32 = 19,    // 0x13
            CIM_SINT64 = 20,    // 0x14
            CIM_UINT64 = 21,    // 0x15
            CIM_REAL32 = 4,    // 0x4
            CIM_REAL64 = 5,    // 0x5
            CIM_BOOLEAN = 11,    // 0xB
            CIM_STRING = 8,    // 0x8
            CIM_DATETIME = 101,    // 0x65
            CIM_REFERENCE = 102,    // 0x66
            CIM_CHAR16 = 103,    // 0x67
            CIM_OBJECT = 13,    // 0xD
            CIM_FLAG_ARRAY = 8192    // 0x2000
        }
        internal enum tag_WBEM_STATUS_TYPE
        {
            WBEM_STATUS_COMPLETE = unchecked((int)0x00000000),
            WBEM_STATUS_REQUIREMENTS = unchecked((int)0x00000001),
            WBEM_STATUS_PROGRESS = unchecked((int)0x00000002),
        }
 
        internal enum tag_WBEM_EXTRA_RETURN_CODES
        {
            WBEM_S_INITIALIZED = unchecked((int)0x00000000),
            WBEM_S_LIMITED_SERVICE = unchecked((int)0x00043001),
            WBEM_S_INDIRECTLY_UPDATED = unchecked((int)0x00043002),
            WBEM_S_SUBJECT_TO_SDS = unchecked((int)0x00043003),
            WBEM_E_RETRY_LATER = unchecked((int)0x80043001),
            WBEM_E_RESOURCE_CONTENTION = unchecked((int)0x80043002),
        }
 
        [ComImport, Guid("4CFC7932-0F9D-4BEF-9C32-8EA2A6B56FCB")]
        internal class WbemDecoupledRegistrar
        {
        }
 
        [ComImport,
         GuidAttribute("1BE41572-91DD-11D1-AEB2-00C04FB68820"),
         InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
        internal interface IWbemProviderInit
        {
            [PreserveSig]
            int Initialize(
                [In][MarshalAs(UnmanagedType.LPWStr)] string wszUser,
                [In] Int32 lFlags,
                [In][MarshalAs(UnmanagedType.LPWStr)] string wszNamespace,
                [In][MarshalAs(UnmanagedType.LPWStr)] string wszLocale,
                [In][MarshalAs(UnmanagedType.Interface)] IWbemServices pNamespace,
                [In][MarshalAs(UnmanagedType.Interface)] IWbemContext pCtx,
                [In][MarshalAs(UnmanagedType.Interface)] IWbemProviderInitSink pInitSink
                );
        }
 
        [ComImport,
         GuidAttribute("1005CBCF-E64F-4646-BCD3-3A089D8A84B4"),
         InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
        internal interface IWbemDecoupledRegistrar
        {
            [PreserveSig]
            int Register(
                [In] Int32 flags,
                [In][MarshalAs(UnmanagedType.Interface)] IWbemContext context,
                [In][MarshalAs(UnmanagedType.LPWStr)] string user,
                [In][MarshalAs(UnmanagedType.LPWStr)] string locale,
                [In][MarshalAs(UnmanagedType.LPWStr)] string scope,
                [In][MarshalAs(UnmanagedType.LPWStr)] string registration,
                [In][MarshalAs(UnmanagedType.IUnknown)] object unknown
                );
 
            [PreserveSig]
            int UnRegister();
        }
 
        [ComImport,
         GuidAttribute("9556DC99-828C-11CF-A37E-00AA003240C7"),
         InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
        internal interface IWbemServices
        {
            [PreserveSig]
            int OpenNamespace(
                [In][MarshalAs(UnmanagedType.BStr)] string strNamespace,
                [In] Int32 lFlags,
                [In][MarshalAs(UnmanagedType.Interface)] IWbemContext pCtx,
                [In][Out][MarshalAs(UnmanagedType.Interface)] ref IWbemServices ppWorkingNamespace,
                [In] IntPtr ppCallResult
                );
 
            [PreserveSig]
            int CancelAsyncCall(
                [In][MarshalAs(UnmanagedType.Interface)] IWbemObjectSink pSink
                );
 
            [PreserveSig]
            int QueryObjectSink(
                [In] Int32 lFlags,
                [Out][MarshalAs(UnmanagedType.Interface)] out IWbemObjectSink ppResponseHandler
                );
 
            [PreserveSig]
            int GetObject(
                [In][MarshalAs(UnmanagedType.BStr)] string strObjectPath,
                [In] Int32 lFlags,
                [In][MarshalAs(UnmanagedType.Interface)] IWbemContext pCtx,
                [In][Out][MarshalAs(UnmanagedType.Interface)] ref IWbemClassObject ppObject,
                [In] IntPtr ppCallResult
                );
 
            [PreserveSig]
            int GetObjectAsync(
                [In][MarshalAs(UnmanagedType.BStr)] string strObjectPath,
                [In] Int32 lFlags,
                [In][MarshalAs(UnmanagedType.Interface)] IWbemContext pCtx,
                [In][MarshalAs(UnmanagedType.Interface)] IWbemObjectSink pResponseHandler
                );
 
            [PreserveSig]
            int PutClass(
                [In][MarshalAs(UnmanagedType.Interface)] IWbemClassObject pObject,
                [In] Int32 lFlags,
                [In][MarshalAs(UnmanagedType.Interface)] IWbemContext pCtx,
                [In] IntPtr ppCallResult
                );
 
            [PreserveSig]
            int PutClassAsync(
                [In][MarshalAs(UnmanagedType.Interface)] IWbemClassObject pObject,
                [In] Int32 lFlags,
                [In][MarshalAs(UnmanagedType.Interface)] IWbemContext pCtx,
                [In][MarshalAs(UnmanagedType.Interface)] IWbemObjectSink pResponseHandler
                );
 
            [PreserveSig]
            int DeleteClass(
                [In][MarshalAs(UnmanagedType.BStr)] string strClass,
                [In] Int32 lFlags,
                [In][MarshalAs(UnmanagedType.Interface)] IWbemContext pCtx,
                [In] IntPtr ppCallResult
                );
 
            [PreserveSig]
            int DeleteClassAsync(
                [In][MarshalAs(UnmanagedType.BStr)] string strClass,
                [In] Int32 lFlags,
                [In][MarshalAs(UnmanagedType.Interface)] IWbemContext pCtx,
                [In][MarshalAs(UnmanagedType.Interface)] IWbemObjectSink pResponseHandler
                );
 
            [PreserveSig]
            int CreateClassEnum(
                [In][MarshalAs(UnmanagedType.BStr)] string strSuperclass,
                [In] Int32 lFlags,
                [In][MarshalAs(UnmanagedType.Interface)] IWbemContext pCtx,
                [Out][MarshalAs(UnmanagedType.Interface)] out IEnumWbemClassObject ppEnum
                );
 
            [PreserveSig]
            int CreateClassEnumAsync(
                [In][MarshalAs(UnmanagedType.BStr)] string strSuperclass,
                [In] Int32 lFlags,
                [In][MarshalAs(UnmanagedType.Interface)] IWbemContext pCtx,
                [In][MarshalAs(UnmanagedType.Interface)] IWbemObjectSink pResponseHandler
                );
 
            [PreserveSig]
            int PutInstance(
                [In][MarshalAs(UnmanagedType.Interface)] IWbemClassObject pInst,
                [In] Int32 lFlags,
                [In][MarshalAs(UnmanagedType.Interface)] IWbemContext pCtx,
                [In] IntPtr ppCallResult
                );
 
            [PreserveSig]
            int PutInstanceAsync(
                [In][MarshalAs(UnmanagedType.Interface)] IWbemClassObject pInst,
                [In] Int32 lFlags,
                [In][MarshalAs(UnmanagedType.Interface)] IWbemContext pCtx,
                [In][MarshalAs(UnmanagedType.Interface)] IWbemObjectSink pResponseHandler
                );
 
            [PreserveSig]
            int DeleteInstance(
                [In][MarshalAs(UnmanagedType.BStr)] string strObjectPath,
                [In] Int32 lFlags,
                [In][MarshalAs(UnmanagedType.Interface)] IWbemContext pCtx,
                [In] IntPtr ppCallResult
                );
 
            [PreserveSig]
            int DeleteInstanceAsync(
                [In][MarshalAs(UnmanagedType.BStr)] string strObjectPath,
                [In] Int32 lFlags,
                [In][MarshalAs(UnmanagedType.Interface)] IWbemContext pCtx,
                [In][MarshalAs(UnmanagedType.Interface)] IWbemObjectSink pResponseHandler
                );
 
            [PreserveSig]
            int CreateInstanceEnum(
                [In][MarshalAs(UnmanagedType.BStr)] string strFilter,
                [In] Int32 lFlags,
                [In][MarshalAs(UnmanagedType.Interface)] IWbemContext pCtx,
                [Out][MarshalAs(UnmanagedType.Interface)] out IEnumWbemClassObject ppEnum
                );
 
            [PreserveSig]
            int CreateInstanceEnumAsync(
                [In][MarshalAs(UnmanagedType.BStr)] string strFilter,
                [In] Int32 lFlags,
                [In][MarshalAs(UnmanagedType.Interface)] IWbemContext pCtx,
                [In][MarshalAs(UnmanagedType.Interface)] IWbemObjectSink pResponseHandler
                );
 
            [PreserveSig]
            int ExecQuery(
                [In][MarshalAs(UnmanagedType.BStr)] string strQueryLanguage,
                [In][MarshalAs(UnmanagedType.BStr)] string strQuery,
                [In] Int32 lFlags,
                [In][MarshalAs(UnmanagedType.Interface)] IWbemContext pCtx,
                [Out][MarshalAs(UnmanagedType.Interface)] out IEnumWbemClassObject ppEnum
                );
 
            [PreserveSig]
            int ExecQueryAsync(
                [In][MarshalAs(UnmanagedType.BStr)] string strQueryLanguage,
                [In][MarshalAs(UnmanagedType.BStr)] string strQuery,
                [In] Int32 lFlags,
                [In][MarshalAs(UnmanagedType.Interface)] IWbemContext pCtx,
                [In][MarshalAs(UnmanagedType.Interface)] IWbemObjectSink pResponseHandler
                );
 
            [PreserveSig]
            int ExecNotificationQuery(
                [In][MarshalAs(UnmanagedType.BStr)] string strQueryLanguage,
                [In][MarshalAs(UnmanagedType.BStr)] string strQuery,
                [In] Int32 lFlags,
                [In][MarshalAs(UnmanagedType.Interface)] IWbemContext pCtx,
                [Out][MarshalAs(UnmanagedType.Interface)] out IEnumWbemClassObject ppEnum
                );
 
            [PreserveSig]
            int ExecNotificationQueryAsync(
                [In][MarshalAs(UnmanagedType.BStr)] string strQueryLanguage,
                [In][MarshalAs(UnmanagedType.BStr)] string strQuery,
                [In] Int32 lFlags,
                [In][MarshalAs(UnmanagedType.Interface)] IWbemContext pCtx,
                [In][MarshalAs(UnmanagedType.Interface)] IWbemObjectSink pResponseHandler
                );
 
            [PreserveSig]
            int ExecMethod(
                [In][MarshalAs(UnmanagedType.BStr)] string strObjectPath,
                [In][MarshalAs(UnmanagedType.BStr)] string strMethodName,
                [In] Int32 lFlags,
                [In][MarshalAs(UnmanagedType.Interface)] IWbemContext pCtx,
                [In][MarshalAs(UnmanagedType.Interface)] IWbemClassObject pInParams,
                [In][Out][MarshalAs(UnmanagedType.Interface)] ref IWbemClassObject ppOutParams,
                [In] IntPtr ppCallResult
                );
 
            [PreserveSig]
            int ExecMethodAsync(
                [In][MarshalAs(UnmanagedType.BStr)] string strObjectPath,
                [In][MarshalAs(UnmanagedType.BStr)] string strMethodName,
                [In] Int32 lFlags,
                [In][MarshalAs(UnmanagedType.Interface)] IWbemContext pCtx,
                [In][MarshalAs(UnmanagedType.Interface)] IWbemClassObject pInParams,
                [In][MarshalAs(UnmanagedType.Interface)] IWbemObjectSink pResponseHandler
                );
        }
 
        [ComImport,
         GuidAttribute("DC12A681-737F-11CF-884D-00AA004B2E24"),
         InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
        internal interface IWbemClassObject
        {
            [PreserveSig]
            int GetQualifierSet(
                [Out][MarshalAs(UnmanagedType.Interface)] out IWbemQualifierSet ppQualSet
                );
 
            [PreserveSig]
            int Get(
                [In][MarshalAs(UnmanagedType.LPWStr)] string wszName,
                [In] Int32 lFlags,
                [In][Out] ref object pVal,
                [In][Out] ref Int32 pType,
                [In][Out] ref Int32 plFlavor
                );
 
            [PreserveSig]
            int Put(
                [In][MarshalAs(UnmanagedType.LPWStr)] string wszName,
                [In] Int32 lFlags,
                [In] ref object pVal,
                [In] Int32 Type
                );
 
            [PreserveSig]
            int Delete(
                [In][MarshalAs(UnmanagedType.LPWStr)] string wszName
                );
 
            [PreserveSig]
            int GetNames(
                [In][MarshalAs(UnmanagedType.LPWStr)] string wszQualifierName,
                [In] Int32 lFlags,
                [In] ref object pQualifierVal,
                [Out][MarshalAs(UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_BSTR)] out string[] pNames
                );
 
            [PreserveSig]
            int BeginEnumeration(
                [In] Int32 lEnumFlags
                );
 
            [PreserveSig]
            int Next(
                [In] Int32 lFlags,
                [In][Out][MarshalAs(UnmanagedType.BStr)] ref string strName,
                [In][Out] ref object pVal,
                [In][Out] ref Int32 pType,
                [In][Out] ref Int32 plFlavor
                );
 
            [PreserveSig]
            int EndEnumeration();
 
            [PreserveSig]
            int GetPropertyQualifierSet(
                [In][MarshalAs(UnmanagedType.LPWStr)] string wszProperty,
                [Out][MarshalAs(UnmanagedType.Interface)] out IWbemQualifierSet ppQualSet
                );
 
            [PreserveSig]
            int Clone(
                [Out][MarshalAs(UnmanagedType.Interface)] out IWbemClassObject ppCopy
                );
 
            [PreserveSig]
            int GetObjectText(
                [In] Int32 lFlags,
                [Out][MarshalAs(UnmanagedType.BStr)] out string pstrObjectText
                );
 
            [PreserveSig]
            int SpawnDerivedClass(
                [In] Int32 lFlags,
                [Out][MarshalAs(UnmanagedType.Interface)] out IWbemClassObject ppNewClass
                );
 
            [PreserveSig]
            int SpawnInstance(
                [In] Int32 lFlags,
                [Out][MarshalAs(UnmanagedType.Interface)] out IWbemClassObject ppNewInstance
                );
 
            [PreserveSig]
            int CompareTo([In] Int32 lFlags,
                [In][MarshalAs(UnmanagedType.Interface)] IWbemClassObject pCompareTo
                );
 
            [PreserveSig]
            int GetPropertyOrigin(
                [In][MarshalAs(UnmanagedType.LPWStr)] string wszName,
                [Out][MarshalAs(UnmanagedType.BStr)] out string pstrClassName
                );
 
            [PreserveSig]
            int InheritsFrom(
                [In][MarshalAs(UnmanagedType.LPWStr)] string strAncestor
                );
 
            [PreserveSig]
            int GetMethod(
                [In][MarshalAs(UnmanagedType.LPWStr)] string wszName,
                [In] Int32 lFlags,
                [In] IntPtr ppInSignature,
                [Out][MarshalAs(UnmanagedType.Interface)] out IWbemClassObject ppOutSignature
                );
 
            [PreserveSig]
            int PutMethod(
                [In][MarshalAs(UnmanagedType.LPWStr)] string wszName,
                [In] Int32 lFlags,
                [In][MarshalAs(UnmanagedType.Interface)] IWbemClassObject pInSignature,
                [In][MarshalAs(UnmanagedType.Interface)] IWbemClassObject pOutSignature
                );
 
            [PreserveSig]
            int DeleteMethod(
                [In][MarshalAs(UnmanagedType.LPWStr)] string wszName
                );
 
            [PreserveSig]
            int BeginMethodEnumeration(
                [In] Int32 lEnumFlags
                );
 
            [PreserveSig]
            int NextMethod(
                [In] Int32 lFlags,
                [In][Out][MarshalAs(UnmanagedType.BStr)] ref string pstrName,
                [In][Out][MarshalAs(UnmanagedType.Interface)] ref IWbemClassObject ppInSignature,
                [In][Out][MarshalAs(UnmanagedType.Interface)] ref IWbemClassObject ppOutSignature
                );
 
            [PreserveSig]
            int EndMethodEnumeration();
 
            [PreserveSig]
            int GetMethodQualifierSet(
                [In][MarshalAs(UnmanagedType.LPWStr)] string wszMethod,
                [Out][MarshalAs(UnmanagedType.Interface)] out IWbemQualifierSet ppQualSet
                );
 
            [PreserveSig]
            int GetMethodOrigin(
                [In][MarshalAs(UnmanagedType.LPWStr)] string wszMethodName,
                [Out][MarshalAs(UnmanagedType.BStr)] out string pstrClassName
                );
        }
 
        [ComImport,
         GuidAttribute("44ACA674-E8FC-11D0-A07C-00C04FB68820"),
         InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
        internal interface IWbemContext
        {
            [PreserveSig]
            int Clone(
                [Out][MarshalAs(UnmanagedType.Interface)] out IWbemContext ppNewCopy
                );
 
            [PreserveSig]
            int GetNames(
                [In] Int32 lFlags,
                [Out][MarshalAs(UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_BSTR)] out string[] pNames
                );
 
            [PreserveSig]
            int BeginEnumeration(
                [In] Int32 lFlags
                );
 
            [PreserveSig]
            int Next(
                [In] Int32 lFlags,
                [Out][MarshalAs(UnmanagedType.BStr)] out string pstrName,
                [Out] out object pValue
                );
 
            [PreserveSig]
            int EndEnumeration();
 
            [PreserveSig]
            int SetValue(
                [In][MarshalAs(UnmanagedType.LPWStr)] string wszName,
                [In] Int32 lFlags,
                [In] ref object pValue
                );
 
            [PreserveSig]
            int GetValue(
                [In][MarshalAs(UnmanagedType.LPWStr)] string wszName,
                [In] Int32 lFlags,
                [Out] out object pValue
                );
 
            [PreserveSig]
            int DeleteValue(
                [In][MarshalAs(UnmanagedType.LPWStr)] string wszName,
                [In] Int32 lFlags
                );
 
            [PreserveSig]
            int DeleteAll();
        }
 
        [ComImport,
         GuidAttribute("1BE41571-91DD-11D1-AEB2-00C04FB68820"),
         InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
        internal interface IWbemProviderInitSink
        {
            [PreserveSig]
            int SetStatus(
                [In] Int32 lStatus,
                [In] Int32 lFlags
                );
        }
 
        [ComImport,
         GuidAttribute("7C857801-7381-11CF-884D-00AA004B2E24"),
         InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
        internal interface IWbemObjectSink
        {
            [PreserveSig]
            int Indicate(
                [In] Int32 lObjectCount,
                //[In][MarshalAs(UnmanagedType.Interface)]  ref 
                [In][MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 0)] IWbemClassObject[] apObjArray
                );
 
            [PreserveSig]
            int SetStatus(
                [In] Int32 lFlags,
                [In][MarshalAs(UnmanagedType.Error)] Int32 hResult,
                [In][MarshalAs(UnmanagedType.BStr)] string strParam,
                [In][MarshalAs(UnmanagedType.Interface)] IWbemClassObject pObjParam
                );
        }
 
        [ComImport,
         GuidAttribute("027947E1-D731-11CE-A357-000000000001"),
         InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
        internal interface IEnumWbemClassObject
        {
            [PreserveSig]
            int Reset();
 
            [PreserveSig]
            int Next(
                [In] Int32 lTimeout,
                [In] UInt32 uCount,
                [In][Out][MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] IWbemClassObject[] apObjects,
                [Out] out UInt32 puReturned
                );
 
            [PreserveSig]
            int NextAsync(
                [In] UInt32 uCount,
                [In][MarshalAs(UnmanagedType.Interface)] IWbemObjectSink pSink
                );
 
            [PreserveSig]
            int Clone(
                [Out][MarshalAs(UnmanagedType.Interface)] out IEnumWbemClassObject ppEnum
                );
 
            [PreserveSig]
            int Skip(
                [In] Int32 lTimeout,
                [In] UInt32 nCount
                );
        }
 
        [ComImport,
         GuidAttribute("DC12A680-737F-11CF-884D-00AA004B2E24"),
         InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
        internal interface IWbemQualifierSet
        {
            [PreserveSig]
            int Get(
                [In][MarshalAs(UnmanagedType.LPWStr)] string wszName,
                [In] Int32 lFlags,
                [In][Out] ref object pVal,
                [In][Out] ref Int32 plFlavor
                );
 
            [PreserveSig]
            int Put(
                [In][MarshalAs(UnmanagedType.LPWStr)] string wszName,
                [In] ref object pVal,
                [In] Int32 lFlavor
                );
 
            [PreserveSig]
            int Delete(
                [In][MarshalAs(UnmanagedType.LPWStr)] string wszName
                );
 
            [PreserveSig]
            int GetNames(
                [In] Int32 lFlags,
                [Out][MarshalAs(UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_BSTR)] out string[] pNames
                );
 
            [PreserveSig]
            int BeginEnumeration(
                [In] Int32 lFlags
                );
 
            [PreserveSig]
            int Next(
                [In] Int32 lFlags,
                [In][Out][MarshalAs(UnmanagedType.BStr)] ref string pstrName,
                [In][Out] ref object pVal, [In][Out] ref Int32 plFlavor
                );
 
            [PreserveSig]
            int EndEnumeration();
        }
    }
}