Compartilhar via


Função RxInitializeContext (rxcontx.h)

RxInitializeContext inicializa uma estrutura de dados RX_CONTEXT existente.

Sintaxe

void RxInitializeContext(
  [in, optional] IN PIRP                 Irp,
  [in]           IN PRDBSS_DEVICE_OBJECT RxDeviceObject,
  [in]           IN ULONG                InitialContextFlags,
  [in, out]      IN OUT PRX_CONTEXT      RxContext
);

Parâmetros

[in, optional] Irp

Um ponteiro para o IRP a ser encapsulado por essa estrutura RX_CONTEXT.

[in] RxDeviceObject

Um ponteiro para o objeto de dispositivo ao qual esse RX_CONTEXT e IRP se aplicam.

[in] InitialContextFlags

O conjunto de valores iniciais para o membro Flags da estrutura de dados RX_CONTEXT a ser armazenada na estrutura RX_CONTEXT. Esses valores iniciais podem ser qualquer combinação das seguintes enumerações:

RX_CONTEXT_FLAG_WAIT

Quando esse valor é definido, o IRP não deve ser postado para execução posterior pelo processo do sistema de arquivos, mas deve ser aguardado para ser concluído.

RX_CONTEXT_FLAG_MUST_SUCCEED

Quando esse valor é definido, a operação deve ser bem-sucedida. Esse valor não é usado atualmente pelo RDBSS, mas pode ser usado por drivers de minidiretório de rede.

RX_CONTEXT_FLAG_MUST_SUCCEED_NONBLOCKING

Quando esse valor é definido, a operação deve ser bem-sucedida para operações sem bloqueio. Esse valor não é usado atualmente pelo RDBSS, mas pode ser usado por drivers de minidiretório de rede.

[in, out] RxContext

Ponteiro para o RX_CONTEXT a ser inicializado.

Retornar valor

Nenhum

Comentários

RxInitializeContext é chamado internamente pela rotina RxCreateRxContext . Portanto, a rotina RxInitializeContext normalmente só seria usada por drivers de redirecionador mínimo de rede que alocam RX_CONTEXT estruturas diretamente em vez de chamar a rotina RxCreateRxContext para alocar e inicializar uma estrutura de RX_CONTEXT.

Se o parâmetro Irp estiver configurado para operação assíncrona, o membro Flags da estrutura RX_CONTEXT apontada por RxContext também terá o seguinte valor definido:

RX_CONTEXT_FLAG_ASYNC_OPERATION também é definido para as seguintes condições:

  • O membro MajorFunction do Irp é IRP_MJ_READ, IRP_MJ_WRITE ou IRP_MJ_DEVICE_CONTROL.
  • O membro MajorFunction do Irp é um IRP_MJ_DIRECTORY_CONTROL e o membro MinorFunction do IRP é um IRP_MN_NOTIFY_CHANGE_DIRECTORY.
  • O membro MajorFunction do Irp é um membro IRP_MJ_FILE_SYSTEM_CONTROL e NetRoot do FCB associado não é NULL e o membro Type do NET_ROOT é NET_ROOT_PIPE.
Se essa for uma chamada recursiva do sistema de arquivos (o membro TopLevelIrp no armazenamento local do thread é o Irp atual), o membro Flags de RxContext também terá o seguinte valor definido:

Se o parâmetro RxDeviceObject indicar que esse é o objeto de dispositivo RDBSS de nível superior, o membro Flags da estrutura RX_CONTEXT também terá o seguinte valor definido:

Se o membro Irp FileObject Flags tiver a opção FO_WRITE_THROUGH definida, o membro Flags da estrutura RX_CONTEXT também terá o seguinte valor definido:

RxInitializeContext define vários outros membros na estrutura RX_CONTEXT incluindo o seguinte:

  • Define o NodeTypeCode, NodeByteSize, SerialNumber, RxDeviceObject e inicializa ReferenceCount como 1.
  • Inicializa o SyncEvent
  • Inicializar o ScavengerEntry associado
  • Inicializa a entrada de lista de BlockedOperations
  • Define os membros RX_CONTEXT com base no Irp. Eles incluem os membros CurrentIrp, OriginalThread, MajorFunction, MinorFunction, CurrentIrpSp, pFcb, NonPagedFcb, pFobx, pRelevantSrvOpen e FobxSerialNumber .

Requisitos

Requisito Valor
Plataforma de Destino Área de Trabalho
Cabeçalho rxcontx.h (inclua Rxprocs.h rxcontx.h)
IRQL <= APC_LEVEL

Confira também

RX_CONTEXT

RxCompleteRequest

RxCompleteRequest_Real

RxCreateRxContext

RxDereference

RxDereferenceAndDeleteRxContext_Real

RxPrepareContextForReuse

RxResumeBlockedOperations_Serially

__RxSynchronizeBlockingOperations

__RxSynchronizeBlockingOperationsMaybeDroppingFcbLock