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 반환하는 경우 pcbBytesRe는pOutPropertyList가 가리키는 속성 목록의 실제 바이트 크기를 가리킵니다. 함수가 ERROR_SUCCESS 반환하지 않으면 pcbBytesRe는 0 값을 가리킵니다.

[out] pcbRequired

함수가 ERROR_MORE_DATA 반환하는 경우 pcbRequired는 속성 목록을 포함하는 데 필요한 바이트 크기를 가리킵니다. 함수가 ERROR_MORE_DATA 반환하지 않으면 pcbBytesRe는 0 값을 가리킵니다.

반환 값

작업이 성공하면 함수는 ERROR_SUCCESS 반환합니다.

작업이 실패하면 함수는 시스템 오류 코드를 반환합니다. 가능한 오류 코드는 다음과 같습니다.

반환 코드 설명
ERROR_MORE_DATA
출력 버퍼가 너무 작아 결과 속성 목록을 포함할 수 없습니다.
ERROR_BAD_ARGUMENTS
하나 이상의 입력 매개 변수가 잘못되었습니다.
ERROR_NOT_ENOUGH_MEMORY
메모리를 할당하는 동안 오류가 발생했습니다.

설명

이 함수에서 속성 테이블은 속성 목록에 속성이 표시되는 순서와 각 속성의 이름과 형식을 결정합니다. 함수는 속성 테이블을 읽어 각 속성의 이름과 형식을 결정합니다.

매개 변수 블록은 속성 값을 제공합니다.

예제

다음 예제에서는 세 가지 속성(Protocol, PortNumber 및 ConnectionName)을 정의합니다. ResUtilPropertyListFromParameterBlock 함수를 사용하여 속성 목록을 만듭니다. 이 예제에서는 장애 조치(failover) 클러스터 설명서에 정의된 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