Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Le IoReportResourceForDetection ressources matérielles de revendications de routine dans le registre de configuration d’un appareil hérité.
Syntaxe
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
);
Paramètres
[in] DriverObject
Pointeur vers l’objet de pilote qui a été entré dans la routine DriverEntry du pilote.
[in, optional] DriverList
Le pilote pointe éventuellement vers une mémoire tampon fournie par l’appelant qui contient la liste des ressources du pilote, si le pilote revendique les mêmes ressources pour tous ses appareils. Si l’appelant spécifie un DeviceList, ce paramètre est ignoré.
[in, optional] DriverListSize
Spécifie la taille en octets d’un DriverList facultatif. Si DriverList est NULL, ce paramètre doit être égal à zéro.
[in, optional] DeviceObject
Si vous le souhaitez, il pointe vers l’objet de périphérique représentant l’appareil pour lequel le pilote tente de revendiquer des ressources.
[in, optional] DeviceList
Pointe éventuellement vers une mémoire tampon fournie par l’appelant contenant la liste des ressources de l’appareil. Si le pilote revendique les mêmes ressources pour tous ses appareils, l’appelant peut spécifier une DriverList à la place.
[in, optional] DeviceListSize
Spécifie la taille en octets d’un DeviceList facultatif. Si deviceList est NULL, ce paramètre doit être égal à zéro.
[out] ConflictDetected
Pointeur vers une valeur booléenne fournie par l’appelant qui est définie sur TRUE lors du retour si les ressources ne sont pas disponibles.
Valeur de retour
IoReportResourceForDetection retourne STATUS_SUCCESS si les ressources sont revendiquées. Les valeurs de retour d’erreur possibles sont les suivantes.
Retourner le code | Description |
---|---|
STATUS_CONFLICTING_ADDRESSES | Les ressources n’ont pas pu être revendiquées, car elles sont déjà en cours d’utilisation ou sont nécessaires pour un appareil énumérable PnP. |
STATUS_UNSUCCESSFUL | L'DeviceList ou DriverList n’est pas valide. |
Remarques
Cette routine concerne les pilotes qui détectent le matériel antérieur qui ne peut pas être énuméré par Plug-and-Play (PnP).
Si un pilote prend uniquement en charge le matériel PnP, il n’effectue aucune détection et n’appelle donc pas IoReportResourceForDetection. Le système PnP énumère chaque appareil PnP, affecte des ressources à l’appareil et transmet ces ressources aux pilotes de l’appareil dans une demande de IRP_MN_START_DEVICE.
Si un pilote PnP prend en charge le matériel hérité, toutefois, il doit appeler IoReportResourceForDetection pour revendiquer des ressources matérielles avant de tenter de détecter l’appareil.
Les appelants de cette routine spécifient un CM_RESOURCE_LIST dans un DeviceList ou un DriverList alloué à partir de la mémoire paginée et qui se compose de ressources brutes et non converties. L’appelant est responsable de la libération de la mémoire.
Un pilote qui peut contrôler plusieurs cartes héritées en même temps doit revendiquer les ressources de chaque appareil par rapport à l’objet d’appareil pour l’appareil respectif (à l’aide de l'DeviceObject, DeviceListet Paramètres DeviceListSize). Un tel pilote ne doit pas revendiquer ces ressources sur leur objet de pilote.
Un CM_RESOURCE_LIST contient deux tableaux de taille variable. Chaque tableau a une taille par défaut d’une. Si l’un ou l’autre tableau a plusieurs éléments, l’appelant doit allouer de la mémoire dynamiquement pour contenir les éléments supplémentaires. Une seule CM_PARTIAL_RESOURCE_DESCRIPTOR peut faire partie de chaque CM_FULL_RESOURCE_DESCRIPTOR de la liste, à l’exception du dernier descripteur de ressource complet dans le CM_RESOURCE_LIST, qui peut avoir des descripteurs de ressources partiels supplémentaires dans son tableau.
IoReportResourceForDetection, avec l’aide du gestionnaire PnP, détermine si les ressources demandées sont en conflit avec les ressources qui ont déjà été revendiquées.
Si un conflit est détecté, cette routine définit la valeur BOOLEAN à ConflictDetected sur TRUE et retourne STATUS_CONFLICTING_ADDRESSES.
Si aucun conflit n’est détecté, cette routine demande les ressources, définit la valeur BOOLEAN sur ConflictDetected sur FALSEet retourne STATUS_SUCCESS.
Si cette routine réussit et que le pilote détecte un appareil hérité, le pilote signale l’appareil au gestionnaire PnP en appelant IoReportDetectedDevice. Dans cet appel, le pilote définit resourceAssigned pour TRUE afin que le gestionnaire PnP ne tente pas de réclamer à nouveau les ressources.
Lorsqu’un pilote n’a plus besoin des ressources revendiquées par un appel à cette routine, le pilote appelle à nouveau cette routine avec un DriverList ou DeviceList avec un nombre de de zéro.
Si un pilote demande des ressources sur une base spécifique à l’appareil pour plusieurs appareils, le pilote doit appeler cette routine pour chaque appareil de ce type.
Un pilote peut appeler cette routine plusieurs fois pour un appareil donné. Si un ensemble de ressources échoue, le pilote peut appeler à nouveau la routine pour le même appareil avec un autre ensemble de ressources. Si un ensemble de ressources réussit, le pilote peut appeler cette routine à nouveau avec une nouvelle liste ; la nouvelle liste remplace la liste précédente.
Les appelants de IoReportResourceForDetection doivent s’exécuter à IRQL = PASSIVE_LEVEL dans le contexte d’un thread système.
Exigences
Exigence | Valeur |
---|---|
plateforme cible | Universel |
d’en-tête | ntddk.h (include Ntddk.h) |
bibliothèque | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL (voir la section Remarques) |