WMIDPREQUEST callback function

Providers implement 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.


ULONG WINAPI ControlCallback(
  _In_ PVOID            Context,
  _In_ ULONG            *Reserved,
  _In_ PVOID            Buffer


RequestCode [in]

Request code. Specify one of the following values.

Value Meaning
Enables the provider.
Disables the provider.

Context [in]

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

Reserved [in]

Reserved for internal use.

Buffer [in]

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 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]

See also