Partager via


Fonction OfflineClusterResourceEx (clusapi.h)

Étend la méthode OfflineClusterResource . Le client peut utiliser les indicateurs pour contrôler les stratégies de la ressource et la mémoire tampon d’entrée pour envoyer des instructions spécifiques pour l’opération hors connexion à la ressource. Par instance, la mémoire tampon d’entrée peut être utilisée pour indiquer à une machine virtuelle de passer hors connexion en enregistrant son état plutôt qu’en l’arrêtant.

Syntaxe

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

Paramètres

[in] hResource

Handle d’une ressource de cluster.

[in] dwOfflineFlags

Indicateurs qui influencent la stratégie hors connexion.

Ce paramètre peut être défini sur une ou plusieurs des valeurs suivantes :

CLUSAPI_RESOURCE_OFFLINE_IGNORE_RESOURCE_STATUS (0x00000001)

Ignorez le status de la ressource si la ressource est verrouillée.

CLUSAPI_RESOURCE_OFFLINE_FORCE_WITH_TERMINATION (0x00000002)

La ressource doit être marquée comme indisponible et s’arrêter sans attendre que le processus de nettoyage se termine.

CLUSAPI_RESOURCE_OFFLINE_REASON_NONE (0x00000000)

Aucun indicateur n'est spécifié.

Windows Server 2012 : cette valeur n’est pas prise en charge avant Windows Server 2012 R2.

CLUSAPI_RESOURCE_OFFLINE_REASON_UNKNOWN (0x00000001)

La raison est inconnue.

Windows Server 2012 : cette valeur n’est pas prise en charge avant Windows Server 2012 R2.

CLUSAPI_RESOURCE_OFFLINE_REASON_MOVING (0x00000002)

La ressource est déplacée vers un autre nœud.

Windows Server 2012 : cette valeur n’est pas prise en charge avant Windows Server 2012 R2.

CLUSAPI_RESOURCE_OFFLINE_REASON_USER_REQUESTED (0x00000004)

Il y a eu une demande d’utilisateur pour mettre la ressource hors connexion.

Windows Server 2012 : cette valeur n’est pas prise en charge avant Windows Server 2012 R2.

CLUSAPI_RESOURCE_OFFLINE_REASON_BEING_DELETED (0x00000008)

La ressource est en cours de suppression.

Windows Server 2012 : cette valeur n’est pas prise en charge avant Windows Server 2012 R2.

CLUSAPI_RESOURCE_OFFLINE_REASON_BEING_RESTARTED (0x00000010)

La ressource est en cours de redémarrage.

Windows Server 2012 : cette valeur n’est pas prise en charge avant Windows Server 2012 R2.

CLUSAPI_RESOURCE_OFFLINE_REASON_PREEMPTED (0x00000020)

La ressource a connu un échec préemptif.

Windows Server 2012 : cette valeur n’est pas prise en charge avant Windows Server 2012 R2.

CLUSAPI_RESOURCE_OFFLINE_REASON_SHUTTING_DOWN (0x00000040)

La ressource s’arrête.

Windows Server 2012 : cette valeur n’est pas prise en charge avant Windows Server 2012 R2.

[in] lpInBuffer

Contient des instructions pour l’opération hors connexion qui ciblent la ressource spécifique. lpInBuffer est mis en forme sous forme de liste de propriétés, ce qui signifie que les instructions sont contenues dans les valeurs de propriété. La DLL de ressource recherche dans la liste des propriétés les noms de propriétés qu’elle prend en charge pour les opérations hors connexion, puis interprète les instructions dans la valeur de propriété associée. Notez que les propriétés prises en charge par une ressource dans une opération OfflineClusterResourceEx ne sont pas liées aux propriétés privées associées à une ressource.

[in] cbInBufferSize

Taille de lpInBuffer, en octets.

Valeur retournée

OfflineClusterResourceEx retourne ERROR_IO_PENDING si la commande hors connexion a été acceptée et est en cours. OfflineClusterResourceEx retourne un code d’erreur différent de zéro si la commande hors connexion a été rejetée immédiatement sans modification de l’état des ressources.

Remarques

OfflineClusterResourceEx échoue immédiatement avec l’erreur ERROR_CLUSTER_RESOURCE_LOCKED_STATUS si l’indicateur CLUSAPI_RESOURCE_OFFLINE_IGNORE_RESOURCE_LOCKED_STATUS n’est pas défini et que la ressource a indiqué qu’elle est « verrouillée » dans son état actuel.

Comme pour MoveClusterGroupEx, si OfflineClusterResourceEx retourne ERROR_IO_PENDING, le service de cluster tente d’amener la ressource à l’état hors connexion.

OfflineClusterResourceEx nécessite que le client bénéficie d’un accès complet dans le descripteur de sécurité du cluster.

Exemples

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

Configuration requise

Condition requise Valeur
Client minimal pris en charge Aucun pris en charge
Serveur minimal pris en charge Windows Server 2012
Plateforme cible Windows
En-tête clusapi.h
Bibliothèque ClusAPI.lib
DLL ClusAPI.dll