AVStream 中的设备互斥

使用设备互斥将层次结构中的对象从设备向下同步到筛选器。 每个 AVStream 设备都有一个关联的设备互斥体。 筛选器工厂和筛选器的创建和销毁都与此互斥体同步。 某些即插即用和电源管理操作也与此互斥体同步。 微型驱动程序侧重于与设备互斥体相关的两个main问题。

如果持有设备互斥体,则保证对象层次结构 从设备到单个筛选器保持稳定。 因此,微型驱动程序必须先获取设备互斥体,然后才能通过调用 KsCreateFilterFactory 手动创建筛选器工厂。 微型驱动程序还必须通过调用 KsXxxGetFirstChildXxxKsXxxGetNextSiblingXxx 函数来遍历对象层次结构之前获取设备互斥体。

AVStream 在收到以下请求时代表微型驱动程序保留设备互斥体:

请务必注意,无法以递归方式获取设备互斥体。 请考虑以下示例。 AVStream 接收睡眠通知。 如上所述,它代表微型驱动程序获取设备互斥体。 如果 AVStream 随后在线程 A 的上下文中调用微型驱动程序提供的回调例程,则微型驱动程序随后不得尝试获取线程 A 中的设备互斥。这样做会导致线程 A 与自身发生死锁。

AVStream 通常在设备互斥体已保留时获取筛选器控制互斥体。 因此,一般情况下,采用筛选器控制互斥体的线程随后不应采用设备互斥体。

若要操作设备互斥体,请使用以下函数:

KsAcquireDeviceKsReleaseDevice