|
|
/* 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
|