Compartilhar via


Função MsiRecordReadStream (msiquery.h)

A função MsiRecordReadStream lê bytes de um campo de fluxo de registro em um buffer.

Sintaxe

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

Parâmetros

[in] hRecord

Manipule para o registro.

[in] iField

Especifica o campo do registro.

[out] szDataBuf

Um buffer para receber o campo de fluxo. Você deve garantir que o buffer de destino tenha o mesmo tamanho ou maior que o buffer de origem. Consulte a seção Comentários.

[in, out] pcbDataBuf

Especifica a contagem de buffers de entrada e saída. Na entrada, esse é o tamanho total do buffer. Na saída, esse é o número de bytes que foram realmente gravados no buffer. Consulte a seção Comentários.

Valor retornado

Essa função retorna UINT.

Comentários

Para ler um fluxo, defina pcbDataBuf como o número de bytes que devem ser transferidos do fluxo para o buffer sempre que a função for chamada. No retorno, o MsiRecordReadStream redefine pcbDataBuf para o número de bytes que foram realmente transferidos. Se o buffer for menor que o fluxo, o fluxo será reposicionado quando o buffer ficar cheio de modo que os próximos dados no fluxo sejam transferidos pela próxima chamada para a função. Quando não há mais bytes disponíveis, MsiRecordReadStream retorna ERROR_SUCCESS.

Se você passar 0 para szDataBuf , pcbDataBuf será redefinido para o número de bytes no fluxo restante a ser lido.

O exemplo de código a seguir lê de um fluxo que está no campo 1 de um registro especificado por hRecord e lê o fluxo inteiro de 8 bytes por vez.

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

Consulte também Limitações de OLE em fluxos.

Requisitos

   
Cliente mínimo com suporte Windows Installer 5.0 no Windows Server 2012, no Windows 8, no Windows Server 2008 R2 ou no Windows 7. Windows Installer 4.0 ou Windows Installer 4.5 no Windows Server 2008 ou no Windows Vista. Windows Installer no Windows Server 2003 ou no Windows XP
Plataforma de Destino Windows
Cabeçalho msiquery.h
Biblioteca Msi.lib
DLL Msi.dll

Confira também

Funções de processamento de registro