IWDFDeviceInitialize2::SetIoTypePreference 方法 (wudfddi.h)

[警告: UMDF 2 是最新版本的 UMDF,取代了 UMDF 1。 所有新的 UMDF 驱动程序都应使用 UMDF 2 编写。 未向 UMDF 1 添加新功能,并且较新版本的 Windows 10 上对 UMDF 1 的支持有限。 通用 Windows 驱动程序必须使用 UMDF 2。 有关详细信息,请参阅使用 UMDF 入门。]

SetIoTypePreference 方法指定 UMDF 和驱动程序如何访问设备 I/O 请求的数据缓冲区的首选项。

语法

void SetIoTypePreference(
  [in] WDF_DEVICE_IO_BUFFER_RETRIEVAL RetrievalMode,
  [in] WDF_DEVICE_IO_TYPE             ReadWritePreference,
  [in] WDF_DEVICE_IO_TYPE             IoControlPreference
);

参数

[in] RetrievalMode

一个WDF_DEVICE_IO_BUFFER_RETRIEVAL类型的值,该值指定你希望 UMDF 用于使 I/O 请求的缓冲区可供驱动程序使用的缓冲区检索模式。

[in] ReadWritePreference

一个WDF_DEVICE_IO_TYPE类型的值,该值指定你希望 UMDF 用于读取和写入请求的数据缓冲区的缓冲区访问方法。

[in] IoControlPreference

一个 WDF_DEVICE_IO_TYPE 类型的值,该值指定你希望 UMDF 用于设备 I/O 控制请求的数据缓冲区的缓冲区访问方法。

返回值

备注

如果驱动程序为设备调用 SetIoTypePreference ,则必须从其 IDriverEntry::OnDeviceAdd 回调函数执行此操作,然后驱动程序调用 IWDFDriver::CreateDevice

如果驱动程序不调用 SetIoTypePreference,UMDF 会将 RetrieveMode 参数设置为 WdfDeviceIoBufferRetrievalCopyImmediately ,并将缓冲区访问方法设置为 WdfDeviceIoBuffered 以进行读取、写入和设备 I/O 控制请求。

UMDF 可能不会使用驱动程序在调用 SetIoTypePreference 时指定的首选项。 有关 UMDF 如何选择检索模式和缓冲区访问方法的详细信息,请参阅 指定缓冲区检索模式UMDF 如何为 I/O 请求选择缓冲区访问方法

驱动程序无法将缓冲区访问方法设置为 WdfDeviceIoDirectWdfDeviceIoBufferedOrDirect ,除非它还将 RetrievalMode 参数设置为 WdfDeviceIoBufferRetrievalDeferred

有关访问 I/O 请求的数据缓冲区的详细信息,请参阅 访问 UMDF-Based 驱动程序中的数据缓冲区

示例

下面的代码示例演示驱动程序的 IDriverEntry::OnDeviceAdd 回调函数的一段。 段获取 IWDFDeviceInitialize2 接口,然后调用 SetIoTypePreference

HRESULT
 CMyDriver::OnDeviceAdd(
    __in IWDFDriver *FxWdfDriver,
    __in IWDFDeviceInitialize *FxDeviceInit
    )
{
...
    //
    // Declare an IWDFDeviceInitialize2 interface pointer and obtain the
    // IWDFDeviceInitialize2 interface from the IWDFDeviceInitialize interface.
    //
    CComQIPtr<IWDFDeviceInitialize2> di2 = FxDeviceInit;

    //
    // For this device, set the retrieval mode to deferred, set
    // the access method to buffered for read and write requests,
    // and set the access mode to direct for device I/O control requests.
    // 
    di2->SetIoTypePreference(WdfDeviceIoBufferRetrievalDeferred,
                             WdfDeviceIoBuffered,
                             WdfDeviceIoDirect);
...
}

要求

要求
结束支持 在 UMDF 2.0 及更高版本中不可用。
目标平台 桌面
最低 UMDF 版本 1.9
标头 wudfddi.h (包括 Wudfddi.h)
DLL WUDFx.dll

另请参阅

IWDFDeviceInitialize2

IWDFIoRequest2::GetEffectiveIoType

WDF_DEVICE_IO_BUFFER_RETRIEVAL

WDF_DEVICE_IO_TYPE (UMDF)

WdfDeviceInitSetIoType

WdfDeviceInitSetIoTypeEx