Función RxDriverEntry (rxprocs.h)
rxDriverEntry lo llama un controlador minidirector de red monolítica desde su rutina de DriverEntry para inicializar la biblioteca estática RDBSS.
En el caso de los controladores no monolíticos, esta rutina de inicialización es equivalente a la rutina de
Sintaxis
NTSTATUS RxDriverEntry(
[in] IN PDRIVER_OBJECT DriverObject,
[in] IN PUNICODE_STRING RegistryPath
);
Parámetros
[in] DriverObject
Puntero al objeto de controlador del controlador del controlador minidirector de red. Cada controlador recibe un puntero a su objeto de controlador en un parámetro a su rutina de DriverEntry. Este objeto de controlador se usará para crear el objeto de dispositivo para el controlador minidirector de red.
[in] RegistryPath
Puntero a una cadena Unicode que contiene la ruta de acceso del Registro a donde se almacenan los parámetros del controlador y otros datos de configuración. Esta ruta de acceso del Registro se encuentra normalmente en una entrada de servicios para el minidirector de red específico ubicado en la clave HKLM\System\CurrentControlSet\Services.
Valor devuelto
rxDriverEntry devuelve STATUS_SUCCESS correctos o uno de los siguientes valores de error en caso de error:
Código devuelto | Descripción |
---|---|
RXINIT_START | Se inició la inicialización de RDBSS, pero se produjo un error. Este código de error es una enumeración RDBSS interna con un valor de 5. |
Observaciones
Un controlador minidirector de red monolítica que está vinculado estáticamente con RDBSSLIB. LIB debe llamar a rxDriverEntry desde su rutina de DriverEntry para inicializar la copia de la biblioteca RDBSSLIB vinculada al controlador. un controlador minidirector de red monolítico debe llamar a RxDriverEntry antes de llamar a cualquier otra rutina rdBSS.
Después de llamar a RxDriverEntry para inicializar la copia de la biblioteca RDBSS cerca del inicio de su rutina de DriverEntry, el controlador minidirector de red normalmente llamaría a RxRegisterMinirdr más adelante en su rutina de DriverEntry para registrarse con RDBSS.
Si la llamada
rxDriverEntry también intentará abrir la clave del Registro HKLM\System\CurrentControlSet\Services\LanmanWorkStation\Parameters.
Si se puede abrir esta clave, se intentará leer algunos valores en esta clave en función de la versión del sistema operativo.
En Windows XP y versiones posteriores, RxDriverEntry intentará abrir la DisableByteRangeLockingOnReadOnlyFiles valor en la clave LanmanWorkStation\Parameter s.
Este valor es un DWORD que se trata como un valor booleano y almacenado como valor booleano para DisableByteRangeLockingOnReadOnlyFiles, una variable RDBSS para controlar el bloqueo de intervalo de bytes en archivos de solo lectura. Esta variable afecta a cómo RDBSS controla una nueva solicitud de SRV_OPEN por el minidirector de red en un FCB y decide si se puede contraer en una SRV_OPEN existente si los atributos son compatibles. Si un controlador minidirector de red desea cambiar este comportamiento, el controlador debe establecer el valor de DisableByteRangeLockingOnReadOnReadOnlyFiles en el valor adecuado después de que se haya devuelto la rutina de RxDriverEntry. The RDBSSLIB. La biblioteca estática lib expone DisableByteRangeLockingOnReadOnlyFiles como una variable externa.
En Windows 2000 y Windows XP,
Este valor es un DWORD que se trata como un número y se almacena como valor para una opción RDBSS interna en el número de páginas de PAGE_SIZE para lectura anticipada usada por el Administrador de caché. Cualquier valor del Registro mayor que 16 se trata como si este valor estuviera limitado a 16 (el valor máximo permitido actualmente). Esta opción interna se almacena como el número de páginas que el PAGE_SIZE en el procesador (un máximo de 0x10000 o 64K para un PAGE_SIZE 4K, por ejemplo). En Windows 2000 y Windows XP, RDBSS llama a CcSetReadAheadGranularity con esta opción para varias operaciones de creación, lectura y escritura. Si un controlador minidirector de red desea cambiar este comportamiento, el controlador debe establecer el valor de ReadAheadGranularity en el valor adecuado después de que se haya devuelto la rutina de RxDriverEntry. The RDBSSLIB. La biblioteca estática lib expone ReadAheadGranularity como una variable externa.
En los sistemas X86, 64K es la escritura más grande que emitirá el Administrador de memoria al emitir una escritura de paginación (los vaciados de la memoria caché se paginarán a través del Administrador de memoria). En el caso de los sistemas de archivos remotos, 64K no es la mejor opción. La mayoría de los datos que se pueden transferir en una única solicitud de red TDI serían inferiores a 64K debido a la sobrecarga de información del protocolo.
En Windows Server 2003, un valor del Registro para establecer ReadAheadGranularity no se expone y RDBSS tiene como valor predeterminado 32K (8 4K PAGE_SIZE páginas). Este es el mismo valor predeterminado adoptado para los sistemas de archivos locales.
RxDriverEntry recupera un puntero al proceso de kernel que se ejecuta llamando a PsGetCurrentProcess y almacena este valor en una estructura de datos RDBSS interna. Este proceso de kernel a veces se denomina proceso del sistema de archivos.
rxDriverEntry, a continuación, copia un puntero al RxFsdDispatch rutina en todas las entradas de la tabla de distribución del controlador. Por lo tanto, si un controlador minidirector de red monolítico necesita recibir IRP específicos para el procesamiento especial antes de la biblioteca RDBSS, se debe guardar una copia de su tabla de distribución de controladores original antes de llamar a RxDriverEntry y cualquier puntero rutinario restaurado después de la llamada a RxDriverEntry ha devuelto. Tenga en cuenta que RDBSS también copiará rxFsdDispatch en todas las entradas de la tabla de distribución de controladores cuando se llame a RxRegisterMinirdr a menos que se establezca una opción para evitar este comportamiento.
Para un controlador de minidirector de red no monolítico (el redirector de SMB de Microsoft), el controlador de dispositivo RDBSS.SYS se inicializa en su propia rutina de DriverEntry cuando se carga, lo que llama internamente a RxDriverEntry. En un controlador monolítico, la rutina
Requisitos
Requisito | Valor |
---|---|
de la plataforma de destino de |
Escritorio |
encabezado de |
rxprocs.h (incluya Rxprocs.h) |
irQL | <= APC_LEVEL |