Função WdfDeviceMiniportCreate (wdfminiport.h)

[Aplica-se somente ao KMDF]

O método WdfDeviceMiniportCreate cria um objeto de dispositivo de estrutura que um driver de miniporto pode usar.

Sintaxe

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
);

Parâmetros

[in] Driver

Um identificador para o objeto de driver de estrutura do driver, obtido por uma chamada anterior para WdfDriverCreate.

[in, optional] Attributes

Um ponteiro para uma estrutura de WDF_OBJECT_ATTRIBUTES alocada pelo chamador que contém atributos para o novo objeto. Esse parâmetro é opcional e pode ser WDF_NO_OBJECT_ATTRIBUTES.

[in] DeviceObject

Um ponteiro para uma estrutura de DEVICE_OBJECT WDM que representa o FDO (objeto de dispositivo funcional) para o driver de miniport.

[in, optional] AttachedDeviceObject

Um ponteiro para uma estrutura de DEVICE_OBJECT WDM que representa o objeto de dispositivo mais baixo na pilha do dispositivo.

[in, optional] Pdo

Um ponteiro para uma estrutura de DEVICE_OBJECT WDM que representa o PDO (objeto de dispositivo físico) para o dispositivo.

[out] Device

Um ponteiro para um local que recebe um identificador para o novo objeto de dispositivo de estrutura.

Retornar valor

Se o método WdfDeviceMiniportCreate não encontrar erros, ele retornará STATUS_SUCCESS. Os valores retornados adicionais incluem:

Código de retorno Descrição
STATUS_INSUFFICIENT_RESOURCES
Não foi possível alocar um objeto de dispositivo.
 

Para obter uma lista de outros valores retornados que WdfDeviceMiniportCreate pode retornar, consulte Erros de criação de objeto da estrutura.

O método pode retornar outros valores NTSTATUS.

Um bug marcar ocorrerá se o driver fornecer um identificador de objeto inválido.

Comentários

Se o driver de miniporto usar a estrutura, o driver de miniporto deverá chamar WdfDeviceMiniportCreate quando o driver de porta informar que um dispositivo está disponível. Os drivers de miniport não chamam WdfDeviceCreate.

O driver de miniporte pode receber seus ponteiros DeviceObject, AttachedDeviceObject e PDO do driver de porta. Por exemplo, um driver de miniporto NDIS pode obter esses ponteiros chamando NdisMGetDeviceProperty.

As seguintes restrições se aplicam aos objetos de dispositivo de estrutura que um driver de miniporto obtém chamando WdfDeviceMiniportCreate:

  • O dispositivo que o objeto do dispositivo representa deve dar suporte a Plug and Play.
  • O objeto do dispositivo não dá suporte a nenhuma das funções de retorno de chamada de evento do objeto do dispositivo. Portanto, o driver de porta deve lidar com todas as operações de gerenciamento de energia e PnP (Plug and Play).
  • O identificador de objeto do dispositivo não pode ser passado para WdfWmiProviderCreate, portanto, o driver de porta deve fornecer qualquer suporte necessário para a WMI (Instrumentação de Gerenciamento do Windows).
  • O identificador de objeto do dispositivo não pode ser passado para WdfIoQueueCreate, portanto, a estrutura não dá suporte a filas de E/S para drivers de miniport.
  • O identificador de objeto do dispositivo não pode ser passado para WdfInterruptCreate, portanto, a estrutura não dá suporte a objetos de interrupção para drivers de miniport.
  • O identificador de objeto do dispositivo não pode ser passado para nenhum método de objeto de dispositivo de estrutura geral, exceto WdfDeviceGetIoTarget, WdfDeviceWdmGetDeviceObject, WdfDeviceWdmGetAttachedDevice e WdfDeviceWdmGetPhysicalDevice.
  • O identificador de objeto do dispositivo não pode ser passado para nenhum método FDO de estrutura , exceto WdfFdoQueryForInterface.
  • O identificador de objeto do dispositivo não pode ser passado para nenhum método PDO de estrutura ou para WdfChildListCreate, portanto, o driver de miniporto não pode ser um driver de ônibus.
  • O driver deve eventualmente chamar WdfObjectDelete para excluir o objeto de dispositivo que WdfDeviceMiniportCreate cria.
Objetos de dispositivo de estrutura que WdfDeviceMiniportCreate criar podem ser usados como um objeto pai para qualquer objeto de estrutura criado posteriormente.

Para enviar solicitações de E/S para destinos de E/S, o driver de miniporto pode passar o identificador de objeto do dispositivo para WdfDeviceGetIoTarget, WdfIoTargetCreate ou WdfUsbTargetDeviceCreateWithParameters.

O driver de miniporte poderá passar o identificador de objeto do dispositivo para WdfDmaEnablerCreate se o dispositivo der suporte a operações de DMA.

Para obter mais informações sobre drivers de miniporte, consulte Using Kernel-Mode Driver Framework with Miniport Drivers (Usando o Kernel-Mode Driver Framework com miniport drivers).

Exemplos

O exemplo de código a seguir chama os ponteiros NdisMGetDeviceProperty para obter ponteiros DeviceObject, AttachedDeviceObject e PDO ; inicializa o espaço de contexto do objeto do dispositivo e cria um objeto de dispositivo de miniport.

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;
}

Requisitos

Requisito Valor
Plataforma de Destino Universal
Versão mínima do KMDF 1.0
Cabeçalho wdfminiport.h (inclua Wdfminiport.h)
Biblioteca Wdf01000.sys (consulte Controle de versão da biblioteca de estrutura.)
IRQL PASSIVE_LEVEL
Regras de conformidade de DDI DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

Confira também

WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE

WdfDeviceCreate

WdfDriverMiniportUnload