html tool

2019年2月20日星期三

NTSTATUS 和 NTAPI

源方法定义如下:

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



没有评论:

发表评论