【问题标题】:How does my C++ app call interface of driver?我的 C++ 应用程序如何调用驱动程序的接口?
【发布时间】:2012-09-01 11:30:18
【问题描述】:

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

一些驱动头代码:

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

【问题讨论】:

    标签: c++ windows driver


    【解决方案1】:

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

    通常的工作流程场景类似于this:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-21
      • 2010-10-26
      • 2022-01-24
      • 1970-01-01
      • 1970-01-01
      • 2019-07-16
      相关资源
      最近更新 更多