Função RxDriverEntry (rxprocs.h)

RxDriverEntry é chamado por um driver de minidiretório de rede monolítico de sua rotina DriverEntry para inicializar a biblioteca estática do RDBSS.

Para drivers não monolíticos, essa rotina de inicialização é equivalente à rotina DriverEntry do driver de dispositivo RDBSS.SYS.

Sintaxe

NTSTATUS RxDriverEntry(
  [in] IN PDRIVER_OBJECT  DriverObject,
  [in] IN PUNICODE_STRING RegistryPath
);

Parâmetros

[in] DriverObject

Um ponteiro para o objeto driver do driver de minidiretório de rede. Cada driver recebe um ponteiro para seu objeto driver em um parâmetro para sua rotina DriverEntry . Esse objeto de driver será usado para criar o objeto de dispositivo para o driver de minidiretório de rede.

[in] RegistryPath

Um ponteiro para uma cadeia de caracteres Unicode que contém o caminho do Registro para onde os parâmetros de driver e outros dados de configuração são armazenados. Esse caminho do Registro normalmente está localizado em uma entrada de serviços para o minidiretório de rede específico localizado sob a chave HKLM\System\CurrentControlSet\Services .

Retornar valor

RxDriverEntry retorna STATUS_SUCCESS com êxito ou um dos seguintes valores de erro em caso de falha:

Código de retorno Descrição
RXINIT_START A inicialização do RDBSS foi iniciada, mas ocorreu um erro. Esse código de erro é uma enumeração RDBSS interna com um valor de 5.

Comentários

Um driver de minidiretório de rede monolítico que está vinculado estaticamente ao RDBSSLIB. O LIB deve chamar RxDriverEntry de sua rotina driverEntry para inicializar a cópia da biblioteca RDBSSLIB vinculada ao driver. RxDriverEntry deve ser chamado por um driver de minidiretório de rede monolítico antes que qualquer outra rotina rdbss seja chamada.

Depois de chamar rxDriverEntry para inicializar a cópia da biblioteca RDBSS perto do início de sua rotina driverEntry , o driver de minidiretório de rede normalmente chamaria RxRegisterMinirdr mais tarde em sua rotina DriverEntry para se registrar no RDBSS.

Se a chamada RxDriverEntry for bem-sucedida, as estruturas de dados RDBBS globais internas serão inicializadas. Vários spinlocks e mutexes são criados para proteger essas estruturas de dados. Uma dessas estruturas de dados é a estrutura RDBSS_DATA que é a estrutura superior na estrutura de dados rdbss-memory. O parâmetro DriverObject é armazenado no membro DriverObject da estrutura RDBSS_DATA. O RxDriverEntry também inicializa o rastreamento, o registro em log e a depuração se isso estiver habilitado (um build verificado, por exemplo).

RxDriverEntry também tentará abrir o caminho do Registro passado como o parâmetro RegistryPath , tratando esse objeto como uma cadeia de caracteres que não diferencia maiúsculas de minúsculas. Se essa chave do Registro puder ser aberta com êxito, será feita uma tentativa de abrir uma chave do Registro de Parâmetros abaixo dessa entrada.

RxDriverEntry também tentará abrir a chave do registro HKLM\System\CurrentControlSet\Services\LanmanWorkStation\Parameters .

Se essa chave puder ser aberta, será feita uma tentativa de ler alguns valores sob essa chave, dependendo da versão do sistema operacional.

No Windows XP e posterior, RxDriverEntry tentará abrir o valor DisableByteRangeLockingOnReadOnlyFiles sob a chave LanmanWorkStation\Parameters .

Esse valor é um DWORD que é tratado como um booliano e armazenado como o valor booliano para DisableByteRangeLockingOnReadOnlyFiles, uma variável RDBSS para lidar com o bloqueio de intervalo de bytes em arquivos somente leitura. Essa variável afeta como o RDBSS lida com uma nova solicitação de SRV_OPEN pelo minidiretório de rede em um FCB e decide se ele pode ser recolhido em um SRV_OPEN existente se os atributos forem compatíveis. Se um driver de minidiretório de rede quiser alterar esse comportamento, o driver deverá definir o valor de DisableByteRangeLockingOnReadOnlyFiles para o valor apropriado após o retorno da rotina RxDriverEntry . O RDBSSLIB. A biblioteca estática lib expõe DisableByteRangeLockingOnReadOnlyFiles como uma variável externa.

No Windows 2000 e no Windows XP, o RxDriverEntry tentará abrir o valor ReadAheadGranularity sob a chave LanmanWorkStation\Parameters .

Esse valor é um DWORD que é tratado como um número e armazenado como o valor de uma opção rdbss interna no número de páginas PAGE_SIZE para leitura antecipada usada pelo Gerenciador de Cache. Qualquer valor do Registro maior que 16 é tratado como se esse valor fosse limitado a 16 (o valor máximo permitido no momento). Essa opção interna é armazenada como o número de páginas vezes que o PAGE_SIZE no processador (um máximo de 0x10000 ou 64K para um PAGE_SIZE de 4K, por exemplo). No Windows 2000 e no Windows XP, o RDBSS chama CcSetReadAheadGranularity com essa opção para várias operações de criação, leitura e gravação. Se um driver de minidiretório de rede quiser alterar esse comportamento, o driver deverá definir o valor de ReadAheadGranularity para o valor apropriado após o retorno da rotina RxDriverEntry . O RDBSSLIB. A biblioteca estática lib expõe ReadAheadGranularity como uma variável externa.

Em sistemas X86, 64K é a maior gravação que será emitida pelo Gerenciador de Memória ao emitir uma gravação de paginação (as liberações do cache serão gravações de paginação por meio do Gerenciador de Memória). Para sistemas de arquivos remotos, 64K não é a melhor opção. A maioria dos dados que podem ser transferidos em uma única solicitação de rede TDI seria menor que 64K devido à sobrecarga para obter informações de protocolo.

No Windows Server 2003, um valor do Registro para definir ReadAheadGranularity não é exposto e o RDBSS usa como padrão 32K (8 páginas de PAGE_SIZE de 4K). Esse é o mesmo valor padrão adotado para sistemas de arquivos locais.

RxDriverEntry recupera um ponteiro para o processo de kernel em execução chamando PsGetCurrentProcess e armazena esse valor em uma estrutura de dados RDBSS interna. Às vezes, esse processo de kernel é chamado de processo do sistema de arquivos.

RxDriverEntry copia um ponteiro para a rotina RxFsdDispatch em todas as entradas na tabela de expedição do driver. Portanto, se um driver de minidiretório de rede monolítico precisar receber IRPs específicos para processamento especial antes da biblioteca RDBSS, uma cópia de sua tabela de expedição de driver original deverá ser salva antes de chamar RxDriverEntry e quaisquer ponteiros de rotina restaurados após a chamada para RxDriverEntry ter retornado. Observe que o RDBSS também copiará RxFsdDispatch para todas as entradas da tabela de expedição de driver quando RxRegisterMinirdr for chamado, a menos que uma opção seja definida para impedir esse comportamento.

Para um driver de minidiretório de rede não monolítico (o redirecionador SMB da Microsoft), o driver de dispositivo RDBSS.SYS é inicializado em sua própria rotina DriverEntry quando carregado, o que chama internamente RxDriverEntry. Em um driver monolítico, a rotina RxDriverEntry é exportada do RDBSSLIB. Biblioteca estática lib e deve ser chamada explicitamente pelo minidiretório de rede.

Requisitos

Requisito Valor
Plataforma de Destino Área de Trabalho
Cabeçalho rxprocs.h (inclua Rxprocs.h)
IRQL <= APC_LEVEL

Confira também

CcSetReadAheadGranularity

PsGetCurrentProcess

RxRegisterMinirdr

RxSetDomainForMailslotBroadcast

RxStartMinirdr

RxStopMinirdr

RxUnregisterMinirdr

RxpUnregisterMinirdr

__RxFillAndInstallFastIoDispatch