Freigeben über


Verwenden von ECPs zum Verarbeiten von IRP_MJ_CREATE Vorgängen in einem Dateisystemfiltertreiber

Sie können zusätzliche Parameter (Create Parameters, ECPs) in Ihrem Dateisystemfiltertreiber verwenden, um IRP_MJ_CREATE Vorgänge zu verarbeiten. Der Dateisystemfiltertreiber kann die Routinen in den folgenden Abschnitten aufrufen, um ECPs für den IRP_MJ_CREATE Vorgang abzurufen, festzulegen (hinzuzufügen), zu bestätigen und zu entfernen. Sie können auch den Betriebssystemspeicher bestimmen, aus dem die ECPs stammen.

Abrufen von ECPs

So rufen Sie ECPs für den IRP_MJ_CREATE-Vorgang ab:

  1. Rufen Sie FltGetEcpListFromCallbackData (oder FsRtlGetEcpListFromIrp) auf, um einen Zeiger auf die ECP_LIST abzurufen, die dem Erstellungsvorgang zugeordnet ist.

  2. Führen Sie eine der folgenden Vorgänge aus:

Festlegen von ECPs

Um ECPs für den IRP_MJ_CREATE-Vorgang festzulegen, führt Ihr Dateisystemfiltertreiber eine der folgenden Aktionen aus:

  • Legen Sie ECPs in einer vorhandenen ECP_LIST fest.

  • Legen Sie ECPs in einer neu erstellten ECP_LIST fest.

Festlegen von ECPs in einer vorhandenen ECP_LIST

So legen Sie ECPs in einer vorhandenen ECP_LIST fest, die dem Erstellungsvorgang zugeordnet ist:

  1. Rufen Sie FltGetEcpListFromCallbackData (oder FsRtlGetEcpListFromIrp) auf, um einen Zeiger auf die ECP_LIST abzurufen, die dem Erstellungsvorgang zugeordnet ist.

  2. Rufen Sie FltAllocateExtraCreateParameter (oder FsRtlAllocateExtraCreateParameter) auf, um den ausgelagerten Speicherpool für eine ECP-Kontextstruktur zuzuweisen und einen Zeiger auf diese Struktur zu generieren.

  3. Rufen Sie FltInsertExtraCreateParameter (oder FsRtlInsertExtraCreateParameter) auf, um ECP-Kontextstrukturen in die ECP_LIST-Struktur einzufügen.

Festlegen von ECPs in einer neu erstellten ECP_LIST

Wenn derzeit kein ECP_LIST mit dem Erstellungsvorgang verknüpft ist, müssen Sie einen erstellen und dann ECPs darin festlegen:

  1. Rufen Sie FltAllocateExtraCreateParameterList (oder FsRtlAllocateExtraCreateParameterList) auf, um Speicher für eine ECP_LIST Struktur zuzuweisen.

  2. Rufen Sie FltAllocateExtraCreateParameter (oder FsRtlAllocateExtraCreateParameter) auf, um den ausgelagerten Speicherpool für eine ECP-Kontextstruktur zuzuweisen und einen Zeiger auf diese Struktur zu generieren.

  3. Rufen Sie FltInsertExtraCreateParameter (oder FsRtlInsertExtraCreateParameter) auf, um ECP-Kontextstrukturen in die ECP_LIST einzufügen.

  4. Rufen Sie FltSetEcpListIntoCallbackData (oder FsRtlSetEcpListIntoIrp) auf, um eine ECP-Liste an den Erstellungsvorgang anzufügen.

Entfernen von ECPs

So entfernen Sie ECPs für den IRP_MJ_CREATE Vorgang:

  1. Rufen Sie FltRemoveExtraCreateParameter (oder FsRtlRemoveExtraCreateParameter) auf, um eine ECP-Liste nach einer ECP-Kontextstruktur zu durchsuchen. Wenn die ECP-Kontextstruktur gefunden wird, trennt die Routine die ECP-Kontextstruktur von der ECP-Liste.

  2. Rufen Sie FltFreeExtraCreateParameter (oder FsRtlFreeExtraCreateParameter) auf, um den Speicher für die getrennte ECP-Kontextstruktur freizugeben. Sie können diese Routinen aufrufen, um Arbeitsspeicher für die ECP-Kontextstruktur freizugeben, wenn Sie den Speicher auf eine der folgenden Arten zugewiesen haben:

Kennzeichnen von ECPs als bestätigt oder Ermitteln des Bestätigungsstatus

Rufen Sie die folgenden Routinen auf, um ECPs entweder als bestätigt zu kennzeichnen oder zu bestimmen, ob die ECPs als bestätigt gekennzeichnet sind:

Bestimmen des Ursprungsmodus

Rufen Sie FltIsEcpFromUserMode (oder FsRtlIsEcpFromUserMode) auf, um zu bestimmen, ob eine ECP-Kontextstruktur vom Benutzermodus stammt. Ein Dateisystemfiltertreiber kann die Annahme einer ECP-Kontextstruktur verweigern, die aus dem Benutzermodus stammt.

Verwenden von Lookaside-Listen zum Zuordnen von ECPs

Rufen Sie die folgenden Routinen auf, um ECPs aus Lookaside-Listen zuzuweisen und die Lookaside-Listen und ECPs zu verwalten: