初始化常规 I/O 目标
当驱动程序调用 WdfDeviceCreate 时,框架为设备初始化驱动程序的本地 I/O 目标。 若要检索设备的本地 I/O 目标的句柄,驱动程序会调用 WdfDeviceGetIoTarget。
大多数驱动程序仅将请求发送到其本地 I/O 目标。
若要初始化设备的远程 I/O 目标,驱动程序必须:
调用 WdfIoTargetCreate 来创建 I/O 目标对象。
调用 WdfIoTargetOpen 打开 I/O 目标,以便驱动程序可以向其发送请求。
当驱动程序调用 WdfIoTargetOpen 时,它通常通过提供表示 对象名称的 Unicode 字符串来标识远程 I/O 目标。 此名称可以标识设备、文件或设备接口。 框架将 I/O 请求发送到支持对象名称的驱动程序堆栈顶部。
极少数情况下,驱动程序可能会通过提供指向 Windows 驱动程序模型的指针来标识远程 I/O 目标, (WDM) DEVICE_OBJECT 结构。 此指针标识调用驱动程序堆栈中的另一个驱动程序。 基于框架的驱动程序很少使用此方法,因为它们很少有权访问其他驱动程序 的DEVICE_OBJECT 结构。
以下示例演示 Ndisedge 示例驱动程序如何使用上述技术创建和打开远程 I/O 目标:
status = WdfIoTargetCreate(Adapter->WdfDevice,
WDF_NO_OBJECT_ATTRIBUTES,
&Adapter->IoTarget);
if (!NT_SUCCESS(status)) {
DEBUGP(MP_ERROR, ("WdfIoTargetCreate failed 0x%x\n",
status));
return status;
}
WDF_IO_TARGET_OPEN_PARAMS_INIT_CREATE_BY_NAME(&openParams,
&fileName,
STANDARD_RIGHTS_ALL
);
status = WdfIoTargetOpen(Adapter->IoTarget,
&openParams);
if (!NT_SUCCESS(status)) {
DEBUGP(MP_ERROR, ("WdfIoTargetOpen failed 0x%x\n", status));
return status;
}