IoReportResourceForDetection 함수(ntddk.h)
IoReportResourceForDetection 레거시 디바이스에 대한 구성 레지스트리의 하드웨어 리소스를 일상적인 클레임합니다.
통사론
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
);
매개 변수
[in] DriverObject
드라이버의 DriverEntry 루틴에 입력된 드라이버 개체에 대한 포인터입니다.
[in, optional] DriverList
필요에 따라 드라이버가 모든 디바이스에 대해 동일한 리소스를 클레임하는 경우 드라이버의 리소스 목록을 포함하는 호출자 제공 버퍼를 가리킵니다. 호출자가 deviceList 지정하면 이 매개 변수는 무시됩니다.
[in, optional] DriverListSize
선택적 DriverList크기(바이트)를 지정합니다. DriverList NULL 경우 이 매개 변수는 0이어야 합니다.
[in, optional] DeviceObject
필요에 따라 드라이버가 리소스를 클레임하려는 디바이스를 나타내는 디바이스 개체를 가리킵니다.
[in, optional] DeviceList
필요에 따라 디바이스의 리소스 목록을 포함하는 호출자 제공 버퍼를 가리킵니다. 드라이버가 모든 디바이스에 대해 동일한 리소스를 클레임하는 경우 호출자는 DriverList 대신 지정할 수 있습니다.
[in, optional] DeviceListSize
선택적 DeviceList크기(바이트)를 지정합니다. deviceList NULL 경우 이 매개 변수는 0이어야 합니다.
[out] ConflictDetected
리소스를 사용할 수 없는 경우 반환 시 TRUE 설정된 호출자 제공 부울 값에 대한 포인터입니다.
반환 값
IoReportResourceForDetection 리소스가 요청되면 STATUS_SUCCESS 반환합니다. 가능한 오류 반환 값은 다음과 같습니다.
반환 코드 | 묘사 |
---|---|
STATUS_CONFLICTING_ADDRESSES | 리소스가 이미 사용 중이거나 PnP 열거 가능 디바이스에 필요하기 때문에 리소스를 클레임할 수 없습니다. |
STATUS_UNSUCCESSFUL | DeviceList 또는 DriverList 잘못되었습니다. |
발언
이 루틴은 PnP(플러그 앤 플레이)로 열거할 수 없는 이전 하드웨어를 검색하는 드라이버용입니다.
드라이버가 PnP 하드웨어만 지원하는 경우 검색되지 않으므로 IoReportResourceForDetection호출하지 않습니다. PnP 시스템은 각 PnP 디바이스를 열거하고, 디바이스에 리소스를 할당하고, 해당 리소스를 IRP_MN_START_DEVICE 요청의 디바이스 드라이버에 전달합니다.
그러나 PnP 드라이버가 레거시 하드웨어를 지원하는 경우 디바이스를 검색하기 전에 IoReportResourceForDetection 호출하여 하드웨어 리소스를 요청해야 합니다.
이 루틴의 호출자는 페이징된 메모리에서 할당되고 변환되지 않은 원시 리소스로 구성된 DeviceList 또는 DriverListCM_RESOURCE_LIST 지정합니다. 호출자는 메모리 해제를 담당합니다.
둘 이상의 레거시 카드를 동시에 제어할 수 있는 드라이버는 각 디바이스의 디바이스 개체에 대해 각 디바이스에 대한 리소스를 클레임해야 합니다(DeviceObject사용, DeviceList 및 DeviceListSize 매개 변수 사용). 이러한 드라이버는 해당 드라이버 개체에 대해 이러한 리소스를 클레임해서는 안 됩니다.
CM_RESOURCE_LIST 두 개의 가변 크기 배열을 포함합니다. 각 배열의 기본 크기는 1입니다. 두 배열에 둘 이상의 요소가 있는 경우 호출자는 추가 요소를 포함하도록 메모리를 동적으로 할당해야 합니다. CM_RESOURCE_LIST마지막 전체 리소스 설명자를 제외하고 목록의 각 CM_FULL_RESOURCE_DESCRIPTORCM_PARTIAL_RESOURCE_DESCRIPTOR 하나만 포함할 수 있습니다. 이 설명자는 해당 배열에 부분 리소스 설명자를 추가로 포함할 수 있습니다.
IoReportResourceForDetectionPnP 관리자의 도움으로 요청되는 리소스가 이미 클레임된 리소스와 충돌하는지 여부를 결정합니다.
충돌이 감지되면 이 루틴은 ConflictDetected BOOLEAN을 TRUE 설정하고 STATUS_CONFLICTING_ADDRESSES 반환합니다.
충돌이 감지되지 않으면 이 루틴은 리소스를 클레임하고, conflictDetected BOOLEAN을 false 설정하고, STATUS_SUCCESS 반환합니다.
이 루틴이 성공하고 드라이버가 레거시 디바이스를 감지하면 드라이버는 IoReportDetectedDevice호출하여 PnP 관리자에게 디바이스를 보고합니다. 이 호출에서 드라이버는 resourceAssigned 설정하여 PnP 관리자가 리소스를 다시 클레임하지 않도록 true .
드라이버에서 이 루틴에 대한 호출에서 요청한 리소스가 더 이상 필요하지 않은 경우 드라이버는 DriverList 사용하여 이 루틴을 다시 호출하거나 개수 0인 DeviceList .
드라이버가 둘 이상의 디바이스에 대해 디바이스별로 리소스를 클레임하는 경우 드라이버는 이러한 각 디바이스에 대해 이 루틴을 호출해야 합니다.
드라이버는 지정된 디바이스에 대해 이 루틴을 두 번 이상 호출할 수 있습니다. 하나의 리소스 집합이 실패하면 드라이버는 다른 리소스 집합을 가진 동일한 디바이스에 대해 루틴을 다시 호출할 수 있습니다. 리소스 집합이 성공하면 드라이버는 새 목록을 사용하여 이 루틴을 다시 호출할 수 있습니다. 새 목록이 이전 목록을 바꿉니다.
IoReportResourceForDetection 호출자는 시스템 스레드의 컨텍스트에서 IRQL = PASSIVE_LEVEL 실행되어야 합니다.
요구 사항
요구 | 값 |
---|---|
대상 플랫폼 | 보편적 |
헤더 | ntddk.h(Ntddk.h 포함) |
라이브러리 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL(설명 섹션 참조) |