Compartir a través de


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 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 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 es correcta, 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 de 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 de 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 que se pasa 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 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, 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 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 RxDriverEntry se exporta desde RDBSSLIB. La biblioteca estática LIB debe llamarse explícitamente por el minidirector de red.

Requisitos

Requisito Valor
de la plataforma de destino de Escritorio
encabezado de rxprocs.h (incluya Rxprocs.h)
irQL <= APC_LEVEL

Consulte también

ccSetReadAheadGranularity

psGetCurrentProcess

RxRegisterMinirdr

rxSetDomainForMailslotBroadcast

RxStartMinirdr

rxStopMinirdr

rxUnregisterMinirdr

rxpUnregisterMinirdr

__RxFillAndInstallFastIoDispatch