Freigeben über


RxDriverEntry-Funktion (rxprocs.h)

RxDriverEntry wird von einem monolithischen Netzwerk-Miniumleitungstreiber aus seiner DriverEntry Routine aufgerufen, um die statische RDBSS-Bibliothek zu initialisieren.

Bei nicht-monolithischen Treibern entspricht diese Initialisierungsroutine der DriverEntry Routine des RDBSS.SYS Gerätetreibers.

Syntax

NTSTATUS RxDriverEntry(
  [in] IN PDRIVER_OBJECT  DriverObject,
  [in] IN PUNICODE_STRING RegistryPath
);

Parameter

[in] DriverObject

Ein Zeiger auf das Treiberobjekt des Netzwerk-Miniumleitungstreibers. Jeder Treiber empfängt einen Zeiger auf sein Treiberobjekt in einem Parameter auf seine DriverEntry Routine. Dieses Treiberobjekt wird verwendet, um das Geräteobjekt für den Netzwerkminiumleitungstreiber zu erstellen.

[in] RegistryPath

Ein Zeiger auf eine Unicode-Zeichenfolge, die den Registrierungspfad enthält, zu dem Treiberparameter und andere Konfigurationsdaten gespeichert werden. Dieser Registrierungspfad befindet sich normalerweise unter einem Diensteintrag für den spezifischen Netzwerkminiumleitungspfad unter dem HKLM\System\CurrentControlSet\Services Schlüssel.

Rückgabewert

RxDriverEntry- gibt STATUS_SUCCESS bei Erfolg oder einen der folgenden Fehlerwerte für fehler zurück:

Rückgabecode Beschreibung
RXINIT_START Die Initialisierung von RDBSS wurde gestartet, aber es ist ein Fehler aufgetreten. Dieser Fehlercode ist eine interne RDBSS-Enumeration mit dem Wert 5.

Bemerkungen

Ein monolithischer Netzwerk-Miniumleitungstreiber, der statisch mit RDBSSLIB verknüpft ist. LIB muss RxDriverEntry- aus der DriverEntry- Routine aufrufen, um die Kopie der mit dem Treiber verknüpften RDBSSLIB-Bibliothek zu initialisieren. RxDriverEntry- muss von einem monolithischen Netzwerk-Miniumleitungstreiber aufgerufen werden, bevor andere RDBSS-Routinen aufgerufen werden.

Nachdem sie RxDriverEntry aufgerufen haben, um die Kopie der RDBSS-Bibliothek am Anfang der DriverEntry-Routine zu initialisieren, ruft der Netzwerk-Miniumleitungstreiber in der Regel RxRegisterMinirdr später in seiner DriverEntry Routine auf, um sich bei RDBSS zu registrieren.

Wenn der RxDriverEntry Aufruf erfolgreich ist, werden interne globale RDBBS-Datenstrukturen initialisiert. Es werden verschiedene Spinlocks und Mutexes erstellt, um diese Datenstrukturen zu schützen. Eine dieser Datenstrukturen ist die RDBSS_DATA Struktur, die die oberste Struktur in der RDBSS-Speicherdatenstruktur ist. Der parameter DriverObject wird im DriverObject Member der RDBSS_DATA struktur gespeichert. RxDriverEntry initialisiert auch Ablaufverfolgung, Protokollierung und Debugging, wenn dies aktiviert ist (z. B. ein aktivierter Build).

RxDriverEntry- versucht auch, den Registrierungspfad zu öffnen, der als RegistryPath-Parameter übergeben wird, wobei dieses Objekt als Zeichenfolge ohne Groß-/Kleinschreibung behandelt wird. Wenn dieser Registrierungsschlüssel erfolgreich geöffnet werden kann, wird versucht, einen Parameter-Registrierungsschlüssel unter diesem Eintrag zu öffnen.

RxDriverEntry versucht auch, den Registrierungsschlüssel HKLM\System\CurrentControlSet\Services\LanmanWorkStation\Parameters zu öffnen.

Wenn dieser Schlüssel geöffnet werden kann, wird versucht, einige Werte unter diesem Schlüssel abhängig von der Version des Betriebssystems zu lesen.

Unter Windows XP und höher versucht RxDriverEntry-, die DisableByteRangeLockingOnlyFiles Wert unter dem LanmanWorkStation\Parameters Schlüssel zu öffnen.

Dieser Wert ist ein DWORD, das als boolescher Wert behandelt wird und als boolescher Wert für DisableByteRangeLockingOnReadOnlyFiles, eine RDBSS-Variable zum Behandeln von Bytebereichssperrung für schreibgeschützte Dateien, gespeichert wird. Diese Variable wirkt sich darauf aus, wie RDBSS eine neue SRV_OPEN Anforderung vom Netzwerk-Miniumleitungsmodul auf einem FCB verarbeitet und entscheidet, ob sie auf eine vorhandene SRV_OPEN reduziert werden kann, wenn die Attribute kompatibel sind. Wenn ein Netzwerk-Miniumleitungstreiber dieses Verhalten ändern möchte, sollte der Treiber den Wert von DisableByteRangeLockingOnReadOnlyFiles auf den entsprechenden Wert festlegen, nachdem die RxDriverEntry Routine zurückgegeben wurde. The RDBSSLIB. Die statische LIB-Bibliothek macht DisableByteRangeLockingOnReadOnlyFiles als externe Variable verfügbar.

Unter Windows 2000 und Windows XP versucht RxDriverEntry-, den Wert ReadAheadGranularity unter dem schlüssel LanmanWorkStation\Parameters zu öffnen.

Dieser Wert ist ein DWORD, das als Zahl behandelt wird und als Wert für eine interne RDBSS-Option auf der Anzahl der PAGE_SIZE Seiten für den vom Cache-Manager verwendeten Lesevorgang gespeichert wird. Jeder Registrierungswert, der größer als 16 ist, wird behandelt, als wäre dieser Wert auf 16 beschränkt (der maximal zulässige Wert). Diese interne Option wird so gespeichert, wie viele Seiten die PAGE_SIZE auf dem Prozessor (z. B. maximal 0x10000 oder 64 KB für eine 4K-PAGE_SIZE). Unter Windows 2000 und Windows XP ruft RDBSS CcSetReadAheadGranularity mit dieser Option für verschiedene Erstellungs-, Lese- und Schreibvorgänge auf. Wenn ein Netzwerk-Miniumleitungstreiber dieses Verhalten ändern möchte, sollte der Treiber den Wert von ReadAheadGranularity auf den entsprechenden Wert festlegen, nachdem die RxDriverEntry Routine zurückgegeben wurde. The RDBSSLIB. Die statische LIB-Bibliothek macht ReadAheadGranularity als externe Variable verfügbar.

Auf X86-Systemen ist 64K der größte Schreibzugriff, der vom Speicher-Manager ausgegeben wird, wenn ein Auslagerungsschreiben ausgegeben wird (Leerungen des Caches werden über den Speicher-Manager auslagerungen). Für Remotedateisysteme ist 64K nicht die beste Wahl. Die meisten Daten, die in einer einzigen TDI-Netzwerkanforderung übertragen werden können, wären aufgrund des Aufwands für Protokollinformationen weniger als 64 KB.

Unter Windows Server 2003 wird kein Registrierungswert zum Festlegen von ReadAheadGranularity verfügbar gemacht, und RDBSS wird standardmäßig auf 32K (8 4K PAGE_SIZE Seiten) festgelegt. Dies ist derselbe Standardwert, der für lokale Dateisysteme übernommen wird.

RxDriverEntry ruft einen Zeiger auf den Kernelprozess ab, der ausgeführt wird, indem PsGetCurrentProcess aufgerufen und dieser Wert in einer internen RDBSS-Datenstruktur gespeichert wird. Dieser Kernelprozess wird manchmal als Dateisystemprozess bezeichnet.

RxDriverEntry kopiert dann einen Zeiger auf die RxFsdDispatch Routine über alle Einträge in der Treiberverteilertabelle. Wenn also ein monolithischer Netzwerk-Miniumleitungstreiber bestimmte IRPs für die spezielle Verarbeitung vor der RDBSS-Bibliothek erhalten muss, sollte eine Kopie der ursprünglichen Treiberverteilertabelle gespeichert werden, bevor RxDriverEntry und alle Routinezeiger, die nach dem Aufruf von RxDriverEntry wiederhergestellt wurden, gespeichert werden. Beachten Sie, dass RDBSS auch RxFsdDispatch- in alle Treiberverteilertabelleneinträge kopiert, wenn RxRegisterMinirdr- aufgerufen wird, es sei denn, es wird eine Option festgelegt, um dieses Verhalten zu verhindern.

Für einen nicht-monolithischen Netzwerk-Miniumleitungstreiber (der Microsoft SMB-Umleitungstreiber) wird der RDBSS.SYS Gerätetreiber in seiner eigenen DriverEntry Routine initialisiert, wenn er geladen wird, die intern RxDriverEntryaufruft. Auf einem monolithischen Treiber wird die RxDriverEntry Routine aus der RDBSSLIB exportiert. LIB static library and must be called explicitly by the network mini-redirector.

Anforderungen

Anforderung Wert
Zielplattform- Desktop
Header- rxprocs.h (include Rxprocs.h)
IRQL- <= APC_LEVEL

Siehe auch

CcSetReadAheadGranularity

PsGetCurrentProcess-

RxRegisterMinirdr-

RxSetDomainForMailslotBroadcast

RxStartMinirdr-

RxStopMinirdr-

RxUnregisterMinirdr-

RxpUnregisterMinirdr-

__RxFillAndInstallFastIoDispatch