IOCTL 可以用于向驱动程序发送自定义输入吗
Posted
技术标签:
【中文标题】IOCTL 可以用于向驱动程序发送自定义输入吗【英文标题】:Can IOCTL be used in sending custom input to a Driver 【发布时间】:2018-07-14 02:12:52 【问题描述】:对不起,如果这是一个菜鸟问题,但我正在为游戏开发软件“插件”。我通过驱动程序这样做只是因为反作弊不支持环 0 检测。我还没有看到太多关于如何使用 IOCTL 的信息,我想知道您是否可以发送自定义输入,例如进程 ID 和其他可能会更改的信息,或者它们是否像开关功能或其他东西一样一成不变。再次为菜鸟问题感到抱歉。
【问题讨论】:
抱歉语法很糟糕,凌晨 4 点,我整晚都没有睡 没有规则,IOCTL 让你为所欲为。 这就是ioctl
的全部意义所在。它是一个简单的通用接口,可让您在标准 I/O 操作不适合时添加所需的任何驱动程序特定操作。
【参考方案1】:
您可以使用DeviceIoControl
Win32 API 例程通过 IOCTL 与内核模式设备驱动程序进行通信。该例程在内部调用NtDeviceIoControlFile (NTDLL)
,后者执行系统调用以执行NtDeviceIoControlFile (NTOSKRNL)
。
DeviceIoControl
例程记录在 MSDN:https://msdn.microsoft.com/en-us/library/windows/desktop/aa363216(v=vs.85).aspx
内核模式设备驱动程序需要满足一个先决条件:https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/named-device-objects
我没有看到太多关于如何使用 IOCTL 的信息,我想知道您是否可以发送自定义输入,如进程 ID 和其他信息
答案是肯定的,您可以通过 IOCTL 发送自定义缓冲区。您还可以从内核模式设备驱动程序接收输出缓冲区返回到启动 IOCTL 操作的用户模式应用程序 - 这当然是可选的。
如果您需要同时发送多条信息,请考虑使用结构。
我还建议您阅读以下内容: https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/methods-for-accessing-data-buffers
【讨论】:
以上是关于IOCTL 可以用于向驱动程序发送自定义输入吗的主要内容,如果未能解决你的问题,请参考以下文章
如何在 C 中将 IOCTL 发送到 Windows 上的所有驱动程序
如何从驱动程序向另一个驱动程序(不在同一个堆栈中)进行 IOCTL 调用(在 Windows 上)