共用方式為


ResUtilPropertyListFromParameterBlock 函式 (resapi.h)

屬性數據表參數區塊建構屬性清單

語法

DWORD ResUtilPropertyListFromParameterBlock(
  [in]            const PRESUTIL_PROPERTY_ITEM pPropertyTable,
  [out, optional] PVOID                        pOutPropertyList,
  [in, out]       LPDWORD                      pcbOutPropertyListSize,
  [in]            const LPBYTE                 pInParams,
  [out]           LPDWORD                      pcbBytesReturned,
  [out]           LPDWORD                      pcbRequired
);

參數

[in] pPropertyTable

屬性數據表的指標,描述結果屬性清單中將包含的屬性。

[out, optional] pOutPropertyList

接收屬性清單之輸出緩衝區的指標。

[in, out] pcbOutPropertyListSize

以位元組為單位輸出緩衝區大小的指標。

[in] pInParams

儲存屬性值的參數區塊指標。

[out] pcbBytesReturned

如果函式傳回 ERROR_SUCCESS則 azureBytesReturned 會指向 pOutPropertyList 所指向之屬性列表的實際位元組大小。 如果函式未傳回 ERROR_SUCCESS則ERROR_SUCCESS會指向 # 0。

[out] pcbRequired

如果函式傳回 ERROR_MORE_DATA則ERROR_MORE_DATA會 指向包含屬性清單所需的位元組大小。 如果函式未傳回 ERROR_MORE_DATA則ERROR_MORE_DATA會指向 # 0。

傳回值

如果作業成功,函式會傳回 ERROR_SUCCESS

如果作業失敗,函式會傳回 系統錯誤碼。 以下是可能的錯誤碼。

傳回碼 Description
ERROR_MORE_DATA
輸出緩衝區太小而無法包含產生的屬性清單。
ERROR_BAD_ARGUMENTS
一或多個輸入參數無效。
ERROR_NOT_ENOUGH_MEMORY
配置記憶體時發生錯誤。

備註

在此函式中,屬性數據表會決定屬性出現在屬性清單中的順序,以及每個屬性的名稱和格式。 函式會讀取屬性表,以判斷每個屬性的名稱和格式。

參數區塊提供屬性值。

範例

下列範例會定義通訊協定、PortNumber 和 ConnectionName () 三個屬性。 它會使用 ResUtilPropertyListFromParameterBlock 函式來建立屬性清單。 此範例使用故障轉移叢集檔中定義的 ClusDocEx.h 頭檔。

//////////////////////////////////////////////////////////////////////

//  Be sure to create the following file before you compile.
//  For a code listing, see "ClusDocEx.h".
    #include "ClusDocEx.h"

//////////////////////////////////////////////////////////////////////

//  This example defines three fictional properties: 
//      Protocol (DWORD)
//      PortNumber (DWORD)
//      ConnectionName (PWSTR)
//  These properties are not associated with any cluster object.
//  They are used only to demonstrate the
//  ResUtilPropertyListFromParameterBlock function.

//  Protocol property constants
    #define PROP_NAME__PROTOCOL       L"Protocol"
    typedef enum PROTOCOLS{
        PROTOCOL_NONE = 0,
        PROTOCOL_BOTH = 1,
        PROTOCOL_TCP  = 2,
        PROTOCOL_UDP  = 3
    };
    #define PROP_MIN__PROTOCOL       (PROTOCOL_NONE)
    #define PROP_MAX__PROTOCOL       (PROTOCOL_UDP)
    #define PROP_DEFAULT__PROTOCOL   (PROTOCOL_BOTH)

//  PortNumber property
    #define PROP_NAME__PORTNUMBER     L"PortNumber"
    #define PROP_MIN__PORTNUMBER      (0)
    #define PROP_MAX__PORTNUMBER      (65536)
    #define PROP_DEFAULT__PORTNUMBER  (80)

//  ConnectionName property
    #define PROP_NAME__CONNECTIONNAME L"ConnectionName"

//  Parameter block
    typedef struct _PARAMBLOCK{
        DWORD dwProtocol;
        DWORD dwPortNumber;
        PWSTR pszConnectionName;
    } PARAMBLOCK; 
    
//  Property table
    RESUTIL_PROPERTY_ITEM
    pPropTable[] =
    {
        {   PROP_NAME__PROTOCOL, 
            NULL, 
            CLUSPROP_FORMAT_DWORD, 
            PROP_DEFAULT__PROTOCOL, 
            PROP_MIN__PROTOCOL, 
            PROP_MAX__PROTOCOL, 
            RESUTIL_PROPITEM_REQUIRED,  
            FIELD_OFFSET( _PARAMBLOCK, dwProtocol )        },

        {   PROP_NAME__PORTNUMBER,
            NULL, 
            CLUSPROP_FORMAT_DWORD, 
            PROP_DEFAULT__PORTNUMBER, 
            PROP_MIN__PORTNUMBER, 
            PROP_MAX__PORTNUMBER, 
            RESUTIL_PROPITEM_REQUIRED, 
            FIELD_OFFSET( _PARAMBLOCK, dwPortNumber )      },

        {   PROP_NAME__CONNECTIONNAME, 
            NULL, 
            CLUSPROP_FORMAT_SZ, 
                0, 0, 0, 0,
            FIELD_OFFSET( _PARAMBLOCK, pszConnectionName ) },

        { 0 }
    };

    int main()
    {
        DWORD nResult    = ERROR_SUCCESS,
              cbBufSize  = 1024,
              cbReturned = 0,
              cbRequired = 0;

        PVOID pPropList = LocalAlloc( LPTR, cbBufSize );

    //  Values for the property list
        PARAMBLOCK NewParams = { PROTOCOL_TCP, 21, L"FTP" };

        nResult = ResUtilPropertyListFromParameterBlock(
                      pPropTable,
                      pPropList,
                      &cbBufSize,
                      (LPBYTE) &NewParams,
                      &cbReturned,
                      &cbRequired );

        if( nResult == ERROR_MORE_DATA )
        {
            LocalFree( pPropList );

            cbBufSize = cbRequired;
            
            pPropList = LocalAlloc( LPTR, cbBufSize );

            nResult = ResUtilPropertyListFromParameterBlock(
                          pPropTable,
                          pPropList,
                          &cbBufSize,
                          (PBYTE) &NewParams,
                          &cbReturned,
                          &cbRequired );
        }

        ClusDocEx_DebugPrint( L"Results:", nResult );

        if( nResult == ERROR_SUCCESS )
            ClusDocEx_ShowBuffer( pPropList, cbReturned );    
    
        LocalFree( pPropList );
    
        return (int)( nResult != ERROR_SUCCESS );    
    }

規格需求

需求
最低支援的用戶端 都不支援
最低支援的伺服器 Windows Server 2008 Enterprise、Windows Server 2008 Datacenter
目標平台 Windows
標頭 resapi.h
程式庫 ResUtils.lib
Dll ResUtils.dll

另請參閱

RESUTIL_PROPERTY_ITEM