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 将返回非零错误代码。

备注

如果未设置CLUSAPI_OFFLINE_GROUP_IGNORE_RESOURCE_LOCKED_STATUS标志,并且组中的任何资源指示其处于当前状态“锁定”,则 OfflineClusterGroupEx 会立即失败并出现错误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