IPortDMus::RegisterServiceGroup method (dmusicks.h)

The RegisterServiceGroup method registers a service group with the DMus port driver.

Syntax

void RegisterServiceGroup(
  [in] PSERVICEGROUP ServiceGroup
);

Parameters

[in] ServiceGroup

Pointer to an IServiceGroup object. This is the service group that is to be registered.

Return value

None

Remarks

The miniport driver calls the RegisterServiceGroup method to register a service group (IServiceGroup object) with the port driver. The port driver can insert one or more of its service sinks (IServiceSink objects) into this service group. The miniport driver sends notification (by calling IPortDMus::Notify) to the service group each time an interrupt occurs. Upon receiving notification, the service group schedules a deferred procedure call (DPC). The DPC iterates through all of the service sinks in the service group and sends notification to each.

The miniport driver typically calls RegisterServiceSink during the execution of its IMiniportDMus::Init method. The purpose of this call is to register the service group with the port driver early enough to begin handling interrupts just as soon as they are enabled. Note that the service group that the Init method outputs is not available to the port driver until after the return from the Init method.

If the miniport driver calls RegisterServiceSink, the service group that the miniport driver passes to the RegisterServiceSink method should be the same one that the miniport driver outputs through its Init method.

A typical miniport driver has no further need to call RegisterServiceSink once the return from IMiniportDMus::Init has occurred.

See the DMusUART sample audio driver in the Microsoft Windows Driver Kit (WDK) for a code example that shows how the miniport driver calls RegisterServiceSink from within its IMiniportDMus::Init method.

The pServiceGroup parameter follows the reference-counting conventions for COM objects.

Requirements

Requirement Value
Target Platform Desktop
Header dmusicks.h (include Dmusicks.h)
IRQL PASSIVE_LEVEL

See also

IMiniportDMus::Init

IPortDMus

IPortDMus::Notify

IServiceGroup

IServiceSink