Partager via


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 est stocké dans le membre DriverObject de la structure RDBSS_DATA. RxDriverEntry initialise également le suivi, la journalisation et le débogage s’il est activé (une build vérifiée, par exemple).

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.

RxDriverEntry tentera également d’ouvrir la clé de Registre HKLM\System\CurrentControlSet\Services\LanmanWorkStation\Parameters.

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

Voir aussi

CcSetReadAheadGranularity

psGetCurrentProcess

RxRegisterMinirdr

RxSetDomainForMailslotBroadcast

RxStartMinirdr

RxStopMinirdr

RxUnregisterMinirdr

RxpUnregisterMinirdr

__RxFillAndInstallFastIoDispatch