VDS オブジェクト モデル

[Windows 8とWindows Server 2012以降、仮想ディスク サービス COM インターフェイスは Windows Storage Management API に置き換えられます。

VDS は、ディスクや CD-ROM デバイスなどのホストベースのストレージ デバイスと、ハードウェア RAID コントローラーによって管理されるディスク アレイへの間接的なアクセスを提供します。 一部のストレージ エンティティは物理デバイスをモデル化しますが、他のストレージ エンティティは仮想コンストラクト (ボリューム、パーティションなど) をモデル化します。 このトピックで説明するオブジェクトは、VDS の物理エンティティと仮想エンティティの両方を表します。

アプリケーションは、これらのオブジェクトによって公開されるメソッドを呼び出し、VDS は要求されたストレージ操作を実行するために適切なプロバイダーを呼び出します。 アプリケーションがプロバイダー プログラムを直接呼び出すことはありません。

オブジェクトの分類

次の図に示すように、ソフトウェア プロバイダー プログラムは、ホスト ベースのエンティティをモデル化するオブジェクトを実装します。ハードウェア プロバイダー プログラムは、内部および外部のハードウェア RAID デバイスをモデル化するオブジェクトを実装します。残りの一般的なオブジェクトはプロバイダーに依存しないか、VDS によって実装されます。 VDS オブジェクトではないスピンドルは、ディスクまたはドライブ・エクステントで構成される汎用ストレージ・メディアの用語です。

各オブジェクトの動作の詳細については、次のトピックから選択します。

オブジェクトの作成

オブジェクトの作成に関連付けられている構成操作とクエリ操作の完了には、かなりの時間がかかる場合があります。そのため、VDS はすべてのメソッドを非同期的に呼び出します。 検出プロバイダーは、すべての完了、エラー、または状態変更イベントを返します。 ソフトウェア プロバイダーは、すべてのエラーと重大な状態の変更もログに記録します。

オブジェクトの削除

いくつかの VDS メソッドは、VDS オブジェクトを削除または変換します。 呼び出し元は、インターフェイス ポインターを使用して、 メソッドが戻った後に削除されたオブジェクトへの参照を保持できます。 呼び出し元がインターフェイスを解放すると、VDS はオブジェクトを削除します。

オブジェクトの削除に関しては、呼び出し元は、これらのインターフェイスで IUnknown::Release メソッド以外の呼び出しを行わない必要があります。 プロバイダーは、誤った呼び出し元に対処するのに十分な堅牢性を持っている必要があります。呼び出し元が削除されたオブジェクトに対してメソッドを呼び出す場合、プロバイダーは VDS_E_OBJECT_DELETEDを返す必要があります。

サービスの初期化

VDS は、サービス ローダーとサービス オブジェクトのクラス識別子 (Clsid) を提供しますが、サービス ローダー Clsid のみがパブリックです。 サービスの初期化は、プロバイダー、呼び出し元のアプリケーション、およびサービスが次のタスクを実行するときに発生します。

  • 新しい各プロバイダーは、インストール時に IVdsAdmin::RegisterProvider メソッドを 呼び出して VDS に登録します。 この呼び出しは、プロバイダーのオブジェクト GUID によって識別される SYSTEM ハイブの下にレジストリ キーを作成します。 このキーの下には、プロバイダー オブジェクトの Clsid、名前、バージョン、プロバイダーのバージョン GUID が含まれます。

    注意

    プロバイダー オブジェクト GUID は永続的です。ソフトウェアおよびハードウェア オブジェクト GUID は使用できません。

     

  • アプリケーションは CoCreateInstance 関数を呼び出し、サービス ローダー Clsid を引数として渡します。 サービス ローダー オブジェクトへのポインターを使用すると、アプリケーションは、目的のコンピューター名をパラメーターとして IVdsServiceLoader::LoadService メソッドに渡すことによって、ローカルまたはリモートで VDS を起動できます。

  • 最初のアプリケーションがサービスにアタッチされると、VDS は最初にレジストリ キーの下にある各 Clsid で CoCreateInstance を呼び出し、次に各プロバイダーで IVdsProviderPrivate::OnLoad メソッドを呼び出してプログラムを初期化します。

VDS について

IVdsAdmin::RegisterProvider

IVdsServiceLoader::LoadService

IVdsProviderPrivate::OnLoad