void * для UnicodeString в драйвере - PullRequest
0 голосов
/ 20 февраля 2020

Извините, если это действительно глупый вопрос, но здесь.

Я недавно попал в C ++, и мне нужно изменить драйвер для проекта, над которым я работаю. Проблема в том, что мой драйвер должен взять строку, которую я храню в void*. Итак, в основном, мой вопрос, как я могу привести это или сделать это очень простым способом?

void get_modulebase(int pid, void* value, void* data) {
    PEPROCESS t_process;
    UNICODE_STRING mod;
    KAPC_STATE apc;
    DbgPrint("Data: %s \n", data); //this prints the string as i need it

    RtlInitUnicodeString(&mod, (PCWSTR)data); //this fails

    PsLookupProcessByProcessId((HANDLE)pid, &t_process);
    PVOID base_address = BBGetUserModule(t_process, &mod);
    KeUnstackDetachProcess(&apc);
    RtlCopyMemory(value, &base_address, 8);
    ObfDereferenceObject(t_process);
}

Это работает для меня, но мне нужно сохранить имя модуля в data:

RtlInitUnicodeString(&mod, L"notepad.exe");

1 Ответ

0 голосов
/ 21 февраля 2020

RtlInitUnicodeString - это один из немногих оставшихся небезопасных строковых вызовов, который Windows не помечается.

См.: char * (указатель на символ) и функцию RtlInitUnicodeString ()

Я предлагаю использовать макрос wdk RTL_CONSTANT_STRING, который можно использовать для создания UNICODE_STRING во время компиляции.

Как это:

static const UNICODE_STRING foo = RTL_CONSTANT_STRING(L"notepad.exe");
...