Win32 API 日本語リファレンス
ホーム › Networking.Clustering › PRESUTIL_PROPERTY_LIST_FROM_PARAMETER_BLOCK

PRESUTIL_PROPERTY_LIST_FROM_PARAMETER_BLOCK

コールバック

シグネチャ

DWORD PRESUTIL_PROPERTY_LIST_FROM_PARAMETER_BLOCK(
    RESUTIL_PROPERTY_ITEM* pPropertyTable,
    void* pOutPropertyList,
    DWORD* pcbOutPropertyListSize,
    BYTE* pInParams,
    DWORD* pcbBytesReturned,
    DWORD* pcbRequired
);

パラメーター

フィールド型説明
pPropertyTableRESUTIL_PROPERTY_ITEM*生成されるプロパティリストに含めるプロパティを記述したプロパティテーブルへのポインター。
pOutPropertyListvoid*プロパティリストを受け取る出力バッファーへのポインター。
pcbOutPropertyListSizeDWORD*出力バッファーのサイズ (バイト単位) へのポインター。
pInParamsBYTE*プロパティ値が格納されているパラメーターブロックへのポインター。
pcbBytesReturnedDWORD*関数が ERROR_SUCCESS を返した場合、pcbBytesReturned は pOutPropertyList が指すプロパティリストの実際のバイトサイズを指します。関数が ERROR_SUCCESS を返さなかった場合、pcbBytesReturned は値 0 を指します。
pcbRequiredDWORD*関数が ERROR_MORE_DATA を返した場合、pcbRequired はプロパティリストの格納に必要なバイトサイズを指します。関数が ERROR_MORE_DATA を返さなかった場合、pcbBytesReturned は値 0 を指します。

公式ドキュメント

プロパティテーブルと パラメーターブロックから プロパティリストを構築します。

戻り値

処理に成功した場合、この関数は ERROR_SUCCESS を返します。

処理に失敗した場合、この関数は システムエラーコードを返します。返される可能性のあるエラーコードは次のとおりです。

戻り値 説明
ERROR_MORE_DATA
出力バッファーが小さすぎて、生成されたプロパティリストを格納できません。
ERROR_BAD_ARGUMENTS
1 つ以上の入力パラメーターが無効です。
ERROR_NOT_ENOUGH_MEMORY
メモリの割り当て中にエラーが発生しました。

解説(Remarks)

この関数では、プロパティテーブルによって、プロパティリスト内でプロパティが現れる順序と、各プロパティの名前および形式が決まります。関数はプロパティテーブルを読み取って、各プロパティの名前と形式を判断します。

プロパティ値はパラメーターブロックから提供されます。

例

次の例では、3 つのプロパティ (Protocol、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 );    
    }
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)