Funzione CcCopyReadEx (ntifs.h)

La routine CcCopyReadEx copia i dati da un file memorizzato nella cache in un buffer utente. Il conteggio dei byte di I/O per l'operazione viene addebitato al thread di emissione.

Sintassi

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
);

Parametri

[in] FileObject

Puntatore a un oggetto file per il file memorizzato nella cache da cui leggere i dati.

[in] FileOffset

Puntatore a una variabile che specifica l'offset di byte iniziale all'interno del file memorizzato nella cache.

[in] Length

Lunghezza in byte dei dati da leggere.

[in] Wait

Impostare su TRUE se il chiamante può essere inserito in uno stato di attesa fino a quando tutti i dati non sono stati copiati, FALSE in caso contrario.

[out] Buffer

Puntatore a un buffer in cui copiare i dati.

[out] IoStatus

Puntatore a una struttura allocata dal chiamante che riceve lo stato di completamento finale e le informazioni sull'operazione. Se non tutti i dati vengono copiati correttamente, IoStatus.Information contiene il numero effettivo di byte copiati.

[in] IoIssuerThread

Thread che emette la richiesta di lettura. Per un file system con contabilità I/O disco abilitato, questo è il thread a cui viene addebitato l'I/O. Se IoIssuerThread è NULL, l'I/O viene addebitato al thread corrente.

Valore restituito

La routine CcCopyReadEx restituisce TRUE se i dati sono stati copiati correttamente, FALSE in caso contrario.

Commenti

Se Wait è TRUE, CcCopyReadEx è garantito di completare la richiesta di copia e restituire TRUE. Se le pagine necessarie del file memorizzato nella cache sono già residenti in memoria, i dati verranno copiati immediatamente e non si verificherà alcun blocco. Se le pagine necessarie non sono residenti, il chiamante verrà inserito in uno stato di attesa fino a quando tutte le pagine necessarie non sono state effettuate e i dati possono essere copiati.

Se Wait è FALSE, CcCopyReadEx rifiuterà di bloccare e restituirà FALSE, se le pagine necessarie del file memorizzato nella cache non sono già residenti in memoria.

FileOffset plus Length deve essere minore o uguale alla dimensione del file memorizzato nella cache o si verificherà un errore di asserzione.

Se si verifica un errore, CcCopyReadEx genera un'eccezione di stato per tale errore specifico. Ad esempio, se si verifica un errore di allocazione del pool, CcCopyReadEx genera un'eccezione con lo stato di STATUS_INSUFFICIENT_RESOURCES ; se si verifica un errore di I/O, CcCopyReadEx genera l'eccezione di stato dell'errore di I/O. Pertanto, per ottenere il controllo se si verifica un errore, il driver deve eseguire il wrapping della chiamata a CcCopyReadEx in un'istruzione try-except o try-finally.

Per memorizzare nella cache un file, usare CcInitializeCacheMap.

Requisiti

Requisito Valore
Client minimo supportato Windows 8
Piattaforma di destinazione Universale
Intestazione ntifs.h (include Ntifs.h, FltKernel.h)
Libreria NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

Vedi anche

CcFastCopyRead

CcInitializeCacheMap

CcReadAhead

CcScheduleReadAhead

CcSetAdditionalCacheAttributes

CcSetReadAheadGranularity