3.1.1 Abstract Data Model

Unless otherwise indicated, each of the following elements is maintained in volatile storage.

The server MUST maintain a security descriptor for each namespace.

The server MUST maintain an InitSuccess Boolean value that shows whether all the data structures were initialized successfully.

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 implementation-dependent.<13>

RequiresEncryption: A flag that indicates whether a DCOM client request needs the security level set to RPC_C_AUTHN_LEVEL_PKT_PRIVACY.

ClassTable: A ClassTable (see below) that contains information about the classes in the namespace.

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.

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.

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.

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.