VDS-Objektmodell
[Ab Windows 8 und Windows Server 2012 wird die Virtual Disk Service COM-Schnittstelle von der Windows Storage Management APIersetzt.]
VDS bietet indirekten Zugriff auf hostbasierte Speichergeräte wie Datenträger und CD-ROM Geräte sowie auf Datenträgerarrays, die von Hardware-RAID-Controllern verwaltet werden. Während einige Speicherentitäten physische Geräte modellieren, modellieren andere virtuelle Konstrukte: Volumes, Partitionen usw. Die in diesem Thema beschriebenen Objekte stellen sowohl die physischen als auch die virtuellen Entitäten von VDS dar.
Anwendungen rufen die Methoden auf, die von diesen Objekten verfügbar gemacht werden, und VDS ruft den entsprechenden Anbieter auf, um die angeforderten Speichervorgänge auszuführen. Eine Anwendung ruft niemals ein Anbieterprogramm direkt auf.
Klassifizierung von Objekten
Wie die folgende Abbildung zeigt, implementieren Softwareanbieterprogramme Objekte, die hostbasierte Entitäten modelliert; Hardwareanbieterprogramme implementieren Objekte, die interne und externe Hardware-RAID-Geräte modellen; die übrigen gängigen Objekte sind entweder anbieterunabhängig oder von VDS implementiert. Eine Spindel, die kein VDS-Objekt ist, ist ein Begriff für generische Speichermedien, die aus Datenträger- oder Laufwerksausdehnungen bestehen.
Wenn Sie mehr über das Verhalten der einzelnen Objekte erfahren möchten, wählen Sie in den folgenden Themen aus:
- Dienstladeprogramm und Dienstobjekte finden Sie unter Start- und Dienstobjekte.
- Enumerations- und asynchrone Objekte finden Sie unter Hilfsobjekte.
- Provider-Objekt finden Sie unter Provider Object.
- Pack-, Datenträger-, Volume- und Volumeplex-Objekte finden Sie unter Software provider Objects.
- Subsystem-, Controller-, Laufwerk-, LUN- und LUN-Plexobjekte finden Sie unter Hardwareanbieterobjekte.
Objekterstellung
Die Konfigurations- und Abfragevorgänge, die der Objekterstellung zugeordnet sind, können erhebliche Zeit in Anspruch nehmen; vdS ruft alle Methoden asynchron auf. Der Ermittlungsanbieter gibt alle Ereignisse für Abschluss-, Fehler- oder Zustandsänderungsereignisse zurück. Softwareanbieter protokollieren auch alle Fehler und erhebliche Zustandsänderungen.
Objektlöschung
Mehrere VDS-Methoden löschen oder transformieren VDS-Objekte. Ein Aufrufer kann einen Verweis über einen Schnittstellenzeiger auf ein gelöschtes Objekt enthalten, nachdem die Methode zurückgegeben wurde. Wenn der Aufrufer die Schnittstelle loslässt, löscht VDS das Objekt.
Im Hinblick auf die Objektlöschung sollten Aufrufer nichts anderes aufrufen, außer die IUnknown::Release-Methode für diese Schnittstellen. Der Anbieter muss robust genug sein, um mit fehlerhaften Anrufern umzugehen; Wenn ein Aufrufer eine Methode für ein gelöschtes Objekt aufruft, sollte der Anbieter VDS_E_OBJECT_DELETEDzurückgeben.
Dienstinitialisierung
VDS stellt einen Klassenbezeichner (Clsid) für das Dienstladeprogramm und die Dienstobjekte bereit, aber nur der Dienstladeprogramm Clsid ist öffentlich. Die Dienstinitialisierung erfolgt, wenn die Anbieter, eine aufrufende Anwendung und der Dienst die folgenden Aufgaben ausführen:
Jeder neue Anbieter ruft die IVdsAdmin::RegisterProvider Methode während der Installation auf, um sich bei VDS zu registrieren. Der Aufruf erstellt einen Registrierungsschlüssel unter der SYSTEM-Struktur, die durch die Objekt-GUID des Anbieters identifiziert wird. Dieser Schlüssel enthält die Clsid des Anbieterobjekts, den Namen, die Version und die Versions-GUID des Anbieters.
Anmerkung
Anbieterobjekt-GUIDs sind persistent; Software- und Hardwareobjekt-GUIDs sind nicht vorhanden.
Eine Anwendung ruft die CoCreateInstance-Funktion auf und übergibt die Dienstladeprogramm Clsid als Argument. Mit einem Zeiger auf das Dienstladeprogrammobjekt kann die Anwendung VDS entweder lokal oder remote starten, indem der gewünschte Computername als Parameter an die IVdsServiceLoader::LoadService-Methode übergeben wird.
Wenn die ursprüngliche Anwendung an den Dienst angefügt wird, ruft VDS zunächst CoCreateInstance- für jede Clsid auf, die unter dem Registrierungsschlüssel gefunden wurde, und ruft dann die IVdsProviderPrivate::OnLoad-Methode für jeden Anbieter auf, um die Programme zu initialisieren.
Verwandte Themen