IOCTL可以用于向驱动程序发送自定义输入吗

时间:2018-07-14 02:12:52

标签: c driver ioctl

对不起,如果这是一个菜鸟问题,但我正在为游戏开发“附加”软件。我之所以通过驱动程序来执行此操作,仅仅是因为反作弊功能不支持Ring 0检测。我没有看到太多有关如何使用IOCTL的信息,我想知道您是否可以发送自定义输入(如进程ID)和其他可能更改的信息,或者是否像开关功能之类的东西一成不变。再次为菜鸟的问题感到抱歉。

1 个答案:

答案 0 :(得分: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