以下是驱动程序在处理 IRP 时有时会发生的其他错误。
丢失或重复完成的 IRPs
这些问题以及缺少对 I/O 管理器例程(如 IoStartNextPacket)的调用,通常发生在错误处理路径中。 快速评审驱动程序路径可以找到此类问题。
合并公共 IOCTL 和专用 IOCTL 路径
作为一般规则,驱动程序应包含公共和专用 IOCTL(或 FSCTL)的单独执行路径。 驱动程序无法通过查看控制代码来确定 IOCTL 或 FSCTL 请求是否源自内核模式或用户模式。 因此,在同一执行路径中处理公共代码和专用代码(或者执行最小验证,然后调用同一例程)可能会打开驱动程序,使其出现安全漏洞。 如果专用 IOCTL 或 FSCTL 具有特权,则知道控制代码的未特权用户可能能够访问它。 因此,如果驱动程序支持专用 IOCTL 或 FSCTL 请求,请确保它独立处理这些请求,而不是将其与必须支持的任何公共 IOCTL 或 FSCTL 混在一起。