Ntdll.dllからエクスポートされたメソッドを呼び出すのに問題があります
VS2012のデバッグモードでは、次のようになります。
実行時チェックの失敗#0-ESPの値は、関数呼び出し全体で適切に保存されませんでした。これは通常、ある呼び出し規約で宣言された関数を、別の呼び出し規約で宣言された関数ポインターで呼び出した結果です。
これは私が使用したコードです(x86プラットフォーム、Windows 7)。
#include "stdafx.h"
#include <Windows.h>
typedef NTSTATUS (* NTAPI ZwClose)(HANDLE handle);
int _tmain(int argc, _TCHAR* argv[])
{
ZwClose close = (ZwClose) ::GetProcAddress(GetModuleHandle(L"ntdll.dll"), "ZwClose");
close(INVALID_HANDLE_VALUE); // Error happens here
return -1;
}
私が読んだことから、それはうまくいくはずです。また、代替の呼び出し規約として__cdeclと__fastcallを試しましたが、何も機能しませんでした。