sysdetmg.h

来自「用于查询PC机上的USB端口是否有设备挂接上」· C头文件 代码 · 共 849 行 · 第 1/2 页

H
849
字号

/*** EISA related stuff
 */

#define MAX_EISAID_LEN		7
#define MAX_EISA_SLOTS		16
#define MAX_IOCONFIGS		20
#define MAX_MEMCONFIGS		9
#define MAX_IRQCONFIGS		7
#define MAX_DMACONFIGS		4

#define IDSLOT_DUPID		0x0080
#define IDSLOT_NOREADID 	0x0040
#define IDSLOT_SLOTTYPEMASK	0x0030
#define IDSLOT_EXPANSLOT	0x0000
#define IDSLOT_EMBEDSLOT	0x0010
#define IDSLOT_VIRTSLOT 	0x0020
#define IDSLOT_DUPCFGIDMASK	0x000f
#define IDSLOT_INCOMPLETECONFIG 0x8000
#define IDSLOT_SUPPORTIOCHKERR	0x0200
#define IDSLOT_SUPPORTENABLE	0x0100

#define FUNCINFO_FUNCDISABLED	0x80
#define FUNCINFO_FREEFORMDATA	0x40
#define FUNCINFO_IOINITENTRIES	0x20
#define FUNCINFO_IORANGEENTRIES 0x10
#define FUNCINFO_DMAENTRIES	0x08
#define FUNCINFO_IRQENTRIES	0x04
#define FUNCINFO_MEMENTRIES	0x02
#define FUNCINFO_TYPEENTRY	0x01

#define PORTINFO_MOREENTRIES	0x80
#define PORTINFO_SHARED 	0x40
#define PORTINFO_NUMPORTMASK	0x1f

#define MEMCFG_MOREENTRIES	0x80
#define MEMCFG_SHARED		0x20
#define MEMCFG_MEMTYPEMASK	0x18
#define MEMCFG_CACHED		0x02
#define MEMCFG_READWRITE	0x01

#define MEMSIZ_DECODEMASK	0x0c
#define MEMSIZ_DECODE20BIT	0x00
#define MEMSIZ_DECODE24BIT	0x04
#define MEMSIZ_DECODE32BIT	0x08

#define IRQCFG_MOREENTRIES	0x80
#define IRQCFG_SHARED		0x40
#define IRQCFG_LEVELTRIGGERED	0x20
#define IRQCFG_INTNUMMASK	0x0f

#define DMACFG_MOREENTRIES	0x0080
#define DMACFG_SHARED		0x0040
#define DMACFG_DMANUMMASK	0x0007
#define DMACFG_TIMINGMASK	0x3000
#define DMACFG_XFERSIZEMASK	0x0c00

#define TABLE_ENTRIES_FROM_RSDT_POINTER(p)	((p->Header.Length-min(p->Header.Length, sizeof(DESCRIPTION_HEADER))) / 4)

#define DSDT_SIGNATURE  	0x54445344      // "DSDT"
#define FADT_SIGNATURE  	0x50434146      // "FACP"
#define RSDT_SIGNATURE  	0x54445352      // "RSDT"


#pragma pack(1)
typedef struct memconfig_s
{
    BYTE  bMemConfig;
    BYTE  bMemDataSize;
    BYTE  bStartAddrLo; 	//divided by 0x100
    WORD  wStartAddrHi;
    WORD  wMemSize;		//divided by 0x400
} MEMCONFIG;


typedef struct ioconfig_s
{
    BYTE  bPortInfo;
    WORD  wStartPort;
} IOCONFIG;


typedef struct initdata_s
{
    BYTE  bInitType;
    WORD  wPortAddr;
} INITDATA;


typedef struct eisaconfig_s
{
    DWORD dwEISAID;
    WORD  wIDSlotInfo;
    BYTE  bMajorRev;
    BYTE  bMinorRev;
    BYTE  abSelections[26];
    BYTE  bFuncInfo;
    char  achTypeInfo[80];
    MEMCONFIG amemconfig[MAX_MEMCONFIGS];
    WORD  awIRQConfig[MAX_IRQCONFIGS];
    WORD  awDMAConfig[MAX_DMACONFIGS];
    IOCONFIG aioconfig[MAX_IOCONFIGS];
    INITDATA ainitdata[20];
} EISACONFIG;

typedef EISACONFIG FAR *LPEISACONFIG;


/*** DPMI call structure
 */

typedef struct dwregs_s
{
    DWORD   edi;
    DWORD   esi;
    DWORD   ebp;
    DWORD   rmdw1;
    DWORD   ebx;
    DWORD   edx;
    DWORD   ecx;
    DWORD   eax;
} DWREGS;

typedef struct wregs_s
{
    WORD    di;
    WORD    rmw1;
    WORD    si;
    WORD    rmw2;
    WORD    bp;
    WORD    rmw3;
    DWORD   rmw4;
    WORD    bx;
    WORD    rmw5;
    WORD    dx;
    WORD    rmw6;
    WORD    cx;
    WORD    rmw7;
    WORD    ax;
} WREGS;

typedef struct bregs_s
{
    DWORD   rmb1[4];
    BYTE    bl;
    BYTE    bh;
    WORD    rmb2;
    BYTE    dl;
    BYTE    dh;
    WORD    rmb3;
    BYTE    cl;
    BYTE    ch;
    WORD    rmb4;
    BYTE    al;
    BYTE    ah;
} BREGS;

typedef struct rmcs_s
{
    union
    {
	DWREGS	dw;
	WREGS	w;
	BREGS	b;
    }	    regs;
    WORD    flags;
    WORD    es;
    WORD    ds;
    WORD    fs;
    WORD    gs;
    WORD    ip;
    WORD    cs;
    WORD    sp;
    WORD    ss;
} RMCS, FAR *LPRMCS;

typedef struct pnpbiostable_s {
    DWORD   dwSignature;
    BYTE    bVersion;
    BYTE    bLength;
    WORD    wControlField;
    BYTE    bChecksum;
    DWORD   dwEventNotification;
    WORD    wRMOffset;
    WORD    wRMSegment;
    WORD    wPMOffset;
    DWORD   dwPMSegment;
    DWORD   dwOEM;
    WORD    wRMData;
    DWORD   dwPMData;
} PNPBIOSTABLE, FAR *LPPNPBIOSTABLE;

typedef struct rsdptr_s
{
    DWORD dwSigLo;
    DWORD dwSigHi;
    BYTE  bChkSum;
    char  achOEMID[6];
    BYTE  abReserved[1];
    DWORD dwRSDTAddr;
} RSDPTR, FAR *LPRSDPTR;

typedef struct {       						// Header structure appears at the beginning of each ACPI table

ULONG   Signature;                      	// Signature used to identify the type of table
ULONG   Length;                         	// Length of entire table including the DESCRIPTION_HEADER
BYTE   Revision;                       	// Minor version of ACPI spec to which this table conforms
BYTE   Checksum;                       	// sum of all bytes in the entire TABLE should = 0
BYTE   OEMID[6];                       	// String that uniquely ID's the OEM
BYTE   OEMTableID[8];                  	// String that uniquely ID's this table (used for table patching and replacement).
ULONG   OEMRevision;                    	// OEM supplied table revision number.  Bigger number = newer table.
BYTE   CreatorID[4];                   	// Vendor ID of utility which created this table.
ULONG   CreatorRev;                     	// Revision of utility that created the table.
} DESCRIPTION_HEADER, *PDESCRIPTION_HEADER;

typedef struct {

	DESCRIPTION_HEADER Header;
	DWORD Tables[1];
	
}RSDT, *PRSDT;

typedef struct {            				// Fixed ACPI description table

DESCRIPTION_HEADER	Header;
ULONG               facs;					// Physical address of the Firmware ACPI Control Structure
ULONG               dsdt;					// Physical address of the Differentiated System Description Table
BYTE               int_model;				// System's Interrupt mode, 0=Dual PIC, 1=Multiple APIC, >1 reserved
BYTE               reserved4;
WORD             	sci_int_vector;			// Vector of SCI interrupt.
PBYTE              smi_cmd_io_port;		// Address in System I/O Space of the SMI Command port, used to enable and disable ACPI.
BYTE               acpi_on_value;			// Value out'd to smi_cmd_port to activate ACPI
BYTE               acpi_off_value;     	// Value out'd to smi_cmd_port to deactivate ACPI
BYTE              	s4bios_req;         	// Value to write to SMI_CMD to enter the S4 state.
BYTE               reserved1;          	// Must Be 0
ULONG               pm1a_evt_blk_io_port;	// Address in System I/O Space of the PM1a_EVT_BLK register block
ULONG               pm1b_evt_blk_io_port;   // Address in System I/O Space of the PM1b_EVT_BLK register block
ULONG               pm1a_ctrl_blk_io_port;  // Address in System I/O Space of the PM1a_CNT_BLK register block
ULONG               pm1b_ctrl_blk_io_port;  // Address in System I/O Space of the PM1b_CNT_BLK register block
ULONG               pm2_ctrl_blk_io_port;   // Address in System I/O Space of the PM2_CNT_BLK register block
ULONG               pm_tmr_blk_io_port;     // Address in System I/O Space of the PM_TMR register block
ULONG               gp0_blk_io_port;        // Address in System I/O Space of the GP0 register block
ULONG               gp1_blk_io_port;        // Address in System I/O Space of the GP1 register block
BYTE               pm1_evt_len;            // number of bytes decoded for PM1_BLK (must be >= 4)
BYTE               pm1_ctrl_len;           // number of bytes decoded for PM1_CNT (must be >= 2)
BYTE               pm2_ctrl_len;           // number of bytes decoded for PM1a_CNT (must be >= 1)
BYTE               pm_tmr_len;             // number of bytes decoded for PM_TMR (must be >= 4)
BYTE               gp0_blk_len;            // number of bytes decoded for GP0_BLK (must be multiple of 2)
BYTE               gp1_blk_len;            // number of bytes decoded for GP1_BLK (must be multiple of 2)
BYTE               gp1_base;               // index at which GP1 based events start
BYTE               reserved2;              // Must Be 0
WORD              lvl2_latency;           // Worst case latency in microseconds required to enter and leave the C2 processor state
WORD              lvl3_latency;           // Worst case latency in microseconds required to enter and leave the C3 processor state
WORD              flush_size;             // Ignored if WBINVD flag is 1 -- indicates size of memory read to flush dirty lines from                                                                         
										 	// any processors memory caches. A size of zero indicates this is not supported.
WORD              flush_stride;           // Ignored if WBINVD flag is 1 -- the memory stride width, in bytes, to perform reads to flush                                                                               
											// the processor's memory caches.
BYTE               duty_offset;            // zero based index of where the processor's duty cycle setting is within the processor's P_CNT register.
BYTE               duty_width;				// bit width of the processor's duty cycle setting value in the P_CNT register.                                                                               
											// a value of zero indicates that processor duty cycle is not supported
BYTE               day_alarm_index;
BYTE               month_alarm_index;
BYTE               century_alarm_index;
BYTE              	reserved3[3];
ULONG               flags;
}FADT, *PFADT;


#pragma pack()


/*** SDS Services prototypes
 */

LONG DLLENTRY SDSOpen(HWND hwnd, LPCSTR lpstrInfPath, LPCSTR lpstrLogPath,
		      DWORD dwfDetOpen, LPFNDCB lpfnCallBack,
		      LPSTR lpstrParams);
LONG DLLENTRY SDSClose(VOID);
LONG DLLENTRY SDSDetect(LPSTR lpstrClass, LPSTR lpstrFunc, WORD wfDetect,
			DWORD dwDetParam);
LONG DLLENTRY SDSRegAvoidRes(LPSTR lpstrOwnerID, LPSTR lpstrOwnerInst,
			     int icIO, LPIOMEM lpaio,
			     int icMem, LPIOMEM lpamem,
			     int icIRQ, LPIRQDMA lpairq,
			     int icDMA, LPIRQDMA lpadma);
VOID DLLENTRY SDSGetErrMsg(LONG lErr, LPSTR lpstrBuff, int icbLen);
LONG DLLENTRY SDSEnumDetFunc(BOOL fFirst, LPFUNCSTATE lpFuncState);
LONG DLLENTRY SDSGetDetFuncState(LPFUNCSTATE lpFuncState);
LONG DLLENTRY SDSSetDetFuncState(LPFUNCSTATE lpFuncState);
LONG DLLENTRY SDSEnumSkippedClasses(BOOL fFirst, LPCLASSSTATE lpClassState);
LONG DLLENTRY SDSSetClassState(LPCLASSSTATE lpClassState);


/*** DMS Services prototypes
 */

VOID _loadds FAR CDECL WriteDetLog(int iLogLevel, LPCSTR lpstrFormat, ...);
VOID _loadds FAR CDECL CatMsg(LPCSTR lpstrFormat, ...);
VOID _loadds FAR CDECL EnterProc(int iTraceLevel, LPCSTR lpstrFormat, ...);
VOID _loadds FAR CDECL ExitProc(int iTraceLevel, LPCSTR lpstrFormat, ...);
VOID _loadds FAR CDECL PrintTrace(int iTraceLevel, LPCSTR lpstrFormat, ...);
LONG DLLENTRY DMSQueryIOMem(HDET hdet, int iResType, int icEntries,
			    LPIOMEM lpaiomem, LPOWNERINFO lpownerinfo);
LONG DLLENTRY DMSQueryIRQDMA(HDET hdet, int iResType, int icEntries,
			     LPIRQDMA lpairqdma, LPOWNERINFO lpownerinfo);
LONG DLLENTRY DMSRegHW(HDET hdet, LPSTR lpstrDevID, HKEY FAR *lphkHW,
		       int icIO, LPIOMEM lpaio,
		       int icMem, LPIOMEM lpamem,
		       int icIRQ, LPIRQDMA lpairq,
		       int icDMA, LPIRQDMA lpadma,
		       LPBYTE lpbVerifyKey, DWORD dwcbKeySize,
		       WORD wfRegHW);
int DLLENTRY DMSInp(unsigned uPort);
unsigned DLLENTRY DMSInpw(unsigned uPort);
DWORD DLLENTRY DMSInpdw(unsigned uPort);
int DLLENTRY DMSOutp(unsigned uPort, int iData);
unsigned DLLENTRY DMSOutpw(unsigned uPort, unsigned uData);
DWORD DLLENTRY DMSOutpdw(unsigned uPort, DWORD dwData);
int DLLENTRY DMSDetectIRQ(unsigned uIRQMask, LPFNICB lpfnIntOn,
			  LPFNICB lpfnIntOff, DWORD dwParam);
BOOL DLLENTRY DMSTimeout(DWORD dwcTicks);
VOID DLLENTRY DMSDelayTicks(DWORD dwcTicks);
LPBYTE DLLENTRY DMSGetMemAlias(DWORD dwRealMemAddr, DWORD dwcbSize,
			       DWORD dwfMem);
VOID DLLENTRY DMSFreeMemAlias(LPBYTE lpbMemAlias);
LPFNGEN DLLENTRY DMSGetCodeAlias(DWORD dwCodeAddr, DWORD dwfMem);
VOID DLLENTRY DMSFreeCodeAlias(LPFNGEN lpfnCodeAlias);
LPBYTE DLLENTRY DMSFindMemStr(LPBYTE lpbAddr, DWORD dwcbSize, LPCSTR lpstr,
			      DWORD dwfMem);
LPBYTE DLLENTRY DMSFindMemPattern(LPBYTE lpbAddr, DWORD dwcbSize,
				  LPCBYTE lpbyte, DWORD dwcbLen,
				  DWORD dwfMem);
LONG DLLENTRY DMSQueryDosDev(DWORD dwDevHdrPtr, LPSTR lpstrDevName,
			     WORD wfDev, LPDOSDEV lpdosdev);
LONG DLLENTRY DMSQueryDosTSR(DWORD dwMCBPtr, LPSTR lpstrTSRName,
			     LPDOSTSR lpdostsr);
VOID DLLENTRY DMSQuerySysEnv(LPSYSENV lpsysenv);
LONG DLLENTRY DMSGetIHVEISADevSlots(LPCSTR lpstrIHVID);
LONG DLLENTRY DMSGetSlotEISAID(int iSlot, LPSTR lpstrDevID);
LONG DLLENTRY DMSGetEISAFuncConfig(int iSlot, int iFunc,
				   LPEISACONFIG lpcfg, LPSTR lpstrEISAID);
BOOL DLLENTRY DMSGetEISACardConfig(int iSlot, LPSTR lpstrDevID,
				   int FAR *lpicIO, LPIOMEM lpaio,
				   int FAR *lpicMem, LPIOMEM lpamem,
				   int FAR *lpicIRQ, LPIRQDMA lpairq,
				   int FAR *lpicDMA, LPIRQDMA lpadma,
				   WORD wcbTypeBuff, LPSTR lpstrTypeBuff);
LONG DLLENTRY DMSGetMCADevSlots(WORD wMCAID);
LONG DLLENTRY DMSGetSlotMCAID(int iSlot);
LONG DLLENTRY DMSInt86x(int iIntNum, LPREGS lpregsIn, LPREGS lpregsOut,
			LPSREGS lpsregs);
LONG DLLENTRY DMSCheckInt86xCrash(HDET hdet, int iIntNum, int iAX);
BOOL DLLENTRY DMSQueryVerifyKey(LPBYTE lpbVerifyKey, DWORD dwcbKeySize,
				WORD wfQuery);
LPSTR DLLENTRY DMSCatPath(LPSTR lpstrPath, LPSTR lpstrName);
BOOL DLLENTRY DMSGetPathItem(LPSTR FAR *lplpstrPathEnv, LPSTR lpstrBuff);
LPSTR DLLENTRY DMSGetWinDir(LPSTR lpstrWinDir, int icbBuffLen);
LPFNPROC DLLENTRY DMSRegRing0Proc(LPFNPROC lpfnR3Proc, int icwArg);
VOID DLLENTRY DMSFreeRing0Proc(LPFNPROC lpfnR0Proc);
LONG DLLENTRY DMSCallRMProc(DWORD dwRMProcPtr, BOOL fReset, LPRMCS lprmcs,
			    LPWORD lpawStack, WORD wStackSize);
LONG DLLENTRY DMSSetVar(LPSTR lpstrVar, LPBYTE lpbData, DWORD dwcbData);
LONG DLLENTRY DMSGetVar(LPSTR lpstrVar, LPBYTE lpbBuff, DWORD dwcbBuff,
			LPDWORD lpdwcbData);
DWORD DLLENTRY DMSFindIOROMStr(LPSTR lpstr, DWORD dwfMem);
LONG DLLENTRY DMSParseCfgSysDev(HINF hinf, LPSTR lpstrSect,
				LPIOMEM lpaiomem, int icIOMem,
				LPIOMEM FAR *lplpaio, int FAR *lpicIO,
				LPIOMEM FAR *lplpamem, int FAR *lpicMem,
				LPIRQDMA lpairqdma, int icIRQDMA,
				LPIRQDMA FAR *lplpairq, int FAR *lpicIRQ,
				LPIRQDMA FAR *lplpadma, int FAR *lpicDMA,
				WORD FAR *lpwfReg);
LONG DLLENTRY DMSParseIniDev(HINF hinf, LPSTR lpstrSect,
			     LPIOMEM lpaiomem, int icIOMem,
			     LPIOMEM FAR *lplpaio, int FAR *lpicIO,
			     LPIOMEM FAR *lplpamem, int FAR *lpicMem,
			     LPIRQDMA lpairqdma, int icIRQDMA,
			     LPIRQDMA FAR *lplpairq, int FAR *lpicIRQ,
			     LPIRQDMA FAR *lplpadma, int FAR *lpicDMA,
			     WORD FAR *lpwfReg);
LONG DLLENTRY DMSParseEnvDev(HINF hinf, LPSTR lpstrSect,
			     LPIOMEM lpaiomem, int icIOMem,
			     LPIOMEM FAR *lplpaio, int FAR *lpicIO,
			     LPIOMEM FAR *lplpamem, int FAR *lpicMem,
			     LPIRQDMA lpairqdma, int icIRQDMA,
			     LPIRQDMA FAR *lplpairq, int FAR *lpicIRQ,
			     LPIRQDMA FAR *lplpadma, int FAR *lpicDMA,
			     WORD FAR *lpwfReg);
LONG DLLENTRY DMSParseRes(LPSTR lpstrRes, LPIOMEM lpaiomem, int icIOMem,
			  LPIOMEM FAR *lplpaio, int FAR *lpicIO,
			  LPIOMEM FAR *lplpamem, int FAR *lpicMem,
			  LPIRQDMA lpairqdma, int icIRQDMA,
			  LPIRQDMA FAR *lplpairq, int FAR *lpicIRQ,
			  LPIRQDMA FAR *lplpadma, int FAR *lpicDMA,
			  WORD FAR *lpwfReg);
HWND DLLENTRY DMSGetHWnd(VOID);
LPSTR DLLENTRY DMSGetWinBootPath(LPSTR lpstrWinBootPath, int icbBuffLen);
LONG DLLENTRY DMSRegAvoidRes(LPSTR lpstrOwnerID, LPSTR lpstrOwnerInst,
			     int icIO, LPIOMEM lpaio,
			     int icMem, LPIOMEM lpamem,
			     int icIRQ, LPIRQDMA lpairq,
			     int icDMA, LPIRQDMA lpadma);
DWORD DLLENTRY DMSMakeVerifyKey(LPSTR lpstrDevID);
LONG DLLENTRY DMSRegSkipList(LPSTR lpstrSkipList);
DWORD DLLENTRY DMSGetCompaqMachineID(LPBYTE lpbFlags);
LPPNPBIOSTABLE DLLENTRY DMSGetPnpBiosTable(VOID);
BOOL DLLENTRY DMSMatchInfList(LPSTR lpstrInfFile, LPSTR lpstrInfSection, BOOL fMatchAllDescriptions);
LONG DLLENTRY DMSAdvanceProgress(int icUnits);
BYTE DLLENTRY DMSComputeCheckSum(LPBYTE lpb, DWORD dwLen);
DWORD DLLENTRY DMSGetRSDPTR(VOID);
DWORD DLLENTRY DMSFindACPITable(DWORD dwSig, LPDWORD lpdwLen);
LONG DLLENTRY DMSInvalidateCrashLog(VOID);

/*** Module function error codes
 */

#define MODERR_NONE		0L		//no error
#define MODERR_SDMERR		0x80008001	//sysdetmg error
#define MODERR_REGERR		0x80008002	//cannot access registry
#define MODERR_UNRECOVERABLE	0x80000003	//unrecoverable error

#endif	//_INC_SYSDETMG

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?