Leer en inglés

Compartir a través de


Creación de contextos

Una vez que un minifiltro ha registrado los tipos de contexto que usa, puede crear un contexto llamando a FltAllocateContext. Esta rutina selecciona la definición de contexto adecuada que se usará según los criterios descritos en Registrar tipos de contexto.

Antes de asignar un contexto e intentar establecerlo, un minifiltro puede llamar a las siguientes rutinas para determinar si el sistema de archivos subyacente admite contextos de controlador de archivos, secuencia o secuencia:

En el ejemplo de código siguiente, tomado del controlador de minifiltro de ejemplo CTX , la rutina CtxInstanceSetup llama a FltAllocateContext para crear un contexto de instancia:

status = FltAllocateContext(
      FltObjects->Filter,           //Filter
      FLT_INSTANCE_CONTEXT,         //ContextType
      CTX_INSTANCE_CONTEXT_SIZE,    //ContextSize
      NonPagedPool,                 //PoolType
      &instanceContext);            //ReturnedContext

En el ejemplo CTX, se registra la siguiente definición de contexto para contextos de instancia:

{ FLT_INSTANCE_CONTEXT,              //ContextType
  0,                                 //Flags
  CtxContextCleanup,                 //ContextCleanupCallback
  CTX_INSTANCE_CONTEXT_SIZE,         //Size
  CTX_INSTANCE_CONTEXT_TAG },        //PoolTag

La definición de contexto es de tamaño fijo porque el miembro Size es CTX_INSTANCE_CONTEXT_SIZE (frente a FLT_VARIABLE_SIZED_CONTEXTS, que se usa para indicar una definición de contexto de tamaño variable). Tenga en cuenta que la marca FLTFL_CONTEXT_REGISTRATION_NO_EXACT_SIZE_MATCH no está establecida en el miembro Flags . En este caso, si el valor del parámetro ContextSize de FltAllocateContext coincide con el del miembro Size de la definición de contexto, FltAllocateContext asigna el contexto de instancia de la lista de lookaside no paginada adecuada. Si los valores no coinciden, FltAllocateContext produce un error con un valor devuelto de STATUS_FLT_CONTEXT_ALLOCATION_NOT_FOUND.

Si se ejecuta correctamente, FltAllocateContext inicializa el recuento de referencias en el nuevo contexto en uno. Cuando el contexto ya no es necesario, el controlador de minifiltro debe liberar esta referencia. Por lo tanto, cada llamada a FltAllocateContext debe coincidir con una llamada posterior a FltReleaseContext.

Una vez creado un contexto, un minifiltro puede establecerlo para un objeto .