次の方法で共有


OfflineClusterResourceEx 関数 (clusapi.h)

OfflineClusterResource メソッドを拡張します。 クライアントは、フラグを使用してリソースのポリシーを制御し、入力バッファーを使用してオフライン操作の特定の命令をリソースに送信できます。 たとえば、入力バッファーを使用して、シャットダウンではなく状態を保存することで、VM にオフラインにするように指示できます。

構文

DWORD OfflineClusterResourceEx(
  [in] HRESOURCE hResource,
  [in] DWORD     dwOfflineFlags,
  [in] PBYTE     lpInBuffer,
  [in] DWORD     cbInBufferSize
);

パラメーター

[in] hResource

クラスター リソースへのハンドル。

[in] dwOfflineFlags

オフライン ポリシーに影響を与えるフラグ。

このパラメーターは、次の 1 つ以上の値に設定できます。

CLUSAPI_RESOURCE_OFFLINE_IGNORE_RESOURCE_STATUS (0x00000001)

リソースがロックされている場合は、リソースの状態を無視します。

CLUSAPI_RESOURCE_OFFLINE_FORCE_WITH_TERMINATION (0x00000002)

リソースは使用不可としてマークされ、クリーンアップ プロセスが完了するのを待たずにシャットダウンされます。

CLUSAPI_RESOURCE_OFFLINE_REASON_NONE (0x00000000)

フラグは指定されません。

Windows Server 2012: R2 をWindows Server 2012する前に、この値はサポートされていません。

CLUSAPI_RESOURCE_OFFLINE_REASON_UNKNOWN (0x00000001)

理由は不明です。

Windows Server 2012: R2 をWindows Server 2012する前に、この値はサポートされていません。

CLUSAPI_RESOURCE_OFFLINE_REASON_MOVING (0x00000002)

リソースを別のノードに移動しています。

Windows Server 2012: R2 をWindows Server 2012する前に、この値はサポートされていません。

CLUSAPI_RESOURCE_OFFLINE_REASON_USER_REQUESTED (0x00000004)

リソースをオフラインにするユーザー要求があった。

Windows Server 2012: R2 をWindows Server 2012する前に、この値はサポートされていません。

CLUSAPI_RESOURCE_OFFLINE_REASON_BEING_DELETED (0x00000008)

リソースは削除中です。

Windows Server 2012: R2 をWindows Server 2012する前に、この値はサポートされていません。

CLUSAPI_RESOURCE_OFFLINE_REASON_BEING_RESTARTED (0x00000010)

リソースが再起動されています。

Windows Server 2012: R2 をWindows Server 2012する前に、この値はサポートされていません。

CLUSAPI_RESOURCE_OFFLINE_REASON_PREEMPTED (0x00000020)

リソースにプリエンプティブ エラーが発生しました。

Windows Server 2012: R2 をWindows Server 2012する前に、この値はサポートされていません。

CLUSAPI_RESOURCE_OFFLINE_REASON_SHUTTING_DOWN (0x00000040)

リソースがシャットダウンしています。

Windows Server 2012: R2 をWindows Server 2012する前に、この値はサポートされていません。

[in] lpInBuffer

特定のリソースを対象とするオフライン操作の手順が含まれています。 lpInBuffer はプロパティ リストとして書式設定されます。これは、命令がプロパティ値に含まれていることを意味します。 リソース DLL は、オフライン操作でサポートされるプロパティ名をプロパティ リストで検索し、関連付けられているプロパティ値の命令を解釈します。 OfflineClusterResourceEx 操作でリソースによってサポートされるプロパティは、リソースに関連付けられているプライベート プロパティには関連しないことに注意してください。

[in] cbInBufferSize

lpInBuffer のサイズ (バイト単位)。

戻り値

OfflineClusterResourceEx は、オフライン コマンドが受け入れられ、進行中 の場合に ERROR_IO_PENDINGを返します。 OfflineClusterResourceEx は、オフライン コマンドがリソースの状態を変更せず、すぐに拒否された場合、0 以外のエラー コードを返します。

注釈

offlineClusterResourceExは、 CLUSAPI_RESOURCE_OFFLINE_IGNORE_RESOURCE_LOCKED_STATUS フラグが設定されておらず、リソースが現在の状態で "ロック" されていることを示している場合、エラー ERROR_CLUSTER_RESOURCE_LOCKED_STATUS ですぐに失敗します。

MoveClusterGroupEx と同様に、OfflineClusterResourceExERROR_IO_PENDINGを返した場合、クラスター サービスはリソースをオフライン状態にしようとします。

OfflineClusterResourceEx では、クライアントにクラスター セキュリティ記述子のフル アクセスが付与されている必要があります。

#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <ClusAPI.h>


#define DemoResDllTypeName L"dummy"
#define DemoResourceName L"DemoResource"


BOOL WaitForResourceToGoOffline(__in HRESOURCE hResource)
{
    for(;;)
    {
        CLUSTER_RESOURCE_STATE state = GetClusterResourceState( hResource, NULL, 0, NULL, 0 );
        if( state == ClusterResourceOnline || state == ClusterResourceFailed)
        {
            return false;
        }
        else if ( state == ClusterResourceOffline )
        {
            return true;
        }

        Sleep(100);
    }
}

int __cdecl main( void )
{
    HCLUSTER hCluster= NULL;
    HRESOURCE hResource = NULL;
    DWORD error = 0;
    
    hCluster = OpenCluster( NULL );
    if ( hCluster == NULL )
    {
        error = GetLastError();
        wprintf( L"Failed to open cluster: 0x%x\n", error );
        goto Cleanup;
    }

    hResource = OpenClusterResource( hCluster, DemoResourceName );
    if ( hResource == NULL )
    {
        error = GetLastError();
        wprintf( L"Failed to open cluster resource " DemoResourceName L": 0x%x\n", error );
        goto Cleanup;
    }

    // Offlining Resource example
    error = OfflineClusterResourceEx(hResource, CLUSAPI_RESOURCE_OFFLINE_IGNORE_RESOURCE_STATUS, NULL, 0);
    if ( error == ERROR_IO_PENDING  )
    {
        if (WaitForResourceToGoOffline(hResource))
        {
            error = ERROR_SUCCESS;
        }
    }
    if ( error )
    {
        wprintf( L"Failed to offline the resource" DemoResourceName L": 0x%x\n", error );
        goto Cleanup;
    }
    else
    {
        wprintf( L"Offlined the resource" DemoResourceName);
    }


Cleanup:

    if ( hResource != NULL )
    {
        CloseClusterResource( hResource );
        hResource = NULL;
    }
    if ( hCluster != NULL )
    {
        CloseCluster( hCluster );
        hCluster = NULL;
    }

    return (int)error;
}

要件

要件
サポートされている最小のクライアント サポートなし
サポートされている最小のサーバー Windows Server 2012
対象プラットフォーム Windows
ヘッダー clusapi.h
Library ClusAPI.lib
[DLL] ClusAPI.dll