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

Zeiger 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 seinem PnP-enumerierten instance zuzuordnen, sofern vorhanden.

Die Schnittstellentypen, z. B . PCIBus, sind in Wdm.h definiert. Wenn ein Treiber den LegacyBusType für das Gerät nicht kennt, gibt der Treiber den Wert InterfaceTypeUndefined für diesen Parameter an.

[in] BusNumber

Gibt die Busnummer für das Gerät an. Der PnP-Manager verwendet diese Informationen, um das gemeldete Gerät seinem PnP-enumerierten instance 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 die BusNumber für das Gerät nicht kennt, gibt der Treiber den Wert -1 für diesen Parameter an.

[in] SlotNumber

Gibt die logische Slotnummer des Geräts an. Der PnP-Manager verwendet diese Informationen, um das gemeldete Gerät seinem PnP-enumerierten instance zuzuordnen, sofern vorhanden.

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

[in, optional] ResourceList

Zeiger auf die Ressourcenliste, die der Treiber zum Erkennen des Geräts verwendet hat. Die Ressourcen in dieser Liste sind unformatiert, unübersetzt.

[in, optional] ResourceRequirements

Zeigt optional auf eine Ressourcenanforderungenliste für das erkannte Gerät. NULL , wenn der Aufrufer nicht über diese Informationen für das Gerät verfügt.

[in] ResourceAssigned

Gibt an, ob die Ressourcen des Geräts bereits an den PnP-Manager gemeldet wurden. Wenn ResourceAssignedauf TRUE festgelegt ist, wurden die Ressourcen bereits gemeldet, möglicherweise mit IoReportResourceForDetection, und der PnP-Manager versucht nicht, sie im Namen des Geräts abzurufen. True gibt an, dass der PnP-Manager auch keine Ressourcen anfordert, wenn das Gerät bei nachfolgenden Booten root-enumeriert wird.

[in, out] DeviceObject

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

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

Wenn der Aufrufer eine 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 beides.

Rückgabewert

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

Hinweise

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 ioReportDetectedDevice nur beim ersten Laden aufrufen, da der PnP-Manager die gemeldeten Informationen zwischenspeichert. Treiber, die diese Routine verwenden, sollten ein Flag in der Registrierung speichern, um anzugeben, ob sie die Geräteerkennung bereits durchgeführt haben.

Ein Treiber ruft diese Routine in der Regel aus seiner DriverEntry-Routine auf. Einige Treiber, z. B. bestimmte NDIS- oder EISA-Treiber, können diese Routine aus einer AddDevice-Routine aufrufen.

Nach erfolgreichem Abschluss von IoReportDetectedDevice sollte der Aufrufer eine FDO an die PDO anfügen, die unter DeviceObject zurückgegeben wird. Sobald der Aufrufer seine FDO angefügt hat, ist der Aufrufer zumindest vorübergehend der Funktionstreiber für das Gerät. 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 bereit sein, alle anderen PnP-IRPs zu verarbeiten.

IoReportDetectedDevice markiert das Gerät als root-enumeriertes Gerät, und diese Identifizierung ist über Systemboote hinweg persistent. Während des anschließenden Systemboots "erkennt" der PnP-Manager das Gerät in der Stammliste und konfiguriert es wie ein PnP-Gerät: Der PnP-Manager fragt Geräteinformationen ab, identifiziert die entsprechenden Treiber, ruft deren AddDevice-Routinen auf und sendet alle entsprechenden PnP-IRPs.

Das System generiert zwei kompatible ID-Zeichenfolgen für das Gerät im Format DETECTEDInterface\Driver und DETECTED\Driver. Interface ist der Zeichenfolgenname des INTERFACE_TYPE des ersten Buss, der im ResourceList-Parameter angegeben ist. Die Schnittstelle wird 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 er die IRP_MN_QUERY_ID-Anforderung verarbeitet.

Ein Treiberwriter 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 aufgerufen hat , als Treiber, der 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
Unterstützte Mindestversion (Client) Verfügbar ab Windows 2000.
Zielplattform Universell
Header ntddk.h (include Ntddk.h)
Bibliothek NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL (siehe Abschnitt "Hinweise")
DDI-Complianceregeln HwStorPortProhibitedDIs(storport), PowerIrpDDis(wdm)

Weitere Informationen

IRP_MN_QUERY_DEVICE_RELATIONS

IoReportResourceForDetection