Функция 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. К дополнительным возвращаемым значениям относятся:

Код возврата Описание
STATUS_INSUFFICIENT_RESOURCES
Не удалось выделить объект устройства.
 

Список других возвращаемых значений, которые может возвращать WdfDeviceMiniportCreate , см. в разделе Ошибки создания объектов платформы.

Метод может возвращать другие значения NTSTATUS.

Ошибка проверка возникает, если драйвер предоставляет недопустимый дескриптор объекта.

Комментарии

Если драйвер минипорта использует платформу, драйвер минипорта должен вызвать WdfDeviceMiniportCreate , когда драйвер порта сообщит ему о доступности устройства. Драйверы минипорта не вызывают WdfDeviceCreate.

Драйвер мини-порта может получать указатели DeviceObject, AttachedDeviceObject и PDO от драйвера порта. Например, драйвер мини-порта NDIS может получить эти указатели, вызвав NdisMGetDeviceProperty.

Следующие ограничения применяются к объектам устройств платформы, которые драйвер мини-порта получает путем вызова WdfDeviceMiniportCreate:

  • Устройство, которое представляет объект устройства, должно поддерживать Plug and Play.
  • Объект устройства не поддерживает какие-либо функции обратного вызова событий объекта устройства. Поэтому драйвер порта должен обрабатывать все операции Plug and Play (PnP) и управления питанием.
  • Дескриптор объекта устройства не может быть передан в WdfWmiProviderCreate, поэтому драйвер порта должен обеспечить необходимую поддержку инструментария управления Windows (WMI).
  • Дескриптор объекта устройства не может быть передан в WdfIoQueueCreate, поэтому платформа не поддерживает очереди ввода-вывода для драйверов минипорта.
  • Дескриптор объекта устройства не может быть передан в WdfInterruptCreate, поэтому платформа не поддерживает объекты прерываний для драйверов минипорта.
  • Дескриптор объекта устройства нельзя передать никаким общим методам объекта устройства платформы, кроме WdfDeviceGetIoTarget, WdfDeviceWdmGetDeviceObject, WdfDeviceWdmGetAttachedDevice и WdfDeviceWdmGetPhysicalDevice.
  • Дескриптор объекта устройства не может быть передан никаким методам FDO платформы , кроме WdfFdoQueryForInterface.
  • Дескриптор объекта устройства не может быть передан каким-либо методам PDO платформы или WdfChildListCreate, поэтому драйвер минипорта не может быть драйвером автобуса.
  • Драйвер должен в конечном итоге вызвать WdfObjectDelete , чтобы удалить объект устройства, создаваемый WdfDeviceMiniportCreate .
Объекты устройств платформы, созданные WdfDeviceMiniportCreate , можно использовать в качестве родительского объекта для любого последующего созданного объекта платформы.

Чтобы отправлять запросы ввода-вывода в целевые объекты ввода-вывода, драйвер мини-порта может передать дескриптор объекта устройства в WdfDeviceGetIoTarget, WdfIoTargetCreate или WdfUsbTargetDeviceCreateWithParameters.

Драйвер мини-порта может передать дескриптор объекта устройства в WdfDmaEnablerCreate , если устройство поддерживает операции DMA.

Дополнительные сведения о драйверах минипорта см. в статье Использование платформы Kernel-Mode Driver Framework с драйверами miniport.

Примеры

В следующем примере кода вызывается 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)
Библиотека Wdf01000.sys (см. раздел Управление версиями библиотеки Платформы).
IRQL PASSIVE_LEVEL
Правила соответствия DDI DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

См. также раздел

WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE

WdfDeviceCreate

WdfDriverMiniportUnload