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 Netzwerk-Miniumleitungstreiber 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 Netzwerkminiumleitungsor unter dem Schlüssel HKLM\System\CurrentControlSet\Services .

Rückgabewert

RxDriverEntry gibt STATUS_SUCCESS bei Erfolg oder einen der folgenden Fehlerwerte bei 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.

Hinweise

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

Nachdem RxDriverEntry aufgerufen wurde, 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. Um diese Datenstrukturen zu schützen, werden verschiedene Spinlocks und Mutexes erstellt. Eine dieser Datenstrukturen ist die RDBSS_DATA Struktur, die die oberste Struktur in der RDBSS-Speicherdatenstruktur ist. Der DriverObject-Parameter wird im DriverObject-Member der RDBSS_DATA-Struktur gespeichert. RxDriverEntry initialisiert auch die Ablaufverfolgung, Protokollierung und Das Debuggen, wenn dies aktiviert ist (z. B. ein überprüfter Build).

RxDriverEntry versucht auch, den Registrierungspfad zu öffnen, der als RegistryPath-Parameter übergeben wird, und behandelt dieses Objekt als Zeichenfolge ohne Berücksichtigung der Groß-/Kleinschreibung. 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 je nach Version des Betriebssystems versucht, einige Werte unter diesem Schlüssel zu lesen.

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

Dieser Wert ist ein DWORD, der als boolescher Wert behandelt und als boolescher Wert für DisableByteRangeLockingOnReadOnlyFiles gespeichert wird, einer RDBSS-Variablen zum Behandeln von Bytebereichssperren für schreibgeschützte Dateien. Diese Variable wirkt sich darauf aus, wie RDBSS eine neue SRV_OPEN-Anforderung durch den Netzwerkminiumleitungsor für einen 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. Die 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 und als Wert für eine interne RDBSS-Option auf der Anzahl der PAGE_SIZE Seiten gespeichert wird, die vom Cache-Manager verwendet werden. Jeder Registrierungswert, der größer als 16 ist, wird so behandelt, als wäre dieser Wert auf 16 beschränkt (der derzeit zulässige Höchstwert). Diese interne Option wird als Die Anzahl der Seiten gespeichert, die die PAGE_SIZE auf dem Prozessor (z. B. maximal 0x10000 oder 64K für einen 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. Die RDBSSLIB. Die statische LIB-Bibliothek macht ReadAheadGranularity als externe Variable verfügbar.

Auf X86-Systemen ist 64K der größte Schreibvorgang, der vom Speicher-Manager ausgegeben wird, wenn ein Auslagerungsschreibvorgang ausgegeben wird (Leerungen des Caches sind Pagingschreibvorgänge über den Speicher-Manager). Für Remotedateisysteme ist 64K nicht die beste Wahl. Die meisten Daten, die in einer einzelnen TDI-Netzwerkanforderung übertragen werden können, wären aufgrund des Mehraufwands für Protokollinformationen weniger als 64.000.

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

RxDriverEntry ruft durch Aufrufen von PsGetCurrentProcess einen Zeiger auf den ausgeführten Kernelprozess ab und speichert diesen Wert in einer internen RDBSS-Datenstruktur. Dieser Kernelprozess wird manchmal als Dateisystemprozess bezeichnet.

RxDriverEntry kopiert dann einen Zeiger auf die RxFsdDispatch-Routine über alle Einträge in der Treiberverteilungstabelle. 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 Treiberverteilungstabelle gespeichert werden, bevor RxDriverEntry und alle Routinezeiger aufgerufen werden, die nach dem Aufruf von RxDriverEntry wiederhergestellt wurden. Beachten Sie, dass RDBSS auch RxFsdDispatch in alle Einträge der Treiberverteilungstabelle kopiert, wenn RxRegisterMinirdr aufgerufen wird, es sei denn, es ist 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 RxDriverEntry intern aufruft. Bei einem monolithischen Treiber wird die RxDriverEntry-Routine aus der RDBSSLIB exportiert. Statische LIB-Bibliothek und muss explizit vom Netzwerk-Mini-Redirector aufgerufen werden.

Anforderungen

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

Weitere Informationen

CcSetReadAheadGranularity

PsGetCurrentProcess

RxRegisterMinirdr

RxSetDomainForMailslotBroadcast

RxStartMinirdr

RxStopMinirdr

RxUnregisterMinirdr

RxpUnregisterMinirdr

__RxFillAndInstallFastIoDispatch