580 lines
No EOL
19 KiB
C
580 lines
No EOL
19 KiB
C
//-----------------------------------------------------------------------------
|
|
// Author : hiyohiyo
|
|
// Mail : hiyohiyo@crystalmark.info
|
|
// Web : http://openlibsys.org/
|
|
// License : The modified BSD license
|
|
//
|
|
// Copyright 2007-2009 OpenLibSys.org. All rights reserved.
|
|
//-----------------------------------------------------------------------------
|
|
// for WinRing0 1.3.x
|
|
|
|
#pragma once
|
|
|
|
/******************************************************************************
|
|
**
|
|
** DLL Information
|
|
**
|
|
******************************************************************************/
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// GetDllStatus
|
|
//-----------------------------------------------------------------------------
|
|
DWORD // DLL Status, defined OLS_DLL_****
|
|
WINAPI GetDllStatus();
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// GetDllVersion
|
|
//-----------------------------------------------------------------------------
|
|
DWORD // DLL Version, defined OLS_VERSION
|
|
WINAPI GetDllVersion(
|
|
PBYTE major, // major version
|
|
PBYTE minor, // minor version
|
|
PBYTE revision, // revision
|
|
PBYTE release // release/build
|
|
);
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// GetDriverVersion
|
|
//-----------------------------------------------------------------------------
|
|
DWORD // Device Driver Version, defined OLS_DRIVER_VERSION
|
|
WINAPI GetDriverVersion(
|
|
PBYTE major, // major version
|
|
PBYTE minor, // minor version
|
|
PBYTE revision, // revision
|
|
PBYTE release // release/build
|
|
);
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// GetDriverType
|
|
//-----------------------------------------------------------------------------
|
|
DWORD // Device Driver Type, defined OLS_DRIVER_TYPE_****
|
|
WINAPI GetDriverType();
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// InitializeOls
|
|
//-----------------------------------------------------------------------------
|
|
BOOL // TRUE: success, FALSE: failure
|
|
WINAPI InitializeOls();
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// DeinitializeOls
|
|
//-----------------------------------------------------------------------------
|
|
VOID WINAPI DeinitializeOls();
|
|
|
|
/******************************************************************************
|
|
**
|
|
** CPU
|
|
**
|
|
******************************************************************************/
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// IsCpuid
|
|
//-----------------------------------------------------------------------------
|
|
BOOL // TRUE: support CPUID instruction, FALSE: not support CPUID instruction
|
|
WINAPI IsCpuid();
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// IsMsr
|
|
//-----------------------------------------------------------------------------
|
|
BOOL // TRUE: support MSR(Model-Specific Register), FALSE: not support MSR
|
|
WINAPI IsMsr();
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// IsTsc
|
|
//-----------------------------------------------------------------------------
|
|
BOOL // TRUE: support TSC(Time Stamp Counter), FALSE: not support TSC
|
|
WINAPI IsTsc();
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Rdmsr
|
|
//-----------------------------------------------------------------------------
|
|
BOOL // TRUE: success, FALSE: failure
|
|
WINAPI Rdmsr(
|
|
DWORD index, // MSR index
|
|
PDWORD eax, // bit 0-31
|
|
PDWORD edx // bit 32-63
|
|
);
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// RdmsrTx
|
|
//-----------------------------------------------------------------------------
|
|
BOOL // TRUE: success, FALSE: failure
|
|
WINAPI RdmsrTx(
|
|
DWORD index, // MSR index
|
|
PDWORD eax, // bit 0-31
|
|
PDWORD edx, // bit 32-63
|
|
DWORD_PTR threadAffinityMask
|
|
);
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// RdmsrPx
|
|
//-----------------------------------------------------------------------------
|
|
BOOL // TRUE: success, FALSE: failure
|
|
WINAPI RdmsrPx(
|
|
DWORD index, // MSR index
|
|
PDWORD eax, // bit 0-31
|
|
PDWORD edx, // bit 32-63
|
|
DWORD_PTR processAffinityMask
|
|
);
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Wrmsr
|
|
//-----------------------------------------------------------------------------
|
|
BOOL // TRUE: success, FALSE: failure
|
|
WINAPI Wrmsr(
|
|
DWORD index, // MSR index
|
|
DWORD eax, // bit 0-31
|
|
DWORD edx // bit 32-63
|
|
);
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// WrmsrTx
|
|
//-----------------------------------------------------------------------------
|
|
BOOL // TRUE: success, FALSE: failure
|
|
WINAPI WrmsrTx(
|
|
DWORD index, // MSR index
|
|
DWORD eax, // bit 0-31
|
|
DWORD edx, // bit 32-63
|
|
DWORD_PTR threadAffinityMask
|
|
);
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// WrmsrPx
|
|
//-----------------------------------------------------------------------------
|
|
BOOL // TRUE: success, FALSE: failure
|
|
WINAPI WrmsrPx(
|
|
DWORD index, // MSR index
|
|
DWORD eax, // bit 0-31
|
|
DWORD edx, // bit 32-63
|
|
DWORD_PTR processAffinityMask
|
|
);
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Rdpmc
|
|
//-----------------------------------------------------------------------------
|
|
BOOL // TRUE: success, FALSE: failure
|
|
WINAPI Rdpmc(
|
|
DWORD index, // PMC index
|
|
PDWORD eax, // bit 0-31
|
|
PDWORD edx // bit 32-63
|
|
);
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// RdmsrTx
|
|
//-----------------------------------------------------------------------------
|
|
BOOL // TRUE: success, FALSE: failure
|
|
WINAPI RdpmcTx(
|
|
DWORD index, // PMC index
|
|
PDWORD eax, // bit 0-31
|
|
PDWORD edx, // bit 32-63
|
|
DWORD_PTR threadAffinityMask
|
|
);
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// RdmsrPx
|
|
//-----------------------------------------------------------------------------
|
|
BOOL // TRUE: success, FALSE: failure
|
|
WINAPI RdpmcPx(
|
|
DWORD index, // PMC index
|
|
PDWORD eax, // bit 0-31
|
|
PDWORD edx, // bit 32-63
|
|
DWORD_PTR processAffinityMask
|
|
);
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Cpuid
|
|
//-----------------------------------------------------------------------------
|
|
BOOL // TRUE: success, FALSE: failure
|
|
WINAPI Cpuid(
|
|
DWORD index, // CPUID index
|
|
PDWORD eax,
|
|
PDWORD ebx,
|
|
PDWORD ecx,
|
|
PDWORD edx
|
|
);
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// CpuidTx
|
|
//-----------------------------------------------------------------------------
|
|
BOOL // TRUE: success, FALSE: failure
|
|
WINAPI CpuidTx(
|
|
DWORD index, // CPUID index
|
|
PDWORD eax,
|
|
PDWORD ebx,
|
|
PDWORD ecx,
|
|
PDWORD edx,
|
|
DWORD_PTR threadAffinityMask
|
|
);
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// CpuidPx
|
|
//-----------------------------------------------------------------------------
|
|
BOOL // TRUE: success, FALSE: failure
|
|
WINAPI CpuidPx(
|
|
DWORD index, // CPUID index
|
|
PDWORD eax,
|
|
PDWORD ebx,
|
|
PDWORD ecx,
|
|
PDWORD edx,
|
|
DWORD_PTR processAffinityMask
|
|
);
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Rdtsc
|
|
//-----------------------------------------------------------------------------
|
|
BOOL // TRUE: success, FALSE: failure
|
|
WINAPI Rdtsc(
|
|
PDWORD eax, // bit 0-31
|
|
PDWORD edx // bit 32-63
|
|
);
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// RdmsrTx
|
|
//-----------------------------------------------------------------------------
|
|
BOOL // TRUE: success, FALSE: failure
|
|
WINAPI RdtscTx(
|
|
PDWORD eax, // bit 0-31
|
|
PDWORD edx, // bit 32-63
|
|
DWORD_PTR threadAffinityMask
|
|
);
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// RdmsrPx
|
|
//-----------------------------------------------------------------------------
|
|
BOOL // TRUE: success, FALSE: failure
|
|
WINAPI RdtscPx(
|
|
PDWORD eax, // bit 0-31
|
|
PDWORD edx, // bit 32-63
|
|
DWORD_PTR processAffinityMask
|
|
);
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Hlt
|
|
//-----------------------------------------------------------------------------
|
|
BOOL // TRUE: success, FALSE: failure
|
|
WINAPI Hlt();
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// HltTx
|
|
//-----------------------------------------------------------------------------
|
|
BOOL // TRUE: success, FALSE: failure
|
|
WINAPI HltTx(
|
|
DWORD_PTR threadAffinityMask
|
|
);
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// HltPx
|
|
//-----------------------------------------------------------------------------
|
|
BOOL // TRUE: success, FALSE: failure
|
|
WINAPI HltTx(
|
|
DWORD_PTR processAffinityMask
|
|
);
|
|
|
|
/******************************************************************************
|
|
**
|
|
** I/O
|
|
**
|
|
******************************************************************************/
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// ReadIoPortByte
|
|
//-----------------------------------------------------------------------------
|
|
BYTE // Read Value
|
|
WINAPI ReadIoPortByte(
|
|
WORD port // I/O port address
|
|
);
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// ReadIoPortWord
|
|
//-----------------------------------------------------------------------------
|
|
WORD // Read Value
|
|
WINAPI ReadIoPortWord(
|
|
WORD port // I/O port address
|
|
);
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// ReadIoPortDword
|
|
//-----------------------------------------------------------------------------
|
|
DWORD // Read Value
|
|
WINAPI ReadIoPortDword(
|
|
WORD port // I/O port address
|
|
);
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// ReadIoPortByteEx
|
|
//-----------------------------------------------------------------------------
|
|
BOOL // TRUE: success, FALSE: failure
|
|
WINAPI ReadIoPortByteEx(
|
|
WORD port, // I/O port address
|
|
PBYTE value // Read Value
|
|
);
|
|
//-----------------------------------------------------------------------------
|
|
// ReadIoPortWordEx
|
|
//-----------------------------------------------------------------------------
|
|
BOOL // TRUE: success, FALSE: failure
|
|
WINAPI ReadIoPortWordEx(
|
|
WORD port, // I/O port address
|
|
PWORD value // Read Value
|
|
);
|
|
//-----------------------------------------------------------------------------
|
|
// ReadIoPortDwordEx
|
|
//-----------------------------------------------------------------------------
|
|
BOOL // TRUE: success, FALSE: failure
|
|
WINAPI ReadIoPortDwordEx(
|
|
WORD port, // I/O port address
|
|
PDWORD value // Read Value
|
|
);
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// WriteIoPortByte
|
|
//-----------------------------------------------------------------------------
|
|
VOID
|
|
WINAPI WriteIoPortByte(
|
|
WORD port, // I/O port address
|
|
BYTE value // Write Value
|
|
);
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// WriteIoPortDword
|
|
//-----------------------------------------------------------------------------
|
|
VOID
|
|
WINAPI WriteIoPortDword(
|
|
WORD port, // I/O port address
|
|
DWORD value // Write Value
|
|
);
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// WriteIoPortWord
|
|
//-----------------------------------------------------------------------------
|
|
VOID
|
|
WINAPI WriteIoPortWord(
|
|
WORD port, // I/O port address
|
|
WORD value // Write Value
|
|
);
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// WriteIoPortByteEx
|
|
//-----------------------------------------------------------------------------
|
|
BOOL // TRUE: success, FALSE: failure
|
|
WINAPI WriteIoPortByteEx(
|
|
WORD port, // I/O port address
|
|
BYTE value // Write Value
|
|
);
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// WriteIoPortWordEx
|
|
//-----------------------------------------------------------------------------
|
|
BOOL // TRUE: success, FALSE: failure
|
|
WINAPI WriteIoPortWordEx(
|
|
WORD port, // I/O port address
|
|
WORD value // Write Value
|
|
);
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// WriteIoPortDwordEx
|
|
//-----------------------------------------------------------------------------
|
|
BOOL // TRUE: success, FALSE: failure
|
|
WINAPI WriteIoPortDwordEx(
|
|
WORD port, // I/O port address
|
|
DWORD value // Write Value
|
|
);
|
|
|
|
/******************************************************************************
|
|
**
|
|
** PCI
|
|
**
|
|
******************************************************************************/
|
|
// pciAddress
|
|
// 0- 2: Function Number
|
|
// 3- 7: Device Number
|
|
// 8-15: PCI Bus Number
|
|
// 16-31: Reserved
|
|
// 0xFFFFFFFF : Error
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// SetPciMaxBusNo
|
|
//-----------------------------------------------------------------------------
|
|
VOID
|
|
WINAPI SetPciMaxBusIndex(
|
|
BYTE max // Max PCI Bus to Scan
|
|
);
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// ReadPciConfigByte
|
|
//-----------------------------------------------------------------------------
|
|
BYTE // Read Value
|
|
WINAPI ReadPciConfigByte(
|
|
DWORD pciAddress, // PCI Device Address
|
|
BYTE regAddress // Configuration Address 0-255
|
|
);
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// ReadPciConfigWord
|
|
//-----------------------------------------------------------------------------
|
|
WORD // Read Value
|
|
WINAPI ReadPciConfigWord(
|
|
DWORD pciAddress, // PCI Device Address
|
|
BYTE regAddress // Configuration Address 0-255
|
|
);
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// ReadPciConfigDword
|
|
//-----------------------------------------------------------------------------
|
|
DWORD // Read Value
|
|
WINAPI ReadPciConfigDword(
|
|
DWORD pciAddress, // PCI Device Address
|
|
BYTE regAddress // Configuration Address 0-255
|
|
);
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// ReadPciConfigByteEx
|
|
//-----------------------------------------------------------------------------
|
|
BOOL // TRUE: success, FALSE: failure
|
|
WINAPI ReadPciConfigByteEx(
|
|
DWORD pciAddress, // PCI Device Address
|
|
DWORD regAddress, // Configuration Address 0-whatever
|
|
PBYTE value // Read Value
|
|
);
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// ReadPciConfigWordEx
|
|
//-----------------------------------------------------------------------------
|
|
BOOL // TRUE: success, FALSE: failure
|
|
WINAPI ReadPciConfigWordEx(
|
|
DWORD pciAddress, // PCI Device Address
|
|
DWORD regAddress, // Configuration Address 0-whatever
|
|
PWORD value // Read Value
|
|
);
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// ReadPciConfigDwordEx
|
|
//-----------------------------------------------------------------------------
|
|
BOOL // TRUE: success, FALSE: failure
|
|
WINAPI ReadPciConfigDwordEx(
|
|
DWORD pciAddress, // PCI Device Address
|
|
DWORD regAddress, // Configuration Address 0-whatever
|
|
PDWORD value // Read Value
|
|
);
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// WritePciConfigByte
|
|
//-----------------------------------------------------------------------------
|
|
VOID
|
|
WINAPI WritePciConfigByte(
|
|
DWORD pciAddress, // PCI Device Address
|
|
BYTE regAddress, // Configuration Address 0-255
|
|
BYTE value // Write Value
|
|
);
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// WritePciConfigWord
|
|
//-----------------------------------------------------------------------------
|
|
VOID
|
|
WINAPI WritePciConfigWord(
|
|
DWORD pciAddress, // PCI Device Address
|
|
BYTE regAddress, // Configuration Address 0-255
|
|
WORD value // Write Value
|
|
);
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// WritePciConfigDword
|
|
//-----------------------------------------------------------------------------
|
|
VOID
|
|
WINAPI WritePciConfigDword(
|
|
DWORD pciAddress, // PCI Device Address
|
|
BYTE regAddress, // Configuration Address 0-255
|
|
DWORD value // Write Value
|
|
);
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// WritePciConfigByteEx
|
|
//-----------------------------------------------------------------------------
|
|
BOOL // TRUE: success, FALSE: failure
|
|
WINAPI WritePciConfigByteEx(
|
|
DWORD pciAddress, // PCI Device Address
|
|
DWORD regAddress, // Configuration Address 0-whatever
|
|
BYTE value // Write Value
|
|
);
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// WritePciConfigWordEx
|
|
//-----------------------------------------------------------------------------
|
|
BOOL // TRUE: success, FALSE: failure
|
|
WINAPI WritePciConfigWordEx(
|
|
DWORD pciAddress, // PCI Device Address
|
|
DWORD regAddress, // Configuration Address 0-whatever
|
|
WORD value // Write Value
|
|
);
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// WritePciConfigDwordEx
|
|
//-----------------------------------------------------------------------------
|
|
BOOL // TRUE: success, FALSE: failure
|
|
WINAPI WritePciConfigDwordEx(
|
|
DWORD pciAddress, // PCI Device Address
|
|
DWORD regAddress, // Configuration Address 0-whatever
|
|
DWORD value // Write Value
|
|
);
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// FindPciDeviceById
|
|
//-----------------------------------------------------------------------------
|
|
DWORD // pciAddress, 0xFFFFFFFF: failure
|
|
WINAPI FindPciDeviceById(
|
|
WORD vendorId, // Vendor ID
|
|
WORD deviceId, // Device ID
|
|
BYTE index // Index
|
|
);
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// FindPciDeviceByClass
|
|
//-----------------------------------------------------------------------------
|
|
DWORD // pciAddress, 0xFFFFFFFF: failure
|
|
WINAPI FindPciDeviceByClass(
|
|
BYTE baseClass, // Base Class
|
|
BYTE subClass, // Sub Class
|
|
BYTE programIf, // Program Interface
|
|
BYTE index // Index
|
|
);
|
|
|
|
/******************************************************************************
|
|
**
|
|
** Memory (Special API)
|
|
**
|
|
******************************************************************************/
|
|
|
|
#ifdef _PHYSICAL_MEMORY_SUPPORT
|
|
//-----------------------------------------------------------------------------
|
|
// ReadDmiMemory
|
|
//-----------------------------------------------------------------------------
|
|
DWORD // Read size(byte), 0: failure
|
|
WINAPI ReadDmiMemory(
|
|
PBYTE buffer, // Buffer
|
|
DWORD count, // Count
|
|
DWORD unitSize // Unit Size (BYTE, WORD, DWORD)
|
|
);
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// ReadPhysicalMemory
|
|
//-----------------------------------------------------------------------------
|
|
DWORD // Read size(byte), 0: failure
|
|
WINAPI ReadPhysicalMemory(
|
|
DWORD_PTR address, // Physical Memory Address
|
|
PBYTE buffer, // Buffer
|
|
DWORD count, // Count
|
|
DWORD unitSize // Unit Size (BYTE, WORD, DWORD)
|
|
);
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// WritePhysicalMemory
|
|
//-----------------------------------------------------------------------------
|
|
DWORD // Write size(byte), 0: failure
|
|
WINAPI WritePhysicalMemory(
|
|
DWORD_PTR address, // Physical Memory Address
|
|
PBYTE buffer, // Buffer
|
|
DWORD count, // Count
|
|
DWORD unitSize // Unit Size (BYTE, WORD, DWORD)
|
|
);
|
|
#endif |