启用驱动软件:UMDF驱动程序开发教程
在最近的开发设计任务中,我的应用程序必须使用驱动软件来做一些事情。考虑到应用程序,该方案使用UMDF驱动软件来实现。虽然我是一名老程序员,但这是我第一次在Windows桌面上开发系统。我甚至没有听说过UMDF推广的名字。与此同时,时间紧迫,不太可能从头开始检查协助,阅读文本文档,只能以更快的方式完成。在这样的推广中,我们花了不到两天的时间来理解UMDF驱动发展的一般步骤。以下是记录,我们只希望对幸运和不屈不挠的生活有所帮助。
基本上整个过程
即使为了赶时间,我也不会在这里分析基本原理,只涉及到按照这种方法快速干预,在我不熟悉的领域快速设计。遇到困难或仔细阅读帮助文件,或向大神寻求建议。
1, 首先,根据UMDF驱动指导,使用VS创建新的驱动力。建立的整个过程不会被描述,只需按照指导过程执行即可。这样,每个人都有一个推广的基本框架。根据下载和安装程序,它应该能够编译程序,如果在编译程序和安装过程中出现任何问题,请尽快检查VS开发工具。
2, 添加自己的代码。我真的不知道驱动Read/Write函数公式是否存在以及如何启用它。我只记得Iocontrol函数公式和相应的代码。
ioQueue.CMyIoQueueue在cpp中搜索::OndeviceIocontrol函数,当DeviceoControl在顶层启用时,将启用驱动函数公式,即驱动Iocontrol通道。该函数有5个主要参数:
__in IWDFIoRequest *FxRequest,可访问的数据结构都在里面。
__in ULONG ControlCode,是防止码,我们需要对不同的操作码执行相应的代码。
其它参数值不起作用。
输出导出Buffer:
FxRequest->GetInputMemory( &pInMem );
FxRequest->GetOutputMemory( &pOutMem );
将Buffer复制到当地的一段内存中,我们不应该访问外网 pinmem指向的运行内存只能复制出来应用(能不能记住,有兴趣爱好可以试试)
hr=pInMem->CopyToBuffer(0x0, &localBuffer, dwSize );
当地解决后,将即将到来的数据复制到poutMem.
hr=pOutMem->CopyFromBuffer(0x0, &localOut, sizeof(localOut));
最终通知入参给他披露了多少数据信息:
FxRequest->CompleteWithInformation( hr, sizeof(localOut));
3, 常见问题
1, 如果你想传递数据信息,你必须使用OutMemory。当然,当我写这篇文章时,我使用VS11 Beta,之后需要注意版本会不会有变化。这花了我很长时间。一开始我一直想用InoutMemory传输数据,但是顶层得不到。之后,他很有可能会设计成无法通过InputMemory传输数据。
2, 必须调整Complete,有两种函数公式,Complete和CompleteWithInformation,前者只是表示推广的整个过程已经完成了,后者可以同时得出每个人在outmemory中放置了多少字节。如果不使用此函数,当DeviceIoControl在顶层使用时,它将不成功。Getlasteror将被描述为Pending的实际操作。如果不使用此函数,当DeviceIoControl在顶层使用时,它将不成功。Getlasteror将被描述为Pending的实际操作。
3, 因为微软的案例中没有给出IO的实际操作代码,所以我在网上到处搜索别人写的案例。刚看到有人会把FxRequesttt看到 Release,若将其Release,则会导致驱动软件出错,无法再应用。所以我想:1,不能相信别人的代码,尤其是在网站上(包括我的,哈哈)。2.添加新代码后,必须始终注意程序流程中的新个人行为,必须及时出现异常,并及时定义添加代码的问题,以减少时间消耗。
4, 一些关于操作权限的定义: