/*++ Copyright (c) 1985 - 1999, Microsoft Corporation Module Name: condll.h Abstract: This module contains the include files and definitions for the console client DLL. Author: Therese Stowell (thereses) 16-Nov-1990 Revision History: --*/ #include #include #include //Don't include this when building wow64 type/function database. #if !defined(SORTPP_PASS) #include #endif #include // temporary #include #include "conapi.h" #include "ntcsrdll.h" #include "conmsg.h" #include #if defined(BUILD_WOW64) #define SET_CONSOLE_HANDLE(HANDLE) (Wow64SetConsoleHandle(HANDLE)) #define GET_CONSOLE_HANDLE (Wow64GetConsoleHandle()) #define SET_LAST_ERROR(ERROR) (Wow64SetLastError(ERROR) ) #define SET_LAST_NT_ERROR(ERROR) (Wow64SetLastError(RtlNtStatusToDosError( ERROR )) ) #include "ntwow64c.h" #else #define SET_CONSOLE_HANDLE(HANDLE) ((NtCurrentPeb())->ProcessParameters->ConsoleHandle = HANDLE) #define GET_CONSOLE_HANDLE ((NtCurrentPeb())->ProcessParameters->ConsoleHandle) #define SET_LAST_ERROR(ERROR) (SetLastError( ERROR ) ) #define SET_LAST_NT_ERROR(ERROR) (SetLastError( RtlNtStatusToDosError( ERROR ) ) ) #endif #define VALID_ACCESSES (GENERIC_READ | GENERIC_WRITE) #define VALID_SHARE_ACCESSES (FILE_SHARE_READ | FILE_SHARE_WRITE) #define VALID_DUP_OPTIONS (DUPLICATE_CLOSE_SOURCE | DUPLICATE_SAME_ACCESS) #define CONSOLE_RECT_SIZE_X(RECT) ((RECT)->Right - (RECT)->Left + 1) #define CONSOLE_RECT_SIZE_Y(RECT) ((RECT)->Bottom - (RECT)->Top + 1) // // this critical section is used to serialize access to the code that // accesses the ctrl handler data structures and the code that allocs // and frees consoles. // CRITICAL_SECTION DllLock; #define LockDll() RtlEnterCriticalSection(&DllLock) #define UnlockDll() RtlLeaveCriticalSection(&DllLock) NTSTATUS InitializeCtrlHandling( VOID ); VOID InitExeName( VOID ); USHORT GetCurrentExeName( LPWSTR Buffer, ULONG BufferLength ); HANDLE APIENTRY OpenConsoleWInternal( IN ULONG HandleType, IN ULONG DesiredAccess, IN BOOL InheritHandle, IN ULONG ShareMode ); BOOL APIENTRY ReadConsoleInternal( IN HANDLE hConsoleInput, OUT LPVOID lpBuffer, IN DWORD nNumberOfCharsToRead, OUT LPDWORD lpNumberOfCharsRead, IN OUT LPVOID lpReserved, IN BOOLEAN Unicode, IN USHORT ExeNameLength, IN LPWSTR ExeName ); BOOL APIENTRY WriteConsoleInternal( IN HANDLE hConsoleOutput, IN CONST VOID *lpBuffer, IN DWORD nNumberOfCharsToWrite, OUT LPDWORD lpNumberOfCharsWritten, IN BOOLEAN Unicode ); BOOL APIENTRY RegisterConsoleIMEInternal( IN HWND hWndConsoleIME, IN DWORD dwConsoleIMEThreadId, IN DWORD DesktopLength, IN LPWSTR Desktop, OUT DWORD *dwConsoleThreadId ); BOOL APIENTRY UnregisterConsoleIMEInternal( IN DWORD dwConsoleIMEThtreadId ); BOOL APIENTRY GetConsoleInput( IN HANDLE hConsoleInput, OUT PINPUT_RECORD lpBuffer, IN DWORD nLength, OUT LPDWORD lpNumberOfEventsRead, IN USHORT wFlags, IN BOOLEAN Unicode ); BOOL APIENTRY WriteConsoleInputInternal( IN HANDLE hConsoleInput, IN CONST INPUT_RECORD *lpBuffer, IN DWORD nLength, OUT LPDWORD lpNumberOfEventsWritten, IN BOOLEAN Unicode, IN BOOLEAN Append ); BOOL APIENTRY ReadConsoleOutputInternal( IN HANDLE hConsoleOutput, OUT PCHAR_INFO lpBuffer, IN COORD dwBufferSize, IN COORD dwBufferCoord, IN OUT PSMALL_RECT lpReadRegion, IN BOOLEAN Unicode ); BOOL APIENTRY WriteConsoleOutputInternal( IN HANDLE hConsoleOutput, IN CONST CHAR_INFO *lpBuffer, IN COORD dwBufferSize, IN COORD dwBufferCoord, IN PSMALL_RECT lpWriteRegion, IN BOOLEAN Unicode ); BOOL APIENTRY ReadConsoleOutputString( IN HANDLE hConsoleOutput, OUT LPVOID lpString, IN DWORD nLength, IN DWORD nSize, IN DWORD fFlags, IN COORD dwReadCoord, OUT LPDWORD lpNumberOfElementsRead ); BOOL APIENTRY WriteConsoleOutputString( IN HANDLE hConsoleOutput, IN CONST VOID *lpString, IN DWORD nLength, IN DWORD nSize, IN DWORD fFlags, IN COORD dwWriteCoord, OUT LPDWORD lpNumberOfElementsWritten ); BOOL APIENTRY FillConsoleOutput( IN HANDLE hConsoleOutput, IN WORD Element, IN DWORD nLength, IN DWORD fFlags, IN COORD dwWriteCoord, OUT LPDWORD lpNumberOfElementsWritten ); BOOL APIENTRY GetConsoleKeyboardLayoutNameWorker( OUT LPSTR pszLayout, IN BOOL bAnsi); BOOL APIENTRY SetConsolePaletteInternal( IN HANDLE hConsoleOutput, IN HPALETTE hPalette, IN UINT dwUsage ); BOOL APIENTRY ScrollConsoleScreenBufferInternal( IN HANDLE hConsoleOutput, IN CONST SMALL_RECT *lpScrollRectangle, IN CONST SMALL_RECT *lpClipRectangle, IN COORD dwDestinationOrigin, IN CONST CHAR_INFO *lpFill, IN BOOLEAN Unicode ); NTSTATUS APIENTRY SetConsoleOutputCPInternal( IN UINT wCodePageID ); VOID APIENTRY SetLastConsoleEventActiveInternal( VOID ); BOOL APIENTRY ConnectConsoleInternal( IN PWSTR pObjectDirectory, IN OUT PCONSOLE_API_CONNECTINFO pConnectInfo, OUT PBOOLEAN pServerProcess ); BOOL APIENTRY AllocConsoleInternal( IN LPWSTR lpTitle, IN DWORD dwTitleLength, IN LPWSTR lpDesktop, IN DWORD dwDesktopLength, IN LPWSTR lpCurDir, IN DWORD dwCurDirLength, IN LPWSTR AppName, IN DWORD dwAppNameLength, IN LPTHREAD_START_ROUTINE CtrlRoutine, IN LPTHREAD_START_ROUTINE PropRoutine, IN OUT PCONSOLE_INFO pConsoleInfo ); BOOL APIENTRY FreeConsoleInternal( VOID ); BOOL APIENTRY AttachConsoleInternal( IN DWORD dwProcessId, IN LPTHREAD_START_ROUTINE CtrlRoutine, IN LPTHREAD_START_ROUTINE PropRoutine, IN OUT PCONSOLE_INFO pConsoleInfo ); BOOL WINAPI GetConsoleLangId( OUT LANGID *lpLangId ); BOOL APIENTRY AddConsoleAliasInternal( IN LPVOID Source, IN UINT SourceLength, IN LPVOID Target, IN UINT TargetLength, IN LPVOID ExeName, IN BOOLEAN Unicode ); DWORD APIENTRY GetConsoleAliasInternal( IN LPVOID Source, IN UINT SourceLength, OUT LPVOID TargetBuffer, IN UINT TargetBufferLength, IN LPVOID ExeName, IN BOOLEAN Unicode ); DWORD APIENTRY GetConsoleAliasesLengthInternal( IN LPVOID ExeName, IN BOOLEAN Unicode ); DWORD APIENTRY GetConsoleAliasExesLengthInternal( IN BOOLEAN Unicode ); DWORD APIENTRY GetConsoleAliasesInternal( OUT LPVOID AliasBuffer, IN DWORD AliasBufferLength, IN LPVOID ExeName, IN BOOLEAN Unicode ); DWORD APIENTRY GetConsoleAliasExesInternal( OUT LPVOID ExeNameBuffer, IN DWORD ExeNameBufferLength, IN BOOLEAN Unicode ); VOID APIENTRY ExpungeConsoleCommandHistoryInternal( IN LPVOID ExeName, IN BOOLEAN Unicode ); BOOL APIENTRY SetConsoleNumberOfCommandsInternal( IN DWORD Number, IN LPVOID ExeName, IN BOOLEAN Unicode ); DWORD APIENTRY GetConsoleCommandHistoryLengthInternal( IN LPVOID ExeName, IN BOOLEAN Unicode ); DWORD APIENTRY GetConsoleCommandHistoryInternal( OUT LPVOID Commands, IN DWORD CommandBufferLength, IN LPVOID ExeName, IN BOOLEAN Unicode ); DWORD APIENTRY GetConsoleTitleInternal( OUT PVOID lpConsoleTitle, IN DWORD nSize, IN BOOLEAN Unicode ); BOOL APIENTRY SetConsoleTitleInternal( IN CONST VOID *lpConsoleTitle, IN DWORD TitleLength, // in bytes IN BOOLEAN Unicode ); VOID SetTEBLangID( VOID );