ResUtilEnumResources 函数 (resapi.h)

枚举本地群集中的所有资源,并为每个资源启动用户定义的操作。 PRESUTIL_ENUM_RESOURCES类型定义指向此函数的指针。

语法

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

参数

[in] hSelf

群集资源的可选句柄。 不会为 hSelf 标识的资源调用回调函数。

[in] lpszResTypeName

指向 资源类型 名称的可选指针,该名称可缩小要枚举的资源范围。 如果指定 了 lpszResTypeName ,则仅枚举指定类型的资源。

[in] pResCallBack

指向将为每个枚举资源调用的用户定义函数的指针。 此函数必须符合 ResourceCallback 回调函数的定义, (请注意,参数名称不是定义的一部分;为清楚起见,已在此处添加它们,) :

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

[in] pParameter

一个泛型缓冲区,可用于将任何类型的数据传递给回调函数。 ResUtilEnumResources 根本不使用此参数,它只是将指针传递到回调函数。 能否为 参数传递 NULL 取决于回调函数的实现方式。

返回值

如果操作成功,或者 pResCallBack 返回 ERROR_NO_MORE_ITEMS,则函数将返回 ERROR_SUCCESS

如果操作失败,函数会立即停止枚举并返回回调函数返回的值。

注解

ResUtilEnumResourcesClusterResourceEnum 函数的一种方便且易于使用的替代方法。

ResUtilEnumResources 必须在群集节点上运行,因为它仅连接到本地群集。 ResUtilEnumResourcesEx 函数允许指定远程群集。

以下示例使用 ResUtilEnumResources 列出群集中所有资源的名称和状态。

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

要求

要求
最低受支持的客户端 无受支持的版本
最低受支持的服务器 Windows Server 2008 企业版、Windows Server 2008 Datacenter
目标平台 Windows
标头 resapi.h
Library ResUtils.lib
DLL ResUtils.dll

另请参阅

ClusterOpenEnum

OpenCluster

资源实用工具函数

ResourceCallback