2020-02-07 16:24:19 +00:00
|
|
|
/*******************************************************************************
|
|
|
|
*
|
|
|
|
* (C) COPYRIGHT AUTHORS, 2020
|
|
|
|
*
|
2020-02-12 08:16:18 +00:00
|
|
|
* TITLE: WINIO.H
|
2020-02-07 16:24:19 +00:00
|
|
|
*
|
2020-02-12 08:16:18 +00:00
|
|
|
* VERSION: 1.01
|
2020-02-07 16:24:19 +00:00
|
|
|
*
|
2020-02-12 08:16:18 +00:00
|
|
|
* DATE: 12 Feb 2020
|
2020-02-07 16:24:19 +00:00
|
|
|
*
|
2020-02-12 08:16:18 +00:00
|
|
|
* WINIO based drivers interface header.
|
2020-02-07 16:24:19 +00:00
|
|
|
*
|
|
|
|
* THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
|
|
|
|
* ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED
|
|
|
|
* TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
|
|
|
|
* PARTICULAR PURPOSE.
|
|
|
|
*
|
|
|
|
*******************************************************************************/
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
//
|
2020-02-12 08:16:18 +00:00
|
|
|
// Generic WINIO interface for all supported drivers based on WINIO code.
|
2020-02-07 16:24:19 +00:00
|
|
|
//
|
2020-02-12 08:16:18 +00:00
|
|
|
// MICSYS RGB driver interface for CVE-2019-18845.
|
|
|
|
// Ptolemy Tech Co., Ltd ENE driver interface
|
|
|
|
// G.Skill EneIo64 driver interface
|
|
|
|
// ... and multiple others
|
|
|
|
//
|
|
|
|
|
|
|
|
#define FILE_DEVICE_WINIO (DWORD)0x00008010
|
|
|
|
|
|
|
|
#define WINIO_IOCTL_INDEX (DWORD)0x810
|
|
|
|
|
|
|
|
#define WINIO_MAP_FUNCID (DWORD)0x810
|
|
|
|
#define WINIO_UNMAP_FUNCID (DWORD)0x811
|
|
|
|
|
|
|
|
#define GLCKIO2_REGISTER_FUNCID (DWORD)0x818
|
2020-02-07 16:24:19 +00:00
|
|
|
|
2020-02-12 08:16:18 +00:00
|
|
|
#define IOCTL_WINIO_MAP_USER_PHYSICAL_MEMORY \
|
|
|
|
CTL_CODE(FILE_DEVICE_WINIO, WINIO_MAP_FUNCID, METHOD_BUFFERED, FILE_ANY_ACCESS) //0x80102040
|
2020-02-07 16:24:19 +00:00
|
|
|
|
2020-02-12 08:16:18 +00:00
|
|
|
#define IOCTL_WINIO_UNMAP_USER_PHYSICAL_MEMORY \
|
|
|
|
CTL_CODE(FILE_DEVICE_WINIO, WINIO_UNMAP_FUNCID, METHOD_BUFFERED, FILE_ANY_ACCESS) //0x80102044
|
2020-02-07 16:24:19 +00:00
|
|
|
|
2020-02-12 08:16:18 +00:00
|
|
|
#define IOCTL_GKCKIO2_REGISTER \
|
|
|
|
CTL_CODE(FILE_DEVICE_WINIO, GLCKIO2_REGISTER_FUNCID, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
|
|
|
|
|
|
#define SWAP_UINT32(x) (((x) >> 24) | (((x) & 0x00FF0000) >> 8) | (((x) & 0x0000FF00) << 8) | ((x) << 24))
|
2020-02-07 16:24:19 +00:00
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
2020-02-12 08:16:18 +00:00
|
|
|
MsIo64 Structure definition note
|
2020-02-07 16:24:19 +00:00
|
|
|
|
|
|
|
Field BusAddress downcasted to ULONG in driver
|
|
|
|
|
|
|
|
HalTranslateBusAddress(1i64, 0i64, (PVOID)(ULONG)RegionStart, &AddressSpace, &TranslatedAddress);
|
|
|
|
|
|
|
|
*/
|
|
|
|
#pragma warning(push)
|
|
|
|
#pragma warning(disable:4324) // structure padded due to __declspec(align())
|
|
|
|
typedef struct DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT)_MSIO_PHYSICAL_MEMORY_INFO {
|
|
|
|
ULONG_PTR ViewSize;
|
|
|
|
ULONG BusAddress;
|
|
|
|
HANDLE SectionHandle;
|
|
|
|
PVOID BaseAddress;
|
|
|
|
PVOID ReferencedObject;
|
|
|
|
} MSIO_PHYSICAL_MEMORY_INFO, * PMSIO_PHYSICAL_MEMORY_INFO;
|
|
|
|
#pragma warning(pop)
|
|
|
|
|
2020-02-12 08:16:18 +00:00
|
|
|
/*
|
|
|
|
|
|
|
|
This is original WinIo structure layout.
|
|
|
|
|
|
|
|
*/
|
|
|
|
typedef struct _WINIO_PHYSICAL_MEMORY_INFO {
|
|
|
|
ULONG_PTR ViewSize;
|
|
|
|
ULONG_PTR BusAddress; //physical address
|
|
|
|
HANDLE SectionHandle;
|
|
|
|
PVOID BaseAddress;
|
|
|
|
PVOID ReferencedObject;
|
|
|
|
} WINIO_PHYSICAL_MEMORY_INFO, * PWINIO_PHYSICAL_MEMORYINFO;
|
|
|
|
|
|
|
|
BOOL WINAPI WinIoQueryPML4Value(
|
2020-02-07 16:24:19 +00:00
|
|
|
_In_ HANDLE DeviceHandle,
|
|
|
|
_Out_ ULONG_PTR* Value);
|
|
|
|
|
2020-02-12 08:16:18 +00:00
|
|
|
BOOL WINAPI WinIoReadPhysicalMemory(
|
2020-02-07 16:24:19 +00:00
|
|
|
_In_ HANDLE DeviceHandle,
|
|
|
|
_In_ ULONG_PTR PhysicalAddress,
|
|
|
|
_In_ PVOID Buffer,
|
|
|
|
_In_ ULONG NumberOfBytes);
|
|
|
|
|
2020-02-12 08:16:18 +00:00
|
|
|
BOOL WINAPI WinIoWritePhysicalMemory(
|
2020-02-07 16:24:19 +00:00
|
|
|
_In_ HANDLE DeviceHandle,
|
|
|
|
_In_ ULONG_PTR PhysicalAddress,
|
|
|
|
_Out_writes_bytes_(NumberOfBytes) PVOID Buffer,
|
|
|
|
_In_ ULONG NumberOfBytes);
|
|
|
|
|
2020-02-12 08:16:18 +00:00
|
|
|
BOOL WINAPI WinIoVirtualToPhysical(
|
2020-02-07 16:24:19 +00:00
|
|
|
_In_ HANDLE DeviceHandle,
|
|
|
|
_In_ ULONG_PTR VirtualAddress,
|
|
|
|
_Out_ ULONG_PTR* PhysicalAddress);
|
|
|
|
|
2020-02-12 08:16:18 +00:00
|
|
|
BOOL WINAPI WinIoReadKernelVirtualMemory(
|
2020-02-07 16:24:19 +00:00
|
|
|
_In_ HANDLE DeviceHandle,
|
|
|
|
_In_ ULONG_PTR Address,
|
|
|
|
_Out_writes_bytes_(NumberOfBytes) PVOID Buffer,
|
|
|
|
_In_ ULONG NumberOfBytes);
|
|
|
|
|
2020-02-12 08:16:18 +00:00
|
|
|
BOOL WINAPI WinIoWriteKernelVirtualMemory(
|
2020-02-07 16:24:19 +00:00
|
|
|
_In_ HANDLE DeviceHandle,
|
|
|
|
_In_ ULONG_PTR Address,
|
|
|
|
_Out_writes_bytes_(NumberOfBytes) PVOID Buffer,
|
|
|
|
_In_ ULONG NumberOfBytes);
|
2020-02-12 08:16:18 +00:00
|
|
|
|
|
|
|
BOOL WINAPI WinIoRegisterDriver(
|
|
|
|
_In_ HANDLE DeviceHandle,
|
|
|
|
_In_opt_ PVOID Param);
|