RxDriverEntry, fonction (rxprocs.h)
RxDriverEntry est appelé par un pilote de mini-redirecteur réseau monolithique à partir de sa routine DriverEntry pour initialiser la bibliothèque statique RDBSS.
Pour les pilotes non monolithiques, cette routine d’initialisation est équivalente à la routine DriverEntry du pilote de périphérique RDBSS.SYS.
Syntaxe
NTSTATUS RxDriverEntry(
[in] IN PDRIVER_OBJECT DriverObject,
[in] IN PUNICODE_STRING RegistryPath
);
Paramètres
[in] DriverObject
Pointeur vers l’objet pilote du pilote de mini-redirecteur réseau. Chaque pilote reçoit un pointeur vers son objet driver dans un paramètre de sa routine DriverEntry . Cet objet de pilote sera utilisé pour créer l’objet de périphérique pour le pilote de mini-redirecteur réseau.
[in] RegistryPath
Pointeur vers une chaîne Unicode contenant le chemin du Registre vers l’emplacement où sont stockés les paramètres de pilote et d’autres données de configuration. Ce chemin d’accès au Registre se trouve normalement sous une entrée de services pour le mini-redirecteur réseau spécifique situé sous la clé HKLM\System\CurrentControlSet\Services .
Valeur retournée
RxDriverEntry retourne STATUS_SUCCESS en cas de réussite ou l’une des valeurs d’erreur suivantes en cas d’échec :
Code de retour | Description |
---|---|
RXINIT_START | L’initialisation de RDBSS a été démarrée, mais une erreur s’est produite. Ce code d’erreur est une énumération RDBSS interne avec une valeur de 5. |
Remarques
Un pilote de mini-redirecteur réseau monolithique lié statiquement à RDBSSLIB. LIB doit appeler RxDriverEntry à partir de sa routine DriverEntry pour initialiser la copie de la bibliothèque RDBSSLIB liée au pilote. RxDriverEntry doit être appelé par un pilote de mini-redirecteur réseau monolithique avant que d’autres routines RDBSS soient appelées.
Après avoir appelé RxDriverEntry pour initialiser la copie de la bibliothèque RDBSS près du début de sa routine DriverEntry , le pilote de mini-redirecteur réseau appelle généralement RxRegisterMinirdr plus tard dans sa routine DriverEntry pour s’inscrire auprès de RDBSS.
Si l’appel RxDriverEntry réussit, les structures de données RDBBS globales internes sont initialisées. Divers verrouillages tournants et mutex sont créés pour protéger ces structures de données. L’une de ces structures de données est la structure RDBSS_DATA, qui est la structure supérieure de la structure de données RDBSS-memory. Le paramètre DriverObject est stocké dans le membre DriverObject de la structure RDBSS_DATA. RxDriverEntry initialise également le suivi, la journalisation et le débogage si cette option est activée (une build cochée, par exemple).
RxDriverEntry tente également d’ouvrir le chemin d’accès du Registre passé en tant que paramètre RegistryPath , en traitant cet objet comme une chaîne qui ne respecte pas la casse. Si cette clé de Registre peut être ouverte avec succès, une tentative est effectuée pour ouvrir une clé de Registre Parameters sous cette entrée.
RxDriverEntry tente également d’ouvrir la clé de Registre HKLM\System\CurrentControlSet\Services\LanmanWorkStation\Parameters .
Si cette clé peut être ouverte, une tentative est effectuée pour lire certaines valeurs sous cette clé en fonction de la version du système d’exploitation.
Sur Windows XP et versions ultérieures, RxDriverEntry tente d’ouvrir la valeur DisableByteRangeLockingOnReadOnlyFiles sous la clé LanmanWorkStation\Parameters .
Cette valeur est une valeur DWORD qui est traitée comme une valeur booléenne et stockée en tant que valeur booléenne pour DisableByteRangeLockingOnReadOnlyFiles, une variable RDBSS pour gérer le verrouillage de plage d’octets sur les fichiers en lecture seule. Cette variable affecte la façon dont RDBSS gère une nouvelle demande de SRV_OPEN par le mini-redirecteur réseau sur un contrôleur fcb et détermine s’il peut être réduit sur un SRV_OPEN existant si les attributs sont compatibles. Si un pilote de mini-redirecteur réseau souhaite modifier ce comportement, le pilote doit définir la valeur de DisableByteRangeLockingOnReadOnlyFiles sur la valeur appropriée après le retour de la routine RxDriverEntry . The RDBSSLIB. La bibliothèque statique LIB expose DisableByteRangeLockingOnReadOnlyFiles en tant que variable externe.
Sur Windows 2000 et Windows XP, RxDriverEntry tente d’ouvrir la valeur ReadAheadGranularity sous la clé LanmanWorkStation\Parameters .
Cette valeur est un DWORD qui est traité comme un nombre et stocké en tant que valeur pour une option RDBSS interne sur le nombre de pages PAGE_SIZE pour la lecture anticipée utilisée par le Gestionnaire de cache. Toute valeur de Registre supérieure à 16 est traitée comme si cette valeur était limitée à 16 (valeur maximale actuellement autorisée). Cette option interne est stockée sous la forme du nombre de pages par PAGE_SIZE sur le processeur (un maximum de 0x10000 ou 64 Ko pour un PAGE_SIZE de 4 Ko, par exemple). Sur Windows 2000 et Windows XP, RDBSS appelle CcSetReadAheadGranularity avec cette option pour diverses opérations de création, de lecture et d’écriture. Si un pilote de mini-redirecteur réseau souhaite modifier ce comportement, le pilote doit définir la valeur de ReadAheadGranularity sur la valeur appropriée après le retour de la routine RxDriverEntry . The RDBSSLIB. La bibliothèque statique LIB expose ReadAheadGranularity en tant que variable externe.
Sur les systèmes X86, 64 Ko est la plus grande écriture qui sera émise par le Gestionnaire de mémoire lors de l’émission d’une écriture de pagination (les vidages du cache seront la pagination des écritures via le Gestionnaire de mémoire). Pour les systèmes de fichiers distants, 64 Ko n’est pas le meilleur choix. La plupart des données pouvant être transférées dans une seule requête réseau TDI seraient inférieures à 64 Ko en raison de la surcharge liée aux informations de protocole.
Sur Windows Server 2003, une valeur de Registre permettant de définir ReadAheadGranularity n’est pas exposée et RDBSSS est défini par défaut sur 32 Ko (8 4 Ko PAGE_SIZE pages). Il s’agit de la même valeur par défaut adoptée pour les systèmes de fichiers locaux.
RxDriverEntry récupère un pointeur vers le processus de noyau en cours d’exécution en appelant PsGetCurrentProcess et stocke cette valeur dans une structure de données RDBSS interne. Ce processus de noyau est parfois appelé processus de système de fichiers.
RxDriverEntry copie ensuite un pointeur vers la routine RxFsdDispatch sur toutes les entrées de la table de répartition des pilotes. Par conséquent, si un pilote de mini-redirecteur réseau monolithique doit recevoir des IRP spécifiques pour un traitement spécial avant la bibliothèque RDBSS, une copie de sa table de répartition de pilotes d’origine doit être enregistrée avant d’appeler RxDriverEntry et tous les pointeurs de routine restaurés après le retour de l’appel à RxDriverEntry . Notez que RDBSS copie également RxFsdDispatch dans toutes les entrées de table de distribution de pilotes lorsque RxRegisterMinirdr est appelé, sauf si une option est définie pour empêcher ce comportement.
Pour un pilote de mini-redirecteur réseau non monolithique (le redirecteur SMB Microsoft), le pilote de périphérique RDBSS.SYS est initialisé dans sa propre routine DriverEntry lorsqu’il est chargé, ce qui appelle RxDriverEntry en interne. Sur un pilote monolithique, la routine RxDriverEntry est exportée à partir de RDBSSLIB. Bibliothèque statique LIB et doivent être appelées explicitement par le mini-redirecteur réseau.
Configuration requise
Condition requise | Valeur |
---|---|
Plateforme cible | Desktop (Expérience utilisateur) |
En-tête | rxprocs.h (inclure Rxprocs.h) |
IRQL | <= APC_LEVEL |