Funzione IoReportResourceForDetection (ntddk.h)
Le risorse hardware delle attestazioni hardware della routine IoReportResourceForDetection nel Registro di configurazione per un dispositivo legacy.
Sintassi
NTSTATUS IoReportResourceForDetection(
[in] PDRIVER_OBJECT DriverObject,
[in, optional] PCM_RESOURCE_LIST DriverList,
[in, optional] ULONG DriverListSize,
[in, optional] PDEVICE_OBJECT DeviceObject,
[in, optional] PCM_RESOURCE_LIST DeviceList,
[in, optional] ULONG DeviceListSize,
[out] PBOOLEAN ConflictDetected
);
Parametri
[in] DriverObject
Puntatore all'oggetto driver immesso nella routine DriverEntry del driver.
[in, optional] DriverList
Facoltativamente, punta a un buffer fornito dal chiamante che contiene l'elenco di risorse del driver, se il driver dichiara le stesse risorse per tutti i relativi dispositivi. Se il chiamante specifica un oggetto DeviceList, questo parametro viene ignorato.
[in, optional] DriverListSize
Specifica le dimensioni in byte di un DriverList facoltativo. Se DriverList è NULL, questo parametro deve essere zero.
[in, optional] DeviceObject
Facoltativamente, punta all'oggetto dispositivo che rappresenta il dispositivo per il quale il driver tenta di richiedere risorse.
[in, optional] DeviceList
Facoltativamente, punta a un buffer fornito dal chiamante contenente l'elenco di risorse del dispositivo. Se il driver dichiara le stesse risorse per tutti i relativi dispositivi, il chiamante può invece specificare un DriverList .
[in, optional] DeviceListSize
Specifica le dimensioni in byte di un oggetto DeviceList facoltativo. Se DeviceList è NULL, questo parametro deve essere zero.
[out] ConflictDetected
Puntatore a un valore booleano fornito dal chiamante impostato su TRUE se le risorse non sono disponibili.
Valore restituito
IoReportResourceForDetection restituisce STATUS_SUCCESS se le risorse vengono richieste. I valori restituiti degli errori possibili includono quanto segue.
Codice restituito | Descrizione |
---|---|
STATUS_CONFLICTING_ADDRESSES | Impossibile richiedere le risorse perché sono già in uso o sono necessarie per un dispositivo PnP-enumerabile. |
STATUS_UNSUCCESSFUL | DeviceList o DriverList non è valido. |
Commenti
Questa routine è per i driver che rilevano hardware precedenti che non possono essere enumerati da Plug and Play (PnP).
Se un driver supporta solo l'hardware PnP, non viene rilevato e pertanto non chiama IoReportResourceForDetection. Il sistema PnP enumera ogni dispositivo PnP, assegna risorse al dispositivo e passa tali risorse ai driver del dispositivo in una richiesta di IRP_MN_START_DEVICE .
Se un driver PnP supporta hardware legacy, tuttavia, deve chiamare IoReportResourceForDetection per richiedere risorse hardware prima di tentare di rilevare il dispositivo.
I chiamanti di questa routine specificano un CM_RESOURCE_LIST in un oggetto DeviceList o un DriverList allocato dalla memoria impaginata e costituito da risorse non elaborate e non tradotte. Il chiamante è responsabile della liberazione della memoria.
Un driver che può controllare più di una scheda legacy contemporaneamente deve richiedere le risorse per ogni dispositivo rispetto all'oggetto dispositivo per il rispettivo dispositivo (usando i parametri DeviceObject, DeviceList e DeviceListSize). Tale driver non deve richiedere queste risorse rispetto all'oggetto driver.
Un CM_RESOURCE_LIST contiene due matrici di dimensioni variabili. Ogni matrice ha una dimensione predefinita di una. Se una matrice ha più di un elemento, il chiamante deve allocare la memoria in modo dinamico per contenere gli elementi aggiuntivi. Solo un CM_PARTIAL_RESOURCE_DESCRIPTOR può essere parte di ogni CM_FULL_RESOURCE_DESCRIPTOR nell'elenco, ad eccezione dell'ultimo descrittore completo della risorsa nel CM_RESOURCE_LIST, che può avere descrittori di risorse parziali aggiuntivi nella matrice.
IoReportResourceForDetection, con l'aiuto del gestore PnP, determina se le risorse richieste sono in conflitto con le risorse già richieste.
Se viene rilevato un conflitto, questa routine imposta il valore BOOLEAN in ConflictDetected su TRUE e restituisce STATUS_CONFLICTING_ADDRESSES.
Se non viene rilevato alcun conflitto, questa routine dichiara le risorse, imposta il valore BOOLEAN in ConflictDetected su FALSE e restituisce STATUS_SUCCESS.
Se questa routine riesce e il driver rileva un dispositivo legacy, il driver segnala il dispositivo alla gestione PnP chiamando IoReportDetectedDevice. In tale chiamata, il driver imposta ResourceAssigned suTRUE in modo che il gestore PnP non tenti di richiedere di nuovo le risorse.
Quando un driver non richiede più le risorse richieste da una chiamata a questa routine, il driver chiama nuovamente questa routine con un DriverList o DeviceList con un conteggio pari a zero.
Se un driver attestazione le risorse in base a un dispositivo specifico per più di un dispositivo, il driver deve chiamare questa routine per ogni dispositivo.
Un driver può chiamare questa routine più di una volta per un determinato dispositivo. Se un set di risorse ha esito negativo, il driver può chiamare di nuovo la routine per lo stesso dispositivo con un set di risorse diverso. Se un set di risorse ha esito positivo, il driver può chiamare nuovamente questa routine con un nuovo elenco; il nuovo elenco sostituisce l'elenco precedente.
I chiamanti di IoReportResourceForDetection devono essere eseguiti in IRQL = PASSIVE_LEVEL nel contesto di un thread di sistema.
Requisiti
Requisito | Valore |
---|---|
Piattaforma di destinazione | Universale |
Intestazione | ntddk.h (include Ntddk.h) |
Libreria | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL (vedere la sezione Osservazioni) |