驱动优先启动(win xp)
驱动代码
1 #include "ntddk.h" 2 3 4 VOID Unload(IN PDRIVER_OBJECT DriverObj) 5 { 6 DbgPrint("卸载成功!"); 7 8 } 9 10 VOID ThreadProc(IN PVOID Context) 11 { 12 LARGE_INTEGER timeout = RtlConvertLongToLargeInteger(-10 * 1000 * 1000); 13 14 15 while(TRUE) 16 { 17 KdPrint(("驱动正在运行....\n")); 18 KeDelayExecutionThread(KernelMode,FALSE,&timeout); 19 20 } 21 22 } 23 24 NTSTATUS DriverEntry(IN PDRIVER_OBJECT Driver,IN PUNICODE_STRING RegPath) 25 { 26 27 HANDLE hThread = NULL; 28 Driver->DriverUnload = Unload; 29 30 DbgPrint("开始!"); 31 32 33 PsCreateSystemThread((PHANDLE)&hThread,THREAD_ALL_ACCESS,NULL,NULL,NULL,(PKSTART_ROUTINE)ThreadProc,NULL); 34 35 return STATUS_SUCCESS; 36 }
驱动优先启动实现
方法1:使用api实现驱动优先启动
VOID DriverApiInstall() { SC_HANDLE hSCmanager = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS); //函数建立了一个连接到服务控制管理器,并打开指定的数据库。 DWORD dwFlags = 1; SC_HANDLE hService = CreateService(hSCmanager, //数据库句柄 TEXT("test"), //服务名称 TEXT("test"), //服务显示名称 SC_MANAGER_ALL_ACCESS, //服务权限 SERVICE_KERNEL_DRIVER, //服务类型 SERVICE_BOOT_START, //服务启动类型 SERVICE_ERROR_IGNORE, //报错处理类型 TEXT("System32\\Drivers\\test.sys"), //驱动所在的路径 TEXT("System Reserved"), //服务所在的组 &dwFlags, //服务标签 NULL, //依赖那个服务 NULL, //启动服务名称 NULL); //启动服务密码 //启动服务 if (hService != NULL) { StartService(hService,NULL,NULL); } //关闭服务句柄 CloseServiceHandle(hSCmanager); CloseServiceHandle(hService); }
方法2:使用修改注册表来实现驱动优先启动
VOID DriverRegeditInstall() { //HKEY_LOCAL_MACHINE\SYSTEM SHSetValue(HKEY_LOCAL_MACHINE, //键值 TEXT("SYSTEM\\CurrentControlSet\\Services\\test"), //路径 TEXT("ImagePath"), //镜像名称 REG_EXPAND_SZ, //类型 TEXT("System32\\Drivers\\test.sys"), //镜像值 sizeof(L"System32\\Drivers\\test.sys")); //值长度 DWORD dwStart = SERVICE_BOOT_START; DWORD dwType = SERVICE_SYSTEM_START; SHSetValue(HKEY_LOCAL_MACHINE, //键值 TEXT("SYSTEM\\CurrentControlSet\\Services\\test"), //路径 TEXT("Group"), //镜像名称 REG_EXPAND_SZ, //类型 TEXT("System Reserved"), //镜像值 sizeof(L"System Reserved")); //值长度 SHSetValue(HKEY_LOCAL_MACHINE, //键值 TEXT("SYSTEM\\CurrentControlSet\\Services\\test"), //路径 TEXT("Start"), //镜像名称 REG_DWORD, //类型 &dwStart, //镜像值 sizeof(REG_DWORD)); //值长度 SHSetValue(HKEY_LOCAL_MACHINE, //键值 TEXT("SYSTEM\\CurrentControlSet\\Services\\test"), //路径 TEXT("Type"), //镜像名称 REG_DWORD, //类型 &dwType, //镜像值 sizeof(REG_DWORD)); //值长度 }

浙公网安备 33010602011771号