From: Robert Dickenson Date: Mon, 28 Oct 2002 13:59:59 +0000 (+0000) Subject: Starting something for VDM support. X-Git-Tag: ReactOS-0.0.21~29 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=572227dc485ecffe46a65eb4d6fe676b79ad3121 Starting something for VDM support. svn path=/trunk/; revision=3662 --- diff --git a/reactos/subsys/ntvdm/.cvsignore b/reactos/subsys/ntvdm/.cvsignore new file mode 100644 index 00000000000..5b2574dbe62 --- /dev/null +++ b/reactos/subsys/ntvdm/.cvsignore @@ -0,0 +1,6 @@ +ntvdm.coff +ntvdm.exe +ntvdm.nostrip.exe +*.d +*.o +*.sym diff --git a/reactos/subsys/ntvdm/makefile b/reactos/subsys/ntvdm/makefile new file mode 100644 index 00000000000..15375599214 --- /dev/null +++ b/reactos/subsys/ntvdm/makefile @@ -0,0 +1,21 @@ +# $Id: makefile,v 1.1 2002/10/28 13:59:59 robd Exp $ + +PATH_TO_TOP = ../.. + +TARGET_TYPE = program + +TARGET_APPTYPE = console + +TARGET_NAME = ntvdm + +TARGET_INSTALLDIR = system32 + +TARGET_SDKLIBS = ntdll.a kernel32.a user32.a gdi32.a advapi32.a + +TARGET_OBJECTS = $(TARGET_NAME).o + +include $(PATH_TO_TOP)/rules.mak + +include $(TOOLS_PATH)/helper.mk + +# EOF diff --git a/reactos/subsys/ntvdm/ntvdm.c b/reactos/subsys/ntvdm/ntvdm.c new file mode 100644 index 00000000000..2fb0169f776 --- /dev/null +++ b/reactos/subsys/ntvdm/ntvdm.c @@ -0,0 +1,144 @@ +/* $Id: ntvdm.c,v 1.1 2002/10/28 13:59:59 robd Exp $ + * + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS kernel + * FILE: subsys/ntvdm/ntvdm.c + * PURPOSE: Virtual DOS Machine + * PROGRAMMER: Robert Dickenson (robd@mok.lvcm.com) + * UPDATE HISTORY: + * Created 23/10/2002 + */ + +/* INCLUDES *****************************************************************/ + +#include +#include +#include +#include + +#define NDEBUG +#include + +/* GLOBALS ******************************************************************/ + + +/* FUNCTIONS *****************************************************************/ + +void PrintString(char* fmt,...) +{ + char buffer[512]; + va_list ap; + + va_start(ap, fmt); + vsprintf(buffer, fmt, ap); + va_end(ap); + + OutputDebugString(buffer); +} + +/* +GetVersion +GetVolumeInformationW +GetWindowsDirectoryA +GlobalMemoryStatus +HeapAlloc +HeapCreate +HeapDestroy +HeapFree +HeapReAlloc + +GetNextVDMCommand +ExitVDM +RegisterConsoleVDM +SetVDMCurrentDirectories +VDMConsoleOperation +WriteConsoleInputVDMW + +NtSetLdtEntries +NtTerminateProcess + +NtMapViewOfSection +NtUnmapViewOfSection + +NtVdmControl + */ + +BOOLEAN +StartVirtualMachine(VOID) +{ + BOOLEAN Result; + STARTUPINFO StartupInfo; + PROCESS_INFORMATION ProcessInformation; + CHAR CommandLine[MAX_PATH]; + CHAR CurrentDirectory[MAX_PATH]; + + GetSystemDirectory(CommandLine, MAX_PATH); + strcat(CommandLine, "\\hello.exe"); + GetWindowsDirectory(CurrentDirectory, MAX_PATH); + + StartupInfo.cb = sizeof(StartupInfo); + StartupInfo.lpReserved = NULL; + StartupInfo.lpDesktop = NULL; + StartupInfo.lpTitle = NULL; + StartupInfo.dwFlags = 0; + StartupInfo.cbReserved2 = 0; + StartupInfo.lpReserved2 = 0; + + Result = CreateProcess(CommandLine, + NULL, + NULL, + NULL, + FALSE, + DETACHED_PROCESS, + NULL, + NULL, + &StartupInfo, + &ProcessInformation); + if (!Result) { + PrintString("WL: Failed to execute target process\n"); + return FALSE; + } + WaitForSingleObject(ProcessInformation.hProcess, INFINITE); + CloseHandle(ProcessInformation.hProcess); + CloseHandle(ProcessInformation.hThread); + return TRUE; +} + +int STDCALL +WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) +{ + DWORD Result; + BOOL Success; + ULONG i; + NTSTATUS Status; + + CHAR WelcomeMsg[] = "ReactOS Virtual DOS Machine support.\nType q to quit."; + CHAR InputBuffer[255]; + + AllocConsole(); + SetConsoleTitle("ntvdm"); + StartVirtualMachine(); + + for (;;) { + WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), + WelcomeMsg, strlen(WelcomeMsg), // wcslen(WelcomeMsg), + &Result, NULL); + i = 0; + do { + ReadConsole(GetStdHandle(STD_INPUT_HANDLE), + &InputBuffer[i], 1, + &Result, NULL); + if (++i >= (sizeof(InputBuffer) - 1)) { + break; + } + } while (InputBuffer[i - 1] != '\n'); + InputBuffer[i - 1] = '\0'; + + if (InputBuffer[0] == 'q' || InputBuffer[0] == 'Q') { + break; + } + } + + ExitProcess(0); + return 0; +} diff --git a/reactos/subsys/ntvdm/ntvdm.rc b/reactos/subsys/ntvdm/ntvdm.rc new file mode 100644 index 00000000000..f8fc057eb83 --- /dev/null +++ b/reactos/subsys/ntvdm/ntvdm.rc @@ -0,0 +1,38 @@ +#include +#include + +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +VS_VERSION_INFO VERSIONINFO + FILEVERSION RES_UINT_FV_MAJOR,RES_UINT_FV_MINOR,RES_UINT_FV_REVISION,RES_UINT_FV_BUILD + PRODUCTVERSION RES_UINT_PV_MAJOR,RES_UINT_PV_MINOR,RES_UINT_PV_REVISION,RES_UINT_PV_BUILD + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40004L + FILETYPE 0x2L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "CompanyName", RES_STR_COMPANY_NAME + VALUE "FileDescription", "ReactOS Virtual DOS Machine\0" + VALUE "FileVersion", RES_STR_FILE_VERSION + VALUE "InternalName", "ntvdm\0" + VALUE "LegalCopyright", RES_STR_LEGAL_COPYRIGHT + VALUE "OriginalFilename", "ntvdm.exe\0" + VALUE "ProductName", RES_STR_PRODUCT_NAME + VALUE "ProductVersion", RES_STR_PRODUCT_VERSION + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END +