📄 cfgmgr32.h
字号:
/*++
Copyright (c) 1989-1997 Microsoft Corporation
Module Name:
cfgmgr32.h
Abstract:
This module contains the user APIs for the Configuration Manager,
along with any public data structures needed to call these APIs.
Author:
Paula Tomlinson (paulat) 06/19/1995
Revision History:
--*/
#ifndef _CFGMGR32_
#define _CFGMGR32_
#include "cfg.h"
#ifndef GUID_DEFINED
#define GUID_DEFINED
typedef struct _GUID
{
unsigned long Data1;
unsigned short Data2;
unsigned short Data3;
unsigned char Data4[8];
} GUID;
#endif /* GUID_DEFINED */
#ifndef __LPGUID_DEFINED__
#define __LPGUID_DEFINED__
typedef GUID *LPGUID;
#endif
#if !defined (_CFGMGR32_)
#define CMAPI DECLSPEC_IMPORT
#else
#define CMAPI
#endif
typedef CONST VOID *PCVOID;
//--------------------------------------------------------------
// General size definitions
//--------------------------------------------------------------
#define MAX_DEVICE_ID_LEN 200
#define MAX_DEVNODE_ID_LEN MAX_DEVICE_ID_LEN
#define MAX_GUID_STRING_LEN 39 // 38 chars + terminator null
#define MAX_CLASS_NAME_LEN 32
#define MAX_PROFILE_LEN 80
#define MAX_CONFIG_VALUE 9999
#define MAX_INSTANCE_VALUE 9999
#define MAX_MEM_REGISTERS 9 // Win95 compatibility--not applicable to 32-bit ConfigMgr
#define MAX_IO_PORTS 20 // Win95 compatibility--not applicable to 32-bit ConfigMgr
#define MAX_IRQS 7 // Win95 compatibility--not applicable to 32-bit ConfigMgr
#define MAX_DMA_CHANNELS 7 // Win95 compatibility--not applicable to 32-bit ConfigMgr
#define DWORD_MAX 0xFFFFFFFF
#define DWORDLONG_MAX 0xFFFFFFFFFFFFFFFF
#define CONFIGMG_VERSION 0x0400
//--------------------------------------------------------------
// Data types
//--------------------------------------------------------------
//
// Work around weirdness with Win32 typedef...
//
#ifdef NT_INCLUDED
//
// __int64 is only supported by 2.0 and later midl.
// __midl is set by the 2.0 midl and not by 1.0 midl.
//
#if (!defined(MIDL_PASS) || defined(__midl)) && (!defined(_M_IX86) || (defined(_INTEGRAL_MAX_BITS) && _INTEGRAL_MAX_BITS >= 64))
typedef unsigned __int64 DWORDLONG;
#else
typedef double DWORDLONG;
#endif
typedef DWORDLONG *PDWORDLONG;
#endif /* NT_INCLUDED */
//
// Standardized Return Value data type
//
typedef DWORD RETURN_TYPE;
typedef RETURN_TYPE CONFIGRET;
//
// Device Instance Handle data type
//
typedef DWORD DEVNODE, DEVINST;
typedef DEVNODE *PDEVNODE, *PDEVINST;
//
// Device Instance Identifier data type
// The device instance ID specifies the registry path, relative to the
// Enum key , for a device instance. For example: \Root\*PNP0500\0000.
//
typedef CHAR *DEVNODEID_A, *DEVINSTID_A; // Device ID ANSI name.
typedef WCHAR *DEVNODEID_W, *DEVINSTID_W; // Device ID Unicode name.
#ifdef UNICODE
typedef DEVNODEID_W DEVNODEID;
typedef DEVINSTID_W DEVINSTID;
#else
typedef DEVNODEID_A DEVNODEID;
typedef DEVINSTID_A DEVINSTID;
#endif
//
// Logical Configuration Handle data type
//
typedef DWORD LOG_CONF;
typedef LOG_CONF *PLOG_CONF;
//
// Resource Descriptor Handle data type
//
typedef DWORD RES_DES;
typedef RES_DES *PRES_DES;
//
// Resource ID data type (may take any of the ResType_* values)
//
typedef ULONG RESOURCEID;
typedef RESOURCEID *PRESOURCEID;
//
// Priority data type (may take any of the LCPRI_* values)
//
typedef ULONG PRIORITY;
typedef PRIORITY *PPRIORITY;
//
// Range List Handle data type
//
typedef DWORD RANGE_LIST;
typedef RANGE_LIST *PRANGE_LIST;
//
// Range Element Handle data type
//
typedef DWORD RANGE_ELEMENT;
typedef RANGE_ELEMENT *PRANGE_ELEMENT;
typedef HANDLE HMACHINE;
typedef HMACHINE *PHMACHINE;
typedef ULONG REGDISPOSITION;
//
// use 1 byte packing for the data structures
//
#include "pshpack1.h"
//--------------------------------------------------------------
// Memory resource
//--------------------------------------------------------------
//
// Define the attribute flags for memory ranges. Each bit flag is
// identified by a constant bitmask. Following the bitmask definition,
// are the two possible values.
//
#define mMD_MemoryType (0x1) // Bitmask, whether memory is writable
#define fMD_MemoryType mMD_MemoryType // compatibility
#define fMD_ROM (0x0) // Memory range is read-only
#define fMD_RAM (0x1) // Memory range may be written to
#define mMD_32_24 (0x2) // Bitmask, memory is 24 or 32-bit
#define fMD_32_24 mMD_32_24 // compatibility
#define fMD_24 (0x0) // Memory range is 24-bit
#define fMD_32 (0x2) // Memory range is 32-bit
#define mMD_Prefetchable (0x4) // Bitmask,whether memory prefetchable
#define fMD_Prefetchable mMD_Prefetchable // compatibility
#define fMD_Pref mMD_Prefetchable // compatibility
#define fMD_PrefetchDisallowed (0x0) // Memory range is not prefetchable
#define fMD_PrefetchAllowed (0x4) // Memory range is prefetchable
#define mMD_Readable (0x8) // Bitmask,whether memory is readable
#define fMD_Readable mMD_Readable // compatibility
#define fMD_ReadAllowed (0x0) // Memory range is readable
#define fMD_ReadDisallowed (0x8) // Memory range is write-only
#define mMD_CombinedWrite (0x10) // Bitmask,supports write-behind
#define fMD_CombinedWrite mMD_CombinedWrite // compatibility
#define fMD_CombinedWriteDisallowed (0x0) // no combined-write caching
#define fMD_CombinedWriteAllowed (0x10) // supports combined-write caching
#define mMD_Cacheable (0x20) // Bitmask,whether memory is cacheable
#define fMD_NonCacheable (0x0) // Memory range is non-cacheable
#define fMD_Cacheable (0x20) // Memory range is cacheable
//
// MEM_RANGE Structure
//
typedef struct Mem_Range_s {
DWORDLONG MR_Align; // specifies mask for base alignment
ULONG MR_nBytes; // specifies number of bytes required
DWORDLONG MR_Min; // specifies minimum address of the range
DWORDLONG MR_Max; // specifies maximum address of the range
DWORD MR_Flags; // specifies flags describing range (fMD flags)
DWORD MR_Reserved;
} MEM_RANGE, *PMEM_RANGE;
//
// MEM_DES structure
//
typedef struct Mem_Des_s {
DWORD MD_Count; // number of MEM_RANGE structs in MEM_RESOURCE
DWORD MD_Type; // size (in bytes) of MEM_RANGE (MType_Range)
DWORDLONG MD_Alloc_Base; // base memory address of range allocated
DWORDLONG MD_Alloc_End; // end of allocated range
DWORD MD_Flags; // flags describing allocated range (fMD flags)
DWORD MD_Reserved;
} MEM_DES, *PMEM_DES;
//
// MEM_RESOURCE structure
//
typedef struct Mem_Resource_s {
MEM_DES MEM_Header; // info about memory range list
MEM_RANGE MEM_Data[ANYSIZE_ARRAY]; // list of memory ranges
} MEM_RESOURCE, *PMEM_RESOURCE;
//
// Define the size of each range structure
//
#define MType_Range sizeof(struct Mem_Range_s)
//--------------------------------------------------------------
// I/O Port Resource
//--------------------------------------------------------------
//
// Define the attribute flags for port resources. Each bit flag is
// identified by a constant bitmask. Following the bitmask definition,
// are the two possible values.
//
#define fIOD_PortType (0x1) // Bitmask,whether port is IO or memory
#define fIOD_Memory (0x0) // Port resource really uses memory
#define fIOD_IO (0x1) // Port resource uses IO ports
#define IO_ALIAS_10_BIT_DECODE (0x00000004)
#define IO_ALIAS_12_BIT_DECODE (0x00000010)
#define IO_ALIAS_16_BIT_DECODE (0x00000000)
#define IO_ALIAS_POSITIVE_DECODE (0x000000FF)
//
// IO_RANGE structure
//
typedef struct IO_Range_s {
DWORDLONG IOR_Align; // mask for base alignment
DWORD IOR_nPorts; // number of ports
DWORDLONG IOR_Min; // minimum port address
DWORDLONG IOR_Max; // maximum port address
DWORD IOR_RangeFlags; // flags for this port range
DWORDLONG IOR_Alias; // multiplier that generates aliases for port(s)
} IO_RANGE, *PIO_RANGE;
//
// IO_DES structure
//
typedef struct IO_Des_s {
DWORD IOD_Count; // number of IO_RANGE structs in IO_RESOURCE
DWORD IOD_Type; // size (in bytes) of IO_RANGE (IOType_Range)
DWORDLONG IOD_Alloc_Base; // base of allocated port range
DWORDLONG IOD_Alloc_End; // end of allocated port range
DWORD IOD_DesFlags; // flags relating to allocated port range
} IO_DES, *PIO_DES;
//
// IO_RESOURCE
//
typedef struct IO_Resource_s {
IO_DES IO_Header; // info about I/O port range list
IO_RANGE IO_Data[ANYSIZE_ARRAY]; // list of I/O port ranges
} IO_RESOURCE, *PIO_RESOURCE;
#define IOA_Local 0xff
//
// Define the size of each range structure
//
#define IOType_Range sizeof(struct IO_Range_s)
//--------------------------------------------------------------
// DMA Resource
//--------------------------------------------------------------
//
// Define the attribute flags for a DMA resource range. Each bit flag is
// identified with a constant bitmask. Following the bitmask definition
// are the possible values.
//
#define mDD_Width (0x3) // Bitmask, width of the DMA channel:
#define fDD_BYTE (0x0) // 8-bit DMA channel
#define fDD_WORD (0x1) // 16-bit DMA channel
#define fDD_DWORD (0x2) // 32-bit DMA channel
#define fDD_BYTE_AND_WORD (0x3) // 8-bit and 16-bit DMA channel
#define mDD_BusMaster (0x4) // Bitmask, whether bus mastering is supported
#define fDD_NoBusMaster (0x0) // no bus mastering
#define fDD_BusMaster (0x4) // bus mastering
#define mDD_Type (0x18) // Bitmask, specifies type of DMA
#define fDD_TypeStandard (0x00) // standard DMA
#define fDD_TypeA (0x08) // Type-A DMA
#define fDD_TypeB (0x10) // Type-B DMA
#define fDD_TypeF (0x18) // Type-F DMA
//
// DMA_RANGE structure
//
typedef struct DMA_Range_s {
ULONG DR_Min; // minimum DMA port in the range
ULONG DR_Max; // maximum DMA port in the range
ULONG DR_Flags; // flags describing the range (fDD flags)
} DMA_RANGE, *PDMA_RANGE;
//
// 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_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
ULONG IRQD_Affinity;
} IRQ_DES, *PIRQ_DES;
//
// IRQ_RESOURCE structure
//
typedef struct IRQ_Resource_s {
IRQ_DES IRQ_Header; // info about IRQ range list
IRQ_RANGE IRQ_Data[ANYSIZE_ARRAY]; // list of IRQ ranges
} IRQ_RESOURCE, *PIRQ_RESOURCE;
//
// Define the size of each range structure
//
#define IRQType_Range sizeof(struct IRQ_Range_s)
//--------------------------------------------------------------
// Device Private Resource
//--------------------------------------------------------------
//
// DEVICEPRIVATE_RANGE structure
//
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -