Compartilhar via


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 de driver em um parâmetro para sua rotina de DriverEntry. Esse objeto de driver será usado para criar o objeto do 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 de HKLM\System\CurrentControlSet\Services.

Valor de retorno

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.

Observações

Um driver de minidiretório de rede monolítico que está vinculado estaticamente ao RDBSSLIB. O LIB deve chamar RxDriverEntry de sua rotina de 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 de qualquer outra rotina RDBSS ser chamada.

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

Se a chamada RxDriverEntry for bem-sucedida, 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 de memória RDBSS. O parâmetro DriverObject é armazenado no driverObject membro da estrutura RDBSS_DATA. 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 na 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 SRV_OPEN pelo minidiretório de rede em um FCB e decide se ela pode ser recolhida 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 depois que o RxDriverEntry rotina tiver retornado. O RDBSSLIB. A biblioteca estática LIB expõe DisableByteRangeLockingOnReadOnlyFiles como uma variável externa.

No Windows 2000 e no Windows XP, RxDriverEntry tentará abrir o valor ReadAheadGranularity na 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 atualmente permitido). 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 minidiretor de rede quiser alterar esse comportamento, o driver deverá definir o valor de ReadAheadGranularity como o valor apropriado após a RxDriverEntry rotina tiver retornado. 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 de 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 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. Esse processo de kernel às vezes é chamado de processo do sistema de arquivos.

RxDriverEntry copia um ponteiro para a rotina de RxFsdDispatch sobre 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 tiver 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 esteja definida para impedir esse comportamento.

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

Requisitos

Requisito Valor
da Plataforma de Destino Área de trabalho
cabeçalho rxprocs.h (include Rxprocs.h)
IRQL <= APC_LEVEL

Consulte também

ccSetReadAheadGranularity

PsGetCurrentProcess

RxRegisterMinirdr

RxSetDomainForMailslotBroadcast

RxStartMinirdr

RxStopMinirdr

RxUnregisterMinirdr

RxpUnregisterMinirdr

__RxFillAndInstallFastIoDispatch