新物网

当前位置:首页 > 百科

百科

启用驱动软件:UMDF驱动程序开发教程

时间:2023-10-16 09:34:01 雅雅
在最近的开发设计任务中,我的应用程序必须使用驱动软件来做一些事情。考虑到应用程序,该方案使用UMDF驱动软件来实现。虽然我是一名老程序员,但这是我第一次在Windows桌面上开发系统。我甚至没有听说过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,  一些关于操作权限的定义: