kdlibcpp

Форк
0
/
tagged.cpp 
66 строк · 1.8 Кб
1

2
#include "stdafx.h"
3

4
#include "kdlib/tagged.h"
5
#include "win/dbgmgr.h"
6

7
namespace kdlib {
8

9
///////////////////////////////////////////////////////////////////////////////
10

11
std::list<TaggedId> enumTagged()
12
{
13
    ULONG64 handle{};
14
    auto hres = g_dbgMgr->dataspace->StartEnumTagged(&handle);
15
    if (S_OK != hres)
16
        throw DbgEngException(L"IDebugDataSpaces3::StartEnumTagged", hres);
17

18
    const auto enumDelete = 
19
        [](ULONG64 *handle)
20
        {
21
            const auto hres = g_dbgMgr->dataspace->EndEnumTagged(*handle);
22
            if (S_OK != hres)
23
                throw DbgEngException(L"IDebugDataSpaces3::EndEnumTagged", hres);
24
        };
25
    std::unique_ptr<ULONG64, decltype(enumDelete)> endGuard{&handle, enumDelete};
26

27
    std::list<TaggedId> result;
28
    for (; ; )
29
    {
30
        TaggedId id{};
31
        ULONG tmp{};
32
        hres = g_dbgMgr->dataspace->GetNextTagged(handle, &id, &tmp);
33
        if (S_FALSE == hres)
34
            break;
35

36
        if (S_OK != hres)
37
            throw DbgEngException(L"IDebugDataSpaces3::GetNextTagged", hres);
38

39
        result.emplace_back( std::move(id) );
40
    }
41
    return std::move(result);
42
}
43

44
///////////////////////////////////////////////////////////////////////////////
45

46
TaggedBuffer loadTaggedBuffer(TaggedId id)
47
{
48
    ULONG size{};
49
    auto hres = g_dbgMgr->dataspace->ReadTagged(&id, 0, nullptr, 0, &size);
50
    if (S_OK != hres)
51
        throw DbgEngException(L"IDebugDataSpaces4::ReadTagged", hres);
52

53
    if (!size)
54
        return TaggedBuffer{};
55

56
    TaggedBuffer result(size);
57

58
    hres = g_dbgMgr->dataspace->ReadTagged(&id, 0, result.data(), size, &size);
59
    if (S_OK != hres)
60
        throw DbgEngException(L"IDebugDataSpaces4::ReadTagged", hres);
61

62
    return std::move(result);
63
}
64

65
///////////////////////////////////////////////////////////////////////////////
66

67
} // kdlib namespace end
68

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.