7

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

一些驱动程序头代码:

...
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);
...

驱动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)
{
....
}
4

1 回答 1

9

您不能直接调用内核模式驱动程序 API 函数。您应该改用IOCTL API。

通常的工作流程场景是这样

  1. 用户模式应用程序发布一个 IOCTL 请求,传入有关要调用的函数的信息,以及指向其参数堆栈的指针。
  2. 内核模式驱动程序分派请求,将参数复制到自己的堆栈中,调用函数,并将结果传递回 IOCTL 输出缓冲区中的调用者。
  3. 调用者获取 IOCTL 操作的结果并像在正常的 DLL 函数调用之后那样继续。
于 2012-09-01T11:43:09.347 回答