Compartir a través de


PFLT_GENERATE_FILE_NAME función de devolución de llamada (fltkernel.h)

Un controlador de minifiltro que proporciona nombres de archivo para la memoria caché de nombres del administrador de filtros puede registrar una rutina de tipo PFLT_GENERATE_FILE_NAME como rutina GenerateFileNameCallback del controlador minifiltro.

Sintaxis

PFLT_GENERATE_FILE_NAME PfltGenerateFileName;

NTSTATUS PfltGenerateFileName(
  [in]           PFLT_INSTANCE Instance,
  [in]           PFILE_OBJECT FileObject,
  [in, optional] PFLT_CALLBACK_DATA CallbackData,
  [in]           FLT_FILE_NAME_OPTIONS NameOptions,
  [out]          PBOOLEAN CacheFileNameInformation,
  [out]          PFLT_NAME_CONTROL FileName
)
{...}

Parámetros

[in] Instance

Puntero de instancia opaco para la instancia del controlador de minifiltro para la que está registrada esta rutina de devolución de llamada.

[in] FileObject

Puntero a un objeto de archivo para el archivo cuyo nombre se solicita.

[in, optional] CallbackData

Puntero a la estructura de datos de devolución de llamada para la operación durante la cual se solicita este nombre. Este parámetro es NULL cuando se llama a FltGetFileNameInformationUnsafe para recuperar el nombre del archivo.

[in] NameOptions

FLT_FILE_NAME_OPTIONS valor que especifica el formato de nombre, el método de consulta y las marcas para esta consulta de información de nombre de archivo.

[out] CacheFileNameInformation

Puntero a un valor booleano que especifica si este nombre se puede almacenar en caché. Establézcalo en TRUE en la salida si el nombre se puede almacenar en caché; de lo contrario, se establece en FALSE .

[out] FileName

Puntero a una estructura de FLT_NAME_CONTROL asignada por el administrador de filtros para recibir el nombre de archivo en la salida.

Valor devuelto

Esta rutina de devolución de llamada devuelve STATUS_SUCCESS o un valor NTSTATUS adecuado.

Comentarios

Un controlador de minifiltro que proporciona nombres de archivo para la memoria caché de nombres del administrador de filtros puede registrar una rutina de tipo PFLT_GENERATE_FILE_NAME como rutina GenerateFileNameCallback del controlador minifiltro.

Para registrar esta rutina de devolución de llamada, el controlador de minifiltro almacena la dirección de una rutina de tipo PFLT_GENERATE_FILE_NAME en el miembro GenerateFileNameCallback de la estructura FLT_REGISTRATION que el controlador de minifiltro pasa como parámetro a FltRegisterFilter.

El administrador de filtros llama a esta rutina de devolución de llamada para permitir que el controlador de minifiltro intercepte las solicitudes de nombre de archivo por otros controladores de minifiltro por encima de ella en la pila de instancias del controlador de minifiltro. Con esta rutina de devolución de llamada y la rutina de devolución de llamada PFLT_NORMALIZE_NAME_COMPONENT , el controlador de minifiltro puede proporcionar su propia información de nombre de archivo.

Para determinar qué formato de nombre de archivo se solicita, llame a FltGetFileNameFormat en el parámetro NameOptions .

Antes de Windows 8, se llama a esta rutina de devolución de llamada solo para nombres de archivo abiertos y nombres de archivo cortos. Cuando el administrador de filtros recibe una solicitud de un nombre de archivo normalizado, llama a esta rutina de devolución de llamada para solicitar el nombre de archivo abierto. A continuación, llama a la devolución de llamada del controlador de minifiltro PFLT_NORMALIZE_NAME_COMPONENT para normalizar cada componente en el nombre de archivo.

A partir de Windows 8, también se llama a esta rutina de devolución de llamada para nombres normalizados. Cuando el administrador de filtros recibe una solicitud de un nombre de archivo normalizado, llama a esta rutina de devolución de llamada con FLT_FILE_NAME_NORMALIZED especificado en el parámetro NameOptions . Si el minifiltro devuelve STATUS_SUCCESS de esta devolución de llamada, no se llamará a la devolución de llamada de PFLT_NORMALIZE_NAME_COMPONENT minifiltro. Si el minifiltro devuelve un código de error (por ejemplo, STATUS_NOT_SUPPORTED), el administrador de filtros volverá a llamar a esta rutina de devolución de llamada, solicitando el nombre de archivo abierto. A continuación, el administrador de filtros llamará al PFLT_NORMALIZE_NAME_COMPONENT devolución de llamada del controlador minifiltro para normalizar cada componente en el nombre de archivo.

Cuando se invoca esta rutina de devolución de llamada, el controlador de minifiltro genera su propia información de nombre de archivo, en función de la información del nombre de archivo del sistema de archivos para el archivo. Para obtener la información del nombre de archivo del sistema de archivos de un archivo, llame a FltGetFileNameInformation, FltGetFileNameInformationUnsafe o FltGetDestinationFileNameInformation.

Para los nombres de archivo abiertos, la información del nombre de archivo generado debe incluir información de volumen. En el caso de un archivo remoto, también debe incluir información de recurso compartido.

A continuación se muestra un ejemplo de un nombre de archivo abierto para un archivo remoto:

\Device\LanManRedirector\MyServer\MyShare\Docume~1\MyUser\My Documents\TestRe~1.txt:stream1

Para obtener más información sobre los formatos de nombre de archivo, vea las entradas de referencia para FLT_FILE_NAME_INFORMATION y FltParseFileNameInformation.

Después de generar la información del nombre de archivo, el controlador de minifiltro debe llamar a FltCheckAndGrowNameControl para comprobar si la estructura de FLT_NAME_CONTROL que el parámetro FileName apunta a contiene un búfer de nombres lo suficientemente grande como para contener el nombre de archivo generado. Si el búfer de nombres es demasiado pequeño, FltCheckAndGrowNameControl lo reemplaza por uno mayor. A continuación, el controlador de minifiltro almacena la información del nombre de archivo en el búfer de nombres y devuelve.

Requisitos

Requisito Value
Plataforma de destino Escritorio
Encabezado fltkernel.h (incluya Fltkernel.h)
IRQL PASSIVE_LEVEL

Consulte también

FLT_CALLBACK_DATA

FLT_FILE_NAME_INFORMATION

FLT_FILE_NAME_OPTIONS

FLT_NAME_CONTROL

FLT_REGISTRATION

FltCheckAndGrowNameControl

FltGetDestinationFileNameInformation

FltGetFileNameFormat

FltGetFileNameInformation

FltGetFileNameInformationUnsafe

FltGetFileNameQueryMethod

FltParseFileName

FltParseFileNameInformation

FltPurgeFileNameInformationCache

FltRegisterFilter

PFLT_NORMALIZE_CONTEXT_CLEANUP

PFLT_NORMALIZE_NAME_COMPONENT

PFLT_NORMALIZE_NAME_COMPONENT_EX