IRP_MJ_CREATE_MAILSLOT (controladores de filtro y FS)

Cuándo se envió

El Administrador de E/S envía la solicitud de IRP_MJ_CREATE_MAILSLOT cuando se crea o abre un nuevo mailslot. Normalmente, este IRP se envía:

Si la solicitud de creación de mailslot se completa correctamente, el componente de aplicación o modo kernel recibe un identificador para la instancia de archivo mailslot.

El control de IRP_MJ_CREATE_MAILSLOT es muy similar al de IRP_MJ_CREATE.

Operación: controladores del sistema de archivos

Si el objeto de dispositivo de destino es el objeto de dispositivo de control del sistema de archivos, la rutina de distribución del controlador del sistema de archivos debe realizar las siguientes operaciones:

  • Establezca Irp-IoStatus.Status> e Irp-IoStatus.Information> en los valores adecuados.
  • Complete el IRP y devuelva un valor NTSTATUS adecuado.

De lo contrario, el controlador del sistema de archivos debe procesar la solicitud de creación.

Operación: controladores de filtro del sistema de archivos heredados

Si el objeto de dispositivo de destino es el objeto de dispositivo de control del controlador de filtro heredado, la rutina de distribución del controlador debe completar el IRP y devolver un valor NTSTATUS adecuado, después de establecer Irp-IoStatus.Status> e Irp-IoStatus.Information> en los valores adecuados.

De lo contrario, el controlador de filtro heredado debe realizar cualquier procesamiento necesario. Según la naturaleza del filtro, debe completar el IRP o pasarlo al controlador siguiente inferior de la pila.

Por lo general, los controladores de filtro heredados no deben devolver STATUS_PENDING en respuesta a IRP_MJ_CREATE_MAILSLOT. Sin embargo, si un controlador de nivel inferior devuelve STATUS_PENDING, el controlador de filtro heredado debe pasar este valor de estado a la cadena de controladores.

Parámetros

Un sistema de archivos o un controlador de filtro heredado llama a IoGetCurrentIrpStackLocation con el IRP especificado para obtener un puntero a su propia ubicación de pila en irP. En los parámetros siguientes, Irp apunta a IRP e IrpSp apunta al IO_STACK_LOCATION. El controlador puede usar la información que se establece en los siguientes miembros del IRP y la ubicación de pila de IRP para procesar una solicitud de creación de mailslot.

  • DeviceObject es un puntero al objeto de dispositivo de destino.

  • Irp->Las marcas se establecen en las marcas siguientes para esta solicitud:

    • IRP_CREATE_OPERATION
    • IRP_DEFER_IO_COMPLETION
    • IRP_SYNCHRONOUS_API
  • Irp->IoStatus apunta a una estructura de IO_STATUS_BLOCK que recibe el estado de finalización final e información sobre la operación solicitada. El sistema de archivos establece el miembro Information de esta estructura en uno de los valores siguientes:

    • FILE_CREATED
    • FILE_OPENED
  • Irp->RequestorMode indica el modo de ejecución del proceso que solicitó la operación, ya sea KernelMode o UserMode. Si se establece la marca SL_FORCE_ACCESS_CHECK, se deben realizar comprobaciones de acceso, incluso si Irp-RequestorMode> es KernelMode.

  • IrpSp->MajorFunction se establece en IRP_MJ_CREATE_MAILSLOT.

  • IrpSp->Las marcas se pueden establecer en SL_FORCE_ACCESS_CHECK. Si se establece esta marca, se deben realizar comprobaciones de acceso incluso si el valor de Irp-RequestorMode> es KernelMode.

  • *IrpSp->Parameters.CreateMailslot.SecurityContext-AccessState> es un puntero a una estructura de ACCESS_STATE que contiene el contexto del sujeto del objeto, los tipos de acceso concedidos y los tipos de acceso deseados restantes.

  • IrpSp->Parameters.CreateMailslot.SecurityContext-DesiredAccess> es una estructura de ACCESS_MASK que especifica los derechos de acceso solicitados para el mailslot. Para obtener más información, vea la descripción del parámetro DesiredAccess para IoCreateFileSpecifyDeviceObjectHint.

  • IrpSp->Parameters.CreateMailslot.Options es una máscara de bits de marcas que especifican las opciones que se aplicarán al crear o abrir el mailslot y la acción que se realizará si el mailslot ya existe.

    Los 8 bits altos de este parámetro corresponden al parámetro Disposition a IoCreateFileSpecifyDeviceObjectHint.

    Los 24 bits bajos de este miembro corresponden al parámetro CreateOptions a IoCreateFileSpecifyDeviceObjectHint.

  • IrpSp->Parameters.CreateMailslot.ShareAccess es una máscara de bits de los derechos de acceso compartido solicitados para el mailslot. Si este miembro es cero, se solicita acceso exclusivo. Para obtener más información, vea la descripción del parámetro ShareAccess para IoCreateFileSpecifyDeviceObjectHint.

  • IrpSp->Parameters.CreateMailslot.Parameters es un puntero a una estructura de MAILSLOT_CREATE_PARAMETERS que contiene los parámetros create para cuando se crea el mailslot.

  • IrpSp->FileObject es un puntero a un objeto de archivo que el Administrador de E/S crea para representar el mailslot que se va a crear o abrir. Cuando el sistema de archivos procesa la solicitud de IRP_MJ_CREATE_MAILSLOT, establece los campos FsContext y, posiblemente , FsContext2 de este objeto de archivo en valores específicos del sistema de archivos. Por lo tanto, los valores de los campos FsContext y FsContext2 no se pueden considerar válidos hasta después de que el sistema de archivos haya procesado la solicitud de creación. Para obtener más información, vea Secuencias de archivos, contextos de flujo y contextos de Per-Stream.

    IoCancelFileOpen (y FltCancelFileOpen) establecen la marca FO_FILE_OPEN_CANCELLED en el campo Flags del objeto de archivo. Si se establece esta marca, se indica que se ha cancelado la solicitud de IRP_MJ_CREATE_MAILSLOT y se emitirá una solicitud de IRP_MJ_CLOSE para este objeto de archivo. Una vez cancelada la solicitud de creación, no se puede volver a emitir.

    El parámetro IrpSp-FileObject> contiene un puntero al campo RelatedFileObject, que también es una estructura FILE_OBJECT. El campo RelatedFileObject de una estructura de FILE_OBJECT se usa para indicar que se ha abierto un objeto mailslot determinado con respecto a un objeto de archivo ya abierto. Esto suele indicar que el archivo relativo es un directorio, pero los archivos basados en secuencias se pueden abrir en relación con una secuencia ya existente de un archivo. El campo RelatedFileObject de la estructura FILE_OBJECT solo es válido durante el procesamiento de IRP_MJ_CREATE_MAILSLOT.

Consulte también

ACCESS_MASK

ACCESS_STATE

FLT_PARAMETERS

FLT_PARAMETERS para IRP_MJ_CREATE_MAILSLOT

FltCancelFileOpen

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoCancelFileOpen

IoCreateFile

IoCreateFileSpecifyDeviceObjectHint

IoCreateStreamFileObject

IoCreateStreamFileObjectLite

IoGetCurrentIrpStackLocation

IRP

IRP_MJ_CLEANUP

IRP_MJ_CLOSE

IRP_MJ_CREATE (referencia del kernel de WDK)

MAILSLOT_CREATE_PARAMETERS