IRP_MJ_LOCK_CONTROL (FS- und Filtertreiber)

Sendebedingungen

Der E/A-Manager, andere Betriebssystemkomponenten und andere Kernelmodustreiber senden IRP_MJ_LOCK_CONTROL Anforderungen.

Vorgang: Dateisystemtreiber

Der Dateisystemtreiber sollte das Dateiobjekt extrahieren und decodieren, um zu bestimmen, ob das Zielgerätobjekt das Steuergerätobjekt des Dateisystems ist. Wenn ja, sollte der Dateisystemtreiber die IRP nach Bedarf abschließen, ohne die Sperranforderung zu verarbeiten.

Wenn die Anforderung für ein Handle ausgestellt wurde, das eine geöffnete Benutzerdatei darstellt, sollte der Dateisystemtreiber den durch den Nebenfunktionscode angegebenen Vorgang ausführen und die IRP abschließen. Wenn dies nicht der Fall ist, schlägt der Treiber das IRP fehl.

Im Folgenden finden Sie die gültigen Nebenfunktionscodes:

Code BESCHREIBUNG
IRP_MN_LOCK Gibt eine Bytebereichssperranforderung an, möglicherweise im Namen einer Benutzermodusanwendung, die die Win32 LockFile-Funktion aufgerufen hat.
IRP_MN_UNLOCK_ALL Gibt eine Anforderung an, alle Bytebereichssperren für eine Datei freizugeben, in der Regel, weil das letzte ausstehende Handle für ein Dateiobjekt geschlossen wird.
IRP_MN_UNLOCK_ALL_BY_KEY Gibt eine Anforderung zum Freigeben aller Bytebereichssperren mit einem angegebenen Schlüsselwert an.
IRP_MN_UNLOCK_SINGLE Gibt eine Anforderung zum Freigeben einer einzelnen Bytebereichssperre an, möglicherweise im Namen einer Benutzermodusanwendung, die die Win32 UnlockFile-Funktion aufgerufen hat.

Vorgang: Legacy-Dateisystemfiltertreiber

Dateisystemfiltertreiber sollten den IRP nach dem Ausführen einer erforderlichen Verarbeitung an den nächstniedrigen Treiber im Stapel übergeben.

Parameter

Ein Dateisystem oder Filtertreiber ruft IoGetCurrentIrpStackLocation mit dem angegebenen IRP auf, um einen Zeiger auf den eigenen Stapelspeicherort im IRP abzurufen, der in der folgenden Liste als IrpSp angezeigt wird. (Die IRP wird als Irp angezeigt.) Der Treiber kann die Informationen, die in den folgenden Elementen des IRP und des IRP-Stapelspeicherorts festgelegt sind, bei der Verarbeitung einer Sperrsteuerungsanforderung verwenden:

  • DeviceObject ist ein Zeiger auf das Zielgerätobjekt.

  • Irp->IoStatus verweist auf eine IO_STATUS_BLOCK-Struktur, die den endgültigen Abschluss status und Informationen zum angeforderten Vorgang empfängt.

  • IrpSp->FileObject verweist auf das Dateiobjekt, das DeviceObject zugeordnet ist.

    Der Parameter IrpSp-FileObject> enthält einen Zeiger auf das RelatedFileObject-Feld, das auch eine FILE_OBJECT-Struktur ist. Das Feld RelatedFileObject der FILE_OBJECT-Struktur ist während der Verarbeitung von IRP_MJ_LOCK_CONTROL ungültig und sollte nicht verwendet werden.

  • IrpSp->Flags können mindestens einen der folgenden Werte aufweisen:

Flag Bedeutung
SL_EXCLUSIVE_LOCK Wenn dieses Flag festgelegt ist, wird eine exklusive Bytebereichssperre angefordert. Andernfalls wird eine freigegebene Sperre angefordert.
SL_FAIL_IMMEDIATELY Wenn dieses Flag festgelegt ist, sollte die Sperranforderung fehlschlagen, wenn sie nicht sofort erteilt werden kann.
  • IrpSp->MajorFunction ist auf IRP_MJ_LOCK_CONTROL festgelegt.

  • IrpSp->MinorFunction ist auf einen der folgenden Werte festgelegt:

    • IRP_MN_LOCK
    • IRP_MN_UNLOCK_ALL
    • IRP_MN_UNLOCK_ALL_BY_KEY
    • IRP_MN_UNLOCK_SINGLE
  • IrpSp->Parameters.LockControl.ByteOffset ist der Anfangsbyteoffset innerhalb der Datei des zu sperrenden oder entsperrten Bytebereichs.

  • IrpSp->Parameters.LockControl.Key ist der Schlüssel für die Bytebereichssperre.

  • IrpSp->Parameters.LockControl.Length ist die Länge des zu sperrenden oder entsperrten Bytebereichs in Bytes.

Weitere Informationen

FltProcessFileLock

FsRtlProcessFileLock

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoGetCurrentIrpStackLocation

IRP