diff --git a/dlls/kernel/wprocs.spec b/dlls/kernel/wprocs.spec index cecd3d512bf..d2ceb295f93 100644 --- a/dlls/kernel/wprocs.spec +++ b/dlls/kernel/wprocs.spec @@ -41,6 +41,7 @@ owner kernel32 423 register VXD_Shell() VXD_Shell 433 register VXD_PageFile() VXD_PageFile 438 register VXD_APM() VXD_APM +439 register VXD_VXDLoader() VXD_VXDLoader 445 register VXD_Win32s() VXD_Win32s 451 register VXD_ConfigMG() VXD_ConfigMG 455 register VXD_Enable() VXD_Enable diff --git a/msdos/vxd.c b/msdos/vxd.c index 203d75f8187..d5c7546431e 100644 --- a/msdos/vxd.c +++ b/msdos/vxd.c @@ -177,6 +177,48 @@ void WINAPI VXD_VMD ( CONTEXT86 *context ) } } +/*********************************************************************** + * VXD_VXDLoader + */ +void WINAPI VXD_VXDLoader( CONTEXT86 *context ) +{ + unsigned service = AX_reg(context); + + TRACE("[%04x] VXDLoader\n", (UINT16)service); + + switch (service) + { + case 0x0000: /* get version */ + TRACE("returning version\n"); + AX_reg(context) = 0x0000; + DX_reg(context) = VXD_WinVersion(); + RESET_CFLAG(context); + break; + + case 0x0001: /* load device */ + FIXME("load device %04lx:%04x (%s)\n", + DS_reg(context), DX_reg(context), + debugstr_a(PTR_SEG_OFF_TO_LIN(DS_reg(context), DX_reg(context)))); + AX_reg(context) = 0x0000; + ES_reg(context) = 0x0000; + DI_reg(context) = 0x0000; + RESET_CFLAG(context); + break; + + case 0x0002: /* unload device */ + FIXME("unload device (%08lx)\n", EBX_reg(context)); + AX_reg(context) = 0x0000; + RESET_CFLAG(context); + break; + + default: + VXD_BARF( context, "VXDLDR" ); + AX_reg(context) = 0x000B; /* invalid function number */ + SET_CFLAG(context); + break; + } +} + /*********************************************************************** * VXD_Shell */