Condividi tramite


Registrazione driver e controllo Start/Stop

Al momento dell'avvio del sistema operativo, Windows carica RDBSS e qualsiasi driver di mini-reindirizzamento di rete in base alle impostazioni nel Registro di sistema. Per un driver mini-redirector di rete monolitica, collegato staticamente con rdbsslib.lib, il driver deve chiamare la routine RxDriverEntry dalla routine DriverEntry per inizializzare la copia della libreria RDBSSLIB collegata al driver di rete. In questo caso, la routine RxDriverEntry deve essere chiamata prima che vengano chiamate e usate altre routine RDBSS. Per un driver mini-redirector di rete non monolitico (reindirizzamento Microsoft SMB), il driver di dispositivo rdbss.sys viene inizializzato nella propria routine DriverEntry quando viene caricato.

Un mini-reindirizzamento di rete registra con RDBSS quando il driver viene caricato dal kernel e annulla la registrazione con RDBSS quando il driver viene scaricato. Un mini-reindirizzamento di rete informa RDBSS che è stato caricato chiamando RxRegisterMinirdr, la routine di registrazione esportata da RDBSS. Nell'ambito di questo processo di registrazione, il mini-reindirizzamento di rete passa un parametro a RxRegisterMinirdr che è un puntatore a una struttura di grandi dimensioni, MINIRDR_DISPATCH. Questa struttura contiene informazioni di configurazione per il mini-reindirizzamento di rete e una tabella di invio di puntatori alle routine di callback implementate dal driver kernel mini-redirector di rete. RDBSS effettua chiamate al driver mini-redirector di rete tramite questo elenco di routine di callback.

La routine RxRegisterMinirdr imposta tutte le routine di invio del driver del driver del driver mini-redirector di rete per puntare alla routine di invio RDBSS di primo livello, RxFsdDispatch. Un mini-reindirizzamento di rete può eseguire l'override di questo comportamento salvando i propri punti di ingresso e riscrivendo l'invio del driver con i propri punti di ingresso dopo la chiamata a RxRegisterMinirdr restituisce o impostando un parametro speciale quando si chiama RxRegisterMinirdr.

Il driver mini-redirector di rete non avvia effettivamente l'operazione finché non riceve una chiamata alla routine MRxStart , una delle routine di callback passate nella struttura MINIRDR_DISPATCH. La routine di callback mrxStart deve essere implementata dal driver di mini-reindirizzamento di rete se desidera ricevere routine di callback per le operazioni, a meno che il mini-reindirizzamento di rete non mantenga i propri punti di ingresso di invio driver. In caso contrario, RDBSS consentirà solo i pacchetti di richieste di I/O seguenti tramite il driver finché MrxStart non restituisce correttamente:

  • Le richieste di IRP per il dispositivo creano e operazioni del dispositivo in cui FileObject-FileName.Length in IRPSP è zero e FileObject-RelatedFileObject>> è NULL.

Per qualsiasi altra richiesta IRP, la routine di invio RDBSS RxFsdDispatch restituirà uno stato di STATUS_REDIRECTOR_NOT_STARTED.

La routine di invio rdBSS avrà esito negativo anche per le richieste per i pacchetti di richieste di I/O seguenti:

  • IRP_MJ_CREATE_MAILSLOT

  • IRP_MJ_CREATE_NAMED_PIPE

La routine di callback MrxStart implementata dal mini-redirector di rete viene chiamata da RDBSS quando viene chiamata la routine RxStartMinirdr . La routine RDBSS RxStartMinirdr viene in genere chiamata come risultato di un codice di controllo del file system (FSCTL) o di codice di controllo I/O (IOCTL) da un'applicazione o un servizio in modalità utente per avviare il mini-reindirizzamento di rete. Non è possibile eseguire la chiamata a RxStartMinirdr dalla routine DriverEntry del mini-redirector di rete dopo una chiamata riuscita a RxRegisterMinirdrpoiché alcune delle operazioni iniziali richiedono che l'inizializzazione del driver venga completata. Una volta ricevuta la chiamata RxStartMinirdr , RDBSS completa il processo di avvio chiamando la routine MrxStart del mini-reindirizzamento di rete. Se la chiamata a MrxStart restituisce l'esito positivo, RDBSS imposta lo stato interno del mini-redirector in RDBSS su RDBSS_STARTED.

RDBSS esporta una routine, RxSetDomainForMailslotBroadcast, per impostare il dominio per le trasmissioni mailslot. Questa routine viene usata durante la registrazione se il mini-reindirizzamento di rete supporta i messaggi di posta elettronica.

Una routine di praticità, __RxFillAndInstallFastIoDispatch, esportata da RDBSS può essere usata per copiare tutti i puntatori di routine del driver IRP_MJ_XXX per gestire l'elaborazione delle richieste di I/O paragonabili ai vettori di invio di I/O paragonabili, ma questa routine funziona solo per i driver non monolitici.

RDBSS esporta anche routine per notificare a RDBSS che il mini-reindirizzamento di rete sta avviando o interrompendo. Queste chiamate vengono usate se un mini-reindirizzamento di rete include un servizio di amministrazione in modalità utente o un'applicazione di utilità che avvia e arresta il reindirizzamento. Questo servizio in modalità utente o un'applicazione può inviare richieste PERSONALIZZATE CON ESTENSIONE O IOCTL al driver mini-redirector di rete per indicare che deve avviare o arrestare. Il reindirizzamento può chiamare le routine RDBSS RxStartMinirdr o RxStopMinirdr per notificare a RDBSS di avviare o arrestare questo mini-reindirizzamento di rete.

La tabella seguente elenca la registrazione del driver RDBSS e le routine di controllo start/stop.

Routine Descrizione

RxDriverEntry

Questa routine viene chiamata da un driver mini-redirector di rete monolitica dalla routine DriverEntry per inizializzare RDBSS.

Per i driver non monolitici, questa routine di inizializzazione equivale alla routine DriverEntry del driver di rbss.sys dispositivo.

RxRegisterMinirdr

Questa routine viene chiamata da un driver di mini-reindirizzamento di rete per registrare il driver con RDBSS, che aggiunge le informazioni di registrazione a una tabella di registrazione interna. RDBSS compila anche un oggetto dispositivo per il mini-reindirizzamento di rete.

RxSetDomainForMailslotBroadcast

Questa routine viene chiamata da un driver di mini-reindirizzamento di rete per impostare il dominio usato per le trasmissioni mailslot, se i messaggi di posta elettronica sono supportati dal driver.

RxStartMinirdr

Questa routine avvia un mini-reindirizzamento di rete che ha chiamato per registrarsi. RDBSS registrerà anche il driver di mini-reindirizzamento di rete come provider UNC con MUP se il driver indica il supporto per i nomi UNC.

RxStopMinirdr

Questa routine arresta un driver mini-reindirizzamento di rete. Un driver arrestato non riceverà più nuovi comandi, ad eccezione delle richieste IOCTL o FSCTL.

RxpUnregisterMinirdr

Questa routine viene chiamata da un driver di mini-reindirizzamento di rete per registrare il driver con RDBSS e rimuovere le informazioni di registrazione dalla tabella di registrazione RDBSS interna.

RxUnregisterMinirdr

Questa routine è una funzione inline definita in rxstruc.h chiamata da un driver di mini-reindirizzamento di rete per deregistrare il driver con RDBSS e rimuovere le informazioni di registrazione dalla tabella di registrazione RDBSS interna. La funzione inline RxUnregisterMinirdr chiama internamente RxpUnregisterMinirdr.

__RxFillAndInstallFastIoDispatch

Questa routine riempie un vettore di invio di I/O rapido per essere identico al normale vettore di I/O di invio e lo installa nell'oggetto driver associato all'oggetto dispositivo passato.

La macro seguente è definita nel file di intestazione mrx.h che chiama una di queste routine. Questa macro viene normalmente usata anziché chiamare direttamente la routine di __RxFillAndInstallFastIoDispatch .

Macro Descrizione

RxFillAndInstallFastIoDispatch(__devobj, __fastiodisp)

Questa macro chiama __RxFillAndInstallFastIoDispatchper compilare un vettore di invio di I/O rapido per essere identico al normale vettore di I/O di invio e lo installa nell'oggetto driver associato all'oggetto dispositivo passato.