Вопрос

Я пытаюсь вызвать внутреннюю функцию Windows NT API NtOpenProcess NtOpenProcess.Я знаю, что вызов внутренних API может быть плохой идеей, но для этого конкретного инструмента мне нужен низкоуровневый доступ, который предоставляет этот API.

Моя проблема заключается в том, что для использования такого внутреннего API мне нужно использовать динамическое связывание во время выполнения, как указано в эта статья

Чтобы сделать это, мне нужно определить указатель на функцию NtOpenProcess.Вот мое заявление:

typedef NTSTATUS (NTAPI *_NtOpenProcess) (
OUT PHANDLE,
IN ACCESS_MASK,
IN POBJECT_ATTRIBUTES,
IN PCLIENT_ID OPTIONAL);

class procManager
{
    HINSTANCE hNTDLL;
public:
    procManager()
    {
        hNTDLL = LoadLibrary(L"ntdll.dll");
        if (!hNTDLL)
            throw std::runtime_error("NTDLL.DLL failure.");
        _NtOpenProcess NtOpenProcess;
        NtOpenProcess = reinterpret_cast <_NtOpenProcess> (GetProcAddress(hNTDLL, L"NtOpenProcess"));
        if (!NtOpenProcess)
            throw std::runtime_error("NtOpenProcess not found.");
        //Use NTOpenProcess for stuff here
    };
    ~procManager()
    {
        FreeLibrary(hNTDLL);
    };
};

Проблема в том, что, по-видимому, в моем typedef выше есть ошибка.Компилятор возвращает:

ошибка C2059:синтаксическая ошибка :'__стандартный вызов'

Я использовал удобную функцию dandy "Перейти к определению" моей IDE (Visual Studio 2008) и обнаружил, что NTAPI в объявлении определяется как __stdcall.

К сожалению, удаление NTAPI из моего объявления, делающее его таким:

typedef NTSTATUS (*_NtOpenProcess) (
OUT PHANDLE,
IN ACCESS_MASK,
IN POBJECT_ATTRIBUTES,
IN PCLIENT_ID OPTIONAL);

приводит к другой ошибке:

ошибка C2065:'_NtOpenProcess' (Открытый процесс)' :необъявленный идентификатор

На данный момент я говорю: "Конечно, это не определено, вот почему это typedef!"

Кто-нибудь видит мою ошибку в объявлении?

Это было полезно?

Решение

Включили ли вы "ntdef.h" и "ntstatus.h" ?Компилятор, вероятно, не может понять NTSTATUS .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top