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 |
---|---|
|
輸出緩衝區太小而無法包含產生的屬性清單。 |
|
一或多個輸入參數無效。 |
|
配置記憶體時發生錯誤。 |
備註
在此函式中,屬性數據表會決定屬性出現在屬性清單中的順序,以及每個屬性的名稱和格式。 函式會讀取屬性表,以判斷每個屬性的名稱和格式。
參數區塊提供屬性值。
範例
下列範例會定義通訊協定、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 |