WdfDeviceMiniportCreate-Funktion (wdfminiport.h)

[Gilt nur für KMDF]

Die WdfDeviceMiniportCreate-Methode erstellt ein Framework-Geräteobjekt, das von einem Miniporttreiber verwendet werden kann.

Syntax

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

Parameter

[in] Driver

Ein Handle für das Frameworktreiberobjekt des Treibers, das durch einen vorherigen Aufruf von WdfDriverCreate abgerufen wurde.

[in, optional] Attributes

Ein Zeiger auf eine vom Aufrufer zugeordnete WDF_OBJECT_ATTRIBUTES-Struktur , die Attribute für das neue Objekt enthält. Dieser Parameter ist optional und kann WDF_NO_OBJECT_ATTRIBUTES werden.

[in] DeviceObject

Ein Zeiger auf eine WDM-DEVICE_OBJECT-Struktur , die das funktionale Geräteobjekt (Functional Device Object, FDO) für den Miniporttreiber darstellt.

[in, optional] AttachedDeviceObject

Ein Zeiger auf eine WDM-DEVICE_OBJECT Struktur, die das nächstniedrige Geräteobjekt im Gerätestapel darstellt.

[in, optional] Pdo

Ein Zeiger auf eine WDM-DEVICE_OBJECT-Struktur, die das physische Geräteobjekt (PDO) für das Gerät darstellt.

[out] Device

Ein Zeiger auf einen Speicherort, der ein Handle für das neue Frameworkgeräteobjekt empfängt.

Rückgabewert

Wenn bei der WdfDeviceMiniportCreate-Methode keine Fehler auftreten, wird STATUS_SUCCESS zurückgegeben. Weitere Rückgabewerte sind:

Rückgabecode Beschreibung
STATUS_INSUFFICIENT_RESOURCES
Ein Geräteobjekt konnte nicht zugeordnet werden.
 

Eine Liste mit anderen Rückgabewerten, die WdfDeviceMiniportCreate zurückgeben kann, finden Sie unter Fehler beim Erstellen von Frameworkobjekten.

Die -Methode gibt möglicherweise andere NTSTATUS-Werte zurück.

Eine Fehlerüberprüfung tritt auf, wenn der Treiber ein ungültiges Objekthandle bereitstellt.

Hinweise

Wenn Ihr Miniporttreiber das Framework verwendet, sollte der Miniporttreiber WdfDeviceMiniportCreate aufrufen, wenn der Porttreiber ihn darüber informiert, dass ein Gerät verfügbar ist. Miniport-Treiber rufen WdfDeviceCreate nicht auf.

Ihr Miniporttreiber erhält möglicherweise seine DeviceObject-, AttachedDeviceObject- und PDO-Zeiger vom Porttreiber. Beispielsweise kann ein NDIS-Miniporttreiber diese Zeiger abrufen, indem er NdisMGetDeviceProperty aufruft.

Die folgenden Einschränkungen gelten für Frameworkgeräteobjekte, die ein Miniporttreiber durch Aufrufen von WdfDeviceMiniportCreate abruft:

  • Das Gerät, das das Geräteobjekt darstellt, muss Plug & Play unterstützen.
  • Das Geräteobjekt unterstützt keine der Ereignisrückruffunktionen des Geräteobjekts. Daher muss der Porttreiber alle Plug & Play (PnP) und Energieverwaltungsvorgänge verarbeiten.
  • Das Geräteobjekthandle kann nicht an WdfWmiProviderCreate übergeben werden, sodass der Porttreiber alle erforderlichen Unterstützung für die Windows-Verwaltungsinstrumentation (WMI) bereitstellen muss.
  • Das Geräteobjekthandle kann nicht an WdfIoQueueCreate übergeben werden, sodass das Framework keine E/A-Warteschlangen für Miniporttreiber unterstützt.
  • Das Objekthandle des Geräts kann nicht an WdfInterruptCreate übergeben werden, sodass das Framework keine Interruptobjekte für Miniporttreiber unterstützt.
  • Das Geräteobjekthandle kann nicht an allgemeine Framework-Geräteobjektmethoden mit Ausnahme von WdfDeviceGetIoTarget, WdfDeviceWdmGetDeviceObject, WdfDeviceWdmGetAttachedDevice und WdfDeviceWdmGetPhysicalDevice übergeben werden.
  • Das Objekthandle des Geräts kann nicht an framework-FDO-Methoden mit Ausnahme von WdfFdoQueryForInterface übergeben werden.
  • Das Geräteobjekthandle kann nicht an keine Framework-PDO-Methoden oder an WdfChildListCreate übergeben werden, sodass der Miniporttreiber kein Bustreiber sein kann.
  • Der Treiber muss schließlich WdfObjectDelete aufrufen, um das von WdfDeviceMiniportCreate erstellte Geräteobjekt zu löschen.
Framework-Geräteobjekte, die von WdfDeviceMiniportCreate erstellt werden, können als übergeordnetes Objekt für jedes später erstellte Frameworkobjekt verwendet werden.

Um E/A-Anforderungen an E/A-Ziele zu senden, übergibt der Miniporttreiber möglicherweise das Geräteobjekthandle an WdfDeviceGetIoTarget, WdfIoTargetCreate oder WdfUsbTargetDeviceCreateWithParameters.

Der Miniporttreiber kann das Geräteobjekthandle an WdfDmaEnablerCreate übergeben, wenn das Gerät DMA-Vorgänge unterstützt.

Weitere Informationen zu Miniporttreibern finden Sie unter Verwenden von Kernel-Mode Driver Framework mit Miniport-Treibern.

Beispiele

Im folgenden Codebeispiel wird NdisMGetDeviceProperty aufgerufen, um Die Zeiger DeviceObject, AttachedDeviceObject und PDO abzurufen. initialisiert den Kontextbereich des Geräteobjekts und erstellt ein Miniport-Geräteobjekt.

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

Anforderungen

Anforderung Wert
Zielplattform Universell
KMDF-Mindestversion 1.0
Kopfzeile wdfminiport.h (include Wdfminiport.h)
Bibliothek Wdf01000.sys (siehe Versionsverwaltung der Frameworkbibliothek).)
IRQL PASSIVE_LEVEL
DDI-Complianceregeln DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

Weitere Informationen

WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE

WdfDeviceCreate

WdfDriverMiniportUnload