Función RxDriverEntry (rxprocs.h)
RxDriverEntry lo llama un controlador minidirector de red monolítica desde su rutina 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 DriverEntry del controlador de dispositivo RDBSS.SYS.
Sintaxis
NTSTATUS RxDriverEntry(
[in] IN PDRIVER_OBJECT DriverObject,
[in] IN PUNICODE_STRING RegistryPath
);
Parámetros
[in] DriverObject
Puntero al objeto de controlador del controlador minidirector de red. Cada controlador recibe un puntero a su objeto de controlador en un parámetro de su rutina 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 si se ejecuta correctamente 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. |
Comentarios
Un controlador minidirector de red monolítico que está vinculado estáticamente con RDBSSLIB. LIB debe llamar a RxDriverEntry desde su rutina DriverEntry para inicializar la copia de la biblioteca RDBSSLIB vinculada al controlador. RxDriverEntry debe llamarse mediante un controlador minidirector de red monolítica 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 DriverEntry , el controlador minidirector de red normalmente llamaría a RxRegisterMinirdr más adelante en su rutina DriverEntry para registrarse con RDBSS.
Si la llamada a RxDriverEntry se realiza correctamente, se inicializan las estructuras de datos RDBBS globales internas. Se crean varios interbloqueos y exclusiones mutuas para proteger estas estructuras de datos. Una de estas estructuras de datos es la estructura RDBSS_DATA, que es la estructura superior de la estructura de datos de memoria RDBSS. El parámetro DriverObject se almacena en el miembro DriverObject de la estructura RDBSS_DATA. RxDriverEntry también inicializa el seguimiento, el registro y la depuración si está habilitado (por ejemplo, una compilación activada).
RxDriverEntry también intentará abrir la ruta de acceso del Registro pasada como parámetro RegistryPath , tratando este objeto como una cadena que no distingue mayúsculas de minúsculas. Si esta clave del Registro se puede abrir correctamente, se intentará abrir una clave del Registro parameters debajo de esta entrada.
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 el valor DisableByteRangeLockingOnReadOnlyFiles en la clave LanmanWorkStation\Parameters .
Este valor es un DWORD que se trata como booleano y se almacena como el valor booleano de 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 DisableByteRangeLockingOnReadOnlyFiles en el valor adecuado después de que se haya devuelto la rutina RxDriverEntry . The RDBSSLIB. La biblioteca estática LIB expone DisableByteRangeLockingOnReadOnlyFiles como una variable externa.
En Windows 2000 y Windows XP, RxDriverEntry intentará abrir el valor ReadAheadGranularity en la clave LanmanWorkStation\Parameters .
Este valor es un DWORD que se trata como un número y se almacena como el valor de 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 de 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 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é serán las escrituras de paginació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ía inferior a 64K debido a la sobrecarga de la información del protocolo.
En Windows Server 2003, un valor del Registro para establecer ReadAheadGranularity no está expuesto 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 mediante una llamada a PsGetCurrentProcess y almacena este valor en una estructura de datos RDBSS interna. A veces, este proceso de kernel se denomina proceso del sistema de archivos.
A continuación, RxDriverEntry copia un puntero a la rutina RxFsdDispatch en todas las entradas de la tabla de distribución del controlador. Por lo tanto, si un controlador minidirector de red monolítica necesita recibir IRP específicos para su 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 que se haya devuelto la llamada a RxDriverEntry . Tenga en cuenta que RDBSS también copiará RxFsdDispatch en todas las entradas de la tabla de distribución del controlador 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 DriverEntry cuando se carga que llama internamente a RxDriverEntry. En un controlador monolítico, la rutina RxDriverEntry se exporta desde RDBSSLIB. La biblioteca estática LIB y debe llamarse explícitamente por el minidirector de red.
Requisitos
Requisito | Value |
---|---|
Plataforma de destino | Escritorio |
Encabezado | rxprocs.h (incluya Rxprocs.h) |
IRQL | <= APC_LEVEL |