Dreg 为自己需求而建的仓库
masm32 内核编程、驱动程序、教程、示例和工具(致谢 Four-F)
此时会在 C:\ 中生成一个 .sys 文件
加载驱动:
w2k_load.exe 或 osrloader.exe 在加载 beeper.sys 时会报错,忽略即可。
这个错误是由驱动程序代码在自身执行完毕时生成的(利用这个技巧,你无需卸载它)
mov eax, STATUS_DEVICE_CONFIGURATION_ERROR
ret
因此,如果 beep.sys 已正确加载到内核中,你应该会听到扬声器发出哔声(驱动程序代码会生成一声哔声)
当你需要卸载驱动时,使用:
我修改了 Sven B. Schreiber 编写的 w2k_load.exe,使其可用于 Windows 2000 到 Windows 10(清单...)
解压 osrloaderv30.zip 并使用这个 GUI 程序:
对于旧版 Windows,直接使用本仓库附带的 DbgView.exe。顺便说一下,我修改了它(清单...)
对于现代 Windows,请使用 sysinternals 网站上的最新 dbgview.exe,并查看以下内容进行故障排除:
阅读本仓库中的 .pdf 文件,并查看 KmdKit18/examples 目录中的示例
警告:所有 ASM 源代码都位于 .bat 文件内(批处理和 asm 代码混合在同一个文件中)
例如 advanced\FindShadowTable\FindShadowTable.bat
;@echo off
;goto make
ASM DRIVER CODE GOES HERE
:make
set drv=FindShadowTable
\masm32\bin\ml /nologo /c /coff %drv%.bat
\masm32\bin\link /nologo /driver /base:0x10000 /align:32 /out:%drv%.sys /subsystem:native %drv%.obj
del %drv%.obj
echo.
pause
该文件包含用于生成 .sys 的批处理代码,同时也包含驱动程序自身的源代码。是的,非常巧妙,构建脚本和源代码放在一起。
这是一个如何查找 ServiceDescriptorTableShadow 的示例。
它只是扫描 ID 为 80h-400h 的线程,试图找到一个 KTHREAD.ServiceTable 不等于 KeServiceDescriptorTable 的线程。如果找到这样的线程,其 KTHREAD.ServiceTable 就保存着 ServiceDescriptorTableShadow 的地址。
使用 DbgView (www.sysinternals.com) 查看驱动的调试输出,或使用 SoftICE。
测试环境:Windows 2000、XP 和 Server 2003。
这是一个简单的传统(非 PnP)PS/2 键盘过滤驱动示例。 警告:你将无法将其附加到 USB 键盘堆栈上。
测试环境:Windows 2000、XP 和 Server 2003。
Four-F, [email protected]。这些宏文件来自我的 cocomac 包。
这是一个简单的传统(非 PnP)PS/2 鼠标过滤驱动示例。 警告:你将无法将其附加到 USB 鼠标堆栈上。
测试环境:Windows 2000、XP 和 Server 2003。
这是一个如何通过调用 IoCreateDeviceSecure 而不是 IoCreateDevice 来将特定安全设置应用于命名设备对象的示例。
由于 IoCreateDeviceSecure 例程不是操作系统的一部分,我们链接包含所有必要例程的 wdmsec.lib。
你在这里找到的 wdmsec.lib 库并不是 DDK 附带的那个。我必须重新构建它以减小体积,并移除不需要的成员。
这是一个如何创建、写入、读取和删除文件的示例。
使用 KmdManager 进行注册/注销并启动它。 使用 DbgView (www.sysinternals.com) 查看其调试输出,或使用 SoftICE。
测试环境:Windows 2000、XP 和 Server 2003。
这是一个如何将驱动打包到资源中的示例。
测试环境:Windows 2000、XP 和 Server 2003。
这是你判断系统是否以安全模式运行的方法。
使用 KmdManager 进行注册/注销并启动它。 使用 DbgView (www.sysinternals.com) 查看其调试输出,或使用 SoftICE。
测试环境:Windows 2000、XP 和 Server 2003。
basic/MemoryWorks/LookasideList
这是一个如何使用 Lookaside 列表和双向链表来管理从 Lookaside 列表分配的内存块的示例。
使用 KmdManager 进行注册/注销并启动/停止它。 使用 DbgView (www.sysinternals.com) 查看其调试输出,或使用 SoftICE。
测试环境:Windows 2000、XP 和 Server 2003。
这是一个如何使用 SEH 处理异常的示例。但请记住。 你不能在内核模式下用 SEH 处理所有异常!
使用 KmdManager 进行注册/注销并启动/停止它。 使用 DbgView (www.sysinternals.com) 查看其调试输出,或使用 SoftICE。
测试环境:Windows 2000、XP 和 Server 2003。
basic/MemoryWorks/SharedSection
这是一个如何使用命名节对象在用户模式进程与内核模式驱动之间共享内存的示例。
测试环境:Windows 2000、XP 和 Server 2003。
basic/MemoryWorks/SharingMemory
这是一个如何在用户模式和内核模式之间共享内存缓冲区的可能方法的示例。
测试环境:Windows 2000、XP 和 Server 2003。
basic/MemoryWorks/SystemModules
这是一个如何在内核模式下分配内存的示例。为了不白白分配,我们用一些系统信息填充它。
使用 KmdManager 进行注册/注销并启动/停止它。 使用 DbgView (www.sysinternals.com) 查看其调试输出,或使用 SoftICE。
测试环境:Windows 2000、XP 和 Server 2003。
这是一个如何创建、设置、读取和删除注册表项的示例。 使用 KmdManager 进行注册/注销并启动它。 使用 DbgView (www.sysinternals.com) 查看其调试输出,或使用 SoftICE。
测试环境:Windows 2000、XP 和 Server 2003。
这是一个如何将代码放入不同 PE 节中的示例。
basic/Synchronization/MutualExclusion
这是一个如何实现对资源互斥访问的示例。
使用 KmdManager 进行注册/注销并启动/停止它。 使用 DbgView (www.sysinternals.com) 查看其调试输出,或使用 SoftICE。
[basic/Synchronization/SharedEvent - ProcessMon](KmdKit18/examples/basic/Synchronization/SharedEvent - ProcessMon)
这是一个如何通知用户模式某种事件已发生的示例。
测试环境:Windows 2000、XP 和 Server 2003。
basic/Synchronization/TimerWorks
这是一个如何创建、设置、等待和取消定时器的示例。 使用 KmdManager 进行注册/注销并启动/停止它。 使用 DbgView (www.sysinternals.com) 查看其调试输出,或使用 SoftICE。
测试环境:Windows 2000、XP 和 Server 2003。
WorkItem 示例
在此示例中,我们处理现有的磁盘设备。
测试环境:Windows 2000、XP 和 Server 2003
提供有关每个磁盘分区特征的信息。
测试环境:Windows 2000、XP 和 Server 2003
在此示例中,我们处理现有的磁盘设备。
测试环境:Windows 2000、XP 和 Server 2003
在此示例中,我们处理现有的键盘设备。
测试环境:Windows 2000、XP 和 Server 2003