Condividi tramite


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 driver del driver di dispositivo RDBSS.SYS.

Sintassi

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

Parametri

[in] DriverObject

Puntatore all'oggetto driver del driver del driver mini-redirector di rete. Ogni driver riceve un puntatore al relativo oggetto driver in un parametro alla routine DriverEntry. Questo oggetto driver verrà usato per creare l'oggetto dispositivo per il driver del mini-redirector 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 in genere sotto una voce di servizi per il mini-reindirizzamento di rete specifico che si trova nella chiave HKLM\System\CurrentControlSet\Services.

Valore restituito

RxDriverEntry restituisce STATUS_SUCCESS in caso di esito positivo o 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 valore 5.

Osservazioni

Driver mini-redirector di rete monolitica collegato in modo statico 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 monolitico prima di chiamare qualsiasi altra routine RDBSS.

Dopo aver chiamato RxDriverEntry per inizializzare la copia della libreria RDBSS vicino all'inizio della routine driverEntry , il driver del mini-redirector di rete chiamerebbe in genere RxRegisterMinirdr più avanti nella routine DriverEntry per eseguire la registrazione 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 superiore nella struttura dei 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 questa opzione è abilitata (ad esempio, una compilazione selezionata).

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

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

Se questa chiave può essere aperta, verrà effettuato 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 sotto la chiave LanmanWorkStation\Parameters.

Questo valore è un DWORD considerato come un valore booleano e archiviato come valore booleano per DisableByteRangeLockingOnReadOnlyFiles, una variabile RDBSS per la gestione del blocco dell'intervallo di byte in file di sola lettura. Questa variabile influisce sul modo in cui RDBSS gestisce una nuova richiesta di SRV_OPEN dal mini-redirector di rete in un'istanza del cluster di failover e decide se può essere compressa 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 che la routine RxDriverEntry restituito. The RDBSSLIB. La libreria statica LIB espone DisableByteRangeLockingOnReadOnlyFiles come variabile esterna.

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

Questo valore è un DWORD che viene considerato come un numero e archiviato come valore per un'opzione RDBSS interna sul numero di pagine PAGE_SIZE per la lettura avanti usata 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 quando il PAGE_SIZE nel processore (ad esempio, un massimo di 0x10000 o 64K per un PAGE_SIZE 4K). 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 di ReadAheadGranularity sul valore appropriato dopo che la routine RxDriverEntry restituito. The RDBSSLIB. La libreria statica LIB espone ReadAheadGranularity come variabile esterna.

Nei sistemi X86, 64K è la scrittura più grande che verrà rilasciata da Memory Manager durante l'emissione di una scrittura di paging (gli scaricamenti della cache eseguiranno il paging delle scritture 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 inferiore a 64.000 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 PAGE_SIZE 4K). Si tratta dello stesso valore predefinito adottato per i file system locali.

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

RxDriverEntry copia quindi un puntatore al RxFsdDispatch routine su tutte le voci della tabella dispatch del driver. Pertanto, se un driver mini-redirector di rete monolitico deve ricevere specifici IRP per l'elaborazione speciale prima della libreria RDBSS, è necessario salvare una copia della tabella di invio del driver originale prima di chiamare RxDriverEntry e qualsiasi puntatore di routine ripristinato dopo la chiamata a RxDriverEntry restituito. Si noti che RDBSS copierà anche RxFsdDispatch in tutte le voci della tabella dispatch del driver quando RxRegisterMinirdr viene chiamata a meno che non sia impostata un'opzione per impedire questo comportamento.

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

Fabbisogno

Requisito Valore
piattaforma di destinazione Desktop
intestazione rxprocs.h (include Rxprocs.h)
IRQL <= APC_LEVEL

Vedere anche

CcSetReadAheadGranularity

PsGetCurrentProcess

RxRegisterMinirdr

RxSetDomainForMailslotBroadcast

RxStartMinirdr

RxStopMinirdr

RxUnregisterMinirdr

RxpUnregisterMinirdr

__RxFillAndInstallFastIoDispatch