首页
社区
课程
招聘
[原创]WDM驱动之异步I/O,事件通知,自旋锁
发表于: 2008-1-31 01:51 9288

[原创]WDM驱动之异步I/O,事件通知,自旋锁

2008-1-31 01:51
9288

网上介绍驱动程序的异步I/O和事件通知的教程实在太难找了,大多都是一笔带过,有的也只是给出一个基本框架,以偶的水平,打死我也写不出一个完整的代码出来 武安河的《windows 2000/xp WDM 设备驱动程序开发》一书中有这一部分的内容,不过是用DriverStudio以类的方式讲解的,实在难懂。最后终于在《windows WDM设备驱动程序开发指南》中发现其中第14章的DebugPrint源代码讲的就是这部分内容,我对驱动层代码进行了注释,自己写了一个简单的用户态程序,终于完成了驱动专题的WDM部分,呵呵
下面的理论部分为转载,上述代码见附件,困,快半夜3点了,不知能加精否,应该有苦劳的
一.基本框架(不知哪位老大翻译的):

 
HANDLE hfile = CreateFile(..., FILE_FLAG_OVERLAPPED, ...);
BYTE bBuffer[100];
OVERLAPPED o = { 0 };
o.Offset = 345; 
BOOL fReadDone = ReadFile(hfile, bBuffer, 100, NULL, &o);
DWORD dwError = GetLastError();
if (!fReadDone && (dwError == ERROR_IO_PENDING))
{   // The I/O is being performed asynchronously; wait for it to complete   
    WaitForSingleObject(hfile, INFINITE);
    fReadDone = TRUE;
}
if (fReadDone){   
// o.Internal contains the I/O error   
// o.InternalHigh contains the number of bytes transferred   
// bBuffer contains the read data} 
else{   
// An error occurred; see dwError
}
BOOL ReadFile(   HANDLE      hfile,    PVOID       pvBuffer,   DWORD       nNumBytesToRead,    PDWORD      pdwNumBytes,   OVERLAPPED* pOverlapped);
BOOL WriteFile(   HANDLE      hfile,    CONST VOID  *pvBuffer,   DWORD       nNumBytesToWrite,    PDWORD      pdwNumBytes,   OVERLAPPED* pOverlapped);

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 7
支持
分享
最新回复 (4)
雪    币: 321
活跃值: (271)
能力值: ( LV13,RANK:1050 )
在线值:
发帖
回帖
粉丝
2
先做沙发,再慢慢看
2008-1-31 09:11
0
雪    币: 187
活跃值: (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3
代码还没认真看,不过看主题就知道应该不错。
关于异步I/O,事件通知和自旋锁建议楼主可以看下DDK下的那几篇文档,我觉得写的很好啊

WDM设备驱动程序开发指南这本书我没有书中的源代码,正好下载回来看看,里面很多内容都是用它自己写的DebugPrint实现的。
2008-1-31 09:21
0
雪    币: 332
活跃值: (30)
能力值: ( LV12,RANK:460 )
在线值:
发帖
回帖
粉丝
4
楼上说的这部分DDK文档,我找很长时间都没看到
2008-1-31 09:25
0
雪    币: 187
活跃值: (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
5
..\WINDDK\3790\src\filesys\OSR_docs

如果没有找到的话应该是你的DDK中的help文档没有装全吧
2008-1-31 09:35
0
游客
登录 | 注册 方可回帖
返回
//