#pragma once
+/* CONSTANTS & TYPES **********************************************************/
+
+typedef enum _VDM_ENTRY_CODE
+{
+ VdmEntryUndo,
+ VdmEntryUpdateProcess,
+ VdmEntryUpdateControlCHandler
+} VDM_ENTRY_CODE;
+
+//
+// Undo States
+//
+#define VDM_UNDO_PARTIAL 0x01
+#define VDM_UNDO_FULL 0x02
+#define VDM_UNDO_REUSE 0x04
+#define VDM_UNDO_COMPLETED 0x08
+
//
// Binary Types to share with VDM
//
#define VDM_NOT_READY 0x02
#define VDM_READY 0x04
+//
+// VDM Flags
+//
+#define VDM_FLAG_FIRST_TASK 0x01
+#define VDM_FLAG_WOW 0x02
+#define VDM_FLAG_DOS 0x04
+#define VDM_FLAG_RETRY 0x08
+#define VDM_INC_REENTER_COUNT 0x10
+#define VDM_DEC_REENTER_COUNT 0x20
+#define VDM_FLAG_NESTED_TASK 0x40
+#define VDM_FLAG_DONT_WAIT 0x80
+#define VDM_GET_FIRST_COMMAND 0x100
+#define VDM_GET_ENVIRONMENT 0x400
+#define VDM_FLAG_SEPARATE_WOW 0x800
+#define VDM_LIST_WOW_PROCESSES 0x1000
+#define VDM_LIST_WOW_TASKS 0x4000
+#define VDM_ADD_WOW_TASK 0x8000
+
+typedef struct
+{
+ ULONG TaskId;
+ ULONG CreationFlags;
+ ULONG ExitCode;
+ ULONG CodePage;
+ HANDLE StdIn;
+ HANDLE StdOut;
+ HANDLE StdErr;
+ LPSTR CmdLine;
+ LPSTR AppName;
+ LPSTR PifFile;
+ LPSTR CurDirectory;
+ LPSTR Env;
+ ULONG EnvLen;
+ STARTUPINFOA StartupInfo;
+ LPSTR Desktop;
+ ULONG DesktopLen;
+ LPSTR Title;
+ ULONG TitleLen;
+ LPVOID Reserved;
+ ULONG ReservedLen;
+ USHORT CmdLen;
+ USHORT AppLen;
+ USHORT PifLen;
+ USHORT CurDirectoryLen;
+ USHORT VDMState;
+ USHORT CurrentDrive;
+ BOOLEAN ComingFromBat;
+} VDM_COMMAND_INFO, *PVDM_COMMAND_INFO;
+
+
+/* FUNCTION PROTOTYPES ********************************************************/
+
+BOOL
+WINAPI
+GetNextVDMCommand(
+ IN OUT PVDM_COMMAND_INFO CommandData OPTIONAL
+);
+
+VOID
+WINAPI
+ExitVDM(
+ IN BOOL IsWow,
+ IN ULONG iWowTask
+);
+
#endif // _VDM_H
/* EOF */