Leaked source code of windows server 2003
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.
|
|
/*++
Copyright (c) 1985 - 1999, Microsoft Corporation
Module Name:
server.h
Abstract:
This module contains the internal structures and definitions used by the console server.
Author:
Therese Stowell (thereses) 12-Nov-1990
Revision History:
--*/
#ifndef _SERVER_H_
#define _SERVER_H_
//
// This message is used to notify the input thread that a console window should
// go away.
//
typedef struct _CONSOLE_SHARE_ACCESS { ULONG OpenCount; ULONG Readers; ULONG Writers; ULONG SharedRead; ULONG SharedWrite; } CONSOLE_SHARE_ACCESS, *PCONSOLE_SHARE_ACCESS;
#include "input.h"
#include "output.h"
#if defined(FE_IME)
#include "conime.h"
#include "convarea.h"
#endif
typedef struct _CONSOLE_PROCESS_HANDLE { LIST_ENTRY ListLink; HANDLE ProcessHandle; PCSR_PROCESS Process; ULONG TerminateCount; LPTHREAD_START_ROUTINE CtrlRoutine; LPTHREAD_START_ROUTINE PropRoutine; } CONSOLE_PROCESS_HANDLE, *PCONSOLE_PROCESS_HANDLE;
typedef struct _INPUT_THREAD_INFO { HANDLE ThreadHandle; DWORD ThreadId; HDESK Desktop; HWINSTA WindowStation; ULONG WindowCount; #if defined(FE_IME)
HWND hWndConsoleIME; #endif
} INPUT_THREAD_INFO, *PINPUT_THREAD_INFO;
typedef struct _INPUT_THREAD_INIT_INFO { HANDLE ThreadHandle; HANDLE InitCompleteEventHandle; HDESK DesktopHandle; HWINSTA WinstaHandle; NTSTATUS InitStatus; } INPUT_THREAD_INIT_INFO, *PINPUT_THREAD_INIT_INFO;
typedef struct _CONSOLE_MSG { LIST_ENTRY ListLink; UINT Message; WPARAM wParam; LPARAM lParam; } CONSOLE_MSG, *PCONSOLE_MSG;
typedef struct _CONSOLE_THREAD_MSG { CONSOLE_MSG; DWORD dwThreadId; } CONSOLE_THREAD_MSG, *PCONSOLE_THREAD_MSG;
// Flags flags
#define CONSOLE_IS_ICONIC 0x00000001
#define CONSOLE_OUTPUT_SUSPENDED 0x00000002
#define CONSOLE_HAS_FOCUS 0x00000004
#define CONSOLE_IGNORE_NEXT_MOUSE_INPUT 0x00000008
#define CONSOLE_SELECTING 0x00000010
#define CONSOLE_SCROLLING 0x00000020
#define CONSOLE_DISABLE_CLOSE 0x00000040
#define CONSOLE_NOTIFY_LAST_CLOSE 0x00000080
#define CONSOLE_NO_WINDOW 0x00000100
#define CONSOLE_VDM_REGISTERED 0x00000200
#define CONSOLE_UPDATING_SCROLL_BARS 0x00000400
#define CONSOLE_QUICK_EDIT_MODE 0x00000800
#define CONSOLE_TERMINATING 0x00001000
#define CONSOLE_CONNECTED_TO_EMULATOR 0x00002000
#define CONSOLE_FULLSCREEN_NOPAINT 0x00004000
#define CONSOLE_SHUTTING_DOWN 0x00008000
#define CONSOLE_AUTO_POSITION 0x00010000
#define CONSOLE_IGNORE_NEXT_KEYUP 0x00020000
#define CONSOLE_WOW_REGISTERED 0x00040000
#define CONSOLE_USE_PRIVATE_FLAGS 0x00080000
#define CONSOLE_HISTORY_NODUP 0x00100000
#define CONSOLE_SCROLLBAR_TRACKING 0x00200000
#define CONSOLE_IN_DESTRUCTION 0x00400000
#define CONSOLE_SETTING_WINDOW_SIZE 0x00800000
#define CONSOLE_DEFAULT_BUFFER_SIZE 0x01000000
#define CONSOLE_VDM_HIDDEN_WINDOW 0x02000000
#if defined(FE_SB)
#define CONSOLE_OS2_REGISTERED 0x20000000
#define CONSOLE_OS2_OEM_FORMAT 0x40000000
#if defined(FE_IME)
#define CONSOLE_JUST_VDM_UNREGISTERED 0x80000000
#endif // FE_IME
#endif
#define CONSOLE_SUSPENDED (CONSOLE_OUTPUT_SUSPENDED)
#if DBG
typedef struct _CONSOLE_REF_NODE { struct _CONSOLE_REF_NODE *pNext;
PVOID pStackTrace[8]; BOOL bRef; } CONSOLE_REF_NODE, *PCONSOLE_REF_NODE; #endif
typedef struct _CONSOLE_INFORMATION { CRITICAL_SECTION ConsoleLock; // serialize input and output using this
ULONG RefCount; ULONG WaitCount; INPUT_INFORMATION InputBuffer; PSCREEN_INFORMATION CurrentScreenBuffer; PSCREEN_INFORMATION ScreenBuffers; // singly linked list
HWINSTA hWinSta; // server handle to windowstation
HDESK hDesk; // server handle to desktop
HWND hWnd; HKL hklActive; // keyboard layout for this console window
HDC hDC; // server side hDC
HMENU hMenu; // handle to system menu
HMENU hHeirMenu; // handle to menu we append to system menu
HPALETTE hSysPalette; RECT WindowRect; DWORD ResizeFlags; LIST_ENTRY OutputQueue; HANDLE InitEvents[NUMBER_OF_INITIALIZATION_EVENTS]; HANDLE ClientThreadHandle; LIST_ENTRY ProcessHandleList; LIST_ENTRY CommandHistoryList; LIST_ENTRY ExeAliasList; SHORT NumCommandHistories; SHORT MaxCommandHistories; SHORT CommandHistorySize; USHORT OriginalTitleLength; USHORT TitleLength; LPWSTR OriginalTitle; LPWSTR Title; DWORD dwHotKey; HICON hIcon; HICON hSmIcon; INT iIconId; WORD LastAttributes; BYTE ReserveKeys; // keys reserved by app (i.e. ctrl-esc)
DWORD Flags;
// if a wait has been satisfied, the pointer to the wait queue is stored
// here.
PLIST_ENTRY WaitQueue;
// the following fields are used for selection
DWORD SelectionFlags; SMALL_RECT SelectionRect; COORD SelectionAnchor; COORD TextCursorPosition; // current position on screen (in screen buffer coords).
ULONG TextCursorSize; BOOLEAN TextCursorVisible; // whether cursor is visible (set by user)
BOOLEAN InsertMode; // used by command line editing
// following fields are used when window is created
WORD wShowWindow; int dwWindowOriginX; int dwWindowOriginY;
WORD FullScreenFlags; WORD PopupCount;
// following fields are used for the VDM
HANDLE VDMStartHardwareEvent; HANDLE VDMEndHardwareEvent; HANDLE VDMErrorHardwareEvent; HANDLE VDMProcessHandle; HANDLE VDMProcessId;
HANDLE VDMBufferSectionHandle; PCHAR_INFO VDMBuffer; PCHAR_INFO VDMBufferClient; COORD VDMBufferSize;
HANDLE StateSectionHandle; // used for get/sethardwarestate
PVOID StateBuffer; PVOID StateBufferClient; DWORD StateLength;
// the following fields are used for ansi-unicode translation
UINT CP; UINT OutputCP;
//
// these two fields are used while getting the icon from the
// program manager via DDE.
//
HWND hWndProgMan; BOOL bIconInit;
HANDLE ConsoleHandle;
ULONG CtrlFlags; // indicates outstanding ctrl requests
ULONG LimitingProcessId; HANDLE TerminationEvent;
SHORT VerticalClientToWindow; SHORT HorizontalClientToWindow;
COLORREF ColorTable[ 16 ]; HANDLE hProcessLastNotifyClose; // process handle of last-close-notify
HANDLE ProcessIdLastNotifyClose; // process unique id of last-close-notify
HWND hWndProperties;
PINPUT_THREAD_INFO InputThreadInfo; // console thread info
LIST_ENTRY MessageQueue;
#if defined(FE_SB)
CPINFO CPInfo; CPINFO OutputCPInfo;
DWORD ReadConInpNumBytesUnicode; DWORD ReadConInpNumBytesTemp;
DWORD WriteConOutNumBytesUnicode; DWORD WriteConOutNumBytesTemp;
PVOID lpCookedReadData; // Same as PCOOKED_READ_DATA
PVOID EudcInformation; // Same as PEUDC_INFORMATION
PVOID FontCacheInformation; // Same as PFONT_CACHE_INFORMATION
#if defined(FE_IME)
CONSOLE_IME_INFORMATION ConsoleIme; #endif // FE_IME
HDC FonthDC; // Double colored DBCS hDC
HBITMAP hBitmap; #if defined(i386)
SMALL_RECT Os2SavedWindowRect; #endif
BOOLEAN fVDMVideoMode; // FALSE : VGA Format
// TRUE : Common LVB Format
BOOLEAN fIsDBCSCP; BOOLEAN fIsDBCSOutputCP; #endif
/*
* Instrumentation for Windows Bug 499641. */ #if DBG
PVOID ConnectStack[16]; PVOID DisconnectStack[16]; PCONSOLE_REF_NODE pRefNodes; #endif
HANDLE UnlockConsoleOwningThread; DWORD UnlockConsoleSkipCount; } CONSOLE_INFORMATION, *PCONSOLE_INFORMATION;
//
// CtrlFlags definitions
//
#define CONSOLE_CTRL_C_FLAG 1
#define CONSOLE_CTRL_BREAK_FLAG 2
#define CONSOLE_CTRL_CLOSE_FLAG 4
#define CONSOLE_FORCE_SHUTDOWN_FLAG 8
#define CONSOLE_CTRL_LOGOFF_FLAG 16
#define CONSOLE_CTRL_SHUTDOWN_FLAG 32
#define ADD_SCROLL_BARS_X 0x1
#define REMOVE_SCROLL_BARS_X 0x2
#define ADD_SCROLL_BARS_Y 0x4
#define REMOVE_SCROLL_BARS_Y 0x8
#define RESIZE_SCROLL_BARS 0x10
#define SCROLL_BAR_CHANGE (ADD_SCROLL_BARS_X | REMOVE_SCROLL_BARS_X | ADD_SCROLL_BARS_Y | REMOVE_SCROLL_BARS_Y | RESIZE_SCROLL_BARS)
#define BORDER_CHANGE 0x20
#define SCREEN_BUFFER_CHANGE 0x40
#define CONSOLE_INITIAL_IO_HANDLES 3
#define CONSOLE_IO_HANDLE_INCREMENT 3
#define CONSOLE_FREE_HANDLE 0
//#define CONSOLE_INPUT_HANDLE 1
//#define CONSOLE_OUTPUT_HANDLE 2
#define CONSOLE_GRAPHICS_OUTPUT_HANDLE 4
#define CONSOLE_INHERITABLE 8
#define CONSOLE_ANY_HANDLE ((ULONG)(-1))
//
// input handle flags
//
#define HANDLE_CLOSING 1
#define HANDLE_INPUT_PENDING 2
#define HANDLE_MULTI_LINE_INPUT 4
typedef struct _HANDLE_DATA { ULONG HandleType; ACCESS_MASK Access; ULONG ShareAccess; union { PSCREEN_INFORMATION ScreenBuffer; PINPUT_INFORMATION InputBuffer; } Buffer; PINPUT_READ_HANDLE_DATA InputReadData; // used only by input reads
} HANDLE_DATA, *PHANDLE_DATA;
typedef struct _CONSOLE_PER_PROCESS_DATA { HANDLE ConsoleHandle; HANDLE_DATA HandleTable[CONSOLE_INITIAL_IO_HANDLES]; ULONG HandleTableSize; PHANDLE_DATA HandleTablePtr; BOOLEAN ConsoleApp; BOOLEAN RootProcess; DWORD ParentProcessId; #if defined(FE_IME)
HDESK hDesk; HWINSTA hWinSta; #endif
} CONSOLE_PER_PROCESS_DATA, *PCONSOLE_PER_PROCESS_DATA;
#define CONSOLE_INITIAL_CONSOLES 10
#define CONSOLE_CONSOLE_HANDLE_INCREMENT 5
#define CONSOLE_HANDLE_ALLOCATED 1
#define INDEX_TO_HANDLE(INDEX) ((HANDLE)(((ULONG_PTR)INDEX << 2) | CONSOLE_HANDLE_SIGNATURE))
#define HANDLE_TO_INDEX(CONHANDLE) ((HANDLE)((ULONG_PTR)CONHANDLE >> 2))
#define INPUT_MODES (ENABLE_LINE_INPUT | ENABLE_PROCESSED_INPUT | ENABLE_ECHO_INPUT | ENABLE_WINDOW_INPUT | ENABLE_MOUSE_INPUT)
#define OUTPUT_MODES (ENABLE_PROCESSED_OUTPUT | ENABLE_WRAP_AT_EOL_OUTPUT)
#define PRIVATE_MODES (ENABLE_INSERT_MODE | ENABLE_QUICK_EDIT_MODE | ENABLE_PRIVATE_FLAGS)
#define CURSOR_PERCENTAGE_TO_TOP_SCAN_LINE(FONTSIZE,PERCENTAGE) ((FONTSIZE) - ((FONTSIZE) * (PERCENTAGE) / 100))
#define ConsoleLocked(CONSOLEPTR) (((CONSOLEPTR)->ConsoleLock.OwningThread) == NtCurrentTeb()->ClientId.UniqueThread)
#define CONSOLE_STATUS_WAIT ((NTSTATUS)0xC0030001L)
#define CONSOLE_STATUS_READ_COMPLETE ((NTSTATUS)0xC0030002L)
#define CONSOLE_STATUS_WAIT_NO_BLOCK ((NTSTATUS)0xC0030003L)
#define CM_CREATE_CONSOLE_WINDOW (WM_USER+0)
#define CM_DESTROY_WINDOW (WM_USER+1)
#define CM_SET_WINDOW_SIZE (WM_USER+2)
#define CM_BEEP (WM_USER+3)
#define CM_UPDATE_SCROLL_BARS (WM_USER+4)
#define CM_UPDATE_TITLE (WM_USER+5)
//
// CM_MODE_TRANSITION is hard-coded to WM_USER+6 in kernel\winmgr.c
//
#define CM_MODE_TRANSITION (WM_USER+6)
#define CM_CONSOLE_SHUTDOWN (WM_USER+7)
#define CM_HIDE_WINDOW (WM_USER+8)
#if defined(FE_IME)
#define CM_CONIME_CREATE (WM_USER+9)
#define CM_SET_CONSOLEIME_WINDOW (WM_USER+10)
#define CM_WAIT_CONIME_PROCESS (WM_USER+11)
#define CM_SET_IME_CODEPAGE (WM_USER+12)
#define CM_SET_NLSMODE (WM_USER+13)
#define CM_GET_NLSMODE (WM_USER+14)
#define CM_CONIME_KL_ACTIVATE (WM_USER+15)
#endif
#define CM_CONSOLE_MSG (WM_USER+16)
#define CM_CONSOLE_INPUT_THREAD_MSG (WM_USER+17)
#define CONSOLE_CLIENTTHREADHANDLE(pcsrthread) ((pcsrthread)->ThreadHandle)
#define CONSOLE_CLIENTPROCESSHANDLE() \
((CSR_SERVER_QUERYCLIENTTHREAD())->Process->ProcessHandle)
#define CONSOLE_CLIENTPROCESSID() \
((CSR_SERVER_QUERYCLIENTTHREAD())->Process->ClientId.UniqueProcess)
#define CONSOLE_FROMPROCESSPROCESSHANDLE(pcsrprocess) \
((pcsrprocess)->ProcessHandle)
#define CONSOLE_FROMPROCESSPERPROCESSDATA(pcsrprocess) \
((pcsrprocess)->ServerDllPerProcessData[CONSRV_SERVERDLL_INDEX])
#define CONSOLE_FROMTHREADPERPROCESSDATA(pcsrthread) \
CONSOLE_FROMPROCESSPERPROCESSDATA((pcsrthread)->Process)
#define CONSOLE_PERPROCESSDATA() \
CONSOLE_FROMTHREADPERPROCESSDATA(CSR_SERVER_QUERYCLIENTTHREAD())
#define CONSOLE_GETCONSOLEAPP() (((PCONSOLE_PER_PROCESS_DATA)CONSOLE_PERPROCESSDATA())->ConsoleApp)
#define CONSOLE_GETCONSOLEAPPFROMPROCESSDATA(PROCESSDATA) ((PROCESSDATA)->ConsoleApp)
#define CONSOLE_SETCONSOLEAPP(VALUE) (((PCONSOLE_PER_PROCESS_DATA)CONSOLE_PERPROCESSDATA())->ConsoleApp = VALUE)
#define CONSOLE_SETCONSOLEAPPFROMPROCESSDATA(PROCESSDATA,VALUE) ((PROCESSDATA)->ConsoleApp = VALUE)
#define CONSOLE_GETCONSOLEHANDLE() (((PCONSOLE_PER_PROCESS_DATA)CONSOLE_PERPROCESSDATA())->ConsoleHandle)
#define CONSOLE_SETCONSOLEHANDLE(VALUE) (((PCONSOLE_PER_PROCESS_DATA)CONSOLE_PERPROCESSDATA())->ConsoleHandle = VALUE)
#define CONSOLE_GETCONSOLEHANDLEFROMPROCESSDATA(PROCESSDATA) ((PROCESSDATA)->ConsoleHandle)
#define CONSOLE_SETCONSOLEHANDLEFROMPROCESSDATA(PROCESSDATA,VALUE) ((PROCESSDATA)->ConsoleHandle = VALUE)
#endif
//
// registry information structure
//
typedef struct _CONSOLE_REGISTRY_INFO { COORD ScreenBufferSize; COORD WindowSize; COORD WindowOrigin; COORD FontSize; UINT FontFamily; UINT FontWeight; WCHAR FaceName[LF_FACESIZE]; UINT CursorSize; BOOL FullScreen; BOOL QuickEdit; BOOL InsertMode; BOOL AutoPosition; CHAR_INFO ScreenFill; CHAR_INFO PopupFill; UINT HistoryBufferSize; UINT NumberOfHistoryBuffers; BOOL HistoryNoDup; COLORREF ColorTable[ 16 ]; LONGLONG LastWriteTime; #if defined(FE_SB) // scotthsu
DWORD CodePage; #endif
} CONSOLE_REGISTRY_INFO, *PCONSOLE_REGISTRY_INFO;
//
// window class
//
#define CONSOLE_WINDOW_CLASS (L"ConsoleWindowClass")
#define CONSOLE_MAX_APP_SHORTCUTS 1
//
// this structure is used to store relevant information from the
// console for ctrl processing so we can do it without holding the
// console lock.
//
typedef struct _CONSOLE_PROCESS_TERMINATION_RECORD { HANDLE ProcessHandle; ULONG TerminateCount; BOOL bDebugee; LPTHREAD_START_ROUTINE CtrlRoutine; } CONSOLE_PROCESS_TERMINATION_RECORD, *PCONSOLE_PROCESS_TERMINATION_RECORD;
//
// this value is used to determine the size of stack buffers for
// strings. it should be long enough to contain the width of a
// normal screen buffer.
//
#define STACK_BUFFER_SIZE 132
//
// link information
//
#define LINK_PROP_MAIN_SIG 0x00000001
#define LINK_PROP_NT_CONSOLE_SIG 0x00000002
#if 0 // no one currently uses this...
typedef struct {
WCHAR pszLinkName[ MAX_PATH ]; WCHAR pszName[ MAX_PATH ]; WCHAR pszRelPath[ MAX_PATH ]; WCHAR pszWorkingDir[ MAX_PATH ]; WCHAR pszArgs[ MAX_PATH ]; WCHAR pszIconLocation[ MAX_PATH ]; int iIcon; int iShowCmd; int wHotKey;
} LNKPROPMAIN, * LPLNKPROPMAIN; #endif
#ifndef _USERKDX_ /* debugging extensions */
typedef struct {
WCHAR pszName[ MAX_PATH ]; WCHAR pszIconLocation[ MAX_PATH ]; UINT uIcon; UINT uShowCmd; UINT uHotKey; NT_CONSOLE_PROPS console_props; #ifdef FE_SB
NT_FE_CONSOLE_PROPS fe_console_props; #endif
} LNKPROPNTCONSOLE, *LPLNKPROPNTCONSOLE; #endif
#ifndef _USERKDX_ /* debugging extensions */
typedef struct { LPWSTR pszCurFile; // current file from IPersistFile
LPWSTR pszRelSource; // overrides pszCurFile in relative tracking
LPWSTR pszName; // title on short volumes
LPWSTR pszRelPath; LPWSTR pszWorkingDir; LPWSTR pszArgs; LPWSTR pszIconLocation;
LPSTR pExtraData; // extra data to preserve for future compatibility
SHELL_LINK_DATA sld; } CShellLink; #endif
|