Funzione WdfDeviceMiniportCreate (wdfminiport.h)

[Si applica solo a KMDF]

Il metodo WdfDeviceMiniportCreate crea un oggetto dispositivo framework che un driver miniport può usare.

Sintassi

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

Parametri

[in] Driver

Handle per l'oggetto driver del framework del driver, ottenuto da una chiamata precedente a WdfDriverCreate.

[in, optional] Attributes

Puntatore a una struttura WDF_OBJECT_ATTRIBUTES allocata dal chiamante che contiene attributi per il nuovo oggetto. Questo parametro è facoltativo e può essere WDF_NO_OBJECT_ATTRIBUTES.

[in] DeviceObject

Puntatore a una struttura di DEVICE_OBJECT WDM che rappresenta l'oggetto dispositivo funzionale (FDO) per il driver miniport.

[in, optional] AttachedDeviceObject

Puntatore a una struttura di DEVICE_OBJECT WDM che rappresenta l'oggetto dispositivo inferiore successivo nello stack di dispositivi.

[in, optional] Pdo

Puntatore a una struttura di DEVICE_OBJECT WDM che rappresenta l'oggetto dispositivo fisico (PDO) per il dispositivo.

[out] Device

Puntatore a una posizione che riceve un handle per il nuovo oggetto dispositivo framework.

Valore restituito

Se il metodo WdfDeviceMiniportCreate non rileva errori, restituisce STATUS_SUCCESS. I valori restituiti aggiuntivi includono:

Codice restituito Descrizione
STATUS_INSUFFICIENT_RESOURCES
Impossibile allocare un oggetto dispositivo.
 

Per un elenco di altri valori restituiti che possono essere restituiti da WdfDeviceMiniportCreate , vedere Errori di creazione di oggetti framework.

Il metodo potrebbe restituire altri valori NTSTATUS.

Se il driver fornisce un handle di oggetto non valido, si verifica un controllo di bug.

Commenti

Se il driver miniport usa il framework, il driver miniport deve chiamare WdfDeviceMiniportCreate quando il driver della porta informa che un dispositivo è disponibile. I driver Miniport non chiamano WdfDeviceCreate.

Il driver miniport potrebbe ricevere i puntatori DeviceObject, AttachedDeviceObject e PDO dal driver di porta. Ad esempio, un driver miniport NDIS può ottenere questi puntatori chiamando NdisMGetDeviceProperty.

Le restrizioni seguenti si applicano agli oggetti dispositivo framework ottenuti da un driver miniport chiamando WdfDeviceMiniportCreate:

  • Il dispositivo rappresentato dall'oggetto dispositivo deve supportare Plug and Play.
  • L'oggetto dispositivo non supporta alcuna funzione di callback di evento dell'oggetto dispositivo. Di conseguenza, il driver della porta deve gestire tutte le operazioni di Plug and Play (PnP) e risparmio energia.
  • L'handle dell'oggetto dispositivo non può essere passato a WdfWmiProviderCreate, quindi il driver della porta deve fornire qualsiasi supporto necessario per Strumentazione gestione Windows (WMI).
  • L'handle dell'oggetto dispositivo non può essere passato a WdfIoQueueCreate, quindi il framework non supporta le code di I/O per i driver miniport.
  • L'handle dell'oggetto dispositivo non può essere passato a WdfInterruptCreate, quindi il framework non supporta gli oggetti interrupt per i driver miniport.
  • L'handle dell'oggetto dispositivo non può essere passato a qualsiasi metodo oggetto dispositivo framework generale, ad eccezione di WdfDeviceGetIoTarget, WdfDeviceWdmGetDeviceObject, WdfDeviceWdmGetAttachedDevice e WdfDeviceWdmGetPhysicalDevice.
  • L'handle dell'oggetto dispositivo non può essere passato ad alcun metodo FDO del framework , ad eccezione di WdfFdoQueryForInterface.
  • L'handle dell'oggetto dispositivo non può essere passato a alcun metodo PDO del framework o a WdfChildListCreate, quindi il driver miniport non può essere un driver dell'autobus.
  • Il driver deve infine chiamare WdfObjectDelete per eliminare l'oggetto dispositivo creato da WdfDeviceMiniportCreate .
Gli oggetti dispositivo framework creati da WdfDeviceMiniportCreate possono essere usati come oggetto padre per qualsiasi oggetto framework creato successivamente.

Per inviare richieste di I/O alle destinazioni di I/O, il driver miniport potrebbe passare l'handle dell'oggetto dispositivo a WdfDeviceGetIoTarget, WdfIoTargetCreate o WdfUsbTargetDeviceCreateWithParameters.

Il driver miniport può passare l'handle dell'oggetto dispositivo a WdfDmaEnablerCreate se il dispositivo supporta le operazioni DMA.

Per altre informazioni sui driver miniport, vedere Uso di Kernel-Mode Driver Framework con driver Miniport.

Esempio

L'esempio di codice seguente chiama NdisMGetDeviceProperty per ottenere puntatori DeviceObject, AttachedDeviceObject e PDO ; inizializza lo spazio di contesto dell'oggetto dispositivo e crea un oggetto dispositivo 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;
}

Requisiti

Requisito Valore
Piattaforma di destinazione Universale
Versione KMDF minima 1,0
Intestazione wdfminiport.h (include Wdfminiport.h)
Libreria Wdf01000.sys (vedere Controllo delle versioni della libreria framework).
IRQL PASSIVE_LEVEL
Regole di conformità DDI DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

Vedi anche

WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE

WdfDeviceCreate

WdfDriverMiniportUnload