You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
165 lines
4.3 KiB
165 lines
4.3 KiB
/*++ BUILD Version: 0001 // Increment this if a change has global effects
|
|
|
|
Copyright (c) 1990-1998 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
vdmapi.h
|
|
|
|
Abstract:
|
|
|
|
This module defines the private MVDM APIs
|
|
|
|
Created:
|
|
|
|
02-Apr-1992
|
|
|
|
Revision History:
|
|
|
|
Created 02-Apr-1992 Sudeep Bharati
|
|
|
|
--*/
|
|
|
|
#define MAXIMUM_VDM_COMMAND_LENGTH 128
|
|
#define MAXIMUM_VDM_ENVIORNMENT 32*1024
|
|
#define MAXIMUM_VDM_CURRENT_DIR 64
|
|
|
|
// The following value can be used to allocate space for the largest possible
|
|
// path string in ansi, including directory, drive letter and file name.
|
|
// I originally coded this with 13 for the path name, but DOS seems to be
|
|
// able to handle one more, thus the 14.
|
|
#define MAXIMUM_VDM_PATH_STRING MAXIMUM_VDM_CURRENT_DIR+3+14
|
|
|
|
// VDMState defines
|
|
#define ASKING_FOR_FIRST_COMMAND 0x1 // Very First call.
|
|
#define ASKING_FOR_WOW_BINARY 0x2 // Caller is WOWVDM
|
|
#define ASKING_FOR_DOS_BINARY 0x4 // Caller is DOSVDM
|
|
#define ASKING_FOR_SECOND_TIME 0x8 // Caller is asking second time after
|
|
#define INCREMENT_REENTER_COUNT 0x10 // Increment the re-entrancy count
|
|
#define DECREMENT_REENTER_COUNT 0x20 // Decrement the re-entrancy count
|
|
#define NO_PARENT_TO_WAKE 0x40 // Just get the next command, dont wake up anyone
|
|
// allocating bigger buffers.
|
|
#define RETURN_ON_NO_COMMAND 0x80 // if there is no command return without blocking
|
|
#define ASKING_FOR_PIF 0x100 // To get the exe name to find out PIF
|
|
// early in the VDM initialization.
|
|
#define STARTUP_INFO_RETURNED 0x200 // on return if this bit is set means
|
|
// startupinfo structure was filled in.
|
|
#define ASKING_FOR_ENVIRONMENT 0x400 // ask for environment only
|
|
#define ASKING_FOR_SEPWOW_BINARY 0x800 // Caller is Separate WOW
|
|
#define ASKING_FOR_WOWPROCLIST 0x1000 // get the list of wow processes
|
|
#define ASKING_FOR_WOWTASKLIST 0x4000 // get the list of tasks in this wow process
|
|
#define ASKING_TO_ADD_WOWTASK 0x8000 // add info about a wow task.
|
|
|
|
|
|
typedef struct _VDMINFO {
|
|
ULONG iTask;
|
|
ULONG dwCreationFlags;
|
|
ULONG ErrorCode;
|
|
ULONG CodePage;
|
|
HANDLE StdIn;
|
|
HANDLE StdOut;
|
|
HANDLE StdErr;
|
|
LPVOID CmdLine;
|
|
LPVOID AppName;
|
|
LPVOID PifFile;
|
|
LPVOID CurDirectory;
|
|
LPVOID Enviornment;
|
|
ULONG EnviornmentSize;
|
|
STARTUPINFOA StartupInfo;
|
|
LPVOID Desktop;
|
|
ULONG DesktopLen;
|
|
LPVOID Title;
|
|
ULONG TitleLen;
|
|
LPVOID Reserved;
|
|
ULONG ReservedLen;
|
|
USHORT CmdSize;
|
|
USHORT AppLen;
|
|
USHORT PifLen;
|
|
USHORT CurDirectoryLen;
|
|
USHORT VDMState;
|
|
USHORT CurDrive;
|
|
BOOLEAN fComingFromBat;
|
|
} VDMINFO, *PVDMINFO;
|
|
|
|
//
|
|
// used to store shared task and ntvdm process info list
|
|
//
|
|
|
|
#define MAX_SHARED_OBJECTS 200
|
|
|
|
typedef struct _SHAREDTASK {
|
|
DWORD dwThreadId;
|
|
WORD hTask16;
|
|
WORD hMod16;
|
|
CHAR szModName[9];
|
|
CHAR szFilePath[128];
|
|
} SHAREDTASK, *LPSHAREDTASK;
|
|
|
|
typedef struct _SHAREDPROCESS {
|
|
DWORD dwProcessId;
|
|
DWORD dwAttributes; // WOW_SYSTEM for shared WOW
|
|
LPTHREAD_START_ROUTINE pfnW32HungAppNotifyThread; // For VDMTerminateTask
|
|
} SHAREDPROCESS, *LPSHAREDPROCESS;
|
|
|
|
|
|
// for CmdBatNotification
|
|
|
|
#define CMD_BAT_OPERATION_TERMINATING 0
|
|
#define CMD_BAT_OPERATION_STARTING 1
|
|
|
|
//
|
|
// Message sent by BaseSrv to shared WOWEXEC to tell it to call
|
|
// GetNextVDMCommand. No longer will a thread in WOW be blocked
|
|
// in GetNextVDMCommand all the time.
|
|
//
|
|
|
|
#define WM_WOWEXECSTARTAPP (WM_USER) // also in mvdm\inc\wowinfo.h
|
|
|
|
//
|
|
// MVDM apis
|
|
//
|
|
|
|
VOID
|
|
APIENTRY
|
|
VDMOperationStarted(
|
|
IN BOOL IsWowCaller
|
|
);
|
|
|
|
BOOL
|
|
APIENTRY
|
|
GetNextVDMCommand(
|
|
PVDMINFO pVDMInfo
|
|
);
|
|
|
|
VOID
|
|
APIENTRY
|
|
ExitVDM(
|
|
IN BOOL IsWowCaller,
|
|
IN ULONG iWowTask
|
|
);
|
|
|
|
BOOL
|
|
APIENTRY
|
|
SetVDMCurrentDirectories(
|
|
IN ULONG cchCurDir,
|
|
IN CHAR *lpszCurDir
|
|
);
|
|
|
|
ULONG
|
|
APIENTRY
|
|
GetVDMCurrentDirectories(
|
|
IN ULONG cchCurDir,
|
|
IN CHAR *lpszCurDir
|
|
);
|
|
|
|
VOID
|
|
APIENTRY
|
|
CmdBatNotification(
|
|
IN ULONG fBeginEnd
|
|
);
|
|
|
|
NTSTATUS
|
|
APIENTRY
|
|
RegisterWowExec(
|
|
IN HANDLE hwndWowExec
|
|
);
|