[SHELL32] Fix Control_RunDLLW (#5400)
[reactos.git] / subsystems / mvdm / ntvdm / ntvdm.h
1 /*
2 * COPYRIGHT: GPL - See COPYING in the top level directory
3 * PROJECT: ReactOS Virtual DOS Machine
4 * FILE: subsystems/mvdm/ntvdm/ntvdm.h
5 * PURPOSE: Header file to define commonly used stuff
6 * PROGRAMMERS: Aleksandar Andrejevic <theflash AT sdf DOT lonestar DOT org>
7 */
8
9 #ifndef _NTVDM_H_
10 #define _NTVDM_H_
11
12 /* BUILD CONFIGURATION ********************************************************/
13
14 /*
15 * Activate this line if you want to run NTVDM in standalone mode with:
16 * ntvdm.exe <program>
17 */
18 // #define STANDALONE
19
20 /*
21 * Activate this line for Win2k compliancy
22 */
23 // #define WIN2K_COMPLIANT
24
25 /*
26 * Activate this line if you want advanced hardcoded debug facilities
27 * (called interrupts, etc...), that may break PC-AT compatibility.
28 * USE AT YOUR OWN RISK! (disabled by default)
29 */
30 // #define ADVANCED_DEBUGGING
31
32 #ifdef ADVANCED_DEBUGGING
33 #define ADVANCED_DEBUGGING_LEVEL 1
34 #endif
35
36
37 /* INCLUDES *******************************************************************/
38
39 #include <stdio.h>
40 #include <stdarg.h>
41 #include <wchar.h>
42
43 #ifndef _countof
44 #define _countof(_Array) (sizeof(_Array) / sizeof(_Array[0]))
45 #endif
46
47 /* String widening macro */
48 #define __L(x) L ## x
49 #define _L(x) __L(x)
50 #define L(x) _L(x)
51
52 /* PSDK/NDK Headers */
53 #define WIN32_NO_STATUS
54 #include <windef.h>
55 #include <winbase.h>
56 #include <wingdi.h>
57 #include <wincon.h>
58 #include <winnls.h>
59 #include <winreg.h>
60 #include <winuser.h>
61 #include <commdlg.h>
62
63 #include <subsys/win/vdm.h>
64
65 // Do not include stuff that is only defined
66 // for backwards compatibility in nt_vdd.h
67 #define NO_NTVDD_COMPAT
68 #include <vddsvc.h>
69
70 DWORD WINAPI SetLastConsoleEventActive(VOID);
71
72 #define NTOS_MODE_USER
73 #include <ndk/kefuncs.h> // For NtQueryPerformanceCounter()
74 #include <ndk/rtlfuncs.h>
75
76 /* PSEH for SEH Support */
77 #include <pseh/pseh2.h>
78
79 #include <ntstrsafe.h>
80
81
82 /* VARIABLES ******************************************************************/
83
84 typedef struct _NTVDM_SETTINGS
85 {
86 ANSI_STRING BiosFileName;
87 ANSI_STRING RomFiles;
88 UNICODE_STRING FloppyDisks[2];
89 UNICODE_STRING HardDisks[4];
90 } NTVDM_SETTINGS, *PNTVDM_SETTINGS;
91
92 extern NTVDM_SETTINGS GlobalSettings;
93
94 // Command line of NTVDM
95 extern INT NtVdmArgc;
96 extern WCHAR** NtVdmArgv;
97
98 /* Full directory where NTVDM resides, or the SystemRoot\System32 path */
99 extern WCHAR NtVdmPath[MAX_PATH];
100 extern ULONG NtVdmPathSize; // Length without NULL terminator.
101
102 extern HWND hConsoleWnd;
103
104
105 /* FUNCTIONS ******************************************************************/
106
107 /*
108 * Interface functions
109 */
110 typedef VOID (*CHAR_PRINT)(IN CHAR Character);
111 VOID DisplayMessage(IN LPCWSTR Format, ...);
112 VOID PrintMessageAnsi(IN CHAR_PRINT CharPrint,
113 IN LPCSTR Format, ...);
114
115 /*static*/ VOID
116 UpdateVdmMenuDisks(VOID);
117
118 BOOL ConsoleAttach(VOID);
119 VOID ConsoleDetach(VOID);
120 VOID ConsoleReattach(HANDLE ConOutHandle);
121 BOOL IsConsoleHandle(HANDLE hHandle);
122 VOID MenuEventHandler(PMENU_EVENT_RECORD MenuEvent);
123 VOID FocusEventHandler(PFOCUS_EVENT_RECORD FocusEvent);
124
125 #endif // _NTVDM_H_
126
127 /* EOF */