Freigeben über


IoReportDetectedDevice-Funktion (ntddk.h)

Die IoReportDetectedDevice Routine meldet ein Nicht-PnP-Gerät an den PnP-Manager.

Syntax

NTSTATUS IoReportDetectedDevice(
  [in]           PDRIVER_OBJECT                 DriverObject,
  [in]           INTERFACE_TYPE                 LegacyBusType,
  [in]           ULONG                          BusNumber,
  [in]           ULONG                          SlotNumber,
  [in, optional] PCM_RESOURCE_LIST              ResourceList,
  [in, optional] PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements,
  [in]           BOOLEAN                        ResourceAssigned,
  [in, out]      PDEVICE_OBJECT                 *DeviceObject
);

Parameter

[in] DriverObject

Zeigen Sie auf das Treiberobjekt des Treibers, der das Gerät erkannt hat.

[in] LegacyBusType

Gibt den Bustyp an, auf dem sich das Gerät befindet. Der PnP-Manager verwendet diese Informationen, um das gemeldete Gerät mit seiner PnP-Aufzählungsinstanz zuzuordnen, sofern vorhanden.

Die Schnittstellentypen wie PCIBuswerden in Wdm.h definiert. Wenn ein Treiber den LegacyBusType- für das Gerät nicht kennt, stellt der Treiber den Wert InterfaceTypeUndefined für diesen Parameter bereit.

[in] BusNumber

Gibt die Busnummer für das Gerät an. Der PnP-Manager verwendet diese Informationen, um das gemeldete Gerät mit seiner PnP-Aufzählungsinstanz zuzuordnen, sofern vorhanden.

Die Busnummer unterscheidet den Bus, auf dem sich das Gerät befindet, von anderen Bussen desselben Typs auf dem Computer. Das Busnummerierungsschema ist busspezifisch. Wenn ein Treiber den BusNumber- für das Gerät nicht kennt, gibt der Treiber den Wert -1 für diesen Parameter an.

[in] SlotNumber

Gibt die logische Steckplatznummer des Geräts an. Der PnP-Manager verwendet diese Informationen, um das gemeldete Gerät mit seiner PnP-Aufzählungsinstanz zuzuordnen, sofern vorhanden.

Wenn ein Treiber den SlotNumber- für das Gerät nicht kennt, gibt der Treiber den Wert -1 für diesen Parameter an.

[in, optional] ResourceList

Zeigen Sie auf die Ressourcenliste, die der Treiber zum Ermitteln des Geräts verwendet hat. Ressourcen in dieser Liste befinden sich in unformatierter, nicht übersetzter Form.

[in, optional] ResourceRequirements

Verweist optional auf eine Ressourcenanforderungensliste für das erkannte Gerät. NULL-, wenn der Aufrufer diese Informationen für das Gerät nicht enthält.

[in] ResourceAssigned

Gibt an, ob die Ressourcen des Geräts bereits dem PnP-Manager gemeldet wurden. Wenn ResourceAssigned-TRUEist, wurden die Ressourcen bereits gemeldet, möglicherweise mit IoReportResourceForDetection, und der PnP-Manager versucht nicht, sie im Auftrag des Geräts anzufordern. Wenn TRUE-, beansprucht der PnP-Manager auch keine Ressourcen, wenn das Gerät bei nachfolgenden Starts root-enumeriert wird.

[in, out] DeviceObject

Zeigt optional auf einen PDO für das erkannte Gerät.

NULL-, wenn der Aufrufer keinen PDO für das Gerät aufweist, was in der Regel der Fall ist. Wenn DeviceObject-NULL-ist, erstellt der PnP-Manager einen PDO für das Gerät und gibt einen Zeiger auf den Aufrufer zurück.

Wenn der Aufrufer einen PDO bereitstellt, erstellt der PnP-Manager keine neue PDO. Bei einem bestimmten Aufruf dieser Routine ist der DeviceObject Parameter entweder ein IN- oder ein OUT-Parameter, aber nicht beide.

Rückgabewert

IoReportDetectedDevice STATUS_SUCCESS bei Erfolg oder den entsprechenden Fehlercode bei Fehler zurück.

Bemerkungen

Treiber für ältere Geräte verwenden IoReportDetectedDevice-, um ihre Geräte an das System zu melden. Ein Treiber sollte nur IoReportDetectedDevice- aufrufen, um ein älteres, nicht PnP-Gerät zu melden. PnP-Geräte sollten als Reaktion auf eine IRP_MN_QUERY_DEVICE_RELATIONS Anforderung gemeldet werden.

Treiber müssen nur IoReportDetectedDevice aufrufen, wenn sie zum ersten Mal geladen werden, da der PnP-Manager die gemeldeten Informationen zwischenspeichert. Treiber, die diese Routine verwenden, sollten ein Kennzeichen in der Registrierung speichern, um anzugeben, ob sie die Geräteerkennung bereits durchgeführt haben.

Ein Treiber ruft diese Routine in der Regel von der DriverEntry Routine auf. Einige Treiber, z. B. bestimmte NDIS- oder EISA-Treiber, rufen diese Routine möglicherweise aus einer AddDevice- Routine auf.

Nach erfolgreichem Abschluss von IoReportDetectedDevicesollte der Aufrufer einen FDO an den PDO anfügen, der bei DeviceObjectzurückgegeben wird. Sobald der Aufrufer seine FDO angefügt hat, ist der Aufrufer der Funktionstreiber für das Gerät, zumindest vorübergehend. Es gibt keine Filtertreiber. Der PnP-Manager besitzt die PDO.

Der PnP-Manager betrachtet das Gerät als gestartet und ruft daher nicht die AddDevice-Routine des Treibers auf und sendet keine IRP_MN_START_DEVICE Anforderung. Der Treiber muss jedoch darauf vorbereitet sein, alle anderen PnP-IRPs zu verarbeiten.

IoReportDetectedDevice kennzeichnet das Gerät als aufgezähltes Stammgerät, und diese Identifizierung ist für Systemboote dauerhaft. Während der nachfolgenden System startet der PnP-Manager das Gerät in der Stammliste "erkennt" und konfiguriert es wie ein PnP-Gerät: Der PnP-Manager fragt nach Geräteinformationen ab, identifiziert die entsprechenden Treiber und ruft seine AddDevice Routinen auf und sendet alle entsprechenden PnP-IRPs.

Das System generiert zwei kompatible ID-Zeichenfolgen für das Gerät, des Formulars erkanntInterface\Driver und DETECTED\Driver. Interface ist der Zeichenfolgenname des INTERFACE_TYPE des ersten Buss, der im parameter ResourceList angegeben ist. Interface ist auf "Intern" festgelegt, wenn kein Bus angegeben ist. Driver ist der Dienstname des Treibers. Ein Treiber kann zusätzliche Hardware-IDs oder kompatible IDs bereitstellen, indem die IRP_MN_QUERY_ID Anforderung behandelt wird.

Ein Treiberschreiber muss eine INF-Datei bereitstellen, die mit einer der angegebenen Hardware-IDs oder kompatiblen IDs übereinstimmt. Die INF-Datei sollte den ursprünglichen Treiber angeben, der IoReportDetectedDevice als Treiber für diese IDs geladen werden soll. Das System verwendet diese Informationen, um den Treiberstapel für das Gerät neu zu erstellen, z. B. beim Neustart. Aufrufer von IoReportDetectedDevice müssen unter IRQL = PASSIVE_LEVEL im Kontext eines Systemthreads ausgeführt werden.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Ab Windows 2000 verfügbar.
Zielplattform- Universal
Header- ntddk.h (include Ntddk.h)
Library NtosKrnl.lib
DLL- NtosKrnl.exe
IRQL- PASSIVE_LEVEL (siehe Abschnitt "Hinweise")
DDI-Complianceregeln HwStorPortProhibitedDIs(storport), PowerIrpDDis(wdm)

Siehe auch

IRP_MN_QUERY_DEVICE_RELATIONS

IoReportResourceForDetection-