MS Wmi
MS Wmi
MS Wmi
No Trade Secrets. Microsoft does not claim any trade secret rights in this documentation.
Patents. Microsoft has patents that might cover your implementations of the technologies
described in the Open Specifications documentation. Neither this notice nor Microsoft's delivery of
this documentation grants any licenses under those patents or any other Microsoft patents.
However, a given Open Specifications document might be covered by the Microsoft Open
Specifications Promise or the Microsoft Community Promise. If you would prefer a written license,
or if the technologies described in this documentation are not covered by the Open Specifications
Promise or Community Promise, as applicable, patent licenses are available by contacting
[email protected].
Trademarks. The names of companies and products contained in this documentation might be
covered by trademarks or similar intellectual property rights. This notice does not grant any
licenses under those rights. For a list of Microsoft trademarks, visit
www.microsoft.com/trademarks.
Fictitious Names. The example companies, organizations, products, domain names, email
addresses, logos, people, places, and events that are depicted in this documentation are fictitious.
No association with any real company, organization, product, domain name, email address, logo,
person, place, or event is intended or should be inferred.
Reservation of Rights. All other rights are reserved, and this notice does not grant any rights other
than as specifically described above, whether by implication, estoppel, or otherwise.
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 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
Revision Summary
Date
Revision
History
Revision
Class
Comments
3/2/2007
1.0
New
4/3/2007
1.1
Minor
5/11/2007
1.2
Minor
6/1/2007
1.2.1
Editorial
7/3/2007
1.2.2
Editorial
8/10/2007
1.2.3
Editorial
9/28/2007
1.3
Minor
10/23/2007
2.0
Major
1/25/2008
2.1
Minor
3/14/2008
3.0
Major
6/20/2008
4.0
Major
7/25/2008
4.1
Minor
8/29/2008
5.0
Major
10/24/2008
5.1
Minor
12/5/2008
5.2
Minor
1/16/2009
5.3
Minor
2/27/2009
5.4
Minor
4/10/2009
6.0
Major
5/22/2009
7.0
Major
7/2/2009
8.0
Major
8/14/2009
8.1
Minor
9/25/2009
8.2
Minor
11/6/2009
9.0
Major
12/18/2009
10.0
Major
1/29/2010
11.0
Major
3/12/2010
11.1
Minor
4/23/2010
12.0
Major
6/4/2010
13.0
Major
7/16/2010
13.0
None
2 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
Date
Revision
History
Revision
Class
Comments
8/27/2010
14.0
Major
10/8/2010
15.0
Major
11/19/2010
16.0
Major
1/7/2011
17.0
Major
2/11/2011
18.0
Major
3/25/2011
19.0
Major
5/6/2011
20.0
Major
6/17/2011
20.1
Minor
9/23/2011
21.0
Major
12/16/2011
22.0
Major
3/30/2012
23.0
Major
7/12/2012
24.0
Major
10/25/2012
25.0
Major
1/31/2013
25.0
None
8/8/2013
26.0
Major
11/14/2013
26.0
None
2/13/2014
26.0
None
5/15/2014
26.0
None
6/30/2015
27.0
Major
10/16/2015
27.0
None
7/14/2016
27.0
None
3 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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
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 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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 ...............................................................129
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) ..........................................130
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 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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 ...................................................................................152
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 ...............................................153
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 .........156
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
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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
8 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
Introduction
1.1
Glossary
9 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
class identifier (CLSID): A GUID that identifies a software component; for instance, a DCOM
object class (4) 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 objectoriented 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 [DMTFDSP0004].
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 [MSDCOM].
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.
extrinsic event: An event that is generated by a component outside the implementation.
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.
interface pointer: A pointer to an interface that is implemented by an [MS-DCOM] object.
intrinsic event: An event that defines an event generated by the implementation itself.
10 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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.
manageable entity: A Common Information Model (CIM) instance that represents a
manageable component of an operating system.
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 [MSRPCE].
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): A Windows-specific API implementation that
provides the means for connected applications to call one of several security providers to
establish authenticated connections and to exchange data securely over those connections. This
is the Windows equivalent of Generic Security Services (GSS)-API, and the two families of APIs
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.
superclasses and subclasses: Types of Common Information Model (CIM) classes. A
subclass is derived from a superclass. The subclasses inherit all features of its superclass but
can add new features or redefine existing ones. A superclass is the CIM class from which a CIM
class inherits.
synchronous operation: An operation that is executed on the server side while the client is
waiting for the response message.
Unicode character: Unless otherwise specified, a 16-bit UTF-16 code unit.
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
11 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
known as globally unique identifiers (GUIDs) and these terms are used interchangeably in
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.
Windows Management Instrumentation (WMI): The Microsoft implementation of Common
Information Model (CIM), as specified in [DMTF-DSP0004]. WMI allows an administrator to
manage local and remote machines and models computer and network objects using an
extension of the CIM standard.
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.
[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", 2006,
http://www.unicode.org/
1.3
Overview
13 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
14 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
Synchronous calls
15 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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].
1.4
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.
An implementation of the DCOM Remote Protocol, as specified in [MS-DCOM], needs to be available.
16 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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.
1.7
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.
1.8
Vendor-Extensible Fields
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.
1.9
Standards Assignments
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 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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.
2.2
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 caseinsensitive, contrary to what [DMTF-DSP0004] specifies.
The next section specifies the complete syntax of WQL queries for schema, data, and event queries.
19 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
Description
UNICODE-STRING
A string constant with Unicode characters. This string constant is surrounded by ("") or
a ('').
CLASS-NAME
PROPERTY-NAME
QUALIFIER-NAME
DATA-WQL
A string expressing the WQL query. The WQL string uses different WQL reserved
keywords to select the type of information desired.
SELECT
PROPERTY-LIST
ASTERISK
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-SEL-WHERE
OPTIONAL-METAWHERE
The WHERE statement narrows the scope of a SELECT. The WHERE statement followed
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
20 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
Description
made out of the CLASS-NAME.
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-ASSOCWHERE
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
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.
KeysOnly
ClassDefsOnly
AssocClass
RequiredAssocQualifier
ResultClass
Role
21 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
Description
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
the CIM instances.
Applicable
Type
Operator
Description
string, numeric,
reference,
datetime
!=
string, numeric,
reference,
datetime
>
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
typed-constant.
string, numeric,
datetime
<=
Test whether the value of the property is less than or equal to that of the typedconstant.
string, numeric,
datetime
LIKE
Test whether a given character string of the property value matches a specified
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.
string
IS
string, numeric,
reference,
datetime, object
IS NOT
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.
The following characters have special meaning within a LIKE clause:
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".
22 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
Character
Description
A non-caret followed by "-" or "=" followed by the terminating "]" matches the two literal
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).
<COMPARE-OPERATOR>
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 = "__"
CLASS-NAME = [DOUBLEUNDERSCORE]<STRING-IDENTIFIER>
EVENT-CLASS-NAME = [DOUBLEUNDERSCORE]<STRING-IDENTIFIER>
PROPERTY-NAME = [DOUBLEUNDERSCORE]<STRING-IDENTIFIER>
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
CLASS-NAME
PROPERTYNAME
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.
PROPERTYLIST
ASTERISK
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.
EVENTCLASS-NAME
MUST be specified and MUST be an intrinsic, an extrinsic, or a timer event class. An intrinsic
event class is a class derived from __InstanceOperationEvent, __ClassOperationEvent, or
24 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
Objects and
keywords
Description
__NamespaceOperationEvent, representing possible intrinsic events. An extrinsic event class is
a class derived from __ExtrinsicEvent, representing possible extrinsic events. A timer event class
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 EVENTCLASS-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
EVENTWHERE
The WHERE statement narrows the scope of a SELECT event query if the EVENT-CLASS-NAME is
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.
INSTANCESTATE
Indicates the type of instance to be evaluated. INSTANCE-STATE MUST be specified if CLASSNAME 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
WITHIN
If the GROUP WITHIN keyword is used, the INTERVAL MUST be specified. This keyword indicates
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 PROPERTYNAME value. The system MUST return as many events representing a group of events as there
are PROPERTY-NAME values.
EVENT-EXPR
25 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
CLASS-NAME = [__]<STRING-IDENTIFIER>
PROPERTY-NAME = [__]<STRING-IDENTIFIER>
; ----------------------------------; NAMESPACE
; ----------------------------------NAMESPACE = <STRING-IDENTIFIER> <SUB-NAMESPACE>
<SUB-NAMESPACE> = [ BACKSLASH <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)([05]\d)[.]\d\d\d\d\d\d[+-]([0-6][02468][0]|7[0-2][0])"
BOOL = "TRUE" / "FALSE"
; ----------------------------------; 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
OBJECT-PATH
MACHINENAME
The network-identifiable name of the machine where the referenced WMI class, instance,
or namespace resides.
CLASS-NAME
INSTANCE-KEY
KEY-VALUE-LIST
List of property names and their values, separated by a ",". Each property value pair is
represented in propertyName=value format.
PROPERTY-NAME
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_NO_ERROR
0x00000000
WBEM_S_FALSE
0x00000001
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.
WBEM_S_TIMEDOUT
0x00040004
WBEM_S_NEW_STYLE
0x000400FF
The operation was successful and indicates that the receiver of the call is able to receive
optimized IWbemObjectSink::Indicate calls.
Value/description
Interface UUID
{DC12A681-737F-11CF-884D-00AA004B2E24}
Marshaling buffer
layout
The buffer representing a CIM object MUST be encoded using the EncodingUnit object
block, as specified in [MS-WMIO] section 2.2.1.
Unmarshaler CLSID
{4590F812-1D3A-11D0-891F-00AA004B2E24}
This CLSID MUST represent the unmarshaler CLSID that is supplied by WMI to DCOM and
MUST be sent over the network by DCOM when custom marshaling is implemented. For
more information (OBJREF_CUSTOM), see the [MS-DCOM].
in [MS-WMIO] section 2.2.6. If any key property is removed because it is not specified in PROPERTYLIST, 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 32bit signed integers. Each value in the array represents the position of the property in PROPERTYLIST (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,
select prop1,prop2,prop1 from class1
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.
[abstract]
class __SystemClass
{
};
28 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
[abstract]
class __IndicationRelated : __SystemClass
{
};
[abstract: DisableOverride ToInstance ToSubClass]
class __Event : __IndicationRelated
{
uint64 TIME_CREATED;
uint8 SECURITY_DESCRIPTOR[];
};
class __ExtrinsicEvent : __Event
{
};
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.
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.
WBEM_FLAG_UPDATE_FORCE_MODE: This flag forces updates of classes when conflicting child
classes exist. An example of an update that this flag forces is when a class qualifier is defined in a
child class and the base class tries to add the same qualifier that conflicted with the existing one.
In force mode, this conflict is resolved by deleting the conflicting qualifier in the child class.
29 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
30 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
31 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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_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_INVALID_CONTEXT: The IWbemContext object sent as part of client's request does
not contain the required properties.
WBEM_E_INVALID_PARAMETER: One or more of the parameters passed to the method is not
valid. Methods return this error in any of the following circumstances: (1) a parameter is NULL
where a non-NULL value is required, (2) the flags specified in the lFlags parameter are not allowed
in this method.
WBEM_E_NOT_AVAILABLE: The resource is unavailable.
WBEM_E_CRITICAL_ERROR : The server has encountered a catastrophic failure and cannot
process any client's request.
WBEM_E_NOT_SUPPORTED: The attempted operation is not supported.
WBEM_E_PROVIDER_NOT_FOUND: The server has encountered an implementation-specific error.
WBEM_E_INVALID_PROVIDER_REGISTRATION: The server has encountered an
implementation-specific error.
WBEM_E_PROVIDER_LOAD_FAILURE: The server has encountered an implementation-specific
error.
WBEM_E_INITIALIZATION_FAILURE: The server has encountered failure during its initialization.
WBEM_E_TRANSPORT_FAILURE: There is a network problem detected in reaching the server.
WBEM_E_INVALID_OPERATION: The operation performed is not valid.
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.
WBEM_E_UNEXPECTED: An unspecified error has occurred.
WBEM_E_INCOMPLETE_CLASS: The object passed doesn't correspond to any of classes registered
with WMI.
WBEM_E_SHUTTING_DOWN: The server cannot process the requested operation as it is shutting
down.
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_NAMESPACE: When connecting to WMI, the namespace specified is not found.
WBEM_E_INVALID_OBJECT: The CIM instance passed to the server doesn't have required
information.
WBEM_E_INVALID_CLASS: The class name is invalid.
WBEM_E_INVALID_QUERY: The query sent to the server doesn't semantically conform to the rules
specified in section 2.2.1.
34 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
35 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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>
PropertyName
PropertyType
PropertyValue
Description
__ProviderArchitecture
VT_I4
32 or 64
__RequiredArchitecture
VT_BOOL
True or False
__MI_DESTINATIONOPTIONS_DATA_LOCALE
VT_BSTR
MUST be a locale
name in the
"MS_xxx" format
(see section
2.2.29.
__MI_DESTINATIONOPTIONS_UI_LOCALE
VT_BSTR
MUST be a locale
name in the
"MS_xxx" format
(see section
2.2.29.
__CorrelationId
VT_BSTR
GUID in string
form.
When used through Windows Management Instrumentation Remote Protocol methods, the
IWbemContext parameter MUST be custom marshaled by the DCOM Remote Protocol (see [MSDCOM]), as specified in the following list.
Parameter/source
Value/description
Interface UUID
{44ACA674-E8FC-11D0-A07C-00C04FB68820}
Marshaling buffer
layout
The marshaling buffer has the format of the IWbemContextBuffer structure, as specified
in section 2.2.13.1.
Unmarshaler CLSID
{674B6698-EE92-11D0-AD71-00C04FD8FDFF}
This CLSID represents the unmarshaler CLSID that is supplied by the Windows
Management Instrumentation Remote Protocol to the DCOM Remote Protocol and MUST
be sent over the network by the DCOM Remote Protocol when custom marshaling is
implemented. For more information, refer to [MS-DCOM] section 2.2.18.6.
For the IDL of these two IWbemContext interfaces, see Appendix A, which contains the full IDL of the
Windows Management Instrumentation Remote Protocol.
37 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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
IWbemContextBuffer Marshaling
IWbemContextProperty Marshaling
IWbemContextString Marshaling
IWbemContextArray Marshaling
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.
2.2.13.1
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]).
IWbemContextBuffer = NumGuids *GUID NumProps *IWbemContextProperty
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.
2.2.13.2
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 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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).
Marshaling
VT_BSTR
VT_IUNKNOWN
VT_NULL
VT_UI1, VT_I1
MUST be marshaled as an array of 8 bytes with the first byte containing the value of
the property.
39 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
Property types
Marshaling
VT_I2, VT_UI2,
VT_BOOL
MUST be marshaled as an array of 8 bytes with the first 2 bytes containing the value
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.
VT_R8
VT_ARRAY | VT_*
2.2.13.3
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].
IWbemContextString has the following structure.
IWbemContextString = StringLength *UnicodeCharacter
2.2.13.4
The IWbemContextArray data structure defines the wire format for array data that is used by this
protocol. IWbemContextArray has the following structure:
IWbemContextArray = ElementCount ElementSize *Elements
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 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
Type
Marshaling
VT_BSTR
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_NULL
VT_I1, VT_UI1
VT_I4, VT_UI4
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.
VT_R8
VT_I2, VT_BOOL,
VT_UI2
1
0
2
0
3
0
dwByteOrdering
abSignature
...
dwSizeOfHeader1
dwDataSize1
dwFlags
bVersion
bPacketType
dwSizeOfHeader2
41 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
...
dwDataSize2
...
dwSizeOfHeader3
...
dwDataSize3
...
dwNumObjects
...
wbemObjects (variable)
...
Meaning
0x00000000
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.
dwFlags (4 bytes): The flag value MUST be 0x00000000.
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
0x00000000
0x00000001
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.
dwSizeOfHeader3 (4 bytes): This stores the size of these fields: dwSizeofHeader3,
dwDataSize3, and dwNumObjects. This value MUST be 12. Data immediately follows after the
field dwNumObjects.
dwDataSize3 (4 bytes): MUST indicate the length of the remaining data, starting at the
wbemObjects field.
dwNumObjects (4 bytes): MUST be the number of CIM objects in the ObjectArray.
42 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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.
2.2.14.1
WBEM_DATAPACKET_OBJECT Structure
The WBEM_DATAPACKET_OBJECT MUST contain the CIM class definition and CIM instances.
1
0
2
0
3
0
dwSizeOfHeader
dwSizeOfData
bObjectType
Object (variable)
...
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.
2.2.14.2
WBEMOBJECT_CLASS Structure
1
0
2
0
3
0
dwSizeOfHeader
dwSizeOfData
ObjectData (variable)
43 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
...
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.
2.2.14.3
WBEMOBJECT_INSTANCE Structure
1
0
2
0
3
0
dwSizeOfHeader
dwSizeOfData
classID (16 bytes)
...
...
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.
2.2.14.4
WBEMOBJECT_INSTANCE_NOCLASS Structure
The WBEMOBJECT_INSTANCE_NOCLASS structure MUST contain a CIM instance without the CIM class
definition.
1
0
2
0
3
0
dwSizeOfHeader
dwSizeOfData
classID (16 bytes)
44 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
...
...
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.
45 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
1
0
2
0
3
0
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
The RefreshedInstances packet is contained within the WBEM_INSTANCE_BLOB.
1
0
2
0
3
0
blobSize
46 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
Blob (variable)
...
2.2.19 RefreshedSingleInstance
The RefreshedSingeInstance MUST be encoded as a sequence of bytes representing the following
elements of the original IWbemClassObject, without any padding:
1. InstanceHeap size (encoded as 4 bytes)
2. NdTable
3. InstanceData
4. InstanceQualifierSet
5. InstanceHeap
The elements of IWbemClassObject are defined in [MS-WMIO].
47 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
} _WBEM_REFRESHER_ID;
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.
m_hr: MUST be the HRESULT of the reconnect operation.
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.
WBEM_REFRESH_TYPE_INVALID: The server uses this value internally. The server MUST NOT
return this value.
WBEM_REFRESH_TYPE_REMOTE: The m_Info member of the _WBEM_REFRESH_INFO structure
contains the _WBEM_REFRESH_INFO_REMOTE structure.
WBEM_REFRESH_TYPE_NON_HIPERF: The m_Info member of the _WBEM_REFRESH_INFO
structure contains the _WBEM_REFRESH_INFO_NON_HIPERF structure.
m_pRefresher: MUST be a pointer to the IWbemRemoteRefresher interface that the client used to
retrieve the refreshed information.
m_pTemplate: MUST be a pointer to an IWbemClassObject interface that MUST represent a CIM
instance with all properties set to the default values as specified in [MS-WMIO] section 2.2.26.
49 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
m_Guid: MUST be a globally unique identifier (GUID) created to identify this _WBEM_REFRESH_INFO
object.
"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.
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 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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.
This method is called using IWbemServices interface as described in section 3.2.4.2.5.
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>
52 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
Qualifier
Description
CIMType
Amendment
ClassContext
Dynamic
Fixed
InstanceContext
Locale
NamespaceSecuritySDDL
PropertyContext
Provider
RequiresEncryption
Singleton
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
Qualifier
Description
value is omitted, then it is interpreted as TRUE.
54 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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.
3.1
Server Details
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 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
56 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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 SHOULD maintain in persistent storage an AllowAnonymousCallback Boolean flag as a
global value. The flag indicates whether the server allows anonymous callbacks to the client.
The server SHOULD maintain an UnsecAppAccessControlDefault Boolean flag as a global value.
The flag indicates whether the server checks for an acceptable authentication level in callbacks.
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:
Name: A string that represents the namespace name.
Security Descriptor: The scheme used for initializing the security descriptor is implementationdependent.<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.
The server MUST maintain the following information:
EventBindingTable: A table of bindings, where each binding contains:
EventFilter: The WHERE clause of a notification query.
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.
EventGroupAggregateQueue: A collection of AggregateEvent events that has yet to be
dispatched to the Event Consumer.
ClientSecurityContext: Security context of the client.
57 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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.
IWbemServices: The object created on the server upon successful completion of
IWbemLevel1Login::NTLMLogin. This contains the following:
ClientPreferredLocales: Used by the server uses to return localizable information as specified in
3.1.1.2.
NamespaceConnection reference: Reference to the NamespaceConnection object (which
corresponds to the namespace information passed by the client) that is stored in the
NamespaceConnectionTable.
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:
ClassDeclaration: The CIM class specification as defined in [DMTF-DSP0004].
DerivedClassTable: A reference to the parent class entry in the ClassTable.
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.
ClassInstancesTable: A list of instances of the given CIM class.
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:
ProviderId: Unique Id of the provider in the system.
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.
ProviderArchitectureType: The provider architecture, either 32-bit or 64-bit. ProviderId is the
same for each ProviderArchitectureType value. ProviderId and ProviderArchitectureType
uniquely determine the ProviderEntryPoint to be used to forward the calls to a given provider in
the system.
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 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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:
ClientSyncPointer: A pointer to IWbemObjectSink passed as a response handler by the client
as part of an asynchronous call. This can be used to identify a client asynchronous call on the
server.
CallbackInProgress: A Boolean value that is set to TRUE if there is an
IWbemObjectSink::Indicate or IWbemObjectSink::SetStatus with a currently-in-progress
message. The value is set to FALSE if there is no IWbemObjectSink::Indicate and
IWbemObjectSink::SetStatus in progress for the operation. See sections 3.2.4.1.1 and
3.2.4.1.2 for more details.
CallCancelled: A Boolean value that is set to TRUE if the operation is canceled. The initial value of
this variable is FALSE.
SetStatusWithFinalResultCalled: A Boolean value that is set to TRUE if
IWbemObjectSink::SetStatus with a final result is called. The initial value of this variable is
FALSE.
WbemCallResultTable: A table to store information about pending single-result semisynchronous
operations (see section 3.2.4.2.7 for a list of single-result semisynchronous operations). Each
entry in this table corresponds to one semisynchronous call, where each entry contains the
following:
WbemCallResultPointer: A pointer to a server-created IWbemCallResult object.
FinalResult: An HRESULT to store the result status of the call.
ResultObject: A pointer to IWbemClassObject to store the result object of the call.
ResultService: A pointer to IWbemServices, used to store the result only if this is an
IWbemServices::OpenNamespace call.
ResultString: A pointer to a string.
OperationFinished: A Boolean value to store if the operation is completed. This value is initially
set to FALSE.
59 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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).
SemiSinkResultSetObject: A structure to store the results of multiple-result semisynchronous calls.
One instance of this structure is created for every multiple-result semisynchronous call. The
structure contains the following:
ResultArray: An array of IWbemClassObjects to store the result objects.
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.
Flags: The lFlags parameter value passed in as part of a semisynchronous call.
FinalResult: An HRESULT to store the result status of the call.
ClientSecurityContext: The security context of the client.
EnumWbemClassObjectTable: A table to store information about the pending result of
semisynchronous operations. Each entry in this table either corresponds to one semisynchronous
call or is a clone of another IEnumWbemClassObject instance. Each entry contains the following:
EnumWbemClassObjectPointer: A pointer to SemiSinkResultSetObject.
ResultSetPointer: A pointer to SemiSinkResultSetObject.
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:
WbemObjectSinkPointer: A pointer to the client passed in IWbemObjectSink.
RemainingRequestCount: An integer representing the remaining number of objects to be given
as part of the callbacks on this sink.
3.1.1.1.2.1
60 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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.
Before returning WBEM_S_NO_ERROR, the server MUST create an instance of the
SemiSinkResultSetObject ADM element and initialize CurrentTotalCount to zero, OperationFinished
to FALSE, and RefCount to 1. The server MUST also copy the lFlags parameter of the operation. The
server MUST create an entry in EnumWbemClassObjectTable for IEnumWbemClassObject by
storing a pointer to SemiSinkResultSetObject created for this operation in ResultSetPointer. The
server initializes CurrentIndex of EnumWbemClassObjectTable to start the index of ResultArray
and stores the security context of the client in ClientSecurityContext.
The server stores the results of the operation in SemiSinkResultSetObject and tracks the client
fetching the results by using the entry in EnumWbemClassObjectTable.
The server updates the SemiSinkResultSetObject EnumWbemClassObjectTable entry as follows:
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.
3.1.1.1.2.2
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.
Before returning WBEM_S_NO_ERROR, the server MUST create an entry in WbemCallResultTable by
keeping a reference to IEnumWbemClassObject in WbemCallResultPointer and initializing
ResultObject, ResultString, and ResultService to NULL. The server MUST set OperationFinished
to FALSE.
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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.
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 which
62 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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).
When the server updates an existing class, it MUST observe the
WBEM_FLAG_USE_AMENDED_QUALIFIERS flag:
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).
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 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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 initialize InitSuccess to false.
The server MUST initialize EventDropLimit to 1000.
The server MUST initialize MaxRequestLimit to 5000.
The server MUST initialize CurrentRequestCount to 0.
The server MUST initialize UnsecAppAccessControlDefault to false.
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.
The server MUST initialize the BackupInProgress flag to False.
The server MUST initialize the RestoreInProgress flag to False.
The server MUST initialize the IsServerPaused flag to False.
The server MUST initialize the IsServerShuttingDown flag to False.
The server SHOULD initialize AllowAnonymousCallback to False. <17>
When the server has successfully initialized the above data structures, it MUST set InitSuccess to
True.
64 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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.
If the impersonation level is not RPC_C_IMPL_LEVEL_IMPERSONATE or
RPC_C_IMPL_LEVEL_DELEGATE, 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 [DMTFDSP0004].<18>
If the server detects that the IWbemClassObject that is sent by the client does not conform to [MSWMIO] 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 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
If __MI_DESTINATIONOPTIONS_DATA_LOCALE is present:
66 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
If __MI_DESTINATIONOPTIONS_UI_LOCALE is present:
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.
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.
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 [MSDCOM], 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 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
reserved1: MUST be set to NULL when sent and MUST be ignored on receipt.
reserved2: MUST be set to 0 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 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
Return Values: The server MUST return one of the following values, based on server behavior for the
wszPreferredLocale parameter in IWbemLevel1Login::NTLMLogin.
Return value/code
Description
0x00
WBEM_S_NO_ERROR
0x80004001
E_NOTIMPL
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.
Return value/code
Description
0x8004100c
WBEM_E_NOT_SUPPORTED
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 0 when sent and MUST be ignored on receipt.
reserved4: MUST be set to NULL when sent and MUST be ignored on receipt.
69 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
reserved5: MUST be set to NULL when sent and MUST be ignored on receipt.
Return value/code
Description
0x80004001
E_NOTIMPL
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.
ppNamespace: If the call succeeds, ppNamespace MUST return a pointer to an IWbemServices
interface pointer. This parameter MUST be set to NULL when an error occurs.
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 server MUST return WBEM_E_INITIALIZATION_FAILURE if InitSuccess is false.
The server MUST determine the client's access rights by comparing
RpcImpersonationAccessToken.Sids[UserIndex] as defined in [MS-RPCE] section 3.3.3.4.3
against the security descriptor stored in NamespaceConnection.
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 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
lObjectCount: MUST be the number of CIM objects in the array of pointers in the ppObjArray
parameter.
apObjArray: MUST contain an array of result objects sent by the caller.
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.
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
WBEM_STATUS_COMPLETE
0x00000000
WBEM_STATUS_PROGRESS
72 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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)
Description
OpenNamespace
Provides the client with an IWbemServices interface pointer that is scoped to the
requested namespace.
Opnum: 3
CancelAsyncCall
QueryObjectSink
Obtains a notification handler that allows the client to send events directly to the
server.
Opnum: 5
GetObject
GetObjectAsync
PutClass
Creates a new class or updates an existing class in the namespace associated with
the current IWbemServices interface.
Opnum: 8
73 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
Method
Description
PutClassAsync
DeleteClass
Deletes a specified class from the namespace associated with the current
IWbemServices interface.
Opnum: 10
DeleteClassAsync
CreateClassEnum
CreateClassEnumAsync
PutInstance
PutInstanceAsync
DeleteInstance
DeleteInstanceAsync
CreateInstanceEnum
Creates an instance enumeration of all class instances that satisfy the selection
criteria.
Opnum: 18
CreateInstanceEnumAsync
ExecQuery
ExecQueryAsync
ExecNotificationQuery
ExecNotificationQueryAsync
ExecMethod
ExecMethodAsync
74 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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.
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 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
Name
Value
WBEM_FLAG_RETURN_IMMEDIATELY
0x00000010
Any other DWORD value that does not match the preceding condition MUST be treated as invalid.
pCtx: This parameter MUST be NULL.
ppWorkingNamespace: This parameter MUST NOT be NULL on input when
WBEM_FLAG_RETURN_IMMEDIATELY is not set. If the method returns WBEM_S_NO_ERROR,
ppWorkingNamespace MUST receive a pointer to an IWbemServices interface pointer to the
requested namespace.
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.
Flag state
Success operation
Failure operation
WBEM_FLAG_RETURN_IMMEDIATELY is
not set.
WBEM_FLAG_RETURN_IMMEDIATELY is
set.
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.
Flag state
Success operation
Failure operation
WBEM_FLAG_RETURN_IMMEDIATELY is
not set.
WBEM_FLAG_RETURN_IMMEDIATELY is
set.
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.
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.
Return value/code
Description
0x00
WBEM_S_NO_ERROR
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 successful method execution MUST return WBEM_S_NO_ERROR.
The failed method execution MUST return an error in the format specified in section 2.2.11.
HRESULT QueryObjectSink(
[in] long lFlags,
[out] IWbemObjectSink** ppResponseHandler
);
lFlags: This parameter is not used and its value MUST be 0x0.
ppResponseHandler: MUST be a pointer to a QueryObjectSink interface pointer to the notification
handler that allows the client to send events directly to the server. This parameter MUST be set to
NULL on error.
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.
In response to the IWbemServices::QueryObjectSink method, the server MUST return an
IWbemObjectSink interface pointer in ppResponseHandler. The server MUST return an error if the
ppResponseHandler is NULL or if it is unable to create the requested interface pointer.
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 notification query is made by the client to the server by calling
IWbemServices::ExecNotificationQuery or IWbemServices::ExecNotificationQueryAsync. Refer to
sections 3.1.4.3.20 and 3.1.4.3.21 for information about how the server processes the client requests
for notifications.
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 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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
0x00020000
WBEM_FLAG_RETURN_IMMEDIATELY
0x00000010
WBEM_FLAG_DIRECT_READ
0x00000200
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.
Flag state
Success operation
Failure operation
WBEM_FLAG_RETURN_IMMEDIATELY is
not set.
MUST contain an
IWbemClassObject interface
pointer.
WBEM_FLAG_RETURN_IMMEDIATELY is
set.
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
operation
Flag state
Success operation
WBEM_FLAG_RETURN_IMMEDIATELY
is not set.
MUST be set
to NULL if
the
ppCallResult
input
parameter
is nonNULL.
WBEM_FLAG_RETURN_IMMEDIATELY
is set.
MUST be set
to NULL if
the
79 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
Flag state
Success operation
parameter MUST contain the IWbemCallResult
interface pointer.
Failure
operation
ppCallResult
input
parameter
is nonNULL.
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.
In response to the IWbemServices::GetObject method, the server MUST interpret strObjectPath as
defined in [DMTF-DSP0004] section 8.5. If the path refers to a class, the server MUST look it up in the
ClassTable. If found, the server MUST return an object that represents the ClassDeclaration. If
strObjectPath refers to an instance, the server MUST check the InstanceProviderId for the class. If
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 find the provider entry
corresponding to InstanceProviderId in the ProviderTable.
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.
80 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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
0x00020000
WBEM_FLAG_SEND_STATUS
0x00000080
WBEM_FLAG_DIRECT_READ
0x00000200
If this bit is not set, the implementer MUST consider the entire
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.
pResponseHandler: MUST be a pointer to the IWbemObjectSink interface that is implemented by the
caller, where enumeration results are delivered. The parameter MUST NOT be NULL. If the
parameter is NULL, the server MUST return WBEM_E_INVALID_PARAMETER.
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 following validation occurs before an asynchronous operation is started:
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.
The following validation happens asynchronously.
In response to IwbemServices::GetObjectAsync method, the server MUST interpret strObjectPathas
defined in [DMTF-DSP0004] section 8.5. If the path refers to a class, the server MUST look it up in the
ClassTable. If found, the server MUST return an object that represents the ClassDeclaration. If
strObjectPath refers to an instance, the server MUST check the InstanceProviderId for the class. If
81 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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.
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
qualifiers while it creates or updates the CIM class.<34>
0x00020000
WBEM_FLAG_RETURN_IMMEDIATELY
0x00000010
If this bit is not set, the server SHOULD include all the
qualifiers, including amended qualifiers, while it updates or
creates the CIM class.
If this bit is not set, the server MUST make the method call
synchronously.
If this bit is set, the server MUST make the method call
semisynchronously.
82 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
Value
Meaning
WBEM_FLAG_UPDATE_ONLY
The server MUST update a CIM class pObject if the CIM class
is present.
0x00000001
WBEM_FLAG_CREATE_ONLY
0x00000002
WBEM_FLAG_UPDATE_FORCE_MODE
0x00000040
WBEM_FLAG_UPDATE_SAFE_MODE
0x00000020
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
Start
Flag state
WBEM_FLAG_RETURN_IMMEDIATELY
is not set.
MUST be
set to
NULL if the
input
parameter
is nonNULL.
WBEM_FLAG_RETURN_IMMEDIATELY
is set.
MUST be
set to
NULL if the
input
parameter
is nonNULL.
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.
The server MUST return WBEM_E_CANNOT_BE_SINGLETON if an attempt is made to mark a class as a
singleton that has a nonsingleton superclass or a class with key properties.
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 successful synchronous method execution 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 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 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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
qualifiers while it creates or updates a CIM class.<36>
0x00020000
WBEM_FLAG_UPDATE_ONLY
0x00000001
WBEM_FLAG_CREATE_ONLY
0x00000002
WBEM_FLAG_UPDATE_FORCE_MODE
0x00000040
WBEM_FLAG_UPDATE_SAFE_MODE
0x00000020
If this bit is not set, the server SHOULD include all the
qualifiers, including amended qualifiers, while it updates or
creates a CIM class.
The server MUST update a CIM class pObject if the CIM class
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.
The server MUST create a CIM class pObject if the CIM class is
not already present.
The server MUST forcefully update the class even when
conflicting child classes exist.
The server MUST update the class as long as the change does
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
0x00000080
If this bit is not set, the server MUST make one final
IWbemObjectSink::SetStatus method call on the interface
pointer that is provided in the pResponseHandler parameter.
85 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
Value
Meaning
If this bit is set, the server MAY make intermediate
IWbemObjectSink::SetStatus calls on the interface pointer
prior to call completion.
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.
pResponseHandler: MUST be a pointer to an IWbemObjectSink interface object that is implemented
by the client of this method. The 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.
WBEM_S_NO_ERROR (0x00)
The following validation happens before asynchronous operation is started:
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 following validation happens asynchronously:
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.
The server MUST return WBEM_E_CANNOT_BE_SINGLETON if an attempt is made to mark a class as a
Singleton that has a nonsingleton superclass or a class with key properties.
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 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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>
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
semisynchronously.
0x00000010
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 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
Operation
Failed to
Start
Flag state
WBEM_FLAG_RETURN_IMMEDIATELY
is not set.
MUST be set
to NULL if the
ppCallResult
input
parameter is
non-NULL.
WBEM_FLAG_RETURN_IMMEDIATELY
is set.
MUST be set
to NULL if the
ppCallResult
input
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 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 successful synchronous method execution 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 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 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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>
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
IWbemObjectSink::SetStatus call on the interface pointer that is
provided in the pResponseHandler parameter.
0x00000080
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.
pResponseHandler: MUST be a pointer to an IWbemObjectSink interface object that is implemented
by the client of this method. 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 following validation occurs before asynchronous operation is started:
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 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
If successful, the server MUST create a new entry in AsyncOperationTable as specified in section
3.1.1.1.3.
The following validation occurs asynchronously:
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.
3.1.4.3.10
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
0x00020000
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
Value
Meaning
information for the CIM object, as specified in section
2.2.6.
WBEM_FLAG_RETURN_IMMEDIATELY
0x00000010
WBEM_FLAG_SHALLOW
0x00000001
If this bit is not set, the server MUST make the method
call synchronously.
If this bit is set, the server MUST make the method call
semisynchronously.
When this bit is not set, the server MUST return all
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
0x00000020
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.
In response to the IWbemServices::CreateClassEnum method, the server MUST evaluate the
strSuperClass parameter (specified in the preceding list) and MUST return all classes that match the
input parameters from the current namespace. The method MUST fail if strSuperClass 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.
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>
3.1.4.3.11
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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
0x00020000
WBEM_FLAG_SEND_STATUS
0x00000080
WBEM_FLAG_SHALLOW
0x00000001
When this bit is not set, the server MUST return all
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.
pResponseHandler: MUST be a pointer to the IWbemObjectSink that is implemented by the caller,
where enumeration results are delivered. The parameter MUST NOT be NULL. In error cases,
indicated by the return value, the supplied IWbemObjectSink interface pointer MUST NOT be used.
If WBEM_S_NO_ERROR is returned, the user IWbemObjectSink interface pointer MUST be called
to indicate the results of the CreateClassEnumAsync operation, as specified later in this section.
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 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
3.1.4.3.12
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
0x00020000
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 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
Value
Meaning
0x00000010
If this bit is set, the server MUST make the method call
semisynchronously.
WBEM_FLAG_UPDATE_ONLY
0x00000001
WBEM_FLAG_CREATE_ONLY
0x00000002
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.
Property name
Type
Description
__PUT_EXTENSIONS
VT_BOOL
__PUT_EXT_STRICT_NULLS
VT_BOOL
__PUT_EXT_PROPERTIES
VT_ARRAY |
VT_BSTR
__PUT_EXT_ATOMIC
VT_BOOL
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.
Flag state
WBEM_FLAG_RETURN_IMMEDIATELY
is not set.
Operation
Failed to
Start
MUST be
set to
NULL if the
input
94 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
Flag state
Operation
Failed to
Start
parameter
is nonNULL.
WBEM_FLAG_RETURN_IMMEDIATELY
is set.
MUST be
set to
NULL if the
input
parameter
is nonNULL.
95 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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>
3.1.4.3.13
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
0x00020000
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_UPDATE_ONLY
0x00000001
WBEM_FLAG_CREATE_ONLY
0x00000002
WBEM_FLAG_SEND_STATUS
0x00000080
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.
Property name
Type
Description
__PUT_EXTENSIONS
VT_BOOL
__PUT_EXT_STRICT_NULLS
VT_BOOL
__PUT_EXT_PROPERTIES
VT_ARRAY |
VT_BSTR
__PUT_EXT_ATOMIC
VT_BOOL
97 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
3.1.4.3.14
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
synchronously.
0x00000010
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 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
Flag state
WBEM_FLAG_RETURN_IMMEDIATELY
is not set.
MUST be
set to
NULL if the
input
parameter
is nonNULL.
WBEM_FLAG_RETURN_IMMEDIATELY
is set.
MUST be
set to
NULL if the
input
parameter
is nonNULL.
99 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
The server SHOULD enforce a maximum length for the strObjectPath parameter, and return
WBEM_E_QUOTA_VIOLATION if the limit is exceeded.<44>
The successful synchronous method execution 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 output parameters to NULL and MUST return an error in the
format specified in section 2.2.11.
3.1.4.3.15
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
IWbemObjectSink::SetStatus call on the interface pointer that is
provided in the pResponseHandler parameter.
0x00000080
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.
pResponseHandler: MUST be a pointer to an IWbemObjectSink interface object that is implemented
by the client of this method. 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.
WBEM_S_NO_ERROR (0x00)
The following validation happens before asynchronous operation is started.
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 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
The server SHOULD enforce a maximum length for the strObjectPath parameter and return
WBEM_E_QUOTA_VIOLATION if the limit is exceeded.<45>
The method MUST fail if strObjectPath does not exist.
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.
The following validation occurs asynchronously.
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.
In response to an IWbemServices::DeleteInstanceAsync method, the server MUST evaluate the
strObjectPath parameter (as specified in this section) and MUST delete the instance that is identified
by strObjectPath from the current namespace. The method MUST fail if the following applies: if
strObjectPath 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.
3.1.4.3.16
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 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
Value
Meaning
WBEM_FLAG_USE_AMENDED_QUALIFIERS
0x00020000
WBEM_FLAG_RETURN_IMMEDIATELY
0x00000010
WBEM_FLAG_DIRECT_READ
0x00000200
WBEM_FLAG_SHALLOW
0x00000001
WBEM_FLAG_FORWARD_ONLY
0x00000020
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.
In response to the IWbemServices::CreateInstanceEnum method, the server MUST evaluate the
strSuperClass parameter (as specified in this section) and MUST return all instances for the specific
class in the current namespace. The method MUST fail if the following applies: if strSuperClass 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 server SHOULD enforce a maximum length for the strSuperClass parameter, and return
WBEM_E_QUOTA_VIOLATION if the limit is exceeded.<46>
102 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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.
3.1.4.3.17
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
0x00020000
WBEM_FLAG_SEND_STATUS
0x00000080
WBEM_FLAG_DIRECT_READ
0x00000200
WBEM_FLAG_SHALLOW
0x00000001
If this bit is not set, the server MUST consider the entire
class hierarchy when it returns the result.
If this bit is set, the server MUST disregard any derived
class when it searches the result.
If this bit is set, the server MUST return instances of the
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 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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.
pResponseHandler: MUST be a pointer to the IWbemObjectSink interface that is implemented by the
caller and where enumeration results are delivered. The 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 following validation happens before asynchronous operation is started.
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 method MUST fail if strSuperClass does not exist.
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.
The following validation happens asynchronously.
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.
In response to IWbemServices::CreateInstanceEnumAsync, the server MUST evaluate the
strSuperClass parameter (as specified in this section) and MUST return all instances for the specified
class in the current namespace. The method MUST fail if the following applies: if the method
parameters or their combinations are not valid as specified earlier in this section or if the server is
unable to execute the method.
3.1.4.3.18
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
localizable information.
0x00020000
WBEM_FLAG_RETURN_IMMEDIATELY
0x00000010
WBEM_FLAG_DIRECT_READ
0x00000200
If this bit is not set, the server MUST consider the entire
class hierarchy when it returns 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.
WBEM_FLAG_FORWARD_ONLY
0x00000020
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.
In response to IWbemServices::ExecQuery, the server MUST evaluate the strQuery and
strQueryLanguage parameters (as specified in this section) and MUST return all instances that match
the provided query. The method MUST fail if the method parameters or their combinations are not
valid, as specified earlier in this section, or if the server is unable to execute the method.
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 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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:
1. Find the NamespaceConnection matching the current session.
2. Populate the QueryWhereFilter data from the query.
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.
5. Search in the NamespaceConnection.ClassTable for those classes with properties of type
REF [DMTF-DSP0004] with the class-name matching one of the class names from step 4. Call
the resulting list AssociationClasses.
6. For each RequiredAssocQualifier clause in the query, remove from AssociationClasses any
class not containing the qualifier value specified with RequiredAssocQualifier.
7. For each class in AssociationClasses:
106 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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.
3. Filter this list of instances using the QueryWhereFilter.
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 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.
5. If strQuery begins with REFERENCES OF, the server MUST do the following:
1. Find the NamespaceConnection matching the current session.
2. Populate the QueryWhereFilter data from the query.
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.
5. Search in the NamespaceConnection.ClassTable for those classes with properties of type
REF [DMTF-DSP0004] with the class-name matching one of the class names from step 4. Call
the resulting list AssociationClasses.
6. For each class in AssociationClasses:
107 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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.
11. Filter this list of instances using the QueryWhereFilter.
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.
3.1.4.3.19
108 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
Value
Meaning
WBEM_FLAG_USE_AMENDED_QUALIFIERS
If this bit is not set, the server SHOULD not return CIM
localizable information.
0x00020000
WBEM_FLAG_SEND_STATUS
0x00000080
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
class hierarchy when it returns the result.
0x00000200
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.
pResponseHandler: MUST be a pointer to the IWbemObjectSink interface that is implemented by the
caller, where enumeration results are delivered. The 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 following validation happens before asynchronous operation is started.
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.
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.<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.
The following validation happens asynchronously.
In response to an IWbemServices::ExecQueryAsync method call, the server MUST evaluate the
strQueryLanguage and strQuery parameters (as specified in this section) and return all instances that
match the requested query. The method MUST fail if the method parameters or their combinations are
not valid as specified earlier in this section, or if the server is unable to execute the method.
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.
109 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
See IWbemServices::ExecQuery (Opnum 20) (section 3.1.4.3.18) for more details on the processing
rules for WQL queries.
3.1.4.3.20
Meaning
WBEM_FLAG_USE_AMENDED_QUALIFIERS
0x00020000
WBEM_FLAG_RETURN_IMMEDIATELY
0x00000010
WBEM_FLAG_FORWARD_ONLY
0x00000020
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)
110 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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.
In response to IWbemServices::ExecNotificationQuery, the server MUST evaluate the strQuery and
strQueryLanguage parameters (as specified in this section) and MUST return all events that match the
query. The method MUST fail if the method parameters or their combinations are not valid as specified
earlier in this section, or if the server is unable to execute the method. Because the stream of events
that are returned by the server is not finite, the method IWbemServices::ExecNotificationQuery MUST
NOT be executed synchronously. As previously specified, this request MUST fail because the method
parameters are not valid.
For each provider in the ProviderTable where EventQueryList is not empty:
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.
3.1.4.3.21
111 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
Meaning
WBEM_FLAG_USE_AMENDED_QUALIFIERS
0x00020000
WBEM_FLAG_SEND_STATUS
0x00000080
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.
pResponseHandler: MUST be a pointer to the IWbemObjectSink interface that is implemented by the
caller, where enumeration results are delivered. 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 following validation occurs before an asynchronous operation is started.
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.
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>
112 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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.
The following validation happens asynchronously.
In response to IWbemServices::ExecNotificationQueryAsync, the server MUST evaluate the
strQueryLanguage and strQuery parameters (as specified earlier in this section) and MUST start to
provide events that match the requested query. The method MUST fail if the method parameters or
their combinations are not valid, as specified earlier in this section, or if the server is unable to
execute the method.
For each provider in the ProviderTable where EventQueryList is not empty:
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.
3.1.4.3.22
The IWbemServices::ExecMethod method executes a CIM method that is implemented by a CIM class
or a CIM instance that is retrieved from the IWbemServices interface.
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
synchronously.
0x00000010
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.
pInParams: MUST be a pointer to an IWbemClassObject interface pointer, which MUST contain an
instance of input parameter CIM class as defined in [MS-WMIO] (section 2.3.3), with method
parameter values set as properties. This parameter MUST be NULL when the method has no input
parameters.
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
operation
Flag state
Success operation
WBEM_FLAG_RETURN_IMMEDIATELY
is not set.
MUST be
set to
NULL if
the input
parameter
is nonNULL.
WBEM_FLAG_RETURN_IMMEDIATELY
is set.
MUST be
set to
NULL if
the input
114 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
Flag state
Success operation
Failure
operation
parameter
is nonNULL.
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
operation
Condition
Success operation
WBEM_FLAG_RETURN_IMMEDIATELY
is not set.
MUST be set
to NULL if
the
ppCallResult
input
parameter is
non-NULL.
WBEM_FLAG_RETURN_IMMEDIATELY
is set.
MUST be set
to NULL if
the
ppCallResult
input
parameter is
non-NULL.
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.
In response to IWbemServices::ExecMethod, the server MUST evaluate the strObjectPath and
strMethodName parameters (as specified in this section) and MUST execute the method that is
identified by strMethodName and implemented by the CIM object that is referred to by strObjectPath.
The server MUST use the input parameters to the CIM method from the pInParams parameter, which
is an instance of the input parameter CIM class as defined in [MS-WMIO] (section 2.3.3). The server
MUST execute the CIM method and send the output parameters as an instance of the output
parameter CIM class as defined in [MS-WMIO] (section 2.3.3). 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
earlier in this section, or if the server is unable to execute the method.
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.
115 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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.
3.1.4.3.23
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
IWbemObjectSink::SetStatus call on the interface pointer that is
provided in the pResponseHandler parameter.
0x00000080
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.
pInParams: MUST be a pointer to an IWbemClassObject interface pointer, which MUST contain an
instance of input parameter CIM class as defined in [MS-WMIO] (section 2.3.3), with method
parameter values set as properties. This parameter MUST be NULL when the method has no input
parameters.
pResponseHandler: MUST be a pointer to an IWbemObjectSink interface object that is implemented
by the client of this method. 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 following validation occurs before asynchronous operation is started.
116 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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.
The following validation happens asynchronously.
In response to IWbemServices::ExecMethodAsync, the server MUST evaluate strObjectPath and
strMethodName (as specified in this section) and MUST execute the method that is identified by
strMethodName, implemented by the strObjectPath CIM object. The server MUST use the input
parameters to the CIM method from the pInParams parameter, which is an instance of the input
parameter CIM class as defined in [MS-WMIO] (section 2.3.3). The server MUST execute the CIM
method and send the output parameters as an instance of the output parameter CIM class as defined
in [MS-WMIO] (section 2.3.3). The method MUST fail if the method parameters or their combinations
are not valid, as specified earlier in this section, or if the server is unable to execute the method.
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.
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
NextAsync
Clone
Skip
Causes the server to move the current position in an enumeration ahead by a specified number of
CIM objects.
Opnum: 7
117 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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.
118 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
120 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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.
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)
The server MUST locate the entry in EnumWbemClassObjectTable with
EnumWbemClassObjectPointer matching the IEnumWbemClassObject.
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.
If the earlier semisynchronous operation is created by using WBEM_FLAG_FORWARD_ONLY, then
IEnumWbemClassObject::Clone is not supported and the server MUST return
WBEM_E_INVALID_OPERATION.
121 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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)
The server MUST locate the entry in EnumWbemClassObjectTable with
EnumWbemClassObjectPointer matching IEnumWbemClassObject.
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
122 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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.
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
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.
The IWbemCallResult::GetResultObject method MUST be called on the interface obtained in responses
to a previous call to a semisynchronous operation returning an IWbemCallResult interface.
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.
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.
IWbemCallResult::GetResultString MUST be called to obtain the CIM path created after
IWbemServices::PutInstance execution. In response to the IWbemCallResult::GetResultString
method, the server MUST wait for the operation to finish in lTimeout time. The operation is finished
when OperationFinished is 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
make a copy of the ResultString in WbemCallResultTable for this operation and return it in the
pstrResultString 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. If the operation is finished
successfully, and if ResultString is set to NULL, the server MUST return
WBEM_E_INVALID_OPERATION for this method.
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.
If the original semisynchronous operation fails, the IWbemCallResult::GetResultString method MUST
return the error code that the original method would have returned in its synchronous version.
125 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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.
IWbemCallResult::GetResultServices MUST be called to obtain the IWbemServices interface pointer
that is returned by the IWbemServices::OpenNamespace execution. In response to the
IWbemCallResult::GetResultServices method, the server MUST wait for the operation to finish in
lTimeout time. The operation is finished when OperationFinished is 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 return the IWbemServices interface pointer result
stored in ResultService of the operation in the ppServices 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 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.
If the original semisynchronous operation fails, the IWbemCallResult::GetResultServices method MUST
return the error code that the original method would have returned in its synchronous version.
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.
126 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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::GetCallStatus 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.
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.
Description
GetSmartEnum
127 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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.
In response to the IWbemFetchSmartEnum::GetSmartEnum method, the server MUST return an
IWbemWCOSmartEnum interface in the ppSmartEnum output parameter.
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.
Description
Next
Returns an array of IWbemClassObject interface pointers that are encoded by using the ObjectArray
structure for optimization purposes.
Opnum: 3
proxyGUID: MUST be a client-generated GUID that MUST identify the client. This parameter MUST
NOT be NULL.
128 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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 IWbemWCOSmartEnum::Next method MUST be called on an IWbemWCOSmartEnum interface
that is returned by a previous call to IWbemFetchSmartEnum::GetSmartEnum.
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 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
Method
Description
SetClientInfo
Passes the client NETBIOS name and a unique client generated number to the server.
Opnum: 3
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)
Description
SetEvent
Signals an event on the server with name that MUST be specified as a parameter of the method.
Opnum: 3
130 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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)
3.1.4.10
IWbemBackupRestore Interface
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}.
Methods in RPC Opnum Order
Method
Description
Backup
Restore
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 {C49E32C6BC8B-11D2-85D4-00105A1F8304}.
131 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
3.1.4.10.1
IWbemBackupRestore::Backup (Opnum 3)
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.
In response to the IWbemBackupRestore::Backup method, the server MUST set the
BackupInProgress flag to True. The server MUST back up the CIM database in a file that is specified
in the strBackupToFile parameter. The server SHOULD<59> verify that the security principal making
the call is allowed to back up the CIM database using implementation-specific authorization policy. If
the security principal is not authorized, the server MUST return WBEM_E_ACCESS_DENIED.
132 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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.
3.1.4.10.2
IWbemBackupRestore::Restore (Opnum 4)
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
0x00000001
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 WBEM_FLAG_BACKUP_RESTORE_FORCE_SHUTDOWN flag is not set, the server MUST
return WBEM_E_INVALID_PARAMETER.
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)
In response to the IWbemBackupRestore::Restore method, the server MUST set the
RestoreInProgress flag to True. The server MUST go through each entry in
NamespaceConnectionTable and delete the corresponding NamespaceConnection object. The
server MUST restore the CIM database from the file that is specified in the strRestoreFromFile
parameter. The server SHOULD<61> verify that the security principal making the call is allowed to
restore the CIM database using implementation-specific authorization policy. If the security principal is
not authorized, the server MUST return WBEM_E_ACCESS_DENIED.
The server MUST re-initialize the NamespaceConnectionTable with NamespaceConnection
objects after the CIM database restoration is complete.
After the Restore operation is complete, the server MUST reset the RestoreInProgress flag to False.
3.1.4.11
IWbemBackupRestoreEx Interface
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 [MSDCOM]). The interface MUST be uniquely identified by UUID {A359DEC5-E813-4834-8A2ABA7F1D777D76}.
Methods in RPC Opnum Order
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
3.1.4.11.1
IWbemBackupRestoreEx::Pause (Opnum 5)
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();
3.1.4.11.2
IWbemBackupRestoreEx::Resume (Opnum 6)
134 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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)
3.1.4.12
IWbemRefreshingServices Interface
Description
AddObjectToRefresher
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
GetRemoteRefresher
ReconnectRemoteRefresher
3.1.4.12.1
IWbemRefreshingServices::AddObjectToRefresher (Opnum 3)
136 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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.
3.1.4.12.2
IWbemRefreshingServices::AddObjectToRefresherByTemplate (Opnum
4)
The IWbemRefreshingServices::AddObjectToRefresherByTemplate method MUST add a CIM instance,
which is identified by its CIM object instance, to the list of CIM instances to be refreshed.
The AddObjectToRefresherByTemplate method opnum equals 4.
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
);
137 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
3.1.4.12.3
IWbemRefreshingServices::AddEnumToRefresher (Opnum 5)
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
);
138 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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.
In response to IWbemRefreshingServices::AddEnumToRefresher, the server MUST evaluate the
wszClass parameter, and it MUST return information to the client so that the server knows how to
handle the specific class as specified in this section.
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.
A successful call to IWbemRefreshingServices::AddEnumToRefresher MUST return
WBEM_S_NO_ERROR and MUST fill the output _WBEM_REFRESH_INFO structure as specified in
section 2.2.20.
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_INFO_REMOTE, the server MUST return an
IWbemRemoteRefresher interface pointer in _WBEM_REFRESH_INFO_REMOTE that is part of
_WBEM_REFRESH_INFO.
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.
3.1.4.12.4
IWbemRefreshingServices::RemoveObjectFromRefresher (Opnum 6)
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 response to IWbemRefreshingServices::RemoveObjectFromRefresher, the server MUST set
pdwSvrRefrVersion to 0x1 and return WBEM_E_NOT_AVAILABLE.
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.
3.1.4.12.5
IWbemRefreshingServices::GetRemoteRefresher (Opnum 7)
140 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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 IWbemRefreshingServices::GetRemoteRefresher method evaluates the pRefresherID parameter
and MUST return an IWbemRemoteRefresher interface pointer and a GUID that is randomly generated
by the server in order to identify this interface pointer. The IWbemRefreshingServices interface pointer
MUST have the same value as the one initially returned by the
IWbemRefreshingServices::AddObjectToRefresher,
IWbemRefreshingServices::AddObjectToRefresherByTemplate, or
IWbemRefreshingServices::AddEnumToRefresher method.
A successful call to IWbemRefreshingServices::GetRemoteRefresher MUST return
WBEM_S_NO_ERROR and fill the ppRemRefresher and pGuid fields. The pdwSvrRefrVersion field
is reserved for future use and MUST be set to 0x1.
The returned IWbemRemoteRefresher interface MUST be used in calls to the
IWbemRemoteRefresher::RemoteRefresh and IWbemRemoteRefresher::StopRefreshing methods.
3.1.4.12.6
IWbemRefreshingServices::ReconnectRemoteRefresher (Opnum 8)
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 description of IWbemRefreshingServices is specified in IWbemRefreshingServices Interface.
In response to IWbemRefreshingServices::ReconnectRemoteRefresher, the server MUST evaluate the
pRefresherId and apReconnectInfo arrays; and MUST reconnect to the refresher the requested CIM
objects and enumerators that are listed in apReconnectInfo, as specified in this section.
If one of the CIM objects cannot be reconnected, the apReconnectResults element that corresponds to
apReconnectInfo MUST be set with an HRESULT return code.
A successful call to IWbemRefreshingServices::ReconnectRemoteRefresher MUST return
WBEM_S_NO_ERROR and MUST fill the reconnection status in the apReconnectResults array.
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.
3.1.4.13
IWbemRemoteRefresher Interface
Description
RemoteRefresh
StopRefreshing
Opnum5NotUsedOnWire
This method is reserved for local use and is not used remotely.
Opnum: 5
3.1.4.13.1
IWbemRemoteRefresher::RemoteRefresh (Opnum 3)
);
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.
If the method fails, the server MUST set plNumObjects to NULL.
paObjects: If successful, paObjects MUST be a pointer to an array of WBEM_REFRESHED_OBJECT
objects specified in section 2.2.15. The array MUST contain CIM instances and enumerations. It
MUST NOT be NULL.
If the method fails, the server MUST set paObjects to 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 IWbemRemoteRefresher::RemoteRefresh method MUST be called on the IWbemRemoteRefresher
interface pointer returned as a member of the _WBEM_REFRESH_INFO structure from
IWbemRefreshingServices methods or on the interface returned by
IWbemRefreshingServices::GetRemoteRefresher method invocation.
In response to IWbemRemoteRefresher::RemoteRefresh method, the server MUST read the current
values of all the CIM objects previously added to the set of refreshing objects using
IWbemRefreshingServices methods. The updated values for all CIM objects MUST be encoded into the
output parameter using the format specified in this section.
3.1.4.13.2
IWbemRemoteRefresher::StopRefreshing (Opnum 4)
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 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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)
The IWbemRemoteRefresher::StopRefreshing method MUST be called on the IWbemRemoteRefresher
interface pointer that is returned as a member of the _WBEM_REFRESH_INFO structure from the
methods of the IWbemRefreshingServices interface or on the interface that is returned by the
IWbemRefreshingServices::GetRemoteRefresher method invocation.
In response to the IWbemRemoteRefresher::StopRefreshing method, the server MUST remove a list of
CIM objects that were previously added to the set of refreshing objects using the
IWbemRefreshingServices methods. The CIM objects MUST be identified by their identifier, the
m_lCancelId member of the _WBEM_REFRESH_INFO structure that is returned by a previous
IWbemRefreshingServices::AddObjectToRefresher,
IWbemRefreshingServices::AddObjectToRefresherByTemplate, or
IWbemRefreshingServices::AddEnumToRefresher call.
In case of failure the server MUST return an error in the format specified in section 2.2.11.
3.1.4.13.3
IWbemRemoteRefresher::Opnum5NotUsedOnWire (Opnum 5)
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.
3.1.4.14
IWbemShutdown Interface
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-A07500C04FB68820}.
Method
Description
Shutdown
The objects that export this interface MUST be uniquely identified with the CLSID {73E709EA-5D934B2E-BBB0-99B7938DA9E4} or CLSID {1F87137D-0E7C-44d5-8C73-4EFFB68962F2}.
Opnum: 3
144 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
3.1.4.14.1
IWbemShutdown::Shutdown (Opnum 3)
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
);
3.1.4.15
IUnsecuredApartment Interface
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-ad7900c04fd8fdff}.
Method
Description
CreateObjectStub
The objects that export this interface MUST be uniquely identified with the CLSID
{49bd2028-1523-11d1-ad79-00c04fd8fdff}
Opnum: 3
145 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
3.1.4.15.1
IUnsecuredApartment::CreateObjectStub (Opnum 3)
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.
3.1.4.16
IWbemUnsecuredApartment Interface
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-4cf49a7c-57a44ae71956}.
Method
Description
CreateSinkStub
The objects that export this interface MUST be uniquely identified with the CLSID {49bd20281523-11d1-ad79-00c04fd8fdff}.
Opnum: 3
146 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
3.1.4.16.1
IWbemUnsecuredApartment::CreateSinkStub (Opnum 3)
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.
reserved2: MUST be set to 0 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.
3.1.4.17
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 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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.
3.1.4.17.1
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.
3.1.4.17.2
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.
3.1.4.17.3
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.
3.1.4.17.4
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.
3.1.4.17.5
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.
3.1.4.17.6
148 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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.
3.1.4.17.7
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.
3.1.4.17.8
Create a Class
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.
3.1.4.17.9
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.
3.1.4.17.10
Delete a Class
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.
3.1.4.17.11
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.
3.1.4.17.12
The server passes the pointer to the IWbemObjectSink object to the provider. The provider cancels
the pending operation corresponding to the given IWbemObjectSink object.
3.1.4.17.13
3.1.4.17.14
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.
149 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
3.1.4.17.15
Execute Query
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.
3.1.4.18.1
Creating Namespaces
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.
3.1.4.18.2
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.
See Appendix D: Enumerating Class Schema for an example.
3.1.4.18.3
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
150 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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).
The server MUST generate a __NamespaceModificationEvent event object upon successful
modification of the namespace information.
3.1.4.18.4
Deleting Namespaces
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.
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.
EventGroupingTimer: If the timer expires, the server MUST
151 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
152 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
3.2
Client Details
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>
The client MUST call the IWbemLevel1Login::NTLMLogin method. If the
IWbemLevel1Login::NTLMLogin method completes successfully, the ppNamespace parameter has an
IWbemServices interface pointer that can be used by the client to call the IWbemServices methods.
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.
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
Indicate
SetStatus
Called by the client either to indicate the end of an operation or to send status information to the
server.
Opnum: 4
154 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
3.2.4.2.2 Calling Put Interfaces for CIM Objects with Amended Qualifiers
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 localeneutral 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 localeneutral class object and one for each supported locale to construct the locale-specific class object. The
client SHOULD create the locale-neutral object last.
155 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
IWbemServices::PutInstance
IWbemServices::PutClass
IWbemServices::DeleteClass
IWbemServices::DeleteInstance
Methode name
IWbemServices::OpenNamespace
ppWorkingNamespace
IWbemServices::GetObject
ppObject
IWbemServices::ExecMethod
ppOutParams
When the call to the method fails, the output parameter is NULL.
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
IWbemServices::OpenNamespace
IWbemServices::PutInstance
IWbemServices::GetObject
IWbemServices::PutClass
IWbemServices::DeleteClass
IWbemServices::DeleteInstance
IWbemServices::ExecMethod
When the semisynchronous IWbemServices method fails, the output parameter does not have the
IWbemCallResult interface.
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.
When IWbemServices method execution succeeds, an object of type IEnumWbemClassObject is
returned to the client.
The client SHOULD obtain IWbemFetchSmartEnum interface using IRemUnknown and IRemUnknown2
interfaces as specified in [MS-DCOM], on this IEnumWbemClassObject interface. If client obtains
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.
157 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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.
158 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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.
159 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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.
When the client calls the IWbemRefreshingServices::AddEnumToRefresher method with pRefresherId
generated by the client, the server returns the refresher information in the _WBEM_REFRESH_INFO
structure if the method succeeds.
The client MUST allow all the version numbers that are returned by the server in pdwSvrRefrVersion.
If the returned _WBEM_REFRESH_INFO structure contains m_lType as
WBEM_REFRESH_TYPE_REMOTE, the m_Info structure contains the
_WBEM_REFRESH_INFO_REMOTE 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 enumeration. The client MUST
use m_lCancelId, which is returned in _WBEM_REFRESH_INFO, to invoke the
IWbemRemoteRefresher::StopRefreshing method if the client wants to remove the particular
enumeration from the remote refresher.
If the returned _WBEM_REFRESH_INFO structure contains m_lType as
WBEM_REFRESH_TYPE_NON_HIPERF, the client MUST retrieve the CIM instances using
IWbemServices::CreateInstanceEnum or IWbemServices::CreateInstanceEnumAsync on the initial
IWbemServices interface.
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.
If the IWbemRefreshingServices::GetRemoteRefresher method call succeeds, the client gets a GUID of
the remote refresher in the pGuid parameter.
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,
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.
160 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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 SHOULD call IWbemRefreshingServices::ReconnectRemoteRefresher if the
IWbemRemoteRefresher method call failed and the client is attempting to reconnect the remote
refresher as specified in section 3.2.4.5.3.
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.
3.2.6.1 Shutdown
Set the IsServerShuttingDown flag to True.
161 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
Protocol Examples
The following sections describe several operations as used in common scenarios to illustrate the
function of the Windows Management Instrumentation Remote Protocol.
4.1
Protocol Initialization
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 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
Client callsSetClientInfo method on IwbemLoginClientID interface pointer obtained from the server:
164 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
Server responds with LocalVersion as 1. This means that the server ignores unrecognized locale
names in the locale name format:
- WMI: IWbemLevel1Login:EstablishPosition Response, LocaleVersion=1
ReturnValue=WBEM_S_NO_ERROR
LocaleVersion: 1 (0x1)
ReturnValue: 0x00000000 - WBEM_S_NO_ERROR - Indicates a successful completion to the
method call.
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:
- WMI: IWbemLevel1Login:NTLMLogin Response, ReturnValue=WBEM_S_NO_ERROR
+ Namespace: OBJREFSTANDARD - {9556DC99-828C-11CF-A37E-00AA003240C7}
+ pad: 2 Bytes
ReturnValue: 0x00000000 - WBEM_S_NO_ERROR - Indicates a successful completion to the
method call.
4.2
Synchronous Operations
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 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
166 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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.
167 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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.
169 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
170 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
In response to the method executed above, the server returns an IEnumWbemClassObject interface
pointer:
- WMI: IWbemServices:ExecQuery 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:
+
+
+
+
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:
- WMI: IWbemWCOSmartEnum:Next Response, PuReturned=1 BuffSize=9101 ReturnValue=0x00000300 Unknown Value
PuReturned: 1 (0x1)
BuffSize: 9101 (0x238D)
+ BufferPtrSize: Pointer To 0x00020000, 9101 Elements
+ ObjectArray:
+ Pad: 2 Bytes
ReturnValue: 0x00000300 - Unknown Value
+ msrpc: c/o Continued Response: IWbemWCOSmartEnum(WMIRP) {423EC01E-2E35-11D2-B60400104B703EFD} Call=0xA Context=0x6 Hint=0xD1C Cancels=0x0 InstanceQuarlifier error:
Unknown QualifierType
+ 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:
- WMI: IWbemServices:ExecMethod Response, ReturnValue=WBEM_S_NO_ERROR
+ OutParams: OBJREFCUSTOM - {DC12A681-737F-11CF-884D-00AA004B2E24}
+ CallResult: NULL
Pad: 0 Bytes
ReturnValue: 0x00000000 - WBEM_S_NO_ERROR - Indicates a successful completion to the
method call.)
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:
+ DCOM: WMI protocol Request, DCOM Version=5.7 Causality Id={8E2416FE-0A3F-42BE-A9B0F30624C94619}
- WMI: IWbemServices:ExecQuery Request, Flags=32
+ StrQueryLanguage: WQL
+ StrQuery: select * from win32_process where Name='calc.exe'
+ Pad: 2 Bytes
+ Flags: 32 (0x20)
+ Ctx: NULL
In response to the method executed above, the server returns an IEnumWbemClassObject interface
pointer:
- WMI: IWbemServices:ExecQuery 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:
173 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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:
- WMI: IWbemWCOSmartEnum:Next Response, PuReturned=0 BuffSize=0 ReturnValue=WBEM_S_FALSE
PuReturned: 0 (0x0)
BuffSize: 0 (0x0)
+ BufferPtrSize: Pointer To NULL
Pad: 0 Bytes
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.
174 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
#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:
- WMI: IWbemServices:PutInstance Request, Flags=0
+ Inst: OBJREFCUSTOM - {DC12A681-737F-11CF-884D-00AA004B2E24}
Pad: 0 Bytes
+ Flags: 0 (0x0)
+ Ctx: NULL
+ CallResult: NULL
Server returns WBEM_S_NO_ERROR. This implies that the instance above was successfully created on
the server:
- WMI: IWbemServices:PutInstance Response, ReturnValue=WBEM_S_NO_ERROR
+ CallResult: NULL
Pad: 0 Bytes
ReturnValue: 0x00000000 - WBEM_S_NO_ERROR - Indicates a successful completion to the
method call.
In response to the method executed above, the server returns an IEnumWbemClassObject interface
pointer:
- 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.
175 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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):
- WMI: IWbemWCOSmartEnum:Next Response, PuReturned=2 BuffSize=410 ReturnValue=WBEM_S_FALSE
PuReturned: 2 (0x2)
BuffSize: 410 (0x19A)
+ BufferPtrSize: Pointer To 0x00020000, 410 Elements
+ ObjectArray:
+ Pad: 2 Bytes
176 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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):
- WMI: IWbemServices:PutInstance Request, Flags=0
+ Inst: OBJREFCUSTOM - {DC12A681-737F-11CF-884D-00AA004B2E24}
Pad: 0 Bytes
+ Flags: 0 (0x0)
+ Ctx: NULL
+ CallResult: NULL
Server returns WBEM_S_NO_ERROR. This implies that the instance update above was successful on
the server:
- WMI: IWbemServices:PutInstance Response, ReturnValue=WBEM_S_NO_ERROR
+ CallResult: NULL
Pad: 0 Bytes
ReturnValue: 0x00000000 - WBEM_S_NO_ERROR - Indicates a successful completion to the
method call.
Server responds with success. This implies that TestWMI instance with key value as x=10 has been
successfully deleted from the server:
- WMI: IWbemServices:DeleteInstance Response, ReturnValue=WBEM_S_NO_ERROR
+ CallResult: NULL
Pad: 0 Bytes
ReturnValue: 0x00000000 - WBEM_S_NO_ERROR - Indicates a successful completion to the
method call.
Client calls CreateInstanceEnum operation on IWbemServices interface pointer to find out the existing
TestWMI instances on the server:
- WMI: IWbemServices:CreateInstanceEnum Request, Flags=33
+ StrFilter: TestWMI
+ Pad: 2 Bytes
+ Flags: 33 (0x21)
+ Ctx: NULL
In response to the method executed above, the server returns an IEnumWbemClassObject interface
pointer:
- WMI: IWbemServices:CreateInstanceEnum Response, ReturnValue=WBEM_S_NO_ERROR
+ Enum: OBJREFSTANDARD - {027947E1-D731-11CE-A357-000000000001}
177 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
+ 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 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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.
4.3
Semisynchronous Operations
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 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
180 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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:
- WMI: IWbemServices:ExecQuery Request, Flags=48
+ StrQueryLanguage: WQL
+ StrQuery: select * from win32_process where Name='calc.exe'
+ Pad: 2 Bytes
+ Flags: 48 (0x30)
+ Ctx: NULL
In response to the method executed above, the server returns an IenumWbemClassObject interface
pointer:
- WMI: IWbemServices:ExecQuery 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.
The server responds with a valid IWbemFetchSmartEnum interface pointer. This means that the server
is optimized:
181 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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:
- WMI: IWbemWCOSmartEnum:Next Response, PuReturned=1 BuffSize=9104 ReturnValue=0x00000300 Unknown Value
PuReturned: 1 (0x1)
BuffSize: 9104 (0x2390)
+ BufferPtrSize: Pointer To 0x00020000, 9104 Elements
+ ObjectArray:
+ Pad: 2 Bytes
ReturnValue: 0x00000300 - Unknown Value
+ msrpc: c/o Continued Response: IWbemWCOSmartEnum(WMIRP) {423EC01E-2E35-11D2-B60400104B703EFD} Call=0xA Context=0x6 Hint=0xD1C Cancels=0x0 InstanceQuarlifier error:
Unknown QualifierType
The server responds with a valid IWbemCallResult interface pointer corresponding to the ExecMethod
operation above:
- WMI: IWbemServices:ExecMethod Response, ReturnValue=WBEM_S_NO_ERROR
+ OutParams: NULL
+ CallResult: OBJREFSTANDARD - {44ACA675-E8FC-11D0-A07C-00C04FB68820}
182 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
+ 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:
- WMI: IWbemCallResult:GetCallStatus Request, Timeout=5000
Timeout: 5000 ms(0x1388)
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:
- WMI: IWbemCallResult:GetCallStatus Response, Status=0 ReturnValue=WBEM_S_NO_ERROR
Status: 0 (0x0)
ReturnValue: 0x00000000 - WBEM_S_NO_ERROR - Indicates a successful completion to the
method call.
The client calls GetResultObject method on IWbemCallResult interface pointer to get the result object:
- WMI: IWbemCallResult:GetCallStatus Response, Status=0 ReturnValue=WBEM_S_NO_ERROR
Status: 0 (0x0)
ReturnValue: 0x00000000 - WBEM_S_NO_ERROR - Indicates a successful completion to the
method call.
The server responds with WBEM_S_NO_ERROR, and an instance of IwbemClassObject that contains
the return value from Terminate method above:
- WMI: IWbemCallResult:GetResultObject Response, ReturnValue=WBEM_S_NO_ERROR
+ ResultObject: OBJREFCUSTOM - {DC12A681-737F-11CF-884D-00AA004B2E24}
+ pad: 3 Bytes
ReturnValue: 0x00000000 - WBEM_S_NO_ERROR - Indicates a successful completion to the
method call.
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:
- WMI: IWbemServices:ExecQuery Request, Flags=48
+ StrQueryLanguage: WQL
+ StrQuery: select * from win32_process where Name='calc.exe'
+ Pad: 2 Bytes
+ Flags: 48 (0x30)
+ Ctx: NULL
In response to the method executed above, the server returns an IEnumWbemClassObject interface
pointer:
- WMI: IWbemServices:ExecQuery Response, ReturnValue=WBEM_S_NO_ERROR
+ Enum: OBJREFSTANDARD - {027947E1-D731-11CE-A357-000000000001}
+ Pad: 2 Bytes
183 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
The server responds with a valid IWbemFetchSmartEnum interface pointer. This means that the server
is optimized:
184 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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):
- WMI: IWbemWCOSmartEnum:Next Response, PuReturned=0 BuffSize=0 ReturnValue=WBEM_S_FALSE
PuReturned: 0 (0x0)
BuffSize: 0 (0x0)
+ BufferPtrSize: Pointer To NULL
Pad: 0 Bytes
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.
#pragma namespace("\\\\.\\root\\cimv2\\MyTest")
Class TestWMI
{
[key] uint32 x;
uint32 y;
};
Server responds with a valid IWbemCallResult interface pointer corresponding to the PutInstance
operation above:
- WMI: IWbemServices:PutInstance Response, ReturnValue=WBEM_S_NO_ERROR
+ CallResult: OBJREFSTANDARD - {44ACA675-E8FC-11D0-A07C-00C04FB68820}
+ Pad: 2 Bytes
ReturnValue: 0x00000000 - WBEM_S_NO_ERROR - Indicates a successful completion to the
method call.
Client calls GetCallStatus on IWbemCallResult interface pointer to obtain the status of PutInstance
operation above:
185 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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:
- WMI: IWbemCallResult:GetCallStatus Response, Status=0 ReturnValue=WBEM_S_NO_ERROR
Status: 0 (0x0)
ReturnValue: 0x00000000 - WBEM_S_NO_ERROR - Indicates a successful completion to the
method call.
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:
- 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:
Server responds with the result set containing 2 TestWMI instances. The instance property values are
(x=3,y=5) and (x=10,y=15):
- WMI: IWbemWCOSmartEnum:Next Response, PuReturned=2 BuffSize=410 ReturnValue=WBEM_S_FALSE
PuReturned: 2 (0x2)
BuffSize: 410 (0x19A)
+ BufferPtrSize: Pointer To 0x00020000, 410 Elements
+ ObjectArray:
+ Pad: 2 Bytes
187 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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):
- WMI: IWbemServices:DeleteInstance Request, Flags=16
+ StrObjectPath: \\SAI-NAV009-2\ROOT\cimv2\Mytest:TestWMI.x=10
+ Pad: 2 Bytes
Flags: WBEM_FLAG_RETURN_IMMEDIATELY - If this bit is not set, the server MUST make the
method call synchronously.If this bit is set, the server MUST make the method call
semisynchronously.
+ Ctx: NULL
+ CallResult: NULL
Server responds with a valid IWbemCallResult interface pointer corresponding to the DeleteInstance
operation above:
- WMI: IWbemServices:DeleteInstance Response, ReturnValue=WBEM_S_NO_ERROR
+ CallResult: OBJREFSTANDARD - {44ACA675-E8FC-11D0-A07C-00C04FB68820}
+ Pad: 2 Bytes
ReturnValue: 0x00000000 - WBEM_S_NO_ERROR - Indicates a successful completion to the
method call.
Client calls GetCallStatus on IWbemCallResult interface pointer to obtain the status of DeleteInstance
operation above:
- 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 DeleteInstance operation above was successfully executed on the server:
- WMI: IWbemCallResult:GetCallStatus Response, Status=0 ReturnValue=WBEM_S_NO_ERROR
Status: 0 (0x0)
ReturnValue: 0x00000000 - WBEM_S_NO_ERROR - Indicates a successful completion to the
method call.
In response to the method executed above, the server returns an IEnumWbemClassObject interface
pointer:
188 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
Server responds with a valid IWbemFetchSmartEnum interface pointer. This means that the server is
optimized:
- 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
189 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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:
- WMI: IWbemWCOSmartEnum:Next Response, PuReturned=1 BuffSize=307 ReturnValue=WBEM_S_FALSE
PuReturned: 1 (0x1)
BuffSize: 307 (0x133)
+ BufferPtrSize: Pointer To 0x00020000, 307 Elements
+ ObjectArray:
+ Pad: 1 Bytes
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.
4.4
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 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
4.5
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 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
4.6
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 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
4.7
193 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
194 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
Security
The following sections specify security considerations for implementers of the Windows Management
Instrumentation Remote Protocol.
5.1
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.
5.2
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.
Constants
Value
Meaning
WBEM_ENABLE
0x1
WBEM_FULL_WRITE
0x4
WBEM_METHOD_EXECUTE
0x2
WBEM_PARTIAL_WRITE_REP
0x8
WBEM_REMOTE_ENABLE
0x20
WBEM_WRITE_PROVIDER
0x10
READ_CONTROL
0x20000
WRITE_DAC
0x40000
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 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
For ease of implementation, the full IDL is provided, where "ms-oaut.idl" is the IDL found in [MSOAUT] Appendix A.
import "ms-dtyp.idl";
import "ms-oaut.idl";
typedef GUID *REFGUID;
interface
interface
interface
interface
interface
interface
interface
interface
interface
interface
interface
IWbemClassObject;
IWbemServices;
IWbemObjectSink;
IEnumWbemClassObject;
IWbemCallResult;
IWbemContext;
IWbemBackupRestore;
IWbemBackupRestoreEx;
IWbemLoginClientID;
IWbemLevel1Login;
IWbemLoginHelper;
[
restricted,
uuid(8BC3F05E-D86B-11d0-A075-00C04FB68820)
]
coclass WbemLevel1Login {
interface IWbemLevel1Login;
};
typedef long HRESULT;
typedef [v1_enum] enum tag_WBEM_QUERY_FLAG_TYPE {
WBEM_FLAG_DEEP = 0,
WBEM_FLAG_SHALLOW = 1,
WBEM_FLAG_PROTOTYPE = 2
} WBEM_QUERY_FLAG_TYPE;
typedef [v1_enum] enum tag_WBEM_CHANGE_FLAG_TYPE {
WBEM_FLAG_CREATE_OR_UPDATE = 0x00,
WBEM_FLAG_UPDATE_ONLY = 0x01,
WBEM_FLAG_CREATE_ONLY = 0x02,
WBEM_FLAG_UPDATE_SAFE_MODE = 0x20,
WBEM_FLAG_UPDATE_FORCE_MODE = 0x40
} WBEM_CHANGE_FLAG_TYPE;
typedef [v1_enum] enum tag_WBEM_CONNECT_OPTIONS {
WBEM_FLAG_CONNECT_REPOSITORY_ONLY = 0x40,
WBEM_FLAG_CONNECT_PROVIDERS
= 0x100
} WBEM_CONNECT_OPTIONS;
typedef [v1_enum] enum tag_WBEM_GENERIC_FLAG_TYPE {
WBEM_FLAG_RETURN_WBEM_COMPLETE = 0x0,
WBEM_FLAG_RETURN_IMMEDIATELY = 0x10,
WBEM_FLAG_FORWARD_ONLY = 0x20,
WBEM_FLAG_NO_ERROR_OBJECT = 0x40,
WBEM_FLAG_SEND_STATUS = 0x80,
WBEM_FLAG_ENSURE_LOCATABLE = 0x100,
WBEM_FLAG_DIRECT_READ = 0x200,
WBEM_MASK_RESERVED_FLAGS = 0x1F000,
WBEM_FLAG_USE_AMENDED_QUALIFIERS = 0x20000,
WBEM_FLAG_STRONG_VALIDATION = 0x100000
} WBEM_GENERIC_FLAG_TYPE;
typedef enum tag_WBEM_STATUS_TYPE {
WBEM_STATUS_COMPLETE = 0,
WBEM_STATUS_REQUIREMENTS = 0x01,
197 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
WBEM_STATUS_PROGRESS = 2
} WBEM_STATUS_TYPE;
typedef [v1_enum] enum tag_WBEM_TIMEOUT_TYPE {
WBEM_NO_WAIT = 0,
WBEM_INFINITE = 0xFFFFFFFF
} WBEM_TIMEOUT_TYPE;
typedef [v1_enum] enum tag_WBEM_BACKUP_RESTORE_FLAGS {
WBEM_FLAG_BACKUP_RESTORE_FORCE_SHUTDOWN = 1
} WBEM_BACKUP_RESTORE_FLAGS;
typedef [v1_enum] enum tag_WBEMSTATUS {
WBEM_S_NO_ERROR = 0x00,
WBEM_S_FALSE = 0x01,
WBEM_S_TIMEDOUT = 0x40004,
WBEM_S_NEW_STYLE = 0x400FF,
WBEM_S_PARTIAL_RESULTS = 0x40010,
WBEM_E_FAILED = 0x80041001,
WBEM_E_NOT_FOUND = 0x80041002,
WBEM_E_ACCESS_DENIED = 0x80041003,
WBEM_E_PROVIDER_FAILURE = 0x80041004,
WBEM_E_TYPE_MISMATCH = 0x80041005,
WBEM_E_OUT_OF_MEMORY = 0x80041006,
WBEM_E_INVALID_CONTEXT = 0x80041007,
WBEM_E_INVALID_PARAMETER = 0x80041008,
WBEM_E_NOT_AVAILABLE = 0x80041009,
WBEM_E_CRITICAL_ERROR = 0x8004100a,
WBEM_E_NOT_SUPPORTED = 0x8004100C,
WBEM_E_PROVIDER_NOT_FOUND = 0x80041011,
WBEM_E_INVALID_PROVIDER_REGISTRATION = 0x80041012,
WBEM_E_PROVIDER_LOAD_FAILURE = 0x80041013,
WBEM_E_INITIALIZATION_FAILURE = 0x80041014,
WBEM_E_TRANSPORT_FAILURE = 0x80041015,
WBEM_E_INVALID_OPERATION = 0x80041016,
WBEM_E_ALREADY_EXISTS = 0x80041019,
WBEM_E_UNEXPECTED = 0x8004101d,
WBEM_E_INCOMPLETE_CLASS = 0x80041020,
WBEM_E_SHUTTING_DOWN = 0x80041033,
E_NOTIMPL = 0x80004001,
WBEM_E_INVALID_SUPERCLASS = 0x8004100D,
WBEM_E_INVALID_NAMESPACE = 0x8004100E,
WBEM_E_INVALID_OBJECT = 0x8004100F,
WBEM_E_INVALID_CLASS = 0x80041010,
WBEM_E_INVALID_QUERY = 0x80041017,
WBEM_E_INVALID_QUERY_TYPE = 0x80041018,
WBEM_E_PROVIDER_NOT_CAPABLE = 0x80041024,
WBEM_E_CLASS_HAS_CHILDREN = 0x80041025,
WBEM_E_CLASS_HAS_INSTANCES = 0x80041026,
WBEM_E_ILLEGAL_NULL = 0x80041028,
WBEM_E_INVALID_CIM_TYPE = 0x8004102D,
WBEM_E_INVALID_METHOD = 0x8004102E,
WBEM_E_INVALID_METHOD_PARAMETERS = 0x8004102F,
WBEM_E_INVALID_PROPERTY = 0x80041031,
WBEM_E_CALL_CANCELLED = 0x80041032,
WBEM_E_INVALID_OBJECT_PATH = 0x8004103A,
WBEM_E_OUT_OF_DISK_SPACE = 0x8004103B,
WBEM_E_UNSUPPORTED_PUT_EXTENSION = 0x8004103D,
WBEM_E_QUOTA_VIOLATION = 0x8004106c,
WBEM_E_SERVER_TOO_BUSY = 0x80041045,
WBEM_E_METHOD_NOT_IMPLEMENTED = 0x80041055,
WBEM_E_METHOD_DISABLED = 0x80041056,
WBEM_E_UNPARSABLE_QUERY = 0x80041058,
WBEM_E_NOT_EVENT_CLASS = 0x80041059,
WBEM_E_MISSING_GROUP_WITHIN = 0x8004105A,
WBEM_E_MISSING_AGGREGATION_LIST = 0x8004105B,
WBEM_E_PROPERTY_NOT_AN_OBJECT = 0x8004105c,
WBEM_E_AGGREGATING_BY_OBJECT = 0x8004105d,
WBEM_E_BACKUP_RESTORE_WINMGMT_RUNNING = 0x80041060,
198 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
WBEM_E_QUEUE_OVERFLOW = 0x80041061,
WBEM_E_PRIVILEGE_NOT_HELD = 0x80041062,
WBEM_E_INVALID_OPERATOR = 0x80041063,
WBEM_E_CANNOT_BE_ABSTRACT = 0x80041065,
WBEM_E_AMENDED_OBJECT = 0x80041066,
WBEM_E_VETO_PUT = 0x8004107A,
WBEM_E_PROVIDER_SUSPENDED = 0x80041081,
WBEM_E_ENCRYPTED_CONNECTION_REQUIRED = 0x80041087,
WBEM_E_PROVIDER_TIMED_OUT = 0x80041088,
WBEM_E_NO_KEY = 0x80041089,
WBEM_E_PROVIDER_DISABLED = 0x8004108a,
WBEM_E_REGISTRATION_TOO_BROAD = 0x80042001,
WBEM_E_REGISTRATION_TOO_PRECISE = 0x80042002
WBEMSTATUS;
[
restricted,
uuid(674B6698-EE92-11d0-AD71-00C04FD8FDFF)
]
coclass WbemContext
{
interface IWbemContext;
};
[
uuid(9A653086-174F-11d2-B5F9-00104B703EFD)
]
coclass WbemClassObject
{
interface IWbemClassObject;
};
[
uuid(C49E32C6-BC8B-11d2-85D4-00105A1F8304)
]
coclass WbemBackupRestore
{
interface IWbemBackupRestoreEx;
};
#define OPTIONAL in, unique
interface IWbemQualifierSet;
[
local,
restricted,
object,
uuid(dc12a681-737f-11cf-884d-00aa004b2e24)
]
interface IWbemClassObject : IUnknown
{
};
interface IWbemServices;
[
object,
restricted,
uuid(7c857801-7381-11cf-884d-00aa004b2e24)
]
interface IWbemObjectSink : IUnknown
{
HRESULT Indicate(
[in] long lObjectCount,
199 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
[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 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
);
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 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
);
};
[
object,
restricted,
uuid(A359DEC5-E813-4834-8A2A-BA7F1D777D76)
]
interface IWbemBackupRestoreEx : IWbemBackupRestore
{
HRESULT Pause();
HRESULT Resume();
};
typedef enum _WBEM_REFR_VERSION_NUMBER {
WBEM_REFRESHER_VERSION = 2
} WBEM_REFR_VERSION_NUMBER;
typedef [v1_enum] enum _WBEM_INSTANCE_BLOB_TYPE {
WBEM_BLOB_TYPE_ALL = 2,
WBEM_BLOB_TYPE_ERROR = 3,
WBEM_BLOB_TYPE_ENUM = 4
} WBEM_INSTANCE_BLOB_TYPE;
typedef struct _WBEM_REFRESHED_OBJECT {
long m_lRequestId;
WBEM_INSTANCE_BLOB_TYPE m_lBlobType;
long m_lBlobLength;
[size_is(m_lBlobLength)] byte* m_pbBlob;
} WBEM_REFRESHED_OBJECT;
[
restricted,
uuid(F1E9C5B2-F59B-11d2-B362-00105A1F8177)
]
interface IWbemRemoteRefresher : IUnknown {
HRESULT RemoteRefresh(
[in] long lFlags,
[out] long* plNumObjects,
[out, size_is(,*plNumObjects)]
WBEM_REFRESHED_OBJECT** paObjects
);
HRESULT StopRefreshing(
[in] long lNumIds,
[in, size_is(lNumIds)] long* aplIds,
[in] long lFlags
);
HRESULT Opnum5NotUsedOnWire(
[in] long lFlags,
[out] GUID* pGuid
);
};
typedef struct {
IWbemRemoteRefresher* m_pRefresher;
IWbemClassObject*
m_pTemplate;
GUID
m_Guid;
} _WBEM_REFRESH_INFO_REMOTE;
typedef struct {
[string] wchar_t* m_wszNamespace;
IWbemClassObject* m_pTemplate;
} _WBEM_REFRESH_INFO_NON_HIPERF;
204 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
typedef enum
{
WBEM_REFRESH_TYPE_INVALID = 0,
WBEM_REFRESH_TYPE_REMOTE = 3,
WBEM_REFRESH_TYPE_NON_HIPERF = 6
}WBEM_REFRESH_TYPE;
typedef [switch_type(long)] union {
[case (WBEM_REFRESH_TYPE_REMOTE)]
_WBEM_REFRESH_INFO_REMOTE m_Remote;
[case (WBEM_REFRESH_TYPE_NON_HIPERF)]
_WBEM_REFRESH_INFO_NON_HIPERF m_NonHiPerf;
[case (WBEM_REFRESH_TYPE_INVALID)]
HRESULT m_hres;
} WBEM_REFRESH_INFO_UNION;
typedef struct {
long m_lType;
[switch_is(m_lType)] WBEM_REFRESH_INFO_UNION m_Info;
long m_lCancelId;
} _WBEM_REFRESH_INFO;
typedef struct {
[string] LPSTR m_szMachineName;
DWORD
m_dwProcessId;
GUID
m_guidRefresherId;
} _WBEM_REFRESHER_ID;
typedef enum {
WBEM_RECONNECT_TYPE_OBJECT = 0,
WBEM_RECONNECT_TYPE_ENUM = 1,
WBEM_RECONNECT_TYPE_LAST = 2
}WBEM_RECONNECT_TYPE;
typedef struct {
long m_lType;
[string] LPCWSTR m_pwcsPath;
} _WBEM_RECONNECT_INFO;
typedef struct {
long m_lId;
HRESULT m_hr;
} _WBEM_RECONNECT_RESULTS;
[
restricted,
uuid(2C9273E0-1DC3-11d3-B364-00105A1F8177)
]
interface IWbemRefreshingServices : IUnknown
{
HRESULT AddObjectToRefresher(
[in] _WBEM_REFRESHER_ID* pRefresherId,
[in, string] LPCWSTR wszPath,
[in] long lFlags,
[in] IWbemContext* pContext,
[in] DWORD dwClientRefrVersion,
[out] _WBEM_REFRESH_INFO* pInfo,
[out] DWORD* pdwSvrRefrVersion
);
HRESULT AddObjectToRefresherByTemplate(
[in] _WBEM_REFRESHER_ID* pRefresherId,
[in] IWbemClassObject* pTemplate,
[in] long lFlags,
[in] IWbemContext* pContext,
[in] DWORD dwClientRefrVersion,
205 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
};
208 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
The information in this specification is applicable to the following Microsoft products or supplemental
software. References to product versions include released service packs.
Exceptions, if any, are noted below. If a service pack or Quick Fix Engineering (QFE) number appears
with the product version, behavior changed in that service pack or QFE. The new behavior also applies
to subsequent service packs of the product unless otherwise specified. If a product edition appears
with the product version, behavior is different in that product edition.
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.
<2> Section 2.2.12: Windows interprets the flags as follows:
WBEM_FLAG_CONNECT_REPOSITORY_ONLY: The connection is established to operate only on
the static data (classes and instances) stored in the CIM database. Operations requiring a
provider will not be supported on this connection.
WBEM_FLAG_CONNECT_PROVIDERS: The connection is established to operate only on the
provider.
209 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
<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, Windows XP, Windows Server 2003, Windows Vista, Windows
Server 2008, Windows 7, Windows 8, Windows Server 2012, Windows 8.1, Windows Server 2012 R2,
Windows 10, and Windows Server 2016 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, Windows XP, Windows Server 2003, Windows Vista, Windows
Server 2008, Windows 7, Windows 8, Windows Server 2012, Windows 8.1, Windows Server 2012 R2,
Windows 10, and Windows Server 2016 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, 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.
<12> Section 3.1.1: In Windows, the limit is 5000.
<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.
The security groups refer to the values defined in [MS-DTYP] section 2.4.2.4.
Starting with Windows Vista, the default security groups are:
AUTHENTICATED_USERS
LOCAL_SERVICE
NETWORK_SERVICE
BUILTIN_ADMINISTRATORS
In Windows Server 2003, Windows XP, Windows 2000, and Windows NT 4.0, the default security
groups are:
210 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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.
<15> Section 3.1.1.1.3: Windows does not send progress information.
<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 is RPC_C_AUTHN_LEVEL_CONNECT. In
Windows 2000, 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, Windows Server 2008, Windows 7, Windows Server 2008 R2, Windows 8, Windows
Server 2012, Windows 8.1, Windows Server 2012 R2, Windows 10, and Windows Server 2016, the
AllowAnonymousCallback value will be retrieved from registry location
HKLM\SOFTWARE\Microsoft\WBEM\CIMOM\AllowAnonymousCallback. In Windows 2000 and Windows
XP, the server does not check for the UnsecAppAccessControlDefault flag prior to downgrading the
authentication level.
In Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, Windows Server 2008
R2, Windows 8, Windows Server 2012, Windows 8.1, Windows Server 2012 R2, Windows 10, and
Windows Server 2016, the UnsecAppAccessControlDefault value will be retrieved from registry location
HKLM\Software\Microsoft\WBEM\CIMOM\UnsecAppAccessControlDefault.
<17> Section 3.1.3: In Windows 2000, 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:
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.
Operating system version
Windows NT
211 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
Windows 2000
RPC_C_AUTHN_LEVEL_CONNECT
RPC_C_AUTHN_LEVEL_PKT
Windows XP
RPC_C_AUTHN_LEVEL_PKT
RPC_C_AUTHN_LEVEL_PKT
Windows Vista
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, Windows Server 2012, Windows 8.1,
Windows Server 2012 R2, Windows 10, and Windows Server 2016 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.
<30> Section 3.1.4.1.4: Windows 2000, Windows XP, Windows Server 2003, Windows Vista, Windows
Server 2008, Windows 8, Windows Server 2012, Windows 8.1, Windows Server 2012 R2, Windows 10,
and Windows Server 2016 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, Windows Server
2008, Windows 8, Windows Server 2012, Windows 8.1, Windows Server 2012 R2, Windows 10, and
Windows Server 2016 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
212 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
E_INVALIDARG. If the locale string is not in "MS_xxx" format and it is not a valid locale for Windows
7, Windows Server 2008 R2, Windows 8, Windows Server 2012, Windows 8.1, Windows Server 2012
R2, Windows 10, or Windows Server 2016, 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, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, Windows Server 2008
R2, Windows 8, Windows Server 2012, Windows 8.1, Windows Server 2012 R2, Windows 10, and
Windows Server 2016 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=""):
Windows Vista
Windows 7
Windows 8
Windows 8.1
Windows 10
<33> Section 3.1.4.1.4: Windows uses the system's locale as described in [MSDNGetSystemDefaultLangID].
<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
213 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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):
Windows Vista
Windows 7
Windows 8
Windows 8.1
Windows 10
<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):
Windows Vista
Windows 7
Windows 8
Windows 8.1
214 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
Windows 10
<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):
Windows Vista
Windows 7
Windows 8
Windows 8.1
Windows 10
<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):
Windows Vista
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
Windows 7
Windows 8
Windows 8.1
Windows 10
<40> Section 3.1.4.3.10: 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):
Windows Vista
Windows 7
Windows 8
Windows 8.1
Windows 10
<41> Section 3.1.4.3.11: The following Windows versions do not enforce a limit:
Windows NT 4.0
Windows 2000
Windows XP
216 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
These Windows versions enforce a query string limit of 4096 characters (WBEM_MAX_IDENTIFIER =
0x1000):
Windows Vista
Windows 7
Windows 8
Windows 8.1
Windows 10
<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):
Windows Vista
Windows 8
Windows 8.1
Windows 10
<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):
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
Windows Vista
Windows 7
Windows 8
Windows 8.1
Windows 10
<44> Section 3.1.4.3.14: 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 8192 characters (WBEM_MAX_PATH =
0x2000):
Windows Vista
Windows 7
Windows 8
Windows 8.1
Windows 10
<45> Section 3.1.4.3.15: The following Windows versions do not enforce a limit:
Windows NT 4.0
Windows 2000
218 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
Windows XP
These Windows versions enforce a query string limit of 8,192 characters (WBEM_MAX_PATH =
0x2000):
Windows Vista
Windows 7
Windows 8
Windows 8.1
Windows 10
<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):
Windows Vista
Windows 7
Windows 8
Windows 8.1
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
Windows 10
<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):
Windows Vista
Windows 7
Windows 8
Windows 8.1
Windows 10
<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):
Windows Vista
Windows 7
220 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
Windows 8
Windows 8.1
Windows 10
<49> Section 3.1.4.3.18: Keysonly is not available in the following products: Windows 95 operating
system, Windows NT 4.0, Microsoft 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):
Windows Vista
Windows 7
Windows 8
Windows 8.1
Windows 10
221 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
<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
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):
Windows Vista
Windows 7
Windows 8
Windows 8.1
Windows 10
<54> Section 3.1.4.3.21: The following Windows versions do not enforce a limit:
Windows NT 4.0
Windows 2000
222 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
Windows XP
These Windows versions enforce a query string limit of 16,384 characters (WBEM_MAX_QUERY =
0x4000):
Windows Vista
Windows 7
Windows 8
Windows 8.1
Windows 10
<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
Windows 8
<56> Section 3.1.4.8.1: Windows servers 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.
223 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
<58> Section 3.1.4.10.1: Windows Server operating system requires 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: Windows Server requires 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.
<64> Section 3.1.4.12.1: Windows 2000 sets the version number to 1.
<65> Section 3.1.4.12.2: Windows 2000 sets the version number to 1.
<66> Section 3.1.4.12.3: Windows 2000 sets the version number to 1.
<67> Section 3.1.4.12.4: Windows 2000 sets the version number to 1.
<68> Section 3.1.4.12.4: Windows does not implement this method and returns a
WBEM_E_NOT_AVAILABLE error code.
<69> Section 3.1.4.12.5: Windows 2000 sets the version number to 1.
<70> Section 3.1.4.12.6: Windows 2000 sets the version number to 1.
<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.
<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.
Starting with Windows Vista, the default security groups are:
Authenticated Users
LOCAL SERVICE
NETWORK SERVICE
In Windows Server 2003, Windows XP, Windows 2000 and Windows NT 4.0, the default security
groups are:
224 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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.
<79> Section 3.2.3: If the return value from IWbemLevel1Login::EstablishPosition is
WBEM_S_NO_ERROR and LocaleVersion is set to 0, the client filters out locale lists that are not
supported in Windows Vista, as specified in [MS-LCID].
<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.
<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.
<82> Section 3.2.4.1.2: Windows does not send progress information.
<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
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
Windows Vista
Windows 7
Windows 8
Windows 8.1
Windows 10
<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
Windows XP SP3
Windows Vista
Windows 7
Windows 8
Windows 8.1
Windows 10
<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.
226 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
Windows 2000
RPC_C_AUTHN_LEVEL_CONNECT
RPC_C_AUTHN_LEVEL_PKT
Windows XP
RPC_C_AUTHN_LEVEL_PKT
RPC_C_AUTHN_LEVEL_PKT
Windows Vista
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.
227 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
The following status codes are defined by WMI, but are either unused or used only in local client
scenarios:
Status Code
Value
Used?
WBEM_E_INVALID_STREAM
0x8004100B
Local only
WBEM_E_OVERRIDE_NOT_ALLOWED
0x8004101A
Local only
WBEM_E_PROPAGATED_QUALIFIER
0x8004101B
Local only
WBEM_E_PROPAGATED_PROPERTY
0x8004101C
Local only
WBEM_E_ILLEGAL_OPERATION
0x8004101E
Local only
WBEM_E_CANNOT_BE_KEY
0x8004101F
Local only
WBEM_E_INCOMPLETE_CLASS
0x80041020
Local only
WBEM_E_INVALID_SYNTAX
0x80041021
Local only
WBEM_E_NONDECORATED_OBJECT
0x80041022
Unused
WBEM_E_READ_ONLY
0x80041023
Local only
WBEM_E_QUERY_NOT_IMPLEMENTED
0x80041027
Unused
WBEM_E_INVALID_PROPERTY_TYPE
0x8004102A
Local only
WBEM_E_CANNOT_BE_SINGLETON
0x8004102C
Local only
WBEM_E_INVALID_CIM_TYPE
0x8004102D
Local only
WBEM_E_SYSTEM_PROPERTY
0x80041030
Local only
WBEM_E_PROPAGATED_METHOD
0x80041034
Local only
WBEM_E_UNSUPPORTED_PARAMETER
0x80041035
Unused
WBEM_E_MISSING_PARAMETER_ID
0x80041036
Local only
WBEM_E_INVALID_PARAMETER_ID
0x80041037
Local only
WBEM_E_NONCONSECUTIVE_PARAMETER_IDS
0x80041038
Local only
WBEM_E_PARAMETER_ID_ON_RETVAL
0x80041039
Local only
WBEM_E_BUFFER_TOO_SMALL
0x8004103C
Local only
WBEM_E_UNKNOWN_OBJECT_TYPE
0x8004103E
Local only
WBEM_E_UNKNOWN_PACKET_TYPE
0x8004103F
Local only
WBEM_E_MARSHAL_VERSION_MISMATCH
0x80041040
Local only
WBEM_E_MARSHAL_INVALID_SIGNATURE
0x80041041
Local only
WBEM_E_INVALID_QUALIFIER
0x80041042
Local only
WBEM_E_INVALID_DUPLICATE_PARAMETER
0x80041043
Local only
WBEM_E_TOO_MUCH_DATA
0x80041044
Unused
228 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
Status Code
Value
Used?
WBEM_E_INVALID_FLAVOR
0x80041046
Local only
WBEM_E_CIRCULAR_REFERENCE
0x80041047
Local only
WBEM_E_UNSUPPORTED_CLASS_UPDATE
0x80041048
Unused
WBEM_E_CANNOT_CHANGE_KEY_INHERITANCE
0x80041049
Unused
WBEM_E_CANNOT_CHANGE_INDEX_INHERITANCE
0x80041050
Unused
WBEM_E_TOO_MANY_PROPERTIES
0x80041051
Local only
WBEM_E_UPDATE_TYPE_MISMATCH
0x80041052
Local only
WBEM_E_UPDATE_OVERRIDE_NOT_ALLOWED
0x80041053
Local only
WBEM_E_UPDATE_PROPAGATED_METHOD
0x80041054
Local only
WBEM_E_REFRESHER_BUSY
0x80041057
Local only
WBEM_E_LOCAL ONLY_CREDENTIALS
0x80041064
Local only
WBEM_E_CLIENT_TOO_SLOW
0x80041067
Unused
WBEM_E_NULL_SECURITY_DESCRIPTOR
0x80041068
Unused
WBEM_E_INVALID_ASSOCIATION
0x8004106A
Unused
WBEM_E_AMBIGUOUS_OPERATION
0x8004106B
Unused
WBEM_E_RESERVED_001
0x8004106D
Unused
WBEM_E_RESERVED_002
0x8004106E
Unused
WBEM_E_UNSUPPORTED_LOCAL ONLY
0x8004106F
Unused
WBEM_E_HANDLE_OUT_OF_DATE
0x80041070
Unused
WBEM_E_CONNECTION_FAILED
0x80041071
Unused
WBEM_E_INVALID_HANDLE_REQUEST
0x80041072
Unused
WBEM_E_PROPERTY_NAME_TOO_WIDE
0x80041073
Unused
WBEM_E_CLASS_NAME_TOO_WIDE
0x80041074
Unused
WBEM_E_METHOD_NAME_TOO_WIDE
0x80041075
Unused
WBEM_E_QUALIFIER_NAME_TOO_WIDE
0x80041076
Unused
WBEM_E_RERUN_COMMAND
0x80041077
Unused
WBEM_E_DATABASE_VER_MISMATCH
0x80041078
Unused
WBEM_E_VETO_DELETE
0x80041079
Unused
WBEM_E_INVALID_LOCAL ONLY
0x80041080
Unused
WBEM_E_SYNCHRONIZATION_REQUIRED
0x80041082
Unused
WBEM_E_NO_SCHEMA
0x80041083
Unused
WBEM_E_PROVIDER_ALREADY_REGISTERED
0x80041084
Local only
229 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
Status Code
Value
Used?
WBEM_E_PROVIDER_NOT_REGISTERED
0x80041085
Local only
WBEM_E_FATAL_TRANSPORT_ERROR
0x80041086
Unused
WBEMMOF_E_EXPECTED_QUALIFIER_NAME
0x80044001
Local only
WBEMMOF_E_EXPECTED_SEMI
0x80044002
Local only
WBEMMOF_E_EXPECTED_OPEN_BRACE
0x80044003
Local only
WBEMMOF_E_EXPECTED_CLOSE_BRACE
0x80044004
Local only
WBEMMOF_E_EXPECTED_CLOSE_BRACKET
0x80044005
Local only
WBEMMOF_E_EXPECTED_CLOSE_PAREN
0x80044006
Local only
WBEMMOF_E_ILLEGAL_CONSTANT_VALUE
0x80044007
Local only
WBEMMOF_E_EXPECTED_TYPE_IDENTIFIER
0x80044008
Local only
WBEMMOF_E_EXPECTED_OPEN_PAREN
0x80044009
Local only
WBEMMOF_E_UNRECOGNIZED_TOKEN
0x8004400A
Local only
WBEMMOF_E_UNRECOGNIZED_TYPE
0x8004400B
Local only
WBEMMOF_E_EXPECTED_PROPERTY_NAME
0x8004400C
Local only
WBEMMOF_E_TYPEDEF_NOT_SUPPORTED
0x8004400D
Local only
WBEMMOF_E_UNEXPECTED_ALIAS
0x8004400E
Local only
WBEMMOF_E_UNEXPECTED_ARRAY_INIT
0x8004400F
Local only
WBEMMOF_E_INVALID_AMENDMENT_SYNTAX
0x80044010
Local only
WBEMMOF_E_INVALID_DUPLICATE_AMENDMENT
0x80044011
Local only
WBEMMOF_E_INVALID_PRAGMA
0x80044012
Local only
WBEMMOF_E_INVALID_NAMESPACE_SYNTAX
0x80044013
Local only
WBEMMOF_E_EXPECTED_CLASS_NAME
0x80044014
Local only
WBEMMOF_E_TYPE_MISMATCH
0x80044015
Local only
WBEMMOF_E_EXPECTED_ALIAS_NAME
0x80044016
Local only
WBEMMOF_E_INVALID_CLASS_DECLARATION
0x80044017
Local only
WBEMMOF_E_INVALID_INSTANCE_DECLARATION
0x80044018
Local only
WBEMMOF_E_EXPECTED_DOLLAR
0x80044019
Local only
WBEMMOF_E_CIMTYPE_QUALIFIER
0x8004401A
Local only
WBEMMOF_E_DUPLICATE_PROPERTY
0x8004401B
Local only
WBEMMOF_E_INVALID_NAMESPACE_SPECIFICATION
0x8004401C
Unused
WBEMMOF_E_OUT_OF_RANGE
0x8004401D
Unused
WBEMMOF_E_INVALID_FILE
0x8004401E
Local only
230 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
Status Code
Value
Used?
WBEMMOF_E_ALIASES_IN_EMBEDDED
0x8004401F
Local only
WBEMMOF_E_NULL_ARRAY_ELEM
0x80044020
Local only
WBEMMOF_E_DUPLICATE_QUALIFIER
0x80044021
Local only
WBEMMOF_E_EXPECTED_FLAVOR_TYPE
0x80044022
Local only
WBEMMOF_E_INCOMPATIBLE_FLAVOR_TYPES
0x80044023
Unused
WBEMMOF_E_MULTIPLE_ALIASES
0x80044024
Local only
WBEMMOF_E_INCOMPATIBLE_FLAVOR_TYPES2
0x80044025
Local only
WBEMMOF_E_NO_ARRAYS_RETURNED
0x80044026
Local only
WBEMMOF_E_MUST_BE_IN_OR_OUT
0x80044027
Local only
WBEMMOF_E_INVALID_FLAGS_SYNTAX
0x80044028
Local only
WBEMMOF_E_EXPECTED_BRACE_OR_BAD_TYPE
0x80044029
Local only
WBEMMOF_E_UNSUPPORTED_CIMV22_QUAL_VALUE
0x8004402A
Local only
WBEMMOF_E_UNSUPPORTED_CIMV22_DATA_TYPE
0x8004402B
Local only
WBEMMOF_E_INVALID_DELETEINSTANCE_SYNTAX
0x8004402C
Local only
WBEMMOF_E_INVALID_QUALIFIER_SYNTAX
0x8004402D
Local only
WBEMMOF_E_QUALIFIER_USED_OUTSIDE_SCOPE
0x8004402E
Local only
WBEMMOF_E_ERROR_CREATING_TEMP_FILE
0x8004402F
Local only
WBEMMOF_E_ERROR_INVALID_INCLUDE_FILE
0x80044030
Local only
WBEMMOF_E_INVALID_DELETECLASS_SYNTAX
0x80044031
Local only
WBEM_S_ALREADY_EXISTS
0x40001
Unused
WBEM_S_RESET_TO_DEFAULT
0x40002
Local only
WBEM_S_DIFFERENT
0x40003
Local only
WBEM_S_NO_MORE_DATA
0x40005
Local only
WBEM_S_OPERATION_CANCELLED
0x40006
Local only
WBEM_S_PENDING
0x40007
Unused
WBEM_S_DUPLICATE_OBJECTS
0x40008
Unused
WBEM_S_ACCESS_DENIED
0x40009
Local only
WBEM_S_PARTIAL_RESULTS
0x40010
Local only
WBEM_S_SOURCE_NOT_AVAILABLE
0x40017
Local only
WBEM_S_SAME
Local only
231 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
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
for each subns in wmi.instancesof("__namespace")
EnumerateSchema ns & "\" & subns.name
next
end if
end sub
function escapeit(ns)
escapeit = replace(ns, "\", "\\")
end function
232 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
10 Change Tracking
No table of changes is available. The document is either new or has had no changes since its last
release.
233 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
11 Index
_
__SystemSecurity class 50
_WBEM_RECONNECT_INFO structure 48
_WBEM_RECONNECT_RESULTS structure 48
_WBEM_REFRESH_INFO structure 47
_WBEM_REFRESH_INFO_NON_HIPERF structure 49
_WBEM_REFRESH_INFO_REMOTE structure 49
_WBEM_REFRESH_TYPE enumeration 49
_WBEM_REFRESHER_ID structure 47
A
Abstract data model
client 153
server 56
Abstract Provider Interface method 147
AddEnumToRefresher method 138
Additional error codes 228
AddObjectToRefresher method 135
AddObjectToRefresherByTemplate method 137
Applicability 17
Asynchronous delivery example 190
Asynchronous delivery of results example 190
B
Backup method 132
C
CancelAsyncCall method 77
Capability negotiation 17
Change tracking 233
CIM path and namespace 25
Client
abstract data model 153
initialization 153
IUnsecuredApartment Interface Client Details
method 161
IWbemBackupRestore Interface Client Details
method 159
IWbemBackupRestoreEx Interface Client Details
method 159
IWbemObjectSink Interface Client Details method
153
IWbemRefreshingServices Interface Client Details
method 159
IWbemShutdown Interface Client Details method
161
IWbemUnsecuredApartment Interface Client
Details method 161
local events 161
message processing 153
overview 55
sequencing rules 153
timer events 161
timers 153
Clone method 121
Common data types
CIM path and namespace 25
default system classes 51
IWbemClassObject interface 27
IWbemContext interface 36
locale formats 50
ObjectArray structure 41
RefreshedInstances packet 46
RefreshedSingleInstance packet 47
return codes 26
supported qualifiers 52
SystemSecurity class 50
WBEM_BACKUP_RESTORE_FLAGS enumeration 32
WBEM_CHANGE_FLAG_TYPE enumeration 29
WBEM_CONNECT_OPTIONS enumeration 36
WBEM_GENERIC_FLAG_TYPE enumeration 29
WBEM_INSTANCE_BLOB enumeration 46
WBEM_INSTANCE_BLOB_TYPE enumeration 46
WBEM_QUERY_FLAG_TYPE enumeration 31
WBEM_RECONNECT_INFO structure 48
WBEM_RECONNECT_RESULTS structure 48
WBEM_RECONNECT_TYPE enumeration 48
WBEM_REFRESH_INFO structure 47
WBEM_REFRESH_INFO_NON_HIPERF structure 49
WBEM_REFRESH_INFO_REMOTE structure 49
WBEM_REFRESH_INFO_UNION union 50
WBEM_REFRESH_TYPE enumeration 49
WBEM_REFRESHED_OBJECT structure 45
WBEM_REFRESHER_ID structure 47
WBEM_STATUS_TYPE enumeration 30
WBEM_TIMEOUT_TYPE enumeration 31
WBEMSTATUS enumeration 32
WQL query 18
Configuring refreshing services example 192
CreateClassEnum method 90
CreateClassEnumAsync method 91
CreateInstanceEnum method 101
CreateInstanceEnumAsync method 103
CreateObjectStub method 146
CreateSinkStub method 147
D
Data model - abstract
client 153
server 56
Data types
CIM path and namespace 25
default system classes 51
IWbemClassObject interface 27
IWbemContext interface 36
locale formats 50
ObjectArray structure 41
RefreshedInstances packet 46
RefreshedSingleInstance packet 47
return codes 26
supported qualifiers 52
SystemSecurity class 50
WBEM_BACKUP_RESTORE_FLAGS enumeration 32
WBEM_CHANGE_FLAG_TYPE enumeration 29
WBEM_CONNECT_OPTIONS enumeration 36
WBEM_GENERIC_FLAG_TYPE enumeration 29
WBEM_INSTANCE_BLOB enumeration 46
WBEM_INSTANCE_BLOB_TYPE enumeration 46
WBEM_QUERY_FLAG_TYPE enumeration 31
234 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
WBEM_RECONNECT_INFO structure 48
WBEM_RECONNECT_RESULTS structure 48
WBEM_RECONNECT_TYPE enumeration 48
WBEM_REFRESH_INFO structure 47
WBEM_REFRESH_INFO_NON_HIPERF structure 49
WBEM_REFRESH_INFO_REMOTE structure 49
WBEM_REFRESH_INFO_UNION union 50
WBEM_REFRESH_TYPE enumeration 49
WBEM_REFRESHED_OBJECT structure 45
WBEM_REFRESHER_ID structure 47
WBEM_STATUS_TYPE enumeration 30
WBEM_TIMEOUT_TYPE enumeration 31
WBEMSTATUS enumeration 32
WQL query 18
Default system classes 51
DeleteClass method 87
DeleteClassAsync method 89
DeleteInstance method 98
DeleteInstanceAsync method 100
E
Error codes - additional 228
EstablishPosition method 68
Events
local
client 161
server 152
local - client 161
local - server 152
timer
client 161
server 151
timer - client 161
timer - server 151
Examples
asynchronous delivery 190
asynchronous delivery of results 190
configuring refresher services 192
configuring refreshing services 192
initialization 162
optimized asynchronous delivery 191
optimized asynchronous delivery of results 191
overview 162
protocol initialization 162
refresher interface 193
semisynchronous operations 179
synchronous operations 165
using the refresher interface 193
ExecMethod method 114
ExecMethodAsync method 116
ExecNotificationQuery method 110
ExecNotificationQueryAsync method 111
ExecQuery method 104
ExecQueryAsync method 108
F
Fields - vendor-extensible 17
Full IDL 197
G
GetCallStatus method 126
GetObject method 78
GetObjectAsync method 80
GetRemoteRefresher method 140
GetResultObject method 123
GetResultServices method 125
GetResultString method 124
GetSD method 50
GetSmartEnum method 127
Glossary 9
I
IDL 197
IEnumWbemClassObject Interface method 117
Implementer - security considerations 195
Index of security parameters 195
Indicate method 72
Informative references 13
Initialization
client 153
server 64
Initialization examples
captures 165
overview 162
trace 163
Introduction 9
IUnsecuredApartment Interface Client Details
method 161
IUnsecuredApartment Interface method 145
IWbemBackupRestore Interface Client Details
method 159
IWbemBackupRestore Interface method 131
IWbemBackupRestoreEx Interface Client Details
method 159
IWbemBackupRestoreEx Interface method 133
IWbemCallResult Interface method 123
IWbemClassObject interface 27
IWbemContext interface 36
IWbemFetchSmartEnum Interface method 127
IWbemLevel1Login Interface method 67
IWbemLevel1Login::EstablishPosition (Opnum 3) 68
IWbemLevel1Login::RequestChallenge (Opnum 4) 69
IWbemLevel1Login::WBEMLogin (Opnum 5) 69
IWbemLoginClientID Interface method 129
IWbemLoginHelper Interface method 130
IWbemObjectSink Interface Client Details method
153
IWbemObjectSink Interface Server Details method
71
IWbemRefreshingServices Interface Client Details
method 159
IWbemRefreshingServices Interface method 135
IWbemRemoteRefresher Interface method 142
IWbemServices Interface method 73
IWbemShutdown Interface Client Details method 161
IWbemShutdown Interface method 144
IWbemUnsecuredApartment Interface Client Details
method 161
IWbemUnsecuredApartment Interface method 146
IWbemWCOSmartEnum Interface method 128
L
Local events
client 161
server 152
235 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
Locale formats 50
M
Message processing
client 153
server 64
Messages
common data types
CIM path and namespace 25
default system classes 51
IWbemClassObject interface 27
IWbemContext interface 36
locale formats 50
ObjectArray structure 41
RefreshedInstances packet 46
RefreshedSingleInstance packet 47
return codes 26
supported qualifiers 52
SystemSecurity class 50
WBEM_BACKUP_RESTORE_FLAGS enumeration
32
WBEM_CHANGE_FLAG_TYPE enumeration 29
WBEM_CONNECT_OPTIONS enumeration 36
WBEM_GENERIC_FLAG_TYPE enumeration 29
WBEM_INSTANCE_BLOB enumeration 46
WBEM_INSTANCE_BLOB_TYPE enumeration 46
WBEM_QUERY_FLAG_TYPE enumeration 31
WBEM_RECONNECT_INFO structure 48
WBEM_RECONNECT_RESULTS structure 48
WBEM_RECONNECT_TYPE enumeration 48
WBEM_REFRESH_INFO structure 47
WBEM_REFRESH_INFO_NON_HIPERF structure
49
WBEM_REFRESH_INFO_REMOTE structure 49
WBEM_REFRESH_INFO_UNION union 50
WBEM_REFRESH_TYPE enumeration 49
WBEM_REFRESHED_OBJECT structure 45
WBEM_REFRESHER_ID structure 47
WBEM_STATUS_TYPE enumeration 30
WBEM_TIMEOUT_TYPE enumeration 31
WBEMSTATUS enumeration 32
WQL query 18
overview 18
transport 18
Methods
Abstract Provider Interface 147
IEnumWbemClassObject Interface 117
IUnsecuredApartment Interface 145
IUnsecuredApartment Interface Client Details 161
IWbemBackupRestore Interface 131
IWbemBackupRestore Interface Client Details 159
IWbemBackupRestoreEx Interface 133
IWbemBackupRestoreEx Interface Client Details
159
IWbemCallResult Interface 123
IWbemFetchSmartEnum Interface 127
IWbemLevel1Login Interface 67
IWbemLoginClientID Interface 129
IWbemLoginHelper Interface 130
IWbemObjectSink Interface Client Details 153
IWbemObjectSink Interface Server Details 71
IWbemRefreshingServices Interface 135
IWbemRefreshingServices Interface Client Details
159
N
Namespaces method 150
Next method (section 3.1.4.4.2 119, section
3.1.4.7.1 128)
NextAsync method 120
Normative references 12
NTLMLogin method 70
O
ObjectArray packet 41
OpenNamespace method 75
Opnum5NotUsedOnWire method 144
Optimized asynchronous delivery example 191
Optimized asynchronous delivery of results example
191
Overview (synopsis) 13
P
Parameter index - security 195
Parameters - security index 195
Pause method 134
Preconditions 16
Prerequisites 16
Product behavior 209
Protocol Details
overview 55
Protocol initialization example 162
PutClass method 82
PutClassAsync method 85
PutInstance method 93
PutInstanceAsync method 96
Q
Qualifiers 52
QueryObjectSink method 77
R
ReconnectRemoteRefresher method 141
References 12
informative 13
normative 12
RefreshedInstances packet 46
RefreshedSingleInstance packet 47
Refresher interface example 193
Relationship to other protocols 16
RemoteRefresh method 142
RemoveObjectFromRefresher method 139
RequestChallenge method 69
Reset method 118
236 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016
S
Security
implementer considerations 195
overview 195
parameter index 195
Semisynchronous operations example 179
Semisynchronous operations examples
delivery of result sets 180
delivery of single result 179
delivery traces
delivery of IWbemServices ExecQuery and
ExecMethod operations 180
delivery of IwbemServices
PutInstance/DeleteInstance/CreateInstanceEnu
m operations 185
overview 179
Sequencing rules
client 153
server 64
Server
abstract data model 56
Abstract Provider Interface method 147
IEnumWbemClassObject Interface method 117
initialization 64
IUnsecuredApartment Interface method 145
IWbemBackupRestore Interface method 131
IWbemBackupRestoreEx Interface method 133
IWbemCallResult Interface method 123
IWbemFetchSmartEnum Interface method 127
IWbemLevel1Login Interface method 67
IWbemLoginClientID Interface method 129
IWbemLoginHelper Interface method 130
IWbemObjectSink Interface Server Details method
71
IWbemRefreshingServices Interface method 135
IWbemRemoteRefresher Interface method 142
IWbemServices Interface method 73
IWbemShutdown Interface method 144
IWbemUnsecuredApartment Interface method 146
IWbemWCOSmartEnum Interface method 128
local events 152
message processing 64
Namespaces method 150
overview (section 3 55, section 3.1 55)
sequencing rules 64
timer events 151
timers 63
SetClientInfo method 130
SetEvent method 130
SetSD method 51
SetStatus method 72
Shutdown method 145
Skip method 122
Standards assignments 17
Status codes - additional 228
StopRefreshing method 143
Supported qualifiers 52
Synchronous operations example 165
Synchronous operations examples
delivery of result sets
optimized client and optimized server 168
T
Timer events
client 161
server 151
Timers
client 153
server 63
Tracking changes 233
Transport 18
Transport - message 18
U
Using the refresher interface example 193
V
Vendor-extensible fields 17
Versioning 17
W
WBEM_BACKUP_RESTORE_FLAGS enumeration 32
WBEM_CHANGE_FLAG_TYPE enumeration 29
WBEM_CONNECT_OPTIONS enumeration 36
WBEM_DATAPACKET_OBJECT packet 43
WBEM_GENERIC_FLAG_TYPE enumeration 29
WBEM_INSTANCE_BLOB packet 46
WBEM_INSTANCE_BLOB_TYPE enumeration 46
WBEM_QUERY_FLAG_TYPE enumeration 31
WBEM_RECONNECT_TYPE enumeration 48
WBEM_REFRESHED_OBJECT structure 45
WBEM_S_FALSE 26
WBEM_S_NEW_STYLE 26
WBEM_S_NO_ERROR 26
WBEM_S_TIMEDOUT 26
WBEM_STATUS_TYPE enumeration 30
WBEM_TIMEOUT_TYPE enumeration 31
WBEMLogin method 69
WBEMOBJECT_CLASS packet 43
WBEMOBJECT_INSTANCE packet 44
WBEMOBJECT_INSTANCE_NOCLASS packet 44
WBEMSTATUS enumeration 32
WQL event query 23
WQL query 18
WQL schema and data query 18
237 / 237
[MS-WMI] - v20160714
Windows Management Instrumentation Remote Protocol
Copyright 2016 Microsoft Corporation
Release: July 14, 2016