#ifndef WINVXD_H #define WINVXD_H /** Some definitions from VMM or general VXD structs. */ #include #include enum { SDK_VERSION_3 = 0x30A, SDK_VERSION_4 = 0x400 }; enum { UNDEFINED_INIT_ORDER = 0x80000000UL }; enum VXD_DEVICE_IDS { UNDEFINED_DEVICE_ID = 0, VMM_DEVICE_ID = 1, VMD_DEVICE_ID = 0xC, VKD_DEVICE_ID = 0xD, CONFIGMG_DEVICE_ID = 0x33, }; enum { /* Required for w9x to load 4.0 VxD */ DDB_PREV_INIT = 'Prev' }; typedef struct { uint32_t next; uint16_t sdk_version; uint16_t req_device_number; uint8_t dev_major_version; uint8_t dev_minor_version; uint16_t flags; char name[8]; uint32_t init_order; void * control_proc; void * v86_api_proc; void * pm_api_proc; void * v86_api_csip; void * pm_api_csip; void * reference_data; void * service_table_ptr; uint32_t service_table_size; /** Windows 9x */ void * win32_service_table; uint32_t prev; uint32_t size; uint32_t reserved[3]; } VxD_Desc_Block; STATIC_ASSERT(sizeof(VxD_Desc_Block) == 80); enum SYSTEM_CONTROL_MSGS { SYS_CRITICAL_INIT = 0x0, DEVICE_INIT = 0x1, INIT_COMPLETE = 0x2, SYS_VM_INIT = 0x3, SYS_VM_TERMINATE = 0x4, SYSTEM_EXIT = 0x5, SYS_CRITICAL_EXIT=0x6, CREATE_VM=0x7, VM_CRITICAL_INIT=0x8, VM_INIT=0x9, VM_TERMINATE=0xA, VM_NOT_EXECUTEABLE=0xB, DESTROY_VM=0xC, VM_SUSPEND=0xD, VM_RESUME=0xE, SET_DEVICE_FOCUS=0xF, BEGIN_MESSAGE_MODE=0x10, END_MESSAGE_MODE=0x11, REBOOT_PROCESSOR=0x12, QUERY_DESTROY=0x13, DEBUG_QUERY=0x14, BEGIN_PM_APP=0x15, END_PM_APP=0x16, DEVICE_REBOOT_NOTIFY=0x17, CRIT_REBOOT_NOTIFY=0x18, CLOSE_VM_NOTIFY=0x19, POWER_EVENT=0x1A, SYS_DYNAMIC_DEVICE_INIT=0x1B, SYS_DYNAMIC_DEVICE_EXIT=0x1C, CREATE_THREAD=0x1D, THREAD_INIT=0x1E, TERMINATE_THREAD=0x1F, THREAD_NOT_EXECUTEABLE=0x20, DESTROY_THREAD=0x21, PNP_NEW_DEVNODE = 0x22, W32_DEVICEIOCONTROL = 0x23, SYS_VM_TERMINATE2 = 0x24, //... CLOSE_VM_NOTIFY2 = 0x2F, KERNEL32_INITIALIZED=0x31, KERNEL32_SHUTDOWN=0x32 }; static inline void clear_carry(void); #pragma aux clear_carry = "clc" modify exact []; static inline void set_carry(void); #pragma aux set_carry = "stc" modify exact []; static inline int set_carry_if_notzero(int arg); #pragma aux set_carry_if_notzero = \ "cmp eax, 1" \ parm [eax] \ value [eax] \ modify exact []; #endif // WINVXD_H