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 applicano 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 qualsiasi combinazione delle enumerazioni seguenti:

RX_CONTEXT_FLAG_WAIT

Quando questo valore è impostato, l'IRP non deve essere inserito per un'esecuzione successiva dal processo del file system, ma deve essere atteso 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 del mini-redirector di rete.

RX_CONTEXT_FLAG_MUST_SUCCEED_NONBLOCKING

Quando questo valore è impostato, l'operazione deve avere esito positivo per le operazioni non di blocco. Questo valore non è attualmente usato da RDBSS, ma può essere usato dai driver del 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 verrebbe usata solo dai driver del redirector min 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, anche il membro Flags della struttura RX_CONTEXT a cui punta RxContext ha il valore seguente impostato:

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 MajorFunctiondell'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 ricorsiva al file system (il membro TopLevelIrp nella risorsa di archiviazione locale del thread è l'Irp corrente), anche il membro Flags di RxContext ha il valore seguente impostato:

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

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

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

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

Requisiti

   
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