Condividi tramite


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)

Vedi anche

CM_RESOURCE_LIST

IoReportDetectedDevice