项目
项目文件
可以删掉 .inf 文件
DriveEntery和Unload
默认情况下驱动会有DriveEntry作为程序入口 ,相当于main 函数 ,此函数在被调用时候, 会被上调IRQL (PASSIVE_LEVEL)到0
示例代码
#include <ntddk.h>
void SampleUnload(_In_ PDRIVER_OBJECT DriverObject) {
UNREFERENCED_PARAMETER(DriverObject);
}
extern "C"
NTSTATUS
DriverEntry(_In_ PDRIVER_OBJECT DriveObject,_In_ PUNICODE_STRING RegisteryPath) {
UNREFERENCED_PARAMETER(RegisteryPath);
DriveObject->DriverUnload = SampleUnload;
return STATUS_SUCCESS;
}
- UNREFERENCED_PARAMETER 宏,重新赋值,让变量变成引用过的 ,就不会报警了
- 驱动必须具有c的链接方式 ,默认c++ 链接不是c的 要加上extern “C”
- Unload 实例 ,可以卸载
加载驱动
开启测试模式
bcdedit /set testsigning on
重启
命令
注册
sc create sample type kernel binPath=c:\dev\sample\x64\debug\sample.sys
启动
sc start sample
停止
sc stop sample
使用软件加载
简单跟踪
使用KdPrint
KdPrint 是一个宏,调用了底层DbgPrint 内核api
#include <ntddk.h>
void SampleUnload(_In_ PDRIVER_OBJECT DriverObject) {
UNREFERENCED_PARAMETER(DriverObject);
KdPrint(("sample driver unload called\n"));
}
extern "C"
NTSTATUS
DriverEntry(_In_ PDRIVER_OBJECT DriveObject,_In_ PUNICODE_STRING RegisteryPath) {
UNREFERENCED_PARAMETER(RegisteryPath);
DriveObject->DriverUnload = SampleUnload;
KdPrint(("sample driver initialized successfully\n"));
return STATUS_SUCCESS;
}
dbgView
- dbgview 需要管理员权限,打开capature kernel
- 从vista以后,使用dbgview 时,要向注册表中 的
下面新增一个叫Debug Print Filter 的键 (一般是不存在)HKLM\SYSTEM\CurrentControlSet\Control\Session Manager
在这个键里增加一个叫 DEFAULT的DWORD 值 设置为8
重启生效