Поделиться через


Функция OfflineClusterResourceEx (clusapi.h)

Расширяет метод OfflineClusterResource . Клиент может использовать флаги для управления политиками ресурса и входной буфер для отправки конкретных инструкций для автономной операции в ресурс. Например, входной буфер можно использовать для указания виртуальной машине перейти в автономный режим, сохранив ее состояние, а не завершение работы.

Синтаксис

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 возвращает ненулевой код ошибки, если автономная команда была немедленно отклонена без изменения состояния ресурса.

Комментарии

OfflineClusterResourceEx немедленно завершается сбоем с ошибкой ERROR_CLUSTER_RESOURCE_LOCKED_STATUS , если флаг CLUSAPI_RESOURCE_OFFLINE_IGNORE_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
Header clusapi.h
Библиотека ClusAPI.lib
DLL ClusAPI.dll