Freigeben über


CcPinMappedData-Funktion (ntifs.h)

Die CcPinMappedData-Routine pint den angegebenen Bytebereich einer zwischengespeicherten Datei an.

Syntax

BOOLEAN CcPinMappedData(
  [in]      PFILE_OBJECT   FileObject,
  [in]      PLARGE_INTEGER FileOffset,
  [in]      ULONG          Length,
  [in]      ULONG          Flags,
  [in, out] PVOID          *Bcb
);

Parameter

[in] FileObject

Zeiger auf ein Dateiobjekt für die zwischengespeicherte Datei, in der ein Datenbereich angeheftet werden soll.

[in] FileOffset

Zeiger auf eine Variable, die den Anfangsbyteoffset innerhalb der zwischengespeicherten Datei angibt, in der sich die gewünschten Daten befinden.

[in] Length

Länge der anzuheftenden Daten in Byte.

[in] Flags

Bitmaske von Flags, die angeben, wie der Anheftungsvorgang ausgeführt werden soll. ORed-Kombination aus einem oder mehreren der folgenden Werte:

Flag Bedeutung
PIN_WAIT Der Aufrufer kann in einen Wartezustand versetzt werden, bis die Daten angeheftet wurden.
PIN_EXCLUSIVE Der Pufferkontrollblock (BUFFER Control Block, BCB) soll ausschließlich abgerufen werden. Wenn dieses Flag festgelegt ist, muss auch PIN_WAIT festgelegt werden.
PIN_NO_READ Nur Seiten, die sich bereits im Arbeitsspeicher befinden, sollen angeheftet werden. Wenn dieses Flag festgelegt ist, muss auch PIN_WAIT festgelegt werden.
PIN_IF_BCB Die Daten sollen nur angeheftet werden, wenn bereits ein BCB vorhanden ist. Andernfalls schlägt der Pin fehl, und Bcb ist auf NULL festgelegt.

[in, out] Bcb

Beim ersten Aufruf wird ein Zeiger auf einen Puffersteuerungsblock (Buffer Control Block, BCB) zurückgegeben. Dieser Zeiger muss als Eingabe für alle nachfolgenden Aufrufe für diesen Puffer bereitgestellt werden.

Rückgabewert

CcPinMappedData gibt TRUE zurück, wenn die Daten für die zwischengespeicherte Datei erfolgreich angeheftet wurden, andernfalls FALSE .

Hinweise

Eine erfolgreiche Rückgabe von CcPinMappedData garantiert, dass die Daten, die zuvor in einem Aufruf von CcMapData zugeordnet wurden, im Cache angeheftet werden und Daten im angegebenen Bereich sicher geändert werden können. Wenn der Aufrufer anschließend die von CcPinMappedData angehefteten Daten ändert, muss er auch CcSetDirtyPinnedData aufrufen, damit die geänderten Daten schließlich auf den Datenträger geschrieben werden.

CcPinMappedData kann im Cache-Manager keine Daten über Ansichtsgrenzen hinweg anheften. Der Cache-Manager verwaltet Dateien im System in Ansichten mit 256 KB-Ausrichtung. (Die Größe der Ansicht des Cache-Managers wird durch die systemdefinierte Konstante VACB_MAPPING_GRANULARITY angegeben, die in ntifs.h auf 256 KB festgelegt ist.) Angeheftete Bereiche dürfen nicht mehr als eine Ansicht mit 256 KB umfassen. Daher ist der größte Bereich, der angeheftet werden kann, 256 KB, beginnend bei einem 256 KB ausgerichteten Offset in der Datei.

Durch das Anheften eines Bytebereichs in einer zwischengespeicherten Datei wird nicht sichergestellt, dass die Seiten im Arbeitsspeicher verbleiben. Solange die Seiten angeheftet sind, bleibt der Bytebereich garantiert dem virtuellen Adressraum des Systemcaches zugeordnet, aber der Speicher-Manager kann die physischen Seiten entsprechend dem Arbeitsspeicherbedarf des Systems ausblättern.

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

Verwenden Sie zum Zuordnen von Daten für eine zwischengespeicherte Datei die CcMapData-Routine . Verwenden Sie CcInitializeCacheMap, um eine Datei zwischenzuspeichern.

Es ist nicht erforderlich, CcUnpinData nach dem Aufruf von CcPinMappedData aufzurufen, da der Pinverweis mit CcMapData übereinstimmt.

Anforderungen

Anforderung Wert
Zielplattform Universell
Header ntifs.h (include Ntifs.h)
Bibliothek NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL

Weitere Informationen

CcInitializeCacheMap

CcMapData

CcPinRead

CcPreparePinWrite

CcSetDirtyPinnedData

CcUnpinData