qintangtao

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

2013年4月14日

摘要: 在驱动程序开发中,还有一个技巧,就是使用"断言"。在驱动程序使用"断言"一般是通过使用ASSERT宏。例如:NTSTATUS Foo(PCHAR* str){ ASSERT(str != NULL); //断言 //对于str的操作}这段代码认为输入参数绝不可能是空指针,因此在函数的开头做一个断言(ASSERT)。一旦断言失败,会引发一个异常 阅读全文
posted @ 2013-04-14 21:40 qintangtao 阅读(204) 评论(0) 推荐(0)

摘要: DDK提供了大量的宏。在使用这些宏的时候,要注意一种错误的发生,这就是"侧效"(Side Effect)宏一般由多行组成,如下面的形式,其中的"\"代表换行#define PRINT(msg) KdPrint(("====================\n"));\ KdPrint(msg);\ KdPrint(("===================\n"));在C语言中规定,for或者if语句块中的内容如果只是一句,可以省略掉{}。如:if(bRet){ Foo();}//等价于if(bRet) Foo() 阅读全文
posted @ 2013-04-14 21:36 qintangtao 阅读(409) 评论(0) 推荐(0)

摘要: //结构化异常处理(try-except块)__try{}__except(filter_value){}在被__try{}包围的块中,如果出现异常,会根据filter_value的数值,判断是否需要在__except{}块中处理。filter_value的数值会有三种可能。(1)EXCEPTION_EXECUTE_HANDLER,该数值为1。进入到__except进行错误处理,处理完后不再回到__try{}块中,转而继续执行(2)EXCEPTION_CONTINUE_SEARCH,该数值为0。不使用__except块中的异常处理,转而向上一层回卷。如果已经是最外层,则向操作系统请求异常处理函 阅读全文
posted @ 2013-04-14 21:24 qintangtao 阅读(1485) 评论(0) 推荐(0)

摘要: 这两个函数不是返回该段内存是否可读写,而是当不可读写的时候引发一个异常(Exception)。这个异常需要用到微软的编译器提供的"结构化异常"处理变法。"结构化异常"机制会轻松的检测到这种异常进而做出相应的异常处理/************************************************************************* 函数名称:ProbeForRead* 功能描述:检查该内存是否可读* 参数列表: Address:血药被检查的内存的地址 Length:需要被检查的内存的长度,单位是字节 Alignment:描. 阅读全文
posted @ 2013-04-14 12:46 qintangtao 阅读(622) 评论(0) 推荐(0)

摘要: /************************************************************************* 返回状态值*DDK大部分返回值类型是NTSTATUS类型。查看DDK.h文件,可以看到:*************************************************************************/typedef LONG NTSTATUS;//NTSTATUS就是一个32位的整数,其每位有着不同的含义在执行为内核函数后,应该查看该函数的返回状态如果状态码高位为0,无论其它位置是否设置,该状态码代表成功绝对不 阅读全文
posted @ 2013-04-14 12:35 qintangtao 阅读(762) 评论(0) 推荐(0)

摘要: /************************************************************************* 数据类型定义* c语言的定义 DDK中的定义* void VOID* char CHAR* short SHORT* long LONG* wchar_t WCHAR* ... 阅读全文
posted @ 2013-04-14 12:09 qintangtao 阅读(542) 评论(0) 推荐(1)