Condividi tramite


Implementazione di un driver miniport virtuale Storport

Questa pagina fornisce informazioni di implementazione di alto livello per un driver miniport virtuale Storport (VMiniport). L'interfaccia VMiniport è definita in storport.h.

Le considerazioni sulla progettazione sono univoche per varie VMiniport, quindi le specifiche dell'implementazione non sono incluse qui.

Interfaccia VMiniport

In questa sezione sono elencate le funzioni, i callback e le strutture più importanti implementate/usate da un VMiniport. Alcune funzioni e callback sono necessarie; i callback facoltativi sono univoci per la progettazione di un VMiniport.

  • DriverEntry, che è la prima routine che il sistema operativo chiama dopo il caricamento di VMiniport. Questa routine è necessaria.

  • HW_INITIALIZATION_DATA, ovvero una struttura allocata da Vminiport e inizializzata che il VMiniport passa a Storport durante l'inizializzazione. VMiniport fornisce puntatori alle relative funzioni di callback in questa struttura.

    Sono necessarie le routine di callback seguenti:

    Le routine di callback seguenti sono facoltative, anche se un VMiniport potrebbe dover implementare alcuni di essi a seconda della relativa architettura univoca:

    • HwInitializeTracing

    • HwCleanupTracing. Questa routine è necessaria quando HwInitializeTracing punta a una routine di callback; in caso contrario, questa routine è facoltativa ed è univoca per un VMiniport.

    • HwProcessServiceRequest. Questa routine riceve un'IRP "callback inversa", che verrà completata quando il VMiniport aggiorna il chiamante (ad esempio un'applicazione in modalità utente o un driver in modalità kernel) o richiede che il chiamante faccia qualcosa per conto del VMiniport.

    • HwCompleteServiceIrp. Questa routine è necessaria quando HwProcessServiceRequest punta a una routine di callback; in caso contrario, questa routine è facoltativa ed è univoca per un VMiniport. HwCompleteServiceIrp viene chiamato quando l'adapter virtuale viene rimosso in modo che VMiniport possa completare qualsiasi irp di callback inverso che potrebbe essere in sospeso.

    Il VMiniport deve anche impostare i membri seguenti della struttura HW_INITIALIZATION_DATA :

    • Impostare HwInitializationDataSize su sizeof(HW_INITIALIZATION_DATA).

    • Impostare AdapterInterfaceType su Internal, che indica a Storport che si tratta di una scheda virtuale.

    • Impostare HwBuildIo su NULL.

    Il driver Vminiport imposta altri campi in base alle esigenze. I campi inutilizzati devono essere impostati su zero.

  • PORT_CONFIGURATION_INFORMATION, ovvero una struttura allocata da Storport. Storport inizializza alcuni membri PORT_CONFIGURATION_INFORMATION e quindi lo passa al callback HwFindAdapter di VMiniport, dove VMiniport completa l'inizializzazione. Poiché questa struttura è pre-inizializzata da Storport, HWFindAdapter non deve annullare la struttura. Un VMiniport deve impostare VirtualDevice su TRUE.

Inizializzazione VMiniport

Un VMiniport ha tre fasi di inizializzazione.

VMiniport I/O

Storport chiama il callback HwStartIo di VMiniport per avviare una richiesta di I/O. In Storport viene descritta una richiesta di I/O usando rispettivamente un SCSI_REQUEST_BLOCK o un STORAGE_REQUEST_BLOCK (SRB standard o esteso).

A differenza di un driver miniport fisico, Storport non chiama HwBuildIo in un Vminiport prima di chiamare HwStartIo.

Nessun blocco viene mantenuto prima di chiamare HwStartIo. La profondità della coda predefinita per ogni unità logica esposta tramite l'interfaccia miniport virtuale è 250.