MS Wmi
MS Wmi
Tools. The Open Specifications documentation does not require the use of Microsoft programming
tools or programming environments in order for you to develop an implementation. If you have access
to Microsoft programming tools and environments, you are free to take advantage of them. Certain
Open Specifications documents are intended for use in conjunction with publicly available standards
specifications and network programming art and, as such, assume that the reader either is familiar
with the aforementioned material or has immediate access to it.
1 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Revision Summary
Revision Revision
Date History Class Comments
6/1/2007 1.2.1 Editorial Changed language and formatting in the technical content.
7/3/2007 1.2.2 Editorial Changed language and formatting in the technical content.
8/10/2007 1.2.3 Editorial Changed language and formatting in the technical content.
2 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Revision Revision
Date History Class Comments
3 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Table of Contents
1 Introduction ............................................................................................................ 9
1.1 Glossary ........................................................................................................... 9
1.2 References ...................................................................................................... 12
1.2.1 Normative References ................................................................................. 12
1.2.2 Informative References ............................................................................... 13
1.3 Overview ........................................................................................................ 13
1.4 Relationship to Other Protocols .......................................................................... 16
1.5 Prerequisites/Preconditions ............................................................................... 16
1.6 Applicability Statement ..................................................................................... 17
1.7 Versioning and Capability Negotiation ................................................................. 17
1.8 Vendor-Extensible Fields ................................................................................... 17
1.9 Standards Assignments..................................................................................... 17
2 Messages ............................................................................................................... 18
2.1 Transport ........................................................................................................ 18
2.2 Common Data Types ........................................................................................ 18
2.2.1 WQL Query ................................................................................................ 18
2.2.1.1 WQL Schema and Data Query ................................................................. 18
2.2.1.2 WQL Event Query.................................................................................. 23
2.2.2 CIM Path and Namespace ............................................................................ 25
2.2.3 Protocol Return Codes ................................................................................. 26
2.2.4 IWbemClassObject Interface ........................................................................ 27
2.2.4.1 Prototype Result Object ......................................................................... 27
2.2.4.2 Extrinsic Events .................................................................................... 28
2.2.5 WBEM_CHANGE_FLAG_TYPE Enumeration ..................................................... 29
2.2.6 WBEM_GENERIC_FLAG_TYPE Enumeration .................................................... 29
2.2.7 WBEM_STATUS_TYPE Enumeration ............................................................... 30
2.2.8 WBEM_TIMEOUT_TYPE Enumeration ............................................................. 31
2.2.9 WBEM_QUERY_FLAG_TYPE Enumeration ....................................................... 31
2.2.10 WBEM_BACKUP_RESTORE_FLAGS Enumeration.............................................. 32
2.2.11 WBEMSTATUS Enumeration ......................................................................... 32
2.2.12 WBEM_CONNECT_OPTIONS Enumeration ...................................................... 36
2.2.13 IWbemContext Interface.............................................................................. 36
2.2.13.1 IWbemContextBuffer Marshaling Structure ............................................... 38
2.2.13.2 IWbemContextProperty Marshaling Structure ........................................... 38
2.2.13.3 IWbemContextString Marshaling Structure ............................................... 40
2.2.13.4 IWbemContextArray Marshaling Structure ................................................ 40
2.2.14 ObjectArray Structure ................................................................................. 41
2.2.14.1 WBEM_DATAPACKET_OBJECT Structure ................................................... 43
2.2.14.2 WBEMOBJECT_CLASS Structure .............................................................. 43
2.2.14.3 WBEMOBJECT_INSTANCE Structure ........................................................ 44
2.2.14.4 WBEMOBJECT_INSTANCE_NOCLASS Structure ......................................... 44
2.2.15 WBEM_REFRESHED_OBJECT Structure .......................................................... 45
2.2.16 WBEM_INSTANCE_BLOB Enumeration ........................................................... 46
2.2.17 WBEM_INSTANCE_BLOB_TYPE Enumeration .................................................. 46
2.2.18 RefreshedInstances..................................................................................... 46
2.2.19 RefreshedSingleInstance ............................................................................. 47
2.2.20 _WBEM_REFRESH_INFO Structure ................................................................ 47
2.2.21 _WBEM_REFRESHER_ID Structure ................................................................ 47
2.2.22 _WBEM_RECONNECT_INFO Structure ........................................................... 48
2.2.23 _WBEM_RECONNECT_RESULTS Structure ...................................................... 48
2.2.24 _WBEM_RECONNECT_TYPE Enumeration ....................................................... 48
2.2.25 WBEM_REFRESH_TYPE Enumeration ............................................................. 49
2.2.26 _WBEM_REFRESH_INFO_NON_HIPERF Structure ............................................ 49
2.2.27 _WBEM_REFRESH_INFO_REMOTE Structure .................................................. 49
4 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
2.2.28 _WBEM_REFRESH_INFO_UNION Union .......................................................... 50
2.2.29 WMI Locale Formats .................................................................................... 50
2.2.30 __SystemSecurity Class .............................................................................. 50
2.2.30.1 __SystemSecurity::GetSD ..................................................................... 50
2.2.30.2 __SystemSecurity::SetSD ...................................................................... 51
2.2.30.3 RequiresEncryption ............................................................................... 51
2.2.31 Default System Classes ............................................................................... 51
2.2.32 Supported WMI Qualifiers ............................................................................ 52
3 Protocol Details ..................................................................................................... 55
3.1 Server Details .................................................................................................. 55
3.1.1 Abstract Data Model .................................................................................... 56
3.1.1.1 Delivering Results to Client .................................................................... 60
3.1.1.1.1 Synchronous Calls ........................................................................... 60
3.1.1.1.2 Semisynchronous Calls ..................................................................... 60
3.1.1.1.2.1 Semisynchronous Operations Returning Multiple Objects ................ 60
3.1.1.1.2.2 Semisynchronous Operations Returning a Single Object .................. 61
3.1.1.1.3 Asynchronous calls .......................................................................... 62
3.1.1.2 Localization Support .............................................................................. 62
3.1.2 Timers ...................................................................................................... 63
3.1.3 Initialization ............................................................................................... 64
3.1.4 Message Processing Events and Sequencing Rules .......................................... 64
3.1.4.1 IWbemLevel1Login Interface .................................................................. 67
3.1.4.1.1 IWbemLevel1Login::EstablishPosition (Opnum 3) ................................ 68
3.1.4.1.2 IWbemLevel1Login::RequestChallenge (Opnum 4) .............................. 69
3.1.4.1.3 IWbemLevel1Login::WBEMLogin (Opnum 5) ....................................... 69
3.1.4.1.4 IWbemLevel1Login::NTLMLogin (Opnum 6) ........................................ 70
3.1.4.2 IWbemObjectSink Interface Server Details ............................................... 71
3.1.4.2.1 IWbemObjectSink::Indicate (Opnum 3) Server details ......................... 72
3.1.4.2.2 IWbemObjectSink::SetStatus (Opnum 4) Server Details ...................... 72
3.1.4.3 IWbemServices Interface ....................................................................... 73
3.1.4.3.1 IWbemServices::OpenNamespace (Opnum 3) ..................................... 75
3.1.4.3.2 IWbemServices::CancelAsyncCall (Opnum 4) ...................................... 77
3.1.4.3.3 IWbemServices::QueryObjectSink (Opnum 5) ..................................... 77
3.1.4.3.4 IWbemServices::GetObject (Opnum 6) .............................................. 78
3.1.4.3.5 IWbemServices::GetObjectAsync (Opnum 7) ...................................... 80
3.1.4.3.6 IWbemServices::PutClass (Opnum 8) ................................................ 82
3.1.4.3.7 IWbemServices::PutClassAsync (Opnum 9) ........................................ 85
3.1.4.3.8 IWbemServices::DeleteClass (Opnum 10) .......................................... 87
3.1.4.3.9 IWbemServices::DeleteClassAsync (Opnum 11) .................................. 89
3.1.4.3.10 IWbemServices::CreateClassEnum (Opnum 12) .................................. 90
3.1.4.3.11 IWbemServices::CreateClassEnumAsync (Opnum 13) .......................... 91
3.1.4.3.12 IWbemServices::PutInstance (Opnum 14) .......................................... 93
3.1.4.3.13 IWbemServices::PutInstanceAsync (Opnum 15) .................................. 96
3.1.4.3.14 IWbemServices::DeleteInstance (Opnum 16) ..................................... 98
3.1.4.3.15 IWbemServices::DeleteInstanceAsync (Opnum 17) ............................100
3.1.4.3.16 IWbemServices::CreateInstanceEnum (Opnum 18) ............................101
3.1.4.3.17 IWbemServices::CreateInstanceEnumAsync (Opnum 19) ....................103
3.1.4.3.18 IWbemServices::ExecQuery (Opnum 20) ..........................................104
3.1.4.3.19 IWbemServices::ExecQueryAsync (Opnum 21) ..................................108
3.1.4.3.20 IWbemServices::ExecNotificationQuery (Opnum 22) ...........................110
3.1.4.3.21 IWbemServices::ExecNotificationQueryAsync (Opnum 23) ..................112
3.1.4.3.22 IWbemServices::ExecMethod (Opnum 24) .........................................114
3.1.4.3.23 IWbemServices::ExecMethodAsync (Opnum 25) ................................116
3.1.4.4 IEnumWbemClassObject Interface .........................................................117
3.1.4.4.1 IEnumWbemClassObject::Reset (Opnum 3) .......................................118
3.1.4.4.2 IEnumWbemClassObject::Next (Opnum 4) ........................................119
3.1.4.4.3 IEnumWbemClassObject::NextAsync (Opnum 5) ................................120
5 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
3.1.4.4.4 IEnumWbemClassObject::Clone (Opnum 6) .......................................121
3.1.4.4.5 IEnumWbemClassObject::Skip (Opnum 7) ........................................122
3.1.4.5 IWbemCallResult Interface ....................................................................123
3.1.4.5.1 IWbemCallResult::GetResultObject (Opnum 3) ..................................123
3.1.4.5.2 IWbemCallResult::GetResultString (Opnum 4) ...................................124
3.1.4.5.3 IWbemCallResult::GetResultServices (Opnum 5) ................................125
3.1.4.5.4 IWbemCallResult::GetCallStatus (Opnum 6) ......................................126
3.1.4.6 IWbemFetchSmartEnum Interface ..........................................................127
3.1.4.6.1 IWbemFetchSmartEnum::GetSmartEnum (Opnum 3) .........................127
3.1.4.7 IWbemWCOSmartEnum Interface ..........................................................128
3.1.4.7.1 IWbemWCOSmartEnum::Next (Opnum 3) .........................................128
3.1.4.8 IWbemLoginClientID Interface ...............................................................130
3.1.4.8.1 IWbemLoginClientID::SetClientInfo (Opnum 3) ..................................130
3.1.4.9 IWbemLoginHelper Interface .................................................................130
3.1.4.9.1 IWbemLoginHelper::SetEvent (Opnum 3) ..........................................131
3.1.4.10 IWbemBackupRestore Interface .............................................................131
3.1.4.10.1 IWbemBackupRestore::Backup (Opnum 3) ........................................132
3.1.4.10.2 IWbemBackupRestore::Restore (Opnum 4) .......................................133
3.1.4.11 IWbemBackupRestoreEx Interface .........................................................133
3.1.4.11.1 IWbemBackupRestoreEx::Pause (Opnum 5) ......................................134
3.1.4.11.2 IWbemBackupRestoreEx::Resume (Opnum 6) ...................................134
3.1.4.12 IWbemRefreshingServices Interface .......................................................135
3.1.4.12.1 IWbemRefreshingServices::AddObjectToRefresher (Opnum 3) .............135
3.1.4.12.2 IWbemRefreshingServices::AddObjectToRefresherByTemplate (Opnum 4)
....................................................................................................137
3.1.4.12.3 IWbemRefreshingServices::AddEnumToRefresher (Opnum 5) ..............138
3.1.4.12.4 IWbemRefreshingServices::RemoveObjectFromRefresher (Opnum 6) ...139
3.1.4.12.5 IWbemRefreshingServices::GetRemoteRefresher (Opnum 7) ...............140
3.1.4.12.6 IWbemRefreshingServices::ReconnectRemoteRefresher (Opnum 8) ......141
3.1.4.13 IWbemRemoteRefresher Interface..........................................................142
3.1.4.13.1 IWbemRemoteRefresher::RemoteRefresh (Opnum 3) .........................142
3.1.4.13.2 IWbemRemoteRefresher::StopRefreshing (Opnum 4) .........................143
3.1.4.13.3 IWbemRemoteRefresher::Opnum5NotUsedOnWire (Opnum 5) .............144
3.1.4.14 IWbemShutdown Interface ....................................................................144
3.1.4.14.1 IWbemShutdown::Shutdown (Opnum 3) ...........................................145
3.1.4.15 IUnsecuredApartment Interface .............................................................145
3.1.4.15.1 IUnsecuredApartment::CreateObjectStub (Opnum 3) .........................146
3.1.4.16 IWbemUnsecuredApartment Interface ....................................................146
3.1.4.16.1 IWbemUnsecuredApartment::CreateSinkStub (Opnum 3) ....................147
3.1.4.17 Abstract Provider Interface ....................................................................147
3.1.4.17.1 Enumerate Instances of a Given Class ...............................................148
3.1.4.17.2 Enumerate the Subclasses of a Given Class .......................................148
3.1.4.17.3 Get Properties Within an Instance of a Class ......................................148
3.1.4.17.4 Get Properties Within a Class ...........................................................148
3.1.4.17.5 Update Properties Within an Instance of a Class .................................148
3.1.4.17.6 Update Properties Within a Class ......................................................148
3.1.4.17.7 Create an Instance of a Class ...........................................................149
3.1.4.17.8 Create a Class ................................................................................149
3.1.4.17.9 Delete an Instance of a Class ...........................................................149
3.1.4.17.10 Delete a Class ................................................................................149
3.1.4.17.11 Execute a Provider's Method ............................................................149
3.1.4.17.12 Cancel an Existing Operation ...........................................................149
3.1.4.17.13 Subscribe for Event Notification ........................................................149
3.1.4.17.14 Is Dynamic Class Supported ............................................................149
3.1.4.17.15 Execute Query ...............................................................................150
3.1.4.18 Namespaces ........................................................................................150
3.1.4.18.1 Creating Namespaces .....................................................................150
3.1.4.18.2 Reading Namespace Information ......................................................150
6 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
3.1.4.18.3 Updating Namespace Information .....................................................150
3.1.4.18.4 Deleting Namespaces ......................................................................151
3.1.5 Timer Events .............................................................................................151
3.1.6 Other Local Events .....................................................................................152
3.1.6.1 Indication Event Is Generated ...............................................................152
3.1.6.2 Load Provider ......................................................................................152
3.1.6.3 Unload Provider ...................................................................................153
3.2 Client Details ..................................................................................................153
3.2.1 Abstract Data Model ...................................................................................153
3.2.2 Timers .....................................................................................................153
3.2.3 Initialization ..............................................................................................153
3.2.4 Message Processing Events and Sequencing Rules .........................................153
3.2.4.1 IWbemObjectSink Interface Client Details ...............................................154
3.2.4.1.1 IWbemObjectSink::Indicate Client Details .........................................154
3.2.4.1.2 IWbemObjectSink::SetStatus Client Details .......................................155
3.2.4.2 IWbemServices Interface Client Details...................................................155
3.2.4.2.1 Sending Events to Server ................................................................155
3.2.4.2.2 Calling Put Interfaces for CIM Objects with Amended Qualifiers ............155
3.2.4.2.3 Deleting Class Objects with Amended Qualifiers .................................156
3.2.4.2.4 Invoking Synchronous Methods Returing No Object ............................156
3.2.4.2.5 IWbemServices::ExecMethod and IWbemServices::ExecMethodAsync ..156
3.2.4.2.6 Invoking Synchronous Methods Returning Single Object ......................156
3.2.4.2.7 Invoking Semisynchronous Methods That Return a Single Object .........157
3.2.4.2.8 Invoking Synchronous and Semisynchronous Operations Returning Multiple
Objects .........................................................................................157
3.2.4.2.9 Invoking Asynchronous Operations ...................................................158
3.2.4.3 IWbemBackupRestore Interface Client Details .........................................159
3.2.4.4 IWbemBackupRestoreEx Interface Client Details ......................................159
3.2.4.5 IWbemRefreshingServices Interface Client Details ....................................159
3.2.4.5.1 IWbemRefreshingServices::AddObjectToRefresher and
IWbemRefreshingServices::AddObjectToRefresherByTemplate .............159
3.2.4.5.2 IWbemRefreshingServices::AddEnumToRefresher ..............................160
3.2.4.5.3 IWbemRefreshingServices::GetRemoteRefresher................................160
3.2.4.5.4 IWbemRefreshingServices::ReconnectRemoteRefresher ......................161
3.2.4.6 IUnsecuredApartment Interface Client Details ..........................................161
3.2.4.7 IWbemUnsecuredApartment Interface Client Details .................................161
3.2.4.8 IWbemShutdown Interface Client Details ................................................161
3.2.5 Timer Events .............................................................................................161
3.2.6 Other Local Events .....................................................................................161
3.2.6.1 Shutdown ...........................................................................................161
4 Protocol Examples ............................................................................................... 162
4.1 Protocol Initialization .......................................................................................162
4.1.1 Protocol Initialization Trace .........................................................................163
4.1.2 Example Captures ......................................................................................165
4.2 Synchronous Operations ..................................................................................165
4.2.1 Synchronous Delivery of a Single Result .......................................................166
4.2.2 Synchronous Delivery of Result Sets ............................................................166
4.2.2.1 Unoptimized Client and Unoptimized Server ............................................166
4.2.2.2 Unoptimized Client and Optimized Server ................................................167
4.2.2.3 Optimized Client and Optimized Server ...................................................168
4.2.2.4 Optimized Client and Unoptimized Server ................................................170
4.2.3 Synchronous Delivery Traces ......................................................................171
4.2.3.1 Synchronous Delivery of IWbemServices ExecQuery and ExecMethod
Operations ..........................................................................................171
4.2.3.2 Synchronous Delivery of IWbemServices PutInstance, DeleteInstance, and
CreateInstanceEnum Operations ............................................................174
4.3 Semisynchronous Operations ............................................................................179
7 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
4.3.1 Semisynchronous Delivery of a Single Result ................................................179
4.3.2 Semisynchronous Delivery of Result Sets ......................................................180
4.3.3 Semisynchronous Delivery Traces ................................................................180
4.3.3.1 Semisynchronous Delivery of IWbemServices ExecQuery and ExecMethod
Operations ..........................................................................................180
4.3.3.2 Semisynchronous Delivery of IWbemServices PutInstance, DeleteInstance, and
CreateInstanceEnum Operations ............................................................185
4.4 Asynchronous Delivery of Results ......................................................................190
4.5 Optimized Asynchronous Delivery of Results .......................................................191
4.6 Configuring Refreshing Services ........................................................................192
4.7 Using the Refresher Interface ...........................................................................193
5 Security ............................................................................................................... 195
5.1 Security Considerations for Implementers ..........................................................195
5.2 Index of Security Parameters ...........................................................................195
6 Appendix A: Full IDL ............................................................................................ 197
7 Appendix B: Product Behavior ............................................................................. 209
8 Appendix C: Additional Error Codes ..................................................................... 222
9 Appendix D: Enumerating Class Schema.............................................................. 226
10 Change Tracking .................................................................................................. 227
11 Index ................................................................................................................... 228
8 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
1 Introduction
Windows Management Instrumentation (WMI) Remote Protocol is a Distributed Component Object
Model (DCOM), as specified in [MS-DCOM], a client/server–based framework that provides an open
and automated means of systems management. WMI leverages the Common Information Model
(CIM), as specified in [DMTF-DSP0004], to represent various components of the operating system.
CIM is the conceptual model for storing enterprise management information. The information available
from CIM is specified by a series of classes and associations, and the elements contained in them
(methods, properties, and references). These constructs describe the data available to WMI clients.
Sections 1.5, 1.8, 1.9, 2, and 3 of this specification are normative. All other sections and examples in
this specification are informative.
1.1 Glossary
activation: In COM, a local mechanism by which a client provides the CLSID of an object class
and obtains an object, either an object from that object class or a class factory that is able to
create such objects.
amended qualifier: A qualifier whose value can be localized to the desired locale as needed. For
example, a description qualifier can be localized to give the description of the subject in the
user's locale.
asynchronous operation: An operation executed on the server side. The client continues
executing and does not check whether a response is available from the server.
authentication level: A numeric value indicating the level of authentication or message protection
that remote procedure call (RPC) will apply to a specific message exchange. For more
information, see [C706] section 13.1.2.1 and [MS-RPCE].
CIM class: A CIM object that represents a CIM class definition as a CIM object. It is the
template representing a manageable entity with a set of properties and methods.
CIM database: A persistent database that holds information about CIM objects and namespaces.
CIM localizable information: The portion of information in a CIM class definition that could be
language-specific or country-specific.
CIM method: An operation describing the behavior of a CIM class or a CIM instance. It is
generally an action that can be performed against the manageable entity made up of a CIM
class.
CIM namespace: A logical grouping of a set of CIM classes designed for the same purpose or
sharing a common management objective within the database used to store all CIM class
definitions.
9 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
class identifier (CLSID): A GUID that identifies a software component; for instance, a DCOM
object class or a COM class.
client: Identifies the system that consumes WMI services and initiates DCOM ([MS-DCOM]) calls to
WMI servers.
Common Information Model (CIM): The Distributed Management Task Force (DMTF) model that
describes how to represent real-world computer and network objects. CIM uses an object-
oriented paradigm, where managed objects are modeled using the concepts of classes and
instances. See [DMTF-DSP0004].
Common Information Model (CIM) class: A collection of Common Information Model (CIM)
instances that support the same type, that is, the same CIM properties and CIM methods, as
specified in [DMTF-DSP0004].
Common Information Model (CIM) instance: Provides values for the CIM properties associated
with the CIM instance's defining CIM class. A CIM instance does not carry values for any
other CIM properties or CIM methods that are not defined in (or inherited by) its defining CIM
class. For more information, see [DMTF-DSP0004].
Common Information Model (CIM) object: An object that represents a Common Information
Model (CIM) object. This can be either a CIM class or a CIM instance of a CIM class.
Common Information Model (CIM) path: A string expression locating a class or an instance of
a class in the operating system. The CIM path includes the computer name, the namespace,
the name of CIM class, and the unique identifier locating the CIM class or CIM instance.
Common Information Model (CIM) property: Assigns values used to characterize instances of
a CIM class. A CIM property can be thought of as a pair of Get and Set functions that, when
applied to an object, return state and set state, respectively. For more information, see [DMTF-
DSP0004].
Common Information Model (CIM) relative path: A string expression where elements like the
computer and/or the namespace of the CIM class and/or CIM instance are not used.
Distributed Component Object Model (DCOM): The Microsoft Component Object Model (COM)
specification that defines how components communicate over networks, as specified in [MS-
DCOM].
dynamic disk: A disk on which volumes can be composed of more than one partition on disks of
the same pack, as opposed to basic disks where a partition and a volume are equivalent.
empty CIM object: A data structure conforming to the Windows Management Instrumentation
(WMI) serialization model having no properties, method, or derivation.
globally unique identifier (GUID): A term used interchangeably with universally unique
identifier (UUID) in Microsoft protocol technical documents (TDs). Interchanging the usage of
these terms does not imply or require a specific algorithm or mechanism to generate the value.
Specifically, the use of this term does not imply or require that the algorithms described in
[RFC4122] or [C706] must be used for generating the GUID. See also universally unique
identifier (UUID).
Interface Definition Language (IDL): The International Standards Organization (ISO) standard
language for specifying the interface for remote procedure calls. For more information, see
[C706] section 4.
intrinsic event: An event that defines an event generated by the implementation itself.
10 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
language code identifier (LCID): A 32-bit number that identifies the user interface human
language dialect or variation that is supported by an application or a client computer.
managed object: The actual item in the system environment that is accessed by the provider, as
described in [DMTF-DSP0004].
Microsoft Interface Definition Language (MIDL): The Microsoft implementation and extension
of the OSF-DCE Interface Definition Language (IDL). MIDL can also mean the Interface
Definition Language (IDL) compiler provided by Microsoft. For more information, see [MS-
RPCE].
opnum: An operation number or numeric identifier that is used to identify a specific remote
procedure call (RPC) method or a method in an interface. For more information, see [C706]
section 12.5.2.12 or [MS-RPCE].
qualifier: Additional information about a class, property, method or method parameter. For
example, an abstract qualifier describes that the class is abstract and cannot have instances, an
IN qualifier describes the method parameter is used as input parameter.
security principal: A unique entity identifiable through cryptographic means by at least one key.
A security principal often corresponds to a human user but can also be a service offering a
resource to other security principals. Sometimes referred to simply as a "principal".
security provider: A pluggable security module that is specified by the protocol layer above the
remote procedure call (RPC) layer, and will cause the RPC layer to use this module to secure
messages in a communication session with the server. The security provider is sometimes
referred to as an authentication service. For more information, see [C706] and [MS-RPCE].
Security Support Provider Interface (SSPI): An API that allows connected applications to call
one of several security providers to establish authenticated connections and to exchange data
securely over those connections. It is equivalent to Generic Security Services (GSS)-API, and
the two are on-the-wire compatible.
semisynchronous operation: An operation that is executed on the server side while the client is
regularly checking to see if there is no response available from the server.
server: Used to identify the system that implements WMI services, provides management
services, and accepts DCOM ([MS-DCOM]) calls from WMI clients.
static CIM object: A CIM class or instance whose content is stored in the CIM database.
static mapping or record: A manually created entry in the database of a NBNS server.
synchronous operation: An operation that is executed on the server side while the client is
waiting for the response message.
universally unique identifier (UUID): A 128-bit value. UUIDs can be used for multiple
purposes, from tagging objects with an extremely short lifetime, to reliably identifying very
persistent objects in cross-process communication such as client and server interfaces, manager
entry-point vectors, and RPC objects. UUIDs are highly likely to be unique. UUIDs are also
known as globally unique identifiers (GUIDs) and these terms are used interchangeably in
11 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
the Microsoft protocol technical documents (TDs). Interchanging the usage of these terms does
not imply or require a specific algorithm or mechanism to generate the UUID. Specifically, the
use of this term does not imply or require that the algorithms described in [RFC4122] or [C706]
must be used for generating the UUID.
WMI Query Language (WQL): A subset of American National Standards Institute Structured
Query Language (ANSI SQL). It differs from the standard SQL in that it retrieves from classes
rather than tables and returns CIM classes or instances rather than rows. WQL is specified in
[MS-WMI] section 2.2.1.
MAY, SHOULD, MUST, SHOULD NOT, MUST NOT: These terms (in all caps) are used as defined
in [RFC2119]. All statements of optional behavior use either MAY, SHOULD, or SHOULD NOT.
1.2 References
Links to a document in the Microsoft Open Specifications library point to the correct section in the
most recently published version of the referenced document. However, because individual documents
in the library are not updated at the same time, the section numbers in the documents may not
match. You can confirm the correct section numbering by checking the Errata.
We conduct frequent surveys of the normative references to assure their continued availability. If you
have any issue with finding a normative reference, please contact [email protected]. We will
assist you in finding the relevant information.
[C706] The Open Group, "DCE 1.1: Remote Procedure Call", C706, August 1997,
https://publications.opengroup.org/c706
[FIPS127] National Institute of Standards and Technology, "Database Language SQL", FIPS PUB 127,
June 1993, http://niatec.info/GetFile.aspx?pid=551
[IEEE754] IEEE, "IEEE Standard for Binary Floating-Point Arithmetic", IEEE 754-1985, October 1985,
http://ieeexplore.ieee.org/servlet/opac?punumber=2355
[MS-DCOM] Microsoft Corporation, "Distributed Component Object Model (DCOM) Remote Protocol".
12 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
[MS-WMIO] Microsoft Corporation, "Windows Management Instrumentation Encoding Version 1.0
Protocol".
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC
2119, March 1997, http://www.rfc-editor.org/rfc/rfc2119.txt
[RFC4234] Crocker, D., Ed., and Overell, P., "Augmented BNF for Syntax Specifications: ABNF", RFC
4234, October 2005, http://www.rfc-editor.org/rfc/rfc4234.txt
[UNICODE] The Unicode Consortium, "The Unicode Consortium Home Page", http://www.unicode.org/
1.3 Overview
13 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Figure 1: Windows Management Instrumentation Remote Protocol architecture
At layer 3, the Providers are designed to interact locally with WMI Management Data Sources.
Providers implement abstract interface as specified in section 3.1.4.17. Windows Management
Instrumentation Remote Protocol management data sources are designed to interact locally with
manageable entities. Layer 2 supports the core of the Windows Management Instrumentation
Remote Protocol service and is called the CIM Object Manager (CIMOM). CIMOM interacts with CIM
database for storing or accessing CIM class and CIM instances that are static CIM object; CIM
providers for storing or accessing CIM class and CIM instances that are dynamic from the [DMTF-
DSP0004]. WMI DCOM Client Interfaces in Layer 1 and WMI DCOM Server Interfaces in Layer 2
implement the Distributed Component Object Model interfaces (as specified in [MS-DCOM]]) that
are used by the Windows Management Instrumentation Remote Protocol to communicate over the
network between Windows Management Instrumentation Remote Protocol clients and servers. This
layer is the only layer that communicates over the network. Network communication is achieved by
using the Distributed Component Object Model (DCOM) Remote Protocol and a set of Windows
Management Instrumentation Remote Protocol DCOM interfaces, as specified in section 3.1.4.
14 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Figure 2: Clients can be local or remote from the server
Windows Management Instrumentation Remote Protocol clients can be local or remote from the
server, as illustrated in the preceding figure. In either case, the same set of Windows Management
Instrumentation Remote Protocol interfaces is used.
The communication works the same way between clients and server; all interactions between clients
and server are made through the DCOM Remote Protocol locally or remotely. Therefore, clients are
always acting in a message submission mode through the DCOM Remote Protocol to leverage the
Windows Management Instrumentation Remote Protocol interfaces that are implemented on the server
side.
The client can call the server in one of the following ways:
Synchronous calls
15 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Semisynchronous calls
Asynchronous calls
The server APIs for synchronous and semisynchronous APIs are the same, but the call is executed
synchronously if the flags do not contain WBEM_FLAG_RETURN_IMMEDIATELY. If the flag
WBEM_FLAG_RETURN_IMMEDIATELY is specified, the call is executed semisynchronously. Examples of
such APIs include IWbemServices::GetObject (section 3.1.4.3.4),
IWbemServices::PutClass (section 3.1.4.3.6), and so on.
The IWbemServices methods that end with Async are asynchronous counterparts for their
synchronous APIs. Example of async APIs are IWbemServices::GetObjectAsync (section 3.1.4.3.5),
IWbemServices::PutClassAsync (section 3.1.4.3.7), and so on
The management information that is exchanged between clients and server (and server and clients) is
transmitted over the network by the Windows Management Instrumentation Remote Protocol as a
custom-marshaled payload, as specified in [MS-DCOM] section 2.2.18.6.
The Windows Management Instrumentation Remote Protocol serializes the management information
that is transmitted, as specified in [MS-WMIO]. Before reading this Windows Management
Instrumentation Remote Protocol document, acquire a working knowledge of the concepts, structures,
and communication protocols as specified in [MS-DCOM], [DMTF-DSP0004], and [MS-WMIO].
Namespace security is controlled by using security descriptors, as specified in [MS-DTYP].
The Windows Management Instrumentation Remote Protocol uses the DCOM Remote Protocol to
communicate over the network and to authenticate all requests issued against the infrastructure. The
DCOM Remote Protocol is actually the foundation for the Windows Management Instrumentation
Remote Protocol and is used to accomplish the following:
Authenticate clients.
This implies that the DCOM Remote Protocol implementation provides and uses all underlying
protocols, as specified in [MS-RPCE], [MS-DCOM], and [C706].
In addition to DCOM Remote Protocol support, the Windows Management Instrumentation Remote
Protocol uses a special encoding, as specified in [MS-WMIO], to transfer information as specified in
[DMTF-DSP0004] over the network.
1.5 Prerequisites/Preconditions
The client that uses the protocol possesses valid credentials that are recognized by the server
accepting the client requests. The client uses security providers that recognize such credentials to
authenticate to the remote server by using the Security Support Provider Interface (SSPI), which
is supported by the Remote Procedure Call Protocol Extensions, as specified in [MS-RPCE].
The server system is started with the DCOM Remote Protocol activation service fully initialized before
the activation request. The client is configured to receive activation requests from the server if it
wants to call the service asynchronously, as specified in section 4.4.
16 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
1.6 Applicability Statement
The Windows Management Instrumentation Remote Protocol implementation is designed for managing
components that are represented by CIM classes on remote clients and servers. This protocol is
designed to act as a transport for CIM-compatible management objects and operations on CIM
objects.
This document covers versioning issues in the following areas. The Windows Management
Instrumentation Remote Protocol does explicit negotiation as follows:
The client of this protocol uses the mechanism, as specified in [MS-DCOM] section 1.7, to discover
which interfaces are supported by the exported object and to interpret the E_NOINTERFACE result,
as specified in [MS-DCOM] section 1.7. The client then adjusts its behavior based on the
availability of the requested interface, as specified in sections 3.2.3 and 3.2.4.2.8.
The protocol uses return codes as a capability discovery mechanism; the client interprets them as
a capability negotiation, as specified in section 3.2.4.1.1.
The protocol uses return values and parameters to negotiate the locale capabilities of the server
as specified in section 3.2.3.
In order to extend the CIM schema using the Windows Management Instrumentation Remote
Protocol, vendors MUST use operations as specified in section 3.1.4.3.
This protocol uses HRESULT values as specified in [MS-ERREF]. Vendors can define their own
HRESULT values, provided they set the C bit (0x20000000) for each vendor-defined value, indicating
that the value is a customer code.
There are no standards assignments for this protocol. This protocol uses the following class
identifiers (CLSIDs) (as specified in [MS-DCOM] section 1.9):
CLSID_WbemLevel1Login ({8BC3F05E-D86B-11D0-A075-00C04FB68820})
CLSID_WbemBackupRestore ({C49E32C6-BC8B-11D2-85D4-00105A1F8304})
IID_IWbemLevel1Login ({F309AD18-D86A-11d0-A075-00C04FB68820})
IID_IWbemLoginClientID ({d4781cd6-e5d3-44df-ad94-930efe48a887})
IID_IWbemLoginHelper ({541679AB-2E5F-11d3-B34E-00104BCC4B4A})
IID_IWbemServices ({9556DC99-828C-11CF-A37E-00AA003240C7})
IID_IWbemBackupRestore ({C49E32C7-BC8B-11d2-85D4-00105A1F8304})
IID_IWbemBackupRestoreEx ({A359DEC5-E813-4834-8A2A-BA7F1D777D76})
IID_IWbemClassObject ({DC12A681-737F-11CF-884D-00AA004B2E24})
IID_IWbemContext ({44aca674-e8fc-11d0-a07c-00c04fb68820})
17 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
2 Messages
The following sections specify how Windows Management Instrumentation Remote Protocol messages
are transported and specify Windows Management Instrumentation Remote Protocol message syntax.
2.1 Transport
Windows Management Instrumentation Remote Protocol messages MUST be transported via the DCOM
Remote Protocol. The Windows Management Instrumentation Remote Protocol objects that are
exported by the Windows Management Instrumentation (WMI) server MUST be capable of
DCOM activation, as specified in [MS-DCOM] section 3.2.4.1.1.
The client connection MUST be secured at an authentication level that is negotiated by the DCOM
Remote Protocol infrastructure.
A client has the capability to express a query against a server. This query MUST be expressed in the
WMI Query Language (WQL). WQL is a subset of the American National Standards Institute
Structured Query Language, as specified in [FIPS127] and [MSDN-WQL]. WQL differs from the
standard SQL in that WQL retrieves from classes rather than tables, and returns CIM classes or CIM
instances rather than rows. WQL supports a specific semantic designed to query against CIM classes
or CIM instances with their related characteristics. Queries MUST be of one of the following 3 forms:
Event queries: Queries focused on events triggered by state changes of CIM classes or CIM
instances. Events triggered on CIM instances can be internal to the infrastructure (intrinsic) or
external to the infrastructure (extrinsic). Events can also be timer events.
WQL uses terminologies and concepts, as specified in [DMTF-DSP0004], except as noted below, and
requires familiarity with the CIM model. The server MUST treat a backslash as an escape character in
a WQL query, except within a LIKE clause. The server MUST treat literal strings in WQL data as case-
insensitive, contrary to what [DMTF-DSP0004] specifies.
The next section specifies the complete syntax of WQL queries for schema, data, and event queries.
The syntax for the WQL schema and data queries is provided in Augmented Backus-Naur Form
(ABNF).
; -----------------------------------
; WQL schema and data queries
; -----------------------------------
DATA-WQL =
("SELECT" <PROPERTY-LIST> "FROM" <CLASS-NAME>
<OPTIONAL-SEL-WHERE>)/
("SELECT" ASTERISK "FROM" <CLASS-NAME> <OPTIONAL-SEL-WHERE>)/
("SELECT" ASTERISK "FROM META_CLASS" <OPTIONAL-META-WHERE>)/
("ASSOCIATORS OF {" <OBJECT-REL-PATH> "}"
<OPTIONAL-ASSOC-WHERE>)/
18 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
("REFERENCES OF {" <OBJECT-REL-PATH> "}" <OPTIONAL-REF-WHERE>)
OBJECT-REL-PATH =
<CLASS-NAME> "=" <TYPED-CONSTANT> <OBJECT-REL-PATH2>
OBJECT-REL-PATH2 =
[COMMA <OBJECT-REL-PATH>]
; -----------------------------------
; Expression
; -----------------------------------
EXPR =
( [OPEN-PARENTHESIS] <PROPERTY-EVALUATION>
<EXPR2> [CLOSE-PARENTHESIS] ) /
( [OPEN-PARENTHESIS] "__CLASS" <EQUIVALENT-OPERATOR>
<CLASS-NAME> <EXPR2> [CLOSE-PARENTHESIS] )
PROPERTY-EVALUATION =
( <PROPERTY-NAME> <OPERATOR> <TYPED-CONSTANT> ) /
( <PROPERTY-NAME> <IS-OPERATOR> "NULL" )
OPERATOR = <EQUIVALENT-OPERATOR> /
<COMPARE-OPERATOR>
; -----------------------------------
; Characters
; -----------------------------------
ALPHA = %x41-5A
DIGIT = %x30-39
COMMA = ","
ASTERISK = "*"
OPEN-PARENTHESIS = "("
CLOSE-PARENTHESIS = ")"
BLANK = " " / "\x09"
DOUBLEUNDERSCORE = %x5f %x5f
19 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
STRING-IDENTIFIER = ALPHA *(ALPHA / DIGIT / (*("_") ALPHA / DIGIT))
TYPED-CONSTANT = INT /
REAL /
UNICODE-STRING /
DATETIME /
BOOL
INT = "[-+]?\d+"
REAL = "[-+]?(\d*\.\d+)|(\d+)"
STRING = ["]([a-z][A-Z]\d)*["]
; DATETIME is specified in section 2.2.1 of [DMTF-DSP0004]
BOOL = "TRUE" / "FALSE"
UNICODE-STRING A string constant with Unicode characters. This string constant is surrounded by ("") or
a ('').
DATA-WQL A string expressing the WQL query. The WQL string uses different WQL reserved
keywords to select the type of information desired.
SELECT A keyword expressing the selection of information requested (similar to SQL SELECT).
SELECT expresses the CIM class or CIM instance to be queried. It MUST be specified
when the ASSOCIATORS OF or the REFERENCES OF keyword is not used. It MUST NOT
be used when the ASSOCIATORS OF or the REFERENCES OF keyword is used.
FROM A keyword that MUST be specified with the SELECT statement to express the CIM
class or CIM instance the query MUST be executed against.
OPTIONAL-META- The WHERE statement narrows the scope of a SELECT. The WHERE statement followed
WHERE by the __THIS ISA statement is narrowing the scope of the WQL query to return CIM
instances according to the following rule: The only CIM instances returned are the
instances of the class CLASS-NAME and all the subclasses in CLASS-NAME's class
inheritance hierarchy.
__CLASS A keyword referring to the CIM object, indicating the class of the current CIM object.
The __CLASS keyword in a WHERE clause only selects CIM instances of derived classes
made out of the CLASS-NAME.
20 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Schema objects and
keywords Description
ASSOCIATORS OF A keyword that is a WQL statement to locate associated CIM classes or CIM
instances. It MUST NOT be used in combination with the SELECT keyword and the
REFERENCES OF keyword.
OPTIONAL-ASSOC- If the WHERE statement is specified in an ASSOCIATORS OF WQL query, it narrows the
WHERE scope to one or several characteristics of the association and associated CIM classes.
The filter expression can be made of several specific keywords and expressions to
validate these characteristics. Each expression MUST be separated by a BLANK
character, as specified in the preceding ABNF notation. Each expression MUST NOT be
used more than once in a single WQL query. The keyword supported to narrow the
scope of an ASSOCIATORS OF query are AssocClass, RequiredAssocQualifier,
RequiredQualifier, ResultClass, ResultRole, Role, KeysOnly, and ClassDefsOnly.
REFERENCES OF A keyword that is a WQL statement to locate the CIM classes or CIM instances
associating CIM classes or CIM instances. It MUST NOT be used in combination with
the SELECT keyword and the ASSOCIATORS OF keyword.
OPTIONAL-REF-WHERE If the WHERE statement is specified in a REFERENCES OF query, it narrows the scope
to one or several characteristics of the association and associated classes. The filter
expression can be made of several specific keywords and expressions to express these
characteristics. Each expression MUST be separated by a BLANK character. Each
expression MUST NOT be used more than once in a single WQL query. The keywords
supported to narrow the scope of a REFERENCES OF query are RequiredQualifier,
ResultClass, Role, KeysOnly, and ClassDefsOnly.
OBJECT-REL-PATH The CIM relative path of the CIM class or CIM instance to be queried. It MUST be
specified for ASSOCIATORS OF and REFERENCES OF queries.
AssocClass If the AssocClass keyword is being used in ASSOCIATORS OF queries, the resulting
CIM instances MUST be associated with association class or CIM instances made out of
the CLASS-NAME specified.
Role If the Role keyword is being used in ASSOCIATORS OF and REFERENCES OF queries,
the result MUST only return CIM instances where the role matches the reference CIM
property name of the association class.
ResultRole If the ResultRole keyword is being used in ASSOCIATORS OF queries, the result MUST
only return CIM instances where the role matches the reference CIM property name of
21 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Schema objects and
keywords Description
Applicable
Operator Description Type
> Test whether the value of the property is greater than that of the typed-constant. string, numeric,
datetime
< Test whether the value of the property is less than that of the typed-constant. string, numeric,
datetime
>= Test whether the value of the property is greater than or equal to that of the string, numeric,
typed-constant. datetime
<= Test whether the value of the property is less than or equal to that of the typed- string, numeric,
constant. datetime
LIKE Test whether a given character string of the property value matches a specified string
pattern of the typed-constant. The specified pattern can contain exactly the
characters to match, or it can contain meta characters. The table below lists the
meta characters. If used with a non-string property, the behavior is the same as
the '=' operator, and it tests the equivalence of two values. The use of meta
characters mentioned below with a non-string property results in the error
WBEM_E_INVALID_QUERY.
IS NOT Test whether the value of property is not null. string, numeric,
reference,
datetime, object
If typed-constant is string, the operator MUST perform a case-insensitive lexicographic relation test.
If the operator is not applicable to the property type, the server MUST return
WBEM_E_INVALID_QUERY.
Character Description
[ Any one character within a range specified as a sequence of one or more of the following formats,
terminated by a "]":
A non-caret followed by "-" or "=" followed by any character except the terminating "]" matches
any character in a sequential range of characters. For instance, "[a-f]" or "[a=f]" matches any
character from "a" through "f".
A non-caret followed by "-" or "=" followed by the terminating "]" matches the two literal
22 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Character Description
characters inside the brackets: the non-caret and the "-" or "=".
A caret followed by any character except the terminating "]" matches any character except
those in the sequence(s) following the caret, up to the terminating "]". For example, "[^ad-f]"
matches anything except an "a", "d", "e", or "f".
Note that "%", "_", and "[" serve as literals within a bracketed sequence.
% Any string of 0 (zero) or more characters. The following example finds all instances where "Win" is
found anywhere in the class name: SELECT * FROM meta_class WHERE __Class LIKE "%Win%"
_ Any one character. Any literal underscore used in the query string MUST be escaped by placing it
inside [] (square brackets).
The following example shows the syntax for WQL event queries in ABNF notation.
; -----------------------------------
; WQL event queries
; -----------------------------------
; -----------------------------------
; Expression
; -----------------------------------
EXPR =
[OPEN-PARENTHESIS] <PROPERTY-EVALUATION> /
<EXPR2> [CLOSE-PARENTHESIS]
EXPR2 = ( ["OR" [OPEN-PARENTHESIS] <EXPR> /
[CLOSE-PARENTHESIS] ] ) /
( ["AND" [OPEN-PARENTHESIS] <EXPR> /
[CLOSE-PARENTHESIS] ] )
PROPERTY-EVALUATION =
( <PROPERTY-NAME> <OPERATOR> <TYPED-CONSTANT> ) /
( <PROPERTY-NAME> <IS-OPERATOR> "NULL" )
OPERATOR = <EQUIVALENT-OPERATOR> /
<COMPARE-OPERATOR>
23 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
EQUIVALENT-OPERATOR = "=" / "!=" / "<>"
COMPARE-OPERATOR = "<=" / ">=" / "<" / ">" / "LIKE"
IS-OPERATOR = "IS" / "IS NOT"
; -----------------------------------
; Characters
; -----------------------------------
ALPHA = %x41-5A
DIGIT = %x30-39
DOT = ","
COMMA = "."
ASTERISK = "*"
OPEN-PARENTHESIS = "("
CLOSE-PARENTHESIS = ")"
STRING-IDENTIFIER = ALPHA *(ALPHA / DIGIT / (*("_") ALPHA / DIGIT))
DOUBLEUNDERSCORE = "__"
TYPED-CONSTANT = INT /
REAL /
STRING /
DATETIME /
BOOL
INT = "[-+]?\d*"
REAL = "[-+]?\d*(\.\d+)?"
MODULOREAL = "[+]?\d*(\.\d+)?"
STRING = ["]([a-z][A-Z]\d)*["]
; DATETIME is specified in section 2.2.1 of [DMTF-DSP0004]
BOOL = "TRUE" / "FALSE"
Objects and
keywords Description
EVENT-WQL A string expressing the WQL event query. The WQL string uses different WQL reserved keywords
to select the type of information wanted.
SELECT A keyword expressing the selection of information requested (similar to SQL SELECT). SELECT
expresses the CIM class or CIM instance to be queried. It MUST be specified in a WQL event
query.
PROPERTY- A list of PROPERTY-NAME values. PROPERTY-NAME values in the list MUST be separated by a
LIST comma (",").
FROM A keyword that MUST be specified with the SELECT statement to express the CIM class or CIM
instance that the query MUST be run against.
EVENT- MUST be specified and MUST be an intrinsic, an extrinsic, or a timer event class. An intrinsic
CLASS-NAME event class is a class derived from __InstanceOperationEvent, __ClassOperationEvent, or
__NamespaceOperationEvent, representing possible intrinsic events. An extrinsic event class is
a class derived from __ExtrinsicEvent, representing possible extrinsic events. A timer event class
24 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Objects and
keywords Description
is a class derived from __TimerEvent event class, representing possible timer events.
WITHIN A keyword indicating the server to poll the system for an event. In case of an intrinsic EVENT-
CLASS-NAME, the WITHIN keyword MUST be specified. The WITHIN keyword is optional for
extrinsic EVENT-CLASS-NAME. If the WITHIN keyword is specified, the INTERVAL MUST be
specified.
INTERVAL INTERVAL specifies the polling interval. It MUST be expressed in seconds. If "WITHIN" is
specified, the INTERVAL MUST be specified.
EVENT- The WHERE statement narrows the scope of a SELECT event query if the EVENT-CLASS-NAME is
WHERE an extrinsic or timer event CIM class. The WHERE statement MUST be specified to narrow the
scope of a SELECT event query if the EVENT-CLASS-NAME is an intrinsic CIM class.
INSTANCE- Indicates the type of instance to be evaluated. INSTANCE-STATE MUST be specified if CLASS-
STATE NAME is an intrinsic CIM class. INSTANCE-STATE is optional if CLASS-NAME is an extrinsic CIM
class. If specified, INSTANCE-STATE MUST be PREVIOUSINSTANCE (to indicate that the state of
the CIM class or CIM instance before the event MUST be evaluated) or TARGETINSTANCE (to
indicate that the state of the CIM class or CIM instance after the event MUST be evaluated).
ISA A keyword that MUST be used in combination with the INSTANCE-STATE keyword. It is used as a
comparative operator between the INSTANCE-STATE and a CLASS-NAME to reduce the scope of
events returned to the CIM instances made out of the CLASS-NAME.
GROUP If the GROUP WITHIN keyword is used, the INTERVAL MUST be specified. This keyword indicates
WITHIN that all events occurring during the WITHIN INTERVAL period MUST be grouped as one event.
HAVING If the HAVING keyword is specified, it MUST be followed by EXPR to filter the selection of events.
This keyword indicates that all events grouped during the GROUP WITHIN period MUST meet the
expression specified in EXPR before being returned as one event.
BY A keyword that groups event instances sharing a same value on a specified PROPERTY-NAME. In
such a case, events are returned that represent a group of events sharing the same PROPERTY-
NAME value. The system MUST return as many events representing a group of events as there
are PROPERTY-NAME values.
The syntax for CIM path and namespace is provided in ABNF notation.
; -----------------------------------
; CIM PATH
; -----------------------------------
CLASS-NAME = [__]<STRING-IDENTIFIER>
25 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
PROPERTY-NAME = [__]<STRING-IDENTIFIER>
; -----------------------------------
; NAMESPACE
; -----------------------------------
TYPED-CONSTANT = INT /
REAL /
STRING /
DATETIME /
BOOL
INT = "[-+]?\d*"
REAL = "[-+]?\d*(\.\d+)?"
STRING = ["]([a-z][A-Z]\d)*["]
DATETIME =
"(\d\d\d\d)(0\d|1[012])(0\d|[12][0-9]|3[01])([0-1]\d|2[0-3])([0-5]\d)([0-
5]\d)[.]\d\d\d\d\d\d[+-]([0-6][02468][0]|7[0-2][0])"
; -----------------------------------
; Characters
; -----------------------------------
ALPHA = %x41-5A
DIGIT = %x30-39
BACKSLASH = "\"
DOT = "."
STRING-IDENTIFIER = ALPHA *(ALPHA / DIGIT / (*("_") ALPHA / DIGIT))
COLON=":"
MACHINENAME = <STRING-IDENTIFIER> / DOT
Objects and
keywords Description
MACHINENAME The network-identifiable name of the machine where the referenced WMI class, instance,
or namespace resides.
KEY-VALUE-LIST List of property names and their values, separated by a ",". Each property value pair is
represented in propertyName=value format.
Codes that are returned by the protocol are represented as an HRESULT, as specified in [MS-ERREF]
section 2.1.
The HRESULT values that are documented in the following table are interpreted by the protocol
through a specific set of interface methods, as specified in sections 3.1.4.3, 3.1.4.4.2, and 3.2.4.1.1.
26 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
The severity bit of HRESULT MUST be interpreted as specified in [MS-ERREF] section 2.1. HRESULT
errors are not recoverable by the protocol. HRESULT successes, other than the ones specified in the
following table, MUST be considered as equal to WBEM_S_NO_ERROR.
Constant/value Description
WBEM_S_FALSE Either no more CIM objects are available, the number of returned CIM objects is less
0x00000001 than the number requested, or this is the end of an enumeration.
WBEM_S_NEW_STYLE The operation was successful and indicates that the receiver of the call is able to receive
0x000400FF optimized IWbemObjectSink::Indicate calls.
The signatures of many methods that are related to the Windows Management Instrumentation
Remote Protocol include a parameter to specify an IWbemClassObject interface pointer. This
parameter MUST be custom marshaled by the DCOM Remote Protocol, as specified in the following
table. The IWbemClassObject interface represents a WMI object, such as a WMI class or an object
instance. All CIM objects (CIM classes and CIM instances) that are passed during WMI calls
between the client and server are objects of this interface.
Parameter/source Value/description
Marshaling buffer The buffer representing a CIM object MUST be encoded using the EncodingUnit object
layout block, as specified in [MS-WMIO] section 2.2.1.
The prototype result object is an IWbemClassObject (section 2.2.4) that is returned when the lFlags
parameter of the IWbemServices::ExecQuery (section 3.1.4.3.18) or
IWbemServices::ExecQueryAsync (section 3.1.4.3.19) method includes the WBEM_FLAG_PROTOTYPE
flag.
The query returns the CIM class object that is specified in the CLASS-NAME of the query that is
modified to match the query.
If the query specifies PROPERTY-LIST, as specified in section 2.2.1.1, the class object is modified to
represent the results of the query by removing all the properties that are not specified in the
PROPERTY-LIST of the query and by adding selected properties with the Order qualifier (see the
2nd paragraph following concerning the Order qualifier). In this case, the CIM class is encoded as an
IWbemClassObject object, with an ObjectFlags block that contains a 0x10 value that is set as specified
27 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
in [MS-WMIO] section 2.2.6. If any key property is removed because it is not specified in PROPERTY-
LIST, the 0x40 flag is set on ObjectFlags.
If the query specifies ASTERISK, as specified in section 2.2.1.1, the class object is returned with all
the properties added to the Order qualifier. In this case, the CIM class is encoded as an
IWbemClassObject object and the 0x10 flag is not set in ObjectFlags.
The Order qualifier (QUALIFIER-NAME attribute set to Order, see section 2.2.1.1) is an array of 32-
bit signed integers. Each value in the array represents the position of the property in PROPERTY-
LIST (if PROPERTY-LIST is specified) or represents the order in which the property appears in the
class (if the query specifies ASTERISK). The position is encoded starting from 0.
For example,
results in class1 containing only two properties, prop1 and prop2. The prop1 property is added to an
Order qualifier that has a value of {0,2}, and the prop2 property is added to an Order qualifier that
has a value of {1}.
Note The prop1 property occurs twice in the PROPERTY-LIST, at positions 1 and 3, and therefore,
has two values {0,2}.
If the query specifies a PROPERTY-LIST that does not contain at least one of the following
properties, the DerivationList in ClassPart of the CurrentClass, as specified in [MS-WMIO] section
2.2.17, is encoded as empty:
__DERIVATION
__SUPERCLASS
__DYNASTY
Otherwise, the DerivationList in ClassPart of the CurrentClass is encoded in the same way as the
actual CIM class that represents the CLASS-NAME of the query.
The PropertyLookupTable, NdTable, ValueTable, and ClassHeap in ClassPart of the CurrentClass (as
specified in [MS-WMIO] section 2.2.15) are encoded to contain only the selected properties in the
query.
Remaining items are encoded in the same way as the CIM class that represents the CLASS-NAME
that is specified in the query.
Extrinsic events are events generated by a component outside the implementation. In WMI, extrinsic
events are represented as instances of a class that is derived from the __ExtrinsicEvent class. If any
component wants to generate an event, the component defines a class that is derived from the
__ExtrinsicEvent class. Instances of the derived class defined by the component, represented by using
IWbemClassObject (section 2.2.4), are used to send events.
[abstract]
class __SystemClass
{
};
28 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
[abstract]
class __IndicationRelated : __SystemClass
{
};
Where TIME_CREATED is the time at which the event is generated, represented as a 64-bit value that
represents the number of 100-nanosecond intervals since January 1, 1601 (UTC), and
SECURITY_DESCRIPTOR is a security descriptor, as defined in [MS-DTYP], represented as an array of
bytes. The security descriptor MUST specify security for events as specified in section 5.2.
The WBEM_CHANGE_FLAG_TYPE enumeration is used to indicate and update the type of the flag.
WBEM_FLAG_CREATE_OR_UPDATE: This flag causes the put operation to update the class or
instance if it does not exist, or to overwrite the class or instance if it exists already.
WBEM_FLAG_UPDATE_ONLY: This flag causes the put operation to update the class or instance.
The class or instance MUST exist for the call to be successful.
WBEM_FLAG_CREATE_ONLY: This flag causes the put operation to create the class or instance. For
the call to be successful, the class or instance MUST NOT exist.
WBEM_FLAG_UPDATE_SAFE_MODE: This flag allows updates of classes even if there are child
classes, as long as the change does not cause any conflicts with child classes. An example of an
update that this flag allows is the adding of a new property to the base class that was not
previously mentioned in any of the child classes. If the class has instances, the update fails.
The WBEM_GENERIC_FLAG_TYPE enumeration is used to indicate and update the type of the flag.
29 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
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;
WBEM_FLAG_RETURN_IMMEDIATELY: This flag causes the call to return without waiting for the
operation to complete. The call result parameter contains the IWbemCallResult object by using the
status of the operation that can be retrieved.
WBEM_FLAG_NO_ERROR_OBJECT: This flag MUST NOT be set, and MUST be ignored on receipt.
WBEM_FLAG_SEND_STATUS: This flag registers a request with WMI to receive intermediate status
reports through the client implementation of IWbemObjectSink::SetStatus, if supported by the
server implementation.
WBEM_FLAG_ENSURE_LOCATABLE: This flag ensures that any returned objects have enough
information in them so that system properties, such as __PATH, __RELPATH, and __SERVER,<1>
are non-NULL.
WBEM_FLAG_DIRECT_READ: This flag causes direct access to the specified class without regard to
its parent class or subclasses.
WBEM_MASK_RESERVED_FLAGS: This flag MUST NOT be set, and MUST be ignored on receipt.
The localized qualifiers or amended qualifiers are identified by the qualifier flavor as defined in
[MS-WMIO] section 2.2.62.
If this flag is not set, the server does not retrieve any localized qualifiers for the CIM object.
The WBEM_STATUS_TYPE enumeration gives information about the status of the operation.
30 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
typedef enum tag_WBEM_STATUS_TYPE
{
WBEM_STATUS_COMPLETE = 0,
WBEM_STATUS_REQUIREMENTS = 0x01,
WBEM_STATUS_PROGRESS = 2
} WBEM_STATUS_TYPE;
WBEM_STATUS_REQUIREMENTS: This flag MUST NOT be set, and MUST be ignored on receipt.
The WBEM_TIMEOUT_TYPE enumeration gives information about the type of time-out for the process.
The WBEM_QUERY_FLAG_TYPE enumeration gives information about the type of the flag.
31 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
If used in IWbemServices::CreateInstanceEnum or IWbemServices::CreateInstanceEnumAsync,
this constant causes the enumeration to return only the instances of this class and excludes all
instances of subclasses.
WBEM_FLAG_PROTOTYPE: This flag is used for prototyping. It does not run the query; instead, it
returns the Prototype Result Object as specified in section 2.2.4.1.
The WBEM_BACKUP_RESTORE_FLAGS enumeration gives information about the backup and restore
state of the process.
The WBEMSTATUS enumeration gives information about the status of an operation. If the server
encounters an error condition for which this protocol does not explicitly state an error value, the
server can return any HRESULT to indicate failure by setting the Severity (S bit) of the HRESULT, as
defined in [MS-ERREF] section 2.1.
The statuses of operations that are not explicitly called out in this document but are part of the
associated IDL are deemed to be local-only and are implementation-specific.
32 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
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;
WBEM_S_FALSE: Either no more CIM objects are available, the number of returned CIM objects is
less than the number requested, or this is the end of an enumeration. This error code is returned
from the IEnumWbemClassObject and IWbemWCOSmartEnum interface methods.
WBEM_S_NEW_STYLE: The server supports ObjectArray encoding; see section 3.1.4.2.1 for details.
WBEM_S_PARTIAL_RESULTS: The server could not return all the objects and/or properties
requested.
WBEM_E_FAILED: The server has encountered an unknown error while processing the client's
request.
WBEM_E_ACCESS_DENIED: The permission required to perform the operation is not helped by the
security principal performing the operation.
33 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
WBEM_E_TYPE_MISMATCH: The server has found an incorrect data type associated with property
or input parameter in client's request.
WBEM_E_OUT_OF_MEMORY: The server ran out of memory before completing the operation.
WBEM_E_ALREADY_EXISTS: When a Put method is called for a CIM object with the flag
WBEM_FLAG_CREATE_ONLY and the object already exists, WBEM_E_ALREADY_EXISTS is
returned.
E_NOTIMPL: The attempted operation is not implemented. The value of this element is as specified
in [MS-ERREF] section 2.1.
WBEM_E_INVALID_SUPERCLASS: When putting a class, the server did not find the parent class
specified for the new class to be added.
WBEM_E_INVALID_OBJECT: The CIM instance passed to the server doesn't have required
information.
WBEM_E_INVALID_QUERY: The query sent to the server doesn't semantically conform to the rules
specified in section 2.2.1.
34 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
WBEM_E_INVALID_QUERY_TYPE: The query language specified is invalid.
WBEM_E_PROVIDER_NOT_CAPABLE: The server does not support the requested operation on the
given CIM class.
WBEM_E_ILLEGAL_NULL: The server identifies that one of the non-nullable NULL properties was
set to NULL in the Put operation.
WBEM_E_INVALID_METHOD: The CIM object does not implement the specified method.
WBEM_E_INVALID_PROPERTY: The property for which the operation is made is no longer present
in the CIM database.
WBEM_E_CALL_CANCELLED: The server canceled the execution of the request due to resource
constraints. The client can try the call again.
WBEM_E_UNPARSABLE_QUERY: The query sent to the server doesn't syntactically conform to the
rules specified in section 2.2.1.
WBEM_E_NOT_EVENT_CLASS: The FROM clause of WQL Event Query (section 2.2.1.2) represents
a class that is not derived from Event.
35 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
WBEM_E_BACKUP_RESTORE_WINMGMT_RUNNING: A request for backing up or restoring the
CIM database was sent while the server was using it.
WBEM_E_QUEUE_OVERFLOW: The EventQueue on the server has more events than can be
consumed by the client.
WBEM_E_PRIVILEGE_NOT_HELD: The server could not find the required privilege for performing
operations on CIM classes or CIM instances.
WBEM_E_INVALID_OPERATOR: An operator in the WQL query is invalid for this property type.
WBEM_E_CANNOT_BE_ABSTRACT: The CIM class on the server had the abstract qualifier set to
true, while its parent class does not have the abstract qualifier set to false.
WBEM_E_AMENDED_OBJECT: A CIM instance with amended qualifier set to true is being updated
without WBEM_FLAG_USE_AMENDED_QUALIFIERS flag.
WBEM_E_VETO_PUT: The server cannot perform a PUT operation because it is not supported for
the given CIM class.
WBEM_E_PROVIDER_TIMED_OUT:
WBEM_E_REGISTRATION_TOO_PRECISE: The WQL query for intrinsic events for a class issued
without a WITHIN clause.
The WBEM_CONNECT_OPTIONS enumeration gives information about the type of options of the
connection.
The signatures of many methods that are related to the Windows Management Instrumentation
Remote Protocol include a parameter to specify an IWbemContext interface pointer. The
IWbemContext interface represents an IWbemContext object, which acts as a property bag (a
specialized container for properties that store variants) that a client MAY use to store additional
36 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
information to be used by the server. This information MUST be composed of a property list, the
property types, and the assigned property values.
The following properties can be passed as part of any call where IWbemContext is passed as a
parameter to the server.<3>
When used through Windows Management Instrumentation Remote Protocol methods, the
IWbemContext parameter MUST be custom marshaled by the DCOM Remote Protocol (see [MS-
DCOM]), as specified in the following list.
Parameter/source Value/description
Marshaling buffer The marshaling buffer has the format of the IWbemContextBuffer structure, as specified
layout in section 2.2.13.1.
For the IDL of these two IWbemContext interfaces, see Appendix A, which contains the full IDL of the
Windows Management Instrumentation Remote Protocol.
37 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
All scalar types that are encountered in the following structures MUST be stored in little-endian
format.
The IWbemContext interface is marshaled or unmarshaled by using the following data structures.
Structure Description
The IWbemContext interface pointer is specified as a parameter for many remote methods in WMI.
The data structures that are listed here define the wire formats for the data that is used by this
protocol.
The integer formats OCTET, UINT16, and UINT32 are encoded as defined in [MS-WMIO] section
2.2.72.
The IWbemContextBuffer data structure defines the wire format for buffer data that is used by this
protocol. Its structure has the following encoding format (defined in ABNF notation as specified in
[RFC4234]).
The stream MUST start with a 32-bit integer (NumGUIDs, in the following list). The following
ABNF represents the number of GUIDs that are present in the next GuidArray. GUID is defined in
[MS-DTYP] section 2.3.4.
NumGuids = UINT32
NumGuids MUST be set to 1, MUST be followed by an array of standard GUIDs, and MUST
contain NumGuids elements. Since the NumGuids value is set to 1, only one GUID needs to be
present.
The stream MUST contain a 32-bit integer that represents the property count.
NumProps = UINT32
The property list MUST immediately follow the property count and MUST be marshaled as a
continuous list without padding between properties, as specified in
IWbemContextProperty (section 2.2.13.2). The number of IWbemContextProperty properties
MUST be equal to NumProps.
The IWbemContextProperty data structure defines the wire format for property data that is used by
this protocol. The property is a variable-length structure and has the following structure:
38 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
IWbemContextProperty = PropertyName PropertyFlags PropertyType PropertyValue
PropertyName = IWbemContextString
PropertyFlags = UINT32
PropertyType is a 16-bit unsigned integer that represents the type of the property.
PropertyType = UINT16
MUST have one of the following values as specified in [MS-OAUT] section 2.2.7:
VT_NULL
VT_I2
VT_I4
VT_R4
VT_R8
VT_BSTR
VT_BOOL
VT_UI1
VT_UI2
VT_UI4
VT_UNKNOWN
VT_I1
If the value is an array, the listed property types MUST be combined by using the bitwise OR
operation with VT_ARRAY (also specified in [MS-OAUT] section 2.2.7).
VT_UI1, VT_I1 MUST be marshaled as an array of 8 bytes with the first byte containing the value of
the property.
39 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Property types Marshaling
VT_I2, VT_UI2, MUST be marshaled as an array of 8 bytes with the first 2 bytes containing the value
VT_BOOL of the property.
VT_I4, VT_UI4 MUST be marshaled as an array of 8 bytes with the first 4 bytes containing the value
of the property.
VT_R4 MUST be marshaled as an array of 8 bytes with the first 4 bytes containing the
value of the property, as specified in [IEEE754], a 4-byte floating-point format.
The IWbemContextString data structure defines the wire format for the string data that is used by this
protocol. Strings (property names and VT_BSTR properties values) MUST be represented as a 32-bit
character count and followed by a sequence of characters that are encoded in UTF-16, as specified in
[UNICODE].
StringLength = UINT32
UnicodeCharacter = 2OCTET
The IWbemContextArray data structure defines the wire format for array data that is used by this
protocol. IWbemContextArray has the following structure:
ElementCount MUST be an integer that represents the number of elements in the array.
ElementCount = UINT32.
ElementSize MUST represent the size of a single element in the array. The size MUST match the
size of the elements. ElementSize = UINT32.
Elements is a variable stream of bytes that represent all element values in the array. (Array
elements are marshaled in a different representation from nonarray elements.)
Each element MUST be marshaled as an array of bytes that use the following representation.
40 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Type Marshaling
VT_IUNKNOWN MUST be marshaled as an array of bytes that represent a marshaling buffer for the
IWbemClassObject interface. In this case, ElementSize SHOULD be set to 4 or 8.<5>
VT_R4 MUST be marshaled as an array of 8 bytes with the first 4 bytes containing the value of
the property, as specified in [IEEE754], in a 4-byte floating-point format.
The ObjectArray structure MUST be used to encode multiple CIM objects that are returned in
response to the IWbemWCOSmartEnum::Next (section 3.1.4.7.1) method. This structure is also used
to encode parameters of the optimized IWbemObjectSink::Indicate (section 3.1.4.2.1) method.<6>
To minimize network bandwidth, a server SHOULD support the ObjectArray structure when an array of
CIM objects is sent.
The optimization MUST be achieved by sending the CIM class information just once at the beginning
of the communication for the same class type. Instances of different classes are allowed, in which case
only the first instance of every unique class MUST contain the CIM class information for optimization.
This CIM class MUST be identified by a randomly generated GUID, generated by the server, that that
is maintained by both the server and the client for the duration of the method call. The remaining CIM
instances MUST be sent without the CIM class information. The CIM class definition that is identified
by the GUID is used to reconstruct the full CIM instances on the client side.
1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
dwByteOrdering
abSignature
...
dwSizeOfHeader1
dwDataSize1
dwFlags
41 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
... dwDataSize2
... dwSizeOfHeader3
... dwDataSize3
... dwNumObjects
...
Value Meaning
abSignature (8 bytes): MUST be set to {0x57, 0x42, 0x45, 0x4D, 0x44, 0x41, 0x54, 0x41} (a byte
array containing the unquoted, unterminated ASCII string "WBEMDATA").
dwSizeOfHeader1 (4 bytes): This stores the total size of these fields: dwByteOrdering,
abSignature, dwSizeofHeader1, dwDataSize1, dwFlags, bVersion, and bPacketType.
The size of the header MUST be 0x0000001A. Data immediately follows the header.
dwDataSize1 (4 bytes): MUST indicate the length, in bytes, of the data that follows this header,
starting at the dwSizeOfHeader2 field.
bVersion (1 byte): The version number of the header. The version MUST be 1.
bPacketType (1 byte): The value of this field is dependent on the call context.
Value Meaning
dwSizeOfHeader2 (4 bytes): This stores the size of these fields: dwSizeofHeader2 and
dwDataSize2.
This value MUST be 8. Data immediately follows after the field dwDataSize2.
dwDataSize2 (4 bytes): MUST be the size, in bytes, of the data that follows this field.
dwDataSize3 (4 bytes): MUST indicate the length of the remaining data, starting at the
wbemObjects field.
42 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
wbemObjects (variable): The objects array that contains the CIM class definition and CIM
instances. These CIM objects MUST be encoded in the WBEM_DATAPACKET_OBJECT structure.
The WBEM_DATAPACKET_OBJECT MUST contain the CIM class definition and CIM instances.
1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
dwSizeOfHeader
dwSizeOfData
...
dwSizeOfData (4 bytes): The size, in bytes, of the data following the WBEM_DATAPACKET_OBJECT
header.
bObjectType (1 byte): The type of data in the data packet. The type MUST take one of the following
specified values.
Value Meaning
Object (variable): The CIM object carried into the WBEM_DATAPACKET_OBJECT, having
dwSizeOfData bytes. The embedded CIM object MUST match the selector field bObjectType.
1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
dwSizeOfHeader
dwSizeOfData
ObjectData (variable)
43 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
...
dwSizeOfHeader (4 bytes): The size, in bytes, of the header, which MUST be 0x00000008.
dwSizeOfData (4 bytes): The size, in bytes, of the data that follows the header.
ObjectData (variable): Contains the string of bytes that represent the CIM class, encoded as
EncodingUnitObjectBlock, as specified in [MS-WMIO] section 2.2.2.
1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
dwSizeOfHeader
dwSizeOfData
...
...
ObjectData (variable)
...
dwSizeOfHeader (4 bytes): The size, in bytes, of the header, which MUST be 0x00000018.
dwSizeOfData (4 bytes): The size, in bytes, of the data that follows the header.
classID (16 bytes): The unique identifier of the CIM class type.
ObjectData (variable): Contains the string of bytes that represent the CIM instance, encoded as
EncodingUnitObjectBlock, as specified in [MS-WMIO] section 2.2.2.
The WBEMOBJECT_INSTANCE_NOCLASS structure MUST contain a CIM instance without the CIM
class definition.
1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
dwSizeOfHeader
dwSizeOfData
44 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
...
...
ObjectData (variable)
...
dwSizeOfHeader (4 bytes): The size, in bytes, of the header, which MUST be 0x00000018.
dwSizeOfData (4 bytes): The size, in bytes, of the data that follows the header.
classID (16 bytes): The unique identifier of the CIM class type.
ObjectData (variable): Contains the string of bytes that represent the CIM instance, encoded as
the EncodingUnitInstanceNoClass object block, as specified in [MS-WMIO] section 2.2.3. The CIM
instance transmitted using EncodingUnitInstanceNoClass does not have a CurrentClass block (as
specified in [MS-WMIO] section 2.2.13) to minimize the data transmitted because CurrentClass
contains the same data for all the CIM instances.
The CurrentClass for another instance of the same CIM class is previously sent using the
WBEMOBJECT_INSTANCE structure. To match the WBEMOBJECT_INSTANCE structure that has the
CurrentClass block, the classID specified in WBEMOBJECT_INSTANCE_NOCLASS MUST be matched
with the classID of WBEMOBJECT_INSTANCE. If a matching WBEMOBJECT_INSTANCE is found, the
CurrentClass block in the WBEMOBJECT_INSTANCE MUST be used to encode or decode
EncodingUnitInstanceNoClass. If no matching WBEMOBJECT_INSTANCE is found during decoding, it
MUST be treated as an error. If no matching WBEMOBJECT_INSTANCE is found during encoding, the
CIM instance MUST be encoded as a WBEMOBJECT_INSTANCE structure.
The WBEM_REFRESHED_OBJECT structure MUST be used to encode the results of the remote
refreshing service that is returned by the
IWbemRemoteRefresher::RemoteRefresh (section 3.1.4.13.1) interface method.
m_lBlobType: MUST represent the type of the CIM object that is encoded in m_pbBlob as specified
in 2.2.17.
m_pBlob: When the m_lBlobType parameter is set to WBEM_BLOB_TYPE_ALL, it MUST contain the
instance information that is represented in the RefreshedSingleInstance format for a single
IWbemClassObject interface pointer being part of the refreshing result.
45 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
When m_lBlobType is set to WBEM_BLOB_TYPE_ENUM, it MUST contain the instance information
that is represented in the WBEM_INSTANCE_BLOB format for several IWbemClassObject interface
pointers being part of the refreshing result.
The WBEM_INSTANCE_BLOB is used to represent the refreshed object or enumeration in the m_pBlob
attribute of the WBEM_REFRESHED_OBJECT structure.
1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
Version
numObjects
Objects (variable)
...
Version (4 bytes): MUST represent the encoding version. Version MUST be set to 0x00000001.
numObjects (4 bytes): MUST represent the number of CIM objects encoded that are contained in
the package.
Objects (variable): MUST contain a sequence of IWbemClassObjects of count numObjects, with each
IWbemClassObject encoded in RefreshedInstances format.
2.2.18 RefreshedInstances
1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
blobSize
46 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Blob (variable)
...
2.2.19 RefreshedSingleInstance
2. NdTable
3. InstanceData
4. InstanceQualifierSet
5. InstanceHeap
typedef struct {
long m_lType;
[switch_is(m_lType)] WBEM_REFRESH_INFO_UNION m_Info;
long m_lCancelId;
} _WBEM_REFRESH_INFO;
m_lCancelId: MUST be a unique identifier for the refresher object that is being used to cancel the
refreshing object when the refresher object is using
IWbemRemoteRefresher::StopRefreshing (section 3.1.4.13.2).
The _WBEM_REFRESHER_ID structure identifies the client that is requesting refreshing services. The
structure MUST be used to return information from IWbemRefreshingServices (section 3.1.4.12)
interface methods.
typedef struct {
[string] LPSTR m_szMachineName;
DWORD m_dwProcessId;
GUID m_guidRefresherId;
47 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
} _WBEM_REFRESHER_ID;
m_dwProcessId : It MUST be an identifier created by the client and it MUST be unique within the
context of the client.<7>
The _WBEM_RECONNECT_INFO structure MUST contain the type for the information about the target
CIM instance.
typedef struct {
long m_lType;
[string] LPCWSTR m_pwcsPath;
} _WBEM_RECONNECT_INFO;
m_pwcsPath : MUST be a CIM path to the remote CIM instance to be added to the refresher.
typedef struct {
long m_lId;
HRESULT m_hr;
} _WBEM_RECONNECT_RESULTS;
m_lId: MUST be a unique identifier for the refresher object used to cancel the refreshing object by
using the IWbemRemoteRefresher::StopRefreshing (section 3.1.4.13.2) interface method.
The _WBEM_RECONNECT_TYPE enumeration defines possible types of remote CIM instances. The
structure MUST be used to return to information from IWbemRefreshingServices (section 3.1.4.12)
interface methods.
typedef enum
{
WBEM_RECONNECT_TYPE_OBJECT = 0,
WBEM_RECONNECT_TYPE_ENUM = 1,
WBEM_RECONNECT_TYPE_LAST = 2
} WBEM_RECONNECT_TYPE;
48 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
WBEM_RECONNECT_TYPE_LAST: This member is used only by the server to track the range of
values for this enumeration. It MUST NOT be used by the client.
typedef enum
{
WBEM_REFRESH_TYPE_INVALID = 0,
WBEM_REFRESH_TYPE_REMOTE = 3,
WBEM_REFRESH_TYPE_NON_HIPERF = 6
} WBEM_REFRESH_TYPE;
WBEM_REFRESH_TYPE_INVALID: The server uses this value internally. The server MUST NOT
return this value.
typedef struct {
[string] wchar_t* m_wszNamespace;
IWbemClassObject* m_pTemplate;
} _WBEM_REFRESH_INFO_NON_HIPERF;
typedef struct {
IWbemRemoteRefresher* m_pRefresher;
IWbemClassObject* m_pTemplate;
GUID m_Guid;
} _WBEM_REFRESH_INFO_REMOTE;
m_pRefresher: MUST be a pointer to the IWbemRemoteRefresher interface that the client used to
retrieve the refreshed information.
49 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
m_Guid: MUST be a globally unique identifier (GUID) created to identify this
_WBEM_REFRESH_INFO object.
The _WBEM_REFRESH_INFO_UNION union defines a union of one of the following types: m_Remote,
m_NonHiPerf, or m_hres.
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;
The client can request data from the WMI server in a client-preferred locale. The format of each locale
MUST conform to one of the following:
"MS_xxx" format, where "xxx" is a string representation of LCID in BASE16, which identifies the
locale as specified in [MS-LCID]. For example, to send LCID 1033 (0x409), the string is "MS_409".
Locale name format as specified in [MS-LCID]. For example, LCID 1033 (0x409) maps to en-US
and is passed as "en-US" in this representation.
The __SystemSecurity class is used to read or modify the security descriptor for a CIM namespace.
The class is defined by WMI as shown in the following MOF text.
2.2.30.1 __SystemSecurity::GetSD
The GetSD method gets the security descriptor in the NamespaceConnection of the namespace. This
method is called using the IWbemServices interface as described in section 3.2.4.2.5.
void GetSD (
[out] Uint32 sd
);
50 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
sd: Exchanges a byte array containing a self-relative SECURITY_DESCRIPTOR structure, as defined in
[MS-DTYP] (section 2.4.6).
2.2.30.2 __SystemSecurity::SetSD
The SetSD method changes the security descriptor in the NamespaceConnection of the namespace. If
there is a parent namespace, server MUST add access control entries of the parent to the security
descriptor using the following rules.
If the Discretionary Access Control List of the parent security descriptor is not protected, meaning that
if the SE_DACL_PROTECTED bit is not set in the parent security descriptor, then execute the following
algorithm using the DACL of the parent and child security descriptors.
If the System Access Control List of the parent security descriptor is not protected, meaning that if the
SE_SACL_PROTECTED bit is not set in the parent security descriptor, then execute the following
algorithm using the SACL of the parent and child security descriptors.
1. For each Access Control Entry of parent ACL, if CONTAINER_INHERIT_ACE bit is not set, then
ignore this ACE.
2. Otherwise, append the parent ACE to the ACL in the child security descriptor. If
NO_PROPAGATE_INHERIT_ACE bit is set in the parent ACE, server MUST clear the
CONTAINER_INHERIT_ACE bit from the appended ACE.
3. If INHERIT_ONLY_ACE bit is set in the parent ACE, server MUST clear this bit from the appended
ACE.
void SetSD (
[out] Uint32 sd
);
2.2.30.3 RequiresEncryption
The RequiresEncryption qualifier has a Boolean data type. If the RequiresEncryption qualifier is
present and set to TRUE for the __SystemSecurity singleton instance, the server SHOULD set the
RequiresEncryption flag for the containing CIM namespace. If RequiresEncryption is set, the
server MUST reject the client request with authentication levels that are not equal to
RPC_C_AUTHN_LEVEL_PKT_PRIVACY.<10>
Classes whose names begin with an underscore are termed system classes. WMI defines certain
system classes as listed as below. MOF representation of each of the class objects can be obtained by
using the script specified in Appendix D: Enumerating Class Schema.
__SystemClass: Base class from which for all of the system classes below.
__SystemSecurity: Contains methods that let you access and modify the security settings for a
namespace as specified in section 2.2.30.
51 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
__IndicationRelated: Serves as a parent class for all event-related classes.
__Event: An abstract base class that serves as the parent class for all intrinsic and extrinsic events.
__ExtrinsicEvent: Serves as a parent class for all user-defined event types, also known as extrinsic
events.
__NamespaceOperationEvent: A base class for all intrinsic events that relate to a namespace.
__ClassOperationEvent: A base class for all intrinsic events that relate to a class.
__InstanceOperationEvent: Serves as a base class for all intrinsic events that relate to an instance.
__TimerEvent: Reports an event generated by WMI in response to an event consumer's request for
an interval timer event or an absolute timer event.
The following table lists WMI-specific qualifiers described in [MSDN-QUAL] and the processing rules
for each of them.
52 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Qualifier Description
53 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Qualifier Description
54 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
3 Protocol Details
The following sections specify details of the Windows Management Instrumentation Remote Protocol,
including abstract data models, interface method syntax, and message processing rules. A client in the
context of this specification is a machine that issues a Windows Management Instrumentation Remote
Protocol request. The request is issued against a Windows Management Instrumentation Remote
Protocol server. In this context, a server is a machine that handles the request issued by the client.
Detailed sequence diagrams are as specified in section 4.
A client in the context of this specification is a machine that issues a Windows Management
Instrumentation Remote Protocol request. The request is issued against a Windows Management
Instrumentation Remote Protocol server. In this context, a server is a machine that handles the
request issued by the client. Detailed sequence diagrams are as specified in section 4. However, an
overview of a typical protocol sequence is illustrated as follows.
55 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Figure 3: Typical protocol sequence
Unless otherwise indicated, each of the following elements is maintained in volatile storage.
The server MUST maintain an InitSuccess Boolean value that shows whether all the data structures
were initialized successfully.
56 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
The server MUST maintain an EventDropLimit DWORD value that represents the threshold used for
dropping the events on the server.
The server MUST maintain a MaxRequestLimit integer value that represents the maximum number
of requests the server can handle at a time. This value is implementation-specific.<12>
The server MUST maintain a CurrentRequestCount counter that represents the number of
IWbemServices calls in progress.
The server MUST maintain a global BackupInProgress flag that indicates whether an
IWbemBackupRestore::Backup operation has been triggered by a client and is in progress.
The server MUST maintain a global RestoreInProgress flag that indicates whether an
IWbemBackupRestore::Restore operation has been triggered by a client and is in progress.
The server MUST maintain a global IsServerPaused flag that indicates whether an
IWbemBackupRestore::Pause operation has been triggered by a client and is in progress.
The server MUST maintain a global IsServerShuttingDown flag that indicates whether the server is
in the process of shutting down.
The server MUST maintain a table NamespaceConnectionTable in the CIM database, where each
entry contains:
Security Descriptor: The scheme used for initializing the security descriptor is implementation-
dependent.<13>
RequiresEncryption: A flag that indicates whether a DCOM client request needs the security level set
to RPC_C_AUTHN_LEVEL_PKT_PRIVACY.
ClassTable: A ClassTable (see below) that contains information about the classes in the namespace.
EventConsumer: An interface pointer back to the client through which the client is notified of
events.
EventPollingTimer: A timer that specifies the interval at which WMI will poll the provider
responsible for the class for intrinsic events.
EventGroupingTimer: A timer that specifies for how long events for a given consumer and filter
are to be withheld before being delivered.
EventQueue: A collection of events that have occurred and have yet to be dispatched to the
Event Consumer.
57 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
PrevInstances: Array of IWbemClassObject objects that are instances of the class in the event
filter. This information is used in the generation of intrinsic events.
GrantedAccess: The set of access rights (enumerated in section 5.2) that have been granted to
the client in this namespace.
ClassTable: A table in the CIM database of CIM classes that are registered within a namespace,
where each entry contains:
InstanceProviderId: A locally unique string that specifies the provider from which the instances
are being returned. This is the same as the value of the [provider] qualifier of the class
definition. If the instances are returned from the CIM database rather than a provider, this
value MUST be set to NULL.
The ClassTable MUST include entries defining the system classes in sections 2.2.30 and 2.2.31. If the
server supports the dynamic objects, the server MUST maintain a ProviderTable in the CIM database
where each entry contains:
ProviderEntryPoint: A pointer to the provider instance that the server is to communicate with.
IsClassProvider: A Boolean that is true if the provider creates dynamic CIM classes, or false if it only
creates dynamic instances.
SupportsGet: A Boolean value that is TRUE if the abstract interface Get Properties within an Instance
of a Class (section 3.1.4.17.3) or Get Properties within a Class (section 3.1.4.17.4) is supported
by the provider. By default, this value is set to FALSE.
SupportsPut: A Boolean value that is TRUE if one of the following abstract interfaces is supported by
the provider. By default, this value is set to FALSE.
58 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
SupportsDelete: A Boolean value that is TRUE if the abstract interface Delete an Instance of a
Class (section 3.1.4.17.9) or Delete a Class (section 3.1.4.17.10) is supported by the provider. By
default, this value is set to FALSE.
SupportsEnumerate: A Boolean value that is TRUE if the abstract interface Enumerate Instances of a
Given Class (section 3.1.4.17.1) or Enumerate the Subclasses of a Given
Class (section 3.1.4.17.2) is supported by the provider. By default, this value is set to FALSE.
SupportsRefresher: A Boolean value that is TRUE if the provider supports refreshing the CIM object.
By default, this value is set to FALSE.
EventQueryList: A list of WQL query strings representing events that can be produced by this
provider. See section 3.1.4.3.20 for details.
ResultSetQueries: A list of WQL query strings; see section 3.1.4 for details.
QuerySupportLevels: An array of strings that present the query capabilities of the provider. The
values MUST be the combination of zero or more of the following strings:
"WQL:Associators","WQL:V1ProviderDefined","WQL:UnarySelect","WQL:References".<14>
AsyncOperationTable: A table to store the information of asynchronous calls (see section 3.1.1.1.3)
in progress. Each entry of this table corresponds to one asynchronous call, where each entry
contains the following:
CallCancelled: A Boolean value that is set to TRUE if the operation is canceled. The initial value of
this variable is FALSE.
OperationFinished: A Boolean value to store if the operation is completed. This value is initially
set to FALSE.
59 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
The following ADM elements are used to store information about semisynchronous calls returning
multiple objects (see section 3.2.4.2.8 for a list of multiple-result semisynchronous calls).
CurrentTotalCount: An integer value to store the count of the valid number of array elements.
OperationFinished: A Boolean value to store if the operation is completed. This value is initially
set to FALSE.
RefCount: An integer indicating the count of IEnumWbemClassObject pointers that point to this
instance of SemiSinkResultObject. When this count becomes zero, the object is freed.
CurrentIndex: An integer value pointing to the index of the next object to be given to the client.
SinkQueue: A queue to store the information about pending NextAsync calls. Each element of this
queue contains the following:
The server MUST complete the requested operation before returning from the synchronous method
call. The status of the operation is returned as return value of the method. On successful execution of
the synchronous methods, the server MUST return result object or objects in the out parameter of the
method.
The server MUST start the requested operation and MUST return the appropriate response without
waiting for the operation to complete. If the requested operation fails to start, the server MUST return
an error as a return value of the method and MUST NOT return IEnumWbemClassObject or
IWbemCallResult as an out parameter.
60 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
For the requested operation to begin successfully, the server MUST create and return an object of type
IEnumWbemClassObject for the following methods, and the return value MUST be
WBEM_S_NO_ERROR, as specified in section 2.2.11. When the client calls the methods of
IEnumWbemClassObject, the IEnumWbemClassObject method MUST deliver the results of the
requested operation. The enumeration of IEnumWbemClassObject MUST return the same result set as
the corresponding synchronous operation.
The server stores the results of the operation in SemiSinkResultSetObject and tracks the client
fetching the results by using the entry in EnumWbemClassObjectTable.
1. The server MUST store the results of the operation in ResultArray as they are available and
update CurrentTotalCount to reflect the total results.
2. The server MUST set OperationFinished to TRUE when the operation is finished.
3. When the operation is finished, either completed or failed, the server MUST set FinalResult with
the result code as specified in section 2.2.11 and set OperationFinished to TRUE.
4. When the client releases the reference to IEnumWbemClassObject, the server MUST delete the
EnumWbemClassObjectTable entry and decrement RefCount by 1 for the
SemiSinkResultSetObject referenced in ResultSetPointer.
5. When the RefCount of SemiSinkResultSetObject is zero, the server MUST free the result stored
in ResultArray and delete this instance of SemiSinkResultSetObject.
If the requested operation begins successfully, the server MUST return an IWbemCallResult object for
the following methods, and the return value MUST be WBEM_S_NO_ERROR. When the client calls the
methods of IWbemCallResult, IWbemCallResult MUST deliver the result of the requested operation.
61 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
IWbemServices::DeleteClass (section 3.1.4.3.8)
The server sets ResultObject, ResultString, and ResultService as the results become available for
the respective operations. When an operation is finished, the server MUST set FinalResult with the
operation result and set OperationFinished to TRUE. The server MUST remove the entry for this
operation from WbemCallResultTable when the client releases its last reference of
IEnumWbemClassObject.
The server MUST start the requested operation and MUST return the appropriate response without
waiting for the completion of the operation. If starting the requested operation fails, the server MUST
return the error as a return value of the method; MUST NOT keep a reference to IWbemObjectSink
(passed as a response handler); and MUST NOT call IWbemObjectSink::Indicate or
IWbemObjectSink::SetStatus.
Section 3.2.4.2.9 lists the asynchronous method calls. Before starting an asynchronous operation, the
server method MUST create an entry in AsyncOperationTable, storing a reference to the client's
IWbemObjectSink in ClientSyncPointer, and set other fields (CallbackInprogress, CallCancelled,
and SetStatusWithFinalResultCalled) to FALSE.
For the requested operation to begin successfully, the server MUST return WBEM_S_NO_ERROR, as
specified in section 2.2.11 and MUST keep a reference to IWbemObjectSink passed as a response
handler.
The server MAY call IWbemObjectSink::SetStatus multiple times when it executes the asynchronous
operation in order to report the operation progress,<15> as explicitly requested by a client using a
WBEM_SEND_STATUS flag. In this situation, the HRESULT parameter contains the progress
information.
Calls made by the server into the client-provided IWbemObjectSink interface SHOULD use an
authentication level that is greater than NONE. If that fails, and if the
UnsecAppAccessControlDefault flag is set to false and AllowAnonymousCallback flag is set to
true, the server SHOULD retry with an authentication level of NONE.<16> The server MUST try to
make the calls by using the machine principal name.
The total number of client operations is limited by MaxRequestLimit as described in section 3.1.4.3.
The server MUST support storage of CIM localizable information. The localizable class properties
MUST have amended qualifiers in the MOF class definition.
The server MUST store each class with amended qualifiers as two or more objects:
A locale-neutral object that contains all properties, with all amended qualifiers stripped.
A localized object for each supported locale. The class object contains only the properties that
have amended qualifiers, and their respective qualifiers. This localized object MUST be stored in
a namespace that is a direct child of the namespace (from NamespaceConnectionTable) in
62 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
which a locale-neutral object exists and the name of the namespace MUST be a locale name in the
"MS_xxx" format (see section 2.2.29).
If the client specifies the flag, then both locale-neutral and locale-specific objects MUST be
updated.
If the client does not specify the flag, only the locale-neutral object MUST be updated. If the class
sent by the client contains amended qualifiers, then the server MUST update the locale-neutral
class exactly as requested, rather than removing the amended qualifiers.
When the client creates a new class, the server MUST create the class only in the locale-neutral area
(regardless whether WBEM_FLAG_USE_AMENDED_QUALIFIERS is set). The amended qualifiers
MUST not be stripped.
When the client retrieves a class object and the WBEM_FLAG_USE_AMENDED_QUALIFIERS is set,
the server MUST merge the locale-neutral and locale-dependent class definitions and present them as
one class to the client using the following algorithm.
Retrieve the locale-neutral class. Then it MUST search for localized class objects, using the list of
locales in the NamespaceConnection object's ClientPreferredLocales. The search for the class
is made in the order of the locales in ClientPreferredLocales. When the requested class is found
in one locale namespace, the server MUST stop looking.
If present, the localized object MUST be merged with the neutral object (which has priority over
any qualifier present in the localized object).
Note The class will have amended qualifiers if the class object was originally created without
stripping the amended qualifiers.
If a class is annotated with the Amendment qualifier, attempts to create instances of the class MUST
fail with a WBEM_E_INVALID_OPERATION error.
When a client deletes a class object and the WBEM_FLAG_USE_AMENDED_QUALIFIERS flag is not
set, the server MUST delete the locale-neutral object as-is, without checking for localized definitions.
3.1.2 Timers
The server MUST use timers to ensure that the conversation between itself and its clients remains
active. The Windows Management Instrumentation Remote Protocol uses the following timers:
Sink timer: Each asynchronous operation has a corresponding timer, which MUST be initialized to
30 seconds when the server calls the client back using IWbemObjectSink. The timer MUST be
reset when the call completes.
Backup timer: Each IWbemBackupRestoreEx has a corresponding timer, which MUST be initialized to
15 minutes when the server receives an IWbemBackupRestoreEx::Pause. The timer MUST be
reset when the server receives an IWbemBackupRestoreEx::Resume.
63 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
EventPollingTimer: This timer tracks the polling interval specified by the WITHIN clause of an
event query. The timer interval is the number of seconds specified in the query. The minimum
value of the polling interval is 0.001 (equivalent to 1 millisecond) and the maximum value is
418937 (0xffffffff/1000).
EventGroupingTimer: This timer tracks the grouping interval specified by the GROUP WITHIN
clause of an event query. The timer interval is the number of seconds specified in the query. The
minimum value of the polling interval is 0.001 (equivalent to 1 millisecond) and the maximum
value is 418937 (0xffffffff/1000).
3.1.3 Initialization
The protocol MUST be initialized after successful activation of one of the two interfaces that are
registered with the DCOM Remote Protocol infrastructure, as specified in [MS-DCOM] section 1.9.
All the global flags and other elements mentioned in ADM are volatile unless they are loaded and
stored from CIM database. Unless otherwise specified, the updates to the ADM elements directly
happen in CIM database.
The server MUST enumerate the NamespaceConnectionTable and ensure that a single
__SystemSecurity instance is present in each namespace and matches the namespace's
RequiresEncryption flag and security descriptor.
If the server has dynamic CIM classes or CIM instances in the system, the server MUST load each
provider of the ProviderTable as described in 3.1.6.2.
The server MUST create an empty EventBindingTable object during its initialization. The information
kept in this object is volatile and is not persisted during the server's shutdown.
When the server has successfully initialized the above data structures, it MUST set InitSuccess to
True.
The server MUST accept multiple parallel invocations from different clients running under different
security principals that the server impersonates. On each interface, the server MUST support
multiple outstanding calls.
64 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
The errors returned by the server are not actionable unless explicitly specified in this section. The
server MUST perform an access check against all operations and ensure secure access to the results.
If the access check fails, the server MUST return WBEM_E_ACCESS_DENIED.
The methods MUST be secured by using access rights as specified in section 5.2.
The server MUST treat characters as Unicode characters and represent them in 16 bits. This is
contrary to the requirement of [DMTF-DSP0004] where the string data type is interpreted as a UCS
character.
The server MAY support ordered array types, as specified in the requirement of [DMTF-
DSP0004].<18>
If the server detects that the IWbemClassObject that is sent by the client does not conform to [MS-
WMIO] encoding, as specified in section 2.2.4, the server MUST return an HRESULT that has the S
(severity) bit set as specified in [MS-ERREF]. The exact code is implementation-dependent.
If the server is expected to set the value of the output parameter, but the output parameter is set to
NULL upon input, the server SHOULD return an error to indicate failure. In this case, the server cannot
modify the output parameter.
For all methods, the server MUST enforce that the DCOM security level is at least at the
RPC_C_AUTHN_LEVEL_CONNECT level, and SHOULD be RPC_C_AUTHN_LEVEL_PKT_INTEGRITY; the
server MUST also evaluate the security principal rights to open a CIM namespace.<19> The server
MUST fail the operation if the security requirements are not met.
For all IwbemServices methods, the server MUST verify that the client has been granted the access
rights specified in the method description, by testing that those rights are included in
GrantedAccess.
For all methods, if the server cannot find the NamespaceConnection associated with IWbemServices
in the NamespaceConnectionTable (either because the table no longer contains a row for the
namespace or because the NamespaceConnection was replaced during
IWbemBackupRestore::Restore), the server MUST return WBEM_E_INVALID_NAMESPACE.
For all methods that create, query, update, or delete the CIM instances, the server MUST obtain
InstanceProviderId for the given class from the ClassTable.
If InstanceProviderId is NULL, the server MUST forward the request to the CIM database. If
InstanceProviderId is not NULL, and if the IWbemContext object is passed to the server, WMI MUST
obtain the ProviderArchitecture from the IWbemContext object, and use the following algorithm to
locate the correct provider.
If ProviderArchitecture is not present or if IWbemContext object is not passed, then the server
MUST find the ProviderEntryPoint corresponding to InstanceProviderId in the ProviderTable.
If ProviderArchitecture is present:
If its value is neither 32 nor 64, the server MUST return WBEM_E_INVALID_PARAMETER.
If RequiredArchitecture is present and is set to TRUE, the server MUST find the
ProviderEntryPoint in ProviderTable corresponding to ProviderArchitecture and
InstanceProviderId.
If RequiredArchitecture is not present or set to FALSE, the server MUST find the
ProviderEntryPoint in ProviderTable corresponding to ProviderArchitecture and
InstanceProviderId. If there is no ProviderEntryPoint found, the server MUST find
ProviderEntryPoint for the given InstanceProviderId ignoring the ProviderArchitecture.
65 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
If the server cannot find ProviderEntryPoint, it MUST return WBEM_E_PROVIDER_LOAD_FAILURE. If
the ProviderEntryPoint is found, the server MUST use the abstract interface defined in 3.1.4.17 to
communicate with the provider.
For all methods that create, query, update, or delete the CIM class where InstanceProviderId is
not zero, the server MUST go through each of the WQL queries in ResultSetQueries and evaluate
the WHERE clause. If the expression evaluates to TRUE for the given CIM class (that is, the provider
supports the CIM class), then the server MUST proceed with the rest of the processing for the method
as specified in the method-specific processing rules in 3.1.4. If FALSE, the server MUST return
WBEM_E_PROVIDER_NOT_CAPABLE.
For all methods that query, update, or delete the CIM classes, the server MUST obtain
InstanceProviderId for the given class from the ClassTable. If InstanceProviderId is not NULL,
and if the IWbemContext object is passed to the server, the server MUST obtain the
ProviderArchitecture from IWbemContext object. The same algorithm is used as for CIM instances.
For all methods that query, update, or delete the CIM instances, the server MAY allow the static
properties to be modified, contrary to [DMTF-DSP0004] requirements.<20>
For all methods where the request is sent to the provider, the provider MAY choose to perform
additional authentication or authorization, or perform the operations within the context of security
principal in which ProviderEntryPoint was called<21>
Specific rules related to creation, deletion, navigation, and persistence of the namespaces are covered
as part of section 3.1.4.18.
The server SHOULD fail the operation and return WBEM_E_ACCESS_DENIED if the namespace has the
RequiresEncryption flag set and if the DCOM security level is lower than
RPC_C_AUTHN_LEVEL_PKT_PRIVACY.<22>
The server MAY return WBEM_E_QUOTA_VIOLATION if the number of active IWbemServices objects is
more than an implementation-defined limit for a given namespace.<23>
The server MUST fail the operation and return CO_E_SERVER_STOPPING if the RestoreInProgress
flag is set to True.
The server MUST fail the operation and return WBEM_E_SHUTTING_DOWN if the
IsServerShuttingDown flag is set to True.
If either of the BackupInProgress or IsServerPaused flags are set to True, the server MUST buffer
the request (unless the request exceeds MaxRequestLimit as described in section 3.1.4.3) until both
the BackupInProgress and IsServerPaused flags are set to False before performing the operation.
For all methods that update the CIM class, if CIM class on the server had abstract qualifier set to true,
while its parent class does not have abstract qualifier set to false, the server MUST return
WBEM_E_CANNOT_BE_ABSTRACT.
For all methods that update CIM instance, if a CIM instance with amended qualifier set to true is
being updated without WBEM_FLAG_USE_AMENDED_QUALIFIERS flag, the server MUST return
WBEM_E_AMENDED_OBJECT.
If __MI_DESTINATIONOPTIONS_DATA_LOCALE is present:
66 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
The WMI server SHOULD<24> indicate to the WMI v2 provider to use this locale to format the
culture-specific information such as date/time format; otherwise, it MUST indicate the first
ClientPreferredLocale.
If __MI_DESTINATIONOPTIONS_UI_LOCALE is present:
The WMI Server SHOULD<25> indicate to the WMI v2 provider to use this locale to determine
the display language for human-readable strings; otherwise, it MUST indicate the first
ClientPreferredLocale.
If __CorrelationId is present:
The WMI Server SHOULD<26> store this value and use as part of internal logging.
The WMI server SHOULD pass this to the provider as part of IWbemContext, and the provider
can use this value as part of its own logging.
The IWbemLevel1Login interface allows a user to connect to the management services interface in a
particular namespace. The interface MUST be uniquely identified by the UUID {F309AD18-D86A-
11d0-A075-00C04FB68820}.
Method Description
EstablishPosition Opnum: 3
RequestChallenge Opnum: 4
WBEMLogin Opnum: 5
NTLMLogin Opnum: 6
The object that exports this interface also implements the IWbemLoginClientID and
IWbemLoginHelper interfaces. The IRemUnknown and IRemUnknown2 interfaces, specified in [MS-
DCOM], MUST be used to manage the interfaces exposed by the object. The object MUST be uniquely
identified with the CLSID {8BC3F05E-D86B-11D0-A075-00C04FB68820}.
67 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Figure 4: The IWbemLevel1Login interface
The IWbemLevel1Login::EstablishPosition method does not perform any action. The return value and
output parameter are used in locale negotiation as specified in section 3.2.3.
HRESULT EstablishPosition(
[in, unique, string] wchar_t* reserved1,
[in] DWORD reserved2,
[out] DWORD* LocaleVersion
);
reserved1: MUST be set to NULL when sent and MUST be ignored on receipt.
LocaleVersion: The server MUST set the value of LocaleVersion based on the server behavior when
IWbemLevel1Login::NTLMLogin is passed an unrecognized locale name in the wszPreferredLocale
parameter:
The return value and LocaleVersion are used for Locale capability negotiation before calling
IWbemLevel1Login::NTLMLogin, as specified in section 3.2.3.
If the server ignores an unrecognized locale name in the Locale Name Format, as specified in
section 2.2.29, passed to IWbemLevel1Login::NTLMLogin while all other parameters are valid,
and completes the execution of the IWbemLevel1Login::NTLMLogin method, the server MUST
set the LocaleVersion parameter to 1.
If the server returns an error for an unrecognized locale name in Locale Name Format, as
specified in section 2.2.29, passed to IWbemLevel1Login::NTLMLogin, while all other
parameters are valid, the server MUST set the LocaleVersion parameter to 0.
68 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Return Values: The server MUST return one of the following values, based on server behavior for the
wszPreferredLocale parameter in IWbemLevel1Login::NTLMLogin.
0x80004001 The attempted operation is not implemented. The value of this element is as
E_NOTIMPL specified in [MS-ERREF] section 2.1.<28>
HRESULT RequestChallenge(
[in, unique, string] wchar_t* reserved1,
[in, unique, string] wchar_t* reserved2,
[out, size_is(16), length_is(16)]
unsigned char* reserved3
);
reserved1: MUST be set to NULL when sent and MUST be ignored on receipt.
reserved2: MUST be set to NULL when sent and MUST be ignored on receipt.
reserved3: MUST be set to NULL when sent and MUST be ignored on receipt.
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
);
reserved1: MUST be set to NULL when sent and MUST be ignored on receipt.
reserved2: MUST be set to NULL when sent and MUST be ignored on receipt.
reserved4: MUST be set to NULL when sent and MUST be ignored on receipt.
69 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
reserved5: MUST be set to NULL when sent and MUST be ignored on receipt.
HRESULT NTLMLogin(
[in, unique, string] LPWSTR wszNetworkResource,
[in, unique, string] LPWSTR wszPreferredLocale,
[in] long lFlags,
[in] IWbemContext* pCtx,
[out] IWbemServices** ppNamespace
);
wszNetworkResource: The string MUST represent the namespace on the server to which the
returned IWbemServices object is associated. This parameter MUST NOT be NULL and MUST
match the namespace syntax as specified in section 2.2.2.
wszPreferredLocale: MUST be a pointer to a string that MUST specify the locale values in the
preferred order, separated by a comma. If the client does not supply it, the server creates a
default list which is implementation-specific.<29> Each locale format SHOULD conform to the WMI
locale format, as specified in WMI Locale Formats (section 2.2.29). Any subsequent calls that
request CIM localizable information (WBEM_FLAG_USE_AMENDED_QUALIFIERS) SHOULD
return the localized information in the order of preference if the information is available in the
LCID.<30> The server MUST save this information in ClientPreferredLocales.
lFlags: MUST be 0. The server SHOULD consider any other value as not valid and return
WBEM_E_INVALID_PARAMETER; otherwise, the server behavior is implementation-specific.<31>
pCtx: MUST be a pointer to an IWbemContext interface, which MUST contain additional information
sent by the client. If pCtx is NULL, the parameter MUST be ignored.
Return Values: This method MUST return an HRESULT value that MUST indicate the status of the
method call. The server MUST return WBEM_S_NO_ERROR, as specified in section 2.2.11, to
indicate the successful completion of the method.
WBEM_S_NO_ERROR (0x00)
The security principal that makes the call MUST have WBEM_REMOTE_ENABLE and WBEM_ENABLE
access to the namespace; otherwise, WBEM_ACCESS_DENIED MUST be returned.
70 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
In response to the IWbemLevel1Login::NTLMLogin method, the server MUST return an IWbemServices
interface that corresponds to the wszNetworkResource parameter.
The server SHOULD enforce a maximum length for the wszNetworkResource parameter, and return
WBEM_E_QUOTA_VIOLATION if the limit is exceeded.<32>
When the call succeeds, the server MUST create an IWbemServices object. The server MUST store
the wszPreferredLocale inside the object. The server MUST find the NamespaceConnection object
for wszNetworkResource passed into the NamespaceConnectionTable, and store its reference in the
IWbemServices object. The server MUST return WBEM_E_INVALID_NAMESPACE if the
NamespaceConnection object cannot be found. The server MUST set GrantedAccess to the set of
access rights granted to the client by the namespace security descriptor.
All subsequent IWbemServices method invocations that request localized information MUST return the
information in the language that is specified in wszPreferredLocale. When the preferred locale is NULL,
the server SHOULD<33> use implementation-specific logic to decide the locale.
The successful method execution MUST fill the ppNamespace parameter with an IWbemServices
interface pointer and MUST return WBEM_S_NO_ERROR.
The failed method execution MUST set the output parameter to NULL and MUST return an error in the
format specified in section 2.2.3. If the namespace does not exist, the server MUST return a
WBEM_E_INVALID_NAMESPACE HRESULT value.
The IWbemObjectSink interface MUST be implemented by the WMI client if the WMI client uses
asynchronous method calls as specified in section 3.2.4.2.9. In this case, the WMI client acts as an
IWbemObjectSink server. The WMI server acts as an IWbemObjectSink client and invokes the
IWbemObjectSink methods to deliver the results (IWbemClassObjects, if any, and the status code) of
the IWbemServices method for which this IWbemObjectSink is passed as a response handler.
If the WMI client calls the IWbemServices::QueryObjectSink method, the IWbemObjectSink interface
MUST be implemented by the WMI server and MUST be returned to the client in the
ppResponseHandler parameter, as specified in section 3.1.4.3.3. In this case, the WMI server acts as
an IWbemObjectSink server. The WMI client acts as an IWbemObjectSink client and invokes the
IWbemObjectSink methods to deliver the results, that is, IWbemClassObjects that represent the
extrinsic events the client wants to deliver to the server.
Because this interface is implemented by the WMI client and the WMI server and called by both, the
server in this section refers to the implementer of this interface and the client refers to the caller in a
specific scenario.
The IWbemObjectSink interface is a DCOM Remote Protocol (as specified in [MS-DCOM]) interface.
The interface MUST be uniquely identified by UUID {7c857801-7381-11cf-884d-00aa004b2e24}.
Method Description
Indicate The server receives the IWbemClassObject interfaces, which are sent in an ObjectArray structure.
These objects are the result of an IWbemServices asynchronous method call that was started with
this sink as the response handler.
Opnum: 3
SetStatus The server receives either a completion status code or information about the progress of the
operation that was started with this sink as the response handler.
Opnum: 4
71 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
3.1.4.2.1 IWbemObjectSink::Indicate (Opnum 3) Server details
When the IWbemObjectSink::Indicate method is called, the apObjArray parameter MUST contain
additional result objects as an array of an IWbemClassObject, sent by the client to the server. The
IWbemObjectSink::Indicate method has the following syntax, expressed in Microsoft Interface
Definition Language (MIDL).
HRESULT Indicate(
[in] long lObjectCount,
[in, size_is(lObjectCount)] IWbemClassObject** apObjArray
);
lObjectCount: MUST be the number of CIM objects in the array of pointers in the ppObjArray
parameter.
Return Values: This method MUST return an HRESULT value that MUST indicate the status of the
method call.
WBEM_S_NO_ERROR (0x00)
When the IWbemObjectSink::Indicate method is called for the first time, the server that implements
the ObjectArray structure MUST return WBEM_S_NEW_STYLE if the execution of the method succeeds.
If a server does not implement the ObjectArray structure, it MUST return WBEM_S_NO_ERROR for
successful execution of the method.
If the server implements the ObjectArray structure and WBEM_S_NEW_STYLE is returned during the
first call to the IWbemObjectSink::Indicate method, the server MUST support subsequent calls to the
IWbemObjectSink::Indicate method by using both the DCOM Remote Protocol marshaling and the
ObjectArray structure as specified in section 2.2.14.
When the IWbemObjectSink::SetStatus method is called, the parameter MUST contain the result of
the operation or the progress status information.
HRESULT SetStatus(
[in] long lFlags,
[in] HRESULT hResult,
[in] BSTR strParam,
[in] IWbemClassObject* pObjParam
);
lFlags: Flags that give information about the operation status. The flags MUST be interpreted as
specified in the following table.
Note The flags are not bit flags and cannot be combined.
Value Meaning
72 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Value Meaning
0x00000002
Any other DWORD value that does not match the condition shown MUST be treated as not valid
and an error MUST be returned.
hResult: The HRESULT value of the asynchronous operation or notification. This hResult MUST be the
same HRESULT that the WMI client gets from the matching synchronous operation when the
WMI client makes an asynchronous request to the WMI server.
strParam: If the parameter is NULL, the server MUST ignore the parameter. If the parameter is not
NULL, it MUST represent the operational result of the asynchronous operation. The string MUST be
the same as the string that is returned from the IWbemCallResult::GetResultString (Opnum 4)
method when the operation is executed synchronously.
pObjParam: If the parameter is NULL, the server MUST ignore the parameter. If the parameter is not
NULL, the object MUST contain additional error information for the asynchronous operation failure.
Return Values: This method MUST return an HRESULT value that MUST indicate the status of the
method call. The server MUST return WBEM_S_NO_ERROR (specified in section 2.2.11) to indicate
the successful completion of the method.
WBEM_S_NO_ERROR (0x00)
The IWbemServices interface exposes methods that MUST provide management services to client
processes. The implementation MUST implement all methods and return errors if the semantics of the
operation cannot be completed. IWbemServices defines the execution scope for all methods
implemented on the interface. The initial scope MUST be established by the
IWbemLevel1Login::NTLMLogin call, which returns the interface pointer.
Method Description
OpenNamespace Provides the client with an IWbemServices interface pointer that is scoped to the
requested namespace.
Opnum: 3
QueryObjectSink Obtains a notification handler that allows the client to send events directly to the
server.
Opnum: 5
PutClass Creates a new class or updates an existing class in the namespace associated with
the current IWbemServices interface.
Opnum: 8
73 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Method Description
DeleteClass Deletes a specified class from the namespace associated with the current
IWbemServices interface.
Opnum: 10
DeleteInstance Deletes an instance of an existing class from the namespace that is pointed to by
the IWbemServices interface object that is used to call the method.
Opnum: 16
CreateInstanceEnum Creates an instance enumeration of all class instances that satisfy the selection
criteria.
Opnum: 18
ExecNotificationQuery Server runs a query to receive events when called by a client to request
subscription to the events.
Opnum: 22
ExecMethod Executes a CIM method implemented by a CIM class or a CIM instance retrieved
from the IWbemServices interface.
Opnum: 24
74 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
IWbemServices MUST be a DCOM Remote Protocol interface. The interface MUST be uniquely
identified by UUID {9556dc99-828c-11cf-a37e-00aa003240c7}. The object exporting this interface
also implements the IWbemRefreshingServices interface, as shown in the following diagram.
For all methods, the server MUST increment CurrentRequestCount at the start of the method, and
decrement it when returning from the method.
HRESULT OpenNamespace(
[in] const BSTR strNamespace,
[in] long lFlags,
[in] IWbemContext* pCtx,
[out, in, unique] IWbemServices** ppWorkingNamespace,
[out, in, unique] IWbemCallResult** ppResult
);
strNamespace: MUST be the CIM path to the target namespace. This parameter MUST NOT be
NULL.
lFlags: Flags that affect the behavior of the OpenNamespace method. The behavior of each flag MUST
be interpreted as follows:
If this bit is not set, the server MUST make the method call synchronous.
If this bit is set, the server MUST make the method call semisynchronously.
75 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Name Value
WBEM_FLAG_RETURN_IMMEDIATELY 0x00000010
Any other DWORD value that does not match the preceding condition MUST be treated as invalid.
The output parameter MUST be based on the state of the lFlags parameter (whether
WBEM_FLAG_RETURN_IMMEDIATELY is set) as listed in the following table.
ppResult: The output parameter MUST be filled according to the state of the lFlags parameter
(whether WBEM_FLAG_RETURN_IMMEDIATELY is set) as listed in the following table.
Return Values: This method MUST return an HRESULT value that MUST indicate the status of the
method call. The server MUST return WBEM_S_NO_ERROR, as specified in section 2.2.11, to
indicate the successful completion of the method.
WBEM_S_NO_ERROR (0x00)
Requirements described in the parameter definitions are checked, and if the requirements are not
met, the server returns WBEM_E_INVALID_PARAMETER.
In response to the IWbemServices::OpenNamespace method, the server MUST evaluate whether the
strNamespace parameter, which is specified in the preceding list, is a child of the namespace that is
associated with the current interface pointer. If the requested namespace does not exist as a child
namespace, the server MUST return WBEM_E_INVALID_NAMESPACE. If the requested namespace
exists as a child namespace of the current interface pointer, the server MUST create another
IWbemServices interface pointer associated with this namespace and return WBEM_S_NO_ERROR.
If the method returns a success code, the method MUST fill one of the two output parameters, as
indicated by the use of the lFlags parameter, which is previously specified.
76 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
The successful synchronous method execution MUST fill the ppWorkingNamespace parameter with an
IWbemServices interface pointer and MUST return WBEM_S_NO_ERROR.
The semisynchronous method execution MUST follow the rules that are specified in section
3.1.1.1.2.
The failed method execution MUST set the output parameters to NULL and MUST return an error in the
format that is specified in section 2.2.11.
If the ppResult input parameter is non-NULL, the server MUST deliver the result of the requested
operation (regardless whether WBEM_FLAG_RETURN_IMMEDIATELY is set) via the IWbemCallResult,
similar to the semisynchronous execution case.
HRESULT CancelAsyncCall(
[in] IWbemObjectSink* pSink
);
pSink: MUST be a pointer to the IWbemObjectSink interface object that was passed to the
asynchronous method that the client wants to cancel. This parameter MUST NOT be NULL.
Return Values: This method MUST return an HRESULT value that MUST indicate the status of the
method call. The server MUST return WBEM_S_NO_ERROR (as specified in section 2.2.11) to
indicate the successful completion of the method.
In response to the IWbemServices::CancelAsyncCall method, the server MUST identify and cancel all
pending asynchronous operations initiated by an asynchronous method execution, such as
IWbemServices::GetObjectAsync, which used the pSink interface pointer parameter as their
response handler. The server MUST return an error if the interface pointer is NULL, and it MUST return
an error if the pSink parameter is not associated with an entry in AsyncOperationTable.
As part of the IWbemServices::CancelAsyncCall method, the server MUST set the CallCancelled value
for this asynchronous operation entry in the AsyncOperationTable to TRUE. Setting CallCancelled to
TRUE ensures that no new IWbemObjectSink::Indicate messages or progress messages using
IWbemObjectSink::SetStatus are called to the client. If SetStatusWithFinalResultCalled is FALSE,
the server MUST set SetStatusWithFinalResultCalled to TRUE and return the error
WBEM_E_CALL_CANCELLED.
The server MUST NOT wait for any response from the client to complete the cancellation to prevent
protocol performance degradation.
The failed method execution MUST return an error in the format specified in section 2.2.11.
The QueryObjectSink method obtains a notification handler that allows the client to send events
directly to the server.
77 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
HRESULT QueryObjectSink(
[in] long lFlags,
[out] IWbemObjectSink** ppResponseHandler
);
lFlags: This parameter is not used and its value MUST be 0x0.
Return Values: This method MUST return an HRESULT value that MUST indicate the status of the
method call. The server MUST return WBEM_S_NO_ERROR (specified in section 2.2.11) to indicate
the successful completion of the method.
WBEM_S_NO_ERROR (0x00)
The security principal that makes the call MUST have WBEM_REMOTE_ENABLE, WBEM_ENABLE, and
WBEM_FULL_WRITE accesses to the namespace; otherwise, WBEM_E_ACCESS_DENIED MUST be
returned.
The successful method execution MUST fill the ppResponseHandler parameter and MUST return
WBEM_S_NO_ERROR.
The failed method execution MUST set the output parameters to NULL and MUST return an error in the
format as specified in section 2.2.11.
When extrinsic events are delivered to the server by using IWbemObjectSink::Indicate as specified in
section 3.1.4.2.1, the server MUST send the event objects to all WMI clients whose notification query
satisfies the event objects that are delivered through IWbemObjectSink::Indicate and whose security
permissions match the security descriptor as specified in section 5.2. Refer to section 3.1.6.1 for
information on how the result objects are delivered to the client.
The IWbemServices::GetObject method retrieves a CIM class or a CIM instance. This method MUST
retrieve CIM objects from the namespace that is associated with the current IWbemServices
interface.
HRESULT GetObject(
[in] const BSTR strObjectPath,
[in] long lFlags,
[in] IWbemContext* pCtx,
[out, in, unique] IWbemClassObject** ppObject,
[out, in, unique] IWbemCallResult** ppCallResult
);
strObjectPath: MUST be the CIM path of the CIM object to be retrieved. If the parameter is NULL,
the server MUST return an empty CIM Object.
78 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
lFlags: Specifies the behavior of the IWbemServices::GetObject method. Flag behavior MUST be
interpreted as specified in the following table.
The server MUST allow any combination of zero or more flags from the following table and MUST
comply with all the restrictions in a flag description. Any other DWORD value that does not match
a flag condition MUST be treated as not valid.
Value Meaning
WBEM_FLAG_USE_AMENDED_QUALIFIERS If this bit is not set, the server SHOULD return no CIM
0x00020000 localizable information.
If this bit is set, the server SHOULD return CIM localizable
information for the CIM object, as specified in section 2.2.6.
WBEM_FLAG_RETURN_IMMEDIATELY If this bit is not set, the server MUST make the method call
0x00000010 synchronously.
If this bit is set, the server MUST make the method call
semisynchronously.
WBEM_FLAG_DIRECT_READ If this bit is set, the server MUST disregard any derived class
0x00000200 when it searches the result.
If this bit is not set, the server MUST consider the entire class
hierarchy when it returns the result.
pCtx: MUST be a pointer to an IWbemContext interface, which MUST contain additional information
that the client wants to pass for processing to the implementer of the CIM object that is referred
to by strObjectPath. If the parameter is set to NULL, the server MUST ignore it.
ppObject: If the parameter is set to NULL, the server MUST ignore it. In this case, the output
parameter MUST be filled according to the state of the lFlags parameter (whether
WBEM_FLAG_RETURN_IMMEDIATELY is set) as listed in the following table.
ppCallResult: The output parameter MUST be filled according to the state of the lFlags parameter
(whether WBEM_FLAG_RETURN_IMMEDIATELY is set) as listed in the following table.
Failure
Flag state Success operation operation
79 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Failure
Flag state Success operation operation
Return Values: This method MUST return an HRESULT that MUST indicate the status of the method
call. The HRESULT MUST have the type and values as specified in section 2.2.11. The server MUST
return WBEM_S_NO_ERROR (as specified in section 2.2.11) to indicate the successful completion
of the method.
WBEM_S_NO_ERROR (0x00)
The security principal that makes the call MUST have WBEM_REMOTE_ENABLE and WBEM_ENABLE
accesses to the namespace; otherwise, WBEM_E_ACCESS_DENIED MUST be returned.
If found:
Else the server MUST use the abstract interface specified as part of 3.1.4.17 to communicate
with the provider, and return the appropriate results or the error code.
The successful synchronous method execution MUST provide the retrieved IWbemClassObject
interface pointer in the ppObject parameter and MUST return WBEM_S_NO_ERROR.
The method MUST fail if the CIM object that is referred to by strObjectPath does not exist, if the
method parameters are not valid as specified in the preceding list, or if the server is unable to execute
the method. The failed method execution MUST set the output parameters to NULL and MUST return
an error in the format specified in section 2.2.11.
The semisynchronous method execution MUST follow the rules that are specified in section 3.1.1.1.2.
If a class is marked by a Singleton qualifier, the server MUST treat "Class-Name = @" in the object
path as referencing the singleton instance of the class.
HRESULT GetObjectAsync(
[in] const BSTR strObjectPath,
[in] long lFlags,
[in] IWbemContext* pCtx,
[in] IWbemObjectSink* pResponseHandler
);
80 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
strObjectPath: MUST be the CIM path of the CIM object to be retrieved. If this parameter is set to
NULL, the server MUST return an empty CIM object.
lFlags: Specifies the behavior of the GetObjectAsync method. Flag behavior MUST be interpreted as
specified in the following table.
The server MUST accept a combination of zero or more flags from the following table and MUST
comply with all the restrictions in a flag description. Any other DWORD value that does not match
a flag condition MUST be treated as not valid.
Value Meaning
WBEM_FLAG_USE_AMENDED_QUALIFIERS If this bit is not set, the server SHOULD return no CIM
0x00020000 localizable information.
If this bit is set, the server SHOULD return CIM localizable
information for the CIM object, as specified in section 2.2.6.
WBEM_FLAG_SEND_STATUS If this bit is not set, the server MUST make one final
0x00000080 IWbemObjectSink::SetStatus call on the interface pointer
that is provided in the pResponseHandler parameter.
If this bit is set, the server MAY make intermediate
IWbemObjectSink::SetStatus calls on the interface pointer
prior to call completion.
WBEM_FLAG_DIRECT_READ If this bit is not set, the implementer MUST consider the entire
0x00000200 class hierarchy when it returns the result.
If this bit is set, the server MUST disregard any derived class
when it searches the result.
pCtx: MUST be a pointer to an IWbemContext interface, which MUST contain additional information
that the client wants to provide to the server about the CIM object referred to by strObjectPath. If
pCtx is NULL, the parameter MUST be ignored.
Return Values: This method MUST return an HRESULT value that MUST indicate the status of the
method call. The server MUST return WBEM_S_NO_ERROR (specified in section 2.2.11) to indicate
the successful completion of the method.
WBEM_S_NO_ERROR (0x00)
The security principal that makes the call MUST have WBEM_REMOTE_ENABLE and WBEM_ENABLE
accesses to the namespace; otherwise, WBEM_E_ACCESS_DENIED MUST be returned.
Requirements mentioned in the parameter definitions are also checked before an asynchronous
operation is started.
If successful, the server MUST create a new entry in AsyncOperationTable as specified in section
3.1.1.1.3.
81 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
InstanceProviderId is NULL, then the server MUST look up the CIM database and return the CIM
instance. If InstanceProviderId is not NULL, then the server MUST use the abstract interface
specified as part of section 3.1.4.18 to communicate with the provider, and find the provider entry
corresponding to the InstanceProviderId in the ProviderTable.
If found:
Else, the server MUST use the abstract interface specified in section 3.1.4.17 to communicate
with the provider, and return the appropriate results or the error code.
The method MUST fail if the CIM object that is referred to by strObjectPath does not exist, if the
method parameters are not valid as specified in the preceding list, or if the server is unable to execute
the method. The failed method execution MUST set the output parameters to NULL and MUST return
an error in the format specified in section 2.2.11.
If a class is marked by a Singleton qualifier, the server MUST treat "Class-Name = @" in the object
path as referencing the singleton instance of the class.
The IWbemServices::PutClass method creates a new class or updates an existing class in the
namespace that is associated with the current IWbemServices interface. The server MUST NOT allow
the creation of classes that have names that begin or end with an underscore because those names
are reserved for system classes. If the class name does not conform to the CLASS-NAME element
defined in WQL, the server MUST return WBEM_E_INVALID_PARAMETER.
HRESULT PutClass(
[in] IWbemClassObject* pObject,
[in] long lFlags,
[in] IWbemContext* pCtx,
[out, in, unique] IWbemCallResult** ppCallResult
);
pObject: MUST be a pointer to an IWbemClassObject interface pointer that MUST contain the class
information to create a new class or update an existing class. This parameter MUST NOT be NULL.
lFlags: Specifies the behavior of the PutClass method. Flag behavior MUST be interpreted as specified
in the following table.
The server MUST accept a combination of zero or more flags from the following table and MUST
comply with all the restrictions in a flag description. Any other DWORD value that does not match
a flag condition MUST be treated as not valid.
Value Meaning
WBEM_FLAG_USE_AMENDED_QUALIFIERS If this bit is set, the server SHOULD ignore all the amended
0x00020000 qualifiers while it creates or updates the CIM class.<34>
If this bit is not set, the server SHOULD include all the
qualifiers, including amended qualifiers, while it updates or
creates the CIM class.
WBEM_FLAG_RETURN_IMMEDIATELY If this bit is not set, the server MUST make the method call
0x00000010 synchronously.
If this bit is set, the server MUST make the method call
semisynchronously.
82 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Value Meaning
WBEM_FLAG_UPDATE_ONLY The server MUST update a CIM class pObject if the CIM class
0x00000001 is present.
This flag is mutually exclusive with
WBEM_FLAG_CREATE_ONLY. If none of these flags are set,
the server MUST create or update a CIM class pObject.
WBEM_FLAG_CREATE_ONLY The server MUST create a CIM class pObject if the CIM class is
0x00000002 not already present.
WBEM_FLAG_UPDATE_FORCE_MODE The server MUST update the class even if conflicting child
0x00000040 classes exist.
WBEM_FLAG_UPDATE_SAFE_MODE The server MUST update the class as long as the change does
0x00000020 not cause any conflicts with existing child classes or instances.
This flag is mutually exclusive with
WBEM_FLAG_UPDATE_FORCE_MODE. If none of these flags
are set, the server MUST update the class if there is no
derived class, if there is no instance for that class, or if the
class is unchanged.
pCtx: MUST be a pointer to an IWbemContext interface, which MUST contain additional information
that the client wants to provide to the server about the CIM class that is referred to by the pObject
parameter. If the pCtx parameter is NULL, it MUST be ignored.
ppCallResult: If the input parameter is non-NULL, the server MUST return WBEM_S_NO_ERROR and
IWbemCallResult MUST deliver the result of the requested operation (regardless whether
WBEM_FLAG_RETURN_IMMEDIATELY is set). The output parameter MUST be filled according to
the state of the lFlags parameter (whether WBEM_FLAG_RETURN_IMMEDIATELY is set) as listed in
the following table.
Operation
Failed to
Flag state Operation Started Successfully Start
Return Values: This method MUST return an HRESULT value that MUST indicate the status of the
method call. The server MUST return WBEM_S_NO_ERROR (specified in section 2.2.11) to indicate
the successful completion of the method.
WBEM_S_NO_ERROR (0x00)
83 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
The security principal that makes the call MUST have WBEM_REMOTE_ENABLE and WBEM_ENABLE
accesses to the namespace; otherwise, WBEM_E_ACCESS_DENIED MUST be returned.
The server MUST first determine whether the class is dynamic or static. If the class exists in the
ClassTable for the namespace, then it is static when InstanceProviderId is NULL and dynamic
otherwise. If the class does not exist in the ClassTable, then WMI MUST iterate through each entry in
ProviderTable with IsClassProvider set to TRUE, calling the IsClassSupported entrypoint
(described in section 3.1.4.17.14). If a provider returns TRUE, then the algorithm is terminated and
the class is dynamic. Otherwise, the class is static.
If the CIM class being updated is dynamic, the security principal that makes the call MUST have
WBEM_WRITE_PROVIDER access to the namespace; otherwise, WBEM_E_ACCESS_DENIED MUST be
returned.
If the CIM class being updated is static, the security principal that makes the call MUST have
WBEM_FULL_WRITE access to the namespace; otherwise, WBEM_E_ACCESS_DENIED MUST be
returned.
If the CIM class being created or updated is dynamic, the server MUST obtain SupportsPut for the
given provider in the ProviderTable. If SupportsPut is FALSE, the server MUST return
WBEM_E_PROVIDER_NOT_CAPABLE.
In response to the IWbemServices::PutClass method, the server MUST evaluate the pObject
parameter and MUST add or update this class into the current namespace. The method MUST fail if
pObject represents a read-only class, if the method parameters or their combinations are not valid as
specified in this section, or if the server is unable to execute the method. The method MUST fail with
WBEM_E_NOT_FOUND if pObject property __SUPERCLASS is specified but not found in ClassTable.
If a new class is added or an existing class is updated successfully, ClassTable MUST be updated with
the changes. If pObject property __SUPERCLASS is specified, DerivedClassTable MUST point to the
entry in the ClassTable representing the superclass.
If the CIM class referred by pObject is a new entry in the ClassTable, the server MUST generate a
__ClassCreationEvent event object upon successful creation of the class.
If the CIM class referred by pObject already exists in the ClassTable prior to this method call, the
server MUST generate a __ClassModificationEvent event object upon successfully updating the
class information.
The semisynchronous method execution MUST follow the rules that are specified in section 3.1.1.1.2.
The failed method execution MUST set output parameters to NULL and MUST return an error in the
format specified in section 2.2.11.
The server MUST ensure that the value referred by __CLASS conforms to CLASS-NAME in section
2.2.1.1. In addition:
If the value has an underscore character ("_") as the first character, the server MUST return
WBEM_E_INVALID_OPERATION.
If the value has an underscore character ("_") as the last character prior to NULL, the server
MUST return WBEM_E_INVALID_OBJECT.
The server SHOULD enforce a maximum length for the _CLASS property (2.2) of the object
pointed to by the pObject parameter, and return WBEM_E_QUOTA_VIOLATION if the limit is
exceeded.<35>
84 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
3.1.4.3.7 IWbemServices::PutClassAsync (Opnum 9)
HRESULT PutClassAsync(
[in] IWbemClassObject* pObject,
[in] long lFlags,
[in] IWbemContext* pCtx,
[in] IWbemObjectSink* pResponseHandler
);
pObject: MUST be a pointer to an IWbemClassObject interface pointer that MUST contain the class
information to create a new class or update an existing class. The class that is specified by the
parameter MUST have been correctly initialized with all the required property values. This
parameter MUST NOT be NULL.
lFlags: Specifies the behavior of the PutClassAsync method. Flag behavior MUST be interpreted as
specified in the following table.
The server MUST accept a combination of zero or more flags from the following table and MUST
comply with all the restrictions in a flag description. Any other DWORD value that does not match
a flag condition MUST be treated as not valid.
Value Meaning
WBEM_FLAG_USE_AMENDED_QUALIFIERS If this bit is set, the server SHOULD ignore all the amended
0x00020000 qualifiers while it creates or updates a CIM class.<36>
If this bit is not set, the server SHOULD include all the
qualifiers, including amended qualifiers, while it updates or
creates a CIM class.
WBEM_FLAG_UPDATE_ONLY The server MUST update a CIM class pObject if the CIM class
0x00000001 is present.
This flag is mutually exclusive with
WBEM_FLAG_CREATE_ONLY. If none of these flags are set,
the server MUST create or update a CIM class pObject.
WBEM_FLAG_CREATE_ONLY The server MUST create a CIM class pObject if the CIM class is
0x00000002 not already present.
WBEM_FLAG_UPDATE_FORCE_MODE The server MUST forcefully update the class even when
0x00000040 conflicting child classes exist.
WBEM_FLAG_UPDATE_SAFE_MODE The server MUST update the class as long as the change does
0x00000020 not cause any conflicts with existing child classes or instances.
This flag is mutually exclusive with
WBEM_FLAG_UPDATE_FORCE_MODE.
If none of these flags are set, the server MUST update the
class if there is no derived class, if there is no instance for that
class, or if the class is unchanged.
WBEM_FLAG_SEND_STATUS If this bit is not set, the server MUST make one final
0x00000080 IWbemObjectSink::SetStatus method call on the interface
pointer that is provided in the pResponseHandler parameter.
85 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Value Meaning
pCtx: MUST be a pointer to an IWbemContext interface, which MUST contain additional information
that the client wants to pass to the server. If the pCtx parameter is NULL, the parameter MUST be
ignored.
Return Values: This method MUST return an HRESULT value that MUST indicate the status of the
method call. The server MUST return WBEM_S_NO_ERROR (specified in section 2.2.11) to indicate
the successful completion of the method.
WBEM_S_NO_ERROR (0x00)
The security principal that makes the call MUST have WBEM_REMOTE_ENABLE and WBEM_ENABLE
accesses to the namespace; otherwise, WBEM_E_ACCESS_DENIED MUST be returned.
Requirements mentioned in the parameter definitions are also checked before starting asynchronous
operation.
If successful, the server MUST create a new entry in AsyncOperationTable as specified in section
3.1.1.1.3.
The server MUST first determine whether the class is dynamic or static. If the class exists in the
ClassTable for the namespace, then it is static when InstanceProviderId is NULL and dynamic
otherwise. If the class does not exist in the ClassTable, then WMI MUST iterate through each entry in
ProviderTable with IsClassProvider set to TRUE, calling the IsClassSupported entrypoint
(described in section 3.1.4.17.14). If a provider returns TRUE, then the algorithm is terminated and
the class is dynamic. Otherwise, the class is static.
If the CIM class being updated is dynamic, the security principal that makes the call MUST have
WBEM_WRITE_PROVIDER access to the namespace; otherwise, WBEM_E_ACCESS_DENIED MUST be
returned.
If the CIM class being updated is static, the security principal that makes the call MUST have
WBEM_FULL_WRITE access to the namespace; otherwise, WBEM_E_ACCESS_DENIED MUST be
returned.
If the CIM class being created or updated is dynamic, the server MUST obtain SupportsPut for the
given provider in the ProviderTable. If SupportsPut is FALSE, the server MUST return
WBEM_E_PROVIDER_NOT_CAPABLE.
In response to the IWbemServices::PutClassAsync method, the server MUST evaluate the pObject
parameter (previously specified) and it MUST add or update this class into the current namespace. The
method MUST fail if pObject represents a read-only class, if the method parameters or their
combinations are not valid (as previously specified), or if the server is unable to execute the method.
The method MUST fail with WBEM_E_NOT_FOUND if pObject property __SUPERCLASS is specified but
not found in ClassTable.
86 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
If a new class is added or an existing class is updated, ClassTable MUST be updated with the
changes. If pObject property __SUPERCLASS is specified, DerivedClassTable MUST point to the
entry in the ClassTable representing the SuperClass.
If the CIM class referred by pObject is a new entry in the ClassTable, the server MUST generate a
__ClassCreationEvent event object upon successful creation of the class.
If the CIM class referred by pObject already exists in the ClassTable prior to this method call, the
server MUST generate a __ClassModificationEvent event object upon successfully updating the
class information.
The server MUST ensure that the value referred by __CLASS conforms to CLASS-NAME in 2.2.1.1. In
addition:
If the value has an underscore character ("_") as the first character, the server MUST return
WBEM_E_INVALID_OPERATION.
If the value has an underscore character as the last character prior to NULL, the server MUST
return WBEM_E_INVALID_OBJECT.
The server SHOULD enforce a maximum length for the _CLASS property (see section 2.2) of the
object pointed to by the pObject parameter, and return WBEM_E_QUOTA_VIOLATION if the limit
is exceeded.<37>
The IWbemServices::DeleteClass method MUST delete a specified class from the namespace that is
associated with the current IWbemServices interface.
HRESULT DeleteClass(
[in] const BSTR strClass,
[in] long lFlags,
[in] IWbemContext* pCtx,
[out, in, unique] IWbemCallResult** ppCallResult
);
strClass: MUST be the name of the class to delete. This parameter MUST NOT be NULL.
lFlags: Specifies the behavior of the DeleteClass method. Flag behavior MUST be interpreted as
specified in the following table.
Value Meaning
WBEM_FLAG_RETURN_IMMEDIATELY If this bit is set, the server MUST make the method call
0x00000010 semisynchronously.
If this bit is not set, the server MUST make the method call
synchronously.
Any other DWORD value that does not match the preceding condition MUST be treated as invalid.
pCtx: MUST be a pointer to an IWbemContext interface, which MUST contain additional information
that the client wants to pass to the server. If pCtx is NULL, the parameter MUST be ignored.
ppCallResult: The output parameter MUST be filled according to the state of the lFlags parameter
(whether WBEM_FLAG_RETURN_IMMEDIATELY is set) as listed in the following table.
87 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Operation
Failed to
Flag state Operation Started Successfully Start
Return Values: This method MUST return an HRESULT value that MUST indicate the status of the
method call. The server MUST return WBEM_S_NO_ERROR (specified in section 2.2.11) to indicate
the successful completion of the method.
WBEM_S_NO_ERROR (0x00)
The security principal that makes the call MUST have WBEM_REMOTE_ENABLE and WBEM_ENABLE
accesses to the namespace; otherwise, WBEM_E_ACCESS_DENIED MUST be returned.
If the CIM class being deleted is dynamic, the security principal that makes the call MUST have
WBEM_WRITE_PROVIDER access to the namespace; otherwise, WBEM_E_ACCESS_DENIED MUST be
returned.
If the CIM class being deleted is static, the security principal that makes the call MUST have
WBEM_FULL_WRITE access to the namespace; otherwise, WBEM_E_ACCESS_DENIED MUST be
returned.
If the CIM class being deleted is dynamic, the server MUST obtain SupportsDelete for the given
provider in the ProviderTable. If SupportsDelete is FALSE, the server MUST return
WBEM_E_PROVIDER_NOT_CAPABLE.
In response to the IWbemServices::DeleteClass method, the server MUST evaluate the strClass
parameter (specified in this section) and MUST delete the strClass parameter from the current
namespace. The server MUST delete all the instances of the class and recursively delete all the derived
classes. The method MUST fail if the following applies: if strClass does not exist; if the method
parameters or their combinations are not valid as specified in this section; or if the server is unable to
execute the method.
The semisynchronous method execution MUST follow the rules that are specified in section 3.1.1.1.2.
The failed method execution MUST set output parameters to NULL and MUST return an error in the
format specified in section 2.2.11.
If the ppResult input parameter is non-NULL, the server MUST deliver the result of the requested
operation (regardless whether WBEM_FLAG_RETURN_IMMEDIATELY is set) via the IWbemCallResult,
similar to the semisynchronous execution case. If the ppCallResult input parameter is NULL and
WBEM_FLAG_RETURN_IMMEDIATELY is not set, the server MUST deliver the result of the requested
operation synchronously.
If a class is deleted, the corresponding entries for the class and its derived classes MUST be deleted
from the ClassTable.
88 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
The server MUST generate a __ClassDeletionEvent event object upon successfully deleting the class
information.
The server SHOULD enforce a maximum length for the strClass parameter, and return
WBEM_E_QUOTA_VIOLATION if the limit is exceeded.<38>
HRESULT DeleteClassAsync(
[in] const BSTR strClass,
[in] long lFlags,
[in] IWbemContext* pCtx,
[in] IWbemObjectSink* pResponseHandler
);
strClass: MUST be the name of the class to delete. This parameter MUST NOT be NULL.
lFlags: Specifies the behavior of the DeleteClassAsync method. Flag behavior MUST be interpreted as
specified in the following table.
Value Meaning
WBEM_FLAG_SEND_STATUS If this bit is not set, the server MUST make one final
0x00000080 IWbemObjectSink::SetStatus call on the interface pointer that is
provided in the pResponseHandler parameter.
If this bit is set, the server MAY make intermediate
IWbemObjectSink::SetStatus calls on the interface pointer prior to call
completion.
Any other DWORD value that does not match the preceding condition MUST be treated as not
valid.
pCtx: MUST be a pointer to an IWbemContext interface, which MUST contain additional information
that the client wants to pass to the server. If pCtx is NULL, the parameter MUST be ignored.
Return Values: This method MUST return an HRESULT value that MUST indicate the status of the
method call. The server MUST return WBEM_S_NO_ERROR (as specified in section 2.2.11) to
indicate the successful completion of the method.
WBEM_S_NO_ERROR (0x00)
The security principal that makes the call MUST have WBEM_REMOTE_ENABLE and WBEM_ENABLE
accesses to the namespace; otherwise, WBEM_E_ACCESS_DENIED MUST be returned.
The server SHOULD enforce a maximum length for the strClass parameter and return
WBEM_E_QUOTA_VIOLATION if the limit is exceeded.<39>
The requirements mentioned in the parameter definitions are also checked before starting the
asynchronous operation.
89 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
If successful, the server MUST create a new entry in AsyncOperationTable as specified in section
3.1.1.1.3.
If the CIM class being deleted is dynamic, the security principal that makes the call MUST have
WBEM_WRITE_PROVIDER access to the namespace; otherwise, WBEM_E_ACCESS_DENIED MUST be
returned.
If the CIM class being deleted is static, the security principal that makes the call MUST have
WBEM_FULL_WRITE access to the namespace; otherwise, WBEM_E_ACCESS_DENIED MUST be
returned.
If the CIM class being deleted is dynamic, the server MUST obtain SupportsDelete for the given
provider in the ProviderTable. If SupportsDelete is FALSE, the server MUST return
WBEM_E_PROVIDER_NOT_CAPABLE.
In response to the IWbemServices::DeleteClassAsync method, the server MUST evaluate the strClass
parameter (specified in this section) and MUST delete strClass from the current namespace. The
server MUST delete all the instances of the class and recursively delete all the derived classes. The
method MUST fail if the following applies: if strClass does not exist; if the method parameters or their
combinations are not valid as previously specified; or if the server is unable to execute the method.
If a new class is deleted, the corresponding entries for the class and the derived classes MUST be
deleted from the ClassTable.
The server MUST generate a __ClassDeletionEvent event object upon successfully deleting the class
information.
HRESULT CreateClassEnum(
[in] const BSTR strSuperclass,
[in] long lFlags,
[in] IWbemContext* pCtx,
[out] IEnumWbemClassObject** ppEnum
);
strSuperClass: MUST specify a superclass name. Only classes that are subclasses of this class
MUST be returned. If strSuperClass is NULL or a zero-length string, all classes in the namespace
MUST be included in the result set. The results MUST be filtered by using the lFlags parameter.
Classes without a base class MUST be considered to be derived from the NULL superclass.
lFlags: Flags affect the behavior of the CreateClassEnum method. Flag behavior MUST be interpreted
as specified in the following table.
The server MUST allow any combination of zero or more flags from the following table and MUST
comply with all the restrictions in a flag description. Any other DWORD value that does not match
a flag condition MUST be treated as not valid.
Value Meaning
WBEM_FLAG_USE_AMENDED_QUALIFIERS If this bit is not set, the server SHOULD return no CIM
0x00020000 localizable information.
If this bit is set, the server SHOULD return CIM localizable
90 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Value Meaning
WBEM_FLAG_RETURN_IMMEDIATELY If this bit is not set, the server MUST make the method
0x00000010 call synchronously.
If this bit is set, the server MUST make the method call
semisynchronously.
WBEM_FLAG_SHALLOW When this bit is not set, the server MUST return all
0x00000001 classes that are derived from the requested class and all
its subclasses.
When this bit is set, the server MUST return only the
classes that are directly derived from the requested class.
WBEM_FLAG_FORWARD_ONLY When this bit is not set, the server MUST return an
0x00000020 enumerator that has reset capability.
When this bit is set, the server MUST return an
enumerator that does not have reset capability, as
specified in section 3.1.4.4.
pCtx: MUST be a pointer to an IWbemContext interface that MUST contain additional information that
the client wants to pass to the server. If the pCtx parameter is NULL, it MUST be ignored.
ppEnum: MUST receive the pointer to the enumerator that implements the IEnumWbemClassObject
interface. This parameter MUST NOT be NULL.
Return Values: This method MUST return an HRESULT value that MUST indicate the status of the
method call. The server MUST return WBEM_S_NO_ERROR (as specified in section 2.2.11) to
indicate the successful completion of the method.
WBEM_S_NO_ERROR (0x00)
The security principal that makes the call MUST have WBEM_REMOTE_ENABLE and WBEM_ENABLE
accesses to the namespace; otherwise, WBEM_E_ACCESS_DENIED MUST be returned.
If strSuperClass is dynamic, the server MUST obtain SupportsEnumerate for the given provider in
the ProviderTable. If SupportsEnumerate is FALSE, the server MUST return
WBEM_E_PROVIDER_NOT_CAPABLE.
The successful synchronous method execution MUST fill the ppEnum parameter with an
IEnumWbemClassObject interface pointer after all classes are collected and MUST return
WBEM_S_NO_ERROR.
The semisynchronous method execution MUST follow the rules that are specified in section 3.1.1.1.2.
The failed method execution MUST set the value that is referenced by the output parameters to NULL
and MUST return an error in the format that is specified in section 2.2.11.
The server SHOULD enforce a maximum length for the strSuperClass parameter, and return
WBEM_E_QUOTA_VIOLATION if the limit is exceeded.<40>
91 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
The IWbemServices::CreateClassEnumAsync method provides an asynchronous class enumeration.
When this method is invoked, the server MUST return all classes that satisfy the selection criteria.
HRESULT CreateClassEnumAsync(
[in] const BSTR strSuperclass,
[in] long lFlags,
[in] IWbemContext* pCtx,
[in] IWbemObjectSink* pResponseHandler
);
strSuperClass: Specifies a superclass name. Only classes that are subclasses of this class MUST be
returned. If strSuperClass is NULL or a zero-length string, all classes in the namespace MUST be
considered in the result set. The results MUST be filtered by using the lFlags parameter. Classes
without a base class are considered to be derived from the NULL superclass.
lFlags: Flags that affect the behavior of the CreateClassEnum method. Flag behavior MUST be
interpreted as specified in the following table.
The server MUST allow any combination of zero or more flags from the following table and MUST
comply with all the restrictions in a flag description. Any other DWORD value that does not match
a flag condition MUST be treated as not valid.
Value Meaning
WBEM_FLAG_USE_AMENDED_QUALIFIERS If this bit is not set, the server SHOULD return no CIM
0x00020000 localizable information.
If this bit is set, the server SHOULD return CIM localizable
information for the CIM object as specified in section
2.2.6.
WBEM_FLAG_SEND_STATUS If this bit is not set, the server MUST make one final
0x00000080 IWbemObjectSink::SetStatus call on the interface
pointer that is provided in the pResponseHandler
parameter.
If this bit is set, the server MAY make intermediate
IWbemObjectSink::SetStatus calls on the interface
pointer prior to call completion.
WBEM_FLAG_SHALLOW When this bit is not set, the server MUST return all
0x00000001 classes that are derived from the requested class and all
its subclasses.
When this bit is set, the server MUST only return the
classes that are directly derived from the requested class.
pCtx: MUST be a pointer to an IWbemContext interface, which MUST contain additional information
that the client wants to pass to the server. If pCtx is NULL, the parameter MUST be ignored.
Return Values: This method MUST return an HRESULT, which MUST indicate the status of the
method call. The HRESULT MUST have the type and values as specified in section 2.2.11. The
server MUST return WBEM_S_NO_ERROR (specified in section 2.2.11) to indicate the successful
completion of the method.
WBEM_S_NO_ERROR (0x00)
92 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
The following validation occurs before the asynchronous operation starts:
The security principal that makes the call MUST have WBEM_REMOTE_ENABLE and WBEM_ENABLE
accesses to the namespace; otherwise, WBEM_E_ACCESS_DENIED MUST be returned.
The server SHOULD enforce a maximum length for the strSuperClass parameter and return
WBEM_E_QUOTA_VIOLATION if the limit is exceeded.<41>
Requirements mentioned in the parameter definitions are also checked before starting the
asynchronous operation.
If successful, the server MUST create a new entry in AsyncOperationTable as specified in section
3.1.1.1.3.
If strSuperClass is dynamic, the server MUST obtain SupportsEnumerate for the given provider in
the ProviderTable. If SupportsEnumerate is FALSE, the server MUST return
WBEM_E_PROVIDER_NOT_CAPABLE.
HRESULT PutInstance(
[in] IWbemClassObject* pInst,
[in] long lFlags,
[in] IWbemContext* pCtx,
[out, in, unique] IWbemCallResult** ppCallResult
);
pInst: MUST be a pointer to an IWbemClassObject interface object that MUST contain the class
instance that the client wants to create or update. This parameter MUST NOT be NULL.
lFlags: Flags that affect the behavior of the PutInstance method. Flag behavior MUST be interpreted
as specified in the following table.
The server MUST accept a combination of zero or more flags from the following table and MUST
comply with all the restrictions in a flag description. Any other DWORD value that does not match
a flag condition MUST be treated as not valid.
Value Meaning
WBEM_FLAG_USE_AMENDED_QUALIFIERS If this bit is set, the server SHOULD ignore all the
0x00020000 amended qualifiers while this method creates or updates
a CIM instance.
If this bit is not set, the server SHOULD include all the
qualifiers, including amended qualifiers, while this method
creates or updates a CIM instance.
WBEM_FLAG_RETURN_IMMEDIATELY If this bit is not set, the server MUST make the method
call synchronously.
93 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Value Meaning
0x00000010 If this bit is set, the server MUST make the method call
semisynchronously.
WBEM_FLAG_CREATE_ONLY The server MUST create a CIM instance pObject if the CIM
0x00000002 instance is not already present.
pCtx: This parameter is optional. The pCtx parameter MUST be a pointer to an IWbemContext
interface object. The pCtx parameter indicates whether the client is requesting a partial-instance
update or a full-instance update. A partial-instance update modifies a subset of the CIM instance
properties. In contrast, a full-instance update modifies all the properties. If NULL, this parameter
indicates that the client application is requesting a full-instance update. When pCtx is used to
perform a partial-instance update, the IWbemContext interface object MUST be filled in with the
properties that are specified in the following table. If the IWbemContext interface object does not
contain the properties in the table, the method MUST return WBEM_E_INVALID_CONTEXT.
__PUT_EXTENSIONS VT_BOOL If this property is set to TRUE, one or more of the other
IWbemContext values have been specified. To perform a
partial instance update, this property MUST be set to
TRUE and the properties that follow MUST be set as
specified in their respective descriptions.
__PUT_EXT_STRICT_NULLS VT_BOOL If this property is set to TRUE, the server MUST force the
setting of properties to NULL. This parameter is optional.
__PUT_EXT_ATOMIC VT_BOOL If the return code indicates success, all CIM property
updates MUST have been successful.
On failure, the server MUST revert any changes to the
original state for all CIM property that was updated. On
failure, not a single change MUST remain. The operation
is successful when all properties are updated.
ppCallResult: If the input parameter is non-NULL, the server MUST return WBEM_S_NO_ERROR and
IWbemCallResult MUST deliver the result of the requested operation (regardless whether
WBEM_FLAG_RETURN_IMMEDIATELY is set). The output parameter MUST be filled according to
the state of the lFlags parameter (whether WBEM_FLAG_RETURN_IMMEDIATELY is set) as listed in
the following table.
Operation
Failed to
Flag state Operation Started Successfully Start
94 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Operation
Failed to
Flag state Operation Started Successfully Start
parameter
is non-
NULL.
Return Values: This method MUST return an HRESULT value that MUST indicate the status of the
method call. The server MUST return WBEM_S_NO_ERROR (specified in section 2.2.11) to indicate
the successful completion of the method.
WBEM_S_NO_ERROR (0x00)
The security principal that makes the call MUST have WBEM_REMOTE_ENABLE and WBEM_ENABLE
accesses to the namespace; otherwise, WBEM_E_ACCESS_DENIED MUST be returned.
If the CIM instance being updated is dynamic, the security principal that makes the call MUST have
WBEM_WRITE_PROVIDER access to the namespace; otherwise, WBEM_E_ACCESS_DENIED MUST be
returned.
If the CIM instance being created or updated is dynamic, the server MUST obtain SupportsPut for the
corresponding provider in the ProviderTable. If SupportsPut is FALSE, the server MUST return
WBEM_E_PROVIDER_NOT_CAPABLE.
If the CIM instance being updated is static and if the CIM instance is of a class that has a WMI system
class as one of the classes in the parent hierarchy, the security principal that makes the call MUST
have WBEM_FULL_WRITE access to the namespace; otherwise, WBEM_E_ACCESS_DENIED MUST be
returned.
If the CIM instance being updated is static and if the CIM instance is of a class that does not have a
WMI system class as one of the classes in the parent hierarchy, the security principal that makes the
call MUST have WBEM_PARTIAL_WRITE_REP access to the namespace; otherwise,
WBEM_E_ACCESS_DENIED MUST be returned.
If the CIM class of the instance being created has a parent class that is not abstract, the server MUST
fail the operation with WBEM_E_NOT_FOUND. [DMTF-DSP0004] requires that the operation MUST
succeed whenth e parent CIM class is abstract.
In response to the IWbemServices::PutInstance method, the server MUST evaluate the pInst
parameter as specified in this section. It MUST add or update this instance into the current
namespace. The method MUST fail if the following applies: if the server does not allow creation of new
instances for the pInst class or does not allow modification of the instance that is represented by
pInst; if the method parameters or their combinations are not valid as specified in this section; or if
the server is unable to execute the method.
The semisynchronous method execution MUST follow the rules as specified in section 3.1.1.1.2.
95 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
The failed method execution MUST set output parameters to NULL and MUST return an error in the
format that is specified in section 2.2.11.
The server SHOULD enforce a maximum length for the __RELPATH system property of the object
pointed to by the pInst parameter, and return WBEM_E_QUOTA_VIOLATION if the limit is
exceeded.<42>
HRESULT PutInstanceAsync(
[in] IWbemClassObject* pInst,
[in] long lFlags,
[in] IWbemContext* pCtx,
[in] IWbemObjectSink* pResponseHandler
);
pInst: MUST be a pointer to an IWbemClassObject interface object that MUST contain the class
instance that the client wants to create or update. This parameter MUST NOT be NULL.
lFlags: Flags that affect the behavior of the PutInstanceAsync method. Flag behavior MUST be
interpreted as specified in the following table.
The server MUST accept a combination of zero or more flags from the following table and MUST
comply with all the restrictions in a flag description. Any other DWORD value that does not comply
with this condition MUST be treated as not valid.
Value Meaning
WBEM_FLAG_USE_AMENDED_QUALIFIERS If this bit is set, the server SHOULD ignore all the
0x00020000 amended qualifiers while this method creates or updates
a CIM instance.
If this bit is not set, the server SHOULD include all the
qualifiers, including amended qualifiers, while this method
creates or updates a CIM instance.
WBEM_FLAG_CREATE_ONLY The server MUST create a CIM instance pObject if the CIM
0x00000002 instance is not already present.
WBEM_FLAG_SEND_STATUS If this bit is not set, the server MUST make one final
0x00000080 IWbemObjectSink::SetStatus call on the interface
pointer that is provided in the pResponseHandler
parameter.
If this bit is set, the server MAY make intermediate
IWbemObjectSink::SetStatus calls on the interface
pointer prior to call completion.
96 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
a subset of CIM instance properties; a full-instance update modifies all the properties. If NULL,
this parameter indicates that the client application is requesting a full-instance update. When pCtx
is used to perform a partial-instance update, the IWbemContext interface MUST be completed with
the properties that are specified in the following table. If the IWbemContext interface object does
not contain the properties in the table, the method MUST return WBEM_E_INVALID_CONTEXT.
__PUT_EXTENSIONS VT_BOOL If this property is set to TRUE, one or more of the other
IWbemContext values have been specified. To perform a
partial-instance update, this property MUST be set to
TRUE.
__PUT_EXT_STRICT_NULLS VT_BOOL If this property is set to TRUE, the server MUST force
the setting of properties to NULL. This parameter is
optional.
__PUT_EXT_PROPERTIES VT_ARRAY | Contains a CIM property list to update. The server MUST
VT_BSTR ignore properties that are not listed. To perform a
partial-instance update, the list of properties MUST be
specified.
__PUT_EXT_ATOMIC VT_BOOL If the return code indicates success, all CIM property
updates MUST have been successful.
On failure, the server MUST revert any changes to the
original state for all CIM property updates. On failure,
any changes MUST NOT remain. The operation is
successful when all properties are updated.
Return Values: This method MUST return an HRESULT value that MUST indicate the status of the
method call. The server MUST return WBEM_S_NO_ERROR (specified in section 2.2.11) to indicate
the successful completion of the method.
WBEM_S_NO_ERROR (0x00)
The security principal that makes the call MUST have WBEM_REMOTE_ENABLE and WBEM_ENABLE
accesses to the namespace; otherwise, WBEM_E_ACCESS_DENIED MUST be returned.
The server SHOULD enforce a maximum length for the _RELPATH system property of the object
pointed to by the pInst parameter and return WBEM_E_QUOTA_VIOLATION if the limit is
exceeded.<43>
Requirements mentioned in the parameter definitions are also checked before the asynchronous
operation is started.
If successful, the server MUST create a new entry in AsyncOperationTable as specified in section
3.1.1.1.3.
If the CIM instance being updated is dynamic, the security principal that makes the call MUST have
WBEM_WRITE_PROVIDER access to the namespace; otherwise, WBEM_E_ACCESS_DENIED MUST be
returned.
If the CIM instance being updated is static and if the CIM instance is of a class that has a WMI system
class as one of the classes in the parent hierarchy, the security principal that makes the call MUST
97 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
have WBEM_FULL_WRITE access to the namespace; otherwise, WBEM_E_ACCESS_DENIED MUST be
returned.
If the CIM instance being updated is static and if the CIM instance is of a class that does not have a
WMI system class as one of the classes in the parent hierarchy, the security principal that makes the
call MUST have WBEM_PARTIAL_WRITE_REP access to the namespace; otherwise,
WBEM_E_ACCESS_DENIED MUST be returned.
If the CIM class of the instance being created has a parent class that is not abstract, the server MUST
fail the operation with WBEM_E_NOT_FOUND. [DMTF-DSP0004] requires that the operation MUST
succeed when the parent CIM class is abstract.
If the CIM instance being created or updated is dynamic, the server MUST obtain SupportsPut for the
corresponding provider in the ProviderTable. If SupportsPut is FALSE, the server MUST return
WBEM_E_PROVIDER_NOT_CAPABLE.
If the instance belongs to the __Namespace class, then the server MUST create a new namespace as
described in section 3.1.4.3.13.
HRESULT DeleteInstance(
[in] const BSTR strObjectPath,
[in] long lFlags,
[in] IWbemContext* pCtx,
[out, in, unique] IWbemCallResult** ppCallResult
);
strObjectPath: MUST be the CIM path to the class instance that the client wants to delete. This
parameter MUST NOT be NULL. The CIM path MUST contain the class name and the value of the
key properties.
lFlags: Flags that affect the behavior of the IWbemServices::DeleteInstance method. Flag behavior
MUST be interpreted as specified in the following table.
Value Meaning
WBEM_FLAG_RETURN_IMMEDIATELY If this bit is not set, the server MUST make the method call
0x00000010 synchronously.
If this bit is set, the server MUST make the method call
semisynchronously.
Any other DWORD value that does not match the preceding condition MUST be treated as invalid.
pCtx: MUST be a pointer to an IWbemContext interface, which MUST contain additional information
that the client wants to pass to the server. If pCtx is NULL, the parameter MUST be ignored.
ppCallResult: If the input parameter is non-NULL, the server MUST return WBEM_S_NO_ERROR and
IWbemCallResult MUST deliver the result of the requested operation (regardless whether
98 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
WBEM_FLAG_RETURN_IMMEDIATELY is set). The output parameter MUST be filled according to
the state of the lFlags parameter (whether WBEM_FLAG_RETURN_IMMEDIATELY is set) as listed in
the following table.
Operation
Failed to
Flag state Operation Started Successfully Start
Return Values: This method MUST return an HRESULT value that MUST indicate the status of the
method call. The server MUST return WBEM_S_NO_ERROR (specified in section 2.2.11) to indicate
the successful completion of the method.
WBEM_S_NO_ERROR (0x00)
The security principal that makes the call MUST have WBEM_REMOTE_ENABLE and WBEM_ENABLE
accesses to the namespace; otherwise, WBEM_E_ACCESS_DENIED MUST be returned.
If the CIM instance being updated is dynamic, the security principal that makes the call MUST have
WBEM_WRITE_PROVIDER access to the namespace; otherwise, WBEM_E_ACCESS_DENIED MUST be
returned.
If the CIM instance being updated is static and if the CIM instance is of a class that has a WMI system
class as one of the classes in the parent hierarchy, the security principal that makes the call MUST
have WBEM_FULL_WRITE access to the namespace; otherwise, WBEM_E_ACCESS_DENIED MUST be
returned.
If the CIM instance being updated is static and if the CIM instance is of a class that does not have a
WMI system class as one of the classes in the parent hierarchy, the security principal that makes the
call MUST have WBEM_PARTIAL_WRITE_REP access to the namespace; otherwise,
WBEM_E_ACCESS_DENIED MUST be returned.
If the CIM instance being deleted is dynamic, the server MUST obtain SupportsDelete for the given
provider in the ProviderTable. If SupportsDelete is FALSE, the server MUST return
WBEM_E_PROVIDER_NOT_CAPABLE.
99 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
The server SHOULD enforce a maximum length for the strObjectPath parameter, and return
WBEM_E_QUOTA_VIOLATION if the limit is exceeded.<44>
The semisynchronous method execution MUST follow the rules as specified in section 3.1.1.1.2.
The failed method execution MUST set the output parameters to NULL and MUST return an error in the
format specified in section 2.2.11.
HRESULT DeleteInstanceAsync(
[in] const BSTR strObjectPath,
[in] long lFlags,
[in] IWbemContext* pCtx,
[in] IWbemObjectSink* pResponseHandler
);
strObjectPath: MUST be the CIM path to the class instance that the client wants to delete. This
parameter MUST NOT be NULL. The CIM path MUST contain the class name and the value of the
key properties.
lFlags: Flags that affect the behavior of the IWbemServices::DeleteInstanceAsync method. Flag
behavior MUST be interpreted as specified in the following table.
Value Meaning
WBEM_FLAG_SEND_STATUS If this bit is not set, the server MUST make one final
0x00000080 IWbemObjectSink::SetStatus call on the interface pointer that is
provided in the pResponseHandler parameter.
If this bit is set, the server MAY make intermediate
IWbemObjectSink::SetStatus calls on the interface pointer prior to call
completion.
Any other DWORD value that does not match the preceding condition MUST be treated as invalid.
pCtx: MUST be a pointer to an IWbemContext interface, which contains additional information that the
client wants to pass to the server. If pCtx is NULL, the parameter MUST be ignored.
Return Values: This method MUST return an HRESULT value that MUST indicate the status of the
method call. The server MUST return WBEM_S_NO_ERROR (specified in section 2.2.11) to indicate
the successful completion of the method.
WBEM_S_NO_ERROR (0x00)
The security principal that makes the call MUST have WBEM_REMOTE_ENABLE and WBEM_ENABLE
accesses to the namespace; otherwise, WBEM_E_ACCESS_DENIED MUST be returned.
100 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
The server SHOULD enforce a maximum length for the strObjectPath parameter and return
WBEM_E_QUOTA_VIOLATION if the limit is exceeded.<45>
The requirements mentioned in the parameter definitions are also checked before an asynchronous
operation is started.
If successful, the server MUST create a new entry in AsyncOperationTable as specified in section
3.1.1.1.3.
If the CIM instance being updated is dynamic, the security principal that makes the call MUST have
WBEM_WRITE_PROVIDER access to the namespace; otherwise, WBEM_E_ACCESS_DENIED MUST be
returned.
If the CIM instance being updated is static and if the CIM instance is of a class that has a WMI system
class as one of the classes in the parent hierarchy, the security principal that makes the call MUST
have WBEM_FULL_WRITE access to the namespace; otherwise, WBEM_E_ACCESS_DENIED MUST be
returned.
If the CIM instance being updated is static and if the CIM instance is of a class that does not have a
WMI system class as one of the classes in the parent hierarchy, the security principal that makes the
call MUST have WBEM_PARTIAL_WRITE_REP access to the namespace; otherwise,
WBEM_E_ACCESS_DENIED MUST be returned.
If the CIM instance being deleted is dynamic, the server MUST obtain SupportsDelete for the given
provider in the ProviderTable. If SupportsDelete is FALSE, the server MUST return
WBEM_E_PROVIDER_NOT_CAPABLE.
HRESULT CreateInstanceEnum(
[in] const BSTR strSuperClass,
[in] long lFlags,
[in] IWbemContext* pCtx,
[out] IEnumWbemClassObject** ppEnum
);
strSuperClass: MUST contain the name of the CIM class for which the client wants instances. This
parameter MUST NOT be NULL.
lFlags: Flags that affect the behavior of the CreateInstanceEnum method. Flag behavior MUST be
interpreted as specified in the following table.
The server MUST allow any combination of zero or more flags from the following table and MUST
comply with all the restrictions in a flag description. Any other DWORD value that does not match
a flag condition MUST be treated as not valid.
101 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Value Meaning
WBEM_FLAG_USE_AMENDED_QUALIFIERS If this bit is not set, the server SHOULD return no CIM
0x00020000 localizable information.
If this bit is set, the server SHOULD return CIM localizable
information for the CIM object, as specified in section
2.2.6.
WBEM_FLAG_RETURN_IMMEDIATELY If this bit is not set, the server MUST make the method
0x00000010 call synchronously.
If this bit is set, the server MUST make the method call
semisynchronously.
WBEM_FLAG_DIRECT_READ If this bit is not set, the server MUST consider the entire
0x00000200 class hierarchy when it returns the result.
If this bit is set, the server MUST disregard any derived
class when it searches the result.
WBEM_FLAG_SHALLOW If this bit is set, the server MUST return instances of the
0x00000001 requested class only and MUST exclude instances of
classes that are derived from the requested class.
If this bit is not set, the server MUST return all instances
of the requested class as well as instances of classes that
are derived from the requested class.
pCtx: MUST be a pointer to an IWbemContext interface, which contains additional information that the
client wants to pass to the server. If pCtx is NULL, the parameter MUST be ignored.
ppEnum: MUST receive the pointer to the enumerator that is used to enumerate through the returned
class instances, which implements the IEnumWbemClassObject interface. This parameter MUST
NOT be NULL.
Return Values: This method MUST return an HRESULT value that MUST indicate the status of the
method call. The server MUST return the following value (specified in section 2.2.11) to indicate
the successful completion of the method.
WBEM_S_NO_ERROR (0x00)
The security principal that makes the call MUST have WBEM_ENABLE and WBEM_REMOTE_ENABLE
accesses to the namespace; otherwise, WBEM_E_ACCESS_DENIED MUST be returned.
If strSuperClass is dynamic, the server MUST obtain SupportsEnumerate for the given provider in
the ProviderTable. If SupportsEnumerate is FALSE, the server MUST return
WBEM_E_PROVIDER_NOT_CAPABLE.
The server SHOULD enforce a maximum length for the strSuperClass parameter, and return
WBEM_E_QUOTA_VIOLATION if the limit is exceeded.<46>
102 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
The successful synchronous method execution MUST fill the ppEnum parameter with an
IEnumWbemClassObject interface pointer after all instances are collected and MUST return
WBEM_S_NO_ERROR.
The semisynchronous method execution MUST follow the rules as specified in section 3.1.1.1.2.
The failed method execution MUST set the value that is referenced by the output parameters to NULL
and MUST return an error in the format that is specified in section 2.2.11.
HRESULT CreateInstanceEnumAsync(
[in] const BSTR strSuperClass,
[in] long lFlags,
[in] IWbemContext* pCtx,
[in] IWbemObjectSink* pResponseHandler
);
strSuperClass: MUST contain the name of the CIM class for which the client wants instances. This
parameter MUST NOT be NULL.
lFlags: Flags that affect the behavior of the IWbemServices::CreateInstanceEnumAsync method. Flag
behavior MUST be interpreted as specified in the following table.
The server MUST allow any combination of zero or more flags from the following table and MUST
comply with all the restrictions in a flag description. Any other DWORD value that does not match
a flag condition MUST be treated as not valid.
Value Meaning
WBEM_FLAG_USE_AMENDED_QUALIFIERS If this bit is not set, the server SHOULD return no CIM
0x00020000 localizable information.
If this bit is set, the server SHOULD return CIM localizable
information for the CIM object, as specified in section
2.2.6.
WBEM_FLAG_SEND_STATUS If this bit is not set the server MUST make one final
0x00000080 IWbemObjectSink::SetStatus call on the interface
pointer that is provided in the pResponseHandler
parameter.
If this bit is set, the server MAY make intermediate
IWbemObjectSink::SetStatus calls on the interface
pointer prior to call completion.
WBEM_FLAG_DIRECT_READ If this bit is not set, the server MUST consider the entire
0x00000200 class hierarchy when it returns the result.
If this bit is set, the server MUST disregard any derived
class when it searches the result.
WBEM_FLAG_SHALLOW If this bit is set, the server MUST return instances of the
0x00000001 requested class only and MUST exclude instances of
classes that are derived from the requested class.
If this bit is not set, the server MUST return all instances
of the requested class as well as instances of classes that
are derived from the requested class.
103 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
pCtx: MUST be a pointer to an IWbemContext interface, which MUST contain additional information
that the client wants to pass to the server. If pCtx is NULL, the parameter MUST be ignored.
Return Values: This method MUST return an HRESULT value that MUST indicate the status of the
method call. The server MUST return WBEM_S_NO_ERROR (as specified in section 2.2.11) to
indicate the successful completion of the method.
WBEM_S_NO_ERROR (0x00)
The security principal that makes the call MUST have WBEM_ENABLE and WBEM_REMOTE_ENABLE
accesses to the namespace; otherwise, WBEM_E_ACCESS_DENIED MUST be returned.
The server SHOULD enforce a maximum length for the strSuperClass parameter and return
WBEM_E_QUOTA_VIOLATION if the limit is exceeded.<47>
Requirements mentioned in the parameter definitions are also checked before starting the
asynchronous operation.
If successful, the server MUST create a new entry in AsyncOperationTable as specified in section
3.1.1.1.3.
If strSuperClass is dynamic, the server MUST obtain SupportsEnumerate for the given provider in
the ProviderTable. If SupportsEnumerate is FALSE, the server MUST return
WBEM_E_PROVIDER_NOT_CAPABLE.
HRESULT ExecQuery(
[in] const BSTR strQueryLanguage,
[in] const BSTR strQuery,
[in] long lFlags,
[in] IWbemContext* pCtx,
[out] IEnumWbemClassObject** ppEnum
);
strQuery: MUST contain the "WQL" query text as specified in [UNICODE] (UTF-16) and in section
2.2.1. This parameter MUST NOT be NULL.
lFlags: Specifies the behavior of the IWbemServices::ExecQuery method. Flag behavior MUST be
interpreted as specified in the following table.
104 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
The server MUST allow any combination of zero or more flags from the following table and MUST
comply with all the restrictions in a flag description. Any other DWORD value that does not match
a flag condition MUST be treated as not valid.
Value Meaning
WBEM_FLAG_USE_AMENDED_QUALIFIERS If this bit is not set, the server SHOULD not return CIM
0x00020000 localizable information.
If this bit is set, the server SHOULD return CIM localizable
information for the CIM object, as specified in section
2.2.6.
WBEM_FLAG_RETURN_IMMEDIATELY If this bit is not set, the server MUST make the method
0x00000010 call synchronously.
If this bit is set, the server MUST make the method call
semisynchronously.
WBEM_FLAG_DIRECT_READ If this bit is not set, the server MUST consider the entire
0x00000200 class hierarchy when it returns the result.
If this bit is set, the server MUST disregard any derived
class when it searches the result.
WBEM_FLAG_PROTOTYPE If this bit is not set, the server MUST run the query.
0x00000002 If this bit is set, the server MUST only return the class
schema of the resulting objects.
pCtx: MUST be a pointer to an IWbemContext interface, which MUST contain additional information
that the client wants to pass to the server. If pCtx is NULL, the parameter MUST be ignored.
ppEnum: MUST receive the pointer to the IEnumWbemClassObject that is used to enumerate through
the CIM objects that are returned for the query result set. This parameter MUST NOT be NULL.
Return Values: This method MUST return an HRESULT value that MUST indicate the status of the
method call. The server MUST return WBEM_S_NO_ERROR (as specified in section 2.2.11) to
indicate the successful completion of the method.
WBEM_S_NO_ERROR (0x00)
The security principal that makes the call MUST have WBEM_ENABLE and WBEM_REMOTE_ENABLE
accesses to the namespace; otherwise, WBEM_E_ACCESS_DENIED MUST be returned.
The server SHOULD enforce a maximum length for the strQuery parameter, and return
WBEM_E_QUOTA_VIOLATION if the limit is exceeded.<48>
If the strQuery is not syntactically valid or one or more elements in <PROPERTY-LIST> contains
undefined properties, the server MUST return WBEM_E_INVALID_QUERY.
If strQuery is evaluated successfully, the following processing rules MUST be applied. These rules use
the following state variables:
105 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
QueryPropertyList: A list of properties to be retrieved, from the WQL SELECT query.
3. Search the ClassTable for the class-name specified in the FROM clause and find all the
classes in the inheritance hierarchy (through the DerivedClassTable).
If the results are returned from the provider, then the server MUST skip the remaining
steps.
If InstanceProviderId is zero:
The server MUST find the instances for the class in ClassInstancesTable in the
ClassTable corresponding to the class.
2. Filter the enumerated instances using the QueryWhereFilter (see WQL Query (section 2.2.1)).
3. From the filtered instances, select only the properties on the QueryPropertyList to form the
result of the query.
4. If strQuery begins with ASSOCIATORS OF, the server MUST do the following:
3. Get all the WMI instances matching the object-path in the query.
4. From the __CLASS property of each instance, get the class-name of all returned WMI objects.
6. For each RequiredAssocQualifier clause in the query, remove from AssociationClasses any
class not containing the qualifier value specified with RequiredAssocQualifier.
106 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Find QuerySupportLevels corresponding to the given ProviderId in the
ProviderTable.
If the results are returned from the provider, then the server MUST skip the remaining
steps.
If InstanceProviderId is zero:
The server MUST find the instances for the class in ClassInstancesTable in the
ClassTable corresponding to the class.
1. After all the instances are obtained from the preceding step, select the instances where the
REF property matched one of the instances from step 3.
2. For each remaining instance, look for all other ref properties in the instance and get the object
referenced by them.
4. The server SHOULD<49> process the following step. If KeysOnly is specified as part of the
QueryWhereFilter, search the class table again for the classes of the filtered instances and
get the list of key properties from ClassDeclaration (key properties will have a qualifier
'key'). Select the values of (only) the key properties to form the result of the query.
5. If strQuery begins with REFERENCES OF, the server MUST do the following:
3. Get all the WMI instances matching the object-path in the query.
4. From the __CLASS property, get the class-name of all returned WMI objects.
107 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
If the results are returned from the provider, then the server MUST skip the remaining
steps.
If InstanceProviderId is zero:
The server MUST find the instances for the class in ClassInstancesTable in the
ClassTable corresponding to the class.
10. After all the instances are obtained from the above step, select the instances where the REF
property matched one of the instances from step 3.
12. The server SHOULD<50> process the following step. If Keysonly is specified as part of
QueryWhereFilter, search the ClassTable again for the classes of the filtered instances and get
the list of keys from ClassDeclaration (key properties will have a qualifier 'key'). Select the
values of (only) the key properties to form the result of the query.
13. If classdefsonly is specified as part of the QueryWhereFilter, search the ClassTable again for
the ClassDeclaration of the filtered instances and return the class declaration instead of the
instances as the result of the query.
The successful synchronous method execution MUST fill the ppEnum parameter with a
IEnumWbemClassObject interface pointer after all instances are collected and MUST return
WBEM_S_NO_ERROR.
The semisynchronous method execution MUST follow the rules that are specified in section
3.1.1.1.2.
The failed method execution MUST set the value that is referenced by the output parameters to NULL
and MUST return an error in the format specified in section 2.2.11.
HRESULT ExecQueryAsync(
[in] const BSTR strQueryLanguage,
[in] const BSTR strQuery,
[in] long lFlags,
[in] IWbemContext* pCtx,
[in] IWbemObjectSink* pResponseHandler
);
strQuery: MUST contain the WQL query text as specified in section 2.2.1. This parameter MUST NOT
be NULL.
lFlags: Specifies the behavior of the IWbemServices::ExecQueryAsync method. Flag behavior MUST
be interpreted as specified in the following table.
The server MUST allow any combination of zero or more flags from the following table and MUST
comply with all the restrictions in a flag description. Any other DWORD value that does not match
a flag condition MUST be treated as not valid.
108 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Value Meaning
WBEM_FLAG_USE_AMENDED_QUALIFIERS If this bit is not set, the server SHOULD not return CIM
0x00020000 localizable information.
If this bit is set, the server SHOULD return CIM localizable
information for the CIM object, as specified in section
2.2.6.
WBEM_FLAG_SEND_STATUS If this bit is not set the server MUST make one final
0x00000080 IWbemObjectSink::SetStatus call on the interface
pointer that is provided in the pResponseHandler
parameter.
If this bit is set, the server MAY make intermediate
IWbemObjectSink::SetStatus calls on the interface
pointer prior to call completion.
WBEM_FLAG_PROTOTYPE If this bit is not set, the server MUST run the query.
0x00000002 If this bit is set, the server MUST only return the class
schema of the resulting objects.
WBEM_FLAG_DIRECT_READ If this bit is not set, the server MUST consider the entire
0x00000200 class hierarchy when it returns the result.
If this bit is set, the server MUST disregard any derived
class when it searches the result.
pCtx: MUST be a pointer to an IWbemContext interface, which MUST contain additional information
that the client wants to pass to the server. If pCtx is NULL, the parameter MUST be ignored.
Return Values: This method MUST return an HRESULT value that MUST indicate the status of the
method call. The server MUST return WBEM_S_NO_ERROR (as specified in section 2.2.11) to
indicate the successful completion of the method.
WBEM_S_NO_ERROR (0x00)
The security principal that makes the call MUST have WBEM_ENABLE and WBEM_REMOTE_ENABLE
accesses to the namespace; otherwise, WBEM_E_ACCESS_DENIED MUST be returned.
The server SHOULD enforce a maximum length for the strQuery parameter and return
WBEM_E_QUOTA_VIOLATION if the limit is exceeded.<51>
Requirements mentioned in the parameter definitions are also checked before an asynchronous
operation is started.
If successful, the server MUST create a new entry in AsyncOperationTable as specified in section
3.1.1.1.3.
109 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
If the strQuery is not syntactically valid or one or more elements in <PROPERTY-LIST> contains
undefined properties, the server MUST return WBEM_E_INVALID_QUERY.
See IWbemServices::ExecQuery (Opnum 20) (section 3.1.4.3.18) for more details on the processing
rules for WQL queries.
HRESULT ExecNotificationQuery(
[in] const BSTR strQueryLanguage,
[in] const BSTR strQuery,
[in] long lFlags,
[in] IWbemContext* pCtx,
[out] IEnumWbemClassObject** ppEnum
);
strQuery: MUST contain the WQL event-related query text as specified in section 2.2.1. This
parameter MUST NOT be NULL.
The server MUST allow any combination of zero or more flags from the following table and MUST
comply with all the restrictions in a flag description. Any other DWORD value that does not match
a flag condition MUST be treated as not valid.
Value Meaning
WBEM_FLAG_USE_AMENDED_QUALIFIERS If this bit is not set, the server SHOULD return no CIM
0x00020000 localizable information.
If this bit is set, the server SHOULD return CIM localizable
information for the CIM object, as specified in section
2.2.6.
WBEM_FLAG_RETURN_IMMEDIATELY If this bit is set, the server MUST make the method call
0x00000010 semisynchronously.
This flag MUST always be set.
pCtx: MUST be a pointer to an IWbemContext interface, which MUST contain additional information
that the client wants to pass to the server. If pCtx is NULL, the parameter MUST be ignored.
ppEnum: MUST receive the pointer to the IEnumWbemClassObject that is used to enumerate through
the CIM objects that are returned for the query result set. This parameter MUST NOT be NULL.
110 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Return Values: This method MUST return an HRESULT value that MUST indicate the status of the
method call. The server MUST return WBEM_S_NO_ERROR (as specified in section 2.2.11) to
indicate the successful completion of the method.
WBEM_S_NO_ERROR (0x00)
The security principal that makes the call MUST have WBEM_ENABLE and WBEM_REMOTE_ENABLE
accesses to the namespace; otherwise, WBEM_E_ACCESS_DENIED MUST be returned.
For each query in EventQueryList, the server MUST check whether the instance of a CIM class
passed as part of strQuery is a logical subset of the query.
If strQuery is evaluated successfully, the server MUST create an entry (row) in the EventBindingTable.
If strQuery includes a WITHIN clause, then the server MUST create an EventPollingTimer, set its
interval to the number of seconds specified in the WITHIN clause, and start the timer. If strQuery
includes a GROUP WITHIN clause, then the server MUST create an EventGroupingTimer and set
its interval to the number of seconds specified in the GROUP WITHIN clause. The server MUST set
ClientSecurityContext to RpcImpersonationAccessToken.Sids[UserIndex]). The server response to
out-of-range time intervals is implementation-dependent.<52>
If either WITHIN or GROUP WITHIN clause is specified, the server MUST query for the instances of the
underlying CIM class (for which the notifications are requested) in the strQuery and populate
EventBindingTable.PrevInstances with the list of instances.
The server MUST delete the row when the client releases all references to the IEnumWbemClassObject
Interface returned in ppEnum. If strQuery specified an EventPollingTimer, the server MUST also
cancel the timer. If strQuery specified an EventGroupingTimer, the server MUST also cancel the timer.
The server SHOULD enforce a maximum length for the strQuery parameter, and return
WBEM_E_QUOTA_VIOLATION if the limit is exceeded.<53>
If the FROM clause of strQuery represents a class that is not derived from __Event, the server MUST
return WBEM_E_NOT_EVENT_CLASS.
If the GROUP BY clause of strQuery does not have WITHIN specified, the server MUST return
WBEM_E_MISSING_GROUP_WITHIN.
If the GROUP BY clause of strQuery was used with aggregation that is not supported, the server MUST
return WBEM_E_MISSING_AGGREGATION_LIST.
If the GROUP BY clause of strQuery references an object that is an embedded object without using Dot
notation, the server MUST return WBEM_E_AGGREGATING_BY_OBJECT.
If WITHIN clause is not specified as part of strQuery that contains an intrinsic event class, the server
MUST return WBEM_E_REGISTRATION_TOO_PRECISE.
If the strQuery is not syntactically valid or one or more elements in <PROPERTY-LIST> contains
undefined properties, the server MUST return WBEM_E_INVALID_QUERY.
111 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
The failed method execution MUST set the value that is referenced by the output parameters to NULL
and MUST return an error in the format specified in section 2.2.11.
HRESULT ExecNotificationQueryAsync(
[in] const BSTR strQueryLanguage,
[in] const BSTR strQuery,
[in] long lFlags,
[in] IWbemContext* pCtx,
[in] IWbemObjectSink* pResponseHandler
);
strQuery: MUST contain the WQL event-related query text as specified in section 2.2.1. This
parameter MUST NOT be NULL.
The server MUST allow any combination of zero or more flags from the following table and MUST
comply with all the restrictions in a flag description. Any other DWORD value that does not match
a flag condition MUST be treated as not valid.
Value Meaning
WBEM_FLAG_USE_AMENDED_QUALIFIERS If this bit is not set, the server SHOULD return no CIM
0x00020000 localizable information.
If this bit is set, the server SHOULD return CIM localizable
information.
pCtx: MUST be a pointer to an IWbemContext interface, which MUST contain additional information
that the client wants to pass to the server. If pCtx is NULL, this parameter MUST be ignored.
Return Values: This method MUST return an HRESULT value that MUST indicate the status of the
method call. The server MUST return WBEM_S_NO_ERROR, as specified in section 2.2.11, to
indicate the successful completion of the method.
WBEM_S_NO_ERROR (0x00)
The security principal that makes the call MUST have WBEM_ENABLE and WBEM_REMOTE_ENABLE
accesses to the namespace; otherwise, WBEM_E_ACCESS_DENIED MUST be returned.
112 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
This method MUST fail if strQueryLanguage or strQuery does not exist.
The server SHOULD enforce a maximum length for the strQuery parameter and return
WBEM_E_QUOTA_VIOLATION if the limit is exceeded.<54>
Requirements mentioned in the parameter definitions are also checked before the asynchronous
operation is started.
If successful, the server MUST create a new entry in AsyncOperationTable as specified in section
3.1.1.1.3.
For each query in EventQueryList, the server MUST check whether the instance of a CIM class
passed as part of strQuery is a logical subset of the query.
If the FROM clause of strQuery represents a class that is not derived from __Event, the server MUST
return WBEM_E_NOT_EVENT_CLASS.
If the GROUP BY clause of strQuery does not have WITHIN specified, the server MUST return
WBEM_E_MISSING_GROUP_WITHIN.
If the GROUP BY clause of strQuery was used with aggregation that is not supported, the server MUST
return WBEM_E_MISSING_AGGREGATION_LIST.
If the GROUP BY clause of strQuery references an object that is an embedded object without using Dot
notation, the server MUST return WBEM_E_AGGREGATING_BY_OBJECT.
If WITHIN clause is not specified as part of strQuery that contains an intrinsic event class, the server
MUST return WBEM_E_REGISTRATION_TOO_PRECISE.
If the strQuery is not syntactically valid or one or more elements in <PROPERTY-LIST> contains
undefined properties, the server MUST return WBEM_E_INVALID_QUERY.
If method execution succeeds, the server MUST run the notification query until the query is canceled
or execution fails. The server MUST NOT call IWbemObjectSink::SetStatus to send success or
operation progress information. When query execution fails, the server MUST call
IWbemObjectSink::SetStatus to send the error to the client, and the server MUST release
IWbemObjectSink.
If the strQuery is evaluated successfully, the server MUST create an entry (row) in the
EventBindingTable. If strQuery includes a WITHIN clause, the server MUST create an
EventPollingTimer, set its interval to the number of seconds specified in the WITHIN clause, and
start the timer. If strQuery includes a GROUP WITHIN clause, then the server MUST create an
EventGroupingTimer and set its interval to the number of seconds specified in the GROUP WITHIN
clause. The server MUST set ClientSecurityContext to
RpcImpersonationAccessToken.Sids[UserIndex]. The server response to out-of-range time intervals is
implementation-dependent.<55>
113 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
If either WITHIN or GROUP WITHIN clause is specified, the server MUST query for the instances of the
underlying CIM class (for which the notifications are requested) in the strQuery and populate
EventBindingTable.PrevInstances with the list of instances.
The server MUST delete the row when the client cancels the query. If strQuery specified an
EventPollingTimer, the server MUST also cancel the timer. If strQuery specified an
EventGroupingTimer, the server MUST also cancel the timer.
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
);
strObjectPath: MUST be the CIM path to the class or instance that implements the method. This
parameter MUST NOT be NULL. The CIM path MUST contain the class name and the value of the
key properties.
strMethodName: MUST be the name of the method to be executed. This parameter MUST NOT be
NULL.
lFlags: Specifies the behavior of the IWbemServices::ExecMethod method. Flag behavior MUST be
interpreted as specified in the following table.
Value Meaning
WBEM_FLAG_RETURN_IMMEDIATELY If this bit is not set, the server MUST make the method call
0x00000010 synchronously.
If this bit is set, the server MUST make the method call
semisynchronously.
Any other DWORD value that does not match the preceding condition MUST be treated as invalid.
pCtx: MUST be a pointer to an IWbemContext interface, which MUST contain additional information
that the client wants to pass to the server. If pCtx is NULL, the parameter MUST be ignored.
ppOutParams: The output parameter MUST be filled according to the state of the lFlags parameter
(whether WBEM_FLAG_RETURN_IMMEDIATELY is set) as listed in the following table.
Failure
Flag state Success operation operation
114 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Failure
Flag state Success operation operation
ppCallResult: In this situation, the output parameter MUST be filled according to the state of the
lFlags parameter (whether WBEM_FLAG_RETURN_IMMEDIATELY is set) as listed in the following
table.
Failure
Condition Success operation operation
Return Values: This method MUST return an HRESULT, which MUST indicate the status of the
method call. HRESULT MUST have the type and values as specified in section 2.2.11. The server
MUST return WBEM_S_NO_ERROR (specified in section 2.2.11) to indicate the successful
completion of the method.
WBEM_S_NO_ERROR (0x00)
The security principal that makes the call MUST have WBEM_METHOD_EXECUTE and
WBEM_REMOTE_ENABLE accesses to the namespace; otherwise, WBEM_E_ACCESS_DENIED MUST be
returned.
115 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
If the strMethodName has "disabled" qualifier set to true, then the server MUST return
WBEM_E_METHOD_DISABLED. If the strMethodName is not implemented by the CIM class as pointed
by the strObjectPath, the server MUST return WBEM_E_METHOD_NOT_IMPLEMENTED.
The successful synchronous method execution MUST return the output parameters that are
encapsulated in an IWbemClassObject interface pointer in the ppObject parameter and MUST return
WBEM_S_NO_ERROR.
The semisynchronous method execution MUST follow the rules that are specified in section 3.1.1.1.2.
The failed method execution MUST set the output parameters to NULL and MUST return an error in the
format specified in section 2.2.11.
HRESULT ExecMethodAsync(
[in] const BSTR strObjectPath,
[in] const BSTR strMethodName,
[in] long lFlags,
[in] IWbemContext* pCtx,
[in] IWbemClassObject* pInParams,
[in] IWbemObjectSink* pResponseHandler
);
strObjectPath: MUST be the CIM path to the class or instance that implements the method. This
parameter MUST NOT be NULL. The CIM path MUST contain the class name and the value of the
key properties.
strMethodName: MUST be the name of the method to be executed. This parameter MUST NOT be
NULL.
lFlags: Specifies the behavior of the ExecMethodAsync method. Flag behavior MUST be interpreted as
specified in the following table.
Value Meaning
WBEM_FLAG_SEND_STATUS If this bit is not set, the server MUST make just one final
0x00000080 IWbemObjectSink::SetStatus call on the interface pointer that is
provided in the pResponseHandler parameter.
If this bit is set, the server MAY make intermediate
IWbemObjectSink::SetStatus calls on the interface pointer prior to call
completion.
Any other DWORD value that does not match the preceding condition MUST be treated as invalid.
pCtx: MUST be a pointer to an IWbemContext interface, which MUST contain additional information
that the client wants to pass to the server. If pCtx is NULL, the parameter MUST be ignored.
116 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Return Values: This method MUST return an HRESULT value that MUST indicate the status of the
method call. The server MUST return WBEM_S_NO_ERROR (as specified in section 2.2.11) to
indicate the successful completion of the method.
WBEM_S_NO_ERROR (0x00)
The security principal that makes the call MUST have WBEM_METHOD_EXECUTE,
WBEM_REMOTE_ENABLE, and WBEM_ENABLE accesses to the namespace; otherwise,
WBEM_E_ACCESS_DENIED MUST be returned.
Requirements mentioned in the parameter definitions are also checked before the asynchronous
operation is started.
If successful, the server MUST create a new entry in AsyncOperationTable as specified in section
3.1.1.1.3.
If the strMethodName has "disabled" qualifier set to true, then the server MUST return
WBEM_E_METHOD_DISABLED. If the strMethodName is not implemented by the CIM class as pointed
by the strObjectPath, the server MUST return WBEM_E_METHOD_NOT_IMPLEMENTED.
Method Description
Reset Causes the server to reset the enumeration sequence to the beginning of the collection of CIM
objects.
Opnum: 3
Next Causes the server to get one or more CIM objects starting at the current position in an enumeration,
and to move the current position by the number of CIM objects in the uCount parameter.
Opnum: 4
Clone Causes the server to make a logical copy of the entire enumerator.
Opnum: 6
Skip Causes the server to move the current position in an enumeration ahead by a specified number of
117 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Method Description
CIM objects.
Opnum: 7
The object that exports this interface MUST implement the IWbemFetchSmartEnum interface. The
IRemUnknown and IRemUnknown2 interfaces, as specified in [MS-DCOM], MUST be used to manage
the interfaces exposed by the object.
When the IEnumWbemClassObject::Reset method is invoked, the server MUST reset the enumeration
sequence to the beginning of the collection of CIM objects.
HRESULT Reset();
Return Values: This method MUST return an HRESULT value that MUST indicate the status of the
method call. The server MUST return WBEM_S_NO_ERROR (specified in section 2.2.11) to indicate
the successful completion of the method. If the IEnumWbemClassObject::Reset method is invoked
on an enumerator that does not support reset capability, the server MUST return
WBEM_E_INVALID_OPERATION.
WBEM_S_NO_ERROR (0x00)
118 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
The server MUST validate that the security principal that makes the call is the same as the
ClientSecurityContext of the SemiSinkResultSetObject pointed to by the entry in the
EnumWbemClassObjectTable; otherwise, WBEM_E_ACCESS_DENIED MUST be returned.
In response to the IEnumWbemClassObject::Reset method, the server MUST reset the status of the
enumeration (as specified in this section) if the enumerator is not created by using
WBEM_FLAG_FORWARD_ONLY by setting the CurrentIndex entry in EnumWbemClassObjectTable
to start the index of ResultArray.
A failed method execution MUST return an error in the format that is specified in section 2.2.11.
When the IEnumWbemClassObject::Next method is invoked, the server MUST get zero or more CIM
objects starting at the current position in an enumeration. The server MUST also move the current
position by the number of CIM objects in the uCount parameter. When IEnumWbemClassObject is
created, the current position MUST be set on the first CIM object of the collection. The order of the
CIM objects that are stored in the enumerator is arbitrary.
HRESULT Next(
[in] long lTimeout,
[in] ULONG uCount,
[out, size_is(uCount), length_is(*puReturned)]
IWbemClassObject** apObjects,
[out] ULONG* puReturned
);
puReturned: MUST be a pointer to a ULONG type that receives the number of CIM objects that are
returned. When sent by the client, this parameter MUST NOT be NULL. Upon return by the server,
this parameter value can be zero if a failure occurs or if there are no results.
Return Values: This method MUST return an HRESULT value that MUST indicate the status of the
method call. The server MUST return WBEM_S_NO_ERROR (specified in section 2.2.11) to indicate
the successful completion of the method.
WBEM_S_NO_ERROR (0x00)
The server MUST validate that the security principal that makes the call is the same as the
ClientSecurityContext of the SemiSinkResultSetObject pointed to by the entry in
EnumWbemClassObjectTable; otherwise, WBEM_E_ACCESS_DENIED MUST be returned.
119 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
In response to the IEnumWbemClassObject::Next method call, the server MUST evaluate the uCount
and lTimeout parameters (as specified in this section) and MUST return the requested number of CIM
objects, if any are available. The server MUST perform the operation within the time allowed by
lTimeout.
If the earlier semisynchronous operation is finished, and if the server does not have the requested
number of CIM objects, the server MUST return WBEM_S_FALSE with the available CIM objects;
otherwise, WBEM_S_NO_ERROR is returned with the requested number of CIM objects. The current
index position pointed to by the CurrentIndex entry in EnumWbemClassObjectTable MUST be
incremented with the number of CIM objects returned.
If the earlier semisynchronous operation is not finished and the server does not have the requested
number of CIM objects, the method MUST wait the amount of time in lTimeout for the operation to
finish or for the availability of the requested number of objects, whichever is earlier. The server MUST
fill the output parameters of the method as specified previously. If the number of the remaining CIM
objects to be given to the client is less than the number of requested CIM objects, the server MUST
return WBEM_S_TIMEDOUT; otherwise, WBEM_S_NO_ERROR is returned. The current index position
pointed to by the CurrentIndex entry in EnumWbemClassObjectTable MUST be incremented with
the number of CIM objects returned.
If the original semisynchronous operation fails, the server MUST return the error code that the
original method would have returned in its synchronous version.
The failed method execution MUST set the value that is referenced by the output parameters to NULL
and MUST return an error in the format that is specified in section 2.2.11.
HRESULT NextAsync(
[in] ULONG uCount,
[in] IWbemObjectSink* pSink
);
pSink: MUST be a pointer to the IWbemObjectSink interface, which MUST represent the sink to
receive the CIM object. As each batch of CIM objects is requested, they MUST be delivered to the
IWbemObjectSink::Indicate method to which pSink points (as specified in section 3.1.4.2.1) and
MUST be followed by a final call to the IWbemObjectSink::SetStatus method to which pSink
points, as specified in section 3.1.4.2.2. This parameter MUST NOT be NULL. In error cases,
indicated by the HRESULT return value, the supplied IWbemObjectSink interface pointer MUST
NOT be used by the server.
Return Values: This method MUST return an HRESULT value that MUST indicate the status of the
method call. The server MUST return WBEM_S_NO_ERROR (specified in section 2.2.11) to indicate
the successful completion of the method.
WBEM_S_NO_ERROR (0x00)
120 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
The server MUST validate that the security principal that makes the call is the same as the
ClientSecurityContext of the SemiSinkResultSetObject pointed to by the entry in the
EnumWbemClassObjectTable; otherwise, WBEM_E_ACCESS_DENIED MUST be returned.
The server MUST serialize execution of the IEnumWbemClassObject::Next call and asynchronous
execution of the IEnumWbemClassObject::NextAsync call, the IEnumWbemClassObject::Reset call,
and the IEnumWbemClassObject::Clone call.
The failed method execution MUST return an error in the format specified in section 2.2.11.
If the method succeeds, the server MUST wait asynchronously until either the
SemiSinkResultSetObject contains RemainingRequestCount objects starting at CurrentIndex,
or its OperationFinished flag is set to true, or the enumeration encounters an error. At that time:
If the enumeration encountered an error, the server MUST deliver the error to the client by calling
IWbemObjectSink::SetStatus.
If the enumeration finished with fewer than the requested number of objects, the server MUST
deliver them to the client by calling the IWbemObjectSink::Indicate method and then indicate
completion by calling IWbemObjectSink::SetStatus with status WBEM_S_FALSE.
Otherwise, the server MUST deliver RemainingRequestCount objects to the client by calling the
IWbemObjectSink::Indicate method and then indicate completion by calling
IWbemObjectSink::SetStatus with status WBEM_S_NO_ERROR.
The IEnumWbemClassObject::Clone method makes a logical copy of the entire enumerator. The
cloned enumerator MUST have the same current position as the source enumerator.
HRESULT Clone(
[out] IEnumWbemClassObject** ppEnum
);
ppEnum: Upon return, MUST contain a pointer to an IEnumWbemClassObject interface CIM object
that is a logical copy of the entire enumerator that made the Clone method call, retaining the
current position in an enumeration. This parameter MUST NOT be NULL. When returned by the
server, this parameter can be NULL if a failure occurred or if there are no results.
Return Values: This method MUST return an HRESULT value that MUST indicate the status of the
method call. The server MUST return WBEM_S_NO_ERROR (specified in section 2.2.11) to indicate
the successful completion of the method.
WBEM_S_NO_ERROR (0x00)
121 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
The server MUST validate that the security principal that makes the call is the same as the
ClientSecurityContext of the SemiSinkResultSetObject pointed to by the entry in
EnumWbemClassObjectTable; otherwise, WBEM_E_ACCESS_DENIED MUST be returned.
The successful method execution MUST fill the ppEnum parameter with an IEnumWbemClassObject
interface pointer, as specified in section 3.1.4.4, which MUST be a copy of the source enumerator
that retains the current position in an enumeration. The method MUST return WBEM_S_NO_ERROR.
If the original semisynchronous operation fails, the server MUST return the error code that the original
method would have returned in its synchronous version.
The failed method execution MUST return an error in the format that is specified in section 2.2.11.
When the IEnumWbemClassObject::Skip method is invoked, the server MUST move the current
position in an enumeration ahead by a specified number of CIM objects.
HRESULT Skip(
[in] long lTimeout,
[in] ULONG nCount
);
lTimeout: MUST be the maximum amount of time, in milliseconds, that the call to Skip allows to pass
before it times out. If the constant WBEM_INFINITE (0xFFFFFFFF) is used, the Skip method call
waits until the operation succeeds.
nCount: MUST be the number of CIM objects to skip in the enumeration. If this parameter is greater
than the number of CIM objects that remain to enumerate, the call MUST skip to the end of the
enumeration, and WBEM_S_FALSE MUST be the returned value for the method.
Return Values: This method MUST return an HRESULT value that MUST indicate the status of the
method call. The server MUST return WBEM_S_NO_ERROR (specified in section 2.2.11) to indicate
the successful completion of the method.
WBEM_S_NO_ERROR (0x00)
122 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
The server MUST validate that the security principal that makes the call is the same as the
ClientSecurityContext of the SemiSinkResultSetObject pointed to by the entry in
EnumWbemClassObjectTable; otherwise, WBEM_E_ACCESS_DENIED MUST be returned.
In response to the IEnumWbemClassObject::Skip method, the server MUST evaluate the uCount and
lTimeout parameters as specified in this section. The server MUST skip the requested number of CIM
objects from the result set. The server MUST complete the operation within the time allowed by
lTimeout. The requested number of CIM objects MUST start from the current index position. The
current index position in the enumeration MUST be incremented by the number of CIM objects
skipped.
If the earlier semisynchronous operation is finished and the server does not have the requested
number of CIM objects to skip, the server MUST return WBEM_S_FALSE by skipping the available CIM
objects; otherwise, the server MUST return WBEM_S_NO_ERROR by skipping the requested number of
CIM objects. The current index position pointed to by the CurrentIndex entry in
EnumWbemClassObjectTable MUST be incremented with the number of CIM objects skipped.
If the earlier semisynchronous operation is not finished and the server does not have the requested
number of CIM objects to skip, this method MUST wait for lTimeout, or for the operation to finish, or
for availability of the requested number of objects, whichever is earliest. If the number of the
remaining CIM objects to be skipped is less than the number requested, the server MUST return
WBEM_S_TIMEDOUT; otherwise, the server MUST return WBEM_S_NO_ERROR. The current index
position pointed to by the CurrentIndex entry in EnumWbemClassObjectTable MUST be
incremented with the number of CIM objects skipped.
If the original semisynchronous operation fails, the server MUST return the error code that the
original method would have returned in its synchronous version.
The failed method execution MUST return an error in the format that is specified in section 2.2.11.
The IWbemCallResult interface MUST be used to return call results from semisynchronous calls that
return a single CIM object. The interface MUST be implemented by the server. The interface MUST be
uniquely identified by UUID {44aca675-e8fc-11d0-a07c-00c04fb68820}.
Method Description
GetResultObject Causes the server to attempt to retrieve a CIM object from a previous semisynchronous call
to the IWbemServices::GetObject method or IWbemServices::ExecMethod method.
Opnum: 3
GetResultString Causes the server to return the assigned CIM path of a CIM instance that was created by
the IWbemServices::PutInstance method.
Opnum: 4
GetResultServices Causes the server to retrieve a pointer to the IWbemServices interface that results from a
semisynchronous call to the IWbemServices::OpenNamespace method.
Opnum: 5
GetCallStatus Causes the server to return the status of the current outstanding semisynchronous call.
Opnum: 6
123 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
When the IWbemCallResult::GetResultObject method is called, the server MUST attempt to retrieve a
CIM object from a previous semisynchronous operation call to the IWbemServices::GetObject
method or the IWbemServices::ExecMethod method. The entry in WbemCallResultTable with
WbemCallResultPointer pointing to IWbemCallResult is used to identify the previous
semisynchronous call.
HRESULT GetResultObject(
[in] long lTimeout,
[out] IWbemClassObject** ppResultObject
);
lTimeout: MUST be the maximum amount of time, in milliseconds, that the call to the
IWbemCallResult::GetResultObject method allows to pass before it times out. If the constant
WBEM_INFINITE (0xFFFFFFFF) is used, the GetResultObject method call MUST wait until the
operation succeeds. If this parameter is set to 0 and the result object is available at the time of
the method call, the object MUST be returned in ppResultObject and WBEM_S_NO_ERROR MUST
also be returned. If this parameter is set to 0 but the result object is not available at the time of
the method call, WBEM_S_TIMEDOUT MUST be returned.
ppResultObject: A pointer to a variable that receives a logical copy of the CIM object when the
semisynchronous operation is complete. A new CIM object MUST NOT be returned on error. When
sent by the client, this parameter value MUST NOT be NULL. Upon return by the server, this
parameter value can be NULL if there is a failure or if there are no results. The caller of this
method MUST call IWbemClassObject::Release on the returned object when the object is no
longer required.
Return Values: This method MUST return an HRESULT value that MUST indicate the status of the
method call. The server MUST return WBEM_S_NO_ERROR (specified in section 2.2.11) to indicate
the successful completion of the method.
WBEM_S_NO_ERROR (0x00)
The server MUST locate the entry in WbemCallResultTable with WbemCallResultPointer matching
IWbemCallResult.
In response to the IWbemCallResult::GetResultObject method, the server MUST wait for the operation
to finish by waiting up to lTimeout for OperationFinished to become TRUE for this operation entry in
WbemCallResultTable. If the operation is finished successfully in lTimeout time, the server MUST
return the CIM object in the ppResultObject parameter by making a logical copy of ResultObject. If
the operation is not finished in lTimeout time, the server MUST return WBEM_S_TIMEDOUT. The
method MUST fail if the method parameters are not valid, as specified earlier in this section, or if the
server is unable to execute the method.
The successful method execution MUST fill ppResultObject with an IWbemClassObject interface
pointer and MUST return WBEM_S_NO_ERROR.
If the operation is not finished in lTimeout time, this method MUST set the value referenced by the
output parameters to NULL and return WBEM_S_TIMEDOUT. The client is allowed to retry the
operation.
If the operation fails within lTimeout time, the server MUST set the value referenced by the output
parameters to NULL and return the error code that the original method would have returned in its
synchronous version in the format specified in section 2.2.11.
124 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
When the IWbemCallResult::GetResultString method is called, the server MUST return the assigned
CIM path of a CIM instance that was created by the IWbemServices::PutInstance method that
returned IWbemCallResult in the ppCallResult parameter.
HRESULT GetResultString(
[in] long lTimeout,
[out] BSTR* pstrResultString
);
lTimeout: MUST be a maximum amount of time, in milliseconds, that the call to GetResultString
allows to pass before timing out. If the constant WBEM_INFINITE (0xFFFFFFFF) is used, the
GetResultString method call MUST wait until the operation succeeds. This parameter MUST NOT be
NULL.
pstrResultString: MUST be a pointer to a BSTR value, which MUST contain the CIM path of the CIM
object instance, which MUST lead to the CIM instance that was created using
IWbemServices::PutInstance. In case of failure of the semisynchronous operation, the
returned string MUST be NULL. When sent by the client, this pointer parameter MUST NOT be
NULL. If the original operation does not return a string, the returned string MUST be NULL.
Return Values: This method MUST return an HRESULT value that MUST indicate the status of the
method call. The server MUST return WBEM_S_NO_ERROR (specified in section 2.2.11) to indicate
the successful completion of the method.
WBEM_S_NO_ERROR (0x00)
The server MUST locate the entry in WbemCallResultTable with WbemCallResultPointer matching
IWbemCallResult. The IWbemCallResult::GetResultString method MUST be called on the interface
obtained in responses to a previous call to a semisynchronous operation returning an IWbemCallResult
interface.
The successful method execution MUST fill pstrResultString with a string value of type BSTR and MUST
return WBEM_S_NO_ERROR.
The failed method execution sets the value referenced by the output parameters to NULL and MUST
return an error in the format specified in section 2.2.11. In case the operation is not completed after
lTimeout milliseconds, the server MUST return WBEM_S_TIMEDOUT and MUST allow for further retries
to be made.
When the IWbemCallResult::GetResultServices method is called, the server MUST retrieve a pointer to
the IWbemServices interface that results from a semisynchronous call to the
IWbemServices::OpenNamespace method.
125 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
HRESULT GetResultServices(
[in] long lTimeout,
[out] IWbemServices** ppServices
);
lTimeout: MUST be the time, in milliseconds, that the call to GetResultServices allows to pass before
timing out. If the constant WBEM_INFINITE (0xFFFFFFFF) is used, the Skip method call MUST wait
until the operation succeeds.
ppServices: MUST be a pointer to the IWbemServices interface that is requested by the original call
to IWbemServices::OpenNamespace when that interface becomes available. If the
semisynchronous operation fails, the returned parameter MUST be NULL. When sent by the
client, this pointer parameter MUST NOT be NULL. If the original operation does not return an
interface pointer, the returned parameter MUST be NULL.
Return Values: This method MUST return an HRESULT value that MUST indicate the status of the
method call. The server MUST return WBEM_S_NO_ERROR (specified in section 2.2.11) to indicate
the successful completion of the method.
WBEM_S_NO_ERROR (0x00)
The server MUST locate the entry in WbemCallResultTable with WbemCallResultPointer matching
IWbemCallResult. The IWbemCallResult::GetResultServices method MUST be called on the interface
that is obtained in response to a previous call to a semisynchronous operation that returns an
IWbemCallResult interface.
The successful method execution MUST fill the ppServices parameter with an IWbemServices
interface pointer and MUST return WBEM_S_NO_ERROR.
The failed method execution sets the value that is referenced by the output parameters to NULL and
MUST return an error in the format that is specified in section 2.2.11. If the operation does not
complete within lTimeout milliseconds, the server MUST return WBEM_S_TIMEDOUT and MUST allow
for further retries to be made.
When the IWbemCallResult::GetCallStatus method is invoked, the server MUST return the status of
the current outstanding semisynchronous call.
HRESULT GetCallStatus(
[in] long lTimeout,
[out] long* plStatus
);
126 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
lTimeout: MUST be the maximum amount of time, in milliseconds, that the call to GetCallStatus
allows to pass before timing out. If the constant WBEM_INFINITE (0xFFFFFFFF) is used, the Skip
method call waits until the operation succeeds.
plStatus: MUST be the status of a call to an IWbemServices method if the WBEM_S_NO_ERROR code
is returned for this method. When sent by the client, this parameter MUST NOT be NULL. Upon
return by the server, this parameter can be NULL if there is a failure or if there are no results.
Return Values: This method MUST return an HRESULT value that MUST indicate the status of the
method call. The server MUST return WBEM_S_NO_ERROR (specified in section 2.2.11) to indicate
the successful completion of the method.
WBEM_S_NO_ERROR (0x00)
The server MUST locate the entry in WbemCallResultTable with WbemCallResultPointer matching
IWbemCallResult.
In response to an IWbemCallResult::GetCallStatus method, the server MUST wait for the operation to
finish in lTimeout time. The operation is finished if OperationFinished becomes TRUE. If the
operation is not finished in lTimeout time, the server MUST return WBEM_S_TIMEDOUT. If the
operation is finished successfully in lTimeout time, the server MUST give the result of the FinalResult
operation in the plStatus parameter. The method MUST fail if the method parameters are not valid, as
specified earlier in this section, or if the server is unable to execute the method.
The successful method execution MUST fill plStatus with the operation status code of the
IWbemServices method operation and MUST return WBEM_S_NO_ERROR.
The failed method execution sets the value that is referenced by the output parameters to NULL and
MUST return an error in the format that is specified in section 2.2.11.
The IWbemFetchSmartEnum interface (an [MS-DCOM] interface) is a helper interface used to retrieve
a network-optimized enumerator interface. The server MUST fail the IRemUnknown::QueryInterface
operation if the interface is not implemented by the server.
The IWbemFetchSmartEnum is a DCOM Remote Protocol interface. The interface MUST be uniquely
identified by the UUID {1C1C45EE-4395-11d2-B60B-00104B703EFD}.
Method Description
127 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
HRESULT GetSmartEnum(
[out] IWbemWCOSmartEnum** ppSmartEnum
);
Return Values: This method MUST return an HRESULT value that MUST indicate the status of the
method call. The server MUST return WBEM_S_NO_ERROR (specified in section 2.2.11) to indicate
the successful completion of the method.
WBEM_S_NO_ERROR (0x00)
The server MUST locate the associated IEnumWbemClassObject interface pointer in the
EnumWbemClassObjectTable, and validate that the security principal that makes the call is the
same as the ClientSecurityContext of the SemiSinkResultSetObject pointed to by the entry in the
EnumWbemClassObjectTable; otherwise, WBEM_E_ACCESS_DENIED MUST be returned.
A successful execution MUST return the IWbemWCOSmartEnum interface in the output parameter and
MUST return WBEM_S_NO_ERROR.
The failed method execution MUST set the output parameters to NULL and MUST return an error in the
format specified in section 2.2.11.
Method Description
Next Returns an array of IWbemClassObject interface pointers that are encoded by using the ObjectArray
structure for optimization purposes.
Opnum: 3
HRESULT Next(
[in] REFGUID proxyGUID,
[in] long lTimeout,
[in] ULONG uCount,
[out] ULONG* puReturned,
128 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
[out] ULONG* pdwBuffSize,
[out, size_is(,*pdwBuffSize)] byte** pBuffer
);
proxyGUID: MUST be a client-generated GUID that MUST identify the client. This parameter MUST
NOT be NULL.
lTimeout: MUST be the maximum amount of time, in milliseconds, that the Next method call allows
to pass before it times out. If the constant WBEM_INFINITE (0xFFFFFFFF) is used, the Skip
method call waits until the operation succeeds. This parameter MUST NOT be NULL.
uCount: MUST be the number of requested CIM objects. This parameter MUST NOT be NULL.
puReturned: MUST be a pointer to a ULONG value that MUST contain the number of CIM objects that
are returned by the Next method. This parameter MUST NOT be NULL.
pdwBuffSize: MUST be a pointer to a ULONG value that MUST contain the buffer size, in bytes. This
parameter MUST NOT be NULL.
pBuffer: MUST be a pointer to the byte array that MUST represent the packet. This parameter MUST
NOT be NULL. The byte array represents an array of CIM objects that are encoded by using the
ObjectArray format as specified in section 2.2.14. When returned by the server, this parameter
can be NULL if a failure occurs or if there are no results to return.
Return Values: This method MUST return an HRESULT value that MUST indicate the status of the
method call. The server MUST return WBEM_S_NO_ERROR (specified in section 2.2.11) to indicate
the successful completion of the method.
If a failure occurs, the server MUST return an HRESULT whose S (severity) bit is set as specified in
[MS-ERREF] section 2.1. The actual HRESULT value is implementation dependent.
WBEM_S_NO_ERROR (0x00)
The server MUST locate the associated IEnumWbemClassObject interface pointer in the
EnumWbemClassObjectTable, and validate that the security principal that makes the call is the
same as the ClientSecurityContext of the SemiSinkResultSetObject pointed to by the entry in the
EnumWbemClassObjectTable; otherwise, WBEM_E_ACCESS_DENIED MUST be returned.
In response to IWbemWCOSmartEnum::Next, the server MUST evaluate the lTimeout parameter (as
specified in this section) and MUST evaluate the GUID in order to identify the client. The server MUST
return the maximum number of CIM objects that are requested by uCount.
If the server is unable to return all the requested CIM objects in the requested amount of time, it
MUST return WBEM_S_TIMEDOUT. The requested number of CIM objects MUST start from the current
index position. The current index position in the enumeration MUST be incremented by the number of
returned CIM objects.
On success, the server MUST return data in the pBuffer by using an ObjectArray structure as specified
in section 2.2.14.
The successful method execution MUST return WBEM_S_NO_ERROR. If the number of remaining CIM
objects to be retrieved is less than the number of requested CIM objects, the server MUST return
WBEM_S_FALSE. Regardless, the server MUST fill the output parameters of the method as specified in
section 2.2.14.
129 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
3.1.4.8 IWbemLoginClientID Interface
Method Description
SetClientInfo Passes the client NETBIOS name and a unique client generated number to the server.
Opnum: 3
The IWbemLoginClientID::SetClientInfo method MUST pass the client NETBIOS name and a unique
client-generated number to the server.
HRESULT SetClientInfo(
[in, unique, string] LPWSTR wszClientMachine,
[in] long lClientProcId,
[in] long lReserved
);
wszClientMachine: MUST specify the client NETBIOS name. This parameter MUST NOT be NULL.
lClientProcId: Specifies a client-generated number. The server MAY use this for logging
purposes.<56>
lReserved: This parameter is not used, and its value MUST be NULL.
Return Values: This method MUST return an HRESULT value that MUST indicate the status of the
method call. The server MUST return WBEM_S_NO_ERROR (specified in section 2.2.11) to indicate
the successful completion of the method.
In case of failure, the server MUST return an HRESULT whose S (severity) bit is set as specified in
[MS-ERREF] section 2.1. The actual HRESULT value is implementation dependent.
WBEM_S_NO_ERROR (0x00)
The server MUST fail the IRemUnknown::QueryInterface operation if the interface is not implemented
by the server. This interface is not required for the protocol to work.
Method Description
SetEvent Signals an event on the server with name that MUST be specified as a parameter of the method.
Opnum: 3
130 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
3.1.4.9.1 IWbemLoginHelper::SetEvent (Opnum 3)
HRESULT SetEvent(
[in] LPCSTR sEventToSet
);
sEventToSet: MUST contain the name of the event to be signaled. This parameter MUST NOT be
NULL.
Return Values: This method MUST return an HRESULT value that MUST indicate the status of the
method call. The server MUST return WBEM_S_NO_ERROR (specified in section 2.2.11) to indicate
the successful completion of the method.
If the method fails, the server MUST return an HRESULT whose S (severity) bit is set as specified
in [MS-ERREF] section 2.1. The actual HRESULT value is implementation dependent.
WBEM_S_NO_ERROR (0x00)
The IWbemBackupRestore interface exposes methods that back up and restore the contents of the
CIM database. The interface MUST be implemented by the server to support backup/restore
scenarios. The interface MUST be uniquely identified by UUID {C49E32C7-BC8B-11d2-85D4-
00105A1F8304}.
Method Description
Backup Causes the server to back up the contents of the CIM database.
Opnum: 3
Restore Causes the server to restore the contents of the CIM database.
Opnum: 4
The object exporting this interface MUST also implement the IWbemBackupRestoreEx interface. The
IRemUnknown and IRemUnknown2 interfaces, as specified in [MS-DCOM], MUST be used to manage
the interfaces exposed by the object. The object MUST be uniquely identified with CLSID {C49E32C6-
BC8B-11D2-85D4-00105A1F8304}.
131 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Figure 7: The IWbemBackupRestore interface
On the IWbemBackupRestore::Backup method invocation, the server MUST back up the contents of
the CIM database.
HRESULT Backup(
[in, string] LPCWSTR strBackupToFile,
[in] long lFlags
);
strBackupToFile: MUST be a UTF-16 string, which MUST contain the name of the file to which the
CIM database is backed up. This parameter MUST NOT<58> be NULL.
lFlags: This parameter is not used, and its value MUST be 0x0.
Return Values: This method MUST return an HRESULT value that MUST indicate the status of the
method call. The server MUST return WBEM_S_NO_ERROR (specified in section 2.2.11) to indicate
the successful completion of the method.
In case of failure, the server MUST return an HRESULT whose S (severity) bit is set as specified in
[MS-ERREF] section 2.1. The actual HRESULT value is implementation dependent.
WBEM_S_NO_ERROR (0x00)
The IWbemBackupRestore::Backup method MUST be called on the interface that is obtained from the
DCOM Remote Protocol activation of a CLSID_WbemBackupRestore interface, as specified in this
section.
132 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
The Backup operation MUST NOT impact the state of the incoming calls. After the Backup operation is
complete, the server MUST set the BackupInProgress flag to False.
On the IWbemBackupRestore::Restore method invocation, the server MUST restore the contents of
the CIM database.
HRESULT Restore(
[in, string] LPCWSTR strRestoreFromFile,
[in] long lFlags
);
strRestoreFromFile: MUST be a UTF-16 string that MUST contain the name of the file from which to
restore the CIM database. This parameter MUST NOT<60> be NULL.
lFlags: Flags that affect the behavior of the Restore method. The flags' behavior MUST be interpreted
as specified in the following table.
Value Meaning
WBEM_FLAG_BACKUP_RESTORE_FORCE_SHUTDOWN If the bit is not set and if there are any active
0x00000001 clients, the server MUST NOT perform the
restore.
If the bit is set, the server MUST shut down
any active clients before performing the
restore operation.
Return Values: This method MUST return an HRESULT value that MUST indicate the status of the
method call. The server MUST return WBEM_S_NO_ERROR (specified in section 2.2.11) to indicate
the successful completion of the method.
In case of failure, the server MUST return an HRESULT whose S (severity) bit is set as specified in
[MS-ERREF] section 2.1. The actual HRESULT value is implementation dependent.
WBEM_S_NO_ERROR (0x00)
After the Restore operation is complete, the server MUST reset the RestoreInProgress flag to False.
133 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
CIM database. The interface MUST be implemented in order to support backup/restore scenarios
without stopping the server. The server SHOULD support this interface.<62>
The IWbemBackupRestoreEx interface is a DCOM Remote Protocol interface (as specified in [MS-
DCOM]). The interface MUST be uniquely identified by UUID {A359DEC5-E813-4834-8A2A-
BA7F1D777D76}.
Method Description
Pause Causes the server to lock the CIM database in a consistent state while it is copied.
Opnum: 5
Resume Causes the server to unlock the CIM database and resume operations.
Opnum: 6
On the IWbemBackupRestoreEx::Pause method invocation, the server MUST set the IsServerPaused
flag to True and MUST persist the CIM database in a consistent state.
HRESULT Pause();
Return Values: This method MUST return an HRESULT value that MUST indicate the status of the
method call. The server MUST return WBEM_S_NO_ERROR (specified in section 2.2.11) to indicate
the successful completion of the method.
If Pause is called and the IsServerPaused flag is set to True, the server MUST return
WBEM_E_INVALID_OPERATION. In case of any other failure, the server MUST return an HRESULT
whose S (severity) bit is set as specified in [MS-ERREF] section 2.1. The actual HRESULT value is
implementation dependent.
WBEM_S_NO_ERROR (0x00)
The IWbemBackupRestoreEx::Pause method MUST be called on the interface that is obtained from the
DCOM Remote Protocol activation of the CLSID_WbemBackupRestore interface, as specified in this
section.
The server MUST NOT reset the backup timer if Pause is called multiple times while the
IsServerPaused flag is set to True.
HRESULT Resume();
134 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Return Values: This method MUST return an HRESULT value that MUST indicate the status of the
method call. The server MUST return a WBEM_S_NO_ERROR (specified in section 2.2.11) to
indicate the successful completion of the method.
If Resume is called and the IsServerPaused flag is set to False, the server MUST return
WBEM_E_INVALID_OPERATION.
In case of any other failure, the server MUST return an HRESULT whose S (severity) bit is set as
specified in [MS-ERREF] section 2.1. The actual HRESULT value is implementation dependent.
WBEM_S_NO_ERROR (0x00)
The IWbemRefreshingServices interface requires multiple calls to set up the remote refresher;
however, after the remote refresher is set up, obtaining updates requires only a single call. The
IWbemRefreshingServices interface provides a faster CIM instance refreshing service when updated
data on CIM instances have to be retrieved multiple times.
Method Description
AddObjectToRefresherByTemplate Adds a CIM instance that is identified by its CIM object instance, to the list
of CIM objects to be refreshed.
Opnum: 4
AddEnumToRefresher Adds all CIM instances of the CIM class name to the list of CIM objects to
be refreshed.
Opnum: 5
RemoveObjectFromRefresher Removes a CIM instance from the list of CIM instances to be refreshed.
Opnum: 6
HRESULT AddObjectToRefresher(
[in] _WBEM_REFRESHER_ID* pRefresherId,
135 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
[in, string] LPCWSTR wszPath,
[in] long lFlags,
[in] IWbemContext* pContext,
[in] DWORD dwClientRefrVersion,
[out] _WBEM_REFRESH_INFO* pInfo,
[out] DWORD* pdwSvrRefrVersion
);
wszPath: MUST be a string that MUST contain the CIM path of the CIM instance. This parameter
MUST NOT be NULL.
lFlags: This parameter is not used, and its value SHOULD be 0x0.
pContext: MUST be a pointer to an IWbemContext interface object, which MUST contain additional
information for the server refresher. If pContext is NULL, the parameter MUST be ignored.
dwClientRefrVersion: MUST be the version of the client refresher. This value SHOULD<64> be 0x2.
The server MUST allow all client versions.
pdwSvrRefrVersion: MUST be an output parameter that MUST be the version of the server
refresher. The value of this parameter SHOULD be 0x1.
Return Values: This method MUST return an HRESULT value that MUST indicate the status of the
method call. The server MUST return WBEM_S_NO_ERROR (specified in section 2.2.11) to indicate
the successful completion of the method.
WBEM_S_NO_ERROR (0x00)
The security principal that makes the call MUST have WBEM_REMOTE_ENABLE and WBEM_ENABLE
accesses to the namespace; otherwise, WBEM_E_ACCESS_DENIED MUST be returned.
The server MUST locate the InstanceProviderId for the instance in wszPath using the algorithm in
section 3.1.4. If InstanceProviderId is not empty and the provider's SupportsRefresher field is
TRUE, the server MUST return the _WBEM_REFRESH_INFO structure that has an m_lType that is
set to _WBEM_REFRESH_INFO_REMOTE, otherwise returning one with m_lType set to
_WBEM_REFRESH_TYPE_NON_HIPERF.
136 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
In case of failure, the server MUST fill in the _WBEM_REFRESH_INFO structure with 0x0, set its
m_lType member to WBEM_REFRESH_TYPE_INVALID, and return an HRESULT error in the format
that is specified in section 2.2.11.
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
);
lFlags: This parameter is not used, and its value SHOULD be 0x0.
pContext: MUST be a pointer to an IWbemContext interface object, which MUST contain additional
information for the server refresher. If pContext is NULL, the parameter MUST be ignored.
dwClientRefrVersion: MUST be the version of the client refresher. This value SHOULD<65> be 0x2.
The server MUST allow all client versions.
pdwSvrRefrVersion: MUST be an output parameter that MUST be the version of the server
refresher. The value of this parameter SHOULD be 0x1.
Return Values: This method MUST return an HRESULT value that MUST indicate the status of the
method call. The server MUST return WBEM_S_NO_ERROR (specified in section 2.2.11) to indicate
the successful completion of the method.
WBEM_S_NO_ERROR (0x00)
The security principal that makes the call MUST have WBEM_REMOTE_ENABLE and WBEM_ENABLE
accesses to the namespace; otherwise, WBEM_E_ACCESS_DENIED MUST be returned.
137 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
A successful call to IWbemRefreshingServices::AddObjectToRefresherByTemplate MUST return
WBEM_S_NO_ERROR and MUST fill the output _WBEM_REFRESH_INFO structure, as specified in this
section.
The server MUST locate the InstanceProviderId for the instance in wszPath using the algorithm in
section 3.1.4. If InstanceProviderId is not empty and the provider's SupportsRefresher field is
TRUE, the server MUST return the _WBEM_REFRESH_INFO structure that has an m_lType set to
_WBEM_REFRESH_INFO_REMOTE, otherwise returning one with m_lType set to
__WBEM_REFRESH_TYPE_NON_HIPERF.
If the server sets m_lType to _WBEM_REFRESH_TYPE_NON_HIPERF, the server MUST return the
_WBEM_REFRESH_TYPE_NON_HIPERF structure as part of _WBEM_REFRESH_INFO.
In case of failure, the server MUST fill in the _WBEM_REFRESH_INFO parameter with 0x0, set its
m_lType member to WBEM_REFRESH_TYPE_INVALID, and return an error in the format that is
specified in section 2.2.11.
The IWbemRefreshingServices::AddEnumToRefresher method MUST add all CIM instances that are
identified by the CIM class name to the list of CIM instances to be refreshed.
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
);
wszClass: MUST be a string that MUST contain the enumeration CIM class name. This parameter
MUST NOT be NULL.
lFlags: This parameter is not used, and its value SHOULD be 0x0.
pContext: MUST be a pointer to an IWbemContext interface object, which MUST contain additional
information for the server refresher. If pContext is NULL, the parameter is ignored.
dwClientRefrVersion: MUST be the version of the client refresher. This value SHOULD<66> be 0x2.
The server MUST allow all client versions.
pdwSvrRefrVersion: MUST be an output parameter, which MUST be the version of the server
refresher. The value of this parameter SHOULD be 0x1.
138 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Return Values: This method MUST return an HRESULT value that MUST indicate the status of the
method call. The server MUST return WBEM_S_NO_ERROR (specified in section 2.2.11) to indicate
the successful completion of the method.
WBEM_S_NO_ERROR (0x00)
The security principal that makes the call MUST have WBEM_REMOTE_ENABLE and WBEM_ENABLE
accesses to the namespace; otherwise, WBEM_E_ACCESS_DENIED MUST be returned.
This method MUST add all instances of a class, instead of a single instance of a class, as is the case for
the IWbemRefreshingServices::AddObjectToRefresher and
IWbemRefreshingServices::AddObjectToRefresherByTemplate methods.
The server MUST locate the InstanceProviderId for the class in wszPath using the algorithm in
section 3.1.4. If InstanceProviderId is not empty and the provider's SupportsRefresher field is
TRUE, the server MUST return the _WBEM_REFRESH_INFO structure that has an m_lType that is
set to _WBEM_REFRESH_INFO_REMOTE, otherwise returning one with m_lType set to
_WBEM_REFRESH_TYPE_NON_HIPERF.
If the server sets m_lType to _WBEM_REFRESH_TYPE_NON_HIPERF, the server MUST return the
_WBEM_REFRESH_TYPE_NON_HIPERF structure as part of _WBEM_REFRESH_INFO.
In case of failure, the server MUST fill in the _WBEM_REFRESH_INFO structure with 0x0, set m_lType
to WBEM_REFRESH_TYPE_INVALID, and return an error in the format that is specified in section
2.2.11.
HRESULT RemoveObjectFromRefresher(
[in] _WBEM_REFRESHER_ID* pRefresherId,
[in] long lId,
[in] long lFlags,
[in] DWORD dwClientRefrVersion,
[out] DWORD* pdwSvrRefrVersion
);
lId: This parameter MUST be an identifier to the object that is being removed. This parameter MUST
NOT be NULL.
lFlags: This parameter is not used, and its value SHOULD be 0x0.
139 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
dwClientRefrVersion: MUST be the version of the client refresher. This value SHOULD<67> be 0x2.
The server MUST allow all client versions.
pdwSvrRefrVersion: MUST be an output parameter, which MUST be the version of the server
refresher. This value SHOULD be 0x1.
Return Values: This method MUST return an HRESULT value that MUST indicate the status of the
method call. If there are no failures, the server MUST always return
WBEM_E_NOT_AVAILABLE.<68>
WBEM_E_NOT_AVAILABLE (0x80041009)
In case of failure, the server MUST set pdwSvrRefrVersion to 1 and MUST return an error in the
format specified in section 2.2.11.
HRESULT GetRemoteRefresher(
[in] _WBEM_REFRESHER_ID* pRefresherId,
[in] long lFlags,
[in] DWORD dwClientRefrVersion,
[out] IWbemRemoteRefresher** ppRemRefresher,
[out] GUID* pGuid,
[out] DWORD* pdwSvrRefrVersion
);
lFlags: This parameter is not used, and its value SHOULD be 0x0.
dwClientRefrVersion: MUST be the version of the client refresher. This value SHOULD<69> be 0x2.
The server MUST allow all client versions.
pGuid: MUST be an output parameter that MUST be a pointer to a GUID value that MUST identify the
returned refresher object. This parameter MUST NOT be NULL.
pdwSvrRefrVersion: MUST be an output parameter that MUST be the version of the server
refresher. The value of this parameter SHOULD be 0x1.
Return Values: This method MUST return an HRESULT value that MUST indicate the status of the
method call. The server MUST return WBEM_S_NO_ERROR (specified in section 2.2.11) to indicate
the successful completion of the method.
In case of failure, the server MUST return an HRESULT whose S (severity) bit is set as specified in
[MS-ERREF] section 2.1. The actual HRESULT value is implementation dependent.
WBEM_S_NO_ERROR (0x00)
140 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
The security principal that makes the call MUST have WBEM_REMOTE_ENABLE and WBEM_ENABLE
accesses to the namespace; otherwise, WBEM_E_ACCESS_DENIED MUST be returned.
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
);
lFlags: This parameter is not used, and its value SHOULD be 0x0.
lNumObjects: MUST be the number of CIM instances that are contained in the apReconnectInfo
array.
dwClientRefrVersion: MUST be the version of the client refresher. This value SHOULD<70> be 0x2.
The server MUST allow all client versions.
pdwSvrRefrVersion: MUST be an output parameter that is the version of the server refresher. This
value SHOULD be 0x1.
Return Values: This method MUST return an HRESULT value that MUST indicate the status of the
method call. The server MUST return WBEM_S_NO_ERROR, as specified in section 2.2.11, to
indicate the successful completion of the method.
141 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
WBEM_S_NO_ERROR (0x00)
The security principal that makes the call MUST have WBEM_REMOTE_ENABLE and WBEM_ENABLE
accesses to the namespace; otherwise, WBEM_E_ACCESS_DENIED MUST be returned.
If one of the CIM objects cannot be reconnected, the apReconnectResults element that corresponds to
apReconnectInfo MUST be set with an HRESULT return code.
In case of failure, the server MUST return an HRESULT value that indicates the status of the method
call. If the failure is due to a class that no longer exists, the server MUST return a
WBEM_E_INVALID_CLASS HRESULT value. If the failure is due to an instance that no longer exists,
the server MUST return a WBEM_E_NOT_FOUND HRESULT value.
Each array element MUST contain a refresher CIM object identifier (the m_lId member of
_WBEM_RECONNECT_RESULTS) that can be used to cancel the object. The m_lId member MUST be a
unique identifier for the refresher object that is used to cancel the refreshing object when the
refresher object is using IWbemRemoteRefresher::StopRefreshing.
Method Description
RemoteRefresh Retrieves the updated set of CIM instances and enumerations configured by an
IWbemRefreshingServices interface pointer.
Opnum: 3
Opnum5NotUsedOnWire This method is reserved for local use and is not used remotely.
Opnum: 5
HRESULT RemoteRefresh(
[in] long lFlags,
[out] long* plNumObjects,
142 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
[out, size_is(,*plNumObjects)] WBEM_REFRESHED_OBJECT** paObjects
);
lFlags: This parameter is not used, and its value MUST be 0x0.
plNumObjects: If successful, plNumObjects MUST be a pointer to the number of CIM instances and
enumerations that the method returns. It MUST NOT be NULL.
Return Values: This method MUST return an HRESULT value that MUST indicate the status of the
method call.
The server MUST return WBEM_S_NO_ERROR (specified in section 2.2.11) to indicate the
successful completion of the method.
WBEM_S_NO_ERROR (0x00)
HRESULT StopRefreshing(
[in] long lNumIds,
[in, size_is(lNumIds)] long* aplIds,
[in] long lFlags
);
lNumIds: MUST be the number of identifiers in the array of object identifiers in the aplIds parameter.
aplIds: MUST be an array of object identifiers that MUST identify the CIM instances and
enumerations to stop refreshing. The object identifier is the m_lCancelId member from the
_WBEM_REFRESH_INFO structure that is specified in section 2.2.20 and MUST be obtained from a
previous call to the IWbemRefreshingServices::AddObjectToRefresher,
IWbemRefreshingServices::AddObjectToRefresherByTemplate, or
IWbemRefreshingServices::AddEnumToRefresher method specified in section 3.1.4.12.
lFlags: This parameter is not used, and its value MUST be 0x0.
143 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Return Values: This method MUST return an HRESULT value that MUST indicate the status of the
method call. In case of success, the server MUST return WBEM_S_NO_ERROR (as specified in
section 2.2.11) to indicate the successful completion of the method.
WBEM_S_NO_ERROR (0x00)
In case of failure the server MUST return an error in the format specified in section 2.2.11.
HRESULT Opnum5NotUsedOnWire(
[in] long lFlags,
[out] GUID* pGuid
);
lFlags: This parameter is not used, and its value MUST be 0x0.
pGuid: MUST be an output parameter, which MUST be a pointer to a GUID value that MUST identify
the server object. This parameter MUST NOT be NULL.<72>
Return Values: This method MUST return an HRESULT value that MUST indicate the status of the
method call. The server MUST return WBEM_S_NO_ERROR (specified in section 2.2.11) to indicate
the successful completion of the method.
In case of failure, the server MUST return an HRESULT whose S (severity) bit is set as specified in
[MS-ERREF] section 2.1. The actual HRESULT value is implementation dependent.
The IwbemShutdown interface allows the server to notify its subsystems of an impending shutdown.
The interface MUST be uniquely identified by the UUID {F309AD18-D86A-11d0-A075-
00C04FB68820}.
Method Description
Shutdown The objects that export this interface MUST be uniquely identified with the CLSID {73E709EA-5D93-
4B2E-BBB0-99B7938DA9E4} or CLSID {1F87137D-0E7C-44d5-8C73-4EFFB68962F2}.
Opnum: 3
144 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Figure 8: The IWbemShutdown interface
The IWbemShutdown::Shutdown method does not perform any action when called by a remote client.
HRESULT Shutdown(
[in] long reserved1,
[in] ulong reserved2,
[in] IWbemContext* Reserved3
);
Reserved3: MUST be set to NULL when sent and MUST be ignored on receipt.
Return Values: This method MUST return 0x800706ba RPC Server Unavailable.
The IUnsecuredApartment interface allows a local client to register a callback for asynchronous remote
operations. The interface MUST be uniquely identified by the UUID {1cfaba8c-1523-11d1-ad79-
00c04fd8fdff}.
Method Description
CreateObjectStub The objects that export this interface MUST be uniquely identified with the CLSID
{49bd2028-1523-11d1-ad79-00c04fd8fdff}
Opnum: 3
145 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Figure 9: The IUnsecuredApartment interface
The IUnsecuredApartment::CreateObjectStub method does not perform any action and returns
E_UNEXPECTED when called by a remote client.
HRESULT CreateObjectStub(
[in] IUnknown* reserved1,
[out] IUnknown* reserved2
);
reserved1: MUST be set to NULL when sent and MUST be ignored on receipt.
reserved2: MUST be set to NULL when sent and MUST be ignored on receipt.
Return Values: This method MUST return E_UNEXPECTED as specified in [MS-ERREF] section 2.1.
The IWbemUnsecuredApartment interface allows a local client to register a callback for asynchronous
remote operations. The interface MUST be uniquely identified by the UUID {31739d04-3471-4cf4-
9a7c-57a44ae71956}.
Method Description
CreateSinkStub The objects that export this interface MUST be uniquely identified with the CLSID {49bd2028-
1523-11d1-ad79-00c04fd8fdff}.
Opnum: 3
146 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Figure 10: The IWbemUnsecuredApartment interface
The IWbemUnsecuredApartment::CreateSinkStub method does not perform any action when called by
a remote client.
HRESULT CreateSinkStub(
[in] IWbemObjectSink* reserved1,
[in] dword reserved2,
[in, unique] LPCWSTR reserved3,
[out] IWbemObjectSink** reserved4
);
reserved1: MUST be set to NULL when sent and MUST be ignored on receipt.
reserved3: MUST be set to NULL when sent and MUST be ignored on receipt.
reserved4: MUST be set to NULL when sent and MUST be ignored on receipt.
Return Values: This method MUST return E_UNEXPECTED as specified in [MS-ERREF] section 2.1.
Below are the details of the interface used between CIM server and the providers. The server uses
ProviderEntryPoint stored in ProviderTable for the given provider for performing any operation below.
For sending indications or events to the server, the provider MUST trigger 3.1.6.1.
The server MUST perform the following two processing rules for each invocation of each of the
methods listed below in this section:
Prior to the invocation, the server MUST impersonate the client (the security principal of the caller)
by invoking the abstract interface RpcImpersonateClient as specified in [MS-RPCE] section
3.3.3.4.3.2, passing in NULL as the BindingHandle parameter.
Following invocation, the server MUST stop impersonating the client prior to returning a status
code by invoking the abstract interface RpcRevertToSelf as specified in [MS-RPCE] section
3.3.3.4.3.3.
147 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
The provider is expected to use those credentials with IMPERSONATE level impersonation for any
necessary local access checks and remote network operations.
The server communicates asynchronously with the provider. The server creates the
IWbemObjectSink object and passes a pointer to the IWbemObjectSink object to each of the
provider operations through which the provider communicates the results back to the server. The
server then forwards the results to the client. The server deletes the IWbemObjectSink object after
receiving the status of the operation from the provider, or after calling the Cancel operation on the
provider if the client canceled the operation.
The WMI v2 provider SHOULD<73> query the WMI server for data locale for each invocation of the
method on the provider. The provider SHOULD use this locale for formatting decimals in string format
and for representing time and date in string format.
The WMI v2 provider SHOULD<74> query the WMI server for the UI locale for each invocation of the
method on the provider. The provider SHOULD use this locale when providing string output.
The server passes Class name and a pointer to the IWbemObjectSink object. The provider
communicates the instances through the IWbemObjectSink::Indicate method. After all the
instances are returned or if there is a failure encountered, the provider sends the final status using
IWbemObjectSink::SetStatus method.
The server passes Class name and a pointer to the IWbemObjectSink object. The provider
communicates the subclasses through the IWbemObjectSink::Indicate method. After all the
subclasses are returned or if there is a failure encountered, the provider sends the final status using
IWbemObjectSink::SetStatus method.
The server passes class name, the key property values through the IWbemClassObject instance,
and a pointer to the IWbemObjectSink object to the provider. The provider returns the
IWbemClassObject instance containing the nonkey properties for the given instance through the
IWbemObjectSink::Indicate method. The provider returns WBEM_E_NOT_FOUND through the
IWbemObjectSink::SetStatus method if the instance referred by the key properties is not found.
On success, the provider sends the final status info using the IWbemObjectSink::SetStatus
method.
The server passes the class name and a pointer to an IWbemObjectSink object to the provider. The
provider returns the class metadata through the IWbemClassObject instance containing the
metadata of the given class, through the IWbemObjectSink::Indicate method. The provider returns
WBEM_E_NOT_FOUND through the IWbemObjectSink::SetStatus method if the class is not found.
On success, the provider sends the final status using the IWbemObjectSink::SetStatus method.
The server passes Class name, instance information through the IWbemClassObject instance, and a
pointer to the IWbemObjectSink object to the provider. The provider applies the changes to the
managed object and returns success or failure to the server through IWbemObjectSink::SetStatus.
148 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
The server passes Class name, updated class metadata through the IWbemClassObject instance,
and a pointer to the IWbemObjectSink object to the provider. The provider applies the changes to
the managed object and returns success or failure to the server through
IWbemObjectSink::SetStatus.
The server passes Class name, instance information through the IWbemClassObject instance, and a
pointer to the IWbemObjectSink object to the provider. The provider applies the changes to the
managed object and returns success or failure to the server through
IWbemObjectSink::SetStatus.
The server passes Class name, class metadata through the IWbemClassObject instance, and a
pointer to IWbemObjectSink object to the provider. The provider applies the changes to the
managed object and returns success or failure to the server through
IWbemObjectSink::SetStatus.
The server passes class name, instance information through the IWbemClassObject instance, and a
pointer to the IWbemObjectSink object to the provider. The provider applies the changes to the
managed object and returns success or failure to the server through
IWbemObjectSink::SetStatus.
The server passes Class name, class metadata through the IWbemClassObject instance, and a
pointer to the IWbemObjectSink object to the provider. The provider applies the changes to the
managed object and returns success or failure to the server through
IWbemObjectSink::SetStatus.
The server passes Class name, method name, input parameters to the method through the
IWbemClassObject instances, and a pointer to the IWbemObjectSink object to the provider. Upon
success, the provider returns output parameter values as IWbemClassObject instances, and a
method result (success/failure) to the server through the IWbemObjectSink::Indicate method.
Note If for a method parameter, the qualifier< IN>/<IN,OUT>/<OUT> is not specified, the server
SHOULD<75> consider the parameter as IN,OUT.
The server passes the pointer to the IWbemObjectSink object to the provider. The provider cancels
the pending operation corresponding to the given IWbemObjectSink object.
149 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
The server passes the namespace and class name to the provider. The provider returns TRUE to
indicate that it supports operations on this class, or FALSE if not.
The server passes a WQL query and a pointer to the IWbemObjectSink object. The provider
communicates with the matching objects through the IWbemObjectSink::Indicate (section 3.1.4.2.1)
method. After all the matching objects are returned, or if there is a failure encountered, the provider
sends the final status using the IWbemObjectSink::SetStatus (section 3.1.4.2.2) method.
If the provider cannot process the query, then it MUST return WBEM_E_PROVIDER_NOT_CAPABLE.
3.1.4.18 Namespaces
The direct children of a given namespace are represented as instances of the _Namespace class
within the parent namespace. A client with sufficient privilege can query and modify the child
namespaces through operations on the __Namespace instances, as described in the following
subsections.
The namespaces, their corresponding classes and instances, and subnamespaces and their
corresponding classes and instances, MUST be persisted in CIM database.
When the server receives a request to create a new instance of the __Namespace class, the server
MUST create a child namespace of the current namespace, using the instance's Name field as the
name of the new namespace. A corresponding ClassTable and CIM database entries MUST be
created, defining the system classes specified in section 2.2.31. The InstanceProviderId for each
class MUST be set to NULL. A NamespaceConnection MUST be created for the new namespace and
added to the NamespaceConnectionTable. If the new instance includes the
NamespaceSecuritySDDL qualifier, then the qualifier's value specifies the security descriptor of the
namespace in SDDL format; otherwise, the server MUST include an implementation-dependent default
value for the qualifier.<76>
If there is a parent namespace, the server MUST add access control entries of the parent to the
security descriptor using the algorithm in section 2.2.30.2.
The server MUST generate a __NamespaceCreationEvent event object upon successful creation of
the namespace.
The server MUST set the namespace's RequiresEncryption flag using the semantics described in
section 2.2.30.3.
When the server receives a request to get an instance of the __Namespace class, the server MUST
check for the existence of a child namespace (of the current namespace in the IWbemServices
Interface (section 3.1.4.3)) with the same name, returning WBEM_E_NOT_FOUND if none matches.
The RequiresEncryption and NamespaceSecuritySDDL qualifiers MUST be set to the values of the
child namespace's RequiresEncryption flag and security descriptor, respectively.
Similarly, when a client enumerates instances of the __Namespace class, the server MUST return a
set of instances corresponding to the child namespaces of the current namespace.
150 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
When the server receives a request to put an instance of the __Namespace class, the server MUST
check for the existence of a child namespace (of the current namespace in the IWbemServices
interface) with the same name, returning WBEM_E_NOT_FOUND if none matches. The server MUST
update the namespace information based on the qualifiers of the received instance, just as during
namespace creation (see section 3.1.4.18.1 for details).
When the server receives a request to delete an instance of the __Namespace class, the server
MUST check for the existence of a child namespace (of the current namespace in the IWbemServices
interface) with the same name, returning WBEM_E_NOT_FOUND if none matches. The server MUST
delete all classes and instances in the child namespace and all descendants from the CIM database.
The server MUST delete the NamespaceConnection objects for each of the namespaces in the
hierarchy and MUST remove the corresponding entries from NamespaceConnectionTable. The
server MUST delete the ClassTable corresponding to each of the namespaces in the hierarchy.
The server MUST generate a __NamespaceDeletionEvent event object upon successful modification
of the namespace information.
Sink timer: If the timer expires and the call is not completed, the server MUST cancel the
asynchronous operation for which the timer expired.
Backup Timer: If the timer expires, the server MUST resume operations by simulating
IWbemBackupRestoreEx::Resume and MUST reset the timer to 0.
EventPollingTimer: If the timer expires, the server MUST query for the instances of the underlying
CIM class (for which the notifications are requested) in the corresponding EventFilter in the
EventBindingTable, and store them in CurrInstances (which is array of IWbemClassObject
objects). The server MUST compare CurrInstances to PrevInstances already stored in the
event.
If an instance exists only in CurrInstances and is not present in PrevInstances, and the
FROM clause of the EventFilter has __InstanceCreationEvent, the server MUST prepare an
__InstanceCreationEvent object with the TargetInstance set to new object found in
CurrInstances array.
If an instance only exists in PrevInstances and is not present in CurrInstances, and the
FROM clause of the EventFilter has __InstanceDeletionEvent, the server MUST prepare an
__InstanceDeletionEvent object with the TargetInstance set to old object in
PrevInstances array.
If the instance exists in both the arrays, then the server MUST compare the properties of the
objects. If they are not same and the FROM clause of the EventFilter has
__InstanceModificationEvent, the server MUST prepare an
__InstanceModificationEvent object with the PreviousInstance set to old object in
PrevInstances array and the TargetInstance set to new object found in CurrInstances
array.
The server MUST add each of the above events object prepared to the EventQueue, deliver the
events that have accumulated in the EventQueue (ignoring delivery failures), clear the queue,
move CurrInstances array into PrevInstances array, and restart the timer.
151 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
EventGroupingTimer: If the timer expires, the server MUST
2. Examine the events that have accumulated in the EventGroupAggregateQueue and discard
those that do not match the "HAVING" clause of the filter (if specified).
4. Clear EventGroupAggregateQueue.
None.
The server MUST execute the following algorithm for each row of the EventBindingTable.
1. Check whether the indication matches the EventFilter. If not, then skip to the next row.
2. If the SECURITY_DESCRIPTOR property of indication is available, check whether client has access
to this indication by Validating the SECURITY_DESCRIPTOR property of the indication against
ClientSecurityContext. If the client does not have access, the server MUST ignore this
indication.
4. Otherwise, if an EventPollingTimer exists in this row, then add the indication to the
EventQueue. If the number of rows in the EventQueue is more than EventDropLimit, return
WBEM_E_QUEUE_OVERFLOW to the client.
5. Otherwise, deliver the indication to the client via the EventConsumer interface in that row.
The server creates a provider instance and passes namespace name, locale ID,
ProviderArchitectureType, and a pointer to callback into it. If the provider initialization was successful,
the server creates an entry for the given provider in ProviderTable with ProviderEntryPoint as
pointer to the provider instance created above. The server will proceed with the specific client's
request upon successful load of the provider. The error encountered during load will be sent to the
server, and the server terminates the client's request with WBEM_E_PROVIDER_LOAD_FAILURE.
152 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
3.1.6.3 Unload Provider
The server removes the entry for the corresponding provider in ProviderTable. The server deletes
the provider instance created as part of 3.1.6.2. If an error is encountered during the Unload, it will be
returned to the server.
The client MUST maintain association between _WBEM_REFRESHER_ID and the objects refreshed in
respective ID by the server. This information MUST be passed to the server when reconnecting the
refresher.
3.2.2 Timers
None
3.2.3 Initialization
The client MUST activate the IWbemLevel1Login interface on the machine that is running the target
WMI server by using the CLSID {8BC3F05E-D86B-11D0-A075-00C04FB68820}, as specified in the
DCOM Remote Protocol ([MS-DCOM]). The client SHOULD obtain the IWbemLoginClientID interface by
using the IRemUnknown and IRemUnknown2 interfaces, [MS-DCOM], on the IWbemLevel1Login
interface. If the server returns an error for the IWbemLoginClientID interface, the client MUST ignore
the error. If the server returns the IWbemLoginClientID interface, the client SHOULD call the
IWbemLoginClientID::SetClientInfo method to set the client information on the server.<77>
The client SHOULD NOT obtain the IWbemLoginHelper interface from IWbemLevel1Login by calling the
IRemUnknown and IRemUnknown2 interfaces.<78>
If the client has multiple preferred locales or any locale string that does not match the "MS_xxx"
format as the pszPreferredLocale parameter to IWbemLevel1Login::NTLMLogin, the client MUST
determine whether the server supports the locale and filter out unsupported locales before calling
IWbemLevel1Login::NTLMLogin. To determine supported locales, the client MUST call
IWbemLevel1Login::EstablishPosition If the return value is E_NOTIMPL, the client MUST choose the
first locale that matches the "MS_xxx" format and MUST remove other locales from the string.
If the locale list is empty after unsupported locales are filtered out,<79> the client MUST pass NULL
for pszPreferredLocale.
If the client detects that the IWbemClassObject that is returned by the WMI server does not conform
to [MS-WMIO] encoding, as specified in section 2.2.4, the results MUST be ignored and the requested
operation MUST be considered as failed.
For each operation that accepts an IWbemContext object, the client SHOULD generate a new,
unique request ID, and set the __CorrelationId context option to the request ID.<80>
153 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
3.2.4.1 IWbemObjectSink Interface Client Details
The IWbemObjectSink interface is implemented by the WMI client if the WMI client uses asynchronous
method calls as specified in section 3.2.4.2.9. In this case, the WMI client acts as an
IWbemObjectSink server. The WMI server acts as an IWbemObjectSink client. The WMI server MUST
invoke the IWbemObjectSink methods to deliver the results (IWbemClassObjects, if any, and the
status code) of the IWbemServices method for which this IWbemObjectSink is passed as a response
handler, as specified in section 3.1.1.1.3.
Because this interface is implemented by the WMI client and the WMI server and invoked by both, the
server in this section refers to the implementer of this interface, and client refers to the invoker in a
specific scenario.
The IWbemObjectSink interface is implemented by the WMI server and returned to the WMI client in a
ppResponseHandler parameter, if the WMI client calls the IWbemServices::QueryObjectSink method.
In this case, the WMI server acts as an IWbemObjectSink server. The WMI client acts as an
IWbemObjectSink client. The WMI client MUST invoke IWbemObjectSink methods to deliver the
results, that is, IWbemClassObjects that represent the extrinsic event the client wants to deliver to the
server.
Method Description
SetStatus Called by the client either to indicate the end of an operation or to send status information to the
server.
Opnum: 4
If there are no IWbemClassObject results to be reported, the client MUST NOT call the
IWbemObjectSink::Indicate method.
Otherwise, the client MUST call the IWbemObjectSink::Indicate method one or more times until the
entire IWbemClassObject results are delivered to the server. Each time the
IWbemObjectSink::Indicate method is called, a subset of the result is delivered to the server. For a
specific set of result objects, the client uses implementation-specific criteria to choose the number and
timing of the IWbemObjectSink::Indicate method calls that are used to deliver the result
objects.<81>
Clients that implement the ObjectArray structure MUST call IWbemObjectSink::Indicate by using
DCOM Remote Protocol marshaling, as specified in [MS-DCOM], for the first time. If a server returns
WBEM_S_NEW_STYLE, the client SHOULD send the remainder of the results by using the ObjectArray
structure as specified in section 2.2.14. If the server does not return WBEM_S_NEW_STYLE, the client
MUST send the remainder of the results from the IWbemObjectSink::Indicate call by using DCOM
Remote Protocol marshaling, as specified in [MS-DCOM], and MUST NOT use the ObjectArray
structure.
The following applies when the WMI server acts as an IWbemObjectSink client:
For each asynchronous operation, there MUST be only one call at a time: either
IWbemObjectSink::Indicate or IWbemObjectSink::SetStatus. This is ensured by calling
IWbemObjectSink::Indicate only if CallbackInProgress is FALSE. Set CallbackInProgress to TRUE
before calling IWbemObjectSink::Indicate, and reset it to FALSE after the call is returned.
IWbemOjbectSink::Indicate MUST NOT be called if CallCancelled is set to TRUE.
154 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
If IWbemObjectSink::Indicate returns an error, the server MUST do the following:
The client MUST call the IWbemObjectSink::SetStatus method operation to send the final status of the
IWbemServices method operation by passing WBEM_STATUS_COMPLETE as an lFlags parameter and
the operation return code as an HRESULT parameter. After calling IWbemObjectSink::SetStatus with
final status information, the client MUST release the IWbemObjectSink interface and MUST NOT call
any other methods of IWbemObjectSink.
When the reported operation status is success, the client MUST set the pObjParam parameter to NULL.
The client MAY call IWbemObjectSink::SetStatus multiple times during the operation execution to
report the operation progress.<82> In this case, lFlags MUST be set to WBEM_STATUS_PROGRESS
and the hResult parameter MUST contain the progress information.
When sending operation progress information, the client MAY call IWbemObjectSink::SetStatus any
time before final status is sent.
The following applies when the WMI server acts as an IWbemObjectSink client.
For each asynchronous operation, there MUST only be one call at a time of either
IWbemObjectSink::Indicate or IWbemObjectSink::SetStatus (for operation progress information). This
is ensured by calling IWbemObjectSink::Indicate only if CallbackInProgress is FALSE. Set
CallbackInProgress to TRUE before calling operation progress information by
IWbemObjectSink::SetStatus, and reset to FALSE after the call returns. Operation progress by
IWbemObjectSink::SetStatus MUST NOT be called if CallCancelled is TRUE.
If the client wants to send the events to the WMI server, the client MUST call the
IWbemServices::QueryObjectSink method on the IWbemObjectSink interface that is obtained as
specified in section 3.2.3. When the method execution succeeds, the client gets the IWbemObjectSink
interface. The extrinsic events, represented as IWbemClassObject Prototype Result Object, as
specified in 2.2.4.1, MUST be delivered to the server by calling IWbemObjectSink::Indicate.When the
client completes delivering the extrinsic events, the client MUST release the IWbemObjectSink.
3.2.4.2.2 Calling Put Interfaces for CIM Objects with Amended Qualifiers
155 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
If the client calls the PutClass, PutClassAsync, PutInstance, or PutInstanceAsync method to update or
create a CIM Object that contains amended qualifiers, the client SHOULD set the
WBEM_FLAG_USE_AMENDED_QUALIFIERS flag.
To create a new class with amended qualifiers, the client MUST first separate the class into a locale-
neutral class object and a locale-specific class object, with contents as described in section 3.1.1.2.
Then the client MUST make multiple calls to PutClass or PutClassAsync; one to create the locale-
neutral class object and one for each supported locale to construct the locale-specific class object. The
client SHOULD create the locale-neutral object last.
To delete a class with amended qualifiers, the client MUST delete the locale-neutral class object and
the locale-specific class object. The client MUST make multiple calls to DeleteClass or
DeleteClassAsync; one to delete the locale-neutral class object and one for each supported locale to
delete the locale-specific class object. The client SHOULD delete the locale-neutral object first.
If the client wants to invoke following WMI methods synchronously, the client MUST NOT set
WBEM_FLAG_RETURN_IMMEDIATELY when making method calls. When the method completes, the
result of the operation is returned as return value. List of methods returning no objects in synchronous
mode are
IWbemServices::PutInstance
IWbemServices::PutClass
IWbemServices::DeleteClass
IWbemServices::DeleteInstance
The client MUST create a CIM instance for the input parameter CIM class defined in [MS-WMIO]
section 2.3.3. The values of the CIM instance properties MUST be set to the values of the input
parameters of the method by matching the parameter name to the property name. This CIM instance
MUST be passed to IWbemServices::ExecMethod (section 3.1.4.3.22) or
IWbemServices::ExecMethodAsync (section 3.1.4.3.23) as pInParams.
The output parameters from the method invocation will be returned as an instance of output
parameter CIM class as defined in [MS-WMIO] section 2.3.3. Depending on how the method is
invoked, the resultant object is returned in one of the ways as described in sections 3.2.4.2.6,
3.2.4.2.7, or 3.2.4.2.9.
If the client wants to invoke any of the following WMI methods synchronously, the client MUST NOT
set WBEM_FLAG_RETURN_IMMEDIATELY when making method calls. When the method completes
successfully, the output parameter contains the result object of the operation. The following table lists
the methods and output parameter containing the result object of the operation.
1 IWbemServices::OpenNamespace ppWorkingNamespace
2 IWbemServices::GetObject ppObject
3 IWbemServices::ExecMethod ppOutParams
156 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
When the call to the method fails, the output parameter is NULL.
If the client wants to invoke any of the following WMI methods semisynchronously, the client MUST
set WBEM_FLAG_RETURN_IMMEDIATELY when it makes the method calls.
When the method returns success, the IWbemCallResult parameter MUST be used to get the result of
the actual semisynchronous operation. The client MUST call the methods of IWbemCallResult, as
specified in the following table, to obtain the results of the semisynchronous operation that is initiated
by the client. The client MUST NOT call other methods of IWbemCallResult except as specified in the
following table.
Method Rule
When the semisynchronous IWbemServices method fails, the output parameter does not have the
IWbemCallResult interface.
If the client wants to invoke any of the following WMI methods semisynchronously, the client MUST
set WBEM_FLAG_RETURN_IMMEDIATELY when making method calls. If the client wants to invoke any
of the following methods synchronously, the client MUST NOT set
WBEM_FLAG_RETURN_IMMEDIATELY when making IWbemServices method calls.
IWbemServices::ExecQuery
IWbemServices::CreateInstanceEnum
IWbemServices::CreateClassEnum
IWbemServices::ExecNotificationQuery
When the method execution fails, as indicated by the return value, the output parameter does not
have IEnumWbemClassObject.
The client SHOULD obtain IWbemFetchSmartEnum interface using IRemUnknown and IRemUnknown2
interfaces as specified in [MS-DCOM], on this IEnumWbemClassObject interface. If client obtains
157 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
IWbemFetchSmartEnum, the client MUST call IWbemFetchSmartEnum::GetSmartEnum to obtain
IWbemWCOSmartEnum. The client SHOULD call IWbemWCOSmartEnum::Next method repeatedly to
retrieve the objects. When IWbemWCOSmartEnum::Next returns WBEM_S_NO_ERROR or
WBEM_S_TIMEDOUT, the client SHOULD call IEnumWbemClassObject::Next again. If
IWbemWCOSmartEnum::Next returns an error as specified in 2.2.11 or returns WBEM_S_FALSE, the
client MUST NOT call IWbemWCOSmartEnum::Next again.
If the server returns an error when obtaining IWbemFetchSmartEnum, the client MUST ignore the
error and SHOULD call IEnumWbemClassObject::Next method repeatedly to retrieve the objects.
When IEnumWbemClassObject::Next returns WBEM_S_NO_ERROR or WBEM_S_TIMEDOUT, the client
SHOULD call IEnumWbemClassObject::Next again. If IEnumWbemClassObject::Next returns an error
as specified in 2.2.11 or returns WBEM_S_FALSE, the client MUST NOT call
IEnumWbemClassObject::Next again.
If the client wants to start the enumerator from the first object, the client MUST call
IEnumWbemClassObject::Reset, if the IWbemServices method that created the
IEnumWbemClassObject is not passed WBEM_FLAG_FORWARD_ONLY flag.
If the client wants to create a new enumerator containing the same result set, the client MUST call
IEnumWbemClassObject::Clone, if the IWbemServices method that created the
IEnumWbemClassObject is not passed WBEM_FLAG_FORWARD_ONLY flag. The client SHOULD use
IEnumWbemClassObject created using IEnumWbemClassObject::Clone as another result object by
calling IEnumWbemClassObject::Next.
If the client wants to get some results of the operation asynchronously, the client MUST call
IEnumWbemClassObject::NextAsync with the uCount, in this case next uCount result objects are
returned in IWbemObjectSink passed as a parameter to IEnumWbemClassObject::NextAsync.
158 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
If the client wants to invoke any of the above asynchronous methods, the client MUST pass an object
implementing IWbemObjectSink interface to the above method calls as a response handler.
When the method invocation succeeds, the client SHOULD wait for the result of the operation to be
returned to the client using IWbemObjectSink::Indicate and IWbemObjectSink::SetStatus on the
IWbemObjectSink passed to the asynchronous method.
When the IWbemServices method invocation fails, the result of the operation is returned as a return
value of the method.
After the IWbemServices asynchronous method invocation succeeds, if the client wants to cancel the
pending asynchronous operation the client MUST call IWbemServices::CancelAsyncCall method. If
the client calls IWbemServices::CancelAsyncCall, the client MUST pass the IWbemObjectSink passed
to the asynchronous IWbemServices method that is still pending. The client MUST NOT call
IWbemServices::CancelAsyncCall from within a call to IWbemObjectSink::Indicate or
IWbemObjectSink::SetStatus.
If client wants to invoke methods of IWbemBackupRestore interface, the client MUST activate
IWbemBackupRestore interface on the target WMI server machine using CLSID {C49E32C6-BC8B-
11D2-85D4-00105A1F8304} as specified in DCOM remote protocol.
If client wants to invoke methods of IWbemBackupRestoreEx interface, the client MUST activate
IWbemBackupRestoreEx interface on the target WMI server using CLSID {C49E32C6-BC8B-11D2-
85D4-00105A1F8304} as specified in DCOM remote protocol. The client MAY obtain
IWbemBackupRestoreEx by calling IRemUnknown and IRemUnknown2 interfaces, as specified in [MS-
DCOM], on IWbemBackupRestore interface obtained as specified in section 3.1.4.10.
The client MUST obtain IWbemRefreshingServices interface, if the client wants to get updates to the
objects in an efficient manner. The client MUST obtain IWbemRefreshingServices interface by calling
IRemUnknown and IRemUnknown2 on IWbemServices interface obtained as specified in section 3.2.3.
The client MUST generate _WBEM_REFRESHER_ID as specified in section 2.2.21. The client MAY call
IWbemRefreshingServices::AddObjectToRefresher,
IWbemRefreshingServices::AddObjectToRefresherByTemplate or
IWbemRefreshingServices::AddEnumToRefresher to add multiple objects and enums to the refresher.
The client MUST pass the _WBEM_REFRESHER_ID that is generated as specified in section 2.2.21 to
the IWbemRefreshingServices::AddObjectToRefresher and
IWbemRefreshingServices::AddObjectToRefresherByTemplate methods.
The client MUST allow all the version numbers that are returned by the server in pdwSvrRefrVersion.
159 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
structure. The client MUST obtain the IWbemRemoteRefresher from the m_pRefresher in
_WBEM_REFRESH_INFO_REMOTE. The client MUST use the IWbemRemoteRefresher::RemoteRefresh
method to get the updated object. If the client wants to remove the particular object from the remote
refresher, the client MUST use m_lCancelId, which is returned in _WBEM_REFRESH_INFO, to invoke
the IWbemRemoteRefresher::StopRefreshing method.
3.2.4.5.2 IWbemRefreshingServices::AddEnumToRefresher
The client MUST pass the _WBEM_REFRESHER_ID that is generated as specified in section 2.2.21 to
the IWbemRefreshingServices::AddEnumToRefresher method.
The client MUST allow all the version numbers that are returned by the server in pdwSvrRefrVersion.
When the IWbemRefreshingServices::AddEnumToRefresher method fails, the client MUST NOT use the
_WBEM_REFRESH_INFO structure.
3.2.4.5.3 IWbemRefreshingServices::GetRemoteRefresher
When invoking the methods of the IWbemRemoteRefresher interface, if the connection is lost and
reported to the client as an RPC disconnect error (as specified in [MS-ERREF]), the client SHOULD try
to reconnect to WMI by obtaining IWbemServices as specified in section 3.2.3 and to obtain the
IWbemRemoteRefresher interface using the IWbemServices interface as specified in section 3.2.4.5,
and SHOULD call the IWbemRefreshingServices::GetRemoteRefresher method on this interface.
The client MUST allow all the version numbers that are returned by the server in the
pdwSvrRefrVersion parameter.
If the GUID is equal to the GUID that is returned in WBEM_REFRESH_INFO_REMOTE when the remote
refresher is first received by calling either IWbemRefreshingServices::AddEnumToRefresher,
160 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
IWbemRefreshingServices::AddObjectToRefresher, or
IWbemRefreshingServices::AddObjectToRefresherByTemplate, the client MUST NOT call
IWbemRefreshingServices::ReconnectRemoteRefresher. The client SHOULD call
IWbemRemoteRefresher::RemoteRefresh on the IWbemRemoteRefresher interface, which is obtained
by using IWbemRefreshingServices::GetRemoteRefresher to refresh the object. The client MUST NOT
call the methods on the IWbemRemoteRefresher interface whose connection is initially lost.
If the GUID is not equal to the GUID that is returned in WBEM_REFRESH_INFO_REMOTE when the
remote refresher is first received by calling either IWbemRefreshingServices::AddEnumToRefresher,
IWbemRefreshingServices::AddObjectToRefresher or
IWbemRefreshingServices::AddObjectToRefresherByTemplate, the client MUST call
IWbemRefreshingServices::ReconnectRemoteRefresher to reconnect all the objects to the refresher.
The client MUST NOT call methods on the new remote refresher until
IWbemRefreshingServices::ReconnectRemoteRefresher is executed successfully. The client MUST NOT
call methods on the IWbemRemoteRefresher interface whose connection is lost initially.
If the IWbemRefreshingServices::GetRemoteRefresher method call fails, the client SHOULD retry after
allowing a time-out.
3.2.4.5.4 IWbemRefreshingServices::ReconnectRemoteRefresher
The client MUST allow all the version numbers that are returned by the server in pdwSvrRefrVersion.
When the method executes successfully, the client MUST validate all _WBEM_RECONNECT_RESULTS
to see if any object or enumerator has failed to be added to the refresher.
The client MUST NOT activate or QueryInterface for the IUnsecuredApartment interface.
The client MUST NOT activate or QueryInterface for the IWbemUnsecuredApartment interface.
The client MUST NOT activate or QueryInterface for the IWbemShutdown interface.
None.
None.
3.2.6.1 Shutdown
161 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
4 Protocol Examples
The following sections describe several operations as used in common scenarios to illustrate the
function of the Windows Management Instrumentation Remote Protocol.
The protocol is initiated by the DCOM Remote Protocol activation of the CLSID _IWbemLevel1Login.
The examples are performed using the wbemtest utility. Network captures with annotations for a
number of the examples are available from [SysDocCap-WMI]
The figure below illustrates one possible sequence of steps that the WMI client takes during
establishment of connection with WMI server.
For a client application to connect to the WMI service on a remote server, the client application first
obtains an IWbemLevel1Login interface pointer to the server on the remote computer by using the
DCOM activation. The client then obtains IWbemLoginClientID by calling IRemUnknown using
IWbemLevel1Login. The client calls IWbemLoginClientID::SetClientInfo. Then the client obtains
IWbemLoginHelper by calling IRemUnknown using IWbemLevel1Login. The client calls
IWbemLoginHelper::SetEvent to determine whether the WMI server is running on the same machine.
Finally, the client calls the IWbemLevel1Login::NTLMLogin method to obtain an IWbemServices
interface pointer. The IWbemServices interface pointer is the starting point for all other activities.
162 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Figure 11: Protocol initialization example
This section contains information about the messages exchanged as part of the protocol initialization
between SAI-NAV009 (client) and SAI-NAV009-2 (server). The specific trace is taken as part of
IWbemServices::ExecQuery call. For brevity, only the relevant traces are shown here.
163 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
- DCOM: RemoteCreateInstance Request, DCOM Version=5.7 Causality Id={8E2416FE-0A3F-42BE-
A9B0-F30624C94619}
+ HeaderReq: DCOM Version=5.7 Causality Id={8E2416FE-0A3F-42BE-A9B0-F30624C94619}
+ AggregationInterface:
+ ActivationProperties:
Client callsSetClientInfo method on IwbemLoginClientID interface pointer obtained from the server:
164 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Client calls EstablishPosition method on IWbemLevel1Login interface pointer to determine supported
locales on the server:
Server responds with LocalVersion as 1. This means that the server ignores unrecognized locale
names in the locale name format:
Server responds with IWbemServices interface pointer for root\cimv2 namespace on sai-nav009-2
(server). Client uses this interface pointer to make synchronous, asynchronous, and
semisynchronous operations on the server:
Two example captures are given on [SysDocCap-WMI], one showing two Windows 2000 operating
system machines initializing, the second a Windows 7 operating system to Windows Server 2008
operating system initialization. The example captures were created by performing a connect to a
remote machine using the wbemtest utility.
A synchronous operation completes when the entire result set is ready on the server. The following
sections describe the different scenarios where synchronous operations are applicable.
165 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
4.2.1 Synchronous Delivery of a Single Result
In this context of operation, there are two kinds of client behavior and two kinds of server behavior,
depending in the product version, resulting in four cases of client-server interaction.
The product versions that exhibit unoptimized client behavior and unoptimized server behavior are
referenced in section 4.2.2.
166 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
To make a synchronous operation from a client to a server, the client uses the IWbemServices
interface pointer. The client calls the IWbemServices synchronous methods
IWbemServices::CreateInstanceEnum, IWbemServices::CreateClassEnum, and
IWbemServices::ExecQuery. In response to the method executed, the server returns an
IEnumWbemClassObject interface pointer. The client then uses the IEnumWbemClassObject::Next
method to repeatedly retrieve the IWbemClassObject objects from the query result set.
An example capture is given on [SysDocCap-WMI] showing a Windows 2000 Server operating system
connecting to a second Windows 2000 Server using wbemtest utility and enumerating the default
namespace.
The product versions that exhibit unoptimized client behavior and optimized server behavior are
referenced in section 4.2.2.
To make a synchronous operation from a client to a server, the client uses the IWbemServices
interface pointer. The client calls the IWbemServices synchronous methods
IWbemServices::CreateInstanceEnum, IWbemServices::CreateClassEnum, and
IWbemServices::ExecQuery. In response to the method executed, the server returns an
167 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
IEnumWbemClassObject interface pointer. The client then uses the IEnumWbemClassObject::Next
method to repeatedly retrieve the IWbemClassObject objects from the query result set.
The call sequence is the same as that in section 4.2.2.1 because in both cases, the client is
unoptimized, and therefore still uses the old mechanism for communication. Sections 4.2.2.3 and
4.2.2.4 explain the call sequences between the newer versions of client and server.
The product versions that exhibit optimized client behavior and optimized server behavior are
referenced in section 4.2.2.
To make a synchronous operation from a client to a server, the client uses the IWbemServices
interface pointer. The client calls the IWbemServices synchronous methods
IWbemServices::CreateInstanceEnum, IWbemServices::CreateClassEnum, and
IWbemServices::ExecQuery. In response to the method executed, the server returns an
IEnumWbemClassObject interface pointer. The client uses IRemUnknown and IRemUnknown2, as
specified in [MS-DCOM], to obtain an IWbemFetchSmartEnum interface pointer from the
IEnumWbemClassObject interface pointer. The client then calls the
IWbemFetchSmartEnum::GetSmartEnum method to obtain the IWbemWCOSmartEnum interface
168 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
pointer. The client uses the IWbemWCOSmartEnum::Next method repeatedly to retrieve the
IWbemClassObject interface pointers that contains the result set. The results are encoded as an
ObjectArray as specified in section 2.2.14.
An example capture is given on [SysDocCap-WMI] showing a Windows Vista operating system client
connecting to Windows Server 2008 using the wbemtest utility and enumerating the default
namespace.
169 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
4.2.2.4 Optimized Client and Unoptimized Server
The product versions that exhibit optimized client behavior and unoptimized server behavior are
referenced in section 4.2.2.
To make a synchronous operation from a client to a server, the client uses the IWbemServices
interface pointer. The client calls the IWbemServices synchronous methods
IWbemServices::CreateInstanceEnum, IWbemServices::CreateClassEnum, and
IWbemServices::ExecQuery. In response to the method executed, the server returns an
IEnumWbemClassObject interface pointer. The client uses IRemUnknown and IRemUnknown2, as
specified in [MS-DCOM], to obtain an IWbemFetchSmartEnum interface pointer from
IEnumWbemClassObject interface pointer. The operation fails because the server is not implementing
the IWbemFetchSmartEnum interface. The client falls back to unoptimized client behavior.
170 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
An example capture is given on [SysDocCap-WMI] showing a Windows 7 client connecting to a
Windows 2000 Server using the wbemtest utility and enumerating the default namespace
This section contains the information exchanged between SAI-NAV009 (client) and SAI-NAV009-2
(server).
First the client tries to connect to the server and obtains IwbemServices for namespace root\cimv2
as outlined in 4.1.1.
Client calls ExecQuery method on IWbemServices interface pointer with "select * from
win32_process where Name='calc.exe'" as strQuery. It is assumed that an instance of calc.exe is
running on the server:
In response to the method executed above, the server returns an IEnumWbemClassObject interface
pointer:
Server responds with a valid IWbemFetchSmartEnum interface pointer. This means that the server is
optimized:
171 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
+ RemqiresultPtr: Pointer To 0x00020000
+ Size: 1 Elements
+ QueryInterfaceResults:
+ ReturnValue: Success
Server responds with the result set with one win32_process object for calc.exe instance running. The
results are encoded as an ObjectArray as specified in section 2.2.14:
Client makes ExecMethod operation on IWbemServices interface pointer to call terminate() method on
win32_process object corresponding to calc.exe instance obtained above. This action terminates the
process calc.exe on the server:
172 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
+ Pad: 2 Bytes
Flags: Unknown
+ Ctx: NULL
+ InParams: OBJREFCUSTOM - {DC12A681-737F-11CF-884D-00AA004B2E24}
+ OutParams: NULL
+ CallResult: NULL
Server responds with ResultValue as WBEM_S_NO_ERROR. This means that Terminate method was
successfully executed on Win32_Process object:
To confirm that calc.exe instance is indeed terminated on the server, client makes the same
ExecQuery operation on IWbemServices interface pointer obtained from the server:
In response to the method executed above, the server returns an IEnumWbemClassObject interface
pointer:
Server responds with a valid IWbemFetchSmartEnum interface pointer. This means that the server is
optimized:
173 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
- DCOM: IRemUnknown2:RemQueryInterface Response, ORPCFNULL - No additional information in
this packet
+ HeaderResp: ORPCFNULL - No additional information in this packet
+ RemqiresultPtr: Pointer To 0x00020000
+ Size: 1 Elements
+ QueryInterfaceResults:
+ ReturnValue: Success
Server responds with the result set this time with no calc.exe instances. This proves that the
terminate method was called on win32_process object, and has terminated calc.exe instance on the
server:
This section contains the information exchanged between SAI-NAV009 (client) and SAI-NAV009-2
(server).
On the server machine, the MOF shown below is compiled and made available to WMI.
174 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
#pragma namespace("\\\\.\\root\\cimv2\\MyTest")
Class TestWMI
{
[key] uint32 x;
uint32 y;
};
First the client tries to connect to the server and obtains IWbemServices interface pointer for
namespace root\cimv2\MyTest as outlined in 4.1.1. There is initially an instance of a TestWMI Class
created on the server with (x=3,y=5).
Client calls PutInstance operation on IWbemServices interface pointer to create another instance of
TestWMI class on the server. The instance property values are x=10, y=15:
Server returns WBEM_S_NO_ERROR. This implies that the instance above was successfully created on
the server:
In response to the method executed above, the server returns an IEnumWbemClassObject interface
pointer:
175 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
- DCOM: IRemUnknown2:RemQueryInterface Request, DCOM Version=5.7 Causality Id={BD28B839-
5D20-4435-9852-1FE794070A9C}
+ HeaderReq: DCOM Version=5.7 Causality Id={BD28B839-5D20-4435-9852-1FE794070A9C}
QueriedObjectIpId: {00026021-06C4-0000-9260-C0BCD4C240B3}
PublicObjectReferenceCount: 5 (0x5)
NumRequestedIIds: 1 (0x1)
+ Size: 1 Elements
+ InterfaceIds:
Server responds with a valid IWbemFetchSmartEnum interface pointer. This means that the server is
optimized:
Server responds with the result set containing 2 TestWMI instances. The instance property values are
(x=3,y=5) and (x=10,y=15):
176 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Client calls PutInstance operation on IWbemServices interface pointer on one of the TestWMI class
instances (x=10, y=15) to update it to (x=10, y=20):
Server returns WBEM_S_NO_ERROR. This implies that the instance update above was successful on
the server:
Server responds with success. This implies that TestWMI instance with key value as x=10 has been
successfully deleted from the server:
Client calls CreateInstanceEnum operation on IWbemServices interface pointer to find out the existing
TestWMI instances on the server:
In response to the method executed above, the server returns an IEnumWbemClassObject interface
pointer:
177 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
+ Pad: 2 Bytes
ReturnValue: 0x00000000 - WBEM_S_NO_ERROR - Indicates a successful completion to the
method call.
Server responds with a valid IWbemFetchSmartEnum interface pointer. This means that the server is
optimized:
178 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Server responds with the result set containing 1 TestWMI instance (x=3,y=5). This confirms that the
other instance with x=10 has been successfully deleted as part of DeleteInstance call.
In semisynchronous cases, the call returns before the requested operation completes, and another
interface is used to retrieve the operation results. The returned interface depends on the
IWbemServices methods that are invoked by the client. The following sections describe the two
different behaviors.
179 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Figure 17: Semisynchronous delivery of a single result
The semisynchronous operation uses the same sequence as the synchronous calls, as specified in
section 4.2.2, to request a result set. However, in semisynchronous cases, the
IEnumWbemClassObject interface pointer is returned before the result set is available on the server.
This is different from the synchronous case, in which the interface pointer is returned only after the
result set is available on the server. The IEnumWbemClassObject interface pointer is returned before
the result set is available on the server. When the client calls the IEnumWbemClassObject::Next
method, it specifies a time-out within which the server returns the requested results. When one of the
previous conditions is satisfied, the call completes.
This section contains the information exchanged between SAI-NAV009 (client) and SAI-NAV009-2
(server).
First the client tries to connect to the server and obtains IWbemServices for namespace root\cimv2 as
outlined in 4.1.1.
180 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
The client calls ExecQuery method on IwbemServices interface pointer with "select * from
win32_process where Name='calc.exe'" as strQuery. It is assumed that an instance of calc.exe is
running on the server:
In response to the method executed above, the server returns an IenumWbemClassObject interface
pointer:
The server responds with a valid IWbemFetchSmartEnum interface pointer. This means that the server
is optimized:
181 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
- WMI: IWbemFetchSmartEnum:GetSmartEnum Response, ReturnValue=WBEM_S_NO_ERROR
+ SmartEnum: OBJREFSTANDARD - {423EC01E-2E35-11D2-B604-00104B703EFD}
+ Pad: 2 Bytes
ReturnValue: 0x00000000 - WBEM_S_NO_ERROR - Indicates a successful completion to the
method call.
The server responds with the result set with one win32_process object for calc.exe instance running.
The results are encoded as an ObjectArray as specified in section 2.2.14:
The client makes ExecMethod operation on IWbemServices interface pointer to call terminate()
method on Win32_Process object corresponding to calc.exe instance obtained above. [This action
terminates the process calc.exe on the server]:
The server responds with a valid IWbemCallResult interface pointer corresponding to the ExecMethod
operation above:
182 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
+ Pad: 2 Bytes
ReturnValue: 0x00000000 - WBEM_S_NO_ERROR - Indicates a successful completion to the
method call.
The client calls GetCallStatus on IWbemCallResult interface pointer to obtain the status of the
ExecMethod operation above:
The server responds with ReturnValue WBEM_S_NO_ERROR, and the Status as S_OK. This implies
that the ExecMethod operation above was successfully executed on the server:
The client calls GetResultObject method on IWbemCallResult interface pointer to get the result object:
The server responds with WBEM_S_NO_ERROR, and an instance of IwbemClassObject that contains
the return value from Terminate method above:
To confirm that calc.exe instance is indeed terminated, the client calls ExecQuery method on
IWbemServices interface pointer with "select * from win32_process where Name='calc.exe'" as
strQuery:
In response to the method executed above, the server returns an IEnumWbemClassObject interface
pointer:
183 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
ReturnValue: 0x00000000 - WBEM_S_NO_ERROR - Indicates a successful completion to the
method call.
The server responds with a valid IWbemFetchSmartEnum interface pointer. This means that the server
is optimized:
184 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
The server responds with the result set this time with no calc.exe instances. (This proves that the
terminate method was called and has terminated calc.exe process on the server):
This section contains the information exchanged between SAI-NAV009 (client) and SAI-NAV009-2
(server). The MOF shown below is compiled on the server machine and is made available to WMI.
#pragma namespace("\\\\.\\root\\cimv2\\MyTest")
Class TestWMI
{
[key] uint32 x;
uint32 y;
};
First the client tries to connect to the server and obtains IWbemServices interface pointer for
namespace root\cimv2\MyTest as outlined in 4.1.1.
Client calls PutInstance operation on IWbemServices interface pointer to create another instance of
TestWMI class on the server. The instance property values are x=10, y=15:
Server responds with a valid IWbemCallResult interface pointer corresponding to the PutInstance
operation above:
Client calls GetCallStatus on IWbemCallResult interface pointer to obtain the status of PutInstance
operation above:
185 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
- WMI: IWbemCallResult:GetCallStatus Request, Timeout=5000
Timeout: 5000 ms(0x1388)
Server responds with ReturnValue WBEM_S_NO_ERROR, and the Status as S_OK. This implies that
the PutInstance operation above was successfully executed on the server:
Client calls GetResultObject method on IWbemCallResult interface pointer to get the result object:
Server responds with WBEM_S_NO_ERROR, and an instance of IWbemClassObject that contains the
return value from Client's PutInstance operation above:
In response to the method executed above, the server returns an IEnumWbemClassObject interface
pointer:
186 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
- DCOM: IRemUnknown2:RemQueryInterface Request, DCOM Version=5.7 Causality Id={84EE6C91-
3DF6-4B65-95F1-71E440FE05B7}
+ HeaderReq: DCOM Version=5.7 Causality Id={84EE6C91-3DF6-4B65-95F1-71E440FE05B7}
QueriedObjectIpId: {0003C027-06EC-0000-6584-686A50EA42DD}
PublicObjectReferenceCount: 5 (0x5)
NumRequestedIIds: 1 (0x1)
+ Size: 1 Elements
+ InterfaceIds:
Server responds with a valid IWbemFetchSmartEnum interface pointer. This means that the server is
optimized:
Server responds with the result set containing 2 TestWMI instances. The instance property values are
(x=3,y=5) and (x=10,y=15):
187 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
ReturnValue: 0x00000001 - WBEM_S_FALSE - Either no more CIM objects are available, the
number of returned CIM objects is less than the number requested, or this is the end of an
enumeration.
Client calls DeleteInstance operation on IWbemServices interface pointer by providing the object path
of one of the instances (\\SAI-NAV009-2\ROOT\cimv2\MyTest:TestWMI.x=10):
Server responds with a valid IWbemCallResult interface pointer corresponding to the DeleteInstance
operation above:
Client calls GetCallStatus on IWbemCallResult interface pointer to obtain the status of DeleteInstance
operation above:
Server responds with ReturnValue WBEM_S_NO_ERROR, and the Status as S_OK. This implies that
the DeleteInstance operation above was successfully executed on the server:
In response to the method executed above, the server returns an IEnumWbemClassObject interface
pointer:
188 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
- WMI: IWbemServices:CreateInstanceEnum Response, ReturnValue=WBEM_S_NO_ERROR
+ Enum: OBJREFSTANDARD - {027947E1-D731-11CE-A357-000000000001}
+ Pad: 2 Bytes
ReturnValue: 0x00000000 - WBEM_S_NO_ERROR - Indicates a successful completion to the
method call.
Server responds with a valid IWbemFetchSmartEnum interface pointer. This means that the server is
optimized:
189 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Server responds with the result set containing 1 TestWMI instance (x=3,y=5). This confirms that the
other instance with x=10 has been successfully deleted as part of DeleteInstance call:
An asynchronous method returns before the requested operation completes. The server continues to
execute the request and delivers the results to the client using a response handler when the results
are available. The response handler receives the results as they become available. The
IWbemObjectSink::Indicate method is called by the server when a result is found during the
operation.
To make an asynchronous query, the client uses the IWbemServices interface pointer and it passes
the IWbemObjectSink interface when calling an asynchronous method of the IWbemServices interface.
If the asynchronous call returns SUCCESS, the server keeps a reference to the IWbemObjectSink
interface pointer. If the server is required to return WMI objects to the client, the server delivers the
results through the IWbemObjectSink::Indicate method.
After the delivery of all objects, the server makes a single call to IWbemObjectSink::SetStatus to
indicate that the operation finished, specifying the final status of the operation. After that, the server
releases the IWbemObjectSink pointer.
190 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Figure 18: Asynchronous delivery of results
The asynchronous communication is optimized to reduce the network usage by making use of the
ObjectArray structure as specified in section 2.2.14.
A client supporting that capability notifies the server by returning 0x400FF (WBEM_S_NEW_STYLE) in
the first Indicate operation. A server that does not support the ObjectArray structure interprets this as
a success return code, while a server supporting the ObjectArray structure notices the code and sends
the rest of the results by using the ObjectArray structure, as specified in section 2.2.14.
191 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Figure 19: Optimized asynchronous delivery of results
When using the refresher mechanism, a client application that is connected to a remote computer
through an IWbemServices pointer uses the IRemUnknown and IRemUnknown2 interfaces, as
specified in [MS-DCOM], to obtain an IWbemRefreshingServices interface, and it adds CIM objects or
enumerators as needed. The following diagram illustrates this behavior.
192 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Figure 20: Configuring refreshing services
193 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Figure 21: Using the refresher interface
194 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
5 Security
The following sections specify security considerations for implementers of the Windows Management
Instrumentation Remote Protocol.
For all methods, the server MUST enforce that the DCOM security level is at least at the
RPC_C_AUTHN_LEVEL_CONNECT level, and SHOULD be at the RPC_C_AUTHN_LEVEL_PKT_INTEGRITY
level; the server MUST also evaluate the security principal rights to open a CIM namespace.<87>
The server MUST fail the operation if the security requirements are not met.
The server MUST secure access to each CIM namespace by using security descriptors<88> as
specified in [MS-DTYP].
The server MUST use the DCOM identity of the caller against the security descriptor of the namespace
to grant or deny the access.
The access mask that controls the security principal rights contains the following specific rights,
which are interpreted as specified in the table.
WBEM_FULL_WRITE 0x4 Grants the security principal to write to classes and instances.
WBEM_PARTIAL_WRITE_REP 0x8 Grants the security principal to update or delete CIM instances that
are static.
WBEM_REMOTE_ENABLE 0x20 Grants the security principal to remotely access the server.
WBEM_WRITE_PROVIDER 0x10 Grants the security principal to update or delete CIM instances that
are dynamic.
READ_CONTROL 0x20000 Allows the security principal to read the security descriptor of CIM
namespace.
WRITE_DAC 0x40000 Allows the security principal to modify the security descriptor of CIM
namespace.
In order to change the namespace security descriptor, a client MUST use the Windows Management
Instrumentation Remote Protocol and the required CIM object encoding, as specified in [MS-WMIO].
To query or change the security descriptor, the __SystemSecurity class methods GetSD and SetSD
defined in section 2.2.30 MUST be used. To manage the namespace security, the __SystemSecurity
class MUST be implemented at the top level of every namespace. The GetSD and SetSD methods are
invoked as specified in sections 3.1.4.3.22 and 3.1.4.3.23.
If the event object that is delivered to the WMI server (as specified in 3.2.4.2.1) contains a non-null
SECURITY_DESCRIPTOR as specified in 2.2.4.2, the server MUST secure access to the event object by
using access controls specified in the security descriptor. The access mask that controls the security
principal rights has the following specific rights, which are interpreted as specified in the following
table.
195 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Constants Value Meaning
WBEM_RIGHTS_PUBLISH 0x80 Grants the security principal permission to send events to the WMI server
as specified in 3.2.4.2.1.
WBEM_RIGHT_SUBSCRIBE 0x40 Grants the security principal permission to receive the event object using
the IWbemServices::ExecNotificationQuery or
IWbemServices::ExecNotificationQueryAsync method call. If this
permission is not granted, the client can make
IWbemServices::ExecNotificationQuery or
IWbemServices::ExecNotificationQueryAsync calls, but the event is not
delivered.
196 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
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";
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;
};
197 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
WBEM_STATUS_PROGRESS = 2
} WBEM_STATUS_TYPE;
198 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
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;
};
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,
199 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
[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(
200 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
[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
);
201 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
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
202 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
);
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
203 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
);
};
[
object,
restricted,
uuid(A359DEC5-E813-4834-8A2A-BA7F1D777D76)
]
interface IWbemBackupRestoreEx : IWbemBackupRestore
{
HRESULT Pause();
HRESULT Resume();
};
[
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;
204 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
typedef enum
{
WBEM_REFRESH_TYPE_INVALID = 0,
WBEM_REFRESH_TYPE_REMOTE = 3,
WBEM_REFRESH_TYPE_NON_HIPERF = 6
}WBEM_REFRESH_TYPE;
[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,
205 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
[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
{
206 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
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
);
207 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
};
208 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
7 Appendix B: Product Behavior
The information in this specification is applicable to the following Microsoft products or supplemental
software. References to product versions include updates to those products.
The terms "earlier" and "later", when used with a product version, refer to either all preceding
versions or all subsequent versions, respectively. The term "through" refers to the inclusive range of
versions. Applicable Microsoft products are listed chronologically in this section.
Windows Client
Windows Server
Exceptions, if any, are noted in this section. If an update version, service pack or Knowledge Base
(KB) number appears with a product name, the behavior changed in that update. The new behavior
also applies to subsequent updates unless otherwise specified. If a product edition appears with the
product version, behavior is different in that product edition.
209 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Unless otherwise specified, any statement of optional behavior in this specification that is prescribed
using the terms "SHOULD" or "SHOULD NOT" implies product behavior in accordance with the
SHOULD or SHOULD NOT prescription. Unless otherwise specified, the term "MAY" implies that the
product does not follow the prescription.
<1> Section 2.2.6: The prefix "__" is specific to Windows and is not a CIM standard.
<3> Section 2.2.13: A Windows client builds the IWbemContext object by using a set of specific
IWbemContext methods to add, delete, and enumerate properties with their respective values. The
IWbemContext methods are not used by the protocol at any time. They are used internally by the
client and the server to manage the content of the object.
The following Windows versions support the context properties in the table: Windows XP operating
system Service Pack 1 (SP1), Windows Server 2003 operating system with Service Pack 1 (SP1),
Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2 operating system.
Prior versions of Windows ignore these values.
<4> Section 2.2.13.4: 32-bit versions of Windows set the value to 4; however, 64-bit versions of
Windows set the value to 8.
<5> Section 2.2.13.4: 32-bit versions of Windows set the value to 4; however, 64-bit versions of
Windows set the value to 8.
<6> Section 2.2.14: This optimization technique is being used by Windows starting with Windows XP
and Windows Server 2003.
<7> Section 2.2.21: Windows uses the m_dwProcessId as the process identifier.
<8> Section 2.2.30.1: Windows 2000 Professional and later and Windows Server 2003 and later do
not return errors using the return value of the GetSD CIM method. Errors are returned as an error in
the IWbemServices interface method call.
<9> Section 2.2.30.2: Windows 2000 Professional and later and Windows Server 2003 and later do
not return errors using the return value of the GetSD CIM method. Errors are returned as an error in
the IWbemServices interface method call.
<10> Section 2.2.30.3: On Windows NT 4.0, Windows 2000 Professional, Windows 2000 Server,
Windows Server 2003, Windows XP, and Windows XP SP1, the RequiresEncryption qualifier is
ignored.
<11> Section 2.2.32: In Windows, the security descriptor of a namespace can be specified explicitly in
an MOF file, using the NamespaceSecuritySDDL qualifier. The qualifier is a string in the security
descriptor definition language (SDDL) format. If no NamespaceSecuritySDDL qualifier is present, the
server initializes the security descriptor for the namespace to the default value.
<13> Section 3.1.1: In Windows, the security descriptor of a namespace can be specified explicitly in
an MOF file, using the NamespaceSecuritySDDL qualifier. The qualifier is a string in the security
descriptor definition language (SDDL) format. If no NamespaceSecuritySDDL qualifier is present, the
server initializes the security descriptor for the namespace to the default value.
210 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
The security groups refer to the values defined in [MS-DTYP] section 2.4.2.4.
AUTHENTICATED_USERS
LOCAL_SERVICE
NETWORK_SERVICE
BUILTIN_ADMINISTRATORS
In Windows Server 2003, Windows XP, Windows 2000 Server, Windows 2000 Professional, and
Windows NT 4.0, the default security groups are:
BUILTIN_ADMINISTRATORS
LOCAL_SERVICE
NETWORK_SERVICE
EVERYONE
WBEM_METHOD_EXECUTE
WBEM_FULL_WRITE
WBEM_ENABLE
<14> Section 3.1.1: "WQL:References" is used in Windows NT Server, Windows NT 4.0, and Windows
2000 Server only.
<16> Section 3.1.1.1.3: Windows tries to make the call at the highest authentication level,
RPC_C_AUTHN_PKT_PRIVACY. If UnsecAppAccessControlDefault is set to false, Windows gradually
downgrades (decreasing the authentication level by one level at every call) to RPC_C_AUTHN_NONE if
the DCOM Remote Protocol (as specified in [MS-DCOM]) is unable to use the current authentication
level. The minimum authentication level for Windows 2000 Professional and Windows 2000 Server is
RPC_C_AUTHN_LEVEL_CONNECT. In Windows 2000 Professional and Windows 2000 Server, Windows
XP, and Windows Server 2003, the server does not check for the AllowAnonymousCallback flag prior
to making anonymous callbacks to the client.
In Windows Vista and later and Windows Server 2008 and later, the AllowAnonymousCallback value
will be retrieved from registry location
HKLM\SOFTWARE\Microsoft\WBEM\CIMOM\AllowAnonymousCallback. In Windows 2000 Professional
and Windows XP, the server does not check for the UnsecAppAccessControlDefault flag prior to
downgrading the authentication level.
In Windows Server 2003 and later and Windows Vista and later, the UnsecAppAccessControlDefault
value will be retrieved from registry location
HKLM\Software\Microsoft\WBEM\CIMOM\UnsecAppAccessControlDefault.
<17> Section 3.1.3: In Windows 2000 Professional, Windows 2000 Server, Windows XP, and Windows
Server 2003, this value is set to True.
<18> Section 3.1.4: The following Windows versions support ordered array types:
211 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Windows NT 4.0
<19> Section 3.1.4: Windows secures the access to each namespace and accepts only authenticated
calls made at least at the RPC_C_AUTHN_LEVEL_CONNECT level. Windows behavior across different
operating systems is specified in the following table.
Windows NT RPC_C_AUTHN_LEVEL_CONNECT
Windows XP RPC_C_AUTHN_LEVEL_PKT
<20> Section 3.1.4: Windows NT Server and Windows NT 4.0 do not allow the static properties to be
modified.
<21> Section 3.1.4: Windows allows providers to do the impersonation or do additional authentication
and authorization checks based on the security principal of the caller.
<22> Section 3.1.4: On Windows NT 4.0, Windows 2000, Windows Server 2003, Windows XP, and
Windows XP SP1, the RequiresEncryption qualifier is ignored.
<23> Section 3.1.4: In Windows Server 2008 and Windows Server 2008 R2, if the number of active
IWbemService objects for root\virtualization namespace is more than 4096, the server returns
WBEM_E_QUOTA_VIOLATION.
<24> Section 3.1.4: Windows 2000, Windows XP, Windows Server 2003, Windows Vista, Windows
Server 2008, and Windows 7 do not use this.
<25> Section 3.1.4: Windows 2000, Windows XP, Windows Server 2003, Windows Vista, Windows
Server 2008, and Windows 7 do not use this.
<26> Section 3.1.4: Windows 2000, Windows XP, Windows Server 2003, Windows Vista, Windows
Server 2008, and Windows 7 do not set this option. Windows 8 and later and Windows Server 2012
and later set this option when WMI C-Client APIs are used but not when the IWbemServices COM
interface is used.
<27> Section 3.1.4.1.1: If the server accepts as a locale parameter for the
IWbemLevel1Login::NTLMLogin method all locales valid for Windows Vista as defined in Appendix A of
[MS-LCID], the server returns WBEM_S_NO_ERROR for IWbemLevel1Login::EstablishPosition.
<28> Section 3.1.4.1.1: If the server returns WBEM_E_INVALID_PARAMETER for any valid Windows
Vista locales as specified in Appendix A of [MS-LCID] that has been passed as a locale parameter to
the IWbemLevel1Login::NTLMLogin method while all other parameters are valid, the server returns
E_NOTIMPL for IWbemLevel1Login::EstablishPosition.
<29> Section 3.1.4.1.4: In Windows, it is the Windows system locale of the server.
212 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
<30> Section 3.1.4.1.4: Windows 2000 and later and Windows XP and later fail the call and return
0x80041008 (WBEM_E_INVALID_PARAMETER) if the locale name does not match one of the WMI
Locale Formats (section 2.2.29), or if the locale name is not valid for that operating system.
If the locale name is in the "MS_xxx" format but refers to an LCID, Windows Vista and later and
Windows Server 2008 and later fail the call and return 0x80070057 (E_INVALIDARG).
If the locale is in "MS_xxx" format as defined in section 2.2.29 and the LCID is not valid for Windows
7, Windows Server 2008 R2, Windows 8, or Windows Server 2012, Windows fails the call and returns
E_INVALIDARG. If the locale string is not in "MS_xxx" format and it is not a valid locale for Windows 7
and later and Windows Server 2008 R2 and later, the locale is ignored.
<31> Section 3.1.4.1.4: Windows clients always set lFlags to 0. The server role of Windows 2000
returns WBEM_E_INVALID_PARAMETER for a nonzero value of lFlags. The server roles of Windows XP
and later and Windows Server 2003 and later allow lFlags to be 0 or any combination of the flags
WBEM_FLAG_CONNECT_PROVIDERS and WBEM_FLAG_CONNECT_REPOSITORY_ONLY.
<32> Section 3.1.4.1.4: The following Windows client versions do not enforce a limit:
Windows NT 4.0
Windows XP
Windows XP SP1
The following versions of Windows enforce a query string limit of 8173 characters (WBEM_MAX_PATH
-19, where WBEM_MAX_PATH = 0x2000 and the 19 characters represent the length of the string
__namespace.name=""):
<33> Section 3.1.4.1.4: Windows uses the system's locale as described in [MSDN-
GetSystemDefaultLangID].
<34> Section 3.1.4.3.6: Windows does not ignore the amended qualifiers while it creates a CIM
class; however, it does ignore all the amended qualifiers while it updates a class. Because the
amended qualifiers are not ignored while Windows creates a CIM class, when this CIM class is
retrieved by using IWbemServices::GetObject or IWbemServices::GetObjectAsync (retrieved even
without using the WBEM_FLAG_USE_AMENDED_QUALIFIERS flag), the returned class contains
amended qualifiers.
<35> Section 3.1.4.3.6: Windows client versions Windows NT 4.0, Windows 2000 Professional,
Windows XP, and server versions Windows NT Server 4.0, Windows 2000 Server, and Windows Server
2003, and Windows Server 2003 with SP1 do not enforce a limit.
The following versions of Windows enforce a query string limit of 4096 characters
(WBEM_MAX_IDENTIFIER = 0x1000):
213 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Windows Server 2003 SP2 and later
<36> Section 3.1.4.3.7: Windows does not ignore the amended qualifiers while it creates a CIM class;
however, it does ignore all the amended qualifiers while it updates a class. Because the amended
qualifiers are not ignored while Windows creates a CIM class, when this CIM class is retrieved by using
IWbemServices::GetObject or IWbemServices::GetObjectAsync (retrieved even without using the
WBEM_FLAG_USE_AMENDED_QUALIFIERS flag), the returned class contains amended qualifiers.
<37> Section 3.1.4.3.7: Windows client versions Windows NT 4.0, Windows 2000 Professional,
Windows XP, and server versions Windows NT Server 4.0, Windows 2000 Server, Windows Server
2003, and Windows Server 2003 with SP1 do not enforce a limit.
The following versions of both client and server enforce a query string limit of 4096 characters
(WBEM_MAX_IDENTIFIER = 0x1000):
<38> Section 3.1.4.3.8: The following Windows versions do not enforce a limit:
Windows NT 4.0
Windows 2000
Windows XP
The following Windows versions enforce a query string limit of 4096 characters
(WBEM_MAX_IDENTIFIER = 0x1000):
<39> Section 3.1.4.3.9: The following Windows versions do not enforce a limit:
Windows NT 4.0
Windows 2000
Windows XP
The following Windows versions enforce a query string limit of 4,096 characters
(WBEM_MAX_IDENTIFIER = 0x1000):
<40> Section 3.1.4.3.10: The following Windows versions do not enforce a limit:
Windows NT 4.0
214 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Windows 2000
Windows XP
These Windows versions enforce a query string limit of 4096 characters (WBEM_MAX_IDENTIFIER =
0x1000):
<41> Section 3.1.4.3.11: The following Windows versions do not enforce a limit:
Windows NT 4.0
Windows 2000
Windows XP
These Windows versions enforce a query string limit of 4096 characters (WBEM_MAX_IDENTIFIER =
0x1000):
<42> Section 3.1.4.3.12: Windows client versions Windows NT 4.0, Windows 2000 Professional,
Windows XP, and server versions Windows NT Server 4.0, Windows 2000 Server, Windows Server
2003 and Windows Server 2003 with SP1 do not enforce a limit.
The following versions of both client and server enforce a query string limit of 8192 characters
(WBEM_MAX_PATH = 0x2000):
<43> Section 3.1.4.3.13: Windows client versions Windows NT 4.0, Windows 2000 Professional,
Windows XP, and server versions Windows NT Server 4.0, Windows 2000 Server, Windows Server
2003, and Windows Server 2003 with SP1 do not enforce a limit.
The following versions of Windows enforce a query string limit of 8,192 characters (WBEM_MAX_PATH
= 0x2000):
<44> Section 3.1.4.3.14: The following Windows versions do not enforce a limit:
Windows NT 4.0
Windows 2000
Windows XP
215 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Windows Server 2003
These Windows versions enforce a query string limit of 8192 characters (WBEM_MAX_PATH =
0x2000):
<45> Section 3.1.4.3.15: The following Windows versions do not enforce a limit:
Windows NT 4.0
Windows 2000
Windows XP
These Windows versions enforce a query string limit of 8,192 characters (WBEM_MAX_PATH =
0x2000):
<46> Section 3.1.4.3.16: The following Windows versions do not enforce a limit:
Windows NT 4.0
Windows 2000
Windows XP
These Windows versions enforce a query string limit of 4096 characters (WBEM_MAX_IDENTIFIER =
0x1000):
<47> Section 3.1.4.3.17: The following Windows versions do not enforce a limit:
Windows NT 4.0
Windows 2000
Windows XP
These Windows versions enforce a query string limit of 4,096 characters (WBEM_MAX_IDENTIFIER =
0x1000):
216 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Windows Server 2003 SP2 and later
<48> Section 3.1.4.3.18: The following Windows versions do not enforce a limit:
Windows NT 4.0
Windows 2000
Windows XP
These Windows versions enforce a query string limit of 16384 characters (WBEM_MAX_QUERY =
0x4000):
<49> Section 3.1.4.3.18: Keysonly is not available in the following products: Windows 95 operating
system, Windows NT 4.0, Windows 98 operating system, Windows Millennium Edition operating
system, and Windows 2000.
<50> Section 3.1.4.3.18: Keysonly is not available in the following products: Windows 95, Windows
NT 4.0, Windows 98, Windows Millennium Edition, and Windows 2000.
<51> Section 3.1.4.3.19: The following Windows versions do not enforce a limit:
Windows NT 4.0
Windows 2000
Windows XP
Windows XP SP1
These Windows versions enforce a query string limit of 16,384 characters (WBEM_MAX_QUERY =
0x4000):
<52> Section 3.1.4.3.20: In the following versions of Windows, the interval is first converted to a
double, then multiplied by 1000, and then converted to a 32-bit unsigned integer. This has the effect
of truncating out-of-range values without generating an error.
Windows 2000
Windows XP
217 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Windows 7
Windows 8
<53> Section 3.1.4.3.20: The following Windows versions do not enforce a limit:
Windows NT 4.0
Windows 2000
Windows XP
These Windows versions enforce a query string limit of 16384 characters (WBEM_MAX_QUERY =
0x4000):
<54> Section 3.1.4.3.21: The following Windows versions do not enforce a limit:
Windows NT 4.0
Windows 2000
Windows XP
These Windows versions enforce a query string limit of 16,384 characters (WBEM_MAX_QUERY =
0x4000):
<55> Section 3.1.4.3.21: In the following versions of Windows, the interval is first converted to a
double, then multiplied by 1000, and then converted to a 32-bit unsigned integer. This has the effect
of truncating out-of-range values without generating an error.
Windows 2000
Windows XP
Windows 7
218 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Windows 8
<56> Section 3.1.4.8.1: Applicable Windows Server releases record lClientProcId for debugging
purposes.
<57> Section 3.1.4.9.1: A WMI server in Windows 2000 and Windows XP signals a Windows kernel
event with the specified name. The valid values for the sEventToSet parameter of
IWbemLoginHelper::SetEvent are all the valid values for the lpName parameter to the OpenEvent
function, as defined in [MSDN-OpenEvent]. If the client can detect that the event is set at the end of
the IWbemLoginHelper::SetEvent method call, the client identifies that the server is running in the
same server. If the client and server are running on different machines, the Windows event by the
specified name will not be set on the client machine, and the client can then identify that the server is
running on another machine.
<58> Section 3.1.4.10.1: Applicable Windows Server releases require an absolute file path that starts
with a drive letter.
<59> Section 3.1.4.10.1: Windows allows users that have the SE_BACKUP_PRIVILEGE privilege to
perform the backup operation.
<60> Section 3.1.4.10.2: Applicable Windows Server releases require an absolute file path that starts
with a drive letter.
<61> Section 3.1.4.10.2: Windows allows users that have the SE_RESTORE_PRIVILEGE privilege to
perform the restore operation.
<62> Section 3.1.4.11: This interface is not supported in Windows NT 4.0 and Windows 2000.
<63> Section 3.1.4.12: The IWbemRefreshingServices interface is not available in Windows NT 4.0,
Windows 2000, or Windows 2000 Server.
<68> Section 3.1.4.12.4: Windows does not implement this method and returns a
WBEM_E_NOT_AVAILABLE error code.
<71> Section 3.1.4.13: The IWbemRemoteRefresher interface is not available in Windows NT 4.0,
Windows 2000, or Windows 2000 Server.
<72> Section 3.1.4.13.3: The Opnum5NotUsedOnWire method is not used by Windows and therefore
is not required for an implementation.
<73> Section 3.1.4.17: Windows 2000, Windows XP, Windows Server 2003, Windows Vista, Windows
Server 2008, and Windows 7 do not use this.
<74> Section 3.1.4.17: Windows 2000, Windows XP, Windows Server 2003, Windows Vista, Windows
Server 2008, and Windows 7 do not use this.
219 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
<75> Section 3.1.4.17.11: In Windows XP, Windows Server 2003, Windows Vista, and Windows
Server 2008, the default is IN when IN/IN,OUT/OUT is not specified for a method parameter.
<76> Section 3.1.4.18.1: Windows initializes the security descriptor for the namespace to the
following values.
Authenticated Users
LOCAL SERVICE
NETWORK SERVICE
In Windows Server 2003, Windows XP, Windows 2000 and Windows NT 4.0, the default security
groups are:
Administrators
LOCAL SERVICE
NETWORK SERVICE
Everyone
The default access permissions for the Authenticated Users, LOCAL SERVICE, and NETWORK SERVICE
are:
Execute Methods
Full Write
Enable Account
<77> Section 3.2.3: Windows clients pass the client process ID in the lClientProcId parameter.
<78> Section 3.2.3: Windows 2000 and Windows XP clients obtain the IWbemLoginHelper interface
by using the IRemUnknown and IRemUnknown2 interfaces, as specified in [MS-DCOM] sections
3.1.1.5.6 and 3.1.1.5.7, on the IWbemLevel1Login interface.
If the server returns an error during the attempt to use IRemUnknown and IRemUnknown2 to obtain
an IWbemLoginHelper interface, the client ignores the error. The client calls
IWbemLoginHelper::SetEvent to determine whether both the client and server are running on the
same machine.
The valid values for the sEventToSet parameter of IWbemLoginHelper::SetEvent are all the valid
values for the lpName parameter to the OpenEvent function as defined in [MSDN-OpenEvent]. If the
client can detect that the event is set at the end of the IWbemLoginHelper::SetEvent method call, the
client can identify that both the client and server are running on the same machine. If the client and
server are running on different machines, the Windows event by the specified name is not set on the
client machine, and the client can then identify that the server is running on another machine.
<80> Section 3.2.4: Windows 2000, Windows XP, Windows Server 2003, Windows Vista, Windows
Server 2008, and Windows 7 do not set the option. Windows 8 does set the option when WMI C-Client
APIs are used but not when the IWbemServices COM interface is used.
220 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
<81> Section 3.2.4.1.1: Windows attempts to batch object delivery. The algorithm is complex;
however, the maximum batch size, in bytes, can be set by editing the registry value for
FinalizerBatchSize under the HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Wbem\CIMOM registry
subkey. If FinalizerBatchSize is not specified, the default value, 262144 (0x40000), is used.
<83> Section 4.2.2: In this context, unoptimized client behavior is client behavior in Windows 2000
and Windows 2000 Server.
<84> Section 4.2.2: In this context, optimized client behavior is client behavior in the following
Windows versions:
Windows XP SP1
<85> Section 4.2.2: In this context, unoptimized server behavior is server behavior in Windows 2000
and Windows 2000 Server.
<86> Section 4.2.2: Optimized server behavior in this context is server behavior in the following
Windows versions:
Windows XP SP1
<87> Section 5.1: Windows secures the access to each namespace and accepts only authenticated
calls made at least at the RPC_C_AUTHN_LEVEL_CONNECT level. Windows behavior across different
operating systems is specified in the following table.
Windows NT RPC_C_AUTHN_LEVEL_CONNECT
Windows XP RPC_C_AUTHN_LEVEL_PKT
<88> Section 5.2: In Windows, local administrators are implicitly granted all rights that are specified
in the table in section 5.2.
221 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
8 Appendix C: Additional Error Codes
The following status codes are defined by WMI, but are either unused or used only in local client
scenarios:
222 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Status Code Value Used?
223 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Status Code Value Used?
224 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
Status Code Value Used?
225 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
9 Appendix D: Enumerating Class Schema
The following script shows how to enumerate the current class schemas on a Windows machine:
EnumerateSchema "root"
sub EnumerateSchema(ns)
if instr(ns,"LDAP") = 0 then
wscript.echo "#pragma namespace(""\\\\.\\" & escapeit(ns) &
""")"
set wmi = getobject("winmgmts:\\.\" & ns)
for each cls in wmi.subclassesof("")
wscript.echo cls.getobjecttext_(0)
next
function escapeit(ns)
escapeit = replace(ns, "\", "\\")
end function
2. From a cmd.exe window, type "cscript getmofs.vbs > schema.mof". On Windows versions that
support the Windows Integrity Mechanism, including the Windows Vista operating system and
later versions, the CMD window is required to be "elevated", that is, run with administrative
privileges.
The resulting output (in schema.mof) represents all of the class schemas on the particular system.
226 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
10 Change Tracking
This section identifies changes that were made to this document since the last release. Changes are
classified as Major, Minor, or None.
The revision class Major means that the technical content in the document was significantly revised.
Major changes affect protocol interoperability or implementation. Examples of major changes are:
The revision class Minor means that the meaning of the technical content was clarified. Minor changes
do not affect protocol interoperability or implementation. Examples of minor changes are updates to
clarify ambiguity at the sentence, paragraph, or table level.
The revision class None means that no new technical changes were introduced. Minor editorial and
formatting changes may have been made, but the relevant technical content is identical to the last
released version.
The changes made to this document are listed in the following table. For more information, please
contact [email protected].
7 Appendix B: Product Behavior Updated for this version of Windows Client. Major
227 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
11 Index
_ default system classes 51
IWbemClassObject interface 27
__SystemSecurity class 50 IWbemContext interface 36
_WBEM_RECONNECT_INFO structure 48 locale formats 50
_WBEM_RECONNECT_RESULTS structure 48 ObjectArray structure 41
_WBEM_REFRESH_INFO structure 47 RefreshedInstances packet 46
_WBEM_REFRESH_INFO_NON_HIPERF structure 49 RefreshedSingleInstance packet 47
_WBEM_REFRESH_INFO_REMOTE structure 49 return codes 26
_WBEM_REFRESH_TYPE enumeration 49 supported qualifiers 52
_WBEM_REFRESHER_ID structure 47 SystemSecurity class 50
WBEM_BACKUP_RESTORE_FLAGS enumeration 32
A WBEM_CHANGE_FLAG_TYPE enumeration 29
WBEM_CONNECT_OPTIONS enumeration 36
Abstract data model WBEM_GENERIC_FLAG_TYPE enumeration 29
client 153 WBEM_INSTANCE_BLOB enumeration 46
server 56 WBEM_INSTANCE_BLOB_TYPE enumeration 46
Abstract Provider Interface method 147 WBEM_QUERY_FLAG_TYPE enumeration 31
AddEnumToRefresher method 138 WBEM_RECONNECT_INFO structure 48
Additional error codes 222 WBEM_RECONNECT_RESULTS structure 48
AddObjectToRefresher method 135 WBEM_RECONNECT_TYPE enumeration 48
AddObjectToRefresherByTemplate method 137 WBEM_REFRESH_INFO structure 47
Applicability 17 WBEM_REFRESH_INFO_NON_HIPERF structure 49
Asynchronous delivery example 190 WBEM_REFRESH_INFO_REMOTE structure 49
Asynchronous delivery of results example 190 WBEM_REFRESH_INFO_UNION union 50
WBEM_REFRESH_TYPE enumeration 49
B WBEM_REFRESHED_OBJECT structure 45
WBEM_REFRESHER_ID structure 47
Backup method 132 WBEM_STATUS_TYPE enumeration 30
WBEM_TIMEOUT_TYPE enumeration 31
WBEMSTATUS enumeration 32
C
WQL query 18
Configuring refreshing services example 192
CancelAsyncCall method 77
CreateClassEnum method 90
Capability negotiation 17
CreateClassEnumAsync method 91
Change tracking 227
CreateInstanceEnum method 101
CIM path and namespace 25
CreateInstanceEnumAsync method 103
Client
CreateObjectStub method 146
abstract data model 153
CreateSinkStub method 147
initialization 153
IUnsecuredApartment Interface Client Details
method 161 D
IWbemBackupRestore Interface Client Details
method 159 Data model - abstract
IWbemBackupRestoreEx Interface Client Details client 153
method 159 server 56
IWbemObjectSink Interface Client Details method Data types
154 CIM path and namespace 25
IWbemRefreshingServices Interface Client Details default system classes 51
method 159 IWbemClassObject interface 27
IWbemShutdown Interface Client Details method IWbemContext interface 36
161 locale formats 50
IWbemUnsecuredApartment Interface Client ObjectArray structure 41
Details method 161 RefreshedInstances packet 46
local events 161 RefreshedSingleInstance packet 47
message processing 153 return codes 26
overview 55 supported qualifiers 52
sequencing rules 153 SystemSecurity class 50
timer events 161 WBEM_BACKUP_RESTORE_FLAGS enumeration 32
timers 153 WBEM_CHANGE_FLAG_TYPE enumeration 29
Clone method 121 WBEM_CONNECT_OPTIONS enumeration 36
Common data types WBEM_GENERIC_FLAG_TYPE enumeration 29
CIM path and namespace 25 WBEM_INSTANCE_BLOB enumeration 46
228 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
WBEM_INSTANCE_BLOB_TYPE enumeration 46 GetCallStatus method 126
WBEM_QUERY_FLAG_TYPE enumeration 31 GetObject method 78
WBEM_RECONNECT_INFO structure 48 GetObjectAsync method 80
WBEM_RECONNECT_RESULTS structure 48 GetRemoteRefresher method 140
WBEM_RECONNECT_TYPE enumeration 48 GetResultObject method 123
WBEM_REFRESH_INFO structure 47 GetResultServices method 125
WBEM_REFRESH_INFO_NON_HIPERF structure 49 GetResultString method 124
WBEM_REFRESH_INFO_REMOTE structure 49 GetSD method 50
WBEM_REFRESH_INFO_UNION union 50 GetSmartEnum method 127
WBEM_REFRESH_TYPE enumeration 49 Glossary 9
WBEM_REFRESHED_OBJECT structure 45
WBEM_REFRESHER_ID structure 47 I
WBEM_STATUS_TYPE enumeration 30
WBEM_TIMEOUT_TYPE enumeration 31 IDL 197
WBEMSTATUS enumeration 32 IEnumWbemClassObject Interface method 117
WQL query 18 Implementer - security considerations 195
Default system classes 51 Index of security parameters 195
DeleteClass method 87 Indicate method 72
DeleteClassAsync method 89 Informative references 13
DeleteInstance method 98 Initialization
DeleteInstanceAsync method 100 client 153
server 64
E Initialization examples
captures 165
Error codes - additional 222 overview 162
EstablishPosition method 68 trace 163
Events Introduction 9
local IUnsecuredApartment Interface Client Details
client 161 method 161
server 152 IUnsecuredApartment Interface method 145
local - client 161 IWbemBackupRestore Interface Client Details
local - server 152 method 159
timer IWbemBackupRestore Interface method 131
client 161 IWbemBackupRestoreEx Interface Client Details
server 151 method 159
timer - client 161 IWbemBackupRestoreEx Interface method 133
timer - server 151 IWbemCallResult Interface method 123
Examples IWbemClassObject interface 27
asynchronous delivery 190 IWbemContext interface 36
asynchronous delivery of results 190 IWbemFetchSmartEnum Interface method 127
configuring refresher services 192 IWbemLevel1Login Interface method 67
configuring refreshing services 192 IWbemLevel1Login::EstablishPosition (Opnum 3) 68
initialization 162 IWbemLevel1Login::RequestChallenge (Opnum 4) 69
optimized asynchronous delivery 191 IWbemLevel1Login::WBEMLogin (Opnum 5) 69
optimized asynchronous delivery of results 191 IWbemLoginClientID Interface method 130
overview 162 IWbemLoginHelper Interface method 130
protocol initialization 162 IWbemObjectSink Interface Client Details method
refresher interface 193 154
semisynchronous operations 179 IWbemObjectSink Interface Server Details method
synchronous operations 165 71
using the refresher interface 193 IWbemRefreshingServices Interface Client Details
ExecMethod method 114 method 159
ExecMethodAsync method 116 IWbemRefreshingServices Interface method 135
ExecNotificationQuery method 110 IWbemRemoteRefresher Interface method 142
ExecNotificationQueryAsync method 112 IWbemServices Interface method 73
ExecQuery method 104 IWbemShutdown Interface Client Details method 161
ExecQueryAsync method 108 IWbemShutdown Interface method 144
IWbemUnsecuredApartment Interface Client Details
F method 161
IWbemUnsecuredApartment Interface method 146
Fields - vendor-extensible 17 IWbemWCOSmartEnum Interface method 128
Full IDL 197
L
G
Local events
229 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
client 161 IWbemRefreshingServices Interface Client Details
server 152 159
Locale formats 50 IWbemRemoteRefresher Interface 142
IWbemServices Interface 73
M IWbemShutdown Interface 144
IWbemShutdown Interface Client Details 161
Message processing IWbemUnsecuredApartment Interface 146
client 153 IWbemUnsecuredApartment Interface Client
server 64 Details 161
Messages IWbemWCOSmartEnum Interface 128
common data types Namespaces 150
CIM path and namespace 25
default system classes 51 N
IWbemClassObject interface 27
IWbemContext interface 36 Namespaces method 150
locale formats 50 Next method (section 3.1.4.4.2 119, section
ObjectArray structure 41 3.1.4.7.1 128)
RefreshedInstances packet 46 NextAsync method 120
RefreshedSingleInstance packet 47 Normative references 12
return codes 26 NTLMLogin method 70
supported qualifiers 52
SystemSecurity class 50 O
WBEM_BACKUP_RESTORE_FLAGS enumeration
32 ObjectArray packet 41
WBEM_CHANGE_FLAG_TYPE enumeration 29 OpenNamespace method 75
WBEM_CONNECT_OPTIONS enumeration 36 Opnum5NotUsedOnWire method 144
WBEM_GENERIC_FLAG_TYPE enumeration 29 Optimized asynchronous delivery example 191
WBEM_INSTANCE_BLOB enumeration 46 Optimized asynchronous delivery of results example
WBEM_INSTANCE_BLOB_TYPE enumeration 46 191
WBEM_QUERY_FLAG_TYPE enumeration 31 Overview (synopsis) 13
WBEM_RECONNECT_INFO structure 48
WBEM_RECONNECT_RESULTS structure 48 P
WBEM_RECONNECT_TYPE enumeration 48
WBEM_REFRESH_INFO structure 47 Parameter index - security 195
WBEM_REFRESH_INFO_NON_HIPERF structure Parameters - security index 195
49 Pause method 134
WBEM_REFRESH_INFO_REMOTE structure 49 Preconditions 16
WBEM_REFRESH_INFO_UNION union 50 Prerequisites 16
WBEM_REFRESH_TYPE enumeration 49 Product behavior 209
WBEM_REFRESHED_OBJECT structure 45 Protocol Details
WBEM_REFRESHER_ID structure 47 overview 55
WBEM_STATUS_TYPE enumeration 30 Protocol initialization example 162
WBEM_TIMEOUT_TYPE enumeration 31 PutClass method 82
WBEMSTATUS enumeration 32 PutClassAsync method 85
WQL query 18 PutInstance method 93
overview 18 PutInstanceAsync method 96
transport 18
Methods Q
Abstract Provider Interface 147
IEnumWbemClassObject Interface 117 Qualifiers 52
IUnsecuredApartment Interface 145 QueryObjectSink method 77
IUnsecuredApartment Interface Client Details 161
IWbemBackupRestore Interface 131
R
IWbemBackupRestore Interface Client Details 159
IWbemBackupRestoreEx Interface 133
ReconnectRemoteRefresher method 141
IWbemBackupRestoreEx Interface Client Details
References 12
159
informative 13
IWbemCallResult Interface 123
normative 12
IWbemFetchSmartEnum Interface 127
RefreshedInstances packet 46
IWbemLevel1Login Interface 67
RefreshedSingleInstance packet 47
IWbemLoginClientID Interface 130
Refresher interface example 193
IWbemLoginHelper Interface 130
Relationship to other protocols 16
IWbemObjectSink Interface Client Details 154
RemoteRefresh method 142
IWbemObjectSink Interface Server Details 71
RemoveObjectFromRefresher method 139
IWbemRefreshingServices Interface 135
230 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
RequestChallenge method 69 delivery of result sets
Reset method 118 optimized client and optimized server 168
Restore method 133 optimized client and unoptimized server 170
Resume method 134 overview 166
unoptimized client and optimized server 167
S unoptimized client and unoptimized server 166
delivery of single result 166
Security delivery traces
implementer considerations 195 delivery of IWbemServices ExecQuery and
overview 195 ExecMethod operations 171
parameter index 195 delivery of IwbemServices
Semisynchronous operations example 179 PutInstance/DeleteInstance/CreateInstanceEnu
Semisynchronous operations examples m operations 174
delivery of result sets 180 overview 165
delivery of single result 179 System classes 51
delivery traces SystemSecurity class 50
delivery of IWbemServices ExecQuery and
ExecMethod operations 180 T
delivery of IwbemServices
PutInstance/DeleteInstance/CreateInstanceEnu Timer events
m operations 185 client 161
overview 179 server 151
Sequencing rules Timers
client 153 client 153
server 64 server 63
Server Tracking changes 227
abstract data model 56 Transport 18
Abstract Provider Interface method 147 Transport - message 18
IEnumWbemClassObject Interface method 117
initialization 64 U
IUnsecuredApartment Interface method 145
IWbemBackupRestore Interface method 131 Using the refresher interface example 193
IWbemBackupRestoreEx Interface method 133
IWbemCallResult Interface method 123 V
IWbemFetchSmartEnum Interface method 127
IWbemLevel1Login Interface method 67 Vendor-extensible fields 17
IWbemLoginClientID Interface method 130 Versioning 17
IWbemLoginHelper Interface method 130
IWbemObjectSink Interface Server Details method W
71
IWbemRefreshingServices Interface method 135 WBEM_BACKUP_RESTORE_FLAGS enumeration 32
IWbemRemoteRefresher Interface method 142 WBEM_CHANGE_FLAG_TYPE enumeration 29
IWbemServices Interface method 73 WBEM_CONNECT_OPTIONS enumeration 36
IWbemShutdown Interface method 144 WBEM_DATAPACKET_OBJECT packet 43
IWbemUnsecuredApartment Interface method 146 WBEM_GENERIC_FLAG_TYPE enumeration 29
IWbemWCOSmartEnum Interface method 128 WBEM_INSTANCE_BLOB packet 46
local events 152 WBEM_INSTANCE_BLOB_TYPE enumeration 46
message processing 64 WBEM_QUERY_FLAG_TYPE enumeration 31
Namespaces method 150 WBEM_RECONNECT_TYPE enumeration 48
overview (section 3 55, section 3.1 55) WBEM_REFRESHED_OBJECT structure 45
sequencing rules 64 WBEM_S_FALSE 26
timer events 151 WBEM_S_NEW_STYLE 26
timers 63 WBEM_S_NO_ERROR 26
SetClientInfo method 130 WBEM_S_TIMEDOUT 26
SetEvent method 131 WBEM_STATUS_TYPE enumeration 30
SetSD method 51 WBEM_TIMEOUT_TYPE enumeration 31
SetStatus method 72 WBEMLogin method 69
Shutdown method 145 WBEMOBJECT_CLASS packet 43
Skip method 122 WBEMOBJECT_INSTANCE packet 44
Standards assignments 17 WBEMOBJECT_INSTANCE_NOCLASS packet 44
Status codes - additional 222 WBEMSTATUS enumeration 32
StopRefreshing method 143 WQL event query 23
Supported qualifiers 52 WQL query 18
Synchronous operations example 165 WQL schema and data query 18
Synchronous operations examples
231 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021
232 / 232
[MS-WMI] - v20210625
Windows Management Instrumentation Remote Protocol
Copyright © 2021 Microsoft Corporation
Release: June 25, 2021