Freigeben über


RxStartMinirdr-Funktion (mrx.h)

RxStartMinirdr- wird aufgerufen, um einen Netzwerk-Miniumleitungsmodul zu starten, der zuvor zum Registrieren bei RDBSS aufgerufen wurde. Im Rahmen RxStartMinirdrregistriert RDBSS den Netzwerkminiumleitungstreiber auch als UNC-Anbieter (Universal Naming Convention) beim Multiple UNC Provider (MUP), wenn der Treiber die Unterstützung für UNC-Namen angibt.

Syntax

NTSTATUS RxStartMinirdr(
  [in]  IN PRX_CONTEXT RxContext,
  [out] OUT PBOOLEAN   PostToFsp
);

Parameter

[in] RxContext

Ein Zeiger auf die RX_CONTEXT Struktur zum Abrufen des Geräteobjekts und bestimmen, ob es sich um einen Dateisystemprozess handelt.

[out] PostToFsp

Ein Zeiger auf einen Wahrheitswert, der auf TRUE festgelegt ist, wenn die Anforderung zur späteren Verarbeitung durch den Dateisystemprozess bereitgestellt werden muss.

Rückgabewert

RxStartMinirdr gibt STATUS_SUCCESS zurück, wenn die Startsequenz erfolgreich war oder einer der folgenden Fehlerwerte lautet:

Rückgabecode Beschreibung
STATUS_ACCESS_DENIED Fehler bei der Registrierung als UNC-Anbieter, da der Zugriff verweigert wurde.
STATUS_ACCESS_VIOLATION Die Anforderung, sich als UNC-Anbieter zu registrieren, ist mit einer Zugriffsverletzung fehlgeschlagen.
STATUS_INSUFFICIENT_RESOURCES Es gab nicht genügend Ressourcen, um diese Routine abzuschließen.
STATUS_PENDING Die Startsequenz für RDBSS- und Netzwerk-Miniumleitungen muss im Kontext des Systemprozesses und nicht im Anwendungsprozess des Benutzermodus abgeschlossen werden. Wenn der Aufruf von RxStartMinirdr von einem Benutzermodusprozess (z. B. einer Benutzermodus-Serviceanfrage) stammt, wird die Anforderung für die spätere Verarbeitung in RDBSS bereitgestellt und STATUS_PENDING zurückgegeben. Dieser Fehler kann auch zurückgegeben werden, wenn bestimmte interne RDBSS-Sperren nicht abgerufen werden können, ohne warten zu müssen. Der Aufruf wird später über einen Systemthread abgeschlossen.
STATUS_REDIRECTOR_STARTED Der Netzwerk-Miniumleitungsmodul wurde bereits gestartet.

Bemerkungen

Ein Netzwerk-Miniumleitungsmodul registriert sich bei RDBSS, wenn der Treiber vom Kernel geladen wird, und hebt die Registrierung mit RDBSS auf, wenn der Treiber entladen wird. Ein Netzwerk-Miniumleitungsmodul informiert RDBSS darüber, dass er durch Aufrufen RxRegisterMinirdrgeladen wurde, die Registrierungsroutine, die aus RDBSS exportiert wurde. Im Rahmen dieses Registrierungsvorgangs übergibt der Netzwerk-Miniumleitungsmodul einen Parameter an RxRegisterMinirdr, der ein Zeiger auf eine große Struktur ist, MINIRDR_DISPATCH, die Konfigurationsinformationen für den Netzwerkminiumleitungs-Umleitungsmodul und eine Tabelle mit Zeigern an Rückrufroutinen enthält, die vom Netzwerk-Miniumleitungstreiber implementiert werden. RDBSS verwendet die in dieser Struktur übergebenen Rückrufroutinen, um mit dem Netzwerk-Miniumleitungsmodul zu kommunizieren.

Der Netzwerk-Miniumleitungs-Umleitungsvorgang wird erst gestartet, wenn er einen Aufruf an seine MRxStart- Routine empfängt, eine 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 Netzwerkminiumleitungs-Umleitungsmodul behält seine eigenen Einstiegspunkte für die Treiberweiterleitung 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äteerstellungsvorgänge und Gerätevorgänge, bei denen der FileObject->FileName.Length-Parameter auf dem IRPSP null ist und der FileObject->RelatedFileObject Parameter NULL ist.

Für jede andere IRP-Anforderung gibt die RDBSS-Dispatchroutine RxFsdDispatch- den Status 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

Der Netzwerkminiumleitungs-MrxStart Routine wird von RDBSS aufgerufen, wenn die RxStartMinirdr Routine aufgerufen wird. Die RDBSS-RxStartMinirdr Routine wird in der Regel als Ergebnis einer FSCTL- oder IOCTL-Anforderung von einer Benutzermodusanwendung oder einem Dienst aufgerufen, um den Netzwerkminiumleitungsmodul zu starten. Der Aufruf von RxStartMinirdr kann nicht über die DriverEntry Routine des Netzwerkminiumleitungs nach einem erfolgreichen Aufruf von RxRegisterMinirdr erfolgen, da einige der Startverarbeitung erfordern, dass die Treiberinitialisierung abgeschlossen ist.

Wenn RDBSS eine FSCTL- oder IOCTL-Anforderung empfängt, die vom Benutzermodus an den Netzwerkminiumleitungstreiber gesendet wird, erstellt RDBSS eine RX_CONTEXT Struktur und übergibt diesen Aufruf an die MRxLowIOSubmit[LOWIO_OP_FSCTL] oder MRxLowIOSubmit[LOWIO_OP_IOCTL] Rückrufroutine, die in der MINIRDR_DISPATCH Struktur definiert ist. Die Implementierung dieser Rückrufroutine des Netzwerk-Miniumleitungs würde die Anforderung zum Starten und Aufrufen RxStartMinirdrerkennen. Dieser normale Prozess von Ereignissen ist unten ausführlicher aufgeführt:

  1. Eine Anwendung im Benutzermodus gibt eine private FSCTL- oder IOCTL-Anforderung aus, um den Mini-Redirector des Netzwerks zu starten.

  2. Der RDBSS-Kerneltreiber empfängt die FSCTL- oder IOCTL-Anforderung im Namen des Netzwerk-Miniumleitungsmoduls, da RDBSS die Einstiegspunkte des Treibers für den Miniumleitungstreiber ersetzt hat, um auf interne RDBSS-Routinen zu verweisen. Beachten Sie, dass dies davon ausgeht, dass der Netzwerkminiumleitungs-Umleitungsmodul den RX_REGISTERMINI_FLAG_DONT_INIT_DRIVER_DISPATCH im parameter Controls beim Aufrufen RxRegisterMinirdrnicht festgelegt hat. Diese Option, die an RxRegisterMinirdr übergeben wurde, wäre ungewöhnlich und weist darauf hin, dass rdBSS den Einstiegspunkt für die Treiberweiterleitung nicht ersetzen soll.

  3. RDBSS empfängt die FSCTL- oder IOCTL-Anforderung intern im Auftrag des Netzwerkumleitungsmoduls. Der RDBSS-Verteiler weist eine RX_CONTEXT Struktur zu und initialisiert sie. RDBSS ruft dann den Netzwerkminiumleitungs-MRxLowIOSubmit[LOW_OP_FSCTL] oder MRxLowIOSubmit[LOW_OP_IOCTL] Routine auf, die in der MINIRDR_DISPATCH-Struktur für diesen Netzwerk-Miniumleitungsmodul definiert ist und die initialisierte RX_CONTEXT Struktur als Parameter übergibt.

  4. Die Implementierung dieser Rückrufroutine im Netzwerkminiumleitung würde die private FSCTL- oder IOCTL-Anforderung erkennen, um RxStartMinirdrzu starten und aufzurufen, wobei die RX_CONTEXT Struktur übergeben wird, die sie von RDBSS empfangen hat. der RxContext-Parameter und die Adresse des PostToFSP- Mitglieds von RxContext als PostToFsp- Parameter.

  5. Da dieser Aufruf aus dem Benutzermodus initiiert wurde, würde RxStartMinirdr- STATUS_PENDING zurückgeben und PostToFsp- auf TRUE festlegen.

  6. Der Miniumleitungs-MRxLowIOSubmit[LOW_OP_FSCTL] oder MRxLowIOSubmit[LOW_OP_IOCTL] Routine würde diesen Rückgabewert empfangen und an den RDBSS-Dispatcher übergeben.

  7. Der RDBSS-Verteiler erhält den STATUS_PENDING Rückgabewert und würde PostToFsp- auf TRUE festlegen und dann eine Anforderung an einen Workerthread senden, um den Aufruf an den Netzwerkminiumleitungs-Umleitungsmodul erneut auszuführen.

Nach diesem Punkt gibt es zwei mögliche Ergebnisse, die darauf basieren, ob die FSCTL oder IOCTL als asynchroner oder synchroner Vorgang angefordert wurde.

Wenn dies eine asynchrone Anforderung wäre, würde Folgendes auftreten:

  • Der Benutzermodusanrufer erhält die STATUS_PENDING Antwort vom Anruf. Der bereitgestellte Workerthread würde schließlich RxStartMinirdr- aus einem Dateisystemthread aufrufen, und der Aufruf würde verarbeitet. Die RxStartMinirdr Routine versucht, den Netzwerkminiumleitungsmodul bei Bedarf als UNC-Anbieter zu registrieren. In Windows-Versionen vor Windows Vista versucht RDBSS dann, den Netzwerk-Miniumleitungsmodul als Dateisystem beim E/A-Manager zu registrieren. Wenn diese Aufrufe erfolgreich sind, ruft RxStartMinirdr die MrxStart vom Netzwerk-Miniumleitung implementierte Rückrufroutine auf. Der Rückgabewert von MrxStart würde schließlich an die Benutzermodusanwendung zurückgegeben, die den Aufrufsequenzprozess als asynchronen Vorgang initiiert hat.

Wenn dies eine synchrone Anforderung wäre, würde Folgendes auftreten:

  • Der Benutzermodusanrufer empfängt nicht die STATUS_PENDING Antwort, sondern würde gezwungen zu warten, bis der Vom geposteten Workerthread zurückgegebene Anruf zurückgegeben wurde. Der bereitgestellte Workerthread würde schließlich RxStartMinirdr- aus einem Dateisystemthread aufrufen, und der Aufruf würde verarbeitet. Die RxStartMinirdr Routine versucht, den Netzwerkminiumleitungsmodul bei Bedarf als UNC-Anbieter zu registrieren. In Windows-Versionen vor Windows Vista versucht RDBSS dann, den Netzwerk-Miniumleitungsmodul als Dateisystem beim E/A-Manager zu registrieren. Wenn diese Aufrufe erfolgreich sind, ruft RxStartMinirdr die MrxStart vom Netzwerk-Miniumleitung implementierte Rückrufroutine auf. Der Rückgabewert von MrxStart wird an die Benutzermodusanwendung zurückgegeben, die den Aufrufsequenzprozess initiiert hat.

Wenn ein Netzwerk-Miniumleitungsmodul die Unterstützung für UNC beim Registrieren bei RDBSS angibt (der parameter ControlsRxRegisterMinirdr), RxStartMinirdr versucht, den DeviceName Parameter des Netzwerk-Miniumleitungsmoduls als UNC-Anbieter bei MUP zu registrieren (RDBSS-Aufrufe FsRtlRegisterUncProvider im Namen des Netzwerk-Miniumleitungsmoduls).

Bei Versionen von Windows vor Windows Vista RxStartMinirdr das Dateisystem beim E/A-Manager registriert (RDBSS ruft IoRegisterFileSystem im Namen des Netzwerk-Miniumleitungsmoduls auf).

Wenn die Anrufe erfolgreich sind, ruft RxStartMinirdr die Miniumleitung des Netzwerks MrxStart Routine auf. Wenn MrxStart Erfolg zurückgibt, wird der interne Zustand des Miniumleitungsmoduls in RDBSS auf RDBSS_STARTED festgelegt. Das StartStopContext.Version Mitglied des Miniumleitungsgeräteobjekts wird ebenfalls erhöht.

Die Startsequenz für RDBSS und der Netzwerk-Miniumleitung muss im Kontext des Systemprozesses abgeschlossen werden, wenn ein asynchroner Vorgang angefordert wird. Wenn der Aufruf von RxStartMinirdr aus einem Benutzermodusprozess (z. B. einer Benutzermodusdienstanforderung) stammt, wird die Anforderung intern von RDBSS in eine Arbeitswarteschlange zur späteren Verarbeitung bereitgestellt und STATUS_PENDING zurückgegeben, und der PostToFsp Parameter wird auf TRUE festgelegt. Darüber hinaus wird STATUS_PENDING zurückgegeben, wenn bestimmte interne RDBSS-Sperren nicht abgerufen werden können, und PostToFsp- auf TRUE festgelegt ist. Wenn STATUS_PENDING zurückgegeben wird, wird RxStartMinirdr- innerhalb eines Systemprozesses erneut aufgerufen. Wenn die FSCTL- oder IOCTL-Anforderung, die den Aufruf an RxStartMinirdr für asynchronen Vorgang initiiert hat, festgelegt wurde, würde RDBSS STATUS_PENDING Die Anrufkette an die ursprüngliche FSCTL- oder IOCTL-Anforderung aus dem Benutzermodus zurückgeben. Wenn die FSCTL- oder IOCTL-Anforderung dagegen synchron ausgeführt wurde, würde der Aufruf auch für die spätere Ausführung in einen Arbeitsthread gepostet, der FSCTL- oder IOCTL-Aufruf würde jedoch erst wieder in den Benutzermodus zurückkehren, wenn RxStartMinirdr im Kontext des Dateisystemprozesses ausgeführt wurde. In diesem Fall würde der Aufrufer der FSCTL oder IOCTL niemals die STATUS_PENDING Fehlerrückgabe sehen. Das typischere Verhalten besteht darin, eine synchrone Anforderung für diese Start-/Stoppvorgänge zu initiieren, um den Anwendungscode für den Benutzermodus zu vereinfachen.

Bei einer abnormen Beendigung oder einem anderen Fehler versucht RxStartMinirdr, diese Vorgänge rückgängig zu machen, einschließlich der Deregistrierung des UNC-Anbieters bei MUP, aufheben der Registrierung des Dateisystems, aufheben der Registrierung des Dateisystems, freigeben des speichers zugewiesenen Speichers zum Speichern des Domänennamens, der von Maillot-Übertragungen verwendet werden soll, und das Aktualisieren interner RDBSS-Tabellen.

Anforderungen

Anforderung Wert
Zielplattform- Desktop
Header- mrx.h (einschließlich Mrx.h)
IRQL- <= APC_LEVEL

Siehe auch

, RxpUnregisterMinirdr

DriverEntry-

FsRtlRegisterUncProvider

IoRegisterFileSystem-

MRxLowIOSubmit[LOWIO_OP_FSCTL]

MRxLowIOSubmit[LOWIO_OP_IOCTL]

MRxStart-

RxFsdDispatch-

RxRegisterMinirdr-

RxSetDomainForMailslotBroadcast

RxStopMinirdr-

RxUnregisterMinirdr-

__RxFillAndInstallFastIoDispatch