IDiaDataSource::getStreamRawData
Извлекает необработанные байты именованного потока.
Синтаксис
HRESULT getStreamRawData (
LPCOLESTR stream,
ULONGLONG cbOffset,
ULONGLONG cbRead,
ULONGLONG* pcbRead,
BYTE* pbData
);
Параметры
stream
[in] Имя потока в сведениях отладки.
cbOffset
[in] Смещение в потоке для начала чтения данных.
cbRead
[in] Число извлекаемых байтов.
pcbRead
[out] Количество байтов, фактически считываемых из потока.
pbData
[out] Расположение для хранения данных чтения. Для входных данных должно быть не менее cbRead
байтов в размере. После успешного возврата *pcbRead
байт будет допустимым.
Возвращаемое значение
В случае успеха возвращает S_OK
. Если именованный поток не существует в PDB, API может завершиться ошибкой или вернуть длину 0.
Замечания
Базы данных программы состоят из нескольких потоков данных. Некоторые из этих потоков называются. Этот метод можно использовать для сбора сведений об этих именованных потоках.
Чтобы получить размер потока, используйте IDiaDataSourceEx::getStreamSize
метод.
Пример
ULONGLONG countBytes = 0;
LPCOLESTR stream = L"/names";
HRESULT hr = pSource->getStreamSize( stream, &countBytes );
if (SUCCEEDED(hr)) {
for (ULONGLONG cbOffset = 0, cbRead = 0; cbOffset < countBytes; cbOffset += cbRead) {
BYTE buffer[100];
cbRead = 0;
hr = pSource->getStreamRawBytes( stream, cbOffset, std::min(countBytes - cbOffset, sizeof(buffer)), &cbRead, buffer);
if (SUCCEEDED(hr)) {
...