Auf Englisch lesen

Teilen über


Regeln zum Implementieren von DispatchCreate, DispatchClose und DispatchCreateCloseCloseRoutinen

Beachten Sie beim Implementieren von DispatchCreate-, DispatchClose- und DispatchCreateCloseClose-Routinen die folgenden Punkte:

  • Mindestens muss die Routine Folgendes ausführen:

    1. Legen Sie das Feld Status des E/A-status Blocks der Eingabe-IRP mit einem entsprechenden NTSTATUS fest, normalerweise STATUS_SUCCESS.
    2. Legen Sie das Feld Information des E/A-status Blocks des Eingabe-IRP auf 0 fest.
    3. Rufen Sie IoCompleteRequest mit dem IRP und einem PriorityBoost von IO_NO_INCREMENT auf.
    4. Gibt den NTSTATUS zurück, den er im Feld Status des E/A-status-Blocks des IRP festgelegt hat.
  • Bei einem Treiber der höchsten oder mittleren Ebene muss die Routine möglicherweise zusätzliche Arbeit leisten, um eine Erstellungs- oder Abschlussanforderung zu verarbeiten, abhängig von der Art des Geräts oder des zugrunde liegenden Geräts und dem Design des Treibers.

  • Für eine Erstellungsanforderung zum Öffnen eines Dateiobjekts, das ein logisches oder physisches Gerät darstellt, sollte ein Treiber der obersten Ebene das FileObject.FileName im E/A-Stapelspeicherort überprüfen und die IRP mit STATUS_SUCCESS abschließen, wenn die Unicode-Zeichenfolge unter FileName eine Länge von null aufweist. Andernfalls sollte die IRP mit STATUS_INVALID_PARAMETER abgeschlossen werden.

  • Die Routinen von Treibern der niedrigsten Ebene werden nur aufgerufen, wenn der Treiber der nächsthöheren Ebene IoAttachDeviceToDeviceStack, IoGetDeviceObjectPointer oder IoAttachDevice aufruft. Der Treiber der niedrigsten Ebene in einer Kette von mehrstufigen Treibern führt häufig nur die minimal erforderliche Verarbeitung einer Create- oder Close-Anforderung aus.