Freigeben über


OfflineClusterGroupEx-Funktion (clusapi.h)

Erweitert die OfflineClusterGroup-Methode . Der Client kann die Flags verwenden, um Failoverrichtlinien der Gruppe und den Eingabepuffer zu steuern, um spezifische Anweisungen für den Offlinevorgang an die Ressourcen in der Zielgruppe zu senden. Für instance kann der Eingabepuffer verwendet werden, um einen virtuellen Computer anzuweisen, offline zu gehen, indem er seinen Zustand speichert und nicht heruntergefahren wird.

Syntax

DWORD OfflineClusterGroupEx(
  [in] HGROUP hGroup,
  [in] DWORD  dwOfflineFlags,
       PBYTE  lpInBuffer,
  [in] DWORD  cbInBufferSize
);

Parameter

[in] hGroup

Das Handle für eine Clustergruppe.

[in] dwOfflineFlags

Flags, die die Offlinerichtlinie beeinflussen. Zusammen mit 0x0 ist folgendes ein akzeptabler Wert: CLUSAPI_GROUP_OFFLINE_IGNORE_RESOURCE_LOCKED_STATUS (0x00000001): Ignorieren Sie, wenn eine Ressource angegeben hat, dass sie im aktuellen Zustand "gesperrt" sein soll.

lpInBuffer

Enthält Anweisungen für den Offlinevorgang, die auf bestimmte Ressourcen innerhalb der Gruppe ausgerichtet sind. lpInBuffer ist als Eigenschaftsliste formatiert, was bedeutet, dass die Anweisungen in Eigenschaftenwerten enthalten sind. Ressourcen in der Gruppe durchsuchen die Eigenschaftenliste nach Eigenschaftennamen, die sie für Offlinevorgänge unterstützen, und interpretieren dann die Anweisungen im zugeordneten Eigenschaftswert. Beachten Sie, dass die von einer Ressource in einem OfflineClusterGroupEx-Vorgang unterstützten Eigenschaften nicht mit den privaten Eigenschaften zusammenhängen, die einer Ressource zugeordnet sind.

[in] cbInBufferSize

Die Größe von lpInBuffer in Bytes.

Rückgabewert

OfflineClusterGroupEx gibt ERROR_IO_PENDING zurück, wenn der Offlinebefehl akzeptiert wurde und in Bearbeitung ist. OfflineClusterGroupEx gibt einen nonzero-Fehlercode zurück, wenn der Offlinebefehl sofort ohne Änderungen am Gruppenstatus abgelehnt wurde.

Hinweise

OfflineClusterGroupEx schlägt sofort mit fehler ERROR_CLUSTER_RESOURCE_LOCKED_STATUS fehl, wenn das CLUSAPI_OFFLINE_GROUP_IGNORE_RESOURCE_LOCKED_STATUS-Flag nicht festgelegt ist und jede Ressource in der Gruppe angegeben hat, dass sie im aktuellen Zustand "gesperrt" ist.

Ähnlich wie MoveClusterGroupEx versucht der Clusterdienst, die Gruppe in den Offlinezustand zu versetzen, wenn OfflineClusterGroupExERROR_IO_PENDING zurückgibt.

OfflineClusterGroupEx erfordert, dass dem Client vollzugriff im Clustersicherheitsdeskriptor gewährt wird.

Beispiele

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

Anforderungen

   
Unterstützte Mindestversion (Client) Nicht unterstützt
Unterstützte Mindestversion (Server) Windows Server 2012
Zielplattform Windows
Kopfzeile clusapi.h
Bibliothek ClusAPI.lib
DLL ClusAPI.dll