VDS の読み込み

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

VDS を読み込んで初期化するには

  1. null 以外のインターフェイスを解放します。

  2. CoCreateInstanceCoCreateInstanceEx、または CoGetClassObject 関数を呼び出して、サービス ローダー オブジェクトへのポインターを取得します。

    この呼び出しでは、CLSCTX_DISABLE_AAAを指定できません。 CoInitializeSecurity が呼び出された場合、dwCapabilities パラメーターでEOAC_DISABLE_AAAを指定することはできません。

  3. VDS を読み込む には、IVdsServiceLoader::LoadService メソッドを呼び出します。

    最初のパラメーターとして NULL を 渡すと、ローカル ホスト上の VDS が読み込まれて初期化されます。

  4. 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);
        }
    }
}

VDS の使用

IVdsService::WaitForServiceReady

IVdsServiceLoader::LoadService

セットアップ オブジェクトとサービス オブジェクト