与子设备的驱动程序通信

视频微型端口驱动程序和子设备的驱动程序可以相互定义一个接口,该接口允许子驱动程序通过父微型端口驱动程序与其硬件通信。 子驱动程序通过向父微型端口驱动程序的视频端口驱动程序发送 IRP_MN_QUERY_INTERFACE 请求来获取此接口。 收到此类请求后,视频端口驱动程序调用微型端口驱动程序的 HwVidQueryInterface 函数(如果已定义),微型端口驱动程序返回指向接口的指针。 然后,子设备的驱动程序可以随时通过 HwVidQueryInterface 公开的函数调用微型端口驱动程序。

如果微型端口驱动程序未实现 HwVidQueryInterface 或调用失败,则视频端口驱动程序会将请求传递给微型端口驱动程序的设备的父级。 如果子驱动程序将IRP_MN_QUERY_INTERFACE发送到微型端口驱动程序的另一个子级,并且另一个子驱动程序未实现 HwVidQueryInterface 或调用失败,则视频端口驱动程序将返回错误。

由于子驱动程序可以在视频端口驱动程序不知情的情况下调用微型端口驱动程序,因此微型端口驱动程序必须在 HwVidQueryInterface 公开的所有函数中同步对自身的访问。 它通过调用 VideoPortAcquireDeviceLockVideoPortReleaseDeviceLock 分别抓取和释放视频端口驱动程序维护的设备锁来执行此操作。

子设备由 HwVidGetVideoChildDescriptor 枚举。