Compartir a través de


Función OfflineClusterResourceEx (clusapi.h)

Extiende el método OfflineClusterResource . El cliente puede usar las marcas para controlar las directivas del recurso y el búfer de entrada para enviar instrucciones específicas para la operación sin conexión al recurso. 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 OfflineClusterResourceEx(
  [in] HRESOURCE hResource,
  [in] DWORD     dwOfflineFlags,
  [in] PBYTE     lpInBuffer,
  [in] DWORD     cbInBufferSize
);

Parámetros

[in] hResource

Identificador de un recurso de clúster.

[in] dwOfflineFlags

Marcas que influyen en la directiva sin conexión.

Este parámetro se puede establecer en uno o varios de los valores siguientes:

CLUSAPI_RESOURCE_OFFLINE_IGNORE_RESOURCE_STATUS (0x00000001)

Omita el estado del recurso si el recurso está bloqueado.

CLUSAPI_RESOURCE_OFFLINE_FORCE_WITH_TERMINATION (0x00000002)

El recurso debe marcarse como no disponible y apagarse sin esperar a que se complete el proceso de limpieza.

CLUSAPI_RESOURCE_OFFLINE_REASON_NONE (0x00000000)

No hay marcas especificadas.

Windows Server 2012: este valor no se admite antes de Windows Server 2012 R2.

CLUSAPI_RESOURCE_OFFLINE_REASON_UNKNOWN (0x00000001)

La razón es desconocida.

Windows Server 2012: este valor no se admite antes de Windows Server 2012 R2.

CLUSAPI_RESOURCE_OFFLINE_REASON_MOVING (0x00000002)

El recurso se mueve a otro nodo.

Windows Server 2012: este valor no se admite antes de Windows Server 2012 R2.

CLUSAPI_RESOURCE_OFFLINE_REASON_USER_REQUESTED (0x00000004)

Hubo una solicitud de usuario para desconectar el recurso.

Windows Server 2012: este valor no se admite antes de Windows Server 2012 R2.

CLUSAPI_RESOURCE_OFFLINE_REASON_BEING_DELETED (0x00000008)

Se está eliminando el recurso.

Windows Server 2012: este valor no se admite antes de Windows Server 2012 R2.

CLUSAPI_RESOURCE_OFFLINE_REASON_BEING_RESTARTED (0x00000010)

Se está reiniciando el recurso.

Windows Server 2012: este valor no se admite antes de Windows Server 2012 R2.

CLUSAPI_RESOURCE_OFFLINE_REASON_PREEMPTED (0x00000020)

El recurso tuvo un error preferente.

Windows Server 2012: este valor no se admite antes de Windows Server 2012 R2.

CLUSAPI_RESOURCE_OFFLINE_REASON_SHUTTING_DOWN (0x00000040)

El recurso se está cerrando.

Windows Server 2012: este valor no se admite antes de Windows Server 2012 R2.

[in] lpInBuffer

Contiene instrucciones para la operación sin conexión destinada al recurso específico. lpInBuffer tiene el formato de lista de propiedades, lo que significa que las instrucciones están contenidas en los valores de propiedad. El archivo DLL de recursos busca en la lista de propiedades los nombres de propiedad que admite para las operaciones sin conexión y, a continuación, interpreta las instrucciones del valor de propiedad asociado. Tenga en cuenta que las propiedades admitidas por un recurso en una operación OfflineClusterResourceEx no están relacionadas con las propiedades privadas asociadas a un recurso.

[in] cbInBufferSize

Tamaño de lpInBuffer, en bytes.

Valor devuelto

OfflineClusterResourceEx devuelve ERROR_IO_PENDING si se ha aceptado el comando sin conexión y está en curso. OfflineClusterResourceEx devuelve un código de error distinto de cero si el comando sin conexión se rechazó inmediatamente sin cambios en el estado del recurso.

Comentarios

OfflineClusterResourceEx produce un error inmediatamente ERROR_CLUSTER_RESOURCE_LOCKED_STATUS si no se establece la marca CLUSAPI_RESOURCE_OFFLINE_IGNORE_RESOURCE_LOCKED_STATUS y el recurso ha indicado que está "bloqueado" en su estado actual.

De forma similar a MoveClusterGroupEx, si OfflineClusterResourceEx devuelve ERROR_IO_PENDING, el servicio de clúster intentará llevar el recurso al estado sin conexión.

OfflineClusterResourceEx 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 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;
}

Requisitos

Requisito Value
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