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;
Members
Context
Puntatore a un contesto opaco associato alla richiesta aperta.
Commenti
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 prefetcher, le prestazioni del sistema diminuiscono e potrebbero causare deadlock. Pertanto, il prefetcher collega 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 alla routine FltCreateFileEx2 o 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 un'azione appropriata. Il filtro deve chiamare la routine FltIsEcpFromUserMode per determinare se la struttura del contesto PREFETCH_OPEN_ECP_CONTEXT ha avuto origine dalla modalità kernel. Per impedire alle applicazioni dannose di eseguire lo spoofing del prefetcher, il filtro non deve accettare PREFETCH_OPEN_ECP_CONTEXT se ha avuto origine dalla modalità utente.
Dopo che il prefetcher 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 particolare oggetto file è un oggetto file di prelettura.
Gestione memoria può memorizzare nella cache l'oggetto file del prefetcher. 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 tramite 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 paging di I/O 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 l'oggetto file di prelettura memorizzato nella cache. Di conseguenza, 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 prefetcher.
Quando un filtro determina che si è verificata un'operazione di pulizia in un oggetto file di prelettura, il filtro non deve più considerare che l'oggetto file sia prefetcher-opened.
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 sul 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 tramite 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 per il 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 ECPs to associate additional information with 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 solo su un prefetcher aperto ECP. Per altre informazioni su questo problema, vedere ECP definiti dal sistema.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Windows Vista |
Intestazione | ntifs.h (include Ntifs.h) |