码迷,mamicode.com
首页 > Windows程序 > 详细

《Windows驱动开发技术详解》之读写操作

时间:2016-05-26 18:24:58      阅读:267      评论:0      收藏:0      [点我收藏+]

标签:

  • 缓冲区方式读写操作

读写操作一般是由ReadFile和WriteFile函数引起的,这里先以WriteFile函数为例进行介绍。WriteFile要求用户提供一段缓冲区,并且说明缓冲区的大小,然后WriteFile将这段内存的数据传入到驱动程序中。这种方法,操作系统将应用程序提供缓冲区数据直接复制到内核模式的地址中。这样做,比较简单的解决了将用户地址传入驱动的问题,而缺点是需要在用户模式和内核模式之间复制数据,影响了效率。在少量内存操作时,可以采用这种方法。拷贝到内核模式下的地址由WriteFile创建的IRP的AssociatedIrp.SystemBuffer子域记录。

下面的代码演示了如何利用缓冲区方式读取设备,这个例子中,驱动程序负责向缓冲区中填入了数据:

技术分享

应用层调用ReadFile,想驱动传送一个读IRP请求:

 1 int main(){
 2         HANDLE hDevice =
 3             CreateFile("\\\\.\\HelloDDK",
 4             GENERIC_READ | GENERIC_WRITE,
 5             0, NULL,
 6             OPEN_EXISTING,
 7             FILE_ATTRIBUTE_NORMAL,
 8             NULL);
 9         if (hDevice == INVALID_HANDLE_VALUE){
10             printf("Open device failed!\n");
11         }
12         else{
13             printf("Open device succeed!\n");
14         }
15         UCHAR buffer[10];
16         ULONG ulRead;
17         BOOL bRet = ReadFile(hDevice, buffer, 10, &ulRead, NULL);
18         if (bRet){
19             printf("Read %d bytes!", ulRead);
20             for (int i = 0; i < (int)ulRead; i++){
21                 printf("%02X", buffer[i]);
22             }
23             printf("\n");
24         }
25         CloseHandle(hDevice);
26         system("pause");
27         return 0;
28 }

运行之后的结果如下:

技术分享

 

《Windows驱动开发技术详解》之读写操作

标签:

原文地址:http://www.cnblogs.com/predator-wang/p/5532125.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!