Funzione RxDriverEntry (rxprocs.h)

RxDriverEntry viene chiamato da un driver mini-redirector di rete monolitico dalla routine DriverEntry per inizializzare la libreria statica RDBSS.

Per i driver non monolitici, questa routine di inizializzazione equivale alla routine DriverEntry del driver di RDBSS.SYS dispositivo.

Sintassi

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

Parametri

[in] DriverObject

Puntatore all'oggetto driver del driver mini-redirector di rete. Ogni driver riceve un puntatore al relativo oggetto driver in un parametro per la routine DriverEntry . Questo oggetto driver verrà usato per creare l'oggetto dispositivo per il driver di mini-reindirizzamento di rete.

[in] RegistryPath

Puntatore a una stringa Unicode contenente il percorso del Registro di sistema in cui vengono archiviati i parametri del driver e altri dati di configurazione. Questo percorso del Registro di sistema si trova normalmente in una voce di servizi per il mini-reindirizzamento di rete specifico situato nella chiave HKLM\System\CurrentControlSet\Services .

Valore restituito

RxDriverEntry restituisce STATUS_SUCCESS sull'esito positivo o su uno dei valori di errore seguenti in caso di errore:

Codice restituito Descrizione
RXINIT_START L'inizializzazione di RDBSS è stata avviata, ma si è verificato un errore. Questo codice di errore è un enumerazione RDBSS interna con un valore pari a 5.

Commenti

Driver mini-redirector di rete monolitica collegato staticamente con RDBSSLIB. LIB deve chiamare RxDriverEntry dalla routine DriverEntry per inizializzare la copia della libreria RDBSSLIB collegata al driver. RxDriverEntry deve essere chiamato da un driver mini-redirector di rete monolitica prima che vengano chiamate altre routine RDBSS.

Dopo aver chiamato RxDriverEntry per inizializzare la copia della libreria RDBSS vicino all'inizio della routine DriverEntry , il driver di mini-reindirizzamento della rete in genere chiamerà RxRegisterMinirdr più avanti nella routine DriverEntry per registrare con RDBSS.

Se la chiamata RxDriverEntry ha esito positivo, le strutture di dati RDBBS globali interne vengono inizializzate. Vengono creati vari spinlock e mutex per proteggere queste strutture di dati. Una di queste strutture di dati è la struttura RDBSS_DATA che è la struttura principale nella struttura di dati di memoria RDBSS. Il parametro DriverObject viene archiviato nel membro DriverObject della struttura RDBSS_DATA. RxDriverEntry inizializza anche la traccia, la registrazione e il debug se è abilitato (ad esempio una compilazione selezionata).

RxDriverEntry tenterà anche di aprire il percorso del Registro di sistema passato come parametro RegistryPath , trattando questo oggetto come stringa senza distinzione tra maiuscole e minuscole. Se questa chiave del Registro di sistema può essere aperta correttamente, verrà eseguito un tentativo di aprire una chiave del Registro di sistema Parametri sotto questa voce.

RxDriverEntry tenterà anche di aprire la chiave del Registro di sistema HKLM\System\CurrentControlSet\Services\LanmanWorkStation\Parameters .

Se questa chiave può essere aperta, verrà eseguito un tentativo di leggere alcuni valori in questa chiave a seconda della versione del sistema operativo.

In Windows XP e versioni successive RxDriverEntry tenterà di aprire il valore DisableByteRangeLockingOnReadOnlyFiles nella chiave LanmanWorkStation\Parameters .

Questo valore è un DWORD considerato come booleano e archiviato come valore booleano per DisableByteRangeLockingOnReadOnlyFiles, una variabile RDBSS per la gestione del blocco dell'intervallo di byte nei file di sola lettura. Questa variabile influisce sul modo in cui RDBSS gestisce una nuova richiesta di SRV_OPEN dal mini-reindirizzamento di rete in un fcB e decide se può essere compresso in un SRV_OPEN esistente se gli attributi sono compatibili. Se un driver di mini-reindirizzamento di rete vuole modificare questo comportamento, il driver deve impostare il valore di DisableByteRangeLockingOnReadOnlyFiles sul valore appropriato dopo la restituzione della routine RxDriverEntry . The RDBSSLIB. La libreria statica LIB espone DisableByteRangeLockingOnReadOnlyFiles come variabile esterna.

In Windows 2000 e Windows XP , RxDriverEntry tenterà di aprire il valore ReadAheadGranularity nella chiave LanmanWorkStation\Parameters .

Questo valore è un DWORD considerato come numero e archiviato come valore per un'opzione RDBSS interna sul numero di pagine di PAGE_SIZE per leggere in anticipo usato da Gestione cache. Qualsiasi valore del Registro di sistema maggiore di 16 viene considerato come se questo valore fosse limitato a 16 (il valore massimo attualmente consentito). Questa opzione interna viene archiviata come numero di pagine in cui il PAGE_SIZE nel processore (un massimo di 0x10000 o 64K per un PAGE_SIZE 4K, ad esempio). In Windows 2000 e Windows XP, RDBSS chiama CcSetReadAheadGranularity con questa opzione per varie operazioni di creazione, lettura e scrittura. Se un driver di mini-reindirizzamento di rete vuole modificare questo comportamento, il driver deve impostare il valore readAheadGranularity sul valore appropriato dopo la restituzione della routine RxDriverEntry . The RDBSSLIB. La libreria statica LIB espone ReadAheadGranularity come variabile esterna.

Nei sistemi X86, 64K è la scrittura più grande che verrà emessa da Memory Manager quando emettono una scrittura di paging (le scritture della cache verranno paging tramite Gestione memoria). Per i file system remoti, 64K non è la scelta migliore. La maggior parte dei dati che possono essere trasferiti in una singola richiesta di rete TDI sarebbe minore di 64K a causa del sovraccarico per le informazioni sul protocollo.

In Windows Server 2003, un valore del Registro di sistema per impostare ReadAheadGranularity non è esposto e RDBSS per impostazione predefinita è 32K (8 pagine di PAGE_SIZE 4K). Si tratta dello stesso valore predefinito adottato per i sistemi di file locali.

RxDriverEntry recupera un puntatore al processo del kernel in esecuzione chiamando PsGetCurrentProcess e archivia questo valore in una struttura di dati RDBSS interna. Questo processo del kernel viene talvolta chiamato processo di file system.

RxDriverEntry copia quindi un puntatore alla routine RxFsdDispatch su tutte le voci della tabella di invio driver. Quindi, se un driver mini-redirector di rete monolitica deve ricevere ip di rete specifici per l'elaborazione speciale prima della libreria RDBSS, deve essere salvata una copia della tabella di invio del driver originale prima di chiamare RxDriverEntry e tutti i puntatori di routine ripristinati dopo la chiamata a RxDriverEntry è stato restituito. Si noti che RDBSS copia anche RxFsdDispatch in tutte le voci della tabella di invio driver quando RxRegisterMinirdr viene chiamato a meno che non sia impostata un'opzione per impedire questo comportamento.

Per un driver mini-redirector di rete non monolitico (reindirizzamento Microsoft SMB), il driver di dispositivo RDBSS.SYS viene inizializzato nella propria routine DriverEntry quando viene caricato internamente che chiama RxDriverEntry. In un driver monolitico, la routine RxDriverEntry viene esportata da RDBSSLIB. Libreria statica LIB e deve essere chiamata in modo esplicito dal mini-reindirizzamento di rete.

Requisiti

Requisito Valore
Piattaforma di destinazione Desktop
Intestazione rxprocs.h (includere Rxprocs.h)
IRQL <= APC_LEVEL

Vedi anche

CcSetReadAheadGranularity

PsGetCurrentProcess

RxRegisterMinirdr

RxSetDomainForMailslotBroadcast

RxStartMinirdr

RxStopMinirdr

RxUnregisterMinirdr

RxpUnregisterMinirdr

__RxFillAndInstallFastIoDispatch