我是OS的核心领域的菜鸟。最近我研究了程序如何在kernel-land中运行。
我知道几个windows api调用只是kernel-land系统调用的包装。最后执行syscall / sysret / sysenter进入kernel-land,kernel-land接收器(KiFastCallEntry等)接收它并将其抛给处理程序,负责解析并使用它。
但我知道的另一种通信内核的方式是IOCTL,就像DeviceIoControl()一样。我用它来传达我的自定义设备驱动程序。
我的问题是,syscall和DeviceIoControl()之间有什么区别?为什么有两种(或更多)方法可用/分离以在Windows中传递内核?我可以使用一系列系统调用来通信我的自定义设备驱动程序而无需调用DeviceIoControl吗?
感谢您阅读我的问题。祝你有个美好的一天:)