MsiRecordReadStream 함수(msiquery.h)

MsiRecordReadStream 함수는 레코드 스트림 필드에서 버퍼로 바이트를 읽습니다.

구문

UINT MsiRecordReadStream(
  [in]      MSIHANDLE hRecord,
  [in]      UINT      iField,
  [out]     char      *szDataBuf,
  [in, out] LPDWORD   pcbDataBuf
);

매개 변수

[in] hRecord

레코드에 대한 핸들입니다.

[in] iField

레코드의 필드를 지정합니다.

[out] szDataBuf

스트림 필드를 받을 버퍼입니다. 대상 버퍼의 크기가 원본 버퍼보다 크거나 같은지 확인해야 합니다. 주의 섹션을 참조하십시오.

[in, out] pcbDataBuf

in 및 out 버퍼 수를 지정합니다. 입력에서 버퍼의 전체 크기입니다. 출력에서 실제로 버퍼에 기록된 바이트 수입니다. 주의 섹션을 참조하십시오.

반환 값

이 함수는 UINT를 반환합니다.

설명

스트림을 읽으려면 pcbDataBuf 를 함수가 호출될 때마다 스트림에서 버퍼로 전송할 바이트 수로 설정합니다. 반환 시 MsiRecordReadStreampcbDataBuf 를 실제로 전송된 바이트 수로 다시 설정합니다. 버퍼가 스트림보다 작은 경우 버퍼가 가득 차면 스트림의 다음 데이터가 함수에 대한 다음 호출에 의해 전송되도록 스트림의 위치가 변경됩니다. 더 이상 바이트를 사용할 수 없는 경우 MsiRecordReadStream 은 ERROR_SUCCESS 반환합니다.

szDataBuf에 대해 0을 전달하면 pcbDataBuf가 읽을 남은 스트림의 바이트 수로 다시 설정됩니다.

다음 코드 샘플은 hRecord로 지정된 레코드의 필드 1에 있는 스트림에서 읽고 한 번에 전체 스트림 8바이트를 읽습니다.

char szBuffer[8];
PMSIHANDLE hRecord;
DWORD cbBuf = sizeof(szBuffer);
do 
{
    if (MsiRecordReadStream(hRecord, 1, szBuffer, 
        &cbBuf) != ERROR_SUCCESS)
        break; /* error */
}
while (cbBuf == 8);  //continue reading the stream while you receive a full buffer
//cbBuf will be less once you reach the end of the stream and cannot fill your 
//buffer with stream data

스트림에 대한 OLE 제한 사항도 참조하세요.

요구 사항

   
지원되는 최소 클라이언트 Windows Server 2012, Windows 8, Windows Server 2008 R2 또는 Windows 7의 Windows Installer 5.0. Windows Server 2008 또는 Windows Vista의 Windows Installer 4.0 또는 Windows Installer 4.5. Windows Server 2003 또는 Windows XP의 Windows Installer
대상 플랫폼 Windows
헤더 msiquery.h
라이브러리 Msi.lib
DLL Msi.dll

추가 정보

레코드 처리 함수