Freigeben über


PREFETCH_OPEN_ECP_CONTEXT Struktur (ntifs.h)

Die PREFETCH_OPEN_ECP_CONTEXT-Struktur kommuniziert, ob der Prefetcher eine bestimmte offene Anforderung für eine Datei ausführt.

Syntax

typedef struct _PREFETCH_OPEN_ECP_CONTEXT {
  PVOID Context;
} PREFETCH_OPEN_ECP_CONTEXT, *PPREFETCH_OPEN_ECP_CONTEXT;

Angehörige

Context

Ein Zeiger auf einen undurchsichtigen Kontext, der der geöffneten Anforderung zugeordnet ist.

Bemerkungen

Der Prefetcher ist eine Komponente des Betriebssystems, die eng mit dem Cache-Manager und dem Speicher-Manager integriert ist, um Datenträgerzugriffe effizienter zu machen und somit die Leistung zu verbessern. Wenn andere Komponenten den Prefetcher beeinträchtigen, verringert sich die Systemleistung und kann deadlocken. Daher fügt der Prefetcher die PREFETCH_OPEN_ECP_CONTEXT Struktur an eine Datei an, um zu kommunizieren, dass der Prefetcher eine offene Anforderung für diese Datei ausgeführt hat. Der Prefetcher verwendet die GUID_ECP_PREFETCH_OPEN GUID in einem Aufruf der FltCreateFileEx2 oder IoCreateFileEx Routine, um die PREFETCH_OPEN_ECP_CONTEXT Struktur anzufügen. Ein Dateisystemfiltertreiber (Filter) kann FltFindExtraCreateParameter- aufrufen, um zu bestimmen, ob PREFETCH_OPEN_ECP_CONTEXT an die Datei angefügt ist, und dann geeignete Aktionen ausführen. Der Filter sollte die FltIsEcpFromUserMode Routine aufrufen, um zu bestimmen, ob die PREFETCH_OPEN_ECP_CONTEXT Kontextstruktur vom Kernelmodus stammt. Um zu verhindern, dass böswillige Anwendungen den Prefetcher spoofen, sollte der Filter PREFETCH_OPEN_ECP_CONTEXT nicht akzeptieren, wenn er vom Benutzermodus stammt.

Nachdem der Prefetcher die PREFETCH_OPEN_ECP_CONTEXT Struktur an eine Datei angefügt hat, umfasst alle zusätzlichen Prefetcher-Aktivitäten für die Datei das Dateiobjekt, das PREFETCH_OPEN_ECP_CONTEXT angefügt ist. Wenn ein Filter andere Prefetcher-Dateisystemanforderungen als Create-Anforderungen identifizieren muss, sollte der Filter seinen eigenen Zustand beibehalten (z. B. der Filter-Manager behandelt Kontexte). Der Filter behält seinen eigenen Zustand bei, um zu bestimmen, ob ein bestimmtes Dateiobjekt ein Prefetcher-Dateiobjekt ist.

Der Speicher-Manager kann das Prefetcher-Dateiobjekt zwischenspeichern. Der Speicher-Manager kann dann das Prefetcher-Dateiobjekt für andere Anwendungen verwenden, die zugeordnete E/A oder zwischengespeicherte E/A mithilfe des Cache-Managers ausführen. Daher kann das Prefetcher-Dateiobjekt vor oder nach dem Schließen des Handles für das Auslagerungs-E/A verwendet werden. Diese Auslagerungs-E/A kann Paging-Schreibvorgänge enthalten, auch wenn der Prefetcher niemals Daten schreibt. Die Seitenschreibvorgänge werden von anderen Anwendungen generiert. Der Speicher-Manager schreibt Daten aus den Anwendungen mithilfe des zwischengespeicherten Prefetcher-Dateiobjekts. Daher führt der Filter Arbeit aus, die durch Auslagerungs-Schreibvorgänge ausgelöst wird, sollte der Filter diese Arbeit auch dann ausführen, wenn die Auslagerungs-Schreibvorgänge in einem Vorabfetcher-Dateiobjekt enthalten sind.

Wenn ein Filter feststellt, dass ein Bereinigungsvorgang für ein Prefetcher-Dateiobjekt aufgetreten ist, sollte der Filter nicht mehr berücksichtigen, dass das Dateiobjekt vorab geöffnet wird.

Im Folgenden finden Sie allgemeine Vorgänge, die der Prefetcher ausführt (in diesen Vorgängen ändert der Prefetcher jedoch nie den Dateiinhalt):

  • Lautstärke wird geöffnet und geschlossen
  • Datei öffnen und schließen
  • Abfragedateiinformationen
  • Festlegen von Dateiinformationen (nur zum Anweisen des Dateisystems, die uhrzeit des letzten Zugriffs für dieses Öffnen nicht zu aktualisieren)
  • Erstellen eines Bild- und Datenabschnitts
  • Ausführen asynchroner Auslagerungs-E/A

Um eine mögliche Deadlock-Situation zu vermeiden, sollte ein Filter:

  • Blockieren Sie niemals prefetcher-Vorgänge.
  • Übergeben Sie Prefetcher-Vorgänge, ohne andere Dateisystemanforderungen auszugeben.

Damit eine Anwendung oder jeder Treiber auf alle daten zugreifen kann, die vorab abgerufen werden, muss er ein eigenes Handle für die Datei öffnen oder einen Abschnitt oder beides erstellen.

Informationen zur Verwendung von ECPs zum Zuordnen zusätzlicher Informationen zu einem IRP_MJ_CREATE Vorgang einer Datei finden Sie unter Verwenden von zusätzlichen Erstellungsparametern mit einem IRP_MJ_CREATE Operation.

Die PREFETCH_OPEN_ECP_CONTEXT Struktur ist schreibgeschützt. Sie sollten es verwenden, um Nur Informationen zu einem vorab geöffneten ECP abzurufen. Weitere Informationen zu diesem Problem finden Sie unter System-Defined ECPs.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Windows Vista
Header- ntifs.h (einschließlich Ntifs.h)

Siehe auch

FltCreateFileEx2-

FltIsEcpFromUserMode

IoCreateFileEx-