質問

私は、内部のWindows NT API関数を呼び出すNtOpenProcessしようとしています。私は悪いアイデアをすることができ、内部APIを呼び出す知っているが、この特定のツールのために、私は、このAPIが提供する低レベルのアクセスを必要とします。

私の問題は、このような内部APIを使用することで、私は<のhref = "http://msdn.microsoft.com/en-us/library/ms686944(VSに指定されているように、ランタイム動的リンクを使用する必要があります。 85)の.aspx」REL = "noreferrer">この記事

これを行うには、私は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:構文エラー:   '__stdcall'

私は私の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