Condividi tramite


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 framework del driver del driver ottenuto da una chiamata precedente a WdfDriverCreare.

[in, optional] Attributes

Puntatore a una struttura WDF_OBJECT_ATTRIBUTES allocata dal chiamante che contiene gli 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 WdfDeviceMiniportCreate possono restituire, vedere Framework Object Creation Errors.

Il metodo potrebbe restituire altri valori NTSTATUS .

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

Osservazioni:

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

Il driver miniport potrebbe ricevere i relativi puntatori DeviceObject, AttachedDeviceObjecte 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 WdfDeviceMiniportCreare:

  • Il dispositivo rappresentato dall'oggetto dispositivo deve supportare Plug and Play.
  • L'oggetto dispositivo non supporta alcuna delle funzioni di callback degli eventi dell'oggetto dispositivo. Pertanto, il driver della porta deve gestire tutte le operazioni 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, pertanto il framework non supporta gli oggetti interrupt per i driver miniport.
  • L'handle dell'oggetto dispositivo non può essere passato ad alcun metodo oggetto del framework generale, ad eccezione di WdfDeviceGetIoTarget, WdfDeviceWdmGetDeviceObject, WdfDeviceWdmGetAttachedDevicee WdfDeviceWdmGetPhysicalDevice.
  • L'handle dell'oggetto dispositivo non può essere passato a metodi FDO framework tranne WdfFdoQueryForInterface.
  • L'handle dell'oggetto dispositivo non può essere passato a qualsiasi metodo PDO del framework o a WdfChildListCreate, quindi il driver miniport non può essere un autista di autobus.
  • Il driver deve infine chiamare WdfObjectDelete per eliminare l'oggetto dispositivo che WdfDeviceMiniportCreate crea.
Gli oggetti dispositivo framework che WdfDeviceMiniportCreate create 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, WdfIoTargetCreateo 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 Using Kernel-Mode Driver Framework with Miniport Drivers.

Esempi

L'esempio di codice seguente chiama NdisMGetDeviceProperty per ottenere DeviceObject, AttachedDeviceObjecte puntatori 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 minima di KMDF 1.0
intestazione wdfminiport.h (include Wdfminiport.h)
Biblioteca Wdf01000.sys (vedere Controllo delle versioni della libreria framework).
IRQL PASSIVE_LEVEL
regole di conformità DDI DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

Vedere anche

WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE

WdfDeviceCreare

WdfDriverMiniportUnload