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 を設定します。 返されると、 MsiRecordReadStream は pcbDataBuf を実際に転送されたバイト数にリセットします。 バッファーがストリームよりも小さい場合、バッファーがいっぱいになるとストリームの位置が変更され、ストリーム内の次のデータが関数の次の呼び出しによって転送されます。 これ以上バイトを使用できない場合、 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 インストーラー 5.0。 Windows Server 2008 または Windows Vista の Windows インストーラー 4.0 または Windows インストーラー 4.5。 Windows Server 2003 または Windows XP の Windows インストーラー |
対象プラットフォーム | Windows |
ヘッダー | msiquery.h |
Library | Msi.lib |
[DLL] | Msi.dll |