Compartir a través de


Función ZwFsControlFile (ntifs.h)

El ZwFsControlFile rutina envía un código de control directamente a un sistema de archivos o controlador de filtro de sistema de archivos especificado, lo que hace que el controlador correspondiente realice la acción especificada.

Sintaxis

NTSYSAPI NTSTATUS ZwFsControlFile(
  [in]            HANDLE           FileHandle,
  [in, optional]  HANDLE           Event,
  [in, optional]  PIO_APC_ROUTINE  ApcRoutine,
  [in, optional]  PVOID            ApcContext,
  [out]           PIO_STATUS_BLOCK IoStatusBlock,
  [in]            ULONG            FsControlCode,
  [in, optional]  PVOID            InputBuffer,
  [in]            ULONG            InputBufferLength,
  [out, optional] PVOID            OutputBuffer,
  [in]            ULONG            OutputBufferLength
);

Parámetros

[in] FileHandle

Identificador devuelto por ZwCreateFile o ZwOpenFile para el objeto de archivo que representa el archivo o directorio en el que se va a realizar la acción especificada. El objeto de archivo debe haberse abierto para E/S asincrónica si el autor de la llamada especifica un Event, ApcRoutiney un contexto de APC (en ApcContext) o un contexto de finalización (en ApcContext).

[in, optional] Event

Identificador de un evento creado por el autor de la llamada. Si se proporciona este parámetro, el autor de la llamada se colocará en un estado de espera hasta que se complete la operación solicitada y el evento especificado se establezca en el estado Signaled. Este parámetro es opcional y se puede NULL. Debe ser NULL si el autor de la llamada esperará a que el FileHandle se establezca en el estado Signaled.

[in, optional] ApcRoutine

Dirección de una rutina de APC proporcionada por el autor de la llamada que se va a llamar cuando se completa la operación solicitada. Este parámetro es opcional y se puede NULL. Debe ser NULL si hay un objeto de finalización de E/S asociado al objeto de archivo.

[in, optional] ApcContext

Puntero a un área de contexto determinada por el autor de la llamada. Este valor de parámetro se usa como contexto de APC si el autor de la llamada proporciona un APC o se usa como contexto de finalización si se ha asociado un objeto de finalización de E/S al objeto de archivo. Cuando se completa la operación, el contexto de APC se pasa al APC, si se especificó uno o el contexto de finalización se incluye como parte del mensaje de finalización que el Administrador de E/S envía al objeto de finalización de E/S asociado.

Este parámetro es opcional y se puede NULL. Debe ser NULL si ApcRoutine es NULL y no hay ningún objeto de finalización de E/S asociado al objeto de archivo.

[out] IoStatusBlock

Puntero a una estructura IO_STATUS_BLOCK que recibe el estado de finalización final e información sobre la operación. Para las llamadas correctas que devuelven datos, se devuelve el número de bytes escritos en el OutputBuffer de en el miembro información de de esta estructura.

[in] FsControlCode

FSCTL_código xxx que indica qué operación de control del sistema de archivos se va a llevar a cabo. El valor de este parámetro determina los formatos y las longitudes necesarias del InputBuffer y OutputBuffer, así como cuál de los siguientes pares de parámetros son necesarios. Para obtener información detallada sobre los códigos de FSCTL_ XXX definidos por el sistema, vea la sección "Comentarios" de la entrada de referencia para DeviceIoControl en la documentación de Microsoft Windows SDK.

[in, optional] InputBuffer

Puntero a un búfer de entrada asignado por el autor de la llamada que contiene información específica del dispositivo que se va a proporcionar al controlador de destino. Si FsControlCode especifica una operación que no requiere datos de entrada, este puntero es opcional y puede ser NULL.

[in] InputBufferLength

Tamaño, en bytes, del búfer en InputBuffer. Este valor se omite si InputBuffer es NULL.

[out, optional] OutputBuffer

Puntero a un búfer de salida asignado por el autor de la llamada en el que se devuelve información del controlador de destino. Si FsControlCode especifica una operación que no genera datos de salida, este puntero es opcional y puede ser NULL.

[in] OutputBufferLength

Tamaño, en bytes, del búfer en OutputBuffer. Este valor se omite si OutputBuffer es NULL.

Valor devuelto

ZwFsControlFile devuelve STATUS_SUCCESS o un valor NTSTATUS adecuado, como uno de los siguientes:

Observaciones

ZwFsControlFile proporciona una vista coherente de los datos de entrada y salida al sistema y a los controladores en modo kernel, al tiempo que proporciona aplicaciones y controladores subyacentes con un método dependiente del controlador para especificar una interfaz de comunicaciones.

Si el autor de la llamada abrió el archivo para E/S asincrónica (sin FILE_SYNCHRONOUS_XXX conjunto de opciones create/open), el evento especificado, si existe, se establecerá en el estado señalado cuando se complete la operación de control de dispositivo. De lo contrario, el objeto de archivo especificado por FileHandle se establecerá en el estado señalado. Si se especificó un de ApcRoutine, se llama a con los punteros ApcContext y IoStatusBlock.

Los siguientes códigos FSCTL están documentados actualmente para los controladores en modo kernel:

FSCTL_DELETE_REPARSE_POINT

FSCTL_GET_REPARSE_POINT

FSCTL_OPBATCH_ACK_CLOSE_PENDING

FSCTL_OPLOCK_BREAK_ACK_NO_2

FSCTL_OPLOCK_BREAK_ACKNOWLEDGE

FSCTL_OPLOCK_BREAK_NOTIFY

FSCTL_REQUEST_BATCH_OPLOCK

FSCTL_REQUEST_FILTER_OPLOCK

FSCTL_REQUEST_OPLOCK_LEVEL_1

FSCTL_REQUEST_OPLOCK_LEVEL_2

FSCTL_SET_REPARSE_POINT

Para obtener más información sobre los códigos de FSCTL_ XXX definidos por el sistema, vea la sección "Comentarios" de la entrada de referencia para DeviceIoControl en la documentación de Microsoft Windows SDK.

Para obtener más información sobre los códigos de IOCTL_ XXX definidos por el sistema y sobre cómo definir XXX IOCTL_ o FSCTL_XXX valores específicos del controlador, consulte Using I/O Control Codes in the Kernel Mode Architecture Guide and Device Input and Output Control Codes en la documentación de Windows SDK.

Los minifiltros deben usar FltFsControlFile en lugar de ZwFsControlFile.

Los autores de llamadas de ZwFsControlFile deben ejecutarse en IRQL = PASSIVE_LEVEL y con API de kernel especiales habilitadas.

Nota Si la llamada a la función ZwFsControlFile se produce en modo de usuario, debe usar el nombre "NtFsControlFile" en lugar de "ZwFsControlFile".
 
En el caso de las llamadas desde controladores en modo kernel, las versiones **Nt*Xxx*** y **Zw*Xxx*** de una rutina de Servicios del sistema nativo de Windows pueden comportarse de forma diferente en la forma en que controlan e interpretan los parámetros de entrada. Para obtener más información sobre la relación entre las versiones **Nt*Xxx*** y **Zw*Xxx*** de una rutina, vea [Using Nt and Zw Versions of the Native System Services Routines](/windows-hardware/drivers/kernel/using-nt-and-zw-versions-of-the-native-system-services-routines).

Requisitos

Requisito Valor
cliente mínimo admitido Windows 2000.
de la plataforma de destino de Universal
encabezado de ntifs.h (incluya Ntifs.h)
biblioteca de NtosKrnl.lib
DLL de NtosKrnl.exe
irQL PASSIVE_LEVEL (consulte la sección Comentarios)
reglas de cumplimiento de DDI HwStorPortProhibitedDIs(storport), PowerIrpDDis(wdm)

Consulte también

fltFsControlFile de

IRP_MJ_FILE_SYSTEM_CONTROL

ioGetFunctionCodeFromCtlCode

ioIsOperationSynchronous

usar códigos de control de E/S

usar versiones Nt y Zw de las rutinas de servicios del sistema nativo

ZwClose

ZwCreateFile

ZwDeviceIoControlFile

ZwOpenFile