源方法定义如下:
NTSTATUS
NTAPI
#define NTAPI __stdcall
#else
#define NTAPI
#endif
NTSTATUS NTAPI DetourNtResumeThread ( IN HANDLE ThreadHandle, OUT PULONG PreviousSuspendCount ) { ... }
NTSTATUS
- 参见: https://baike.baidu.com/item/NTSTATUS
NTSTATUS 是被定义为32位的无符号长整型。在驱动程序开发中,人们习惯用 NTSTATUS 返回状态。其中0~0X7FFFFFFF,被认为是正确的状态,而0X80000000~0XFFFFFFFF被认为是错误的状态。
有一个非常有用的宏-----NT_SUCCESS,用来检测状态是否正确。
NTAPI
- 参见:https://bbs.csdn.net/topics/260042764
NTAPI在winnt.h中有定义:
#if ((_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED)) && !defined(_M_AMD64)#define NTAPI __stdcall
#else
#define NTAPI
#endif
- __stdcall
- 参见: https://baike.baidu.com/item/__stdcall
__stdcall是函数调用约定的一种,函数调用约定主要约束了两件事:
1.参数传递顺序
2.调用堆栈由谁(调用函数或被调用函数)清理
常见的函数调用约定:stdcall cdecl fastcall thiscall naked call
__stdcall表示
1.参数从右向左压入堆栈
2.函数被调用者修改堆栈
3.函数名(在编译器这个层次)自动加前导的下划线,后面紧跟一个@符号,其后紧跟着参数的尺寸
在win32应用程序里,宏APIENTRY,WINAPI,都表示_stdcall,非常常见
(PS:关键字主要见于Microsoft Visual C、C++。GNU的C、C++是另外一种修饰方式:__attribute__((stdcall)))
- 参见: https://baike.baidu.com/item/__stdcall
没有评论:
发表评论