26 #define VDD_DBG(...) \ 28 DPRINT1(__VA_ARGS__); \ 37 #ifndef WIN2K_COMPLIANT 38 CHAR StaticBuffer[256];
48 #ifndef WIN2K_COMPLIANT 61 Format =
"DisplayMessage()\nOriginal message is too long and allocating an auxiliary buffer failed.";
73 #ifndef WIN2K_COMPLIANT 81 #define VDD_DBG VddDbgMsg 195 #define PAGE_SIZE 0x1000 198 #ifndef PAGE_ROUND_DOWN 199 #define PAGE_ROUND_DOWN(x) \ 200 ( ((ULONG_PTR)(x)) & (~(PAGE_SIZE-1)) ) 203 #ifndef PAGE_ROUND_UP 204 #define PAGE_ROUND_UP(x) \ 205 ( (((ULONG_PTR)(x)) + PAGE_SIZE-1) & (~(PAGE_SIZE-1)) ) 208 #define MEM_SEG_START 0x0000 209 #define MEM_SIZE PAGE_SIZE 222 VDD_DBG(
"MemoryHandler(0x%08x, %s)", FaultAddress, (RWMode == 1) ?
"Write" :
"Read");
282 VDD_DBG(
"Hooking attempt failed!");
295 VDD_DBG(
"Create1Handler(0x%04x)", DosPDB);
302 VDD_DBG(
"Create2Handler(0x%04x)", DosPDB);
309 VDD_DBG(
"Terminate1Handler(0x%04x)", DosPDB);
316 VDD_DBG(
"Terminate2Handler(0x%04x)", DosPDB);
392 VDD_DBG(
"Unable to hook IO ports, terminate...");
402 VDD_DBG(
"Unable to install memory handler, terminate...");
407 VDD_DBG(
"VDDInstallUserHook (1)");
415 VDD_DBG(
"Unable to install user hooks (1)...");
418 VDD_DBG(
"VDDInstallUserHook (2)");
426 VDD_DBG(
"Unable to install user hooks (2)...");
430 VDD_DBG(
"Initialization finished!");
435 VDD_DBG(
"VDDDeInstallUserHook (1)");
441 VDD_DBG(
"VDDDeInstallUserHook (2)");
445 VDD_DBG(
"VDDDeInstallUserHook (3)");
447 if (!
Success)
VDD_DBG(
"EXPECTED ERROR: Unable to uninstall user hooks (3)");
448 else VDD_DBG(
"UNEXPECTED ERROR: Uninstalling user hooks (3) succeeded?!");
454 VDD_DBG(
"VDDDeInstallMemoryHook");
PVOID FindHookableMemory(IN USHORT StartSegment, IN ULONG StartOffset, OUT PUSHORT HookedSegment, OUT PULONG HookedOffset)
VOID WINAPI PortOutsW(IN USHORT Port, IN PUSHORT Data, IN USHORT Count)
_Must_inspect_result_ _In_ WDFQUEUE _In_opt_ WDFREQUEST _In_opt_ WDFFILEOBJECT _Inout_opt_ PWDF_REQUEST_PARAMETERS Parameters
ACPI_SIZE strlen(const char *String)
BOOL WINAPI DllMain(IN HINSTANCE hInstanceDll, IN DWORD dwReason, IN LPVOID lpReserved)
#define UNREFERENCED_PARAMETER(P)
#define DLL_THREAD_ATTACH
VOID WINAPI Resume1Handler(VOID)
VOID WINAPI Create2Handler(USHORT DosPDB)
VOID WINAPI PortOutB(IN USHORT Port, IN UCHAR Data)
#define DLL_PROCESS_ATTACH
VOID WINAPI TestVDDDispatch(VOID)
VOID WINAPI TestVDDRegister(VOID)
#define DLL_THREAD_DETACH
VOID WINAPI Resume2Handler(VOID)
int WINAPI MessageBoxA(_In_opt_ HWND, _In_opt_ LPCSTR, _In_opt_ LPCSTR, _In_ UINT)
VOID WINAPI PortInsW(IN USHORT Port, OUT PUSHORT Data, IN USHORT Count)
BOOL WINAPI VDDDeInstallMemoryHook(_In_ HANDLE hVdd, _In_ PVOID pStart, _In_ DWORD dwCount)
VOID WINAPI Create1Handler(USHORT DosPDB)
VOID WINAPI PortInB(IN USHORT Port, OUT PUCHAR Data)
VDD_IO_PORTRANGE PortDefs[NUM_PORTS]
VOID WINAPI Block2Handler(VOID)
BOOL WINAPI VdmUnmapFlat(_In_ USHORT Segment, _In_ ULONG Offset, _In_ PVOID Buffer, _In_ VDM_MODE Mode)
VOID WINAPI PortOutsB(IN USHORT Port, IN PUCHAR Data, IN USHORT Count)
BOOL WINAPI VDDAllocMem(_In_ HANDLE hVdd, _In_ PVOID Address, _In_ ULONG Size)
#define DLL_PROCESS_DETACH
VOID WINAPI Terminate1Handler(USHORT DosPDB)
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
VOID WINAPI PortInW(IN USHORT Port, OUT PUSHORT Data)
static VOID VddDbgMsg(LPCSTR Format,...)
VOID WINAPI VDDTerminateVDM(VOID)
VOID WINAPI Block1Handler(VOID)
PVOID WINAPI VdmMapFlat(_In_ USHORT Segment, _In_ ULONG Offset, _In_ VDM_MODE Mode)
BOOL WINAPI VDDInstallIOHook(_In_ HANDLE hVdd, _In_ WORD cPortRange, _In_ PVDD_IO_PORTRANGE pPortRange, _In_ PVDD_IO_HANDLERS IoHandlers)
BOOL WINAPI VDDInstallUserHook(_In_ HANDLE hVdd, _In_ PFNVDD_UCREATE Ucr_Handler, _In_ PFNVDD_UTERMINATE Uterm_Handler, _In_ PFNVDD_UBLOCK Ublock_Handler, _In_ PFNVDD_URESUME Uresume_Handler)
BOOL WINAPI VDDInstallMemoryHook(_In_ HANDLE hVdd, _In_ PVOID pStart, _In_ DWORD dwCount, _In_ PVDD_MEMORY_HANDLER MemoryHandler)
BOOL WINAPI VDDDeInstallUserHook(_In_ HANDLE hVdd)
_In_ ULONG _In_ ULONG Offset
VOID WINAPI PortInsB(IN USHORT Port, OUT PUCHAR Data, IN USHORT Count)
_Check_return_ _CRTIMP int __cdecl _vscprintf(_In_z_ _Printf_format_string_ const char *_Format, va_list _ArgList)
#define PAGE_ROUND_DOWN(x)
BOOLEAN RegisterVDD(BOOLEAN Register)
BOOL WINAPI VDDFreeMem(_In_ HANDLE hVdd, _In_ PVOID Address, _In_ ULONG Size)
VDD_IO_HANDLERS PortHandlers[NUM_PORTS]
VOID WINAPI PortOutW(IN USHORT Port, IN USHORT Data)
VOID WINAPI VDDDeInstallIOHook(_In_ HANDLE hVdd, _In_ WORD cPortRange, _In_ PVDD_IO_PORTRANGE pPortRange)
VOID WINAPI Terminate2Handler(USHORT DosPDB)
VOID WINAPI MemoryHandler(IN PVOID FaultAddress, IN ULONG RWMode)
VOID WINAPI TestVDDUnRegister(VOID)
#define HeapFree(x, y, z)