Uso de ECP para procesar operaciones de IRP_MJ_CREATE en un controlador de filtro del sistema de archivos
Puede usar parámetros de creación adicionales (ECP) en el controlador de filtro del sistema de archivos para procesar IRP_MJ_CREATE operaciones. El controlador de filtro del sistema de archivos puede llamar a las rutinas de las secciones siguientes para recuperar, establecer (agregar), confirmar y quitar ECP para la operación de IRP_MJ_CREATE . También puede determinar el espacio del sistema operativo desde el que se originaron las ECP.
Recuperación de ECP
Para recuperar ECP para la operación de IRP_MJ_CREATE:
Llame a FltGetEcpListFromCallbackData (o FsRtlGetEcpListFromIrp) para recuperar un puntero a la ECP_LIST asociada a la operación de creación.
Realice cualquiera de las siguientes operaciones:
- Llame a FltGetNextExtraCreateParameter (o FsRtlGetNextExtraCreateParameter) para recuperar un puntero a la siguiente estructura de contexto ECP (o primero) en la lista ECP.
- Llame a FltFindExtraCreateParameter (o FsRtlFindExtraCreateParameter) para buscar la lista ECP para obtener una estructura de contexto ECP de un tipo determinado. Cualquiera de las rutinas devuelve un puntero a la estructura de contexto ECP si se encuentra la estructura.
Configuración de ECP
Para establecer ECP para la operación de IRP_MJ_CREATE , el controlador de filtro del sistema de archivos hará lo siguiente:
Establezca ECP en una ECP_LIST existente.
Establezca ECP en un ECP_LIST recién creado.
Establecimiento de ECP en una ECP_LIST existente
Para establecer ECP en una ECP_LIST existente asociada a la operación de creación:
Llame a FltGetEcpListFromCallbackData (o FsRtlGetEcpListFromIrp) para recuperar un puntero a la ECP_LIST asociada a la operación de creación.
Llame a FltAllocateExtraCreateParameter (o FsRtlAllocateExtraCreateParameter) para asignar un grupo de memoria paginada para una estructura de contexto ECP y generar un puntero a esa estructura.
Llame a FltInsertExtraCreateParameter (o FsRtlInsertExtraCreateParameter) para insertar estructuras de contexto ECP en la estructura ECP_LIST.
Establecimiento de ECP en una ECP_LIST recién creada
Si un ECP_LIST no está asociado actualmente a la operación de creación, deberá crear uno y, a continuación, establecer ECP en él:
Llame a FltAllocateExtraCreateParameterList (o FsRtlAllocateExtraCreateParameterList) para asignar memoria para una estructura de ECP_LIST.
Llame a FltAllocateExtraCreateParameter (o FsRtlAllocateExtraCreateParameter) para asignar un grupo de memoria paginada para una estructura de contexto ECP y generar un puntero a esa estructura.
Llame a FltInsertExtraCreateParameter (o FsRtlInsertExtraCreateParameter) para insertar estructuras de contexto ECP en el ECP_LIST.
Llame a FltSetEcpListIntoCallbackData (o FsRtlSetEcpListIntoIrp) para adjuntar una lista ECP a la operación de creación.
Eliminación de ECP
Para quitar ECP para la operación de IRP_MJ_CREATE:
Llame a FltRemoveExtraCreateParameter (o FsRtlRemoveExtraCreateParameter) para buscar una lista ECP para obtener una estructura de contexto ECP. Si se encuentra la estructura de contexto ECP, la rutina desasocia la estructura de contexto ECP de la lista ecP.
Para liberar la memoria de la estructura de contexto ECP desasociada, llame a FltFreeExtraCreateParameter (o FsRtlFreeExtraCreateParameter). Puede llamar a estas rutinas para liberar memoria para la estructura de contexto ecp si asignó la memoria de una de las maneras siguientes:
- Ha llamado a FltAllocateExtraCreateParameter (o FsRtlAllocateExtraCreateParameter) para asignar un grupo de memoria paginado.
- Ha llamado a FltAllocateExtraCreateParameterFromLookasideList (o FsRtlAllocateExtraCreateParameterFromLookasideList) para asignar un grupo de memoria desde una lista de lookaside.
Marcar ECP como confirmados o determinar el estado de confirmación
Llame a las siguientes rutinas para marcar las ECP como confirmadas o determinar si los ECP están marcados como confirmados:
Llame a FltAcknowledgeEcp (o FsRtlAcknowledgeEcp) para marcar una estructura de contexto ECP como confirmada. El ECP se puede marcar como examinado, utilizado, procesado o cualquier otra condición del ECP.
Llame a FltIsEcpAcknowledged (o FsRtlIsEcpAcknowledged) para determinar si una estructura de contexto ECP está marcada como confirmada.
Determinar el modo de origen
Llame a FltIsEcpFromUserMode (o FsRtlIsEcpFromUserMode) para determinar si una estructura de contexto ECP se originó en el modo de usuario. Un controlador de filtro del sistema de archivos puede rechazar aceptar una estructura de contexto ECP que se originó en el modo de usuario.
Uso de listas de búsqueda para asignar ECP
Llame a las siguientes rutinas para asignar ECP desde listas de búsqueda y administrar las listas de búsqueda y ECP:
Llame a FltInitExtraCreateParameterLookasideList (o FsRtlInitExtraCreateParameterLookasideList) para inicializar una lista de lookaside de grupo paginada o no paginada que se usa para la asignación de una o varias estructuras de contexto ECP de tamaño fijo.
Llame a FltDeleteExtraCreateParameterLookasideList (o FsRtlDeleteExtraCreateParameterLookasideList) para liberar la lista de lookaside.
Llame a FltAllocateExtraCreateParameterFromLookasideList (o FsRtlAllocateExtraCreateParameterFromLookasideList) para asignar un grupo de memoria de la lista de lookaside para una estructura de contexto ECP y generar un puntero a esa estructura.
Llame a FltFreeExtraCreateParameter (o FsRtlFreeExtraCreateParameter) para liberar la memoria de las estructuras de contexto ecp.