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 emittente.
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 non vengono copiati tutti i dati, 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 informazioni sull'operazione. Se non tutti i dati vengono copiati correttamente, IoStatus.Information contiene il numero effettivo di byte copiati.
[in] IoIssuerThread
Thread che esegue la richiesta di lettura. Per un file system con contabilità di I/O su disco abilitato, si tratta del 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.
Osservazioni
Se Wait è TRUE, CcCopyReadEx è garantito di completare la richiesta di copia e restituire TRUE. Se le pagine richieste 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à messo in uno stato di attesa fino a quando tutte le pagine richieste non sono state rese residenti e i dati possono essere copiati.
Se wait è FALSE, CcCopyReadEx rifiuterà di bloccare e restituirà FALSE, se le pagine richieste del file memorizzato nella cache non sono già residenti in memoria.
fileOffset più lunghezza deve essere minore o uguale alla dimensione del file memorizzato nella cache oppure si verificherà un errore di asserzione.
Se si verifica un errore, CcCopyReadEx genera un'eccezione di stato per quel particolare errore. Ad esempio, se si verifica un errore di allocazione del pool, CcCopyReadEx genera un'eccezione con lo stato 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
Per memorizzare nella cache un file, usare CcInitializeCacheMap.
Fabbisogno
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 |