struttura PREFETCH_OPEN_ECP_CONTEXT (ntifs.h)
La struttura PREFETCH_OPEN_ECP_CONTEXT comunica se il prefetcher esegue una determinata richiesta aperta in un file.
Sintassi
typedef struct _PREFETCH_OPEN_ECP_CONTEXT {
PVOID Context;
} PREFETCH_OPEN_ECP_CONTEXT, *PPREFETCH_OPEN_ECP_CONTEXT;
Membri
Context
Puntatore a un contesto opaco associato alla richiesta aperta.
Osservazioni
Il prefetcher è un componente del sistema operativo strettamente integrato con gestione cache e gestione memoria per rendere più efficiente l'accesso al disco e quindi migliorare le prestazioni. Se altri componenti interferiscono con il prelettura, le prestazioni del sistema diminuiscono e potrebbero causare un deadlock. Pertanto, il prefetcher allega la struttura PREFETCH_OPEN_ECP_CONTEXT a un file per comunicare che il prefetcher ha eseguito una richiesta aperta su tale file. Il prefetcher usa il GUID GUID_ECP_PREFETCH_OPEN in una chiamata al FltCreateFileEx2 o routine IoCreateFileEx per collegare la struttura PREFETCH_OPEN_ECP_CONTEXT. Un driver di filtro del file system (filtro) può chiamare FltFindExtraCreateParameter per determinare se PREFETCH_OPEN_ECP_CONTEXT è collegato al file e quindi intraprendere l'azione appropriata. Il filtro deve chiamare la routine fltIsEcpFromUserMode
Dopo che la prelettura allega la struttura PREFETCH_OPEN_ECP_CONTEXT a un file, tutte le attività di prelettura aggiuntive per il file comportano l'oggetto file che ha PREFETCH_OPEN_ECP_CONTEXT allegato. Se un filtro deve identificare le richieste del file system di prelettura diverse dalle richieste di creazione, il filtro deve mantenere il proprio stato( ad esempio, i contesti di gestione filtri). Il filtro mantiene il proprio stato per determinare se un oggetto file specifico è un oggetto file di prelettura.
Gestione memoria può memorizzare nella cache l'oggetto file di prelettura. Gestione memoria può quindi usare l'oggetto file di prelettura per altre applicazioni che eseguono il mapping di I/O o I/O memorizzato nella cache usando gestione cache. Di conseguenza, l'oggetto file prefetcher può essere usato per il paging di I/O prima o dopo che il prefetcher chiude il relativo handle. Questo I/O di paging può includere scritture di paging, anche se il prefetcher non scrive mai dati. Le scritture di paging vengono generate da altre applicazioni. Gestione memoria scrive i dati dalle applicazioni usando il relativo oggetto file di prelettura memorizzato nella cache. Pertanto, il filtro esegue operazioni attivate dalle scritture di paging, il filtro deve comunque eseguire tale operazione, anche se le scritture di paging vengono eseguite su un oggetto file di prelettura.
Quando un filtro determina che si è verificata un'operazione di pulizia in un oggetto file di prelettura, il filtro non deve più considerare l'oggetto file da prelettura aperto.
Di seguito sono riportate le operazioni comuni eseguite dal prefetcher( tuttavia, in queste operazioni, il prefetcher non modifica mai il contenuto del file):
- Volume aperto e chiuso
- File aperto e chiuso
- Informazioni sui file di query
- Impostare le informazioni sui file (solo per indicare al file system di non aggiornare l'ora dell'ultimo accesso per l'apertura)
- Sezione Creare immagini e dati
- Eseguire il paging asincrono di I/O
Per evitare di indurre una possibile situazione di deadlock, un filtro deve:
- Non bloccare mai alcuna operazione di prelettura.
- Passare le operazioni di prelettura senza inviare altre richieste di file system.
Per consentire a qualsiasi applicazione o driver di accedere a uno qualsiasi dei dati prelettura, deve aprire il proprio handle al file o creare una sezione o entrambe.
Per informazioni su come usare gli ECP per associare informazioni aggiuntive a un'operazione di IRP_MJ_CREATE in un file, vedere Using Extra Create Parameters with an IRP_MJ_CREATE Operation.For information about how to use ECP to associate a an IRP_MJ_CREATE operation on a file, see Using Extra Create Parameters with an IRP_MJ_CREATE Operation.
La struttura PREFETCH_OPEN_ECP_CONTEXT è di sola lettura. È consigliabile usarlo per recuperare informazioni su un prefetcher aperto solo ECP. Per altre informazioni su questo problema, vedere System-Defined ECP.
Fabbisogno
Requisito | Valore |
---|---|
client minimo supportato | Windows Vista |
intestazione |
ntifs.h (include Ntifs.h) |