Inscription du pilote et contrôle de démarrage/arrêt
Lorsque le système d’exploitation est démarré, Windows charge RDBSS et n’importe quel mini-redirecteur réseau en fonction des paramètres du Registre. Pour un pilote de mini-redirecteur réseau monolithique, lié statiquement à rdbsslib.lib, le pilote doit appeler la routine RxDriverEntry à partir de sa routine DriverEntry pour initialiser la copie de la bibliothèque RDBSSLIB liée au pilote réseau. Dans ce cas, la routine RxDriverEntry doit être appelée avant que d’autres routines RDBSS soient appelées et utilisées. Pour un pilote de mini-redirecteur réseau non monolithique (le redirecteur Microsoft SMB), le pilote de périphérique rdbss.sys est initialisé dans sa propre routine DriverEntry lors du chargement.
Un mini-redirecteur réseau s’inscrit auprès de RDBSS lorsque le pilote est chargé par le noyau et se désinscrit auprès de RDBSS lorsque le pilote est déchargé. Un mini-redirecteur réseau informe RDBSS qu’il a été chargé en appelant RxRegisterMinirdr, la routine d’inscription exportée à partir de RDBSS. Dans le cadre de ce processus d’inscription, le mini-redirecteur réseau transmet un paramètre à RxRegisterMinirdr qui est un pointeur vers une structure volumineuse, MINIRDR_DISPATCH. Cette structure contient des informations de configuration pour le mini-redirecteur réseau et une table de répartition des pointeurs vers les routines de rappel implémentées par le pilote du noyau du mini-redirecteur réseau. RDBSS appelle le pilote de mini-redirecteur réseau via cette liste de routines de rappel.
La routine RxRegisterMinirdr définit toutes les routines de distribution des pilotes du pilote de mini-redirecteur réseau pour qu’elles pointent vers la routine de distribution RDBSS de niveau supérieur, RxFsdDispatch. Un mini-redirecteur réseau peut remplacer ce comportement en enregistrant ses propres points d’entrée et en réécritant la répartition du pilote avec ses propres points d’entrée après le retour de l’appel à RxRegisterMinirdr ou en définissant un paramètre spécial lors de l’appel de RxRegisterMinirdr.
Le pilote de mini-redirecteur réseau ne démarre pas l’opération jusqu’à ce qu’il reçoive un appel à sa routine MRxStart , l’une des routines de rappel passées dans la structure MINIRDR_DISPATCH. La routine de rappel MrxStart doit être implémentée par le pilote de mini-redirecteur réseau s’il souhaite recevoir des routines de rappel pour les opérations, sauf si le mini-redirecteur réseau conserve ses propres points d’entrée de répartition du pilote. Dans le cas contraire, RDBSS autorise uniquement les paquets de demande d’E/S suivants au pilote jusqu’à ce que MrxStart retourne correctement :
- Les demandes IRP pour l’appareil créent et les opérations d’appareil où fileObject-FileName.Length> sur l’IRPSP est égal à zéro et l’objet FileObject-RelatedFileObject> a la valeur NULL.
Pour toute autre demande IRP, la routine de distribution RDBSS RxFsdDispatch retourne une status de STATUS_REDIRECTOR_NOT_STARTED.
La routine de distribution RDBSS échoue également toutes les demandes pour les paquets de demande d’E/S suivants :
IRP_MJ_CREATE_MAILSLOT
IRP_MJ_CREATE_NAMED_PIPE
La routine de rappel MrxStart implémentée par le mini-redirecteur réseau est appelée par RDBSS lorsque la routine RxStartMinirdr est appelée. La routine RDBSS RxStartMinirdr est généralement appelée à la suite d’une demande de code de contrôle de système de fichiers (FSCTL) ou de code de contrôle d’E/S (IOCTL) d’une application ou d’un service en mode utilisateur pour démarrer le mini-redirecteur réseau. L’appel à RxStartMinirdr ne peut pas être effectué à partir de la routine DriverEntry du mini-redirecteur réseau après un appel réussi à RxRegisterMinirdr, car une partie du traitement de début nécessite que l’initialisation du pilote soit terminée. Une fois l’appel RxStartMinirdr reçu, RDBSS termine le processus de démarrage en appelant la routine MrxStart du mini-redirecteur réseau. Si l’appel à MrxStart retourne la réussite, RDBSS définit l’état interne du mini-redirecteur dans RDBSS sur RDBSS_STARTED.
RDBSS exporte une routine, RxSetDomainForMailslotBroadcast, pour définir le domaine pour les diffusions de maillot. Cette routine est utilisée lors de l’inscription si le mini-redirecteur réseau prend en charge les maillots.
Une routine pratique, __RxFillAndInstallFastIoDispatch, exportée par RDBSS peut être utilisée pour copier tous les pointeurs de routine du pilote IRP_MJ_XXX pour gérer le traitement des demandes d’E/S vers les vecteurs de répartition d’E/S rapides comparables, mais cette routine ne fonctionne que pour les pilotes non monolithiques.
RDBSS exporte également des routines pour informer RDBSS que le mini-redirecteur réseau démarre ou s’arrête. Ces appels sont utilisés si un mini-redirecteur réseau inclut un service d’administration en mode utilisateur ou une application utilitaire qui démarre et arrête le redirecteur. Ce service ou cette application en mode utilisateur peut envoyer des requêtes FSCTL ou IOCTL personnalisées au pilote de mini-redirecteur réseau pour indiquer qu’il doit démarrer ou s’arrêter. Le redirecteur peut appeler les routines RxStartMinirdr ou RxStopMinirdr RDBSS pour avertir RDBSS de démarrer ou d’arrêter ce mini-redirecteur réseau.
Le tableau suivant répertorie les routines d’inscription et de contrôle de démarrage/arrêt des pilotes RDBSS.
Routine | Description |
---|---|
Cette routine est appelée par un pilote de mini-redirecteur réseau monolithique à partir de sa routine DriverEntry pour initialiser RDBSS. Pour les pilotes non monolithiques, cette routine d’initialisation équivaut à la routine DriverEntry du pilote de périphérique rbss.sys. |
|
Cette routine est appelée par un pilote de mini-redirecteur réseau pour inscrire le pilote auprès de RDBSS, ce qui ajoute les informations d’inscription à une table d’inscription interne. RDBSS génère également un objet d’appareil pour le mini-redirecteur réseau. |
|
Cette routine est appelée par un pilote de mini-redirecteur réseau pour définir le domaine utilisé pour les diffusions de maillots, si les mailslots sont pris en charge par le pilote. |
|
Cette routine démarre un mini-redirecteur réseau appelé à s’inscrire lui-même. RDBSS inscrit également le pilote de mini-redirecteur réseau en tant que fournisseur UNC auprès du MUP si le pilote indique la prise en charge des noms UNC. |
|
Cette routine arrête un pilote de mini-redirecteur réseau. Un pilote arrêté ne reçoit plus de nouvelles commandes à l’exception des demandes IOCTL ou FSCTL. |
|
Cette routine est appelée par un pilote de mini-redirecteur réseau pour désinscrire le pilote avec RDBSS et supprimer les informations d’inscription de la table d’inscription RDBSS interne. |
|
Cette routine est une fonction inline définie dans rxstruc.h qui est appelée par un pilote de mini-redirecteur réseau pour désinscrire le pilote auprès de RDBSS et supprimer les informations d’inscription de la table d’inscription RDBSS interne. La fonction inline RxUnregisterMinirdr appelle en interne RxpUnregisterMinirdr. |
|
Cette routine remplit un vecteur de répartition d’E/S rapide pour qu’il soit identique au vecteur d’E/S de répartition normal et l’installe dans l’objet pilote associé à l’objet d’appareil passé. |
La macro suivante est définie dans le fichier d’en-tête mrx.h qui appelle l’une de ces routines. Cette macro est normalement utilisée au lieu d’appeler directement la routine __RxFillAndInstallFastIoDispatch .
Macro | Description |
---|---|
RxFillAndInstallFastIoDispatch(__devobj, __fastiodisp) |
Cette macro appelle __RxFillAndInstallFastIoDispatchpour remplir un vecteur de répartition d’E/S rapide pour qu’il soit identique au vecteur d’E/S de répartition normal et l’installe dans l’objet pilote associé à l’objet d’appareil passé. |