操作系统启动时,遍历硬件设备,再找到对应的驱动程序,调用相应的sys文件
sys驱动文件入口函数为
NTSTATUS NTAPI
DriverEntry( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath );
一个正常的驱动程序,应在该函数做以下事情
1、调用IoCreateDevice,通过调用ObCreateObject初始化DEVICE_OBJECT
2、设置DriverInit、DriverStartIo及MajorFunction数据
3、注册驱动程序。
跟踪一下vga.sys的流程
DriverEntry函数包括以下代码
1、设置__security_cookie
2、做一些参数初化,从注册中调取相应数据
3、调用 videoprt.sys的函数VideoPortInitialize
微软官网上公布的函数定义:
VIDEOPORT_API ULONG VideoPortInitialize( PVOID Argument1, PVOID Argument2, PVIDEO_HW_INITIALIZATION_DATA HwInitializationData, PVOID HwContext );
IDA分析的函数定义
int __stdcall VideoPortInitialize(PDRIVER_OBJECT DriverObject, PCUNICODE_STRING SourceString, int a3, int a4)
也就是说VideoPortInitialize 的前两个参数是vga.sys的DriverEntry收到的两个参数,之后初始化
第三个参数,第四个参数均是0,再调用videoprtr的VideoPortInitialize函数。
videoprtr的DriverEntry没有具体的内容。
然后是VideoPortInitialize做驱动程序初始化。