Funzione OfflineClusterResourceEx (clusapi.h)
Estende il metodo OfflineClusterResource . Il client può usare i flag per controllare i criteri della risorsa e il buffer di input per inviare istruzioni specifiche per l'operazione offline alla risorsa. Ad esempio, il buffer di input può essere usato per indicare a una macchina virtuale di andare offline salvandone lo stato anziché arrestare.
Sintassi
DWORD OfflineClusterResourceEx(
[in] HRESOURCE hResource,
[in] DWORD dwOfflineFlags,
[in] PBYTE lpInBuffer,
[in] DWORD cbInBufferSize
);
Parametri
[in] hResource
Handle in una risorsa del cluster.
[in] dwOfflineFlags
Flag che influiscono sui criteri offline.
Questo parametro può essere impostato su uno o più dei valori seguenti:
CLUSAPI_RESOURCE_OFFLINE_IGNORE_RESOURCE_STATUS (0x00000001)
Ignorare lo stato della risorsa se la risorsa è bloccata.
CLUSAPI_RESOURCE_OFFLINE_FORCE_WITH_TERMINATION (0x00000002)
La risorsa deve essere contrassegnata come non disponibile e arrestata senza attendere il completamento del processo di pulizia.
CLUSAPI_RESOURCE_OFFLINE_REASON_NONE (0x00000000)
Nessun flag specificato.
Windows Server 2012: questo valore non è supportato prima di Windows Server 2012 R2.
CLUSAPI_RESOURCE_OFFLINE_REASON_UNKNOWN (0x00000001)
Il motivo è sconosciuto.
Windows Server 2012: questo valore non è supportato prima di Windows Server 2012 R2.
CLUSAPI_RESOURCE_OFFLINE_REASON_MOVING (0x00000002)
La risorsa viene spostata in un altro nodo.
Windows Server 2012: questo valore non è supportato prima di Windows Server 2012 R2.
CLUSAPI_RESOURCE_OFFLINE_REASON_USER_REQUESTED (0x00000004)
È stata richiesta all'utente di portare offline la risorsa.
Windows Server 2012: questo valore non è supportato prima di Windows Server 2012 R2.
CLUSAPI_RESOURCE_OFFLINE_REASON_BEING_DELETED (0x00000008)
La risorsa viene eliminata.
Windows Server 2012: questo valore non è supportato prima di Windows Server 2012 R2.
CLUSAPI_RESOURCE_OFFLINE_REASON_BEING_RESTARTED (0x00000010)
La risorsa viene riavviata.
Windows Server 2012: questo valore non è supportato prima di Windows Server 2012 R2.
CLUSAPI_RESOURCE_OFFLINE_REASON_PREEMPTED (0x00000020)
La risorsa ha avuto un errore preemptive.
Windows Server 2012: questo valore non è supportato prima di Windows Server 2012 R2.
CLUSAPI_RESOURCE_OFFLINE_REASON_SHUTTING_DOWN (0x00000040)
La risorsa viene arrestata.
Windows Server 2012: questo valore non è supportato prima di Windows Server 2012 R2.
[in] lpInBuffer
Contiene istruzioni per l'operazione offline destinata alla risorsa specifica. lpInBuffer viene formattato come elenco di proprietà, il che significa che le istruzioni sono contenute nei valori delle proprietà. La DLL di risorse cerca l'elenco delle proprietà per i nomi di proprietà supportati per le operazioni offline e quindi interpreta le istruzioni nel valore della proprietà associato. Si noti che le proprietà supportate da una risorsa in un'operazione OfflineClusterResourceEx non sono correlate alle proprietà private associate a una risorsa.
[in] cbInBufferSize
Dimensioni di lpInBuffer, in byte.
Valore restituito
OfflineClusterResourceEx restituisce ERROR_IO_PENDING se il comando offline è stato accettato ed è in corso. OfflineClusterResourceEx restituisce un codice di errore diverso da zero se il comando offline è stato rifiutato immediatamente senza modifiche allo stato della risorsa.
Commenti
OfflineClusterResourceEx non riesce immediatamente con l'errore ERROR_CLUSTER_RESOURCE_LOCKED_STATUS se il flag di CLUSAPI_RESOURCE_OFFLINE_IGNORE_RESOURCE_LOCKED_STATUS non è impostato e la risorsa ha indicato che è "bloccato" nello stato corrente.
Analogamente a MoveClusterGroupEx, se OfflineClusterResourceEx restituisce ERROR_IO_PENDING, il servizio cluster tenterà di portare la risorsa allo stato offline.
OfflineClusterResourceEx richiede che il client sia concesso l'accesso completo nel descrittore di sicurezza del cluster.
Esempio
#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;
}
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Nessuno supportato |
Server minimo supportato | Windows Server 2012 |
Piattaforma di destinazione | Windows |
Intestazione | clusapi.h |
Libreria | ClusAPI.lib |
DLL | ClusAPI.dll |