Função RxFsdDispatch (mrx.h)
O RxFsdDispatch implementa o envio do FSD (driver do sistema de arquivos) para RDBSS para processar um IRP (pacote de solicitação de E/S). Um ponteiro para essa rotina é copiado sobre a tabela de expedição do driver de dispositivo para o driver de minidiretório de rede pela rotina RxDriverEntry quando o RDBSS é inicializado.
Sintaxe
NTSTATUS RxFsdDispatch(
[in] IN PRDBSS_DEVICE_OBJECT RxDeviceObject,
[in] IN PIRP Irp
);
Parâmetros
[in] RxDeviceObject
Um ponteiro para o objeto de dispositivo RDBSS para esse minidiretório de rede.
[in] Irp
Um ponteiro para o pacote de solicitação de E/S que está sendo processado.
Retornar valor
RxFsdDispatch retorna um dos seguintes valores:
Código de retorno | Descrição |
---|---|
STATUS_INVALID_DEVICE_REQUEST | Uma solicitação foi feita em um objeto de dispositivo inválido. Por exemplo, esse erro será retornado se um objeto do sistema de arquivos for passado como o parâmetro RxDeviceObject . Esse valor status indica falha. |
STATUS_OBJECT_NAME_INVALID | Foi feita uma solicitação inválida para criar um pipe nomeado ou um maillot (o membro MajorFunction do Irp foi IRP_MJ_CREATE_MAILSLOT ou IRP_MJ_CREATE_NAMED_PIPE). Esse valor status indica falha. |
STATUS_PENDING | Uma solicitação assíncrona foi feita e o status da solicitação está pendente. |
STATUS_SUCCESS | A chamada de rotina RxFsdDispatch foi bem-sucedida. |
Comentários
RxFsdDispatch é chamado pelo RDBSS para processar um IRP (pacote de solicitação de E/S). Normalmente, esses IRPs são recebidos pelo RDBSS em resposta a um aplicativo no modo de usuário solicitando operações em um arquivo. Também é possível que outro driver de kernel emita esse IRP.
Um ponteiro para a rotina RxFsdDispatch é copiado sobre a tabela de expedição do driver para um driver de minidiretório de rede quando a rotina RxDriverEntry é chamada para inicializar o RDBSS.
Internamente, o RDBSS mantém dois vetores de expedição:
Um vetor de expedição comum para a maioria das operações.
Um vetor de expedição privado para operações fcb de dispositivo de arquivo.
Se o IRP for uma solicitação IRP_MJ_CREATE, rxFsdDispatch usará um vetor de expedição comum. Se o IRP for para uma operação em um FCB de um objeto de arquivo, RxFsdDispatch marcar se um vetor de expedição privado deve ser usado. Caso contrário, um vetor de expedição comum será usado para processar o IRP.
RxFsdDispatch chama rotinas internas para processar os IRPs padrão, a maioria dos quais resultam em uma chamada para uma das rotinas de retorno de chamada implementadas pelo driver de minidiretório de rede.
Alguns IRPs são tratados como especiais e tratados internamente pelo RDBSS. Por exemplo, o IRP_MJ_SYSTEM_CONTROL será usado internamente se o WMI estiver habilitado. IRP_MJ_CREATE_MAILSLOT ou IRP_MJ_CREATE_NAMED_PIPE solicitações são tratadas especialmente e rejeitadas (um erro de STATUS_OBJECT_NAME_INVALID é retornado).
Requisitos
Requisito | Valor |
---|---|
Plataforma de Destino | Área de Trabalho |
Cabeçalho | mrx.h (incluem Mrx.h, Rxstruc.h, Struchdr.h) |
IRQL | <= APC_LEVEL |