OfflineClusterResourceEx 函数 (clusapi.h)

扩展 OfflineClusterResource 方法。 客户端可以使用 标志来控制资源和输入缓冲区的策略,以便将脱机操作的特定指令发送到资源。 例如,输入缓冲区可用于指示 VM 通过保存其状态(而不是关闭)使其脱机。

语法

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

参数

[in] hResource

群集资源的句柄。

[in] dwOfflineFlags

影响脱机策略的标志。

此参数可以设置为以下一个或多个值:

CLUSAPI_RESOURCE_OFFLINE_IGNORE_RESOURCE_STATUS (0x00000001)

如果资源已锁定,请忽略资源的状态。

CLUSAPI_RESOURCE_OFFLINE_FORCE_WITH_TERMINATION (0x00000002)

资源将被标记为不可用并关闭,而无需等待清理过程完成。

CLUSAPI_RESOURCE_OFFLINE_REASON_NONE (0x00000000)

未指定任何标志。

Windows Server 2012:在Windows Server 2012 R2 之前不支持此值。

CLUSAPI_RESOURCE_OFFLINE_REASON_UNKNOWN (0x00000001)

原因未知。

Windows Server 2012:在Windows Server 2012 R2 之前不支持此值。

CLUSAPI_RESOURCE_OFFLINE_REASON_MOVING (0x00000002)

资源正在移动到另一个节点。

Windows Server 2012:在Windows Server 2012 R2 之前不支持此值。

CLUSAPI_RESOURCE_OFFLINE_REASON_USER_REQUESTED (0x00000004)

用户请求使资源脱机。

Windows Server 2012:在Windows Server 2012 R2 之前不支持此值。

CLUSAPI_RESOURCE_OFFLINE_REASON_BEING_DELETED (0x00000008)

正在删除此资源。

Windows Server 2012:在Windows Server 2012 R2 之前不支持此值。

CLUSAPI_RESOURCE_OFFLINE_REASON_BEING_RESTARTED (0x00000010)

正在重启资源。

Windows Server 2012:在Windows Server 2012 R2 之前不支持此值。

CLUSAPI_RESOURCE_OFFLINE_REASON_PREEMPTED (0x00000020)

资源发生抢占性故障。

Windows Server 2012:在Windows Server 2012 R2 之前不支持此值。

CLUSAPI_RESOURCE_OFFLINE_REASON_SHUTTING_DOWN (0x00000040)

资源正在关闭。

Windows Server 2012:在Windows Server 2012 R2 之前不支持此值。

[in] lpInBuffer

包含针对特定资源的脱机操作的说明。 lpInBuffer 的格式设置为属性列表,这意味着指令包含在属性值中。 资源 DLL 在属性列表中搜索它支持脱机操作的属性名称,然后解释关联的属性值中的说明。 请注意, OfflineClusterResourceEx 操作中资源支持的属性与与资源关联的私有属性无关。

[in] cbInBufferSize

lpInBuffer 的大小(以字节为单位)。

返回值

OfflineClusterResourceEx 返回 ERROR_IO_PENDING 如果脱机命令已被接受并且正在进行。 如果脱机命令立即被拒绝且未更改资源状态,则 OfflineClusterResourceEx 将返回非零错误代码。

注解

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