PMRX_CALLDOWN funzione di callback (mrx.h)

Questo callback viene chiamato da RDBSS per richiedere che il mini-reindirizzamento di rete esegua un'azione basata sull'IRP fornito.

Sintassi

PMRX_CALLDOWN PmrxCalldown;

NTSTATUS PmrxCalldown(
  [in, out] IN OUT PRX_CONTEXT RxContext
)
{...}

Parametri

[in, out] RxContext

Puntatore alla struttura RX_CONTEXT. Questo parametro contiene l'IRP che richiede l'operazione.

Valore restituito

Questo callback restituisce STATUS_SUCCESS in caso di esito positivo o di un valore NTSTATUS appropriato, ad esempio quanto segue:

Codice restituito Descrizione
STATUS_ACCESS_DENIED Una richiesta è stata effettuata per arrestare o avviare il mini-reindirizzamento di rete, ma il chiamante ha mancante la sicurezza appropriata per questa operazione.
STATUS_BUFFER_OVERFLOW Il buffer per ricevere le informazioni sull'attributo esteso era troppo piccolo. Questo valore restituito deve essere considerato riuscito e la maggior parte dei dati validi possibile deve essere restituito nel membro Info.Buffer della struttura RX_CONTEXT a cui punta il parametro RxContext .
STATUS_BUFFER_TOO_SMALL Il buffer è troppo piccolo per ricevere i dati richiesti. Se questo valore viene restituito, il membro InformationToReturn della struttura RX_CONTEXT puntato al parametro RxContext deve essere impostato sulla dimensione minima del buffer previsto per la chiamata.
STATUS_CONNECTION_DISCONNECTED La connessione è stata disconnessa.
STATUS_EA_CORRUPT_ERROR Le informazioni sull'attributo esteso non sono state ricevute dal server remoto.
STATUS_EA_TOO_LARGE Le informazioni sull'attributo estese passate sono maggiori delle dimensioni supportate dalla condivisione remota.
STATUS_FILE_CLOSED La struttura FCB è stata acquisita, ma la struttura SRV_OPEN associata è stata chiusa.
STATUS_INSUFFICIENT_RESOURCES Per completare l'operazione sono state eseguite risorse insufficienti.
STATUS_INTERNAL_ERROR Si è verificato un errore interno nel mini-redirector di rete.
STATUS_INVALID_BUFFER_SIZE Le dimensioni del buffer richieste erano troppo grandi.
STATUS_INVALID_DEVICE_REQUEST Una richiesta di dispositivo non valida è stata inviata al mini-reindirizzamento di rete.
STATUS_INVALID_NETWORK_RESPONSE Una risposta non valida è stata ricevuta dal server remoto.
STATUS_INVALID_PARAMETER Un parametro non valido è stato specificato in RxContext.
STATUS_LINK_FAILED Tentativo di riconnessione a un server remoto per completare la richiesta non riuscita.
STATUS_MORE_PROCESSING_REQUIRED Un mini-reindirizzamento di rete restituisce questo valore per disabilitare il confronto di questa richiesta aperta.
STATUS_NETWORK_ACCESS_DENIED Accesso alla rete negato. Questo errore può essere restituito se il mini-reindirizzamento di rete è stato chiesto di aprire un nuovo file in una condivisione di sola lettura.
STATUS_NETWORK_NAME_DELETED È stato eliminato un nome di rete.
STATUS_NONEXISTENT_EA_ENTRY Non sono presenti attributi estesi nell'oggetto file e l'utente ha fornito un indice di attributo esteso.
STATUS_NOT_IMPLEMENTED Non viene implementata una funzionalità richiesta, ad esempio l'avvio remoto o un file di pagina remota.
STATUS_NOT_SUPPORTED Una funzionalità richiesta, ad esempio attributi estesi, non è supportata.
STATUS_OBJECT_NAME_COLLISION Il mini-reindirizzamento di rete è stato chiesto di creare un file già esistente.
STATUS_OBJECT_NAME_NOT_FOUND Il nome dell'oggetto non è stato trovato. Questo errore può essere restituito se il mini-reindirizzamento di rete è stato chiesto di aprire un file che non esiste.
STATUS_OBJECT_PATH_NOT_FOUND Il percorso dell'oggetto non è stato trovato. Questo errore può essere restituito se è stato richiesto un oggetto di flusso NTFS e il file system remoto non supporta i flussi.
STATUS_ONLY_IF_CONNECTED La struttura SRV_OPEN non è connessa.
STATUS_REDIRECTOR_HAS_OPEN_HANDLES Questa è stata una richiesta per arrestare il mini-reindirizzamento di rete, ma il reindirizzamento ha handle aperti che impediscono l'arresto in questo momento.
STATUS_REDIRECTOR_NOT_STARTED Questa è stata una richiesta per arrestare il mini-reindirizzamento di rete, ma il reindirizzamento non è stato avviato.
STATUS_REDIRECTOR_STARTED Questa è stata una richiesta per avviare il mini-reindirizzamento di rete, ma il reindirizzamento è già stato avviato.
STATUS_REPARSE Un reparse è necessario per gestire un collegamento simbolico.
STATUS_REQUEST_ABORTED La richiesta di rete è stata interrotta.
STATUS_RETRY L'operazione deve essere riprovata. Questo errore può essere restituito se il mini-reindirizzamento di rete ha rilevato una violazione di condivisione o un errore di accesso negato.
STATUS_SHARING_VIOLATION Si è verificata una violazione della condivisione.
STATUS_UNSUCCESSFUL La chiamata non è riuscita.

Commenti

La routine MRxCloseSrvOpen viene chiamata da RDBSS per richiedere che il mini-reindirizzamento di rete chiuda una struttura SRV_OPEN.

MRxCloseSrvOpen viene chiamato da RDBSS come parte della pulizia e della chiusura delle operazioni su un oggetto file. Si presuppone che il mini-reindirizzamento di rete chiuderà un file nella rete.

Prima di chiamare MRxCloseSrvOpen, RDBSS modifica i membri seguenti nella struttura RX_CONTEXT, a cui punta il parametro RxContext :

MajorFunction è impostato su IRP_MJ_CLOSE

pFcb è impostato sulla struttura FCB per cui è necessario avviare l'elaborazione di chiusura

pFobx è impostato sulla struttura FOBX per cui è necessario avviare l'elaborazione di chiusura

RDBSS e un mini-reindirizzamento di rete non chiudere necessariamente le strutture di SRV_OPEN quando l'utente chiude un file. Per migliorare le prestazioni in alcuni casi, un mini-reindirizzamento di rete può provare a riutilizzare i SRV_OPEN e i dati memorizzati nella cache senza alcun contatto con il server. Alcune applicazioni di Microsoft Windows mostrano un comportamento che apre, legge e chiude un file e quindi riapri rapidamente lo stesso file. In questi casi, il riutilizzo delle strutture SRV_OPEN può migliorare le prestazioni.

RDBSS chiama MRxCloseSrvOpen per l'elaborazione chiusa ritardata durante la scavenging di una struttura FOBX. Ciò accade quando l'elaborazione di chiusura è stata ritardata in attesa di una richiesta aperta e non sono state future richieste aperte.

MRxCloseSrvOpen non può restituire un valore di STATUS_RETRY che indica che la chiamata deve essere riprovata. Se è necessario un ciclo di ripetizione dei tentativi, deve essere gestito internamente nella routine MRxCloseSrvOpen dal mini-reindirizzamento della rete.

La routine MRxCollapseOpen viene chiamata da RDBSS per richiedere che il mini-redirector di rete comprima una richiesta di file system aperta in una struttura SRV_OPEN esistente.

MRxCollapseOpen viene chiamato da RDBSS per comprimere una struttura SRV_OPEN in locale. Il mini-redirector di rete viene consultato per determinare se è possibile un compressione in modo che non vi sia motivo di chiamare il mini-redirector di rete due volte. Se il mini-reindirizzamento di rete decide di comprimere la struttura SRV_OPEN, lo farà e passerà di nuovo uno stato restituito. Un valore restituito di STATUS_SUCCESS è un valore restituito terminante. Un valore restituito diverso, ad esempio STATUS_MORE_PROCESSING_REQUIRED, viene considerato un valore restituito non terminante.

Prima di chiamare MRxCollapseOpen, RDBSS modifica i membri seguenti nella struttura RX_CONTEXT puntati al parametro RxContext :

pRelevantSrvOpen è impostato sulla struttura SRV_OPEN da comprimere.

Create.pSrvCall è impostato sulla struttura SRV_CALL associata alla SRV_OPEN.

Se il mini-redirector di rete decide di comprimere la struttura SRV_OPEN, il membro SrvOpen della struttura RX_CONTEXT deve essere impostato sulla struttura SRV_OPEN compressa.

La routineMRxCreate viene chiamata da RDBSS per richiedere che il mini-reindirizzamento di rete crei un oggetto file system.

MRxCreate viene chiamato da RDBSS per richiedere che il mini-reindirizzamento di rete apri un oggetto file system nella rete. Questa chiamata viene emessa da RDBSS in risposta alla ricezione di una richiesta di IRP_MJ_CREATE .

Prima di chiamare MRxCreate, RDBSS modifica i membri seguenti nella struttura RX_CONTEXT a cui punta il parametro RxContext :

pRelevantSrvOpen è impostato sulla struttura SRV_OPEN.

Create.pSrvCall è impostato sulla struttura SRV_CALL.

Create.NtCreateParameters è impostato sul NT_CREATE_PARAMETERS richiesto.

Nel contesto di un mini-reindirizzamento di rete, un oggetto file fa riferimento alle strutture FOB (Associate File Control Block) e File Object Extension (FOBX). Esiste una corrispondenza tra oggetti file e FOBX. Molti oggetti file fanno riferimento allo stesso FCB, che rappresenta un singolo file in un server remoto. Un client può avere diverse richieste aperte (richieste NtCreateFile) nello stesso FCB e ognuna di queste creerà un nuovo oggetto file. I mini-reindirizzamenti di rete e RDBSS possono scegliere di inviare meno richieste MRxCreate rispetto alle richieste NtCreateFile ricevute, in modo da condividere una struttura SRV_OPEN tra diversi FOBX.

Se la richiesta MRxCreate era per una sovrascrittura del file e MRxCreate restituita STATUS_SUCCESS, RDBSS acquisirà la risorsa di I/O di paging e tronca il file. Se il file viene memorizzato nella cache da gestione cache, RDBSS aggiornerà le dimensioni della gestione cache con quelle appena ricevute dal server.

Prima di restituire, MRxCreate deve impostare il membro CurrentIrp-IoStatus.Information> della struttura RX_CONTEXT a cui punta il parametro RxContext.

La routine MRxDevFcbXXXControlFile viene chiamata da RDBSS per passare una richiesta di controllo FCB del dispositivo (richiesta IOCTL o FSCTL) al mini-reindirizzamento di rete.

MRxDevFcbXXXControlFile gestisce le richieste IOCTL e FSCTL correlate al dispositivo FCB inviato al mini-reindirizzamento di rete.

Prima di chiamare MRxDevFcbXXXControlFile, RDBSS modifica il membro seguente nella struttura RX_CONTEXT puntato dal parametro RxContext :

MajorFunction è impostato sulla funzione principale dell'IRP

Se si tratta di una richiesta di IRP_MJ_FILE_SYSTEM_CONTROL, RDBSS modifica i membri seguenti nella struttura RX_CONTEXT a cui punta il parametro RxContext :

LowIoContext.ParamsFor.FsCtl.MinorFunction è impostato sul codice di funzione secondario per il codice FSCTL

LowIoContext.ParamsFor.FsCtl.FsControlCode è impostato sul codice FSCTL per l'IRP

Se si tratta di una richiesta di IRP_MJ_DEVICE_CONTROL o di IRP_MJ_INTERNAL_DEVICE_CONTROL, RDBSS modifica il membro seguente nella struttura RX_CONTEXT a cui punta il parametro RxContext :

LowIoContext.ParamsFor.FsCtl.FsControlCode è impostato sul codice di controllo per LRP.

Se MRxDevFcbXXXControlFile restituisce STATUS_SUCCESS, la routine è riuscita. Qualsiasi altro valore restituito indica che si è verificato un errore.

La routine MRxFlush viene chiamata da RDBSS per richiedere che un mini-reindirizzamento di rete scriva il contenuto di un oggetto file system nell'archiviazione. RDBSS genera questa chiamata in risposta alla ricezione di una richiesta di IRP_MJ_FLUSH_BUFFERS .

MRxFlush gestisce le richieste di rete per lo scaricamento di file.

La routine MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK] viene chiamata da RDBSS per richiedere che un mini-reindirizzamento di rete apri un blocco esclusivo su un oggetto file.

RDBSS chiama MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK] in risposta alla ricezione di una richiesta di IRP_MJ_LOCK_CONTROL con un codice secondario di IRP_MN_LOCK se IrpSp-Flags> ha il set di bit SL_EXCLUSIVE_LOCK.

Prima di chiamare MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK], RDBSS modifica i membri seguenti nella struttura RX_CONTEXT a cui punta il parametro RxContext :

Il membro LowIoContext.Operation è impostato su LOWIO_OP_EXCLUSIVELOCK.

Il membro LowIoContext.ResourceThreadId è impostato sul thread del processo che ha avviato l'operazione in RDBSS.

Il membro LowIoContext.ParamsFor.Locks.ByteOffset è impostato sul valore di IrpSp-Parameters.LockControl.ByteOffset.QuadPart>.

Il membro LowIoContext.ParamsFor.Locks.Key è impostato sul valore di IrpSp-Parameters.LockControl.Key>.

Il membro LowIoContext.ParamsFor.Locks.Flags è impostato sul valore di IrpSp-Flags>.

Il membro LowIoContext.ParamsFor.Locks.Length è impostato sul valore di IrpSp-Parameters.LockControl.Length.QuadPart>.

Il membro LowIoContext.Operation della struttura RX_CONTEXT specifica l'operazione di I/O bassa da eseguire. È possibile che diverse routine di I/O basse puntino alla stessa routine in un mini-reindirizzamento di rete perché questo membro LowIoContext.Operation può essere usato per distinguere l'operazione di I/O bassa richiesta. Ad esempio, tutte le chiamate di I/O correlate ai blocchi di file potrebbero chiamare la stessa routine di I/O bassa nel mini-reindirizzamento di rete e tale routine potrebbe usare il membro LowIoContext.Operation per distinguere tra l'operazione di blocco e sblocco richiesta.

Se la routine MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK] può richiedere molto tempo per completare, il driver di mini-reindirizzamento di rete deve rilasciare la struttura FCB prima di avviare la comunicazione di rete. La struttura FCB può essere rilasciata chiamando RxReleaseFcbResourceForThreadInMRx. Mentre la routine MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK] viene elaborata, il membro LowIoContext.ResourceThreadId di RX_CONTEXT è garantito indicare il thread del processo che ha avviato l'operazione in RDBSS.

Il membro LowIoContext.ResourceThreadId di RX_CONTEXT può essere usato per rilasciare la struttura FCB per conto di un altro thread. Al termine di una routine asincrona, è possibile rilasciare la struttura FCB acquisita dal thread iniziale.

La routine MRxLowIOSubmit[LOWIO_OP_FSCTL] viene chiamata da RDBSS per richiedere che una richiesta di controllo del file system del mini-reindirizzamento di rete sul file remoto.

RDBSS chiama MRxLowIOSubmit[LOWIO_OP_FSCTL] in risposta alla ricezione di una richiesta di IRP_MJ_FILE_SYSTEM_CONTROL .

Prima di chiamare MRxLowIOSubmit[LOWIO_OP_FSCTL], RDBSS modifica i membri seguenti nella struttura RX_CONTEXT a cui punta il parametro RxContext :

Il membro LowIoContext.Operation è impostato su LOWIO_OP_FSCTL.

Il membro LowIoContext.ResourceThreadId è impostato sul thread del processo che ha avviato l'operazione in RDBSS.

Il membro LowIoContext.ParamsFor.FsCtl.FsControlCode è impostato sul codice di controllo principale DI FSCTL.

Il membro LowIoContext.ParamsFor.FsCtl.MinorFunction è impostato sul codice di controllo secondario FSCTL.

Il membro LowIoContext.ParamsFor.FsCtl.pInputBuffer è impostato sul buffer di input.

Il membro LowIoContext.ParamsFor.FsCtl.InputBufferLength è impostato sulla lunghezza del buffer di input.

Il membro LowIoContext.ParamsFor.FsCtl.pOutputBuffer è impostato sul buffer di output.

Il membro LowIoContext.ParamsFor.FsCtl.OutputBufferLength è impostato sulla lunghezza del buffer di output.

Le richieste del codice di controllo del file system (FSCTL) gestite da un mini-reindirizzamento di rete possono essere classificate in una delle diverse categorie:

  • FSCTLs implementati e usati da RDBSS e mini redirector di rete

  • FSCTLs implementati e usati solo dal mini-redirector di rete

  • FSCTLs che non dovrebbe mai essere visto dal mini-reindirizzamento della rete. Questi TIPI DI CODICE FSCTL sono destinati esclusivamente come aiuto di debug.

Sebbene la routine MRxLowIOSubmit[LOWIO_OP_FSCTL] venga elaborata, il membro LowIoContext.ResourceThreadId di RX_CONTEXT è garantito indicare il thread del processo che ha avviato l'operazione in RDBSS. Il membro LowIoContext.ResourceThreadId di RX_CONTEXT può essere usato per rilasciare la risorsa di input per conto di un altro thread. Al termine di una routine asincrona, è possibile rilasciare la risorsa di input acquisita dal thread iniziale.

La routine MRxLowIOSubmit[LOWIO_OP_IOCTL] viene chiamata da RDBSS per inviare una richiesta di controllo di sistema di I/O al mini-reindirizzamento di rete.

RDBSS chiama MRxLowIOSubmit[LOWIO_OP_IOCTL] in risposta alla ricezione di una richiesta di IRP_MJ_DEVICE_CONTROL o di IRP_MJ_INTERNAL_DEVICE_CONTROL .

Prima di chiamare MRxLowIOSubmit[LOWIO_OP_IOCTL], RDBSS modifica i membri seguenti nella struttura RX_CONTEXT a cui punta il parametro RxContext :

Il membro LowIoContext.Operation è impostato su LOWIO_OP_IOCTL.

Il membro LowIoContext.ResourceThreadId è impostato sul thread del processo che ha avviato l'operazione in RDBSS.

Il membro LowIoContext.ParamsFor.IoCtl.IoControlCode è impostato sul codice di controllo IOCTL.

Il membro LowIoContext.ParamsFor.IoCtl.pInputBuffer è impostato sul buffer di input.

Il membro LowIoContext.ParamsFor.IoCtl.InputBufferLength è impostato sulla lunghezza del buffer di input.

Il membro LowIoContext.ParamsFor.IoCtl.pOutputBuffer è impostato sul buffer di output.

Il membro LowIoContext.ParamsFor.IoCtl.OutputBufferLength è impostato sulla lunghezza del buffer di output.

Mentre la routine MRxLowIOSubmit[LOWIO_OP_IOCTL] viene elaborata, il membro LowIoContext.ResourceThreadId di RX_CONTEXT è garantito indicare il thread del processo che ha avviato l'operazione in RDBSS. Il membro LowIoContext.ResourceThreadId di RX_CONTEXT può essere usato per rilasciare la risorsa di input per conto di un altro thread. Al termine di una routine asincrona, è possibile rilasciare la risorsa di input acquisita dal thread iniziale.

La routine MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY] viene chiamata da RDBSS per inviare una richiesta al mini-reindirizzamento di rete per un'operazione di notifica delle modifiche della directory.

RDBSS chiama MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY] in risposta alla ricezione di una richiesta di IRP_MJ_DIRECTORY_CONTROL .

Prima di chiamare MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY], RDBSS modifica i membri seguenti nella struttura RX_CONTEXT a cui punta il parametro RxContext :

Il membro LowIoContext.Operation è impostato su LOWIO_OP_NOTIFY_CHANGE_DIRECTORY.

Il membro LowIoContext.ResourceThreadId è impostato sul thread del processo che ha avviato l'operazione in RDBSS.

Il membro LowIoContext.ParamsFor.NotifyChangeDirectory.WatchTree è impostato su TRUE se IrpSp-Flags> ha il set di bit SL_WATCH_TREE.

Il membro LowIoContext.ParamsFor.NotifyChangeDirectory.CompletionFilter è impostato sul valore di IrpSp-Parameters.NotifyDirectory.CompletionFilter>.

Il membro LowIoContext.ParamsFor.NotifyChangeDirectory.NotificationBufferLength è impostato sul valore di IrpSp-Parameters.NotifyDirectory.Length>.

Il membro LowIoContext.ParamsFor.NotifyChangeDirectory.pNotificationBuffer viene impostato sul valore restituito chiamando MmGetSystemAddressForMdlSafe passando in Irp-MdlAddress> e NormalPagePriority. Il buffer utente viene inoltre eseguito il probe e bloccato per l'accesso in scrittura.

Un'operazione di notifica delle modifiche della directory viene normalmente implementata da un mini-reindirizzamento di rete come operazione asincrona perché può richiedere molto tempo. L'operazione in genere consiste nell'inviare una richiesta di rete al server remoto che richiede la notifica delle modifiche. La risposta viene ottenuta quando la modifica desiderata è interessata nel server. Questo è un esempio di operazione per cui il mini-reindirizzamento di rete potrebbe dover registrare un valore di contesto univoco per la gestione degli annullamenti avviati localmente.

Durante l'elaborazione della routine MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY] , è garantito che il membro LowIoContext.ResourceThreadId di RX_CONTEXT indichi il thread del processo che ha avviato l'operazione in RDBSS. Il membro LowIoContext.ResourceThreadId può essere usato per rilasciare la struttura FCB per conto di un altro thread. Al termine di una routine asincrona, è possibile rilasciare la struttura FCB acquisita dal thread iniziale. La struttura FCB può essere rilasciata chiamando RxReleaseFcbResourceForThreadInMRx.

La routine MRxLowIOSubmit[LOWIO_OP_READ] viene chiamata da RDBSS per inviare una richiesta di lettura al mini-redirector di rete.

RDBSS chiama MRxLowIOSubmit[LOWIO_OP_READ] in risposta alla ricezione di una richiesta di IRP_MJ_READ .

Prima di chiamare MRxLowIOSubmit[LOWIO_OP_READ], RDBSS modifica i membri seguenti nella struttura RX_CONTEXT a cui punta il parametro RxContext :

Il membro LowIoContext.Operation è impostato su LOWIO_OP_READ.

Il membro LowIoContext.ResourceThreadId è impostato sul thread del processo che ha avviato l'operazione in RDBSS.

Il membro LowIoContext.ParamsFor.ReadWrite.Key è impostato sul valore di IrpSp-Parameters.Read.Key>.

Il membro ParamsFor.ReadWrite.Flags ha il bit LOWIO_READWRITEFLAG_PAGING_IO è impostato su se Irp-Flags> ha il bit di IRP_PAGING_IO su .

Il membro ParamsFor.ReadWrite.Buffer è impostato sul buffer utente bloccato per IoReadAccess.

Il membro LowIoContext.ParamsFor.ReadWrite.ByteCount è impostato sul valore di IrpSp-Parameters.Read.Length>.

Una richiesta di lettura viene in genere implementata da un mini redirector di rete come operazione asincrona perché può richiedere molto tempo. L'operazione consiste in genere nell'inviare una richiesta di rete al server remoto. La risposta viene ottenuta al termine della richiesta di lettura nel server. Questo è un esempio di operazione per cui il mini-reindirizzamento di rete potrebbe dover registrare un contesto per la gestione degli annullamenti avviati in locale.

Durante l'elaborazione della routine MRxLowIOSubmit[LOWIO_OP_READ] , il membro LowIoContext.ResourceThreadId di RX_CONTEXT indica il thread del processo che ha avviato l'operazione in SERVIZI Desktop remoto. Il membro LowIoContext.ResourceThreadId può essere usato per rilasciare la struttura FCB per conto di un altro thread. Al termine di una routine asincrona, è possibile rilasciare la struttura FCB acquisita dal thread iniziale. La struttura FCB può essere rilasciata chiamando RxReleaseFcbResourceForThreadInMRx.

La routine MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK] viene chiamata da RDBSS per richiedere che un redirector di rete apra un blocco condiviso su un oggetto file.

RDBSS chiama MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK] in risposta alla ricezione di una richiesta di IRP_MJ_LOCK_CONTROL con un codice secondario di IRP_MN_LOCK se IrpSp-Flags> non dispone del SL_EXCLUSIVE_LOCK bit impostato.

Prima di chiamare MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK], RDBSS modifica i membri seguenti nella struttura RX_CONTEXT a cui punta il parametro RxContext :

Il membro LowIoContext.Operation è impostato su LOWIO_OP_SHAREDLOCK.

Il membro LowIoContext.ResourceThreadId è impostato sul thread del processo che ha avviato l'operazione in RDBSS.

Il membro LowIoContext.ParamsFor.Locks.ByteOffset è impostato sul valore di IrpSp-Parameters.LockControl.ByteOffset.QuadPart>.

Il membro LowIoContext.ParamsFor.Locks.Key è impostato sul valore di IrpSp-Parameters.LockControl.Key>.

Il membro LowIoContext.ParamsFor.Locks.Flags è impostato sul valore di IrpSp-Flags>.

Il membro LowIoContext.ParamsFor.Locks.Length è impostato sul valore di IrpSp-Parameters.LockControl.Length.QuadPart>.

Il membro LowIoContext.Operation della struttura RX_CONTEXT specifica l'operazione di I/O bassa da eseguire. È possibile che diverse routine di I/O basse puntino alla stessa routine in un mini-redirector di rete perché il membro LowIoContext.Operation può essere usato per distinguere l'operazione di I/O bassa richiesta. Ad esempio, tutte le chiamate di I/O correlate ai blocchi di file possono chiamare la stessa routine di I/O bassa nel mini-redirector di rete e questa routine potrebbe usare il membro LowIoContext.Operation per distinguere tra l'operazione di blocco e sblocco richiesta.

Se la routine MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK] può richiedere molto tempo, il driver del mini-reindirizzamento di rete deve rilasciare la struttura FCB prima di avviare la comunicazione di rete. La struttura FCB può essere rilasciata chiamando RxReleaseFcbResourceForThreadInMRx. Durante l'elaborazione della routine MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK] , è garantito che il membro LowIoContext.ResourceThreadId di RX_CONTEXT indichi il thread del processo che ha avviato l'operazione in RDBSS.

Il membro LowIoContext.ResourceThreadId della struttura RX_CONTEXT può essere usato per rilasciare la struttura FCB per conto di un altro thread. Al termine di una routine asincrona, è possibile rilasciare la struttura FCB acquisita dal thread iniziale.

La routine MRxLowIOSubmit[LOWIO_OP_UNLOCK] viene chiamata da RDBSS per richiedere che un mini redirector di rete rimuova un singolo blocco su un oggetto file.

RDBSS chiama MRxLowIOSubmit[LOWIO_OP_UNLOCK] in risposta alla ricezione di una richiesta di IRP_MJ_LOCK_CONTROL con un codice secondario di IRP_MN_UNLOCK_SINGLE.

Prima di chiamare MRxLowIOSubmit[LOWIO_OP_UNLOCK], RDBSS modifica i membri seguenti nella struttura RX_CONTEXT a cui punta il parametro RxContext :

Il membro LowIoContext.Operation è impostato su LOWIO_OP_UNLOCK.

Il membro LowIoContext.ResourceThreadId è impostato sul thread del processo che ha avviato l'operazione in RDBSS.

Il membro LowIoContext.ParamsFor.Locks.ByteOffset è impostato sul valore di IrpSp-Parameters.LockControl.ByteOffset.QuadPart>.

Il membro LowIoContext.ParamsFor.Locks.Key è impostato sul valore di IrpSp-Parameters.LockControl.Key>.

Il membro LowIoContext.ParamsFor.Locks.Length è impostato sul valore di IrpSp-Parameters.LockControl.Length.QuadPart>.

Il membro LowIoContext.Operation della struttura RX_CONTEXT specifica l'operazione di I/O bassa da eseguire. È possibile che diverse routine di I/O basse puntino alla stessa routine in un mini redirector di rete perché questo membro LowIoContext.Operation può essere usato per distinguere l'operazione di I/O bassa richiesta. Ad esempio, tutte le chiamate di I/O correlate ai blocchi di file possono chiamare la stessa routine di I/O bassa nel mini-redirector di rete e questa routine potrebbe usare il membro LowIoContext.Operation per distinguere tra l'operazione di blocco e sblocco richiesta.

Se la routine MRxLowIOSubmit[LOWIO_OP_UNLOCK] può richiedere molto tempo, il driver del mini-reindirizzamento di rete deve rilasciare la struttura FCB prima di avviare la comunicazione di rete. La struttura FCB può essere rilasciata chiamando RxReleaseFcbResourceForThreadInMRx. Durante l'elaborazione della routine MRxLowIOSubmit[LOWIO_OP_UNLOCK] , il membro LowIoContext.ResourceThreadId di RX_CONTEXT è garantito indicare il thread del processo che ha avviato l'operazione in RDBSS.

Il membro LowIoContext.ResourceThreadId di RX_CONTEXT può essere usato per rilasciare la struttura FCB per conto di un altro thread. Al termine di una routine asincrona, è possibile rilasciare la struttura FCB acquisita dal thread iniziale.

La routine MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] viene chiamata da RDBSS per richiedere che il mini-reindirizzamento di rete rimuovono più blocchi contenuti in un oggetto file.

RDBSS chiama MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] in risposta alla ricezione di una richiesta di IRP_MJ_LOCK_CONTROL con un codice secondario di IRP_MN_UNLOCK_ALL o IRP_MN_UNLOCK_ALL_BY_KEY.

Prima di chiamare MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE], RDBSS modifica i membri seguenti nella struttura RX_CONTEXT a cui punta il parametro RxContext :

Il membro LowIoContext.Operation è impostato su LOWIO_OP_UNLOCK_MULTIPLE.

Il membro LowIoContext.ResourceThreadId è impostato sul thread del processo che ha avviato l'operazione in RDBSS.

Il membro LowIoContext.ParamsFor.Locks.LockList è impostato su un elenco di elementi LOWIO_LOCK_LIST. Ogni elemento specifica un intervallo da sbloccare.

Gli intervalli di byte da sbloccare vengono specificati nel membro LowIoContext.ParamsFor.Locks.LockList della struttura RX_CONTEXT. La struttura LOWIO_LOCK_LIST è la seguente:

typedef struct _LOWIO_LOCK_LIST {
  struct  _LOWIO_LOCK_LIST  *Next;
  ULONG  LockNumber;
  RXVBO  ByteOffset;
  LONGLONG  Length;
  ULONG  Key;
  BOOLEAN  ExclusiveLock;
} LOWIO_LOCK_LIST, *PLOWIO_LOCK_LIST;

Il membro LowIoContext.Operation di RX_CONTEXT specifica l'operazione di I/O bassa da eseguire. È possibile che diverse routine di I/O basse puntino alla stessa routine in un mini-redirector di rete perché il membro LowIoContext.Operation può essere usato per distinguere l'operazione di I/O bassa richiesta. Ad esempio, tutte le chiamate di I/O correlate ai blocchi di file possono chiamare la stessa routine di I/O bassa nel mini-redirector di rete e questa routine potrebbe usare il membro LowIoContext.Operation per distinguere tra l'operazione di blocco e sblocco richiesta.

Se il completamento della routine MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] può richiedere molto tempo, il driver del mini-reindirizzamento di rete deve rilasciare la struttura FCB prima di avviare la comunicazione di rete. La struttura FCB può essere rilasciata chiamando RxReleaseFcbResourceForThreadInMRx. Durante l'elaborazione della routine MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] , è garantito che il membro LowIoContext.ResourceThreadId di RX_CONTEXT indichi il thread del processo che ha avviato l'operazione in RDBSS.

Il membro LowIoContext.ResourceThreadId di RX_CONTEXT può essere usato per rilasciare la struttura FCB per conto di un altro thread. Al termine di una routine asincrona, è possibile rilasciare la struttura FCB acquisita dal thread iniziale.

La routine MRxLowIOSubmit[LOWIO_OP_WRITE] viene chiamata da RDBSS per inviare una richiesta di scrittura al mini-redirector di rete.

RDBSS chiama MRxLowIOSubmit[LOWIO_OP_WRITE] in risposta alla ricezione di una richiesta di IRP_MJ_WRITE .

Prima di chiamare MRxLowIOSubmit[LOWIO_OP_WRITE], RDBSS modifica i membri seguenti nella struttura RX_CONTEXT a cui punta il parametro RxContext :

Il membro LowIoContext.Operation è impostato su LOWIO_OP_WRITE.

Il membro LowIoContext.ResourceThreadId è impostato sul thread del processo che ha avviato l'operazione in RDBSS.

Il membro LowIoContext.ParamsFor.ReadWrite.Key è impostato sul valore di IrpSp-Parameters.Read.Key>.

Il membro ParamsFor.ReadWrite.Flags ha il bit LOWIO_READWRITEFLAG_PAGING_IO è impostato su se Irp-Flags> ha il bit di IRP_PAGING_IO su .

Il membro ParamsFor.ReadWrite.Buffer è impostato sul buffer utente bloccato per IoWriteAccess.

Il membro LowIoContext.ParamsFor.ReadWrite.ByteCount è impostato sul valore di IrpSp-Parameters.Write.Length>.

Una richiesta di scrittura viene in genere implementata da un mini redirector di rete come operazione asincrona perché può richiedere molto tempo. L'operazione consiste in genere nell'inviare una richiesta di rete al server remoto. La risposta viene ottenuta al termine della richiesta di scrittura nel server. Questo è un esempio di operazione per cui il mini-reindirizzamento di rete potrebbe dover registrare un contesto per la gestione degli annullamenti avviati in locale.

Durante l'elaborazione della routine MRxLowIOSubmit[LOWIO_OP_WRITE] , il membro LowIoContext.ResourceThreadId di RX_CONTEXT è garantito indicare il thread del processo che ha avviato l'operazione in RDBSS. Il membro LowIoContext.ResourceThreadId può essere usato per rilasciare la struttura FCB per conto di un altro thread. Al termine di una routine asincrona, è possibile rilasciare la struttura FCB acquisita dal thread iniziale. La struttura FCB può essere rilasciata chiamando RxReleaseFcbResourceForThreadInMRx.

La routine MRxQueryDirectory viene chiamata da RDBSS per richiedere che un mini-redirector di rete esegua una query sulle informazioni su una directory di file.

Prima di chiamare MRxQueryDirectory, RDBSS modifica i membri seguenti nella struttura RX_CONTEXT a cui punta il parametro RxContext :

Il membro Info.FileInformationClass è impostato su IrpSp-Parameters.QueryDirectory.FileInformationClass>.

Il membro Info.Buffer è impostato sul buffer utente dal pacchetto di richiesta di I/O. Questo buffer è già stato bloccato da SERVIZI Desktop remoto, se necessario.

Il membro Info.LengthRemaining è impostato su IrpSp-Parameters.QueryDirectory.Length>.

Il membro QueryDirectory.FileIndex è impostato su IrpSp-Parameters.QueryDirectory.FileIndex>.

Il membro QueryDirectory.RestartScan è impostato su diverso da zero se IrpSp-Flags> ha il bit di SL_RESTART_SCAN.

Il membro QueryDirectory.ReturnSingleEntry è impostato su diverso da zero se IrpSp-Flags> ha il SL_RETURN_SINGLE_ENTRY bit su .

Il membro QueryDirectory.IndexSpecified è impostato su diverso da zero se IrpSp-Flags> ha il bit SL_INDEX_SPECIFIED su .

Il membro QueryDirectory.InitialQuery è impostato su diverso da zero se il membro UnicodeQueryTemplate.Buffer dell'oggetto FOBX associato è NULL e il membro Flags di FOBX non dispone del bit FOBX_FLAG_MATCH_ALL.

Per una query con caratteri jolly (".", ad esempio), RDBSS imposterà il membro UnicodeQueryTemplate.Buffer dell'oggetto FOBX associato sulla query con caratteri jolly passata.

Se il membro PostRequest della struttura RX_CONTEXT è TRUE in caso di restituzione da MRxQueryDirectory, RDBSS chiamerà RxFsdPostRequest passando la struttura RX_CONTEXT a una coda di lavoro per l'elaborazione da parte del processo di file system (FSP).

La routine MRxQueryEaInfo viene chiamata da RDBSS per richiedere che una mini-redirector di rete esegua una query sulle informazioni sull'attributo esteso su un oggetto file system.

RDBSS invia una chiamata a MRxQueryEaInfo in risposta alla ricezione di una richiesta di IRP_MJ_QUERY_EA .

Prima di chiamare MRxQueryEaInfo, RDBSS modifica i membri seguenti nella struttura RX_CONTEXT a cui punta il parametro RxContext :

Il membro Info.Buffer è impostato sul buffer utente dal pacchetto di richiesta di I/O. Questo buffer è già stato bloccato da SERVIZI Desktop remoto, se necessario.

Il membro Info.LengthRemaining è impostato su IrpSp-Parameters.QueryEa.Length>.

Il membro QueryEa.UserEaList è impostato su IrpSp-Parameters.QueryEa.EaList>.

Il membro QueryEa.UserEaListLength è impostato su IrpSp-Parameters.QueryEa.EaListLength>.

Il membro QueryEa.UserEaIndex è impostato su IrpSp-Parameters.QueryEa.EaIndex>.

Il membro QueryEa.RestartScan è impostato su diverso da zero se IrpSp-Flags> ha il bit di SL_RESTART_SCAN.

Il membro QueryEa.ReturnSingleEntry è impostato su diverso da zero se IrpSp-Flags> ha il bit SL_RETURN_SINGLE_ENTRY.

Il membro QueryEa.IndexSpecified è impostato su diverso da zero se IrpSp-Flags> ha il bit di SL_INDEX_SPECIFIED.

In caso di esito positivo, MRxQueryEaInfo deve impostare il membro Info.LengthRemaining della struttura RX_CONTEXT sulla lunghezza delle informazioni sull'attributo estese restituite e aggiornare anche il membro Fobx-OffsetOfNextEaToReturn>. Se la chiamata a MRxQueryEaInfo ha avuto esito positivo, RDBSS imposta il membro IoStatus.Information di IRP su IrpSp-Parameters.QueryEa.Length> meno il membro Info.LengthRemaining di RX_CONTEXT.

La routine MRxQueryFileInfo viene chiamata da RDBSS per richiedere che un mini-redirector di rete esegua le informazioni sui file di query su un oggetto file system.

RDBSS invia una chiamata a MRxQueryFileInfo in risposta alla ricezione di una richiesta di IRP_MJ_QUERY_INFORMATION .

Prima di chiamare MRxQueryFileInfo, RDBSS modifica i membri seguenti nella struttura RX_CONTEXT a cui punta il parametro RxContext :

Il membro Info.FileInformationClass è impostato su IrpSp-Parameters.QueryFile.FileInformationClass>, il valore FILE_INFORMATION_CLASS richiesto.

Il membro Info.Buffer è impostato sul buffer utente dal pacchetto di richiesta di I/O.

Il membro Info.LengthRemaining è impostato su IrpSp-Parameters.QueryFile.Length>.

Il membro QueryDirectory.FileIndex è impostato su IrpSp-Parameters.QueryDirectory.FileIndex>.

Il membro QueryDirectory.RestartScan viene impostato se IrpSp-Flags> ha il SL_RESTART_SCAN bit impostato.

Il membro QueryDirectory.ReturnSingleEntry viene impostato se IrpSp-Flags> ha SL_RETURN_SINGLE_ENTRY bit impostato.

Il membro QueryDirectory.InitialQuery viene impostato se Fobx-UnicodeQueryTemplate.Buffer> è NULL e Fobx-Flags> non ha il FOBX_FLAG_MATCH_ALL bit impostato.

In caso di esito positivo, il mini-reindirizzamento di rete deve impostare il membro Info.LengthRemaining della struttura RX_CONTEXT sul membro Info.Length meno la lunghezza delle informazioni sul file restituite. Se la chiamata a MRxQueryFileInfo ha avuto esito positivo, RDBSS imposta il membro IoStatus.Information di IRP su IrpSp-Parameters.QueryFile.Length> meno Il membro Info.LengthRemaining di RX_CONTEXT.

RDBSS non supporta le richieste con il bit SL_INDEX_SPECIFIED del set IrpSp-Flags>. Un mini-redirector di rete non riceverà chiamate a MRxQueryFileInfo con il bit SL_INDEX_SPECIFIED del set IrpSp-Flags>.

La routine MRxQueryQuotaInfo viene chiamata da RDBSS per richiedere che un mini-redirector di rete esegua le informazioni sulla quota di query su un oggetto file system.

RDBSS invia una chiamata a MRxQueryQuotaInfo in risposta alla ricezione di una richiesta di IRP_MJ_QUERY_QUOTA .

Prima di chiamare MRxQueryQuotaInfo, RDBSS modifica i membri seguenti nella struttura RX_CONTEXT a cui punta il parametro RxContext :

Il membro Info.Buffer è impostato sul buffer utente dal pacchetto di richiesta di I/O. Questo buffer è già stato bloccato da SERVIZI Desktop remoto, se necessario.

Il membro Info.LengthRemaining è impostato su IrpSp-Parameters.QueryQuota.Length>.

Il membro QueryQuota.SidList è impostato su IrpSp-Parameters.QueryQuota.SidList>.

Il membro QueryQuota.SidListLength è impostato su IrpSp-Parameters.QueryQuota.SidListLength>.

Il membro QueryQuota.StartSid è impostato su IrpSp-Parameters.QueryQuota.StartSid>.

Il membro QueryQuota.Length è impostato su IrpSp-Parameters.QueryQuota.Length>.

Il membro QueryQuota.RestartScan è impostato su diverso da zero se IrpSp-Flags> ha il SL_RESTART_SCAN bit impostato.

Il membro QueryQuota.ReturnSingleEntry è impostato su diverso da zero se IrpSp-Flags> ha il SL_RETURN_SINGLE_ENTRY bit impostato.

Il membro QueryQuota.IndexSpecified è impostato su diverso da zero se IrpSp-Flags> ha il SL_INDEX_SPECIFIED bit impostato.

In caso di esito positivo, il mini-reindirizzamento di rete deve impostare il membro Info.LengthRemaining della struttura RX_CONTEXT sulla lunghezza delle informazioni sulla quota da restituire. Se la chiamata a MRxQueryQuotaInfo ha avuto esito positivo, RDBSS imposta il membro IoStatus.Information di IRP sul membro Info.LengthRemaining di RX_CONTEXT.

Se la chiamata a MRxQueryQuotaInfo ha esito positivo, il membro InformationToReturn della struttura RX_CONTEXT deve essere impostato sulla lunghezza delle informazioni sulla quota restituite. Se la chiamata non riesce, il membro InformationToReturn di RX_CONTEXT deve essere impostato su zero.

La routine MRxQuerySdInfo viene chiamata da RDBSS per richiedere che un descrittore di sicurezza della query di rete mini-redirector informazioni sul descrittore di sicurezza di un file system.

RDBSS invia una chiamata a MRxQuerySdInfo in risposta alla ricezione di una richiesta di IRP_MJ_QUERY_SECURITY .

Prima di chiamare MRxQuerySdInfo, RDBSS modifica i membri seguenti nella struttura RX_CONTEXT a cui punta il parametro RxContext :

Il membro QuerySecurity.SecurityInformation è impostato su IrpSp-Parameters.QuerySecurity.SecurityInformation>.

Il membro Info.Buffer è impostato sul buffer utente dal pacchetto di richiesta di I/O. Questo buffer è già stato bloccato da SERVIZI Desktop remoto, se necessario.

Il membro Info.LengthRemaining è impostato su IrpSp-Parameters.QuerySecurity.Length>.

In caso di esito positivo, il mini-reindirizzamento di rete deve impostare il membro InformationToReturn della struttura RX_CONTEXT sulla lunghezza delle informazioni di sicurezza restituite. Se la chiamata a MRxQuerySdInfo ha avuto esito positivo, RDBSS imposta il membro IoStatus.Information di IRP sul membro InformationToReturn di RX_CONTEXT.

La routine MRxQueryVolumeInfo viene chiamata da RDBSS per richiedere che un mini-reindirizzamento di rete esegua le informazioni sul volume di query.

RDBSS invia una chiamata a MRxQueryVolumeInfo in uno dei casi seguenti:

Prima di chiamare MRxQueryVolumeInfo nel caso di una richiesta di IRP_MJ_QUERY_VOLUME_INFORMATION, RDBSS modifica i membri seguenti nella struttura RX_CONTEXT a cui punta il parametro RxContext :

Il membro Info.FsInformationClass è impostato su IrpSp-Parameters.QueryVolume.FsInformationClass>.

Il membro Info.Buffer è impostato su Irp-AssociatedIrp.SystemBuffer>.

Il membro Info.LengthRemaining è impostato su IrpSp-Parameters.QueryVolume.Length>.

Per una richiesta di IRP_MJ_QUERY_VOLUME_INFORMATION, se il membro PostRequest della struttura RX_CONTEXT è TRUE al ritorno da MRxQueryVolumeInfo, RDBSS chiamerà RxFsdPostRequest per inviare la richiesta. In questo caso, la richiesta di IRP_MJ_QUERY_VOLUME_INFORMATION passerà la struttura RX_CONTEXT alla coda RX_CONTEXT a una coda di lavoro per l'elaborazione da parte del processo di file system (FSP).

Se il membro PostRequest della struttura RX_CONTEXT è FALSE in caso di restituzione da MRxQueryVolumeInfo, il mini-redirector di rete deve impostare il membro Info.LengthRemaining della struttura RX_CONTEXT sulla lunghezza delle informazioni sul volume restituite. RDBSS imposta il membro IoStatus.Information di IRP su IrpSp-Parameters.QueryVolume.Length> meno il membro Info.LengthRemaining della struttura RX_CONTEXT.

Se la chiamata a MRxQueryVolumeInfo ha esito positivo, il mini-redirector di rete deve impostare il membro Info.LengthRemaining della struttura RX_CONTEXT sul membro Info.Length meno la lunghezza delle informazioni sul volume restituite. Se la chiamata a MRxQueryVolumeInfo ha avuto esito positivo, RDBSS imposta il membro IoStatus.Information di IRP su IrpSp-Parameters.QueryVolume.Length> meno il membro Info.LengthRemaining della struttura RX_CONTEXT.

Per una richiesta di IRP_MJ_QUERY_VOLUME_INFORMATION con il membro Info.FsInformationClass impostato su FileFsDeviceInformation, il mini-redirector di rete restituisce le informazioni seguenti nella struttura RX_CONTEXT a cui punta il parametro RxContext :

Il membro Info.Buffer contiene una struttura FILE_FS_DEVICE_INFORMATION

Il membro Info.Buffer.Characteristics è impostato sulle caratteristiche del volume, che deve includere FILE_REMOTE_DEVICE come una delle opzioni.

Il membro Info.Buffer.DeviceType è impostato sul membro DeviceType della struttura di NET_ROOT associata. Se il membro Type dell'NET_ROOT associato è NET_ROOT_PIPE, il membro Info.Buffer.DeviceType viene impostato su FILE_DEVICE_NAMED_PIPE.

Per una richiesta di IRP_MJ_QUERY_VOLUME_INFORMATION con il membro Info.FsInformationClass impostato su FileFsVolumeInformation, il mini-redirector di rete restituisce le informazioni seguenti nella struttura RX_CONTEXT a cui punta il parametro RxContext :

Il membro Info.Buffer contiene una struttura FILE_FS_VOLUME_INFORMATION.

Il membro Info.Buffer è impostato sul membro VolumeInfo della struttura di NET_ROOT associata.

Il membro Info.LengthRemaining è impostato sul membro VolumeInfoLength della struttura di NET_ROOT associata.

Una chiamata MRxQueryVolumeInfo da RDBSS per IRP_MJ_FILE_SYSTEM_CONTROL è una richiesta per le informazioni di rilevamento dei collegamenti. Prima di chiamare MRxQueryVolumeInfo per IRP_MJ_FILE_SYSTEM_CONTROL, RDBSS modifica i membri seguenti nella struttura RX_CONTEXT a cui punta il parametro RxContext :

Il membro Info.FsInformationClass è impostato su FileFsObjectIdInformation.

Il membro Info.Buffer è impostato su una struttura FILE_FS_OBJECTID_INFORMATION.

Il membro Info.LengthRemaining è impostato su sizeof(FILE_FS_OBJECTID_INFORMATION).

Per questo caso di una richiesta di IRP_MJ_FILE_SYSTEM_CONTROL, il membro AssociatedIrp.SystemBuffer dell'IRP punta a una struttura LINK_TRACKING_INFORMATION.

Se una richiesta viene avviata come IRP_MJ_FILE_SYSTEM_CONTROL a MRxQueryVolumeInfo con un valore restituito di STATUS_SUCCESS o STATUS_BUFFER_OVERFLOW, RDBSS copia il membro ObjectId della struttura FILE_FS_OBJECTID_INFORMATION passato al membro Info.Buffer della struttura RX_CONTEXT al membro NetRoot-DiskParameters.VolumeId> della struttura FCB e al membro AssociatedIrp.SystemBuffer.VolumeId dell'IRP. Se la chiamata a MRxQueryVolumeInfo ha avuto esito positivo, RDBSS imposta il membro Type della struttura LINK_TRACKING_INFORMATION. Se il membro NetRoot-Flags> della struttura FCB ha il NETROOT_FLAG_DFS_AWARE_NETROOT bit impostato, il membro Type viene impostato da RDBSS su DfsLinkTrackingInformation. Se il membro NetRoot-Flags> della struttura FCB non ha il bit NETROOT_FLAG_DFS_AWARE_NETROOT impostato, il membro Type viene impostato da RDBSS su NtfsLinkTrackingInformation. In caso di esito positivo, RDBSS imposta il membro IoStatus.Information dell'IRP sulle dimensioni di una struttura LINK_TRACKING_INFORMATION.

La routine MRxSetEaInfo viene chiamata da RDBSS per richiedere che un mini redirector di rete imposti informazioni sugli attributi estesi in un oggetto file system.

RDBSS invia una chiamata a MRxSetEaInfo in risposta alla ricezione di una richiesta di IRP_MJ_SET_EA .

Prima di chiamare MRxSetEaInfo, RDBSS modifica i membri seguenti nella struttura RX_CONTEXT a cui punta il parametro RxContext :

Il membro Info.Buffer è impostato sul buffer utente dal pacchetto di richiesta di I/O. Questo buffer è già stato bloccato da SERVIZI Desktop remoto, se necessario.

Il membro Info.LengthRemaining è impostato su IrpSp-Parameters.QueryEa.Length>.

La routine MRxSetFileInfo viene chiamata da RDBSS per richiedere che un mini-redirector di rete imposti le informazioni sui file in un oggetto file system.

RDBSS invia una chiamata a MRxSetFileInfo in risposta alla ricezione di una richiesta di IRP_MJ_SET_INFORMATION .

Prima di chiamare MRxSetFileInfo, RDBSS modifica i membri seguenti nella struttura RX_CONTEXT a cui punta il parametro RxContext :

Il membro Info.FileInformationClass è impostato su IrpSp-Parameters.SetFile.FileInformationClass>, il valore FILE_INFORMATION_CLASS specificato.

Il membro Info.Buffer è impostato su Irp-AssociatedIrp.SystemBuffer>.

Il membro Info.Length è impostato su IrpSp-Parameters.SetFile.Length>.

La routine MRxSetFileInfoAtCleanup viene chiamata da RDBSS per richiedere che un mini-redirector di rete imposti le informazioni sui file su un oggetto file system in fase di pulizia.

RDBSS genera una chiamata a MRxSetFileInfoAtCleanup durante la pulizia, quando l'ultimo handle di un oggetto file viene chiuso. Questa operazione è diversa dall'operazione di chiusura che viene richiamata quando viene eliminato l'ultimo riferimento a un oggetto file.

MRxSetFileInfoAtCleanup viene chiamato da RDBSS se i timestamp in un file o le dimensioni di un file sono stati modificati. Le chiamate a MRxSetFileInfoAtCleanup da RDBSS vengono effettuate separatamente per ognuna di queste modifiche. Se le dimensioni del file e i timestamp sono stati modificati, RDBSS effettua due chiamate a MRxSetFileInfoAtCleanup.

Prima di chiamare MRxSetFileInfoAtCleanup, RDBSS modifica i membri seguenti nella struttura RX_CONTEXT a cui punta il parametro RxContext se i timestamp in un file sono stati modificati:

Il membro Info.FileInformationClass è impostato su un valore FILE_INFORMATION_CLASS di FileBasicInformation.

Il membro Info.Buffer è impostato su una struttura FILE_BASIC_INFORMATION allocata nello stack.

Il membro Info.Length è impostato sulla dimensione di una struttura FILE_BASIC_INFORMATION.

Prima di chiamare MRxSetFileInfoAtCleanup, RDBSS modifica i membri seguenti nella struttura RX_CONTEXT a cui punta il parametro RxContext se le dimensioni di un file sono state modificate:

Il membro Info.FileInformationClass è impostato su un valore FILE_INFORMATION_CLASS di FileEndOfFileInformation.

Il membro Info.Buffer è impostato su una struttura FILE_END_OF_FILE_INFORMATION allocata nello stack.

Il membro Info.Length è impostato su sizeof(FILE_END_OF_FILE_INFORMATION).

RDBSS ignora il valore restituito da MRxSetFileInfoAtCleanup.

Un mini-redirector di rete può scegliere di non eseguire alcuna operazione in questa routine e restituire STATUS_SUCCESS. Tutte le modifiche apportate alle dimensioni o ai timestamp del file verranno gestite durante l'operazione di pulizia.

La routine MRxSetQuotaInfo viene chiamata da RDBSS per richiedere che un mini redirector di rete imposti le informazioni sulla quota in un oggetto file system.

RDBSS invia una chiamata a MRxSetQuotaInfo in risposta alla ricezione di una richiesta di IRP_MJ_SET_QUOTA .

Prima di chiamare MRxSetQuotaInfo, RDBSS modifica i membri seguenti nella struttura RX_CONTEXT a cui punta il parametro RxContext :

Il membro Info.Buffer è impostato sul buffer utente dal pacchetto di richiesta di I/O. Questo buffer è già stato bloccato da SERVIZI Desktop remoto, se necessario.

Il membro Info.LengthRemaining è impostato su IrpSp-Parameters.SetQuota.Length>.

La routine MRxSetSdInfo viene chiamata da RDBSS per richiedere che un mini-redirector di rete imposti le informazioni sul descrittore di sicurezza in un oggetto file system.

RDBSS invia una chiamata a MRxSetSdInfo in risposta alla ricezione di una richiesta di IRP_MJ_SET_SECURITY .

Prima di chiamare MRxSetSdInfo, RDBSS modifica i membri seguenti nella struttura RX_CONTEXT a cui punta il parametro RxContext :

Il membro SetSecurity.SecurityInformation è impostato su IrpSp-Parameters.SetSecurity.SecurityInformation>.

Il membro SetSecurity.SecurityDescriptor è impostato su IrpSp-Parameters.SetSecurity.SecurityDescriptor>.

La routine MRxSetVolumeInfo viene chiamata da RDBSS per richiedere che un mini redirector di rete imposti le informazioni sul volume.

RDBSS invia una chiamata a MRxSetVolumeInfo in risposta alla ricezione di una richiesta di IRP_MJ_SET_VOLUME_INFORMATION .

Prima di chiamare MRxSetVolumeInfo, RDBSS modifica i membri seguenti nella struttura RX_CONTEXT a cui punta il parametro RxContext :

Il membro Info.FsInformationClass è impostato su IrpSp-Parameters.SetVolume.FsInformationClass>.

Il membro Info.Buffer è impostato su Irp-AssociatedIrp.SystemBuffer>.

Il membro Info.LengthRemaining è impostato su IrpSp-Parameters.SetVolume.Length>.

La routine MRxShouldTryToCollapseThisOpen viene chiamata da RDBSS per richiedere che un mini redirector di rete indichi se RDBSS deve provare a comprimere una richiesta aperta in un oggetto file system esistente.

MRxShouldTryToCollapseThisOpen viene chiamato per determinare se una richiesta aperta non deve essere compressa.

Prima di chiamare MRxShouldTryToCollapseThisOpen, RDBSS modifica il membro seguente nella struttura RX_CONTEXT a cui punta il parametro RxContext :

Il membro pRelevantSrvOpen è impostato sul SRV_OPEN.

La chiamata a MRxShouldTryToCollapseThisOpen potrebbe essere una richiesta di notifica di modifica per una directory. Di conseguenza, il mini-reindirizzamento di rete potrebbe non consentire la compressione delle richieste aperte in modo che la notifica di modifica funzioni correttamente.

RDBSS non consente l'apertura della compressione se il membro Create.NtCreateParameters.CreateOptions della struttura RX_CONTEXT dispone dell'opzione FILE_OPEN_FOR_BACKUP_INTENT o del set di opzioni FILE_DELETE_ON_CLOSE.

La routine MRxTruncate viene chiamata da RDBSS per richiedere che un mini-redirector di rete tronca il contenuto di un oggetto file system.

MRxTruncate viene chiamato come parte delle operazioni di pulizia se vengono soddisfatte entrambe le condizioni seguenti:

  • L'oggetto file corrisponde a un file o una directory del disco

  • Questa è l'ultima chiamata di pulizia e l'oggetto file è stato contrassegnato per il troncamento.

L'oggetto file viene contrassegnato per il troncamento se il membro fcbstate della struttura FCB ha il FCB_STATE_TRUNCATE_ON_CLOSE bit impostato. RDBSS non inizializzerà la mappa della cache in un secondo momento.

Una chiamata a MRxTruncate verrà seguita da una chiamata a MRxCleanupFobx come parte dell'operazione di pulizia.

RDBSS ignora il valore restituito da MRxTruncate.

La routine MRxZeroExtend viene chiamata da RDBSS per richiedere che un mini redirector di rete tronca il contenuto di un oggetto file system.

MRxZeroExtend viene chiamato come parte delle operazioni di pulizia se l'oggetto file non è stato contrassegnato per l'eliminazione e l'oggetto file non è un file di paging. MRxZeroExtend viene chiamato per garantire che la parte tra la lunghezza dei dati valida e le dimensioni del file sia estesa a zero. Dopo aver chiamato MRxZeroExtend, RDBSS imposta il membro Header.ValidDataLength.QuadPart della struttura di una struttura FCB uguale al membro Header.FileSize.QuadPart della struttura FCB.

Una chiamata a MRxZeroExtend verrà seguita da una chiamata a MRxCleanupFobx come parte dell'operazione di pulizia.

RDBSS ignora il valore restituito da MRxZeroExtend.

La routine MRxCleanupFobx viene chiamata da RDBSS per richiedere al mini redirector di rete di chiudere un'estensione dell'oggetto del file system. RDBSS genera questa chiamata in risposta alla ricezione di una richiesta di IRP_MJ_CLEANUP su un oggetto file.

MRxCleanupFobx viene chiamato da RDBSS come parte delle operazioni di pulizia e chiusura su un oggetto file.

MRxCleanupFobx non può restituire un valore di STATUS_RETRY che indica che la chiamata deve essere ritentata. Se è necessario un ciclo di ripetizione dei tentativi, deve essere gestito internamente nella routine MRxCleanupFobx dal mini-redirector di rete.

Requisiti

Requisito Valore
Piattaforma di destinazione Desktop
Intestazione mrx.h (include Mrx.h)

Vedi anche

MRxAreFilesAliased

MRxCleanupFobx

MRxCollapseOpen

MRxCreate

MRxDeallocateForFobx

MRxDeallocateForFobx

MRxExtendForCache

MRxExtendForNonCache

MRxFlush

MRxForceClosed

MRxIsLockRealizable

MRxShouldTryToCollapseThisOpen

MRxTruncate

MRxZeroExtend

RxFinalizeNetFCB