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 と同様に、OfflineClusterGroupEx がERROR_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 |