00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
#ifndef _SERVER_H_
00023
#define _SERVER_H_
00024
00025
00026
00027
00028
00029
00030 typedef struct _CONSOLE_SHARE_ACCESS {
00031 ULONG
OpenCount;
00032 ULONG
Readers;
00033 ULONG
Writers;
00034 ULONG
SharedRead;
00035 ULONG
SharedWrite;
00036 }
CONSOLE_SHARE_ACCESS, *
PCONSOLE_SHARE_ACCESS;
00037
00038
#include "input.h"
00039
#include "output.h"
00040
#if defined(FE_IME)
00041
#include "conime.h"
00042
#include "convarea.h"
00043
#endif
00044
00045 typedef struct _CONSOLE_PROCESS_HANDLE {
00046 LIST_ENTRY
ListLink;
00047 HANDLE
ProcessHandle;
00048 PCSR_PROCESS
Process;
00049 ULONG
TerminateCount;
00050 LPTHREAD_START_ROUTINE
CtrlRoutine;
00051 LPTHREAD_START_ROUTINE
PropRoutine;
00052 }
CONSOLE_PROCESS_HANDLE, *
PCONSOLE_PROCESS_HANDLE;
00053
00054 typedef struct _INPUT_THREAD_INFO {
00055 HANDLE
ThreadHandle;
00056 DWORD ThreadId;
00057 HDESK
Desktop;
00058 ULONG
WindowCount;
00059
#if defined(FE_IME)
00060
HWND hWndConsoleIME;
00061
#endif
00062
}
INPUT_THREAD_INFO, *
PINPUT_THREAD_INFO;
00063
00064 typedef struct _INPUT_THREAD_INIT_INFO {
00065 HANDLE
ThreadHandle;
00066 HANDLE
InitCompleteEventHandle;
00067 HDESK
DesktopHandle;
00068 NTSTATUS InitStatus;
00069 }
INPUT_THREAD_INIT_INFO, *
PINPUT_THREAD_INIT_INFO;
00070
00071 typedef struct _CONSOLE_MSG {
00072 LIST_ENTRY
ListLink;
00073 UINT Message;
00074 WPARAM
wParam;
00075 LPARAM
lParam;
00076 }
CONSOLE_MSG, *
PCONSOLE_MSG;
00077
00078 typedef struct _CONSOLE_THREAD_MSG {
00079 CONSOLE_MSG;
00080 DWORD dwThreadId;
00081 }
CONSOLE_THREAD_MSG, *
PCONSOLE_THREAD_MSG;
00082
00083
00084
00085 #define CONSOLE_IS_ICONIC 0x00000001
00086 #define CONSOLE_OUTPUT_SUSPENDED 0x00000002
00087 #define CONSOLE_HAS_FOCUS 0x00000004
00088 #define CONSOLE_IGNORE_NEXT_MOUSE_INPUT 0x00000008
00089 #define CONSOLE_SELECTING 0x00000010
00090 #define CONSOLE_SCROLLING 0x00000020
00091 #define CONSOLE_DISABLE_CLOSE 0x00000040
00092 #define CONSOLE_NOTIFY_LAST_CLOSE 0x00000080
00093 #define CONSOLE_NO_WINDOW 0x00000100
00094 #define CONSOLE_VDM_REGISTERED 0x00000200
00095 #define CONSOLE_UPDATING_SCROLL_BARS 0x00000400
00096 #define CONSOLE_QUICK_EDIT_MODE 0x00000800
00097 #define CONSOLE_TERMINATING 0x00001000
00098 #define CONSOLE_CONNECTED_TO_EMULATOR 0x00002000
00099 #define CONSOLE_FULLSCREEN_NOPAINT 0x00004000
00100 #define CONSOLE_SHUTTING_DOWN 0x00008000
00101 #define CONSOLE_AUTO_POSITION 0x00010000
00102 #define CONSOLE_IGNORE_NEXT_KEYUP 0x00020000
00103 #define CONSOLE_WOW_REGISTERED 0x00040000
00104 #define CONSOLE_USE_PRIVATE_FLAGS 0x00080000
00105 #define CONSOLE_HISTORY_NODUP 0x00100000
00106 #define CONSOLE_SCROLLBAR_TRACKING 0x00200000
00107 #define CONSOLE_IN_DESTRUCTION 0x00400000
00108 #define CONSOLE_SETTING_WINDOW_SIZE 0x00800000
00109 #define CONSOLE_DEFAULT_BUFFER_SIZE 0x01000000
00110
#if defined(FE_SB)
00111
#define CONSOLE_OS2_REGISTERED 0x20000000
00112
#define CONSOLE_OS2_OEM_FORMAT 0x40000000
00113
#if defined(FE_IME)
00114
#define CONSOLE_JUST_VDM_UNREGISTERED 0x80000000
00115
#endif // FE_IME
00116
#endif
00117
00118 #define CONSOLE_SUSPENDED (CONSOLE_OUTPUT_SUSPENDED)
00119
00120
00121
00122 #define CONSOLE_NO_SELECTION 0
00123 #define CONSOLE_SELECTION_NOT_EMPTY 1 // non-null select rectangle
00124 #define CONSOLE_MOUSE_SELECTION 2 // selecting with mouse
00125 #define CONSOLE_MOUSE_DOWN 4 // mouse is down
00126 #define CONSOLE_SELECTION_INVERTED 8 // selection is inverted (turned off)
00127
00128 typedef struct _CONSOLE_INFORMATION {
00129 CRITICAL_SECTION
ConsoleLock;
00130 ULONG
RefCount;
00131 ULONG
WaitCount;
00132 INPUT_INFORMATION InputBuffer;
00133 PSCREEN_INFORMATION CurrentScreenBuffer;
00134 PSCREEN_INFORMATION ScreenBuffers;
00135 HWINSTA
hWinSta;
00136 HDESK
hDesk;
00137 HWND
hWnd;
00138 HKL
hklActive;
00139 HDC
hDC;
00140 HMENU
hMenu;
00141 HMENU
hHeirMenu;
00142 HPALETTE
hSysPalette;
00143 RECT
WindowRect;
00144 DWORD ResizeFlags;
00145 LIST_ENTRY
OutputQueue;
00146 HANDLE
InitEvents[
NUMBER_OF_INITIALIZATION_EVENTS];
00147 HANDLE
ClientThreadHandle;
00148 LIST_ENTRY
ProcessHandleList;
00149 LIST_ENTRY
CommandHistoryList;
00150 LIST_ENTRY
ExeAliasList;
00151 SHORT NumCommandHistories;
00152 SHORT MaxCommandHistories;
00153 SHORT CommandHistorySize;
00154 USHORT OriginalTitleLength;
00155 USHORT TitleLength;
00156 LPWSTR
OriginalTitle;
00157 LPWSTR
Title;
00158 DWORD dwHotKey;
00159 HICON
hIcon;
00160 HICON
hSmIcon;
00161 INT iIconId;
00162 WORD
LastAttributes;
00163 BYTE ReserveKeys;
00164 DWORD Flags;
00165
00166
00167
00168
00169 PLIST_ENTRY
WaitQueue;
00170
00171
00172
00173 DWORD SelectionFlags;
00174 SMALL_RECT
SelectionRect;
00175 COORD
SelectionAnchor;
00176 COORD
TextCursorPosition;
00177 ULONG
TextCursorSize;
00178 BOOLEAN
TextCursorVisible;
00179
00180 BOOLEAN
InsertMode;
00181
00182
00183
00184 WORD
wShowWindow;
00185 int dwWindowOriginX;
00186 int dwWindowOriginY;
00187
00188 WORD
FullScreenFlags;
00189 WORD
PopupCount;
00190
00191
00192
00193 HANDLE
VDMStartHardwareEvent;
00194 HANDLE
VDMEndHardwareEvent;
00195 HANDLE
VDMProcessHandle;
00196 HANDLE
VDMProcessId;
00197
00198 HANDLE
VDMBufferSectionHandle;
00199 PCHAR_INFO
VDMBuffer;
00200 PCHAR_INFO
VDMBufferClient;
00201 COORD
VDMBufferSize;
00202
00203 HANDLE
StateSectionHandle;
00204 PVOID
StateBuffer;
00205 PVOID
StateBufferClient;
00206 DWORD StateLength;
00207
00208
00209
00210 UINT CP;
00211 UINT OutputCP;
00212
00213
00214
00215
00216
00217
00218 HWND
hWndProgMan;
00219 BOOL bIconInit;
00220
00221 HANDLE
ConsoleHandle;
00222
00223 ULONG
CtrlFlags;
00224 ULONG
LimitingProcessId;
00225 HANDLE
TerminationEvent;
00226
00227 SHORT VerticalClientToWindow;
00228 SHORT HorizontalClientToWindow;
00229
00230 COLORREF
ColorTable[ 16 ];
00231 HANDLE
hProcessLastNotifyClose;
00232 HANDLE
ProcessIdLastNotifyClose;
00233 HWND
hWndProperties;
00234
00235 PINPUT_THREAD_INFO InputThreadInfo;
00236
00237 LIST_ENTRY
MessageQueue;
00238
00239
#if defined(FE_SB)
00240
CPINFO CPInfo;
00241 CPINFO OutputCPInfo;
00242
00243
DWORD ReadConInpNumBytesUnicode;
00244
DWORD ReadConInpNumBytesTemp;
00245
00246
DWORD WriteConOutNumBytesUnicode;
00247
DWORD WriteConOutNumBytesTemp;
00248
00249 PVOID lpCookedReadData;
00250
00251 PVOID EudcInformation;
00252
00253 PVOID FontCacheInformation;
00254
00255
#if defined(FE_IME)
00256
CONSOLE_IME_INFORMATION ConsoleIme;
00257
#endif // FE_IME
00258
00259 HDC FonthDC;
00260 HBITMAP hBitmap;
00261
#if defined(i386)
00262
SMALL_RECT Os2SavedWindowRect;
00263
#endif
00264
BOOLEAN fVDMVideoMode;
00265
00266 BOOLEAN fIsDBCSCP;
00267 BOOLEAN fIsDBCSOutputCP;
00268
00269
#endif
00270
}
CONSOLE_INFORMATION, *
PCONSOLE_INFORMATION;
00271
00272
00273
00274
00275
00276 #define CONSOLE_CTRL_C_FLAG 1
00277 #define CONSOLE_CTRL_BREAK_FLAG 2
00278 #define CONSOLE_CTRL_CLOSE_FLAG 4
00279 #define CONSOLE_FORCE_SHUTDOWN_FLAG 8
00280 #define CONSOLE_CTRL_LOGOFF_FLAG 16
00281 #define CONSOLE_CTRL_SHUTDOWN_FLAG 32
00282
00283 #define ADD_SCROLL_BARS_X 0x1
00284 #define REMOVE_SCROLL_BARS_X 0x2
00285 #define ADD_SCROLL_BARS_Y 0x4
00286 #define REMOVE_SCROLL_BARS_Y 0x8
00287 #define RESIZE_SCROLL_BARS 0x10
00288 #define SCROLL_BAR_CHANGE (ADD_SCROLL_BARS_X | REMOVE_SCROLL_BARS_X | ADD_SCROLL_BARS_Y | REMOVE_SCROLL_BARS_Y | RESIZE_SCROLL_BARS)
00289 #define BORDER_CHANGE 0x20
00290 #define SCREEN_BUFFER_CHANGE 0x40
00291
00292 #define CONSOLE_INITIAL_IO_HANDLES 3
00293 #define CONSOLE_IO_HANDLE_INCREMENT 3
00294
00295 #define CONSOLE_FREE_HANDLE 0
00296
00297
00298 #define CONSOLE_GRAPHICS_OUTPUT_HANDLE 4
00299 #define CONSOLE_INHERITABLE 8
00300 #define CONSOLE_ANY_HANDLE ((ULONG)(-1))
00301
00302
00303
00304
00305
00306 #define HANDLE_CLOSING 1
00307 #define HANDLE_INPUT_PENDING 2
00308 #define HANDLE_MULTI_LINE_INPUT 4
00309
00310 typedef struct _HANDLE_DATA {
00311 ULONG
HandleType;
00312 ACCESS_MASK
Access;
00313 ULONG
ShareAccess;
00314
union {
00315 PSCREEN_INFORMATION ScreenBuffer;
00316 PINPUT_INFORMATION InputBuffer;
00317 } Buffer;
00318 PINPUT_READ_HANDLE_DATA InputReadData;
00319 }
HANDLE_DATA, *
PHANDLE_DATA;
00320
00321 typedef struct _CONSOLE_PER_PROCESS_DATA {
00322 HANDLE
ConsoleHandle;
00323 HANDLE_DATA HandleTable[
CONSOLE_INITIAL_IO_HANDLES];
00324 ULONG
HandleTableSize;
00325 ULONG
Foo;
00326 PHANDLE_DATA HandleTablePtr;
00327 BOOLEAN
ConsoleApp;
00328 BOOLEAN
RootProcess;
00329
#if defined(FE_IME)
00330
HDESK hDesk;
00331 HWINSTA hWinSta;
00332
#endif
00333
}
CONSOLE_PER_PROCESS_DATA, *
PCONSOLE_PER_PROCESS_DATA;
00334
00335 #define CONSOLE_INITIAL_CONSOLES 10
00336 #define CONSOLE_CONSOLE_HANDLE_INCREMENT 5
00337 #define CONSOLE_HANDLE_ALLOCATED 1
00338
00339 #define INDEX_TO_HANDLE(INDEX) ((HANDLE)(((ULONG_PTR)INDEX << 2) | CONSOLE_HANDLE_SIGNATURE))
00340 #define HANDLE_TO_INDEX(CONHANDLE) ((HANDLE)((ULONG_PTR)CONHANDLE >> 2))
00341
00342 #define INPUT_MODES (ENABLE_LINE_INPUT | ENABLE_PROCESSED_INPUT | ENABLE_ECHO_INPUT | ENABLE_WINDOW_INPUT | ENABLE_MOUSE_INPUT)
00343 #define OUTPUT_MODES (ENABLE_PROCESSED_OUTPUT | ENABLE_WRAP_AT_EOL_OUTPUT)
00344 #define PRIVATE_MODES (ENABLE_INSERT_MODE | ENABLE_QUICK_EDIT_MODE | ENABLE_PRIVATE_FLAGS)
00345
00346 #define CURSOR_PERCENTAGE_TO_TOP_SCAN_LINE(FONTSIZE,PERCENTAGE) ((FONTSIZE) - ((FONTSIZE) * (PERCENTAGE) / 100))
00347
00348 #define ConsoleLocked(CONSOLEPTR) (((CONSOLEPTR)->ConsoleLock.OwningThread) == NtCurrentTeb()->ClientId.UniqueThread)
00349
00350 #define CONSOLE_STATUS_WAIT ((NTSTATUS)0xC0030001L)
00351 #define CONSOLE_STATUS_READ_COMPLETE ((NTSTATUS)0xC0030002L)
00352 #define CONSOLE_STATUS_WAIT_NO_BLOCK ((NTSTATUS)0xC0030003L)
00353
00354 #define CM_CREATE_CONSOLE_WINDOW (WM_USER+0)
00355 #define CM_DESTROY_WINDOW (WM_USER+1)
00356 #define CM_SET_WINDOW_SIZE (WM_USER+2)
00357 #define CM_BEEP (WM_USER+3)
00358 #define CM_UPDATE_SCROLL_BARS (WM_USER+4)
00359 #define CM_UPDATE_TITLE (WM_USER+5)
00360
00361
00362
00363 #define CM_MODE_TRANSITION (WM_USER+6)
00364 #define CM_CONSOLE_SHUTDOWN (WM_USER+7)
00365 #define CM_HIDE_WINDOW (WM_USER+8)
00366
#if defined(FE_IME)
00367
#define CM_CONIME_CREATE (WM_USER+9)
00368
#define CM_SET_CONSOLEIME_WINDOW (WM_USER+10)
00369
#define CM_WAIT_CONIME_PROCESS (WM_USER+11)
00370
#define CM_SET_IME_CODEPAGE (WM_USER+12)
00371
#define CM_SET_NLSMODE (WM_USER+13)
00372
#define CM_GET_NLSMODE (WM_USER+14)
00373
#define CM_CONIME_KL_ACTIVATE (WM_USER+15)
00374
#endif
00375 #define CM_CONSOLE_MSG (WM_USER+16)
00376 #define CM_CONSOLE_INPUT_THREAD_MSG (WM_USER+17)
00377
00378 #define CONSOLE_CLIENTTHREADHANDLE(pcsrthread) ((pcsrthread)->ThreadHandle)
00379
00380 #define CONSOLE_CLIENTPROCESSHANDLE() \
00381
((CSR_SERVER_QUERYCLIENTTHREAD())->Process->ProcessHandle)
00382
00383 #define CONSOLE_CLIENTPROCESSID() \
00384
((CSR_SERVER_QUERYCLIENTTHREAD())->Process->ClientId.UniqueProcess)
00385
00386 #define CONSOLE_FROMPROCESSPROCESSHANDLE(pcsrprocess) \
00387
((pcsrprocess)->ProcessHandle)
00388
00389 #define CONSOLE_FROMPROCESSPERPROCESSDATA(pcsrprocess) \
00390
((pcsrprocess)->ServerDllPerProcessData[CONSRV_SERVERDLL_INDEX])
00391
00392 #define CONSOLE_FROMTHREADPERPROCESSDATA(pcsrthread) \
00393
CONSOLE_FROMPROCESSPERPROCESSDATA((pcsrthread)->Process)
00394
00395 #define CONSOLE_PERPROCESSDATA() \
00396
CONSOLE_FROMTHREADPERPROCESSDATA(CSR_SERVER_QUERYCLIENTTHREAD())
00397
00398 #define CONSOLE_GETCONSOLEAPP() (((PCONSOLE_PER_PROCESS_DATA)CONSOLE_PERPROCESSDATA())->ConsoleApp)
00399 #define CONSOLE_GETCONSOLEAPPFROMPROCESSDATA(PROCESSDATA) ((PROCESSDATA)->ConsoleApp)
00400 #define CONSOLE_SETCONSOLEAPP(VALUE) (((PCONSOLE_PER_PROCESS_DATA)CONSOLE_PERPROCESSDATA())->ConsoleApp = VALUE)
00401 #define CONSOLE_SETCONSOLEAPPFROMPROCESSDATA(PROCESSDATA,VALUE) ((PROCESSDATA)->ConsoleApp = VALUE)
00402
00403 #define CONSOLE_GETCONSOLEHANDLE() (((PCONSOLE_PER_PROCESS_DATA)CONSOLE_PERPROCESSDATA())->ConsoleHandle)
00404 #define CONSOLE_SETCONSOLEHANDLE(VALUE) (((PCONSOLE_PER_PROCESS_DATA)CONSOLE_PERPROCESSDATA())->ConsoleHandle = VALUE)
00405 #define CONSOLE_GETCONSOLEHANDLEFROMPROCESSDATA(PROCESSDATA) ((PROCESSDATA)->ConsoleHandle)
00406 #define CONSOLE_SETCONSOLEHANDLEFROMPROCESSDATA(PROCESSDATA,VALUE) ((PROCESSDATA)->ConsoleHandle = VALUE)
00407
00408
#endif
00409
00410
00411
00412
00413
00414 typedef struct _CONSOLE_REGISTRY_INFO {
00415 COORD
ScreenBufferSize;
00416 COORD
WindowSize;
00417 COORD
WindowOrigin;
00418 COORD
FontSize;
00419 UINT FontFamily;
00420 UINT FontWeight;
00421 WCHAR
FaceName[LF_FACESIZE];
00422 UINT CursorSize;
00423 BOOL FullScreen;
00424 BOOL QuickEdit;
00425 BOOL InsertMode;
00426 BOOL AutoPosition;
00427 CHAR_INFO
ScreenFill;
00428 CHAR_INFO
PopupFill;
00429 UINT HistoryBufferSize;
00430 UINT NumberOfHistoryBuffers;
00431 BOOL HistoryNoDup;
00432 COLORREF
ColorTable[ 16 ];
00433 LONGLONG
LastWriteTime;
00434
#if defined(FE_SB) // scotthsu
00435
DWORD CodePage;
00436
#endif
00437
}
CONSOLE_REGISTRY_INFO, *
PCONSOLE_REGISTRY_INFO;
00438
00439
00440
00441
00442
00443
00444 #define CONSOLE_WINDOW_CLASS (L"ConsoleWindowClass")
00445
00446 #define CONSOLE_MAX_APP_SHORTCUTS 1
00447
00448
00449
00450
00451
00452
00453
00454 typedef struct _CONSOLE_PROCESS_TERMINATION_RECORD {
00455 HANDLE
ProcessHandle;
00456 ULONG
TerminateCount;
00457 BOOL bDebugee;
00458 LPTHREAD_START_ROUTINE
CtrlRoutine;
00459 }
CONSOLE_PROCESS_TERMINATION_RECORD, *
PCONSOLE_PROCESS_TERMINATION_RECORD;
00460
00461
00462
00463
00464
00465
00466
00467 #define STACK_BUFFER_SIZE 132
00468
00469
00470
00471
00472
00473
00474 #define LINK_PROP_MAIN_SIG 0x00000001
00475 #define LINK_PROP_NT_CONSOLE_SIG 0x00000002
00476
00477
#if 0 // no one currently uses this...
00478
typedef struct {
00479
00480 WCHAR pszLinkName[
MAX_PATH ];
00481 WCHAR pszName[
MAX_PATH ];
00482 WCHAR pszRelPath[
MAX_PATH ];
00483 WCHAR pszWorkingDir[
MAX_PATH ];
00484 WCHAR pszArgs[
MAX_PATH ];
00485 WCHAR pszIconLocation[
MAX_PATH ];
00486
int iIcon;
00487
int iShowCmd;
00488
int wHotKey;
00489
00490 } LNKPROPMAIN, * LPLNKPROPMAIN;
00491
#endif
00492
00493
#ifndef _USERKDX_
00494 typedef struct {
00495
00496 WCHAR pszName[
MAX_PATH ];
00497 WCHAR pszIconLocation[
MAX_PATH ];
00498 UINT uIcon;
00499 UINT uShowCmd;
00500 UINT uHotKey;
00501 NT_CONSOLE_PROPS console_props;
00502
#ifdef FE_SB
00503
NT_FE_CONSOLE_PROPS fe_console_props;
00504
#endif
00505
00506
00507 }
LNKPROPNTCONSOLE, *
LPLNKPROPNTCONSOLE;
00508
#endif
00509
00510
#ifndef _USERKDX_
00511 typedef struct {
00512 LPWSTR pszCurFile;
00513 LPWSTR pszRelSource;
00514
00515 LPWSTR pszName;
00516 LPWSTR pszRelPath;
00517 LPWSTR pszWorkingDir;
00518 LPWSTR pszArgs;
00519 LPWSTR pszIconLocation;
00520
00521 LPSTR pExtraData;
00522
00523 SHELL_LINK_DATA sld;
00524 }
CShellLink;
00525
#endif
00526