windows-nt/Source/XPSP1/NT/base/mvdm/dos/command/cmd.h

310 lines
7.8 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
/* cmd.h - main include file for command.lib
*
* Modification History
*
* Sudeepb 17-Sep-1991 Created
*/
/*
#define WIN
#define FLAT_32
#include <nt.h>
#include <ntrtl.h>
#include <nturtl.h>
#define _WINDOWS
#include <windows.h>
*/
#ifdef DOS
#define SIGNALS
#endif
#ifdef OS2_16
#define OS2
#define SIGNALS
#endif
#ifdef OS2_32
#define OS2
#define FLAT_32
#endif
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
#include <process.h>
#ifdef WIN_16
#define WIN
#define API16
#endif
#ifdef WIN_32
#define WIN
#define FLAT_32
#define TRUE_IF_WIN32 1
#include <nt.h>
#include <ntrtl.h>
#include <nturtl.h>
#else
#define TRUE_IF_WIN32 0
#endif
#ifdef FLAT_32
#ifndef i386
#define ALIGN_32
#else
#define NOALIGN_32
#endif
#endif
#ifdef WIN
#define _WINDOWS
#include <windows.h>
#endif
#ifdef SIGNALS
#include <conio.h>
#include <signal.h>
#endif
#ifdef OS2_32
#include <excpt.h>
#define XCPT_SIGNAL 0xC0010003
#endif
#include <vdmapi.h>
#define COPY_STD_OUT 1
#define COPY_STD_ERR 2
#define CLOSE_ALL_HANDLES 1
#define CLOSE_STD_OUT 2
#define CLOSE_STD_ERR 4
#define DEFAULT_REDIRECTION_SIZE 1024
#define MAX_SHORTCUT_SIZE 128
#define STDIN_BUF_SIZE 512
/** Command Macros **/
/** Command Basic Typedefs **/
typedef VOID (*PFNSVC)(VOID);
#pragma pack(1)
typedef struct _PARAMBLOCK {
USHORT SegEnv;
USHORT OffCmdTail;
USHORT SegCmdTail;
ULONG pFCB1;
ULONG pFCB2;
} PARAMBLOCK,*PPARAMBLOCK;
typedef struct _SCSINFO {
CHAR SCS_ComSpec [64];
CHAR SCS_CmdTail [128];
PARAMBLOCK SCS_ParamBlock;
CHAR SCS_ToSync;
} SCSINFO, *PSCSINFO;
typedef struct _STD_HANDLES {
ULONG hStdErr;
ULONG hStdOut;
ULONG hStdIn;
} STD_HANDLES, *PSTD_HANDLES;
#define PIPE_INPUT_BUFFER_SIZE 512
#define PIPE_OUTPUT_BUFFER_SIZE PIPE_INPUT_BUFFER_SIZE
#define PIPE_INPUT_TIMEOUT 55
#define PIPE_OUTPUT_TIMEOUT PIPE_INPUT_TIMEOUT
typedef struct _PIPE_INPUT{
struct _PIPE_INPUT *Next;
HANDLE hFileRead;
HANDLE hFileWrite;
HANDLE hPipe;
HANDLE hDataEvent;
HANDLE hThread;
CHAR *pFileName;
DWORD BufferSize;
BOOL fEOF;
BOOL WaitData;
BYTE *Buffer;
CRITICAL_SECTION CriticalSection;
} PIPE_INPUT, *PPIPE_INPUT;
typedef struct _PIPE_OUTPUT {
HANDLE hFile;
HANDLE hPipe;
HANDLE hExitEvent;
CHAR *pFileName;
DWORD BufferSize;
BYTE *Buffer;
} PIPE_OUTPUT, *PPIPE_OUTPUT;
typedef struct _RedirComplete_Info {
HANDLE ri_hStdErr;
HANDLE ri_hStdOut;
HANDLE ri_hStdIn;
HANDLE ri_hStdErrFile;
HANDLE ri_hStdOutFile;
HANDLE ri_hStdInFile;
HANDLE ri_hStdOutThread;
HANDLE ri_hStdErrThread;
PPIPE_INPUT ri_pPipeStdIn;
PPIPE_OUTPUT ri_pPipeStdOut;
PPIPE_OUTPUT ri_pPipeStdErr;
} REDIRCOMPLETE_INFO, *PREDIRCOMPLETE_INFO;
typedef struct _VDMENVBLK {
DWORD cchEnv;
DWORD cchRemain;
CHAR *lpszzEnv;
} VDMENVBLK, *PVDMENVBLK;
#pragma pack()
/** Command Function Prototypes */
VOID cmdComSpec (VOID);
VOID cmdGetEnv (VOID);
VOID cmdGetNextCmd (VOID);
VOID cmdGetNextCmdForSeparateWow (VOID);
VOID cmdGetStdHandle (VOID);
VOID cmdExec (VOID);
VOID cmdExecComspec32 (VOID);
VOID cmdExitVDM (VOID);
VOID cmdReturnExitCode (VOID);
VOID cmdSaveWorld (VOID);
VOID cmdSetInfo (VOID);
VOID cmdGetCurrentDir (VOID);
VOID cmdSetDirectories (PCHAR,VDMINFO *);
VOID CheckDotExeForWOW (LPSTR);
BOOL cmdCheckCopyForRedirection (PREDIRCOMPLETE_INFO, BOOL);
BOOL cmdCreateTempFile (PHANDLE,PCHAR *);
VOID cmdCheckBinary (VOID);
VOID cmdInitConsole (VOID);
VOID nt_init_event_thread (VOID);
VOID cmdExec32 (PCHAR,PCHAR);
VOID cmdCreateProcess (PSTD_HANDLES pStdHandles);
USHORT cmdMapCodePage (ULONG);
VOID cmdCheckForPIF (PVDMINFO);
VOID cmdGetConfigSys (VOID);
VOID cmdGetAutoexecBat (VOID);
VOID DeleteConfigFiles (VOID);
VOID cmdGetKbdLayout (VOID);
BOOL cmdXformEnvironment (PCHAR, PANSI_STRING);
VOID cmdGetInitEnvironment (VOID);
VOID cmdUpdateCurrentDirectories (BYTE);
BOOL cmdCreateVDMEnvironment (PVDMENVBLK);
DWORD cmdGetEnvironmentVariable (PVDMENVBLK, PCHAR, PCHAR, DWORD);
BOOL cmdSetEnvironmentVariable (PVDMENVBLK, PCHAR, PCHAR);
DWORD cmdExpandEnvironmentStrings (PVDMENVBLK, PCHAR, PCHAR, DWORD);
PREDIRCOMPLETE_INFO cmdCheckStandardHandles (PVDMINFO,USHORT UNALIGNED *);
VOID cmdGetStartInfo (VOID);
BOOL cmdHandleStdinWithPipe (PREDIRCOMPLETE_INFO);
BOOL cmdHandleStdOutErrWithPipe (PREDIRCOMPLETE_INFO, USHORT);
LPSTR cmdSkipOverPathName (LPSTR);
BOOL cmdPipeFileDataEOF (HANDLE, BOOL *);
BOOL cmdPipeFileEOF (HANDLE);
VOID cmdPipeInThread (LPVOID);
VOID cmdPipeOutThread (LPVOID);
VOID cmdSetWinTitle (VOID);
BOOL cmdIllegalFunc(VOID);
VOID cmdGetCursorPos(VOID);
/** Command Externs **/
extern USHORT nDrives;
extern BOOL IsFirstVDMInSystem;
extern BOOL VDMForWOW;
extern CHAR lpszComSpec[];
extern USHORT cbComSpec;
extern BOOL IsFirstCall;
extern BOOL IsRepeatCall;
extern BOOL IsFirstWOWCheckBinary;
extern BOOL IsFirstVDMInSystem;
extern BOOL SaveWorldCreated;
extern PCHAR pSCS_ToSync;
extern BOOL fBlock;
extern PCHAR pCommand32;
extern PCHAR pEnv32;
extern DWORD dwExitCode32;
extern PSCSINFO pSCSInfo;
extern HANDLE hFileStdOut;
extern HANDLE hFileStdOutDup;
extern HANDLE hFileStdErr;
extern HANDLE hFileStdErrDup;
extern VDMINFO VDMInfo;
extern PSZ pszFileStdOut;
extern PSZ pszFileStdErr;
extern CHAR cmdHomeDirectory[];
extern HANDLE SCS_hStdIn;
extern HANDLE SCS_hStdOut;
extern HANDLE SCS_hStdErr;
extern CHAR chDefaultDrive;
extern BOOL DontCheckDosBinaryType;
extern WORD Exe32ActiveCount;
extern BOOL fSoftpcRedirection;
extern BOOL fSoftpcRedirectionOnShellOut;
extern VOID nt_std_handle_notification (BOOL);
extern VOID cmdPushExitInConsoleBuffer (VOID);
// control handler state, defined in nt_event.h, nt_event.c
extern ULONG CntrlHandlerState;
#define CNTRL_SHELLCOUNT 0x0FFFF // The LOWORD is used for shell count
#define CNTRL_PIFALLOWCLOSE 0x10000
#define CNTRL_VDMBLOCKED 0x20000
#define CNTRL_SYSTEMROOTCONSOLE 0x40000
#define CNTRL_PUSHEXIT 0x80000
// Temporary variable till we standardized on wowexec
extern ULONG iWOWTaskId;
extern CHAR comspec[];
extern CHAR ShortCutInfo[];
extern VOID nt_pif_callout (LPVOID);
extern CHAR *lpszzInitEnvironment;
extern WORD cchInitEnvironment;
extern CHAR *lpszzCurrentDirectories;
extern DWORD cchCurrentDirectories;
extern BYTE * pIsDosBinary;
extern WORD * pFDAccess;
extern CHAR *lpszzcmdEnv16;
extern BOOL DosEnvCreated;
extern BOOL IsFirstVDM;
extern VDMENVBLK cmdVDMEnvBlk;
extern CHAR *lpszzVDMEnv32;
extern DWORD cchVDMEnv32;
extern UINT VdmExitCode;
// application path name extention type.
#define EXTENTION_STRING_LEN 4
#define BAT_EXTENTION_STRING ".BAT"
#define EXE_EXTENTION_STRING ".EXE"
#define COM_EXTENTION_STRING ".COM"
#ifdef DBCS // MUST fix for FE NT
#define FIX_375051_NOW
#endif
#ifdef FIX_375051_NOW
#define WOW32_strupr(psz) CharUpperA(psz)
#else
#define WOW32_strupr(psz) _strupr(psz)
#endif