48 #define MAX_VDD_MODULES 0xFF + 1 52 #define ENTRY_TO_HANDLE(Entry) ((Entry) + 1) 53 #define HANDLE_TO_ENTRY(Handle) ((Handle) - 1) 54 #define IS_VALID_HANDLE(Handle) ((Handle) > 0 && (Handle) <= MAX_VDD_MODULES) 85 InitRoutineName =
NULL,
86 DispatchRoutineName =
NULL;
89 DispatchRoutine =
NULL;
91 DPRINT(
"RegisterModule() called\n");
100 DPRINT1(
"Failed to create a new VDD module entry\n");
116 DPRINT1(
"DllName = '%s' - InitRoutineName = '%s' - DispatchRoutineName = '%s'\n",
117 (DllName ? DllName :
"n/a"),
118 (InitRoutineName ? InitRoutineName :
"n/a"),
119 (DispatchRoutineName ? DispatchRoutineName :
"n/a"));
130 DPRINT1(
"Not enough memory to load DLL '%s'\n", DllName);
136 DPRINT1(
"Failed to load DLL '%s'; last error = %d\n", DllName, LastError);
146 if (InitRoutine ==
NULL)
148 DPRINT1(
"Failed to load the initialization routine '%s'\n", InitRoutineName);
157 if (DispatchRoutine ==
NULL)
159 DPRINT1(
"Failed to load the dispatch routine '%s'\n", DispatchRoutineName);
172 if (InitRoutine) InitRoutine();
202 DPRINT(
"UnRegisterModule() called\n");
226 DPRINT(
"DispatchCall() called\n");
246 DPRINT1(
"Unknown 3rd-party VDD BOP Function: 0x%02X\n", FuncNum);
256 #define ERROR_MEMORYVDD L"Insufficient memory to load installable Virtual Device Drivers." 257 #define ERROR_REGVDD L"Virtual Device Driver format in the registry is invalid." 258 #define ERROR_LOADVDD L"An installable Virtual Device Driver failed Dll initialization." 266 LPCWSTR VDDKeyName =
L"SYSTEM\\CurrentControlSet\\Control\\VirtualDeviceDrivers";
395 if (UserHook ==
NULL)
#define ERROR_INVALID_PARAMETER
VOID WINAPI setIP(USHORT)
USHORT WINAPI getBX(VOID)
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)
USHORT WINAPI getSI(VOID)
static LIST_ENTRY VddUserHooksList
VOID RegisterBop(BYTE BopCode, EMULATOR_BOP_PROC BopHandler)
FORCEINLINE VOID InsertHeadList(_Inout_ PLIST_ENTRY ListHead, _Inout_ __drv_aliasesMem PLIST_ENTRY Entry)
VOID WINAPI setAX(USHORT)
BOOLEAN NTAPI RtlFreeHeap(IN PVOID HeapHandle, IN ULONG Flags, IN PVOID HeapBase)
#define ERROR_NOT_ENOUGH_MEMORY
#define INVALID_HANDLE_VALUE
DWORD WINAPI GetLastError(VOID)
#define SEG_OFF_TO_PTR(seg, off)
static USHORT GetNextFreeVDDEntry(VOID)
#define ENTRY_TO_HANDLE(Entry)
VOID VDDTerminateUserHook(USHORT DosPDB)
FORCEINLINE BOOLEAN RemoveEntryList(_In_ PLIST_ENTRY Entry)
_In_ WDFREQUEST _In_ PIO_STACK_LOCATION Stack
static BOOL LoadInstallableVDD(VOID)
LONG WINAPI RegCloseKey(HKEY hKey)
PFNVDD_URESUME Uresume_Handler
VOID VDDCreateUserHook(USHORT DosPDB)
HINSTANCE WINAPI DECLSPEC_HOTPATCH LoadLibraryA(LPCSTR lpLibFileName)
BOOL WINAPI VDDDeInstallUserHook(IN HANDLE hVdd)
#define ERROR_FILE_NOT_FOUND
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
VOID VDDSupInitialize(VOID)
VOID(WINAPI * PFNVDD_UBLOCK)(VOID)
PVOID NTAPI RtlAllocateHeap(IN PVOID HeapHandle, IN ULONG Flags, IN SIZE_T Size)
struct _LIST_ENTRY * Flink
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
USHORT WINAPI getES(VOID)
USHORT WINAPI getIP(VOID)
struct _VDD_USER_HANDLERS VDD_USER_HANDLERS
PFNVDD_UCREATE Ucr_Handler
#define TO_LINEAR(seg, off)
struct _VDD_MODULE * PVDD_MODULE
VOID(WINAPI * PFNVDD_URESUME)(VOID)
USHORT WINAPI getAX(VOID)
VOID EmulatorTerminate(VOID)
#define IS_VALID_HANDLE(Handle)
struct _VDD_MODULE VDD_MODULE
USHORT WINAPI getDI(VOID)
PFNVDD_UTERMINATE Uterm_Handler
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
PFNVDD_UBLOCK Ublock_Handler
struct _VDD_USER_HANDLERS * PVDD_USER_HANDLERS
USHORT WINAPI getDS(VOID)
VOID(WINAPI * PFNVDD_UCREATE)(USHORT DosPDB)
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
#define GetProcAddress(x, y)
#define HANDLE_TO_ENTRY(Handle)
void DisplayMessage(BOOL bConsole, BOOL bSilent, LPCTSTR lpMessage, LPCTSTR lpTitle, UINT uType)
VOID VDDResumeUserHook(VOID)
USHORT WINAPI getCS(VOID)
VOID VDDBlockUserHook(VOID)
VOID(WINAPI * VDD_PROC)(VOID)
base of all file and directory entries
VOID(WINAPI * PFNVDD_UTERMINATE)(USHORT DosPDB)
static VDD_MODULE VDDList[MAX_VDD_MODULES]
#define HKEY_LOCAL_MACHINE
static VOID WINAPI ThirdPartyVDDBop(LPWORD Stack)