Modello a oggetti VDS

[A partire da Windows 8 e Windows Server 2012, l'interfaccia com del servizio dischi virtuali viene sostituita dall' API di gestione archiviazione di Windows.]

VDS consente l'accesso indiretto ai dispositivi di archiviazione basati su host, ad esempio i dischi e i dispositivi CD-ROM, e agli array di dischi gestiti da controller RAID hardware. Mentre alcune entità di archiviazione modellano i dispositivi fisici, altri costrutti virtuali del modello: volumi, partizioni e così via. Gli oggetti descritti in questo argomento rappresentano le entità fisiche e virtuali di VDS.

Le applicazioni chiamano i metodi esposti da tali oggetti e VDS chiama 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 gli oggetti che modellano le 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 sono implementati da VDS. Un mandrino, che non è un oggetto VDS, è un termine per supporti di archiviazione generici che comprende gli extent del disco o dell'unità.

Diagramma che mostra una classificazione di oggetti, definiti come "oggetti comuni", "oggetti provider software" e "oggetti provider hardware".

Per ulteriori informazioni sul comportamento di ogni oggetto, selezionare uno degli argomenti seguenti:

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, di errore o di modifica dello stato. I provider di software registrano inoltre tutti gli errori e le modifiche significative di stato.

Eliminazione oggetti

Diversi metodi VDS eliminano o trasformano oggetti VDS. Un chiamante può mantenere un riferimento, tramite un puntatore a 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 di oggetti, i chiamanti devono evitare di richiamare qualsiasi elemento tranne il metodo IUnknown:: Release su queste interfacce. Il provider deve essere sufficientemente solido per gestire i chiamanti errati; Se un chiamante richiama un metodo su un oggetto eliminato, il provider deve restituire l' _ oggetto VDS _ E _ eliminato.

Inizializzazione del servizio

VDS fornisce un identificatore di classe (CLSID) per il caricatore del servizio e gli oggetti servizio, ma solo il CLSID del caricatore di servizi è 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 di sistema, identificata dal GUID 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 oggetto provider sono permanenti; i GUID degli oggetti software e hardware non lo sono.

  • Un'applicazione chiama la funzione CoCreateInstance , passando il CLSID del caricatore del servizio come argomento. Con un puntatore all'oggetto del caricatore del servizio, l'applicazione può avviare VDS localmente 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 su ogni CLSID trovato sotto la chiave del registro di sistema e quindi chiama il metodo IVdsProviderPrivate:: OnLoad su ogni provider per inizializzare i programmi.

Informazioni su VDS

IVdsAdmin:: RegisterProvider

IVdsServiceLoader::LoadService

IVdsProviderPrivate:: OnLoad