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