下载此文档

Windows驱动编程基础教程.doc


文档分类:IT计算机 | 页数:约23页 举报非法文档有奖
1/23
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/23 下载此文档
文档列表 文档介绍
Windows驱动编程基础教程.docWindows驱动编程基础教程我经常在网上遇到心如火燎的提问者。他们碰到很多工作中的技术问题,是关于驱动开发的。其实绝大部分他们碰到的大困难”是被老牛们看成初级得不能再初级的问题。比如经常有人迳义•个空的UNICODE_STRING然后往里面拷贝字符串。结果无论如何都是蓝屏。也有人在堆栈中定义一•个局部SHN_LOCK,作为下面的同步用一这样用显然没有任何意义。我无法一•冋答这吐问题:因为往往要耐心的看他们的代码,才能很不容易的发现这些错误。而口我乂不是总是空闲的,可以无休止的去帮网友阅读代码和杏找初级错误。但是归根结底,这些问题的出现,是因为现在写驱动的同行越来越多,但是做驱动开发乂没有比较基础的,容易读懂的资料。为此我决定从今天开始连载一篇超级入门级的教程,来解决那些最基本的开发问题。老牛们就请无视这篇教程,一笑而过了。Windows驱动编程基础教tr(-):char*str={“myfirststring"}; //ansi字符串wchar_t*wstr={Lmyfirststring"}; //unicode字符串size_tlen=strlen(str); //ansi字符串求长度size_twlen=wcslen(wstr); //unicode字符串求长度printf(M%s%ws%d%d;str,wstr,len,wlen);//打印两种字符串但是实际上这种字符串相当的不安全。很容易导致缓冲溢出漏洞。这是因为没有任何地方确切的表明一个字符串的长度。仅仅用一个'\0'字符来标明这个字符串的结束。一一日•碰到根本就没有空结束的字符串(可能是攻击者恶意的输入、或者是编程错谋导致的意外),程序就可能陷入崩溃。使用自级6+特性的编码者则容易忽略这个问题。因为殆常使用std::string和CString这样高级的类。不用去担忧字符串的安全性了。在驱动开发中,一般不再用空來表示一个字符串的结束。而是定义了如下的一•个结构:typedefstruct_UNICODE_STRING{USHORTLength; 〃字符串的长度(字节数)USHOFTTMaximumLength;//字符串缓冲区的长度(字节数)PWSTRBuffer; 〃字符串缓冲区}UNICODE_STRING,*PUNICODE_STRING;以上是Unicode字符屮,一个字符为双字节。与之对应的述有-•个Ansi字符串。Ansi字符串就是C语言中常用的单字节表示一个字符的窄字符串。typedefstruct_STRING{USHOFfTLength;USHORTMaximumLength;PSTRBuffer;}ANSI_STRING*PANSI_STRING;在驱动开发中四处可见的是Unicode字符串。因此可以说:Windows的内核是使用Uincode编码的。。而且这种场合非常罕见。UNICODE_STRING并不保证Buffer中的字符屮是以空结束的。因此,类似下面的做法都是错误的,可能会会导致内核崩溃:UNICODE_STRINGstr;•••len=wcslen(); //试图求长度DbgPrint(“%ws”,); //,必须在编码中保证Buffer始终是以空结束。但这又是一个麻烦的问题。所以,使用微软提供的Rtl系列函数来操作字符屮,才是止确的方法。下文逐步的讲述这个系列的函数的使用。。读者应该可以注意到,这个结构中并不含有字符串缓冲的空间。这是-•个初学者滋见的出问题的来源。以下的代码是完全错误的,内核会立刻崩溃:UNICODE_STRINGstr;wcscpy(,Lmyfirststring!");==wcslen(L,myfirststring!”)*sizeof(WCHAR);以上的代码定义了一个字符串并试图初始化它的值。但是非常遗憾这样做是不对的。。相反以下的方法是止确的:〃先定义后,再定义空间UNIOODE_STRINGstr;=Umyfirststring!";==wcslen(L,myfirststring!”)*sizeof(WCHAR);上面代码的第二行手写的當数字符串在代码中形成了“當数”内存空间。这个空间位于

Windows驱动编程基础教程 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数23
  • 收藏数0 收藏
  • 顶次数0
  • 上传人sssmppp
  • 文件大小152 KB
  • 时间2020-07-26
最近更新