📄 cfgmgr32.h
字号:
//
// DMA_DES structure
//
typedef struct DMA_Des_s {
DWORD DD_Count; // number of DMA_RANGE structs in DMA_RESOURCE
DWORD DD_Type; // size (in bytes) of DMA_RANGE struct (DType_Range)
DWORD DD_Flags; // Flags describing DMA channel (fDD flags)
ULONG DD_Alloc_Chan; // Specifies the DMA channel that was allocated
} DMA_DES, *PDMA_DES;
//
// DMA_RESOURCE
//
typedef struct DMA_Resource_s {
DMA_DES DMA_Header; // info about DMA channel range list
DMA_RANGE DMA_Data[ANYSIZE_ARRAY]; // list of DMA ranges
} DMA_RESOURCE, *PDMA_RESOURCE;
//
// Define the size of each range structure
//
#define DType_Range sizeof(struct DMA_Range_s)
//--------------------------------------------------------------
// Interrupt Resource
//--------------------------------------------------------------
//
// Define the attribute flags for an interrupt resource range. Each bit flag
// is identified with a constant bitmask. Following the bitmask definition
// are the possible values.
//
#define mIRQD_Share (0x1) // Bitmask,whether the IRQ may be shared:
#define fIRQD_Exclusive (0x0) // The IRQ may not be shared
#define fIRQD_Share (0x1) // The IRQ may be shared
#define fIRQD_Share_Bit 0 // compatibility
#define fIRQD_Level_Bit 1 // compatibility
//
// ** NOTE: 16-bit ConfigMgr uses fIRQD_Level_Bit being set to indicate that the
// ** interrupt is _level-sensitive_. For 32-bit ConfigMgr, if this bit is set,
// ** then the interrupt is _edge-sensitive_.
//
#define mIRQD_Edge_Level (0x2) // Bitmask,whether edge or level triggered:
#define fIRQD_Level (0x0) // The IRQ is level-sensitive
#define fIRQD_Edge (0x2) // The IRQ is edge-sensitive
//
// IRQ_RANGE
//
typedef struct IRQ_Range_s {
ULONG IRQR_Min; // minimum IRQ in the range
ULONG IRQR_Max; // maximum IRQ in the range
ULONG IRQR_Flags; // flags describing the range (fIRQD flags)
} IRQ_RANGE, *PIRQ_RANGE;
//
// IRQ_DES structure
//
typedef struct IRQ_Des_32_s {
DWORD IRQD_Count; // number of IRQ_RANGE structs in IRQ_RESOURCE
DWORD IRQD_Type; // size (in bytes) of IRQ_RANGE (IRQType_Range)
DWORD IRQD_Flags; // flags describing the IRQ (fIRQD flags)
ULONG IRQD_Alloc_Num; // specifies the IRQ that was allocated
ULONG32 IRQD_Affinity;
} IRQ_DES_32, *PIRQ_DES_32;
typedef struct IRQ_Des_64_s {
DWORD IRQD_Count; // number of IRQ_RANGE structs in IRQ_RESOURCE
DWORD IRQD_Type; // size (in bytes) of IRQ_RANGE (IRQType_Range)
DWORD IRQD_Flags; // flags describing the IRQ (fIRQD flags)
ULONG IRQD_Alloc_Num; // specifies the IRQ that was allocated
ULONG64 IRQD_Affinity;
} IRQ_DES_64, *PIRQ_DES_64;
#ifdef _WIN64
typedef IRQ_DES_64 IRQ_DES;
typedef PIRQ_DES_64 PIRQ_DES;
#else
typedef IRQ_DES_32 IRQ_DES;
typedef PIRQ_DES_32 PIRQ_DES;
#endif
//
// IRQ_RESOURCE structure
//
typedef struct IRQ_Resource_32_s {
IRQ_DES_32 IRQ_Header; // info about IRQ range list
IRQ_RANGE IRQ_Data[ANYSIZE_ARRAY]; // list of IRQ ranges
} IRQ_RESOURCE_32, *PIRQ_RESOURCE_32;
typedef struct IRQ_Resource_64_s {
IRQ_DES_64 IRQ_Header; // info about IRQ range list
IRQ_RANGE IRQ_Data[ANYSIZE_ARRAY]; // list of IRQ ranges
} IRQ_RESOURCE_64, *PIRQ_RESOURCE_64;
#ifdef _WIN64
typedef IRQ_RESOURCE_64 IRQ_RESOURCE;
typedef PIRQ_RESOURCE_64 PIRQ_RESOURCE;
#else
typedef IRQ_RESOURCE_32 IRQ_RESOURCE;
typedef PIRQ_RESOURCE_32 PIRQ_RESOURCE;
#endif
//
// Define the size of each range structure
//
#define IRQType_Range sizeof(struct IRQ_Range_s)
//
// Flags for resource descriptor APIs indicating the width of certain
// variable-size resource descriptor structure fields, where applicable.
//
#define CM_RESDES_WIDTH_DEFAULT (0x00000000) // 32 or 64-bit IRQ_RESOURCE / IRQ_DES, based on client
#define CM_RESDES_WIDTH_32 (0x00000001) // 32-bit IRQ_RESOURCE / IRQ_DES
#define CM_RESDES_WIDTH_64 (0x00000002) // 64-bit IRQ_RESOURCE / IRQ_DES
#define CM_RESDES_WIDTH_BITS (0x00000003)
//--------------------------------------------------------------
// Device Private Resource
//--------------------------------------------------------------
//
// DEVICEPRIVATE_RANGE structure
//
typedef struct DevPrivate_Range_s {
DWORD PR_Data1; // mask for base alignment
DWORD PR_Data2; // number of bytes
DWORD PR_Data3; // minimum address
} DEVPRIVATE_RANGE, *PDEVPRIVATE_RANGE;
//
// DEVPRIVATE_DES structure
//
typedef struct DevPrivate_Des_s {
DWORD PD_Count;
DWORD PD_Type;
DWORD PD_Data1;
DWORD PD_Data2;
DWORD PD_Data3;
DWORD PD_Flags;
} DEVPRIVATE_DES, *PDEVPRIVATE_DES;
//
// DEVPRIVATE_RESOURCE
//
typedef struct DevPrivate_Resource_s {
DEVPRIVATE_DES PRV_Header;
DEVPRIVATE_RANGE PRV_Data[ANYSIZE_ARRAY];
} DEVPRIVATE_RESOURCE, *PDEVPRIVATE_RESOURCE;
//
// Define the size of each range structure
//
#define PType_Range sizeof(struct DevPrivate_Range_s)
//--------------------------------------------------------------
// Class-Specific Resource
//--------------------------------------------------------------
typedef struct CS_Des_s {
DWORD CSD_SignatureLength;
DWORD CSD_LegacyDataOffset;
DWORD CSD_LegacyDataSize;
DWORD CSD_Flags;
GUID CSD_ClassGuid;
BYTE CSD_Signature[ANYSIZE_ARRAY];
} CS_DES, *PCS_DES;
typedef struct CS_Resource_s {
CS_DES CS_Header;
} CS_RESOURCE, *PCS_RESOURCE;
//--------------------------------------------------------------
// PC Card Configuration Resource
//--------------------------------------------------------------
//
// Define the attribute flags for a PC Card configuration resource descriptor.
// Each bit flag is identified with a constant bitmask. Following the bitmask
// definition are the possible values.
//
#define mPCD_IO_8_16 (0x1) // Bitmask, whether I/O is 8 or 16 bits
#define fPCD_IO_8 (0x0) // I/O is 8-bit
#define fPCD_IO_16 (0x1) // I/O is 16-bit
#define mPCD_MEM_8_16 (0x2) // Bitmask, whether MEM is 8 or 16 bits
#define fPCD_MEM_8 (0x0) // MEM is 8-bit
#define fPCD_MEM_16 (0x2) // MEM is 16-bit
#define mPCD_MEM_A_C (0xC) // Bitmask, whether MEMx is Attribute or Common
#define fPCD_MEM1_A (0x4) // MEM1 is Attribute
#define fPCD_MEM2_A (0x8) // MEM2 is Attribute
#define fPCD_IO_ZW_8 (0x10) // zero wait on 8 bit I/O
#define fPCD_IO_SRC_16 (0x20) // iosrc 16
#define fPCD_IO_WS_16 (0x40) // wait states on 16 bit io
#define mPCD_MEM_WS (0x300) // Bitmask, for additional wait states on memory windows
#define fPCD_MEM_WS_ONE (0x100) // 1 wait state
#define fPCD_MEM_WS_TWO (0x200) // 2 wait states
#define fPCD_MEM_WS_THREE (0x300) // 3 wait states
#define fPCD_MEM_A (0x4) // MEM is Attribute
#define fPCD_ATTRIBUTES_PER_WINDOW (0x8000)
#define fPCD_IO1_16 (0x00010000) // I/O window 1 is 16-bit
#define fPCD_IO1_ZW_8 (0x00020000) // I/O window 1 zero wait on 8 bit I/O
#define fPCD_IO1_SRC_16 (0x00040000) // I/O window 1 iosrc 16
#define fPCD_IO1_WS_16 (0x00080000) // I/O window 1 wait states on 16 bit io
#define fPCD_IO2_16 (0x00100000) // I/O window 2 is 16-bit
#define fPCD_IO2_ZW_8 (0x00200000) // I/O window 2 zero wait on 8 bit I/O
#define fPCD_IO2_SRC_16 (0x00400000) // I/O window 2 iosrc 16
#define fPCD_IO2_WS_16 (0x00800000) // I/O window 2 wait states on 16 bit io
#define mPCD_MEM1_WS (0x03000000) // MEM window 1 Bitmask, for additional wait states on memory windows
#define fPCD_MEM1_WS_ONE (0x01000000) // MEM window 1, 1 wait state
#define fPCD_MEM1_WS_TWO (0x02000000) // MEM window 1, 2 wait states
#define fPCD_MEM1_WS_THREE (0x03000000) // MEM window 1, 3 wait states
#define fPCD_MEM1_16 (0x04000000) // MEM window 1 is 16-bit
#define mPCD_MEM2_WS (0x30000000) // MEM window 2 Bitmask, for additional wait states on memory windows
#define fPCD_MEM2_WS_ONE (0x10000000) // MEM window 2, 1 wait state
#define fPCD_MEM2_WS_TWO (0x20000000) // MEM window 2, 2 wait states
#define fPCD_MEM2_WS_THREE (0x30000000) // MEM window 2, 3 wait states
#define fPCD_MEM2_16 (0x40000000) // MEM window 2 is 16-bit
#define PCD_MAX_MEMORY 2
#define PCD_MAX_IO 2
typedef struct PcCard_Des_s {
DWORD PCD_Count;
DWORD PCD_Type;
DWORD PCD_Flags;
BYTE PCD_ConfigIndex;
BYTE PCD_Reserved[3];
DWORD PCD_MemoryCardBase1;
DWORD PCD_MemoryCardBase2;
DWORD PCD_MemoryCardBase[PCD_MAX_MEMORY]; // will soon be removed
WORD PCD_MemoryFlags[PCD_MAX_MEMORY]; // will soon be removed
BYTE PCD_IoFlags[PCD_MAX_IO]; // will soon be removed
} PCCARD_DES, *PPCCARD_DES;
typedef struct PcCard_Resource_s {
PCCARD_DES PcCard_Header;
} PCCARD_RESOURCE, *PPCCARD_RESOURCE;
//--------------------------------------------------------------
// MF (multifunction) PCCard Configuration Resource
//--------------------------------------------------------------
#define mPMF_AUDIO_ENABLE (0x8) // Bitmask, whether audio is enabled or not
#define fPMF_AUDIO_ENABLE (0x8) // Audio is enabled
typedef struct MfCard_Des_s {
DWORD PMF_Count;
DWORD PMF_Type;
DWORD PMF_Flags;
BYTE PMF_ConfigOptions;
BYTE PMF_IoResourceIndex;
BYTE PMF_Reserved[2];
DWORD PMF_ConfigRegisterBase;
} MFCARD_DES, *PMFCARD_DES;
typedef struct MfCard_Resource_s {
MFCARD_DES MfCard_Header;
} MFCARD_RESOURCE, *PMFCARD_RESOURCE;
//--------------------------------------------------------------
// Bus Number Resource
//--------------------------------------------------------------
//
// Define the attribute flags for a Bus Number resource descriptor.
// Each bit flag is identified with a constant bitmask. Following the bitmask
// definition are the possible values.
//
// Currently unused.
//
//
// BUSNUMBER_RANGE
//
typedef struct BusNumber_Range_s {
ULONG BUSR_Min; // minimum Bus Number in the range
ULONG BUSR_Max; // maximum Bus Number in the range
ULONG BUSR_nBusNumbers; // specifies number of buses required
ULONG BUSR_Flags; // flags describing the range (currently unused)
} BUSNUMBER_RANGE, *PBUSNUMBER_RANGE;
//
// BUSNUMBER_DES structure
//
typedef struct BusNumber_Des_s {
DWORD BUSD_Count; // number of BUSNUMBER_RANGE structs in BUSNUMBER_RESOURCE
DWORD BUSD_Type; // size (in bytes) of BUSNUMBER_RANGE (BusNumberType_Range)
DWORD BUSD_Flags; // flags describing the range (currently unused)
ULONG BUSD_Alloc_Base; // specifies the first Bus that was allocated
ULONG BUSD_Alloc_End; // specifies the last Bus number that was allocated
} BUSNUMBER_DES, *PBUSNUMBER_DES;
//
// BUSNUMBER_RESOURCE structure
//
typedef struct BusNumber_Resource_s {
BUSNUMBER_DES BusNumber_Header; // info about Bus Number range list
BUSNUMBER_RANGE BusNumber_Data[ANYSIZE_ARRAY]; // list of Bus Number ranges
} BUSNUMBER_RESOURCE, *PBUSNUMBER_RESOURCE;
//
// Define the size of each range structure
//
#define BusNumberType_Range sizeof(struct BusNumber_Range_s)
//--------------------------------------------------------------
// Hardware Profile Information
//--------------------------------------------------------------
//
// Define flags relating to hardware profiles
//
#define CM_HWPI_NOT_DOCKABLE (0x00000000) // machine is not dockable
#define CM_HWPI_UNDOCKED (0x00000001) // hw profile for docked config
#define CM_HWPI_DOCKED (0x00000002) // hw profile for undocked config
//
// HWPROFILEINFO structure
//
typedef struct HWProfileInfo_sA {
ULONG HWPI_ulHWProfile; // handle of hw profile
CHAR HWPI_szFriendlyName[MAX_PROFILE_LEN]; // friendly name of hw profile
DWORD HWPI_dwFlags; // profile flags (CM_HWPI_*)
} HWPROFILEINFO_A, *PHWPROFILEINFO_A;
typedef struct HWProfileInfo_sW {
ULONG HWPI_ulHWProfile; // handle of hw profile
WCHAR HWPI_szFriendlyName[MAX_PROFILE_LEN]; // friendly name of hw profile
DWORD HWPI_dwFlags; // profile flags (CM_HWPI_*)
} HWPROFILEINFO_W, *PHWPROFILEINFO_W;
#ifdef UNICODE
typedef HWPROFILEINFO_W HWPROFILEINFO;
typedef PHWPROFILEINFO_W PHWPROFILEINFO;
#else
typedef HWPROFILEINFO_A HWPROFILEINFO;
typedef PHWPROFILEINFO_A PHWPROFILEINFO;
#endif
//
// revert back to normal default packing
//
#include "poppack.h"
//--------------------------------------------------------------
// Miscellaneous
//--------------------------------------------------------------
//
// Resource types
//
#define ResType_All (0x00000000) // Return all resource types
#define ResType_None (0x00000000) // Arbitration always succeeded
#define ResType_Mem (0x00000001) // Physical address resource
#define ResType_IO (0x00000002) // Physical I/O address resource
#define ResType_DMA (0x00000003) // DMA channels resource
#define ResType_IRQ (0x00000004) // IRQ resource
#define ResType_DoNotUse (0x00000005) // Used as spacer to sync subsequent ResTypes w/NT
#define ResType_BusNumber (0x00000006) // bus number resource
#define ResType_MAX (0x00000006) // Maximum known (arbitrated) ResType
#define ResType_Ignored_Bit (0x00008000) // Ignore this resource
#define ResType_ClassSpecific (0x0000FFFF) // class-specific resource
#define ResType_Reserved (0x00008000) // reserved for internal use
#define ResType_DevicePrivate (0x00008001) // device private data
#define ResType_PcCardConfig (0x00008002) // PC Card configuration data
#define ResType_MfCardConfig (0x00008003) // MF Card configuration data
//
// Flags specifying options for ranges that conflict with ranges already in
// the range list (CM_Add_Range)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -