CM_PARTIAL_RESOURCE_DESCRIPTOR 구조체(wdm.h)
CM_PARTIAL_RESOURCE_DESCRIPTOR 구조는 디바이스에 할당된 단일 유형의 하나 이상의 시스템 하드웨어 리소스를 지정합니다. 이 구조체는 CM_PARTIAL_RESOURCE_LIST 구조 내에서 배열을 만드는 데 사용됩니다.
통사론
typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR {
UCHAR Type;
UCHAR ShareDisposition;
USHORT Flags;
union {
struct {
PHYSICAL_ADDRESS Start;
ULONG Length;
} Generic;
struct {
PHYSICAL_ADDRESS Start;
ULONG Length;
} Port;
struct {
#if ...
USHORT Level;
USHORT Group;
#else
ULONG Level;
#endif
ULONG Vector;
KAFFINITY Affinity;
} Interrupt;
struct {
union {
struct {
USHORT Group;
USHORT Reserved;
USHORT MessageCount;
ULONG Vector;
KAFFINITY Affinity;
} Raw;
struct {
#if ...
USHORT Level;
USHORT Group;
#else
ULONG Level;
#endif
ULONG Vector;
KAFFINITY Affinity;
} Translated;
} DUMMYUNIONNAME;
} MessageInterrupt;
struct {
PHYSICAL_ADDRESS Start;
ULONG Length;
} Memory;
struct {
ULONG Channel;
ULONG Port;
ULONG Reserved1;
} Dma;
struct {
ULONG Channel;
ULONG RequestLine;
UCHAR TransferWidth;
UCHAR Reserved1;
UCHAR Reserved2;
UCHAR Reserved3;
} DmaV3;
struct {
ULONG Data[3];
} DevicePrivate;
struct {
ULONG Start;
ULONG Length;
ULONG Reserved;
} BusNumber;
struct {
ULONG DataSize;
ULONG Reserved1;
ULONG Reserved2;
} DeviceSpecificData;
struct {
PHYSICAL_ADDRESS Start;
ULONG Length40;
} Memory40;
struct {
PHYSICAL_ADDRESS Start;
ULONG Length48;
} Memory48;
struct {
PHYSICAL_ADDRESS Start;
ULONG Length64;
} Memory64;
struct {
UCHAR Class;
UCHAR Type;
UCHAR Reserved1;
UCHAR Reserved2;
ULONG IdLowPart;
ULONG IdHighPart;
} Connection;
} u;
} CM_PARTIAL_RESOURCE_DESCRIPTOR, *PCM_PARTIAL_RESOURCE_DESCRIPTOR;
회원
Type
리소스 종류를 식별합니다. 형식 지정된 상수 값은 다음 표에 표시된 대로 u 공용 구조체 내의 구조체가 유효한지 나타냅니다. (이러한 플래그는 명시된 경우를 제외하고 CM_PARTIAL_RESOURCE_DESCRIPTOR 구조와 IO_RESOURCE_DESCRIPTOR 구조 모두에서 사용됩니다.)
형식 값 | u 멤버 하위 구조 |
---|---|
cmResourceTypePort |
u.Port |
cmResourceTypeInterrupt |
u.인터럽트 또는 |
CmResourceTypeMemory | u.Memory |
CmResourceTypeMemoryLarge | |
CmResourceTypeDma | u.Dma |
CmResourceTypeDevicePrivate | u.DevicePrivate |
CmResourceTypeBusNumber | u.BusNumber |
CmResourceTypeDeviceSpecific | u.DeviceSpecificData(IO_RESOURCE_DESCRIPTOR내에서 사용되지 않음) |
CmResourceTypePcCardConfig | u.DevicePrivate |
cmResourceTypeMfCardConfig |
u.DevicePrivate |
cmResourceTypeConnection |
U.Connection |
cmResourceTypeConfigData |
시스템 사용을 위해 예약되어 있습니다. |
CmResourceTypeNonArbitrated | 사용되지 않습니다. |
ShareDisposition
설명된 리소스를 공유할 수 있는지 여부를 나타냅니다. 유효한 상수 값은 다음 표에 나와 있습니다.
값 | 의미 |
---|---|
CmResourceShareDeviceExclusive | 디바이스에는 리소스를 단독으로 사용해야 합니다. |
CmResourceShareDriverExclusive | 드라이버는 리소스를 단독으로 사용해야 합니다. WDM 드라이버에 대해서는 지원되지 않습니다. |
CmResourceShareShared | 리소스는 제한 없이 공유할 수 있습니다. |
Flags
다음 표에 표시된 대로 리소스 종류와 관련된 플래그 비트를 포함합니다(플래그는 적절하게 함께 비트 ORed될 수 있음).
CmResourceTypePort 리소스 종류
기 | 정의 |
---|---|
CM_RESOURCE_PORT_MEMORY | 디바이스는 메모리 주소 공간에서 액세스됩니다. |
CM_RESOURCE_PORT_IO | I/O 주소 공간에서 디바이스에 액세스합니다. |
CM_RESOURCE_PORT_10_BIT_DECODE | 디바이스는 포트 주소의 10비트 디코딩합니다. |
CM_RESOURCE_PORT_12_BIT_DECODE | 디바이스는 포트 주소의 12비트 디코딩합니다. |
CM_RESOURCE_PORT_16_BIT_DECODE | 디바이스는 포트 주소의 16비트 디코딩합니다. |
CM_RESOURCE_PORT_POSITIVE_DECODE | 디바이스는 "빼기 디코딩" 대신 "양의 디코딩"을 사용합니다. (일반적으로 PCI 디바이스는 양의 디코딩을 사용하고 ISA 버스는 빼기 디코딩을 사용합니다.) |
CM_RESOURCE_PORT_PASSIVE_DECODE | 디바이스는 포트를 디코딩하지만 드라이버는 포트를 사용하지 않습니다. |
CM_RESOURCE_PORT_WINDOW_DECODE | 시스템 사용을 위해 예약되어 있습니다. |
CmResourceTypeInterrupt 리소스 종류
기 | 정의 |
---|---|
CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE | IRQ 줄은 수준 트리거됩니다. (이러한 IRQ는 일반적으로 공유할 수 있습니다.) |
CM_RESOURCE_INTERRUPT_LATCHED | IRQ 줄은 에지 트리거됩니다. |
CM_RESOURCE_INTERRUPT_MESSAGE | 이 플래그가 설정되면 인터럽트는 메시지 신호 인터럽트입니다. 그렇지 않으면 인터럽트는 줄 기반 인터럽트입니다. |
CM_RESOURCE_INTERRUPT_POLICY_INCLUDED | CM_PARTIAL_RESOURCE_DESCRIPTOR 구조체에는 사용되지 않습니다. 이 플래그에 대한 자세한 내용은 IO_RESOURCE_DESCRIPTOR참조하세요. |
CM_RESOURCE_INTERRUPT_SECONDARY_INTERRUPT | 인터럽트는 보조 인터럽트입니다. 이 플래그는 Windows 8부터 설정할 수 있습니다. 보조 인터럽트에 대한 자세한 내용은 GPIO 인터럽트참조하세요. |
CM_RESOURCE_INTERRUPT_WAKE_HINT | 인터럽트는 저전력 유휴 상태 또는 시스템 절전 상태에서 운영 체제를 해제할 수 있습니다. 이 플래그는 Windows 8부터 설정할 수 있습니다. 절전 모드 해제 기능에 대한 자세한 내용은 디바이스 절전 모드 해제사용하도록 설정하세요. |
CmResourceTypeMemory 리소스 종류
기 | 정의 |
---|---|
CM_RESOURCE_MEMORY_READ_WRITE | 메모리 범위는 읽을 수 있고 쓸 수 있습니다. |
CM_RESOURCE_MEMORY_READ_ONLY | 메모리 범위는 읽기 전용입니다. |
CM_RESOURCE_MEMORY_WRITE_ONLY | 메모리 범위는 쓰기 전용입니다. |
CM_RESOURCE_MEMORY_PREFETCHABLE | 메모리 범위는 프리페치할 수 있습니다. |
CM_RESOURCE_MEMORY_COMBINEDWRITE | 결합된 쓰기 캐싱이 허용됩니다. |
CM_RESOURCE_MEMORY_24 | 디바이스는 24비트 주소 지정을 사용합니다. |
CM_RESOURCE_MEMORY_CACHEABLE | 메모리 범위는 캐시할 수 있습니다. |
CmResourceTypeMemoryLarge 리소스 종류
기 | 정의 |
---|---|
CM_RESOURCE_MEMORY_LARGE_40 | 메모리 설명자는 u.Memory40 멤버를 사용합니다. |
CM_RESOURCE_MEMORY_LARGE_48 | 메모리 설명자는 u.Memory48 멤버를 사용합니다. |
CM_RESOURCE_MEMORY_LARGE_64 | 메모리 설명자는 u.Memory64 멤버를 사용합니다. |
CmResourceTypeDma 리소스 종류
기 | 정의 |
---|---|
CM_RESOURCE_DMA_8 | 8비트 DMA 채널 |
CM_RESOURCE_DMA_16 | 16비트 DMA 채널 |
CM_RESOURCE_DMA_32 | 32비트 DMA 채널 |
CM_RESOURCE_DMA_8_AND_16 | 8비트 및 16비트 DMA 채널 |
CM_RESOURCE_DMA_BUS_MASTER | 디바이스는 버스 마스터 DMA 전송을 지원합니다. |
CM_RESOURCE_DMA_TYPE_A | DMA 입력 |
CM_RESOURCE_DMA_TYPE_B | B DMA 형식 |
CM_RESOURCE_DMA_TYPE_F | F DMA 형식 |
CM_RESOURCE_DMA_V3 | Dma 멤버 대신 DmaV3 멤버를 사용합니다. DmaV3 멤버는 Windows 8부터 사용할 수 있습니다. |
u
u 공용 구조체를 정의합니다.
u.Generic
사용되지 않습니다.
u.Generic.Start
사용되지 않습니다.
u.Generic.Length
사용되지 않습니다.
u.Port
다음 멤버를 사용하여 I/O 포트 주소의 범위를 지정합니다.
Windows Vista 이상 버전의 Windows 운영 체제용 드라이버는 rtlCmDecodeMemIoResource 및
u.Port.Start
원시 리소스의 경우: 디바이스에 할당된 연속 I/O 포트 주소 범위 중 가장 낮은 버스 상대 물리적 주소를 지정합니다.
변환된 리소스의 경우: 디바이스에 할당된 연속 I/O 포트 주소 범위 중 가장 낮은 시스템 실제 주소를 지정합니다.
원시 및 번역된 리소스에 대한 자세한 내용은 비고를 참조하세요.
u.Port.Length
할당된 I/O 포트 주소 범위의 길이(바이트)입니다.
u.Interrupt
다음 멤버를 사용하여 인터럽트 벡터 및 수준을 지정합니다.
u.Interrupt.Level
원시 리소스의 경우: 디바이스의 버스별 IRQL(플랫폼 및 버스에 적합한 경우)을 지정합니다.
번역된 리소스의 경우: 디바이스에 할당된 DIRQL을 지정합니다.
원시 및 번역된 리소스에 대한 자세한 내용은 비고를 참조하세요.
u.Interrupt.Group
프로세서 그룹 번호를 지정합니다. 이 멤버는 컴파일 시간에 NT_PROCESSOR_GROUPS 상수가 정의된 경우에만 존재합니다. 이 멤버는 Windows 7 이상 버전의 Windows에서만 0이 아닐 수 있습니다. 그룹 및 선호도 멤버는 디바이스가 중단할 수 있는 프로세서를 나타내는 그룹 선호도를 지정합니다. 모든 그룹에 대한 선호도를 지정하려면 그룹 ALL_PROCESSOR_GROUPS 설정합니다.
u.Interrupt.Vector
원시 리소스의 경우: 디바이스의 버스별 인터럽트 벡터(플랫폼 및 버스에 적합한 경우)를 지정합니다.
변환된 리소스의 경우: 디바이스에 할당된 전역 시스템 인터럽트 벡터를 지정합니다.
원시 및 번역된 리소스에 대한 자세한 내용은 비고를 참조하세요.
u.Interrupt.Affinity
디바이스가 중단될 수 있는 프로세서 집합을 나타내는 KAFFINITY형식 비트 마스크 값을 포함합니다. 디바이스가 프로세서를 중단할 수 있음을 나타내기 위해 이 멤버는 -1로 설정됩니다.
u.MessageInterrupt
메시지 신호 인터럽트를 지정합니다. 이 멤버는 공용 구조체입니다. 원시 리소스에는
원시 및 번역된 리소스에 대한 자세한 내용은 비고를 참조하세요.
u.MessageInterrupt.DUMMYUNIONNAME
DUMMYUNIONNAME 공용 구조체를 정의합니다.
u.MessageInterrupt.DUMMYUNIONNAME.Raw
원시 구조를 정의합니다.
u.MessageInterrupt.DUMMYUNIONNAME.Raw.Group
프로세서 그룹 번호를 지정합니다. 이 멤버는 컴파일 시간에 NT_PROCESSOR_GROUPS 정의된 경우에만 존재합니다. 이 멤버는 Windows 7 이상 버전의 Windows에서만 0이 아닐 수 있습니다. 그룹 및 선호도 멤버는 디바이스의 인터럽트를 받을 수 있는 프로세서를 나타내는 그룹 선호도를 지정합니다. 모든 그룹에 대한 선호도를 지정하려면 그룹 ALL_PROCESSOR_GROUPS 설정합니다.
u.MessageInterrupt.DUMMYUNIONNAME.Raw.Reserved
사용되지 않습니다.
u.MessageInterrupt.DUMMYUNIONNAME.Raw.MessageCount
이 드라이버에 대해 생성된 메시지 신호 인터럽트 수를 지정합니다.
u.MessageInterrupt.DUMMYUNIONNAME.Raw.Vector
디바이스의 인터럽트 벡터를 지정합니다.
u.MessageInterrupt.DUMMYUNIONNAME.Raw.Affinity
디바이스의 인터럽트를 수신하는 프로세서를 나타내는 KAFFINITY 값을 지정합니다.
u.MessageInterrupt.DUMMYUNIONNAME.Translated
u.MessageInterrupt.Translated 멤버에는 다음 멤버가 있습니다.
u.MessageInterrupt.DUMMYUNIONNAME.Translated.Level
디바이스의 인터럽트에서 할당된 디바이스 IRQL(DIRQL)을 지정합니다.
디바이스의 인터럽트에서 할당된 디바이스 IRQL(DIRQL)을 지정합니다.
u.MessageInterrupt.DUMMYUNIONNAME.Translated.Group
프로세서 그룹 번호를 지정합니다. 이 멤버는 컴파일 시간에 NT_PROCESSOR_GROUPS 정의된 경우에만 존재합니다. 이 멤버는 Windows 7 이상 버전의 Windows에서만 0이 아닐 수 있습니다. Translated.Group 및 Translated.Affinity 멤버는 디바이스의 인터럽트를 받을 수 있는 프로세서를 나타내는 그룹 선호도를 지정합니다. 모든 그룹에 대한 선호도를 지정하려면 Translated.Group ALL_PROCESSOR_GROUPS 설정합니다.
u.MessageInterrupt.DUMMYUNIONNAME.Translated.Vector
디바이스의 인터럽트 벡터를 지정합니다.
u.MessageInterrupt.DUMMYUNIONNAME.Translated.Affinity
디바이스의 인터럽트를 수신하는 프로세서를 식별하는 KAFFINITY 값을 지정합니다.
u.Memory
다음 멤버를 사용하여 메모리 주소 범위를 지정합니다.
Windows Vista 이상 버전의 Windows 운영 체제용 드라이버는
u.Memory.Start
원시 리소스의 경우: 디바이스에 할당된 연속 메모리 주소 범위 중 가장 낮은 버스 상대 물리적 주소를 지정합니다.
변환된 리소스의 경우: 디바이스에 할당된 연속 메모리 주소 범위 중 가장 낮은 시스템 실제 주소를 지정합니다.
원시 및 번역된 리소스에 대한 자세한 내용은 비고를 참조하세요.
u.Memory.Length
할당된 메모리 주소 범위의 길이(바이트)를 지정합니다.
u.Dma
다음 멤버 중 하나를 사용하여 DMA 설정을 지정합니다.
u.Dma.Channel
디바이스에서 사용할 수 있는 시스템 DMA 컨트롤러의 DMA 채널 수를 지정합니다.
u.Dma.Port
MCA 유형 디바이스에서 사용할 수 있는 DMA 포트 수를 지정합니다.
u.Dma.Reserved1
사용되지 않습니다.
u.DmaV3
DMA_OPERATIONS 구조의 버전 3을 사용하는 드라이버에 대한 DMA 설정을 지정합니다.
u.DmaV3 멤버는 Windows 8부터 사용할 수 있습니다.
u.DmaV3.Channel
디바이스에 할당된 시스템 DMA 컨트롤러의 DMA 채널 수를 지정합니다.
u.DmaV3.RequestLine
디바이스에 할당된 시스템 DMA 컨트롤러의 요청 줄 수를 지정합니다.
u.DmaV3.TransferWidth
디바이스에 할당된 시스템 DMA 컨트롤러가 디바이스 간에 데이터를 전송하는 데 사용하는 데이터 버스의 너비를 비트 단위로 지정합니다.
u.DmaV3.Reserved1
사용되지 않습니다.
u.DmaV3.Reserved2
사용되지 않습니다.
u.DmaV3.Reserved3
사용되지 않습니다.
u.DevicePrivate
시스템 사용을 위해 예약되어 있습니다.
u.DevicePrivate.Data[3]
u.BusNumber
다음 멤버를 사용하여 버스 번호를 지정합니다.
u.BusNumber.Start
디바이스에 할당된 연속 버스 범위 중 가장 낮은 번호를 지정합니다.
u.BusNumber.Length
디바이스에 할당된 버스 수를 지정합니다.
u.BusNumber.Reserved
사용되지 않습니다.
u.DeviceSpecificData
CM_PARTIAL_RESOURCE_DESCRIPTOR 구조의 끝에 추가되는 디바이스별 프라이빗 구조체의 크기를 지정합니다. u.DeviceSpecificData 사용하는 경우 CM_PARTIAL_RESOURCE_DESCRIPTOR 구조체는 CM_PARTIAL_RESOURCE_LIST 배열의 마지막 구조체여야 합니다.
디바이스별 구조의 예로는 CM_FLOPPY_DEVICE_DATA, CM_KEYBOARD_DEVICE_DATA, CM_SCSI_DEVICE_DATA및 CM_SERIAL_DEVICE_DATA있습니다.
u.DeviceSpecificData.DataSize
CM_PARTIAL_RESOURCE_DESCRIPTOR 구조체의 끝에 추가된 바이트 수를 지정합니다.
u.DeviceSpecificData.Reserved1
사용되지 않습니다.
u.DeviceSpecificData.Reserved2
사용되지 않습니다.
u.Memory40
다음 멤버를 사용하여 메모리 주소 범위를 지정합니다.
u.Memory40 멤버는 Windows Vista 이상 버전의 Windows 운영 체제에서만 사용할 수 있습니다. 드라이버는 rtlCmDecodeMemIoResource
u.Memory40.Start
원시 리소스의 경우: 디바이스에 할당된 연속 메모리 주소 범위 중 가장 낮은 버스 상대 물리적 주소를 지정합니다.
변환된 리소스의 경우: 디바이스에 할당된 연속 메모리 주소 범위 중 가장 낮은 시스템 실제 주소를 지정합니다.
원시 및 번역된 리소스에 대한 자세한 내용은 비고를 참조하세요.
u.Memory40.Length40
할당된 메모리 주소 범위의 40비트 길이(바이트)의 상위 32비트를 포함합니다. 가장 낮은 8비트가 0으로 처리됩니다.
u.Memory48
다음 멤버를 사용하여 메모리 주소 범위를 지정합니다.
u.Memory48 멤버는 Windows Vista 이상 버전의 Windows 운영 체제에서만 사용할 수 있습니다. 드라이버는 rtlCmDecodeMemIoResource
u.Memory48.Start
원시 리소스의 경우: 디바이스에 할당된 연속 메모리 주소 범위 중 가장 낮은 버스 상대 물리적 주소를 지정합니다.
변환된 리소스의 경우: 디바이스에 할당된 연속 메모리 주소 범위 중 가장 낮은 시스템 실제 주소를 지정합니다.
원시 및 번역된 리소스에 대한 자세한 내용은 비고를 참조하세요.
u.Memory48.Length48
할당된 메모리 주소 범위의 48비트 길이(바이트)의 상위 32비트를 포함합니다. 가장 낮은 16비트가 0으로 처리됩니다.
u.Memory64
다음 멤버를 사용하여 메모리 주소 범위를 지정합니다.
u.Memory64 멤버는 Windows Vista 이상 버전의 Windows 운영 체제에서만 사용할 수 있습니다. 드라이버는 rtlCmDecodeMemIoResource
u.Memory64.Start
원시 리소스의 경우: 디바이스에 할당된 연속 메모리 주소 범위 중 가장 낮은 버스 상대 물리적 주소를 지정합니다.
변환된 리소스의 경우: 디바이스에 할당된 연속 메모리 주소 범위 중 가장 낮은 시스템 실제 주소를 지정합니다.
원시 및 번역된 리소스에 대한 자세한 내용은 비고를 참조하세요.
u.Memory64.Length64
할당된 메모리 주소 범위의 64비트 길이(바이트)의 상위 32비트를 포함합니다. 가장 낮은 32비트가 0으로 처리됩니다.
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
연결 유형을 지정합니다.
클래스 = CM_RESOURCE_CONNECTION_CLASS_GPIO 경우 형식 다음 값으로 설정됩니다.
값 | 의미 |
---|---|
CM_RESOURCE_CONNECTION_TYPE_GPIO_IO | I/O용으로 구성된 GPIO 핀을 통해 디바이스에 액세스합니다. |
인터럽트 요청 입력으로 구성된 GPIO 핀은 일반 인터럽트 리소스(CmResourceTypeInterrupt)로 액세스됩니다.
클래스 = CM_RESOURCE_CONNECTION_CLASS_SERIAL 경우 형식 다음 값 중 하나로 설정됩니다.
값 | 의미 |
---|---|
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비트가 들어 있습니다.
발언
CM_PARTIAL_RESOURCE_DESCRIPTOR 구조는 사용 중인 루틴 또는 IRP에 따라 원시(버스 상대) 리소스 또는 번역된(시스템 물리적) 리소스를 설명할 수 있습니다. 자세한 내용은 원시 및 번역된 리소스 및
DeviceSpecificData 블록에
요구 사항
요구 | 값 |
---|---|
헤더 | wdm.h(Wdm.h, Ntddk.h, Ntifs.h, Wudfwdm.h 포함) |
참고 항목
RtlCmDecodeMemIoResource
rtlCmEncodeMemIoResource