ReactOS 0.4.15-dev-5672-gf73ac17
ntvdm.h File Reference
#include <stdio.h>
#include <stdarg.h>
#include <wchar.h>
#include <windef.h>
#include <winbase.h>
#include <wingdi.h>
#include <wincon.h>
#include <winnls.h>
#include <winreg.h>
#include <winuser.h>
#include <commdlg.h>
#include <subsys/win/vdm.h>
#include <vddsvc.h>
#include <ndk/kefuncs.h>
#include <ndk/rtlfuncs.h>
#include <pseh/pseh2.h>
#include <ntstrsafe.h>
Include dependency graph for ntvdm.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  _NTVDM_SETTINGS
 

Macros

#define _countof(_Array)   (sizeof(_Array) / sizeof(_Array[0]))
 
#define __L(x)   L ## x
 
#define _L(x)   __L(x)
 
#define L(x)   _L(x)
 
#define WIN32_NO_STATUS
 
#define NO_NTVDD_COMPAT
 
#define NTOS_MODE_USER
 

Typedefs

typedef struct _NTVDM_SETTINGS NTVDM_SETTINGS
 
typedef struct _NTVDM_SETTINGSPNTVDM_SETTINGS
 
typedef VOID(* CHAR_PRINT) (IN CHAR Character)
 

Functions

DWORD WINAPI SetLastConsoleEventActive (VOID)
 
VOID DisplayMessage (IN LPCWSTR Format,...)
 
VOID PrintMessageAnsi (IN CHAR_PRINT CharPrint, IN LPCSTR Format,...)
 
VOID UpdateVdmMenuDisks (VOID)
 
BOOL ConsoleAttach (VOID)
 
VOID ConsoleDetach (VOID)
 
VOID ConsoleReattach (HANDLE ConOutHandle)
 
BOOL IsConsoleHandle (HANDLE hHandle)
 
VOID MenuEventHandler (PMENU_EVENT_RECORD MenuEvent)
 
VOID FocusEventHandler (PFOCUS_EVENT_RECORD FocusEvent)
 

Variables

NTVDM_SETTINGS GlobalSettings
 
INT NtVdmArgc
 
WCHAR ** NtVdmArgv
 
WCHAR NtVdmPath [MAX_PATH]
 
ULONG NtVdmPathSize
 
HWND hConsoleWnd
 

Macro Definition Documentation

◆ __L

#define __L (   x)    L ## x

Definition at line 48 of file ntvdm.h.

◆ _countof

#define _countof (   _Array)    (sizeof(_Array) / sizeof(_Array[0]))

Definition at line 44 of file ntvdm.h.

◆ _L

#define _L (   x)    __L(x)

Definition at line 49 of file ntvdm.h.

◆ L

#define L (   x)    _L(x)

◆ NO_NTVDD_COMPAT

#define NO_NTVDD_COMPAT

Definition at line 67 of file ntvdm.h.

◆ NTOS_MODE_USER

#define NTOS_MODE_USER

Definition at line 72 of file ntvdm.h.

◆ WIN32_NO_STATUS

#define WIN32_NO_STATUS

Definition at line 53 of file ntvdm.h.

Typedef Documentation

◆ CHAR_PRINT

typedef VOID(* CHAR_PRINT) (IN CHAR Character)

Definition at line 110 of file ntvdm.h.

◆ NTVDM_SETTINGS

◆ PNTVDM_SETTINGS

Function Documentation

◆ ConsoleAttach()

BOOL ConsoleAttach ( VOID  )

Definition at line 398 of file console.c.

399{
400 /* Save the original input and output console modes */
403 {
406 wprintf(L"FATAL: Cannot save console in/out modes\n");
407 return FALSE;
408 }
409
410 /* Set the console input mode */
413
414 /* Set the console output mode */
415 // SetConsoleMode(ConsoleOutput, ENABLE_PROCESSED_OUTPUT | ENABLE_WRAP_AT_EOL_OUTPUT);
416
417 /* Initialize the UI */
419
420 return TRUE;
421}
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define CloseHandle
Definition: compat.h:739
BOOL WINAPI GetConsoleMode(HANDLE hConsoleHandle, LPDWORD lpMode)
Definition: console.c:1569
BOOL WINAPI DECLSPEC_HOTPATCH SetConsoleMode(HANDLE hConsoleHandle, DWORD dwMode)
Definition: console.c:1606
#define L(x)
Definition: ntvdm.h:50
static DWORD OrgConsoleOutputMode
Definition: console.c:18
static VOID ConsoleInitUI(VOID)
Definition: console.c:382
static VOID EnableExtraHardware(HANDLE ConsoleInput)
Definition: console.c:318
static HANDLE ConsoleOutput
Definition: console.c:17
static DWORD OrgConsoleInputMode
Definition: console.c:18
#define wprintf(...)
Definition: whoami.c:18
#define ENABLE_WINDOW_INPUT
Definition: wincon.h:81

Referenced by ConsoleInit(), and DosProcessConsoleAttach().

◆ ConsoleDetach()

VOID ConsoleDetach ( VOID  )

Definition at line 424 of file console.c.

425{
426 /* Cleanup the UI */
428
429 /* Restore the original input and output console modes */
432}
static VOID ConsoleCleanupUI(VOID)
Definition: console.c:389

Referenced by ConsoleCleanup(), and DosProcessConsoleDetach().

◆ ConsoleReattach()

VOID ConsoleReattach ( HANDLE  ConOutHandle)

Definition at line 435 of file console.c.

436{
438 CurrentConsoleOutput = ConOutHandle;
439 CreateVdmMenu(ConOutHandle);
440
441 /* Synchronize mouse cursor display with console screenbuffer switches */
443}
static VOID DestroyVdmMenu(VOID)
Definition: console.c:274
static BOOL CaptureMouse
Definition: console.c:23
static HANDLE CurrentConsoleOutput
Definition: console.c:14
static VOID CreateVdmMenu(HANDLE ConOutHandle)
Definition: console.c:203
static VOID CaptureMousePointer(HANDLE ConOutHandle, BOOLEAN Capture)
Definition: console.c:288

Referenced by SetActiveScreenBuffer().

◆ DisplayMessage()

VOID DisplayMessage ( IN LPCWSTR  Format,
  ... 
)

Definition at line 360 of file ntvdm.c.

361{
362#ifndef WIN2K_COMPLIANT
363 WCHAR StaticBuffer[256];
364 LPWSTR Buffer = StaticBuffer; // Use the static buffer by default.
365#else
366 WCHAR Buffer[2048]; // Large enough. If not, increase it by hand.
367#endif
368 size_t MsgLen;
370
372
373#ifndef WIN2K_COMPLIANT
374 /*
375 * Retrieve the message length and if it is too long, allocate
376 * an auxiliary buffer; otherwise use the static buffer.
377 * The string is built to be NULL-terminated.
378 */
379 MsgLen = _vscwprintf(Format, args);
380 if (MsgLen >= ARRAYSIZE(StaticBuffer))
381 {
382 Buffer = RtlAllocateHeap(RtlGetProcessHeap(), HEAP_ZERO_MEMORY, (MsgLen + 1) * sizeof(WCHAR));
383 if (Buffer == NULL)
384 {
385 /* Allocation failed, use the static buffer and display a suitable error message */
386 Buffer = StaticBuffer;
387 Format = L"DisplayMessage()\nOriginal message is too long and allocating an auxiliary buffer failed.";
388 MsgLen = wcslen(Format);
389 }
390 }
391#else
392 MsgLen = ARRAYSIZE(Buffer) - 1;
393#endif
394
395 RtlZeroMemory(Buffer, (MsgLen + 1) * sizeof(WCHAR));
396 _vsnwprintf(Buffer, MsgLen, Format, args);
397
398 va_end(args);
399
400 /* Display the message */
401 DPRINT1("\n\nNTVDM Subsystem\n%S\n\n", Buffer);
402 MessageBoxW(hConsoleWnd, Buffer, L"NTVDM Subsystem", MB_OK);
403
404#ifndef WIN2K_COMPLIANT
405 /* Free the buffer if needed */
406 if (Buffer != StaticBuffer) RtlFreeHeap(RtlGetProcessHeap(), 0, Buffer);
407#endif
408}
char * va_list
Definition: acmsvcex.h:78
#define va_end(ap)
Definition: acmsvcex.h:90
#define va_start(ap, A)
Definition: acmsvcex.h:91
#define DPRINT1
Definition: precomp.h:8
PVOID NTAPI RtlAllocateHeap(IN PVOID HeapHandle, IN ULONG Flags, IN SIZE_T Size)
Definition: heap.c:588
BOOLEAN NTAPI RtlFreeHeap(IN PVOID HeapHandle, IN ULONG Flags, IN PVOID HeapBase)
Definition: heap.c:606
Definition: bufpool.h:45
#define NULL
Definition: types.h:112
#define ARRAYSIZE(array)
Definition: filtermapper.c:47
#define HEAP_ZERO_MEMORY
Definition: compat.h:134
_CRTIMP int __cdecl _vsnwprintf(wchar_t *_Dest, size_t _Count, const wchar_t *_Format, va_list _Args)
_Check_return_ _CRTIMP int __cdecl _vscwprintf(_In_z_ _Printf_format_string_ const wchar_t *_Format, va_list _ArgList)
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define args
Definition: format.c:66
Definition: match.c:390
HWND hConsoleWnd
Definition: console.c:20
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:262
int WINAPI MessageBoxW(_In_opt_ HWND hWnd, _In_opt_ LPCWSTR lpText, _In_opt_ LPCWSTR lpCaption, _In_ UINT uType)
#define MB_OK
Definition: winuser.h:784
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184

◆ FocusEventHandler()

VOID FocusEventHandler ( PFOCUS_EVENT_RECORD  FocusEvent)

Definition at line 600 of file console.c.

601{
602 /*
603 * If the mouse is captured, release it or recapture it
604 * when we lose or regain focus, respectively.
605 */
606 if (!CaptureMouse) return;
608}

Referenced by ConsoleEventThread().

◆ IsConsoleHandle()

BOOL IsConsoleHandle ( HANDLE  hHandle)

Definition at line 503 of file console.c.

504{
505 DWORD dwMode;
506
507 /* Check whether the handle may be that of a console... */
508 if ((GetFileType(hHandle) & ~FILE_TYPE_REMOTE) != FILE_TYPE_CHAR)
509 return FALSE;
510
511 /*
512 * It may be. Perform another test... The idea comes from the
513 * MSDN description of the WriteConsole API:
514 *
515 * "WriteConsole fails if it is used with a standard handle
516 * that is redirected to a file. If an application processes
517 * multilingual output that can be redirected, determine whether
518 * the output handle is a console handle (one method is to call
519 * the GetConsoleMode function and check whether it succeeds).
520 * If the handle is a console handle, call WriteConsole. If the
521 * handle is not a console handle, the output is redirected and
522 * you should call WriteFile to perform the I/O."
523 */
524 return GetConsoleMode(hHandle, &dwMode);
525}
DWORD WINAPI GetFileType(HANDLE hFile)
Definition: fileinfo.c:269
unsigned long DWORD
Definition: ntddk_ex.h:95
#define FILE_TYPE_CHAR
Definition: winbase.h:260
#define FILE_TYPE_REMOTE
Definition: winbase.h:262

◆ MenuEventHandler()

VOID MenuEventHandler ( PMENU_EVENT_RECORD  MenuEvent)

Definition at line 527 of file console.c.

528{
529 switch (MenuEvent->dwCommandId)
530 {
531 /*
532 * System-defined menu commands
533 */
534
535 case WM_INITMENU:
536 case WM_MENUSELECT:
537 {
538 /*
539 * If the mouse is captured, release it or recapture it
540 * when the menu opens or closes, respectively.
541 */
542 if (!CaptureMouse) break;
544 break;
545 }
546
547
548 /*
549 * User-defined menu commands
550 */
551
552 case ID_CAPTURE_MOUSE:
556 break;
557
560 break;
561
564 break;
565
566 /* Drive 0 -- Mount */
567 /* Drive 1 -- Mount */
568 case ID_VDM_DRIVES + 0:
569 case ID_VDM_DRIVES + 2:
570 {
571 ULONG DiskNumber = (MenuEvent->dwCommandId - ID_VDM_DRIVES) / 2;
572 MountFloppy(DiskNumber);
573 break;
574 }
575
576 /* Drive 0 -- Eject */
577 /* Drive 1 -- Eject */
578 case ID_VDM_DRIVES + 1:
579 case ID_VDM_DRIVES + 3:
580 {
581 ULONG DiskNumber = (MenuEvent->dwCommandId - ID_VDM_DRIVES - 1) / 2;
582 EjectFloppy(DiskNumber);
583 break;
584 }
585
586 case ID_VDM_QUIT:
587 /* Stop the VDM */
588 // EmulatorTerminate();
589
590 /* Nothing runs, so exit immediately */
591 DPRINT1("Killing NTVDM via console menu!\n");
593 break;
594
595 default:
596 break;
597 }
598}
VOID DumpMemory(BOOLEAN TextFormat)
Definition: emulator.c:369
VOID EjectFloppy(IN ULONG DiskNumber)
Definition: emulator.c:467
VOID MountFloppy(IN ULONG DiskNumber)
Definition: emulator.c:413
VOID VdmShutdown(BOOLEAN Immediate)
Definition: ntvdm.c:317
static VOID UpdateVdmMenuMouse(VOID)
Definition: console.c:130
#define ID_VDM_DUMPMEM_BIN
Definition: resource.h:6
#define ID_VDM_DRIVES
Definition: resource.h:10
#define ID_CAPTURE_MOUSE
Definition: resource.h:4
#define ID_VDM_QUIT
Definition: resource.h:7
#define ID_VDM_DUMPMEM_TXT
Definition: resource.h:5
uint32_t ULONG
Definition: typedefs.h:59
#define WM_INITMENU
Definition: winuser.h:1735
#define WM_MENUSELECT
Definition: winuser.h:1737

Referenced by ConsoleEventThread().

◆ PrintMessageAnsi()

VOID PrintMessageAnsi ( IN CHAR_PRINT  CharPrint,
IN LPCSTR  Format,
  ... 
)

Definition at line 416 of file ntvdm.c.

418{
419 static CHAR CurChar = 0;
420 LPSTR str;
421
422#ifndef WIN2K_COMPLIANT
423 CHAR StaticBuffer[256];
424 LPSTR Buffer = StaticBuffer; // Use the static buffer by default.
425#else
426 CHAR Buffer[2048]; // Large enough. If not, increase it by hand.
427#endif
428 size_t MsgLen;
430
432
433#ifndef WIN2K_COMPLIANT
434 /*
435 * Retrieve the message length and if it is too long, allocate
436 * an auxiliary buffer; otherwise use the static buffer.
437 * The string is built to be NULL-terminated.
438 */
439 MsgLen = _vscprintf(Format, args);
440 if (MsgLen >= ARRAYSIZE(StaticBuffer))
441 {
442 Buffer = RtlAllocateHeap(RtlGetProcessHeap(), HEAP_ZERO_MEMORY, (MsgLen + 1) * sizeof(CHAR));
443 if (Buffer == NULL)
444 {
445 /* Allocation failed, use the static buffer and display a suitable error message */
446 Buffer = StaticBuffer;
447 Format = "DisplayMessageAnsi()\nOriginal message is too long and allocating an auxiliary buffer failed.";
448 MsgLen = strlen(Format);
449 }
450 }
451#else
452 MsgLen = ARRAYSIZE(Buffer) - 1;
453#endif
454
455 RtlZeroMemory(Buffer, (MsgLen + 1) * sizeof(CHAR));
456 _vsnprintf(Buffer, MsgLen, Format, args);
457
458 va_end(args);
459
460 /* Display the message */
461 // DPRINT1("\n\nNTVDM DOS32\n%s\n\n", Buffer);
462
463 MsgLen = strlen(Buffer);
464 str = Buffer;
465 while (MsgLen--)
466 {
467 if (*str == '\n' && CurChar != '\r')
468 CharPrint('\r');
469
470 CurChar = *str++;
471 CharPrint(CurChar);
472 }
473
474#ifndef WIN2K_COMPLIANT
475 /* Free the buffer if needed */
476 if (Buffer != StaticBuffer) RtlFreeHeap(RtlGetProcessHeap(), 0, Buffer);
477#endif
478}
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
_Check_return_ _CRTIMP int __cdecl _vscprintf(_In_z_ _Printf_format_string_ const char *_Format, va_list _ArgList)
const WCHAR * str
#define _vsnprintf
Definition: xmlstorage.h:202
char * LPSTR
Definition: xmlstorage.h:182
char CHAR
Definition: xmlstorage.h:175

Referenced by BiosRomBasic().

◆ SetLastConsoleEventActive()

DWORD WINAPI SetLastConsoleEventActive ( VOID  )

Definition at line 3183 of file console.c.

3184{
3185 CONSOLE_API_MESSAGE ApiMessage;
3186 PCONSOLE_NOTIFYLASTCLOSE NotifyLastCloseRequest = &ApiMessage.Data.NotifyLastCloseRequest;
3187
3188 /* Set the flag used by the console control dispatcher */
3190
3191 /* Set up the input arguments */
3192 NotifyLastCloseRequest->ConsoleHandle = NtCurrentPeb()->ProcessParameters->ConsoleHandle;
3193
3194 /* Call CSRSS; just return the NTSTATUS cast to DWORD */
3195 return CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
3196 NULL,
3198 sizeof(*NotifyLastCloseRequest));
3199}
#define NtCurrentPeb()
Definition: FLS.c:22
@ ConsolepNotifyLastClose
Definition: conmsg.h:88
#define CONSRV_SERVERDLL_INDEX
Definition: conmsg.h:15
#define CSR_CREATE_API_NUMBER(ServerId, ApiId)
Definition: csrmsg.h:37
static BOOLEAN LastCloseNotify
Definition: console.c:33
NTSTATUS NTAPI CsrClientCallServer(_Inout_ PCSR_API_MESSAGE ApiMessage, _Inout_opt_ PCSR_CAPTURE_BUFFER CaptureBuffer, _In_ CSR_API_NUMBER ApiNumber, _In_ ULONG DataLength)
Definition: connect.c:366
union _CONSOLE_API_MESSAGE::@3501 Data
CONSOLE_NOTIFYLASTCLOSE NotifyLastCloseRequest
Definition: conmsg.h:915

Referenced by ConsoleInit().

◆ UpdateVdmMenuDisks()

VOID UpdateVdmMenuDisks ( VOID  )

Definition at line 146 of file console.c.

147{
148 UINT_PTR ItemID;
149 USHORT i;
150
151 WCHAR szNoMedia[100];
152 WCHAR szMenuString1[256], szMenuString2[256];
153
154 /* Update the disks menu items */
155
158 szNoMedia,
159 ARRAYSIZE(szNoMedia));
160
163 szMenuString1,
164 ARRAYSIZE(szMenuString1));
165
166 for (i = 0; i < ARRAYSIZE(GlobalSettings.FloppyDisks); ++i)
167 {
168 ItemID = ID_VDM_DRIVES + (2 * i);
169
173 {
174 /* Update item text */
175 _snwprintf(szMenuString2, ARRAYSIZE(szMenuString2), szMenuString1, i, GlobalSettings.FloppyDisks[i].Buffer);
176 szMenuString2[ARRAYSIZE(szMenuString2) - 1] = UNICODE_NULL;
177 ModifyMenuW(hConsoleMenu, ItemID, MF_BYCOMMAND | MF_STRING, ItemID, szMenuString2);
178
179 /* Enable the eject item */
181 }
182 else
183 {
184 /* Update item text */
185 _snwprintf(szMenuString2, ARRAYSIZE(szMenuString2), szMenuString1, i, szNoMedia);
186 szMenuString2[ARRAYSIZE(szMenuString2) - 1] = UNICODE_NULL;
187 ModifyMenuW(hConsoleMenu, ItemID, MF_BYCOMMAND | MF_STRING, ItemID, szMenuString2);
188
189 /* Disable the eject item */
191 }
192 }
193}
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
int _snwprintf(wchar_t *buffer, size_t count, const wchar_t *format,...)
unsigned __int3264 UINT_PTR
Definition: mstsclib_h.h:274
#define UNICODE_NULL
NTVDM_SETTINGS GlobalSettings
Definition: ntvdm.c:28
unsigned short USHORT
Definition: pedump.c:61
UNICODE_STRING FloppyDisks[2]
Definition: ntvdm.h:88
static HMENU hConsoleMenu
Definition: console.c:21
#define IDS_NO_MEDIA
Definition: resource.h:23
#define IDS_VDM_MOUNT_FLOPPY
Definition: resource.h:19
#define GetModuleHandle
Definition: winbase.h:3698
#define MF_BYCOMMAND
Definition: winuser.h:202
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
#define MF_STRING
Definition: winuser.h:138
#define MF_ENABLED
Definition: winuser.h:128
BOOL WINAPI ModifyMenuW(_In_ HMENU, _In_ UINT, _In_ UINT, _In_ UINT_PTR, _In_opt_ LPCWSTR)
BOOL WINAPI EnableMenuItem(_In_ HMENU, _In_ UINT, _In_ UINT)
#define MF_GRAYED
Definition: winuser.h:129

Referenced by EjectFloppy(), EmulatorInitialize(), MountFloppy(), and UpdateVdmMenu().

Variable Documentation

◆ GlobalSettings

NTVDM_SETTINGS GlobalSettings
extern

◆ hConsoleWnd

HWND hConsoleWnd
extern

◆ NtVdmArgc

INT NtVdmArgc
extern

Definition at line 31 of file ntvdm.c.

Referenced by DosStart(), and wmain().

◆ NtVdmArgv

WCHAR** NtVdmArgv
extern

Definition at line 32 of file ntvdm.c.

Referenced by DosStart(), and wmain().

◆ NtVdmPath

WCHAR NtVdmPath[MAX_PATH]
extern

Definition at line 35 of file ntvdm.c.

Referenced by CmosInitialize(), and wmain().

◆ NtVdmPathSize

ULONG NtVdmPathSize
extern

Definition at line 36 of file ntvdm.c.

Referenced by wmain().