Функция 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 |