IO_RESOURCE_DESCRIPTOR 구조체(wdm.h)

IO_RESOURCE_DESCRIPTOR 구조는 디바이스에서 사용할 수 있는 한 가지 유형의 원시 하드웨어 리소스 범위를 설명합니다. IO_RESOURCE_DESCRIPTOR 구조체의 배열은 각 IO_RESOURCE_LIST 구조체 내에 포함됩니다.

구문

typedef struct _IO_RESOURCE_DESCRIPTOR {
  UCHAR  Option;
  UCHAR  Type;
  UCHAR  ShareDisposition;
  UCHAR  Spare1;
  USHORT Flags;
  USHORT Spare2;
  union {
    struct {
      ULONG            Length;
      ULONG            Alignment;
      PHYSICAL_ADDRESS MinimumAddress;
      PHYSICAL_ADDRESS MaximumAddress;
    } Port;
    struct {
      ULONG            Length;
      ULONG            Alignment;
      PHYSICAL_ADDRESS MinimumAddress;
      PHYSICAL_ADDRESS MaximumAddress;
    } Memory;
    struct {
      ULONG             MinimumVector;
      ULONG             MaximumVector;
#if ...
      IRQ_DEVICE_POLICY AffinityPolicy;
      USHORT            Group;
#else
      IRQ_DEVICE_POLICY AffinityPolicy;
#endif
      IRQ_PRIORITY      PriorityPolicy;
      KAFFINITY         TargetedProcessors;
    } Interrupt;
    struct {
      ULONG MinimumChannel;
      ULONG MaximumChannel;
    } Dma;
    struct {
      ULONG RequestLine;
      ULONG Reserved;
      ULONG Channel;
      ULONG TransferWidth;
    } DmaV3;
    struct {
      ULONG            Length;
      ULONG            Alignment;
      PHYSICAL_ADDRESS MinimumAddress;
      PHYSICAL_ADDRESS MaximumAddress;
    } Generic;
    struct {
      ULONG Data[3];
    } DevicePrivate;
    struct {
      ULONG Length;
      ULONG MinBusNumber;
      ULONG MaxBusNumber;
      ULONG Reserved;
    } BusNumber;
    struct {
      ULONG Priority;
      ULONG Reserved1;
      ULONG Reserved2;
    } ConfigData;
    struct {
      ULONG            Length40;
      ULONG            Alignment40;
      PHYSICAL_ADDRESS MinimumAddress;
      PHYSICAL_ADDRESS MaximumAddress;
    } Memory40;
    struct {
      ULONG            Length48;
      ULONG            Alignment48;
      PHYSICAL_ADDRESS MinimumAddress;
      PHYSICAL_ADDRESS MaximumAddress;
    } Memory48;
    struct {
      ULONG            Length64;
      ULONG            Alignment64;
      PHYSICAL_ADDRESS MinimumAddress;
      PHYSICAL_ADDRESS MaximumAddress;
    } Memory64;
    struct {
      UCHAR Class;
      UCHAR Type;
      UCHAR Reserved1;
      UCHAR Reserved2;
      ULONG IdLowPart;
      ULONG IdHighPart;
    } Connection;
  } u;
} IO_RESOURCE_DESCRIPTOR, *PIO_RESOURCE_DESCRIPTOR;

멤버

Option

이 리소스 설명이 필요한지, 기본 설정인지 또는 대안인지를 지정합니다. 다음 값 중 하나를 사용해야 합니다.

의미
0 대체 범위도 지정하지 않는 한 지정된 리소스 범위가 필요합니다.
IO_RESOURCE_PREFERRED 지정된 리소스 범위는 대체 범위에 선호됩니다.
IO_RESOURCE_ALTERNATIVE 지정된 리소스 범위는 앞의 범위에 대한 대안입니다. 예를 들어 한 IO_RESOURCE_DESCRIPTOR 구조체가 IO_RESOURCE_PREFERRED 설정된 IRQ 5를 지정하고 다음 구조가 IRQ 3을 지정하고 IO_RESOURCE_ALTERNATIVE 설정된 경우 PnP 관리자는 IRQ 5를 사용할 수 없는 경우에만 디바이스에 IRQ 3을 할당합니다. 각 리소스에 대해 여러 대안을 지정할 수 있습니다. IO_RESOURCE_ALTERNATIVE 및 IO_RESOURCE_PREFERRED 모두 설정할 수 있습니다. 이는 기본 대안을 나타냅니다.
IO_RESOURCE_DEFAULT 사용되지 않습니다.

Type

리소스 유형을 식별합니다. 유효한 값 목록은 CM_PARTIAL_RESOURCE_DESCRIPTOR 구조체의 Type 멤버를 참조하세요.

ShareDisposition

설명된 리소스를 공유할 수 있는지 여부를 나타냅니다. 유효한 값 목록은 CM_PARTIAL_RESOURCE_DESCRIPTOR 구조체의 ShareDisposition 멤버를 참조하세요.

Spare1

사용되지 않습니다.

Flags

리소스 종류와 관련된 비트 플래그를 포함합니다. 다음 표에서는 Type = CmResourceTypeInterrupt인 경우 유효한 플래그를 보여줍니다.

의미
CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE IRQ 줄은 수준 트리거됩니다. (이러한 IRQ는 일반적으로 공유할 수 있습니다.)
CM_RESOURCE_INTERRUPT_LATCHED IRQ 줄은 에지 트리거됩니다.
CM_RESOURCE_INTERRUPT_MESSAGE 이 플래그가 설정되면 인터럽트는 메시지 신호 인터럽트입니다. 그렇지 않으면 인터럽트는 줄 기반 인터럽트입니다.
CM_RESOURCE_INTERRUPT_POLICY_INCLUDED 이 플래그가 설정되면 u.Interrupt 멤버에는 디바이스의 인터럽트 정책을 설명하는 데이터가 포함됩니다.
CM_RESOURCE_INTERRUPT_SECONDARY_INTERRUPT 인터럽트는 저전력 유휴 상태 또는 시스템 절전 상태에서 운영 체제를 해제할 수 있습니다. 이 플래그는 Windows 8 시작하여 설정할 수 있습니다. 절전 모드 해제 기능에 대한 자세한 내용은 디바이스 절전 모드 해제 사용을 참조하세요.
CM_RESOURCE_INTERRUPT_WAKE_HINT 인터럽트는 저전력 유휴 상태 또는 시스템 절전 상태에서 운영 체제를 해제할 수 있습니다. 이 플래그는 Windows 8 시작하여 설정할 수 있습니다. 절전 모드 해제 기능에 대한 자세한 내용은 디바이스 절전 모드 해제 사용을 참조하세요.

다른 리소스 종류에 대한 유효한 플래그 목록은 CM_PARTIAL_RESOURCE_DESCRIPTOR 구조체의 Flags 멤버에 대한 설명을 참조하세요.

Spare2

사용되지 않습니다.

u

u 공용 구조체를 정의합니다.

u.Port

다음 멤버를 사용하여 I/O 포트 주소 범위를 지정합니다.

드라이버는 직접 업데이트하는 대신 RtlIoDecodeMemIoResourceRtlIoEncodeMemIoResource 를 사용하여 이 멤버를 읽고 업데이트해야 합니다.

u.Port.Length

할당 가능한 I/O 포트 주소 범위의 길이(바이트)입니다.

u.Port.Alignment

할당된 시작 주소가 준수해야 하는 맞춤(바이트)입니다. 할당된 시작 주소는 맞춤의 정수 배수여야 합니다.

u.Port.MinimumAddress

디바이스에 할당할 수 있는 최소 버스 상대 I/O 포트 주소입니다.

u.Port.MaximumAddress

디바이스에 할당할 수 있는 최대 버스 상대 I/O 포트 주소입니다.

u.Memory

다음 멤버를 사용하여 메모리 주소 범위를 지정합니다.

Windows Vista 이상 버전의 Windows 운영 체제용 드라이버는 직접 업데이트하는 대신 RtlIoDecodeMemIoResourceRtlIoEncodeMemIoResource 를 사용하여 이 멤버를 읽고 업데이트해야 합니다.

u.Memory.Length

할당 가능한 메모리 주소 범위의 길이(바이트)입니다.

u.Memory.Alignment

할당된 시작 주소가 준수해야 하는 맞춤(바이트)입니다. 할당된 시작 주소는 맞춤의 정수 배수여야 합니다.

u.Memory.MinimumAddress

디바이스에 할당할 수 있는 최소 버스 상대 메모리 주소입니다.

u.Memory.MaximumAddress

디바이스에 할당할 수 있는 최대 버스 상대 메모리 주소입니다.

u.Interrupt

다음 멤버를 사용하여 인터럽트 벡터 범위를 지정합니다.

u.Interrupt.MinimumVector

디바이스에 할당할 수 있는 최소 버스 상대 벡터입니다.

u.Interrupt.MaximumVector

디바이스에 할당할 수 있는 최대 버스 상대 벡터입니다.

CM_RESOURCE_INTERRUPT_MESSAGE 플래그 비트가 설정되면 MinimumVectorMaximumVector 멤버의 값에 특별한 의미가 있습니다. 자세한 내용은 인터럽트 리소스 설명자 사용을 참조하세요.

시스템은 Windows Vista 이상 버전의 Windows 운영 체제에서 다음과 같은 추가 멤버를 제공합니다.

u.Interrupt.AffinityPolicy

시스템에서 프로세서 간에 디바이스의 인터럽트를 분산하는 방법을 나타내는 IRQ_DEVICE_POLICY 값을 지정합니다.

시스템에서 프로세서 간에 디바이스의 인터럽트를 분산하는 방법을 나타내는 IRQ_DEVICE_POLICY 값을 지정합니다.

u.Interrupt.Group

프로세서 그룹 번호를 지정합니다. 그룹은 Windows 7 이상 버전의 Windows에서만 u.Interrupt 의 유효하지만 선택적 멤버입니다. 이 멤버는 컴파일 시간에 NT_PROCESSOR_GROUPS 정의된 경우에만 존재합니다. 그룹 멤버가 있는 경우 GroupTargetedProcessors 멤버는 함께 디바이스의 인터럽트를 처리해야 하는 프로세서 집합을 식별하는 그룹 선호도를 지정합니다. 특정 그룹에 대한 선호도를 지정하려면 AffinityPolicyIrqPolicySpecifiedProcessors 로 설정하고 그룹을 적절한 그룹 번호로 설정합니다. 또한 TargetedProcessors 는 그룹의 대상 프로세서를 지정해야 합니다. AffinityPolicyIrqPolicySpecifiedProcessors 이외의 값으로 설정하는 경우 그룹을 ALL_PROCESSOR_GROUPS 설정하여 드라이버가 그룹 인식(즉, 프로세서 그룹에 대한 정보를 처리하도록 설계됨)임을 나타냅니다. Group이 ALL_PROCESSOR_GROUPS 경우 드라이버는 대상 프로세서를 지정할 수 없습니다. 이러한 대상 사양은 무시됩니다.

u.Interrupt.PriorityPolicy

시스템에서 디바이스의 인터럽트를 디스패치해야 하는 우선 순위를 나타내는 IRQ_PRIORITY 값을 지정합니다.

u.Interrupt.TargetedProcessors

디바이스의 인터럽트 처리해야 하는 프로세서를 나타내는 KAFFINITY 값을 지정합니다. 이 값은 AffinityPolicyIrqPolicySpecifiedProcessors인 경우에만 사용됩니다.

u.Dma

다음 멤버 중 하나를 사용하여 DMA 설정을 지정합니다.

u.Dma.MinimumChannel

디바이스에 할당할 수 있는 최소 버스 상대 DMA 채널입니다.

u.Dma.MaximumChannel

디바이스에 할당할 수 있는 최대 버스 상대 DMA 채널입니다.

u.DmaV3

DMA_OPERATIONS 구조의 버전 3을 사용하는 드라이버에 대한 DMA 설정을 지정합니다.

u.DmaV3 멤버는 Windows 8 부터 사용할 수 있습니다.

u.DmaV3.RequestLine

디바이스에 할당된 시스템 DMA 컨트롤러의 요청 줄 수입니다.

u.DmaV3.Reserved

사용되지 않습니다.

u.DmaV3.Channel

디바이스에 할당된 시스템 DMA 컨트롤러의 DMA 채널 수입니다.

u.DmaV3.TransferWidth

디바이스에 할당된 시스템 DMA 컨트롤러가 디바이스로 또는 디바이스에서 데이터를 전송하는 데 사용하는 데이터 버스의 너비를 비트 단위로 지정합니다.

u.Generic

사용되지 않습니다.

u.Generic.Length

사용되지 않습니다.

u.Generic.Alignment

사용되지 않습니다.

u.Generic.MinimumAddress

사용되지 않습니다.

u.Generic.MaximumAddress

사용되지 않습니다.

u.DevicePrivate

시스템에서 사용하도록 예약되었습니다.

u.DevicePrivate.Data[3]

시스템에서 사용하도록 예약되었습니다.

u.BusNumber

다음 멤버를 사용하여 버스 번호를 지정합니다.

u.BusNumber.Length

필요한 버스 번호 수입니다.

u.BusNumber.MinBusNumber

디바이스에 할당할 수 있는 최소 버스 상대 버스 번호입니다.

u.BusNumber.MaxBusNumber

디바이스에 할당할 수 있는 최대 버스 상대 버스 번호입니다.

u.BusNumber.Reserved

사용되지 않습니다.

u.ConfigData

시스템에서 사용하도록 예약되었습니다.

u.ConfigData.Priority

ULONG 멤버 우선 순위를 정의합니다.

u.ConfigData.Reserved1

사용되지 않습니다.

u.ConfigData.Reserved2

사용되지 않습니다.

u.Memory40

다음 멤버를 사용하여 메모리 주소 범위를 지정합니다.

u.Memory40 멤버는 Windows Vista 이상 버전의 Windows 운영 체제에서만 사용할 수 있습니다. 이러한 버전의 Windows용 드라이버는 직접 업데이트하는 대신 RtlIoDecodeMemIoResourceRtlIoEncodeMemIoResource 를 사용하여 이 멤버를 읽고 업데이트해야 합니다.

u.Memory40.Length40

할당 가능한 메모리 주소 범위의 40비트 길이(바이트)의 높은 32비트입니다. 하위 8비트 는 0으로 처리됩니다.

u.Memory40.Alignment40

할당된 시작 주소가 준수해야 하는 40비트 맞춤의 상위 32비트(바이트)입니다. 하위 8비트 는 0으로 처리됩니다. 할당된 시작 주소는 맞춤의 배수가 됩니다.

u.Memory40.MinimumAddress

디바이스에 할당할 수 있는 최소 버스 상대 메모리 주소입니다.

u.Memory40.MaximumAddress

디바이스에 할당할 수 있는 최대 버스 상대 메모리 주소입니다.

u.Memory48

다음 멤버를 사용하여 메모리 주소 범위를 지정합니다.

u.Memory48 멤버는 Windows Vista 이상 버전의 Windows 운영 체제에서만 사용할 수 있습니다. 이러한 버전의 Windows용 드라이버는 직접 업데이트하는 대신 RtlIoDecodeMemIoResourceRtlIoEncodeMemIoResource 를 사용하여 이 멤버를 읽고 업데이트해야 합니다.

u.Memory48.Length48

할당 가능한 메모리 주소 범위의 48비트 길이(바이트)의 높은 32비트입니다. 하위 16비트에서는 0으로 처리됩니다.

u.Memory48.Alignment48

할당된 시작 주소가 준수해야 하는 48비트 맞춤의 상위 32비트(바이트)입니다. 하위 16비트에서는 0으로 처리됩니다. 할당된 시작 주소는 맞춤의 배수가 됩니다.

u.Memory48.MinimumAddress

디바이스에 할당할 수 있는 최소 버스 상대 메모리 주소입니다.

u.Memory48.MaximumAddress

디바이스에 할당할 수 있는 최대 버스 상대 메모리 주소입니다.

u.Memory64

다음 멤버를 사용하여 메모리 주소 범위를 지정합니다.

u.Memory64 멤버는 Windows Vista 이상 버전의 Windows 운영 체제에서만 사용할 수 있습니다. Windows Vista 이상 버전의 Windows 운영 체제용 드라이버는 직접 업데이트하는 대신 RtlIoDecodeMemIoResourceRtlIoEncodeMemIoResource 를 사용하여 이 멤버를 읽고 업데이트해야 합니다.

u.Memory64.Length64

할당 가능한 메모리 주소 범위의 64비트 길이(바이트)의 높은 32비트입니다. 하위 32비트에서는 0으로 처리됩니다.

u.Memory64.Alignment64

할당된 시작 주소가 준수해야 하는 64비트 맞춤의 상위 32비트(바이트)입니다. 하위 32비트에서는 0으로 처리됩니다. 할당된 시작 주소는 맞춤의 배수가 됩니다.

u.Memory64.MinimumAddress

디바이스에 할당할 수 있는 최소 버스 상대 메모리 주소입니다.

u.Memory64.MaximumAddress

디바이스에 할당할 수 있는 최대 버스 상대 메모리 주소입니다.

u.Connection

직렬 버스 또는 직렬 포트 또는 하나 이상의 GPIO(범용 I/O) 핀 집합에 대한 연결을 지정합니다.

u.Connection 멤버는 Windows 8 시작해서 사용할 수 있습니다.

다음 멤버는 이 연결을 설명합니다.

u.Connection.Class

연결 클래스입니다. 이 멤버는 다음 값 중 하나로 설정됩니다.

의미
CM_RESOURCE_CONNECTION_CLASS_GPIO GPIO 컨트롤러에서 하나 이상의 핀을 통해 디바이스에 액세스합니다.
CM_RESOURCE_CONNECTION_CLASS_SERIAL 직렬 버스 또는 직렬 포트를 통해 디바이스에 액세스합니다.

u.Connection.Type

연결 형식입니다. Class = CM_RESOURCE_CONNECTION_CLASS_GPIO 경우 Type은 다음 값으로 설정됩니다.

의미
CM_RESOURCE_CONNECTION_TYPE_GPIO_IO I/O용으로 구성된 GPIO 핀을 통해 디바이스에 액세스합니다.

인터럽트 요청 입력으로 구성된 GPIO 핀은 일반 인터럽트 리소스(CmResourceTypeInterrupt)로 액세스됩니다.

Class = CM_RESOURCE_CONNECTION_CLASS_SERIAL 경우 Type은 다음 값 중 하나로 설정됩니다.

의미
CM_RESOURCE_CONNECTION_TYPE_SERIAL_I2C 디바이스가 I2C 버스에 연결되어 있습니다.
CM_RESOURCE_CONNECTION_TYPE_SERIAL_SPI 디바이스가 SPI 버스에 연결되어 있습니다.
CM_RESOURCE_CONNECTION_TYPE_SERIAL_UART 디바이스가 직렬 포트에 연결되어 있습니다.

u.Connection.Reserved1

사용되지 않습니다.

u.Connection.Reserved2

사용되지 않습니다.

u.Connection.IdLowPart

64비트 연결 ID의 하위 32비트입니다.

u.Connection.IdHighPart

64비트 연결 ID의 상위 32비트입니다.

요구 사항

요구 사항
헤더 wdm.h(Wdm.h, Ntddk.h, Ntifs.h, Miniport.h 포함)

추가 정보

CM_PARTIAL_RESOURCE_DESCRIPTOR

IO_RESOURCE_LIST

IO_RESOURCE_REQUIREMENTS_LIST

IoConnectInterrupt