驱动 DLL:中断处理技术详解
在Windows系统的驱动开发中,中断处理是一项至关重要的技术,它涉及到内存管理、缓冲区分配、中断处理程序的安装等多个方面。下面将详细介绍这些关键技术点。
1. 避免低内存耗尽的正确方法
在模块定义文件中,将驱动的代码和数据段标记为MOVEABLE而非FIXED。在运行时,在任何中断发生之前,明确地固定并锁定这些段。但要注意,Windows API函数GlobalPageLock虽然能固定并锁定段,但会将段移动到低内存区域,这是我们要避免的。
为防止内存管理器在锁定段之前移动它,可先分配1Mb以下的所有内存,调用GlobalPageLock,然后释放所有低内存。这里提供了一个名为SafePageLock的函数来实现此功能,后续会详细分析。
2. 动态分配中断安全缓冲区
2.1 简单方法
动态分配中断安全缓冲区的简单方法是调用GlobalAlloc,并指定要一个既固定又锁定页面的缓冲区。GlobalAlloc接受两个参数:一个表示要分配段的属性的位映射值,以及段的大小。标志参数的可选值包括GMEM_FIXED、GMEM_MOVEABLE、GMEM_DISCARDABLE、GMEM_NODISCARD和GMEM_SHA