CcCopyReadEx-Funktion (ntifs.h)

Die CcCopyReadEx-Routine kopiert Daten aus einer zwischengespeicherten Datei in einen Benutzerpuffer. Die Anzahl der E/A-Byte für den Vorgang wird dem ausstellenden Thread in Rechnung gestellt.

Syntax

BOOLEAN CcCopyReadEx(
  [in]  PFILE_OBJECT     FileObject,
  [in]  PLARGE_INTEGER   FileOffset,
  [in]  ULONG            Length,
  [in]  BOOLEAN          Wait,
  [out] PVOID            Buffer,
  [out] PIO_STATUS_BLOCK IoStatus,
  [in]  PETHREAD         IoIssuerThread
);

Parameter

[in] FileObject

Ein Zeiger auf ein Dateiobjekt für die zwischengespeicherte Datei, aus der die Daten gelesen werden sollen.

[in] FileOffset

Ein Zeiger auf eine Variable, die den Anfangsbyteoffset in der zwischengespeicherten Datei angibt.

[in] Length

Die Länge der zu lesenden Daten in Bytes.

[in] Wait

Legen Sie auf TRUE fest, wenn der Aufrufer in einen Wartezustand versetzt werden kann, bis alle Daten kopiert wurden, andernfalls FALSE.

[out] Buffer

Ein Zeiger auf einen Puffer, in den die Daten kopiert werden sollen.

[out] IoStatus

Ein Zeiger auf eine vom Aufrufer zugewiesene Struktur, die die endgültige Vervollständigung status und Informationen zum Vorgang empfängt. Wenn nicht alle Daten erfolgreich kopiert wurden, enthält IoStatus.Information die tatsächliche Anzahl von Bytes, die kopiert wurden.

[in] IoIssuerThread

Der Thread, der die Leseanforderung ausgibt. Für ein Dateisystem mit aktivierter Datenträger-E/A-Abrechnung ist dies der Thread, für den E/A in Rechnung gestellt wird. Wenn IoIssuerThread NULL ist, wird die E/A dem aktuellen Thread in Rechnung gestellt.

Rückgabewert

Die CcCopyReadEx-Routine gibt TRUE zurück, wenn die Daten erfolgreich kopiert wurden, andernfalls FALSE.

Hinweise

Wenn Wait true ist, wird von CcCopyReadEx garantiert, dass die Kopieranforderung abgeschlossen und TRUE zurückgegeben wird. Wenn sich die erforderlichen Seiten der zwischengespeicherten Datei bereits im Arbeitsspeicher befinden, werden die Daten sofort kopiert, und es tritt keine Blockierung auf. Wenn keine benötigten Seiten vorhanden sind, wird der Aufrufer in einen Wartezustand versetzt, bis alle erforderlichen Seiten als resident festgelegt wurden und die Daten kopiert werden können.

Wenn Wait false ist, lehnt CcCopyReadEx die Blockierung ab und gibt FALSE zurück, wenn die erforderlichen Seiten der zwischengespeicherten Datei nicht bereits im Arbeitsspeicher vorhanden sind.

FileOffset plus Length muss kleiner oder gleich der Größe der zwischengespeicherten Datei sein, sonst tritt ein Assertionsfehler auf.

Wenn ein Fehler auftritt, löst CcCopyReadEx eine status Ausnahme für diesen bestimmten Fehler aus. Wenn beispielsweise ein Poolzuordnungsfehler auftritt, löst CcCopyReadEx eine Ausnahme mit dem STATUS_INSUFFICIENT_RESOURCES status aus. Tritt ein E/A-Fehler auf, löst CcCopyReadEx die status Ausnahme des E/A-Fehlers aus. Daher sollte der Treiber den Aufruf von CcCopyReadEx in einer try-except- oder try-finally-Anweisung umschließen, um die Kontrolle zu erlangen, wenn ein Fehler auftritt.

Um eine Datei zwischenzuspeichern, verwenden Sie CcInitializeCacheMap.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 8
Zielplattform Universell
Header ntifs.h (include Ntifs.h, FltKernel.h)
Bibliothek NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

Weitere Informationen

CcFastCopyRead

CcInitializeCacheMap

CcReadAhead

CcScheduleReadAhead

CcSetAdditionalCacheAttributes

CcSetReadAheadGranularity