Modello a oggetti VDS
[A partire da Windows 8 e Windows Server 2012, l'interfaccia COM del servizio disco virtuale viene sostituita dall'API gestione archiviazione di Windows.]
VDS fornisce l'accesso indiretto ai dispositivi di archiviazione basati su host, ad esempio dischi e dispositivi CD-ROM e a matrici di dischi gestiti dai controller RAID hardware. Mentre alcune entità di archiviazione modellano i dispositivi fisici, altri creano costrutti virtuali: volumi, partizioni e così via. Gli oggetti descritti in questo argomento rappresentano sia le entità fisiche che virtuali di VDS.
Le applicazioni chiamano i metodi esposti da questi oggetti e VDS chiamano il provider appropriato per eseguire le operazioni di archiviazione richieste. Un'applicazione non chiama mai direttamente un programma provider.
Classificazione degli oggetti
Come illustrato nella figura seguente, i programmi del provider software implementano oggetti che modellano entità basate su host; i programmi del provider hardware implementano oggetti che modellano dispositivi RAID hardware interni ed esterni; gli oggetti comuni rimanenti sono indipendenti dal provider o vengono implementati da VDS. Uno spindle, che non è un oggetto VDS, è un termine per supporti di archiviazione generici che comprendono extent di disco o unità.
Per altre informazioni sul comportamento di ogni oggetto, selezionare uno degli argomenti seguenti:
- Il caricatore del servizio e gli oggetti servizio, vedere Oggetti di avvio e servizio.
- Enumerazione e oggetti asincroni, vedere Oggetti helper.
- Oggetto provider, vedere Oggetto provider.
- Comprimere, disco, volume e oggetti plex del volume, vedere Oggetti provider software.
- Sottosistema, controller, unità, LUN e oggetti plex LUN, vedere Oggetti provider hardware.
Creazione di oggetti
Il completamento delle operazioni di configurazione e query associate alla creazione di oggetti può richiedere molto tempo; di conseguenza, VDS richiama tutti i metodi in modo asincrono. Il provider di individuazione restituisce tutti gli eventi di completamento, errore o modifica dello stato. I provider di software registrano anche tutti gli errori e le modifiche significative dello stato.
Eliminazione oggetti
Diversi metodi VDS eliminano o trasformano oggetti VDS. Un chiamante può contenere un riferimento, tramite un puntatore all'interfaccia, a un oggetto eliminato dopo la restituzione del metodo. Quando il chiamante rilascia l'interfaccia, VDS elimina l'oggetto.
Per quanto riguarda l'eliminazione dell'oggetto, i chiamanti devono evitare di richiamare qualsiasi elemento tranne il metodo IUnknown::Release su queste interfacce. Il provider deve essere abbastanza solido da gestire con i chiamanti erranti; se un chiamante richiama un metodo su un oggetto eliminato, il provider deve restituire VDS_E_OBJECT_DELETED.
Inizializzazione del servizio
VDS fornisce un identificatore di classe (Clsid) per il caricatore del servizio e gli oggetti servizio, ma solo il caricatore del servizio Clsid è pubblico. L'inizializzazione del servizio si verifica quando i provider, un'applicazione chiamante e il servizio eseguono le attività seguenti:
Ogni nuovo provider richiama il metodo IVdsAdmin::RegisterProvider durante l'installazione per la registrazione con VDS. La chiamata crea una chiave del Registro di sistema nell'hive SYSTEM, identificata dal GUID dell'oggetto del provider. Contenuto in questa chiave è il Clsid dell'oggetto provider, il nome, la versione e il GUID della versione del provider.
Nota
I GUID dell'oggetto provider sono persistenti; i GUID dell'oggetto software e hardware non sono.
Un'applicazione chiama la funzione CoCreateInstance , passando il caricatore del servizio Clsid come argomento. Con un puntatore all'oggetto caricatore del servizio, l'applicazione può avviare VDS in locale o in remoto passando il nome del computer desiderato come parametro al metodo IVdsServiceLoader::LoadService .
Quando l'applicazione iniziale si connette al servizio, VDS chiama prima CoCreateInstance in ogni Clsid trovato nella chiave del Registro di sistema e quindi chiama il metodo IVdsProviderPrivate::OnLoad in ogni provider per inizializzare i programmi.
Argomenti correlati