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 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 bus distingue el bus en el que reside el dispositivo de otros buses del mismo tipo en el equipo. El esquema de numeración de bus es específico del bus. Si un controlador no conoce 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 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 IoReportResourceForDetection y el administrador de PnP no intentará reclamarlos en nombre del dispositivo. Si es TRUE, el administrador de PnP tampoco reclamará los recursos cuando el dispositivo esté enumerado por la raíz en los 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.

Comentarios

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 DriverEntry . Algunos controladores, como ciertos controladores NDIS o EISA, pueden llamar a esta rutina desde una rutina AddDevice .

Al finalizar 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 por raíz y esta identificación es persistente en los arranques del sistema. Durante el sistema posterior, 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 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 . La interfaz se establece en "Internal" si no se especifica ningún bus. El controlador 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 para el 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 Value
Cliente mínimo compatible Disponible a partir de Windows 2000.
Plataforma de destino Universal
Encabezado ntddk.h (incluya Ntddk.h)
Library NtosKrnl.lib
Archivo DLL 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