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의 크기(바이트)를 지정합니다. DriverListNULL인 경우 이 매개 변수는 0이어야 합니다.

[in, optional] DeviceObject

필요에 따라 드라이버가 리소스를 클레임하려는 디바이스를 나타내는 디바이스 개체를 가리킵니다.

[in, optional] DeviceList

필요에 따라 디바이스의 리소스 목록을 포함하는 호출자 제공 버퍼를 가리킵니다. 드라이버가 모든 디바이스에 대해 동일한 리소스를 클레임하는 경우 호출자는 DriverList 를 대신 지정할 수 있습니다.

[in, optional] DeviceListSize

선택적 DeviceList의 크기(바이트)를 지정합니다. DeviceListNULL인 경우 이 매개 변수는 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 또는 DriverList 의 CM_RESOURCE_LIST 지정합니다. 호출자는 메모리 해제를 담당합니다.

둘 이상의 레거시 카드 동시에 제어할 수 있는 드라이버는 DeviceObject, DeviceListDeviceListSize 매개 변수를 사용하여 각 디바이스의 디바이스 개체에 대해 각 디바이스에 대한 리소스를 클레임해야 합니다. 이러한 드라이버는 해당 드라이버 개체에 대해 이러한 리소스를 클레임해서는 안 됩니다.

CM_RESOURCE_LIST 두 개의 변수 크기 배열을 포함합니다. 각 배열의 기본 크기는 1입니다. 두 배열에 둘 이상의 요소가 있는 경우 호출자는 메모리를 동적으로 할당하여 추가 요소를 포함해야 합니다. 배열에 추가 부분 리소스 설명자를 포함할 수 있는 CM_RESOURCE_LIST 마지막 전체 리소스 설명자를 제외하고 목록의 각 CM_FULL_RESOURCE_DESCRIPTOR CM_PARTIAL_RESOURCE_DESCRIPTOR 하나만 포함할 수 있습니다.

PnP 관리자의 도움을 받아 IoReportResourceForDetection은 요청된 리소스가 이미 클레임된 리소스와 충돌하는지 여부를 결정합니다.

충돌이 감지되면 이 루틴은 ConflictDetected 의 BOOLEAN을 TRUE 로 설정하고 STATUS_CONFLICTING_ADDRESSES 반환합니다.

충돌이 검색되지 않으면 이 루틴은 리소스를 클레임하고 ConflictDetected 의 BOOLEAN을 FALSE로 설정하고 STATUS_SUCCESS 반환합니다.

이 루틴이 성공하고 드라이버가 레거시 디바이스를 검색하는 경우 드라이버는 IoReportDetectedDevice를 호출하여 디바이스를 PnP 관리자에게 보고합니다. 이 호출에서 드라이버는 ResourceAssignedTRUE 로 설정하므로 PnP 관리자는 리소스를 다시 클레임하지 않습니다.

드라이버가 이 루틴에 대한 호출로 요청한 리소스가 더 이상 필요하지 않은 경우 드라이버는 Count가 0인 DriverList 또는 DeviceList를 사용하여 이 루틴을 다시 호출합니다.

드라이버가 둘 이상의 디바이스에 대해 디바이스별 리소스를 클레임하는 경우 드라이버는 이러한 각 디바이스에 대해 이 루틴을 호출해야 합니다.

드라이버는 지정된 디바이스에 대해 이 루틴을 두 번 이상 호출할 수 있습니다. 하나의 리소스 집합이 실패하면 드라이버는 다른 리소스 집합이 있는 동일한 디바이스에 대해 루틴을 다시 호출할 수 있습니다. 리소스 집합이 성공하면 드라이버는 새 목록을 사용하여 이 루틴을 다시 호출할 수 있습니다. 새 목록이 이전 목록을 대체합니다.

IoReportResourceForDetection의 호출자는 시스템 스레드의 컨텍스트에서 IRQL = PASSIVE_LEVEL 실행되어야 합니다.

요구 사항

요구 사항
대상 플랫폼 유니버설
헤더 ntddk.h(Ntddk.h 포함)
라이브러리 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL(설명 섹션 참조)

추가 정보

CM_RESOURCE_LIST

IoReportDetectedDevice