Funzione RxInitializeContext (rxcontx.h)

RxInitializeContext inizializza una struttura di dati RX_CONTEXT esistente.

Sintassi

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

Parametri

[in, optional] Irp

Puntatore all'IRP da incapsulare da questa struttura RX_CONTEXT.

[in] RxDeviceObject

Puntatore all'oggetto dispositivo a cui si applica questa RX_CONTEXT e IRP.

[in] InitialContextFlags

Set di valori iniziali per il membro Flags della struttura di dati RX_CONTEXT da archiviare nella struttura RX_CONTEXT. Questi valori iniziali possono essere una combinazione delle enumerazioni seguenti:

RX_CONTEXT_FLAG_WAIT

Quando questo valore è impostato, l'IRP non deve essere pubblicato per l'esecuzione successiva del processo di file system, ma deve essere atteso per il completamento.

RX_CONTEXT_FLAG_MUST_SUCCEED

Quando questo valore è impostato, l'operazione deve avere esito positivo. Questo valore non è attualmente usato da RDBSS, ma può essere usato dai driver mini-redirector di rete.

RX_CONTEXT_FLAG_MUST_SUCCEED_NONBLOCKING

Quando questo valore è impostato, l'operazione deve avere esito positivo per le operazioni non bloccate. Questo valore non è attualmente usato da RDBSS, ma può essere usato dai driver mini-redirector di rete.

[in, out] RxContext

Puntatore al RX_CONTEXT da inizializzare.

Valore restituito

nessuno

Osservazioni

RxInitializeContext viene chiamato internamente dalla routine RxCreateRxContext . Pertanto, la routine RxInitializeContext normalmente viene usata solo dai driver min-redirector di rete che allocano direttamente le strutture RX_CONTEXT anziché chiamare la routine RxCreateRxContext per allocare e inizializzare una struttura RX_CONTEXT.

Se il parametro Irp è configurato per l'operazione asincrona, il membro Flags della struttura RX_CONTEXT puntato da RxContext ha anche il valore impostato di seguito:

RX_CONTEXT_FLAG_ASYNC_OPERATION è impostato anche per le condizioni seguenti:

  • Il membro MajorFunctiondell'Irp è IRP_MJ_READ, IRP_MJ_WRITE o IRP_MJ_DEVICE_CONTROL.
  • Il membro MajorFunction dell'Irp è un IRP_MJ_DIRECTORY_CONTROL e il membro MinorFunctiondell'IRP è un IRP_MN_NOTIFY_CHANGE_DIRECTORY.
  • Il membro MajorFunctiondell'Irp è un membro IRP_MJ_FILE_SYSTEM_CONTROL e NetRoot dell'FCB associato non è NULL e il membro Type del NET_ROOT è NET_ROOT_PIPE.
Se si tratta di una chiamata di file system ricorsiva (il membro TopLevelIrp nell'archiviazione locale del thread è l'Irp corrente), il membro Flags di RxContext ha anche il valore impostato di seguito:

Se il parametro RxDeviceObject indica che si tratta dell'oggetto dispositivo RDBSS di primo livello, il membro Flags della struttura RX_CONTEXT ha anche il valore impostato di seguito:

Se il membro Irp FileObject Flags ha l'opzione FO_WRITE_THROUGH impostata, il membro Flags della struttura RX_CONTEXT ha anche il valore impostato di seguito:

RxInitializeContext imposta un numero di altri membri nella struttura RX_CONTEXT, tra cui quanto segue:

  • Imposta il valore NodeTypeCode appropriato, NodeByteSize, SerialNumber, RxDeviceObject e inizializza ReferenceCount su 1.
  • Inizializza syncEvent
  • Inizializzare l'oggetto ScavengerEntry associato
  • Inizializza la voce di elenco di BlockedOperations
  • Imposta i membri RX_CONTEXT in base all'Irp. Sono inclusi i membri CurrentIrp, OriginalThread, MajorFunction, MinorFunction, CurrentIrpSp, pFcb, NonPagedFcb, pFobx, pRelevantSrvOpen e FobxSerialNumber .

Requisiti

Requisito Valore
Piattaforma di destinazione Desktop
Intestazione rxcontx.h (include Rxprocs.h rxcontx.h)
IRQL <= APC_LEVEL

Vedi anche

RX_CONTEXT

RxCompleteRequest

RxCompleteRequest_Real

RxCreateRxContext

RxDereference

RxDereferenceAndDeleteRxContext_Real

RxPrepareContextForReuse

RxResumeBlockedOperations_Serially

__RxSynchronizeBlockingOperations

__RxSynchronizeBlockingOperationsMaybeDroppingFcbLock