Pregunta

Estoy tratando de llamar a la función API NtOpenProcess interno de Windows NT. Yo sé llamadas a las API internas puede ser una mala idea, pero para esta herramienta en particular necesito el acceso de bajo nivel a esta API proporciona.

Mi problema es que para usar una API interna, necesito utilizar en tiempo de ejecución Enlazado dinámico, como se especifica en este artículo

Para hacer eso, necesito definir un puntero de función a NtOpenProcess. Aquí está mi declaración:

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

El problema es que, al parecer, hay un error en mi typedef anteriormente. Los rendimientos del compilador:

  

C2059 de error: error de sintaxis:   '__Stdcall'

He utilizado la práctica función de Dandy "Ir a definición" de mi IDE (Visual Studio 2008) y se encontró que NTAPI en la declaración se define como __stdcall.

Por desgracia, la eliminación de NTAPI de mi declaración, por lo que es la siguiente:

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

resultados en otro error:

  

Error C2065: '_NtOpenProcess':   identificador no declarado

En este punto que estoy diciendo "Por supuesto que es indefinido, es por eso que es un typedef!"

¿Alguien ve mi error en la declaración?

¿Fue útil?

Solución

¿Incluyó "ntdef.h" y "ntstatus.h"? El compilador probablemente puedo entender NTSTATUS.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top