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 |