初始化 UMDF 中的常规 I/O 目标

警告

UMDF 2 是最新版本的 UMDF,取代了 UMDF 1。 所有新的 UMDF 驱动程序都应使用 UMDF 2 编写。 未向 UMDF 1 添加新功能,并且较新版本的 Windows 10 上对 UMDF 1 的支持有限。 通用 Windows 驱动程序必须使用 UMDF 2。

存档的 UMDF 1 示例可在 Windows 11 版本 22H2 - 2022 年 5 月驱动程序示例更新中找到。

有关详细信息,请参阅使用 UMDF 入门

驱动程序用于初始化常规 I/O 目标的步骤取决于 I/O 目标是 本地 还是远程。

初始化本地 I/O 目标

本地 I/O 目标包括设备 的默认 I/O 目标和 基于文件句柄的 I/O 目标。

当驱动程序调用 IWDFDriver::CreateDevice 方法时,框架为设备初始化驱动程序的默认 I/O 目标。 若要检索使驱动程序能够访问设备的默认 I/O 目标的 IWDFIoTarget 接口,驱动程序会调用 IWDFDevice::GetDefaultIoTarget 方法。

大多数驱动程序仅将请求发送到其默认 I/O 目标。

如果 UMDF 驱动程序必须将 I/O 请求发送到基于句柄的接口(例如网络套接字接口),则驱动程序必须创建基于文件句柄的 I/O 目标对象。 若要创建基于文件句柄的 I/O 目标对象,驱动程序必须执行以下操作:

  1. 调用设备的 IWDFDevice 接口的 QueryInterface 方法以检索指向 IWDFFileHandleTargetFactory 接口的指针。

  2. 通过调用 Win32 CreateFileCreateNamedPipe 或 socket 函数,获取文件、命名管道或套接字的 Win32 句柄

  3. 调用 IWDFFileHandleTargetFactory::CreateFileHandleTarget 方法,为文件、管道或套接字创建基于文件句柄的 I/O 目标对象。

有关演示如何检索 IWDFFileHandleTargetFactory 接口、获取 Win32 句柄以及创建基于文件句柄的 I/O 目标对象的代码示例,请参阅 IWDFFileHandleTargetFactory::CreateFileHandleTarget 中的代码示例。

驱动程序创建基于文件句柄的 I/O 目标后,驱动程序可以将 I/O 请求发送到 I/O 目标。

初始化远程 I/O 目标

在驱动程序可以使用远程 I/O 目标之前,它必须创建远程目标对象并打开目标,如下所示:

  1. 调用 IWDFDevice2::CreateRemoteTarget 以创建远程目标对象。

  2. 为文件) 调用 IWDFRemoteTarget::OpenFileByName (,或调用设备接口) 的 IWDFRemoteTarget::OpenRemoteInterface (,以打开 I/O 操作的目标。