注册和注销操作区域处理程序

ACPI 设备函数驱动程序可调用 RegisterOpRegionHandler 并提供以下信息,以注册操作区域处理程序:

  • 表示定义操作区域的 ACPI 设备的物理设备对象 (PDO)。

  • 访问类型,可以是 rawcooked

    有关详细信息,请参阅访问操作区域

  • 区域空间的类型。

    供应商应指定从 0x80 到 0xFF 的供应商定义的值。 (小于 0x80 的值由 ACPI 规范定义,并保留供内部使用。)

  • 指向驱动程序的操作区域处理程序的指针。

    ACPI 驱动程序可调用驱动程序的操作区域处理程序来访问操作区域。

  • 指向操作区域上下文的指针。

    操作区域上下文特定于设备,并仅由函数驱动程序使用。 当 ACPI 驱动程序调用操作区域处理程序时,它会将操作区域上下文传回处理程序。 通常,它是功能设备对象 (FDO) 的设备扩展。

RegisterOpRegionHandler 会返回一个操作区域对象,仅当驱动程序注销处理程序时,函数驱动程序才会将此对象用于唯一标识操作区域处理程序。

通常,启动 FDO 以响应 IRP_MN_START_DEVICE 请求后,驱动程序会在驱动程序的即插即用调度例程中注册操作区域处理程序。 驱动程序在分配处理程序的操作区域上下文后必须注册处理程序。 如果驱动程序创建供应商定义的设备接口,驱动程序应在注册处理程序后启用设备接口。

ACPI 设备函数驱动程序可调用 DeRegisterOpRegionHandler 并提供以下信息,以注销操作区域处理程序:

  • 表示定义操作区域的 ACPI 设备的 PDO。

  • ACPI 驱动程序在设备注册操作区域处理程序时返回的操作区域对象。 此对象唯一标识操作区域处理程序。

通常,驱动程序会先在驱动程序的即插即用调度例程中注销操作区域处理程序,然后再停止 FDO 以响应 IRP_MN_STOP_DEVICE 请求。 驱动程序必须先注销处理程序,然后才能释放处理程序的操作区域上下文。 如果驱动程序创建供应商定义的设备接口,驱动程序应在注销处理程序前禁用设备接口。