我的C++应用程序如何调用驱动程序的界面?

Way*_*man 6 c++ windows driver

我有一个驱动程序源代码,并了解它.我在用户模式下编写应用程序.我想调用驱动程序的功能.我应该怎么做?

一些驱动程序头代码:

...
BYTE ReadRegister(DEVICE_CONTEXT *pDevice, BYTE SlavAddr, BYTE SlavMode, WORD RegAddr, BYTE* pData, BYTE DataCont);

BYTE WriteRegister(DEVICE_CONTEXT *pDevice, BYTE SlavAddr, BYTE SlavMode, WORD RegAddr, BYTE* pData, BYTE DataCont);
...
Run Code Online (Sandbox Code Playgroud)

驱动程序cpp代码片段:

BYTE ReadRegister(DEVICE_CONTEXT *pDevice, BYTE SlavAddr, BYTE SlavMode, WORD RegAddr, BYTE* pData, BYTE DataCont)
{
.....
}

//-----------------------------------------------------------------------------
BYTE WriteRegister(DEVICE_CONTEXT *pDevice, BYTE SlavAddr, BYTE SlavMode, WORD RegAddr, BYTE* pData, BYTE DataCont)
{
....
}
Run Code Online (Sandbox Code Playgroud)

Ros*_*ost 8

您无法直接调用内核模式驱动程序API函数.您应该使用IOCTL API.

平时工作流情景就像这样:

  1. 用户模式应用程序发布IOCTL请求,传递有关要调用的函数的信息,以及指向其参数堆栈的指针.
  2. 内核模式驱动程序调度请求,将参数复制到自己的堆栈,调用函数,并将结果传递回IOCTL输出缓冲区中的调用者.
  3. 调用者获取IOCTL操作的结果,并在正常的DLL函数调用之后继续进行.