WMIDPREQUEST callback function (evntrace.h)

A RegisterTraceGuids-based ("Classic") event provider implements this function to receive enable or disable notification requests from controllers.

The WMIDPREQUEST type defines a pointer to this callback function. ControlCallback is a placeholder for the application-defined function name.


WMIDPREQUEST Wmidprequest;

ULONG Wmidprequest(
  [in] WMIDPREQUESTCODE RequestCode,
       PVOID RequestContext,
       ULONG *BufferSize,
  [in] PVOID Buffer


[in] RequestCode

Request code. This will be one of the following values.

Value Meaning
WMI_ENABLE_EVENTS Enables the provider or changes provider configuration.
WMI_DISABLE_EVENTS Disables the provider.


Provider-defined context. The provider uses the RequestContext parameter of
RegisterTraceGuids to specify the context.


Reserved for internal use.

[in] Buffer

Pointer to a WNODE_HEADER structure that contains information about the event tracing session for which the provider is being enabled or disabled.

Return value

You should return ERROR_SUCCESS if the callback succeeds. Note that ETW ignores the return value for this function except when a controller calls EnableTrace to enable a provider and the provider has not yet called RegisterTraceGuids. When this occurs, RegisterTraceGuids will return the return value of this callback if the registration was successful.


This function is specified using the RegisterTraceGuids function. When the controller calls the EnableTrace function to enable, disable, or change the enable flags or level, ETW calls this callback. The provider enables or disables itself based on the RequestCode value. Typically, the provider uses this value to set a global flag to indicate its enabled state.

The provider defines its interpretation of being enabled or disabled. Generally, if a provider is enabled, it generates events, but while it is disabled, it does not.

ETW does not pass the enable flags and enable level that the controller passes to the EnableTrace function to this callback. To retrieve this information, call the GetTraceEnableFlags and GetTraceEnableLevel functions, respectively.

You also need to retrieve the session handle in this callback for future calls. To retrieve the session handle, call the GetTraceLoggerHandle function.

Your callback function must not call anything that may incur LoadLibrary (more specifically, anything that requires a loader lock).


For an example implementation of a ControlCallback function, see Writing Classic Events.


Minimum supported client Windows 2000 Professional [desktop apps | UWP apps]
Minimum supported server Windows 2000 Server [desktop apps | UWP apps]
Target Platform Windows
Header evntrace.h

See also