Función OfflineClusterGroupEx (clusapi.h)
Extiende el método OfflineClusterGroup . El cliente puede usar las marcas para controlar las directivas de conmutación por error del grupo y el búfer de entrada para enviar instrucciones específicas para la operación sin conexión a los recursos del grupo de destino. Por ejemplo, el búfer de entrada se puede usar para indicar a una máquina virtual que se desconecte guardando su estado en lugar de apagarse.
Sintaxis
DWORD OfflineClusterGroupEx(
[in] HGROUP hGroup,
[in] DWORD dwOfflineFlags,
PBYTE lpInBuffer,
[in] DWORD cbInBufferSize
);
Parámetros
[in] hGroup
Identificador de un grupo de clústeres.
[in] dwOfflineFlags
Marcas que influyen en la directiva sin conexión. Junto con 0x0, lo siguiente es un valor aceptable: CLUSAPI_GROUP_OFFLINE_IGNORE_RESOURCE_LOCKED_STATUS (0x00000001 ): omite si un recurso ha indicado que debe estar "bloqueado" en su estado actual.
lpInBuffer
Contiene instrucciones para la operación sin conexión destinada a recursos específicos dentro del grupo. lpInBuffer tiene el formato de lista de propiedades, lo que significa que las instrucciones están contenidas en los valores de propiedad. Los recursos del grupo buscan en la lista de propiedades los nombres de propiedad que admiten para las operaciones sin conexión y, a continuación, interpretan las instrucciones del valor de propiedad asociado. Tenga en cuenta que las propiedades admitidas por un recurso en una operación OfflineClusterGroupEx no están relacionadas con las propiedades privadas asociadas a un recurso.
[in] cbInBufferSize
Tamaño de lpInBuffer, en bytes.
Valor devuelto
OfflineClusterGroupEx devuelve ERROR_IO_PENDING si se ha aceptado el comando sin conexión y está en curso. OfflineClusterGroupEx devuelve un código de error distinto de cero si el comando sin conexión se rechazó inmediatamente sin cambios en el estado del grupo.
Comentarios
OfflineClusterGroupEx produce un error inmediatamente con el error ERROR_CLUSTER_RESOURCE_LOCKED_STATUS si la marca de CLUSAPI_OFFLINE_GROUP_IGNORE_RESOURCE_LOCKED_STATUS no está establecida y cualquier recurso del grupo ha indicado que está "bloqueado" en su estado actual.
De forma similar a MoveClusterGroupEx, si OfflineClusterGroupEx devuelve ERROR_IO_PENDING, el servicio de clúster intentará llevar el grupo al estado sin conexión.
OfflineClusterGroupEx requiere que al cliente se le conceda acceso completo en el descriptor de seguridad del clúster.
Ejemplos
#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;
}
Requisitos
Cliente mínimo compatible | No se admite ninguno |
Servidor mínimo compatible | Windows Server 2012 |
Plataforma de destino | Windows |
Encabezado | clusapi.h |
Library | ClusAPI.lib |
Archivo DLL | ClusAPI.dll |