这里以CreateFile API 为例,其他操作设备的API类似。首先应用程序调用CreateFile Api,这个API是由Win32子系统的三大模块中的Kernel32.dll实现的。CreateFile函数会
调用Ntdll.dll中的NtCreateFile函数,其中NtCreateFile是未文档化的函数,最好不要直接调用
NtCreateFile 的作用是穿越用户模式的边界,进入到内核模式,这个步骤是通过软中断实现的。进入内核模式后,会调用系统服务函数,这里会调用同名的系统服务NtCreateFile。(同名函数,一个位于用户模式,一个位于内核模式)
NtCreateFile 系统函数调用通过I/O管理器,创建IRP并传输到设备的驱动程序中。IRP(I/O Request Package)即输入输出请求包,是驱动程序开发中重要的数据结构。驱动程序的运行,完全靠IRP驱动的。
驱动程序根据IRP,进行相应的操作。这些操作一般对设备的直接操作,例如对端口的读操作。对端口的读操作根据不同硬件平台实现方法有所不同,Windows 根据不同的硬件平台,会有不同的HAL(硬件抽象层).