From bac747f1512f63153910b18dc75d5ad2cb93c2d6 Mon Sep 17 00:00:00 2001 From: Aleksandar Andrejevic Date: Thu, 18 Jul 2013 12:31:11 +0000 Subject: [PATCH] [NTVDM] Fix several bugs. svn path=/branches/ntvdm/; revision=59502 --- subsystems/ntvdm/dos.c | 17 +++++++++++------ subsystems/ntvdm/dos.h | 8 ++++---- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/subsystems/ntvdm/dos.c b/subsystems/ntvdm/dos.c index a9d63f7e013..bf0913cbfa4 100644 --- a/subsystems/ntvdm/dos.c +++ b/subsystems/ntvdm/dos.c @@ -398,7 +398,7 @@ BOOLEAN DosFreeMemory(WORD BlockData) return TRUE; } -BOOLEAN DosLinkUmb() +BOOLEAN DosLinkUmb(VOID) { DWORD Segment = FIRST_MCB_SEGMENT; PDOS_MCB Mcb = SEGMENT_TO_MCB(Segment); @@ -423,7 +423,7 @@ BOOLEAN DosLinkUmb() return TRUE; } -BOOLEAN DosUnlinkUmb() +BOOLEAN DosUnlinkUmb(VOID) { DWORD Segment = FIRST_MCB_SEGMENT; PDOS_MCB Mcb = SEGMENT_TO_MCB(Segment); @@ -895,6 +895,7 @@ Cleanup: VOID DosTerminateProcess(WORD Psp, BYTE ReturnCode) { + WORD i; WORD McbSegment = FIRST_MCB_SEGMENT; PDOS_MCB CurrentMcb; LPDWORD IntVecTable = (LPDWORD)((ULONG_PTR)BaseAddress); @@ -903,7 +904,11 @@ VOID DosTerminateProcess(WORD Psp, BYTE ReturnCode) /* Check if this PSP is it's own parent */ if (PspBlock->ParentPsp == Psp) goto Done; - // TODO: Close all handles opened by the process + for (i = 0; i < PspBlock->HandleTableSize; i++) + { + /* Close the handle */ + DosCloseHandle(i); + } /* Free the memory used by the process */ while (TRUE) @@ -942,7 +947,7 @@ Done: LOWORD(PspBlock->TerminateAddress)); } -CHAR DosReadCharacter() +CHAR DosReadCharacter(VOID) { CHAR Character = '\0'; WORD BytesRead; @@ -1539,12 +1544,12 @@ VOID DosInt21h(WORD CodeSegment) } } -VOID DosBreakInterrupt() +VOID DosBreakInterrupt(VOID) { VdmRunning = FALSE; } -BOOLEAN DosInitialize() +BOOLEAN DosInitialize(VOID) { BYTE i; PDOS_MCB Mcb = SEGMENT_TO_MCB(FIRST_MCB_SEGMENT); diff --git a/subsystems/ntvdm/dos.h b/subsystems/ntvdm/dos.h index ad8d2d33968..fb577e7c896 100644 --- a/subsystems/ntvdm/dos.h +++ b/subsystems/ntvdm/dos.h @@ -19,7 +19,7 @@ #define DOS_CONFIG_PATH L"%SystemRoot%\\system32\\CONFIG.NT" #define DOS_COMMAND_INTERPRETER L"%SystemRoot%\\system32\\COMMAND.COM /k %SystemRoot%\\system32\\AUTOEXEC.NT" #define FIRST_MCB_SEGMENT 0x1000 -#define USER_MEMORY_SIZE 0x8FFF +#define USER_MEMORY_SIZE 0x8FFE #define SYSTEM_PSP 0x08 #define SYSTEM_ENV_BLOCK 0x800 #define INVALID_DOS_HANDLE 0xFFFF @@ -103,12 +103,12 @@ WORD DosWriteFile(WORD FileHandle, LPVOID Buffer, WORD Count, LPWORD BytesWritte VOID DosInitializePsp(WORD PspSegment, LPCSTR CommandLine, WORD ProgramSize, WORD Environment); BOOLEAN DosCreateProcess(LPCSTR CommandLine, WORD EnvBlock); VOID DosTerminateProcess(WORD Psp, BYTE ReturnCode); -CHAR DosReadCharacter(); +CHAR DosReadCharacter(VOID); VOID DosPrintCharacter(CHAR Character); VOID DosInt20h(WORD CodeSegment); VOID DosInt21h(WORD CodeSegment); -VOID DosBreakInterrupt(); -BOOLEAN DosInitialize(); +VOID DosBreakInterrupt(VOID); +BOOLEAN DosInitialize(VOID); #endif