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