次の方法で共有


OfflineClusterGroupEx 関数 (clusapi.h)

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

構文

DWORD OfflineClusterGroupEx(
  [in] HGROUP hGroup,
  [in] DWORD  dwOfflineFlags,
       PBYTE  lpInBuffer,
  [in] DWORD  cbInBufferSize
);

パラメーター

[in] hGroup

クラスター グループへのハンドル。

[in] dwOfflineFlags

オフライン ポリシーに影響を与えるフラグ。 0x0と共に、 CLUSAPI_GROUP_OFFLINE_IGNORE_RESOURCE_LOCKED_STATUS (0x00000001 ): リソースが現在の状態で "ロック" する必要があることを示しているかどうかを無視します。

lpInBuffer

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

[in] cbInBufferSize

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

戻り値

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

解説

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

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

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

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


#define DemoResDllTypeName L"dummy"
#define DemoGroupName L"DemoGroup"


BOOL WaitForGroupToGoOffline(__in HGROUP hGroup)
{
    for(;;)
    {
        CLUSTER_GROUP_STATE state = GetClusterGroupState( hGroup, NULL, NULL );
        if( state == ClusterGroupFailed || state == ClusterGroupPartialOnline || state == ClusterGroupOnline)
        {
            return false;
        }
        else if ( state == ClusterGroupOffline )
        {
            return true;
        }

        Sleep(100);
    }
}

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

    hGroup = OpenClusterGroup( hCluster, DemoGroupName );
    if ( hGroup == NULL )
    {
        error = GetLastError();
        wprintf( L"Failed to open cluster group " DemoGroupName L": 0x%x\n", error );
        goto Cleanup;
    }

    // Offlining Group example
    error = OfflineClusterGroupEx(hGroup, CLUSAPI_GROUP_OFFLINE_IGNORE_RESOURCE_STATUS, NULL, 0);
    if ( error == ERROR_IO_PENDING  )
    {
        if (WaitForGroupToGoOffline(hGroup))
        {
            error = ERROR_SUCCESS;
        }
    }
    if ( error )
    {
        wprintf( L"Failed to offline the group" DemoGroupName L": 0x%x\n", error );
        goto Cleanup;
    }
    else
    {
        wprintf( L"Offlined the group" DemoGroupName);
    }


Cleanup:

    if ( hGroup != NULL )
    {
        CloseClusterGroup( hGroup );
        hGroup = NULL;
    }
    if ( hCluster != NULL )
    {
        CloseCluster( hCluster );
        hCluster = NULL;
    }

    return (int)error;
}

要件

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