Treiberregistrierung und Start-/Stoppsteuerung
Wenn das Betriebssystem gestartet wird, lädt Windows RDBSS und alle Netzwerk-Miniumleitungstreiber basierend auf einstellungen in der Registrierung. Für einen monolithischen Netzwerkminiumleitungstreiber, der statisch mit rdbsslib.lib verknüpft ist, muss der Treiber die RxDriverEntry-Routine aus seiner DriverEntry-Routine aufrufen, um die Kopie der RDBSSLIB-Bibliothek zu initialisieren, die mit dem Netzwerktreiber verknüpft ist. In diesem Fall muss die RxDriverEntry-Routine aufgerufen werden, bevor andere RDBSS-Routinen aufgerufen und verwendet werden. Bei einem nicht monolithischen Netzwerk-Miniumleitungstreiber (microsoft SMB-Redirector) wird der rdbss.sys Gerätetreiber in seiner eigenen DriverEntry-Routine initialisiert, wenn er geladen wird.
Ein Netzwerkminiumleitungsor registriert sich bei RDBSS, wenn der Treiber vom Kernel geladen wird, und hebt die Registrierung bei RDBSS auf, wenn der Treiber entladen wird. Ein Netzwerkminiumleitungsor informiert RDBSS über das Laden, indem er RxRegisterMinirdr aufruft, die aus RDBSS exportierte Registrierungsroutine. Im Rahmen dieses Registrierungsvorgangs übergibt der Netzwerkmini-Redirector einen Parameter an RxRegisterMinirdr , der ein Zeiger auf eine große Struktur ist, MINIRDR_DISPATCH. Diese Struktur enthält Konfigurationsinformationen für den Netzwerkminiumleitungsor und eine Verteilungstabelle mit Zeigern auf Rückrufroutinen, die vom Kerneltreiber des Netzwerk-Mini-Redirectors implementiert werden. RDBSS führt Über diese Liste mit Rückrufroutinen Aufrufe an den Netzwerk-Miniumleitungstreiber aus.
Die RxRegisterMinirdr-Routine legt alle Treiber-Dispatchroutinen des Netzwerk-Miniumleitungstreibers so fest, dass sie auf die RDBSS-Dispatchroutine der obersten Ebene, RxFsdDispatch, verweisen. Ein Netzwerkminiumleitungsor kann dieses Verhalten überschreiben, indem er seine eigenen Einstiegspunkte speichert und den Treiberversand mit eigenen Einstiegspunkten neu schreibt, nachdem der Aufruf von RxRegisterMinirdr zurückgegeben wurde, oder indem er beim Aufrufen von RxRegisterMinirdr einen speziellen Parameter festlegt.
Der Netzwerk-Miniumleitungstreiber startet den Betrieb erst dann, wenn er einen Aufruf seiner MRxStart-Routine empfängt, einer der Rückrufroutinen, die in der MINIRDR_DISPATCH-Struktur übergeben werden. Die MrxStart-Rückrufroutine muss vom Netzwerk-Miniumleitungstreiber implementiert werden, wenn er Rückrufroutinen für Vorgänge empfangen möchte, es sei denn, der Netzwerkminiumleitungsor behält seine eigenen Einstiegspunkte für die Treiberausgabe bei. Andernfalls lässt RDBSS nur die folgenden E/A-Anforderungspakete an den Treiber zu, bis MrxStart erfolgreich zurückgegeben wird:
- IRP-Anforderungen für Geräte werden erstellt und Gerätevorgänge erstellt, bei denen fileObject-FileName.Length> auf dem IRPSP null und fileObject-RelatedFileObject>NULL ist.
Für jede andere IRP-Anforderung gibt die RDBSS-Dispatchroutine RxFsdDispatch eine status von STATUS_REDIRECTOR_NOT_STARTED zurück.
Die RDBSS-Dispatchroutine schlägt auch alle Anforderungen für die folgenden E/A-Anforderungspakete fehl:
IRP_MJ_CREATE_MAILSLOT
IRP_MJ_CREATE_NAMED_PIPE
Die vom Netzwerk-Miniumleitung implementierte MrxStart-Rückrufroutine wird von RDBSS aufgerufen, wenn die RxStartMinirdr-Routine aufgerufen wird. Die RDBSS RxStartMinirdr-Routine wird in der Regel als Ergebnis einer FSCTL- (Dateisystemsteuerungscode) oder IOCTL-Anforderung (IOCTL) von einer Benutzermodusanwendung oder eines Diensts aufgerufen, um den Netzwerkminiumleitungsor zu starten. Der Aufruf von RxStartMinirdr kann nach einem erfolgreichen Aufruf von RxRegisterMinirdrnicht aus der DriverEntry-Routine des Netzwerkminirdors erfolgen, da für einen Teil der Startverarbeitung die Initialisierung des Treibers abgeschlossen sein muss. Sobald der RxStartMinirdr-Aufruf empfangen wurde, schließt RDBSS den Startvorgang ab, indem die MrxStart-Routine des Netzwerkmini-Redirectors aufgerufen wird. Wenn der Aufruf von MrxStart erfolgreich ist, legt RDBSS den internen Zustand der Miniumleitung in RDBSS auf RDBSS_STARTED fest.
RDBSS exportiert eine Routine, RxSetDomainForMailslotBroadcast, um die Domäne für Mailslot-Übertragungen festzulegen. Diese Routine wird während der Registrierung verwendet, wenn der Netzwerk-Mini-Redirector mailslots unterstützt.
Eine von RDBSS exportierte Komfortroutine __RxFillAndInstallFastIoDispatch kann verwendet werden, um alle IRP_MJ_XXX Treiberroutinenzeiger für die Verarbeitung von E/A-Anforderungen in die vergleichbaren schnellen E/A-Versandvektoren zu kopieren. Diese Routine funktioniert jedoch nur für nicht monolithische Treiber.
RDBSS exportiert auch Routinen, um RDBSS darüber zu informieren, dass der Netzwerkminiumleitungsor gestartet oder beendet wird. Diese Aufrufe werden verwendet, wenn eine Netzwerkminiumleitung einen Benutzermodusverwaltungsdienst oder eine Hilfsprogrammanwendung enthält, die den Umleitungsor startet und beendet. Dieser Benutzermodusdienst oder diese Anwendung kann benutzerdefinierte FSCTL- oder IOCTL-Anforderungen an den Netzwerk-Miniumleitungstreiber senden, um anzugeben, dass er gestartet oder beendet werden soll. Der Redirector kann die RDBSS-RxStartMinirdr - oder RxStopMinirdr-Routinen aufrufen, um RDBSS zu benachrichtigen, diesen Netzwerk-Miniumleitungsor zu starten oder zu beenden.
In der folgenden Tabelle sind die RDBSS-Treiberregistrierungs- und Start-/Stopp-Steuerungsroutinen aufgeführt.
-Routine zurückgegebener Wert | Beschreibung |
---|---|
Diese Routine wird von einem monolithischen Netzwerk-Miniumleitungstreiber aus seiner DriverEntry-Routine aufgerufen, um RDBSS zu initialisieren. Bei nicht monolithischen Treibern entspricht diese Initialisierungsroutine der DriverEntry-Routine des rbss.sys Gerätetreibers. |
|
Diese Routine wird von einem Netzwerk-Miniumleitungstreiber aufgerufen, um den Treiber bei RDBSS zu registrieren, wodurch die Registrierungsinformationen zu einer internen Registrierungstabelle hinzugefügt werden. RDBSS erstellt auch ein Geräteobjekt für den Netzwerkminiumleitungsor. |
|
Diese Routine wird von einem Netzwerk-Mini-Redirector-Treiber aufgerufen, um die Domäne festzulegen, die für Mailslot-Übertragungen verwendet wird, wenn mailslots vom Treiber unterstützt werden. |
|
Diese Routine startet einen Netzwerkminiumleitungsor, der aufgerufen hat, um sich selbst zu registrieren. RDBSS registriert auch den Netzwerk-Miniumleitungstreiber als UNC-Anbieter beim MUP, wenn der Treiber die Unterstützung für UNC-Namen angibt. |
|
Mit dieser Routine wird ein Netzwerk-Miniumleitungstreiber beendet. Ein angehaltener Treiber empfängt keine neuen Befehle mehr mit Ausnahme von IOCTL- oder FSCTL-Anforderungen. |
|
Diese Routine wird von einem Netzwerk-Miniumleitungstreiber aufgerufen, um die Registrierung des Treibers bei RDBSS zu aufheben und die Registrierungsinformationen aus der internen RDBSS-Registrierungstabelle zu entfernen. |
|
Diese Routine ist eine in rxstruc.h definierte Inlinefunktion, die von einem Netzwerk-Miniumleitungstreiber aufgerufen wird, um die Registrierung des Treibers bei RDBSS zu aufheben und die Registrierungsinformationen aus der internen RDBSS-Registrierungstabelle zu entfernen. Die RxUnregisterMinirdr-Inlinefunktion ruft intern RxpUnregisterMinirdr auf. |
|
Diese Routine füllt einen schnellen E/A-Versandvektor aus, der mit dem normalen E/A-Vektor identisch ist, und installiert ihn in das Treiberobjekt, das dem übergebenen Geräteobjekt zugeordnet ist. |
Das folgende Makro ist in der Mrx.h-Headerdatei definiert, die eine dieser Routinen aufruft. Dieses Makro wird normalerweise verwendet, anstatt die __RxFillAndInstallFastIoDispatch Routine direkt aufzurufen.
Makro | Beschreibung |
---|---|
RxFillAndInstallFastIoDispatch(__devobj, __fastiodisp) |
Dieses Makro ruft __RxFillAndInstallFastIoDispatchauf, um einen schnellen E/A-Verteilungsvektor auszufüllen, der mit dem normalen E/A-Vektor identisch ist, und installiert ihn in das Treiberobjekt, das dem übergebenen Geräteobjekt zugeordnet ist. |