Compartir a través de


Función IoReportDetectedDevice (ntddk.h)

La rutina ioReportDetectedDevice notifica un dispositivo que no es PnP al administrador de PnP.

Sintaxis

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

Parámetros

[in] DriverObject

Puntero al objeto de controlador del controlador que detectó el dispositivo.

[in] LegacyBusType

Especifica el tipo de bus en el que reside el dispositivo. El administrador de PnP usa esta información para hacer coincidir el dispositivo notificado con su instancia enumerada de PnP, si existe.

Los tipos de interfaz, como PCIBus, se definen en Wdm.h. Si un controlador no conoce el LegacyBusType para el dispositivo, el controlador proporciona el valor InterfaceTypeUndefined para este parámetro.

[in] BusNumber

Especifica el número de bus para el dispositivo. El administrador de PnP usa esta información para hacer coincidir el dispositivo notificado con su instancia enumerada de PnP, si existe.

El número de autobús distingue el bus en el que reside el dispositivo desde otros autobuses del mismo tipo en el equipo. El esquema de numeración de bus es específico del bus. Si un controlador no conoce el BusNumber para el dispositivo, el controlador proporciona el valor -1 para este parámetro.

[in] SlotNumber

Especifica el número de ranura lógica del dispositivo. El administrador de PnP usa esta información para hacer coincidir el dispositivo notificado con su instancia enumerada de PnP, si existe.

Si un controlador no conoce el SlotNumber para el dispositivo, el controlador proporciona el valor -1 para este parámetro.

[in, optional] ResourceList

Puntero a la lista de recursos que el controlador usó para detectar el dispositivo. Los recursos de esta lista están en formato sin formato y sin traducir.

[in, optional] ResourceRequirements

Opcionalmente, apunta a una lista de requisitos de recursos para el dispositivo detectado. NULL si el autor de la llamada no tiene esta información para el dispositivo.

[in] ResourceAssigned

Especifica si los recursos del dispositivo ya se han notificado al administrador de PnP. Si ResourceAssigned es TRUE, los recursos ya se han notificado, posiblemente con IoReportResourceForDetectiony el administrador de PnP no intentará reclamarlos en nombre del dispositivo. Si TRUE, el administrador de PnP tampoco reclamará recursos cuando el dispositivo esté enumerado como raíz en arranques posteriores.

[in, out] DeviceObject

Opcionalmente, apunta a un PDO para el dispositivo detectado.

null si el autor de la llamada no tiene un PDO para el dispositivo, que suele ser el caso. Si DeviceObject es NULL, el administrador de PnP crea un PDO para el dispositivo y devuelve un puntero al autor de la llamada.

Si el autor de la llamada proporciona un PDO, el administrador de PnP no crea un nuevo PDO. En una llamada determinada a esta rutina, el parámetro DeviceObject es un parámetro IN o OUT, pero no ambos.

Valor devuelto

ioReportDetectedDevice devuelve STATUS_SUCCESS correcto o el código de error adecuado en caso de error.

Observaciones

Los controladores para dispositivos heredados usan ioReportDetectedDevice para notificar sus dispositivos al sistema. Un controlador solo debe llamar a ioReportDetectedDevice para notificar un dispositivo heredado que no sea PnP. Los dispositivos PnP deben notificarse en respuesta a una solicitud de IRP_MN_QUERY_DEVICE_RELATIONS.

Los controladores solo necesitan llamar a IoReportDetectedDevice la primera vez que se cargan porque el administrador de PnP almacena en caché la información notificada. Los controladores que usan esta rutina deben almacenar una marca en el Registro para indicar si ya han realizado la detección de dispositivos.

Normalmente, un controlador llama a esta rutina desde su rutina de DriverEntry. Algunos controladores, como determinados controladores NDIS o EISA, pueden llamar a esta rutina desde una rutina AddDevice.

Al completar correctamente ioReportDetectedDevice, el autor de la llamada debe adjuntar un FDO al PDO devuelto en DeviceObject. Una vez que el autor de la llamada adjunta su FDO, el autor de la llamada es el controlador de función del dispositivo, al menos temporalmente. No hay controladores de filtro. El administrador de PnP posee el PDO.

El administrador de PnP considera que el dispositivo se va a iniciar y, por lo tanto, no llama a la rutina AddDevice del controlador y no envía una solicitud de IRP_MN_START_DEVICE. Sin embargo, el controlador debe estar preparado para controlar todos los demás IRP de PnP.

IoReportDetectedDevice marca el dispositivo como un dispositivo enumerado en raíz y esta identificación es persistente en el arranque del sistema. Durante los siguientes arranques del sistema el administrador de PnP "detecta" el dispositivo en la lista enumerada raíz y lo configura como un dispositivo PnP: el administrador de PnP consulta la información del dispositivo, identifica los controladores adecuados y llama a sus rutinas de AddDevice, y envía todos los IRP de PnP adecuados.

El sistema genera dos cadenas de identificador compatibles para el dispositivo, con el formato DETECTEDInterface\Driver y DETECTED\Driver. Interface es el nombre de cadena del INTERFACE_TYPE del primer bus especificado en el parámetro ResourceList. interfaz se establece en "Interno" si no se especifica ningún bus. Driver es el nombre del servicio del controlador. Un controlador puede proporcionar identificadores de hardware adicionales o identificadores compatibles mediante el control de la solicitud de IRP_MN_QUERY_ID.

Un escritor de controladores debe proporcionar un archivo INF que coincida con cualquiera de los identificadores de hardware especificados o identificadores compatibles. El archivo INF debe especificar el controlador original que llamó a ioReportDetectedDevice como controlador que se va a cargar para esos identificadores. El sistema usa esta información para recompilar la pila de controladores del dispositivo, por ejemplo, al reiniciar. Los autores de llamadas de ioReportDetectedDevice deben ejecutarse en IRQL = PASSIVE_LEVEL en el contexto de un subproceso del sistema.

Requisitos

Requisito Valor
cliente mínimo admitido Disponible a partir de Windows 2000.
de la plataforma de destino de Universal
encabezado de ntddk.h (incluya Ntddk.h)
biblioteca de NtosKrnl.lib
DLL de NtosKrnl.exe
irQL PASSIVE_LEVEL (consulte la sección Comentarios)
reglas de cumplimiento de DDI HwStorPortProhibitedDIs(storport), PowerIrpDDis(wdm)

Consulte también

IRP_MN_QUERY_DEVICE_RELATIONS

IoReportResourceForDetection