Поделиться через


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)) {
      ...

См. также