次の方法で共有


VDS オブジェクト モデル

[Windows 8 および Windows Server 2012 以降、Virtual Disk Service COM インターフェイスは、Windows Storage Management APIに置き換えられます。

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

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

オブジェクトの分類

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

オブジェクトの分類を示す図。

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

  • サービス ローダーとサービス オブジェクトについては、「スタートアップ オブジェクトとサービス オブジェクト を参照してください。
  • 列挙オブジェクトと非同期オブジェクトについては、「ヘルパー オブジェクト 参照してください。
  • プロバイダー オブジェクトについては、「プロバイダー オブジェクトの 参照してください。
  • パック、ディスク、ボリューム、ボリュームのplexオブジェクトについては、「ソフトウェア プロバイダー オブジェクト を参照してください。
  • サブシステム、コントローラー、ドライブ、LUN、および LUN プレックス オブジェクトについては、「ハードウェア プロバイダー オブジェクト 参照してください。

オブジェクトの作成

オブジェクトの作成に関連付けられている構成操作とクエリ操作の完了には、かなりの時間がかかる場合があります。そのため、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