Funzione IoReportDetectedDevice (ntddk.h)

La routine IoReportDetectedDevice segnala un dispositivo non PnP al gestore PnP.

Sintassi

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

Parametri

[in] DriverObject

Puntatore all'oggetto driver del driver che ha rilevato il dispositivo.

[in] LegacyBusType

Specifica il tipo di bus in cui risiede il dispositivo. Il gestore PnP usa queste informazioni per trovare la corrispondenza tra il dispositivo segnalato e l'istanza enumerata PnP, se presente.

I tipi di interfaccia, ad esempio PCIBus, sono definiti in Wdm.h. Se un driver non conosce LegacyBusType per il dispositivo, il driver fornisce il valore InterfaceTypeUndefined per questo parametro.

[in] BusNumber

Specifica il numero di bus per il dispositivo. Il gestore PnP usa queste informazioni per trovare la corrispondenza tra il dispositivo segnalato e l'istanza enumerata PnP, se presente.

Il numero dell'autobus distingue l'autobus su cui risiede il dispositivo da altri autobus dello stesso tipo nel computer. Lo schema di numerazione degli autobus è specifico dell'autobus. Se un driver non conosce busNumber per il dispositivo, il driver fornisce il valore -1 per questo parametro.

[in] SlotNumber

Specifica il numero di slot logico del dispositivo. Il gestore PnP usa queste informazioni per trovare la corrispondenza tra il dispositivo segnalato e l'istanza enumerata PnP, se presente.

Se un driver non conosce SlotNumber per il dispositivo, il driver fornisce il valore -1 per questo parametro.

[in, optional] ResourceList

Puntatore all'elenco delle risorse il driver usato per rilevare il dispositivo. Le risorse in questo elenco sono in formato non elaborato e non tradotto.

[in, optional] ResourceRequirements

Facoltativamente, punta a un elenco dei requisiti delle risorse per il dispositivo rilevato. NULL se il chiamante non dispone di queste informazioni per il dispositivo.

[in] ResourceAssigned

Specifica se le risorse del dispositivo sono già state segnalate al gestore PnP. Se ResourceAssigned è TRUE, le risorse sono già state segnalate, possibilmente con IoReportResourceForDetection e il gestore PnP non tenterà di richiederle per conto del dispositivo. Se TRUE, anche il gestore PnP non richiederà risorse quando il dispositivo viene enumerato come radice negli avvio successivi.

[in, out] DeviceObject

Facoltativamente punta a un PDO per il dispositivo rilevato.

NULL se il chiamante non ha un PDO per il dispositivo, che in genere è il caso. Se DeviceObject è NULL, il gestore PnP crea un PDO per il dispositivo e restituisce un puntatore al chiamante.

Se il chiamante fornisce un PDO, il gestore PnP non crea un nuovo PDO. In una determinata chiamata a questa routine il parametro DeviceObject è un parametro IN o OUT, ma non entrambi.

Valore restituito

IoReportDetectedDevice restituisce STATUS_SUCCESS in caso di esito positivo o il codice di errore appropriato in caso di errore.

Commenti

I driver per i dispositivi legacy usano IoReportDetectedDevice per segnalare i dispositivi al sistema. Un driver deve chiamare solo IoReportDetectedDevice per segnalare un dispositivo legacy non PnP. I dispositivi PnP devono essere segnalati in risposta a una richiesta di IRP_MN_QUERY_DEVICE_RELATIONS .

I driver devono solo chiamare IoReportDetectedDevice la prima volta che vengono caricati perché il gestore PnP memorizza nella cache le informazioni segnalate. I driver che usano questa routine devono archiviare un flag nel Registro di sistema per indicare se hanno già eseguito il rilevamento dei dispositivi.

Un driver chiama in genere questa routine dalla routine DriverEntry . Alcuni driver, come alcuni driver NDIS o EISA, potrebbero chiamare questa routine da una routine AddDevice .

Al termine di IoReportDetectedDevice, il chiamante deve collegare un oggetto FDO al PDO restituito in DeviceObject. Quando il chiamante collega il suo FDO, il chiamante è il driver di funzione per il dispositivo, almeno temporaneamente. Non sono presenti driver di filtro. Il responsabile PnP è proprietario del PDO.

Il gestore PnP considera il dispositivo da avviare e pertanto non chiama la routine AddDevice del driver e non invia una richiesta di IRP_MN_START_DEVICE . Il driver deve essere preparato per gestire tutti gli altri IRP PnP, tuttavia.

IoReportDetectedDevice contrassegna il dispositivo come dispositivo enumerato radice e questa identificazione è persistente tra gli avvio del sistema. Durante gli avvii di sistema successivi il gestore PnP "rileva" il dispositivo nell'elenco enumerato radice e lo configura come un dispositivo PnP: il gestore PnP esegue query per le informazioni sul dispositivo, identifica i driver appropriati e chiama le routine AddDevice e invia tutti i PnP IRP appropriati.

Il sistema genera due stringhe ID compatibili per il dispositivo, nel formato DETECTEDInterface\Driver e DETECTED\Driver. Interface è il nome stringa del INTERFACE_TYPE del primo bus specificato nel parametro ResourceList . L'interfaccia è impostata su "Interno" se non viene specificato alcun bus. Driver è il nome del servizio del driver. Un driver può fornire ID hardware aggiuntivi o ID compatibili gestendo la richiesta di IRP_MN_QUERY_ID .

Un writer di driver deve fornire un file INF che corrisponda a uno qualsiasi degli ID hardware specificati o ID compatibili. Il file INF deve specificare il driver originale che ha chiamato IoReportDetectedDevice come driver da caricare per tali ID. Il sistema usa queste informazioni per ricompilare lo stack di driver per il dispositivo, ad esempio al riavvio. I chiamanti di IoReportDetectedDevice devono essere in esecuzione in IRQL = PASSIVE_LEVEL nel contesto di un thread di sistema.

Requisiti

Requisito Valore
Client minimo supportato Disponibile a partire da Windows 2000.
Piattaforma di destinazione Universale
Intestazione ntddk.h (include Ntddk.h)
Libreria NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL (vedere la sezione Osservazioni)
Regole di conformità DDI HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm)

Vedi anche

IRP_MN_QUERY_DEVICE_RELATIONS

IoReportResourceForDetection