From b849a696ef8f5a45edc94f7a42f2292b093c6455 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Sat, 27 Nov 2021 01:06:21 +0100 Subject: [PATCH] [NTVDM] In non-STANDALONE builds, check whether we are started as a VDM and bail out if not. --- subsystems/mvdm/ntvdm/ntvdm.c | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/subsystems/mvdm/ntvdm/ntvdm.c b/subsystems/mvdm/ntvdm/ntvdm.c index d7e88cb20ad..bedc20ea7ea 100644 --- a/subsystems/mvdm/ntvdm/ntvdm.c +++ b/subsystems/mvdm/ntvdm/ntvdm.c @@ -20,6 +20,9 @@ #include "dos/dem.h" +/* Extra PSDK/NDK Headers */ +#include + /* VARIABLES ******************************************************************/ NTVDM_SETTINGS GlobalSettings; @@ -473,9 +476,6 @@ PrintMessageAnsi(IN CHAR_PRINT CharPrint, INT wmain(INT argc, WCHAR *argv[]) { - NtVdmArgc = argc; - NtVdmArgv = argv; - #ifdef STANDALONE if (argc < 2) @@ -485,8 +485,27 @@ wmain(INT argc, WCHAR *argv[]) return 0; } +#else + + /* For non-STANDALONE builds, we must be started as a VDM */ + NTSTATUS Status; + ULONG VdmPower = 0; + Status = NtQueryInformationProcess(NtCurrentProcess(), + ProcessWx86Information, + &VdmPower, + sizeof(VdmPower), + NULL); + if (!NT_SUCCESS(Status) || (VdmPower == 0)) + { + /* Not a VDM, bail out */ + return 0; + } + #endif + NtVdmArgc = argc; + NtVdmArgv = argv; + #ifdef ADVANCED_DEBUGGING { INT i = 20;