90 likes | 270 Views
WIN2K Mirror Driver Developing. 目前状况. 熟悉编译环境和调试工具 SoftICE 的使用; 对内核驱动程序加深了理解; 对联想、 QUARTICS 、 VNC 的驱动反编译 内核编程的内存申请和使用未明确; 内存共享及映射问题未明确; VNC 的驱动程序层次实现方法未明确;. DDK 与 DDI 的联合工作. 在编译中,分开编译避免头文件互相包含 解决了内核内存申请、 MDL 申请、绑定、映射等内核态函数的调用; 在 DDI 环境中调用 VIDEO 函数,可以得到 PCI 基地址,这样可以完成内存映射问题;
E N D
目前状况 • 熟悉编译环境和调试工具SoftICE的使用; • 对内核驱动程序加深了理解; • 对联想、QUARTICS、VNC的驱动反编译 • 内核编程的内存申请和使用未明确; • 内存共享及映射问题未明确; • VNC的驱动程序层次实现方法未明确;
DDK与DDI的联合工作 • 在编译中,分开编译避免头文件互相包含 • 解决了内核内存申请、MDL申请、绑定、映射等内核态函数的调用; • 在DDI环境中调用VIDEO函数,可以得到PCI基地址,这样可以完成内存映射问题; • 由于在内核态下要对传入的参数以及视频的存储分别申请内存,所以非分页内存申请的大小问题需要解决; • 调试中发现,如果不申请内核空间情况下进行METHOD_BUFFERED通信,造成缺页故障。
softICE的使用 • 可以实现对用户态、核心态的程序进行源码级跟踪; • 调试前需要编译为CHECK模式,打开、转换、加载后设置断点; • 对miniport驱动的调试,则在安装时以及与用户通信时可以捕获到对应的断点; • 可以观察CPU寄存器以及某符号变量的值; • 具有最高的优先级,调试期间对CPU绝对独占;
内核驱动程序的认识 • 内核态下存储空间的操作要谨慎,使用完要释放; • 内核驱动程序与用户程序的通信的方式,我们选择使用符号连接和I/O控制的方法; • 使用method_buffered的模式进行I/O控制操作的一系列问题,如参数空间申请和释放 • 对内核态下的函数缺乏系统的掌握; • DriverEntry例程的参数,Display与WDM的区别
对联想镜像驱动反编译 • 并没有使用内存映射直接操作的方法,而是使用的Bitblt以及分块检测; • 镜像驱动基本和微软功能一致,并不高效; • 对小运动区域捕捉快速,对大幅图像则效率很低
对QUARTICS驱动的反编译 • 未使用DeviceIoControl以及符号连接来打开驱动程序; • 使用了镜像驱动的直接内存映射和操作; • 如何在用户态程序中读取该内存镜像不明确; • 使用了虚拟DISPLAY,将镜像内存搬移到虚拟内存中进行显示; • 虚拟驱动下全屏视频为何流畅的方法未知;
对VNC驱动的反编译 • 其使用符号连接及I/O控制方法进行通信; • 在miniport驱动上层覆盖一个过滤驱动,负责与用户态程序的通信; • 在miniport中如何得到基址未知; • 该过滤驱动程序的如何设计未知;
当前亟需解决问题 • 过滤驱动程序的原理及与主驱动通信方法 • 或其他的用户与视频miniport驱动通信方法