IPortDMus::Notify-Methode (dmusicks.h)

Die Notify Methode sollte von der Interrupt Service Routine (ISR) des Miniporttreibers aufgerufen werden, wenn ein Hardware-Interrupt aufgetreten ist. Dieser Aufruf fordert den Porttreiber auf, den Miniporttreiber mit einem verzögerten Prozeduraufruf (DPC) zurückzurufen, während der Miniporttreiber den Interrupt verarbeitet.

Syntax

void Notify(
  [in, optional] PSERVICEGROUP ServiceGroup
);

Parameter

[in, optional] ServiceGroup

Zeiger auf ein IServiceGroup-Objekt . Dieser Parameter ist optional und kann als NULL angegeben werden. Weitere Informationen finden Sie im folgenden Abschnitt "Hinweise".

Rückgabewert

Keine

Bemerkungen

Die Notify Methode sendet Benachrichtigungen an die Dienstgruppe des Miniporttreibers:

  • Wenn der pServiceGroup-Parameter nicht NULL ist, ruft die Notify Methode die RequestService-Methode für das IServiceGroup-Objekt auf, auf das dieser Parameter verweist.
  • Wenn pServiceGroupNULL ist:
    • Die Notify -Methode ruft die RequestService-Methode für das IServiceGroup-Objekt des Miniporttreibers auf. Dies ist das IServiceGroup-Objekt , das der Miniporttreiber während des IMiniportDMus::Init-Aufrufs ausgibt. Der Miniporttreiber hat dieses Objekt möglicherweise auch frühzeitig (d. h. vor der Rückgabe von Init) registriert, indem er IPortDMus::RegisterServiceGroup aufruft.
    • Die Notify -Methode ruft auch die RequestService-Methode für das IServiceGroup-Objekt auf, das zu den Streams des Miniporttreibers gehört. Dies ist das IServiceGroup-Objekt , das von der IMiniportDMus::NewStream-Methode ausgegeben wird.
Der Miniporttreiber ruft in der Regel auf Notify , um den Porttreiber zu benachrichtigen, dass das Audiogerät einen Hardwareunterbruch generiert hat. Wenn beispielsweise ein Interrupt signalisiert, dass ein Register gelesen werden muss, kann der ISR des Miniporttreibers nicht auf das MXF-Diagramm (MIDI-Transformationsfilter) am irQL mit erhöhten Rechten zugreifen. Stattdessen kann der Miniporttreiber die Eingabedaten (z. B. ein Byte von MIDI-Daten) aus dem Register speichern, aufrufen Notifyund warten, bis der Porttreiber mit einem DPC wieder darauf zurückkommt.

Wenn der ISR des Miniporttreibers aufruft Notify, empfängt der Porttreiber die Benachrichtigung am IRQL mit erhöhten Hardwareunterbrechungen und legt einen DPC in die Warteschlange. Wenn IRQL auf den DISPATCH_LEVEL abfällt, löst der DPC des Porttreibers den Miniporttreiber aus und unterstützt diesen.

Innerhalb des DPC ruft der Porttreiber IMXF::P utMessage im Eingabedatenstrom des Miniporttreibers mit dem Parameter NULL auf, um zu signalisieren, dass der Miniporttreiber die zuvor gespeicherte MIDI-Nachricht jetzt im MXF-Diagramm ablegen kann, da der IRQL auf DISPATCH_LEVEL zurückgesetzt wurde.

Diese Methode ist für eine genaue Zeitplanung von entscheidender Bedeutung. Die meisten Miniports rufen diese Methode als Reaktion auf einen Benachrichtigungsunterbrechung auf, nachdem die Interruptquelle gelöscht wurde. Obwohl der Miniporttreiber andere Methoden verwenden kann, um zu bestimmen, wann diese Methode aufgerufen werden soll, ist eine präzise Zeitplanung wichtig und sollte beibehalten werden.

Wenn ein Adaptertreiber einen ISR installiert, übermittelt er einen ServiceContext-Parameter zusammen mit dem Einstiegspunkt des ISR (ausführliche Informationen finden Sie unter Bereitstellen von ISR-Kontextinformationen). Wenn der Interrupt auftritt, ruft das Betriebssystem den ISR auf und übergibt ServiceContext als Aufrufparameter an den ISR. Obwohl die Bedeutung des ServiceContext-Parameters nur dem Treiberentwickler bekannt ist, handelt es sich in der Regel um einen Zeiger auf das Miniport-Objekt. Der ISR verwendet diesen Zeiger, um auf Informationen zum Miniportobjekt zuzugreifen.

Der pServiceGroup-Parameter folgt den Referenzzählungskonventionen für COM-Objekte.

Anforderungen

Anforderung Wert
Zielplattform Desktop
Kopfzeile dmusicks.h (include Dmusicks.h)
IRQL Beliebige Ebene

Weitere Informationen

IMXF::P utMessage

IMiniportdMus::Init

IMiniportDMus::NewStream

IPortDMus

IPortDMus::RegisterServiceGroup

IServiceGroup