다음을 통해 공유


IoReportDetectedDevice 함수(ntddk.h)

IoReportDetectedDevice 루틴은 PnP가 아닌 디바이스를 PnP 관리자에 보고합니다.

구문

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

매개 변수

[in] DriverObject

디바이스를 감지한 드라이버의 드라이버 개체에 대한 포인터입니다.

[in] LegacyBusType

디바이스가 있는 버스 유형을 지정합니다. PnP 관리자는 이 정보를 사용하여 보고된 디바이스를 PnP 열거형 instance 일치합니다(있는 경우).

PCIBus와 같은 인터페이스 형식은 Wdm.h에 정의되어 있습니다. 드라이버가 디바이스에 대한 LegacyBusType 을 모르는 경우 드라이버는 이 매개 변수에 대해 정의된 InterfaceTypeUn 값을 제공합니다.

[in] BusNumber

디바이스의 버스 번호를 지정합니다. PnP 관리자는 이 정보를 사용하여 보고된 디바이스를 PnP 열거형 instance 일치합니다(있는 경우).

버스 번호는 디바이스가 있는 버스를 컴퓨터의 동일한 유형의 다른 버스와 구분합니다. 버스 번호 매기기 체계는 버스에 따라 다릅니다. 드라이버가 디바이스의 BusNumber 를 모르는 경우 드라이버는 이 매개 변수에 대해 -1 값을 제공합니다.

[in] SlotNumber

디바이스의 논리적 슬롯 번호를 지정합니다. PnP 관리자는 이 정보를 사용하여 보고된 디바이스를 PnP 열거형 instance 일치합니다(있는 경우).

드라이버가 디바이스의 SlotNumber 를 모르는 경우 드라이버는 이 매개 변수에 대해 -1 값을 제공합니다.

[in, optional] ResourceList

디바이스를 검색하는 데 사용된 드라이버의 리소스 목록에 대한 포인터입니다. 이 목록의 리소스는 변환되지 않은 원시 형식입니다.

[in, optional] ResourceRequirements

필요에 따라 검색된 디바이스에 대한 리소스 요구 사항 목록을 가리킵니다. 호출자에게 디바이스에 대한 이 정보가 없는 경우 NULL입니다.

[in] ResourceAssigned

디바이스의 리소스가 PnP 관리자에 이미 보고되었는지 여부를 지정합니다. ResourceAssignedTRUE인 경우 리소스는 이미 IoReportResourceForDetection과 함께 보고되었으며 PnP 관리자는 디바이스를 대신하여 리소스를 클레임하려고 시도하지 않습니다. TRUE이면 후속 부팅 시 디바이스가 루트 열거될 때 PnP 관리자도 리소스를 클레임하지 않습니다.

[in, out] DeviceObject

필요에 따라 검색된 디바이스에 대한 PDO를 가리킵니다.

호출자에게 디바이스에 대한 PDO가 없는 경우 NULL(일반적으로 해당). DeviceObjectNULL인 경우 PnP 관리자는 디바이스에 대한 PDO를 만들고 호출자에 대한 포인터를 반환합니다.

호출자가 PDO를 제공하는 경우 PnP 관리자는 새 PDO를 만들지 않습니다. 이 루틴에 대한 지정된 호출에서 DeviceObject 매개 변수는 IN 또는 OUT 매개 변수이지만 둘 다 아닙니다.

반환 값

IoReportDetectedDevice는 성공 시 STATUS_SUCCESS 반환하거나 실패 시 적절한 오류 코드를 반환합니다.

설명

레거시 디바이스용 드라이버는 IoReportDetectedDevice를 사용하여 디바이스를 시스템에 보고합니다. 드라이버는 IoReportDetectedDevice 만 호출하여 PnP가 아닌 레거시 디바이스를 보고해야 합니다. PnP 디바이스는 IRP_MN_QUERY_DEVICE_RELATIONS 요청에 대한 응답으로 보고되어야 합니다.

드라이버는 PnP 관리자가 보고된 정보를 캐시하기 때문에 처음 로드될 때만 IoReportDetectedDevice 를 호출하면 됩니다. 이 루틴을 사용하는 드라이버는 레지스트리에 플래그를 저장하여 디바이스 감지를 이미 수행했는지 여부를 표시해야 합니다.

드라이버는 일반적으로 DriverEntry 루틴에서 이 루틴을 호출합니다. 특정 NDIS 또는 EISA 드라이버와 같은 일부 드라이버는 AddDevice 루틴에서 이 루틴을 호출할 수 있습니다.

IoReportDetectedDevice가 성공적으로 완료되면 호출자는 DeviceObject에서 반환된 PDO에 FDO를 연결해야 합니다. 호출자가 FDO를 연결하면 호출자는 적어도 일시적으로 디바이스의 함수 드라이버입니다. 필터 드라이버가 없습니다. PnP 관리자는 PDO를 소유합니다.

PnP 관리자는 디바이스를 시작한다고 간주하므로 드라이버의 AddDevice 루틴을 호출하지 않으며 IRP_MN_START_DEVICE 요청을 보내지 않습니다. 그러나 드라이버는 다른 모든 PnP IRP를 처리할 준비가 되어 있어야 합니다.

IoReportDetectedDevice 는 디바이스를 루트 열거형 디바이스로 표시하며 이 식별은 시스템 부팅에서 지속됩니다. 이후 시스템에서 PnP 관리자가 루트 열거형 목록에서 디바이스를 "검색"하고 PnP 디바이스처럼 구성합니다. PnP 관리자는 디바이스 정보를 쿼리하고, 적절한 드라이버를 식별하고, AddDevice 루틴을 호출하고, 모든 적절한 PnP IRP를 보냅니다.

시스템은 DETECTEDInterface\Driver 및 DETECTED\Driver 형식의 디바이스에 대해 호환되는 두 개의 ID 문자열을 생성합니다. 인터페이스ResourceList 매개 변수에 지정된 첫 번째 버스의 INTERFACE_TYPE 문자열 이름입니다. 버스 가 지정되지 않은 경우 인터페이스는 "내부"로 설정됩니다. 드라이버는 드라이버의 서비스 이름입니다. 드라이버는 IRP_MN_QUERY_ID 요청을 처리하여 추가 하드웨어 ID 또는 호환 ID를 제공할 수 있습니다.

드라이버 작성기는 지정된 하드웨어 ID 또는 호환 ID와 일치하는 INF 파일을 제공해야 합니다. INF 파일은 IoReportDetectedDevice 를 호출한 원래 드라이버를 해당 ID에 대해 로드할 드라이버로 지정해야 합니다. 시스템은 이 정보를 사용하여 디바이스에 대한 드라이버 스택을 다시 빌드합니다(예: 다시 시작). IoReportDetectedDevice의 호출자는 시스템 스레드의 컨텍스트에서 IRQL = PASSIVE_LEVEL 실행되어야 합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000부터 사용할 수 있습니다.
대상 플랫폼 유니버설
헤더 ntddk.h(Ntddk.h 포함)
라이브러리 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL(설명 섹션 참조)
DDI 규정 준수 규칙 HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm)

추가 정보

IRP_MN_QUERY_DEVICE_RELATIONS

IoReportResourceForDetection