Freigeben über


ResUtilEnumResources-Funktion (resapi.h)

Listet alle Ressourcen im lokalen Cluster auf und initiiert einen benutzerdefinierten Vorgang für jede Ressource. Der PRESUTIL_ENUM_RESOURCES Typ definiert einen Zeiger auf diese Funktion.

Syntax

DWORD ResUtilEnumResources(
  [in] HRESOURCE           hSelf,
  [in] LPCWSTR             lpszResTypeName,
  [in] LPRESOURCE_CALLBACK pResCallBack,
  [in] PVOID               pParameter
);

Parameter

[in] hSelf

Optionales Handle für eine Clusterressource. Die Rückruffunktion wird für eine von hSelf identifizierte Ressource nicht aufgerufen.

[in] lpszResTypeName

Optionaler Zeiger auf einen Namen eines Ressourcentyps , der den Bereich der aufzuzählenden Ressourcen einschränkt. Wenn lpszResTypeName angegeben ist, werden nur Ressourcen des angegebenen Typs aufgelistet.

[in] pResCallBack

Zeiger auf eine benutzerdefinierte Funktion, die für jede enumerierte Ressource aufgerufen wird. Diese Funktion muss der Definition der ResourceCallback-Rückruffunktion entsprechen (beachten Sie, dass Parameternamen nicht Teil der Definition sind; sie wurden hier aus Gründen der Übersichtlichkeit hinzugefügt):

DWORD (*LPRESOURCE_CALLBACK)( 
  HRESOURCE hSelf, 
  HRESOURCE hEnum, 
  PVOID pParameter 
);

[in] pParameter

Ein generischer Puffer, mit dem Sie jede Art von Daten an die Rückruffunktion übergeben können. ResUtilEnumResources verwendet diesen Parameter überhaupt nicht, sondern übergibt lediglich den Zeiger auf die Rückruffunktion. Ob Sie NULL für den Parameter übergeben können, hängt davon ab, wie die Rückruffunktion implementiert ist.

Rückgabewert

Wenn der Vorgang erfolgreich ist oder pResCallBackERROR_NO_MORE_ITEMS zurückgibt, gibt die Funktion ERROR_SUCCESS zurück.

Wenn der Vorgang fehlschlägt, hält die Funktion die Enumeration sofort an und gibt den von der Rückruffunktion zurückgegebenen Wert zurück.

Hinweise

ResUtilEnumResources ist eine praktische und benutzerfreundliche Alternative zur ClusterResourceEnum-Funktion .

ResUtilEnumResources muss auf einem Clusterknoten ausgeführt werden, da nur eine Verbindung mit dem lokalen Cluster hergestellt wird. Mit der ResUtilEnumResourcesEx-Funktion können Sie einen Remotecluster angeben.

Im folgenden Beispiel wird ResUtilEnumResources verwendet, um die Namen und Zustände aller Ressourcen im Cluster aufzulisten.

//////////////////////////////////////////////////////////////////////
//  ClusDocEx_EnumDemo.cpp
//
//  Uses the ResUtilEnumResources function to list the names and 
//  states of all cluster resources.
//
//  To compile and run this example you will need two other examples 
//  from the documentation:  ClusDocEx.h (see "ClusDocEx.h") and 
//  ClusDocEx_GetControlCodeOutput.cpp (see "Getting Information with 
//  Control Codes").
// 
//////////////////////////////////////////////////////////////////////
#include "ClusDocEx.h"
#include "ClusDocEx_GetControlCodeOutput.cpp"

DWORD
MyCallbackFunction(
    HRESOURCE hSelf,
    HRESOURCE hCurrentEnum,
    PVOID pData );

LPRESOURCE_CALLBACK g_pMyCallbackFunction = &MyCallbackFunction;

int main( void )
{
    wprintf( L"\n\nResource (State)\n----------------\n" );
    DWORD dwResult = ResUtilEnumResources( 
                         NULL, 
                         NULL, 
                         g_pMyCallbackFunction, 
                         NULL );
    if( dwResult != ERROR_SUCCESS )
    {
        ClusDocEx_DebugPrint( L"ResUtilEnumResources returned an error.", dwResult );
        return 1;
    }
    else
        return 0;
}

DWORD
MyCallbackFunction(
    HRESOURCE hSelf,
    HRESOURCE hCurrentEnum,
    PVOID pData )
{
    DWORD dwResult           = ERROR_SUCCESS,
          cbNameSize         = 0, 
          dwState            = 0;

    WCHAR* pszState    = NULL;
    WCHAR* pszEnumName = ClusDocEx_ResGetControlCodeOutput(
                            hCurrentEnum,
                            NULL,
                            CLUSCTL_RESOURCE_GET_NAME,
                            &cbNameSize );
    if( pszEnumName == NULL )
    {
        dwResult = GetLastError();
        goto EndFunc;
    }

    dwState = GetClusterResourceState(
                  hCurrentEnum,
                  NULL,
                  NULL,
                  NULL,
                  NULL );
    switch( dwState )
    {
    case ClusterResourceOnline:
        pszState = L"Online";
        break;
    case ClusterResourceOffline:
        pszState = L"Offline";
        break;
    case ClusterResourcePending:
        pszState = L"Pending";
        break;
    case ClusterResourceOnlinePending:
        pszState = L"OnlinePending";
        break;
    case ClusterResourceOfflinePending:
        pszState = L"OfflinePending";
        break;
    case ClusterResourceFailed:
        pszState = L"Failed";
        break;
    case ClusterResourceInitializing:
        pszState = L"Initializing";
        break;
    default:
        pszState = L"Unknown";
        break;
    }
    wprintf( L"%ls (%ls)\n", pszEnumName, pszState );

EndFunc:
    LocalFree( pszEnumName );
    return dwResult;
}

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Nicht unterstützt
Unterstützte Mindestversion (Server) Windows Server 2008 Enterprise, Windows Server 2008 Datacenter
Zielplattform Windows
Kopfzeile resapi.h
Bibliothek ResUtils.lib
DLL ResUtils.dll

Weitere Informationen

ClusterOpenEnum

OpenCluster

Ressourcenhilfsprogrammfunktionen

ResourceCallback