与子设备的驱动程序通信

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

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

由于子驱动程序可以调入微型端口驱动程序,而无需视频端口驱动程序的知识,因此,微型端口驱动程序必须在 HwVidQueryInterface公开的所有函数中同步对其自身的访问。 为此,可以调用 VideoPortAcquireDeviceLockVideoPortReleaseDeviceLock ,分别获取并释放视频端口驱动程序维护的设备锁。

子设备由 HwVidGetVideoChildDescriptor枚举。