/************************************************************************
* 返回状态值
*DDK大部分返回值类型是NTSTATUS类型。查看DDK.h文件,可以看到:
*************************************************************************/
typedef LONG NTSTATUS;
//NTSTATUS就是一个32位的整数,其每位有着不同的含义
在执行为内核函数后,应该查看该函数的返回状态
如果状态码高位为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 //输入的对象路劲无效