WdfDeviceMiniportCreate 函数 (wdfminiport.h)
[仅适用于 KMDF]
WdfDeviceMiniportCreate 方法创建微型端口驱动程序可以使用的框架设备对象。
语法
NTSTATUS WdfDeviceMiniportCreate(
[in] WDFDRIVER Driver,
[in, optional] PWDF_OBJECT_ATTRIBUTES Attributes,
[in] PDEVICE_OBJECT DeviceObject,
[in, optional] PDEVICE_OBJECT AttachedDeviceObject,
[in, optional] PDEVICE_OBJECT Pdo,
[out] WDFDEVICE *Device
);
参数
[in] Driver
驱动程序的框架驱动程序对象的句柄,该句柄由先前对 WdfDriverCreate 的调用获取。
[in, optional] Attributes
指向调用方分配 的WDF_OBJECT_ATTRIBUTES 结构的指针,该结构包含新对象的属性。 此参数是可选的,可以WDF_NO_OBJECT_ATTRIBUTES。
[in] DeviceObject
指向 WDM DEVICE_OBJECT 结构的指针,该结构表示微型端口驱动程序 (FDO) 的功能设备对象。
[in, optional] AttachedDeviceObject
指向 WDM DEVICE_OBJECT 结构的指针,该结构表示设备堆栈中下一个较低的设备对象。
[in, optional] Pdo
指向 WDM DEVICE_OBJECT 结构的指针,该结构表示设备 (PDO) 的物理设备对象。
[out] Device
指向接收新框架设备对象的句柄的位置的指针。
返回值
如果 WdfDeviceMiniportCreate 方法未遇到任何错误,则返回STATUS_SUCCESS。 其他返回值包括:
返回代码 | 说明 |
---|---|
|
无法分配设备对象。 |
有关 WdfDeviceMiniportCreate 可以返回的其他返回值的列表,请参阅 框架对象创建错误。
该方法可能会返回其他 NTSTATUS 值。
如果驱动程序提供无效的对象句柄,则会发生 bug 检查。
注解
如果微型端口驱动程序使用框架,则当微型端口驱动程序通知其设备可用时,微型端口驱动程序应调用 WdfDeviceMiniportCreate 。 微型端口驱动程序不调用 WdfDeviceCreate。
微型端口驱动程序可能会从其端口驱动程序接收其 DeviceObject、 AttachedDeviceObject 和 PDO 指针。 例如,NDIS 微型端口驱动程序可以通过调用 NdisMGetDeviceProperty 来获取这些指针。
以下限制适用于微型端口驱动程序通过调用 WdfDeviceMiniportCreate 获取的框架设备对象:
- 设备对象表示的设备必须支持即插即用。
- 设备对象不支持任何设备对象的事件回调函数。 因此,端口驱动程序必须处理所有即插即用 (PnP) 和电源管理操作。
- 设备对象句柄无法传递给 WdfWmiProviderCreate,因此端口驱动程序必须提供对 Windows Management Instrumentation (WMI) 所需的任何支持。
- 设备对象句柄无法传递给 WdfIoQueueCreate,因此框架不支持微型端口驱动程序的 I/O 队列。
- 设备对象句柄无法传递给 WdfInterruptCreate,因此框架不支持微型端口驱动程序的中断对象。
- 设备对象句柄不能传递给除 WdfDeviceGetIoTarget、 WdfDeviceWdmGetDeviceObject、 WdfDeviceWdmGetAttachedDevice 和 WdfDeviceWdmGetPhysicalDevice 之外的任何常规框架设备对象方法。
- 设备对象句柄不能传递给除 WdfFdoQueryForInterface 以外的任何框架 FDO 方法。
- 设备对象句柄不能传递给任何 框架 PDO 方法 或 WdfChildListCreate,因此微型端口驱动程序不能是总线驱动程序。
- 驱动程序最终必须调用 WdfObjectDelete 以删除 WdfDeviceMiniportCreate 创建的设备对象。
为了将 I/O 请求发送到 I/O 目标,微型端口驱动程序可能会将设备对象句柄传递给 WdfDeviceGetIoTarget、 WdfIoTargetCreate 或 WdfUsbTargetDeviceCreateWithParameters。
如果设备支持 DMA 操作,微型端口驱动程序可以将设备对象句柄传递给 WdfDmaEnablerCreate 。
有关微型端口驱动程序的详细信息,请参阅 将 Kernel-Mode Driver Framework 与微型端口驱动程序配合使用。
示例
下面的代码示例调用 NdisMGetDeviceProperty 以获取 DeviceObject、 AttachedDeviceObject 和 PDO 指针;初始化设备对象的上下文空间,并创建微型端口设备对象。
WDF_OBJECT_ATTRIBUTES ObjectAttributes;
NdisMGetDeviceProperty(
MiniportAdapterHandle,
&Adapter->Pdo,
&Adapter->Fdo,
&Adapter->NextDeviceObject,
NULL,
NULL
);
WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(
&ObjectAttributes,
WDF_DEVICE_INFO
);
ntStatus = WdfDeviceMiniportCreate(
WdfGetDriver(),
&ObjectAttributes,
Adapter->Fdo,
Adapter->NextDeviceObject,
Adapter->Pdo,
&Adapter->WdfDevice
);
if (!NT_SUCCESS (ntStatus)) {
Status = NDIS_STATUS_FAILURE;
break;
}
要求
要求 | 值 |
---|---|
目标平台 | 通用 |
最低 KMDF 版本 | 1.0 |
标头 | wdfminiport.h (包括 Wdfminiport.h) |
Library | Wdf01000.sys (请参阅框架库 Versioning.) |
IRQL | PASSIVE_LEVEL |
DDI 符合性规则 | DriverCreate (kmdf) 、 KmdfIrql (kmdf) 、 KmdfIrql2 (kmdf) 、 KmdfIrqlExplicit (kmdf) |