VDS の読み込み
[Windows 8とWindows Server 2012以降、仮想ディスク サービス COM インターフェイスは Windows Storage Management API に置き換えられます。
VDS を読み込んで初期化するには
null 以外のインターフェイスを解放します。
CoCreateInstance、CoCreateInstanceEx、または CoGetClassObject 関数を呼び出して、サービス ローダー オブジェクトへのポインターを取得します。
この呼び出しでは、CLSCTX_DISABLE_AAAを指定できません。 CoInitializeSecurity が呼び出された場合、dwCapabilities パラメーターでEOAC_DISABLE_AAAを指定することはできません。
VDS を読み込む には、IVdsServiceLoader::LoadService メソッドを呼び出します。
最初のパラメーターとして NULL を 渡すと、ローカル ホスト上の VDS が読み込まれて初期化されます。
VDS の初期化が完了するまで待機するには、 IVdsService::WaitForServiceReady メソッドを呼び出します。
次のコード例では、サービス オブジェクトへのポインターを返すサービスを初期化します。
#include "initguid.h"
#include "vds.h"
#include <stdio.h>
#pragma comment( lib, "ole32.lib" )
//
// Simple macro to release non-null interfaces.
//
#define _SafeRelease(x) {if (NULL != x) { x->Release(); x = NULL; } }
void __cdecl main(void)
{
HRESULT hResult;
IVdsService *pService = NULL;
IVdsServiceLoader *pLoader = NULL;
// For this, you first get a pointer to the VDS Loader
// Launch the VDS service.
//
hResult = CoInitialize(NULL);
if (SUCCEEDED(hResult))
{
hResult = CoCreateInstance(CLSID_VdsLoader,
NULL,
CLSCTX_LOCAL_SERVER,
IID_IVdsServiceLoader,
(void **) &pLoader);
//
// And then load VDS on the local computer.
//
if (SUCCEEDED(hResult))
{
hResult = pLoader->LoadService(NULL, &pService);
}
//
// You're done with the Loader interface at this point.
//
_SafeRelease(pLoader);
if (SUCCEEDED(hResult))
{
hResult = pService->WaitForServiceReady();
if (SUCCEEDED(hResult))
{
//
// You obtained an interface to the service: pService.
// This interface can now be used to query for providers
// and perform other operations.
//
printf("VDS Service Loaded");
}
}
else
{
printf("VDS Service failed hr=%x\n",hResult);
}
}
}