Frage

Ich versuche, die interne Windows NT-API-Funktion NtOpenProcess zu nennen. Ich weiß Aufruf interne APIs kann eine schlechte Idee sein, aber für dieses spezielle Werkzeug benötige ich die Low-Level-Zugriff auf diese API zur Verfügung stellt.

Mein Problem ist, dass eine solche interne API zu verwenden, muss ich Runtime Dynamic Linking verwenden, wie in dieser Artikel

Um das zu tun, ich brauche einen Funktionszeiger auf NtOpenProcess zu definieren. Hier ist meine Erklärung:

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);
    };
};

Das Problem ist, offenbar ein Fehler ist oben in meinem typedef. Der Compiler gibt Folgendes zurück:

  

Fehler C2059: Syntaxfehler:   '__Stdcall'

habe ich das Handy Dandy "Go To Definition" Merkmal meiner IDE (Visual Studio 2008) und festgestellt, dass NTAPI in der Erklärung als __stdcall definiert ist.

Leider NTAPI aus meiner Erklärung zu entfernen, so dass es diese:

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

Ergebnisse in einem anderen Fehler:

  

Fehler C2065: '_NtOpenProcess':   nicht deklarierter Bezeichner

An dieser Stelle sage ich „Natürlich ist es nicht definiert ist, deshalb ist es ein typedef ist!“

Ist mein Fehler in der Erklärung jemand sehen?

War es hilfreich?

Lösung

Haben Sie umfassen "ntdef.h" und "ntstatus.h"? Der Compiler wahrscheinlich kippt NTSTATUS verstehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top