Uso degli ECP per elaborare le operazioni di IRP_MJ_CREATE in un driver di filtro del file system
È possibile usare parametri di creazione aggiuntivi (ECP) nel driver di filtro del file system per elaborare IRP_MJ_CREATE operazioni. Il driver di filtro del file system può chiamare le routine nelle sezioni seguenti per recuperare, impostare (aggiungere), confermare e rimuovere gli ECP per l'operazione di IRP_MJ_CREATE . È anche possibile determinare lo spazio del sistema operativo da cui hanno avuto origine gli ECP.
Recupero di ECP
Per recuperare gli ECP per l'operazione di IRP_MJ_CREATE :
Chiamare FltGetEcpListFromCallbackData (o FsRtlGetEcpListFromIrp) per recuperare un puntatore al ECP_LIST associato all'operazione di creazione.
Eseguire una delle operazioni seguenti:
- Chiamare FltGetNextExtraCreateParameter (o FsRtlGetNextExtraCreateParameter) per recuperare un puntatore alla struttura di contesto ECP successiva (o prima) nell'elenco ECP.
- Chiamare FltFindExtraCreateParameter (o FsRtlFindExtraCreateParameter) per cercare nell'elenco ECP una struttura di contesto ECP di un determinato tipo. Una delle due routine restituisce un puntatore alla struttura del contesto ECP se viene trovata la struttura.
Impostazione degli ECP
Per impostare gli ECP per l'operazione di IRP_MJ_CREATE , il driver di filtro del file system:
Impostare gli ECP in un ECP_LIST esistente.
Impostare gli ECP in un ECP_LIST appena creato.
Impostazione degli ECP in un ECP_LIST esistente
Per impostare gli ECP in un ECP_LIST esistente associato all'operazione di creazione:
Chiamare FltGetEcpListFromCallbackData (o FsRtlGetEcpListFromIrp) per recuperare un puntatore al ECP_LIST associato all'operazione di creazione.
Chiamare FltAllocateExtraCreateParameter (o FsRtlAllocateExtraCreateParameter) per allocare un pool di memoria di paging per una struttura di contesto ECP e generare un puntatore a tale struttura.
Chiamare FltInsertExtraCreateParameter (o FsRtlInsertExtraCreateParameter) per inserire strutture di contesto ECP nella struttura ECP_LIST .
Impostazione degli ECP in un ECP_LIST appena creato
Se un ECP_LIST non è attualmente associato all'operazione di creazione, è necessario crearne uno e quindi impostarne uno:
Chiamare FltAllocateExtraCreateParameterList (o FsRtlAllocateExtraCreateParameterList) per allocare memoria per una struttura ECP_LIST .
Chiamare FltAllocateExtraCreateParameter (o FsRtlAllocateExtraCreateParameter) per allocare un pool di memoria di paging per una struttura di contesto ECP e generare un puntatore a tale struttura.
Chiamare FltInsertExtraCreateParameter (o FsRtlInsertExtraCreateParameter) per inserire le strutture di contesto ECP nel ECP_LIST.
Chiamare FltSetEcpListIntoCallbackData (o FsRtlSetEcpListIntoIrp) per collegare un elenco ECP all'operazione di creazione.
Rimozione di ECP
Per rimuovere gli ECP per l'operazione di IRP_MJ_CREATE :
Chiamare FltRemoveExtraCreateParameter (o FsRtlRemoveExtraCreateParameter) per cercare un elenco ECP per una struttura di contesto ECP. Se viene trovata la struttura del contesto ECP, la routine scollega la struttura del contesto ECP dall'elenco ECP.
Per liberare la memoria per la struttura di contesto ECP scollegata, chiamare FltFreeExtraCreateParameter (o FsRtlFreeExtraCreateParameter). È possibile chiamare queste routine per liberare memoria per la struttura del contesto ECP se la memoria è stata allocata in uno dei modi seguenti:
- È stato chiamato FltAllocateExtraCreateParameter (o FsRtlAllocateExtraCreateParameter) per allocare un pool di memoria di paging
- È stato chiamato FltAllocateExtraCreateParameterFromLookasideList (o FsRtlAllocateExtraCreateParameterFromLookasideList) per allocare il pool di memoria da un elenco lookaside
Contrassegnare gli ECP come riconosciuti o determinare lo stato di conferma
Chiamare le routine seguenti per contrassegnare gli ECP come riconosciuti o determinare se gli ECP sono contrassegnati come riconosciuti:
Chiamare FltAcknowledgeEcp (o FsRtlAcknowledgeEcp) per contrassegnare una struttura di contesto ECP come riconosciuta. L'ECP può essere contrassegnato come esaminato, usato, elaborato o qualsiasi altra condizione dell'ECP.
Chiamare FltIsEcpAcknowledged (o FsRtlIsEcpAcknowledged) per determinare se una struttura di contesto ECP è contrassegnata come riconosciuta.
Determinazione della modalità di origine
Chiamare FltIsEcpFromUserMode (o FsRtlIsEcpFromUserMode) per determinare se una struttura di contesto ECP ha avuto origine dalla modalità utente. Un driver di filtro del file system può rifiutare di accettare una struttura di contesto ECP originata dalla modalità utente.
Uso degli elenchi lookaside per allocare gli ECP
Chiamare le routine seguenti per allocare gli ECP dagli elenchi lookaside e per gestire gli elenchi lookaside e gli ECP:
Chiamare FltInitExtraCreateParameterLookasideList (o FsRtlInitExtraCreateParameterLookasideList) per inizializzare un elenco di lookaside pool di paging o non di pagina utilizzato per l'allocazione di una o più strutture di contesto ECP di dimensioni fisse.
Chiama FltDeleteExtraCreateParameterLookasideList (o FsRtlDeleteExtraCreateParameterLookasideList) per liberare l'elenco lookaside.
Chiamare FltAllocateExtraCreateParameterFromLookasideList (o FsRtlAllocateExtraCreateParameterFromLookasideList) per allocare il pool di memoria dall'elenco lookaside per una struttura di contesto ECP e generare un puntatore a tale struttura.
Chiamare FltFreeExtraCreateParameter (o FsRtlFreeExtraCreateParameter) per liberare la memoria per le strutture del contesto ECP.