/************************************************************************
* 返回状态值
*DDK大部分返回值类型是NTSTATUS类型。查看DDK.h文件,可以看到:
*************************************************************************/

typedef LONG NTSTATUS;

//NTSTATUS就是一个32位的整数,其每位有着不同的含义

Windows内核编程之:返回状态值

在执行为内核函数后,应该查看该函数的返回状态
如果状态码高位为0,无论其它位置是否设置,该状态码代表成功
绝对不能用状态代码与0比较来判断操作是否成功
而应该使用NT_SUCCESS宏,其用法:

NTSTATUS status = Foo(...);
if(NT_SUCCESS(status))
{
//函数执行成功
}

/*常用NTSTATUS状态返回值*/

//分类                                    描述
STATUS_SUCCESS                            //函数执行成功
STATUS_UNSUCCESSFUL                        //函数执行不成功
STATUS_NOT_IMPLEMENTED                    //函数未被实现
STATUS_INVALID_INFO_CLASS                //输入参数是无效的类别
STATUS_INFO_LENGTH_MISMATCH                //输入参数长度不匹配
STATUS_ACCESS_VIOLATION                    //不允许访问
STATUS_IN_PAGE_ERROR                    //发生页故障
STATUS_INVALID_HANDLE                    //输入是无效的句柄
STATUS_INVALID_PARAMETER                //输入是无效的参数
STATUS_NO_SUCH_DEVICE                    //指定的设备不存在
STATUS_NO_SUCH_FILE                        //指定的文件不存在
STATUS_INVALID_DEVICE_REQUEST            //无效的设备请求
STATUS_END_OF_FILE                        //文件已到结尾
STATUS_INVALID_SYSTEM_SERVICE            //无效的系统调用
STATUS_ACCESS_DENIED                    //访问被拒绝
STATUS_BUFFER_TOO_SMALL                    //输入的缓冲区过小
STATUS_OBJECT_TYPE_MISMATCH                //输入的对象类型不匹配
STATUS_OBJECT_NAME_INVALID                //输入的对象名无效
STATUS_OBJECT_NAME_NOT_FOUND            //输入的对象没有找到
STATUS_PORT_DISCONNECTED                //无效连接的端口没有被连接
STATUS_OBJECT_PATH_INVALID                //输入的对象路劲无效

 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-07-03
  • 2021-08-06
  • 2022-12-23
  • 2021-08-05
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-01-16
  • 2022-12-23
  • 2021-09-28
  • 2021-10-03
  • 2022-12-23
  • 2022-02-01
  • 2021-11-18
相关资源
相似解决方案