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 équivaut à 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 du pilote de mini-redirecteur réseau. Chaque pilote reçoit un pointeur vers son objet pilote dans un paramètre vers sa routine DriverEntry. Cet objet de pilote sera utilisé pour créer l’objet d’appareil pour le pilote de mini-redirecteur réseau.
[in] RegistryPath
Pointeur vers une chaîne Unicode contenant le chemin d’accès au Registre vers l’emplacement où les paramètres du pilote et d’autres données de configuration sont stockés. Ce chemin de Registre se trouve normalement sous une entrée de services pour le mini-redirecteur réseau spécifique situé sous la HKLM\System\CurrentControlSet\Services clé.
Valeur de retour
RxDriverEntry retourne STATUS_SUCCESS sur la réussite ou l’une des valeurs d’erreur suivantes en cas d’échec :
Retourner le code | 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 la valeur 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ée par un pilote de mini-redirecteur réseau monolithique avant d’appeler d’autres routines RDBSS.
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 loin 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. Différents verrous 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
RxDriverEntry tente également d’ouvrir le chemin d’accès du Registre passé en tant que paramètre RegistryPath, traitant cet objet comme une chaîne non sensible à la casse. Si cette clé de Registre peut être ouverte avec succès, une tentative sera effectuée pour ouvrir une clé de Registre Parameters sous cette entrée.
Si cette clé peut être ouverte, une tentative sera 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 DisableByteRangeLockingOnReadOnlyFiles valeur sous la clé LanmanWorkStation\Parameters.
Cette valeur est une DWORD qui est traitée comme une valeur booléenne et stockée comme valeur booléenne pour DisableByteRangeLockingOnReadOnlyFiles, variable RDBSS pour la gestion du verrouillage de plage d’octets sur les fichiers en lecture seule. Cette variable affecte la façon dont RDBSS gère une nouvelle requête de SRV_OPEN par le mini-redirecteur réseau sur un 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é comme la valeur d’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 (la valeur maximale actuellement autorisée). Cette option interne est stockée en tant que nombre de pages lorsque le PAGE_SIZE sur le processeur (un maximum de 0x10000 ou 64 Ko pour un PAGE_SIZE de 4K, 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 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, 64K 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 les écritures de pagination via le Gestionnaire de mémoire). Pour les systèmes de fichiers distants, 64K n’est pas le meilleur choix. La plupart des données qui peuvent être transférées dans une seule requête de réseau TDI seraient inférieures à 64 Ko en raison d’une surcharge pour les informations de protocole.
Sur Windows Server 2003, une valeur de Registre pour définir ReadAheadGranularity n’est pas exposée et rdBSS a la valeur par défaut 32 Ko (8 4 000 pages PAGE_SIZE). 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 du pilote. Par conséquent, si un pilote de mini-redirecteur réseau monolithique doit recevoir des IRPs spécifiques pour un traitement spécial avant la bibliothèque RDBSS, une copie de sa table de distribution de pilotes d’origine doit être enregistrée avant d’appeler RxDriverEntry et tous les pointeurs de routine restaurés après l’appel à RxDriverEntry a retourné. Notez que RDBSS copie également RxFsdDispatch dans toutes les entrées de table de répartition du pilote lorsque RxRegisterMinirdr est appelée, sauf si une option est définie pour empêcher ce comportement.
Pour un pilote de mini-redirecteur réseau non monolithique (redirecteur Microsoft SMB), le pilote de périphérique RDBSS.SYS est initialisé dans sa propre routine DriverEntry lors du chargement qui appelle en interne RxDriverEntry. Sur un pilote monolithique, la routine RxDriverEntry est exportée à partir de RDBSSLIB. Bibliothèque statique LIB et doit être appelée explicitement par le mini-redirecteur réseau.
Exigences
Exigence | Valeur |
---|---|
plateforme cible | Bureau |
d’en-tête | rxprocs.h (include Rxprocs.h) |
IRQL | <= APC_LEVEL |