41 static BOOL AlreadyDisplayingProps =
FALSE;
51 if (lpThreadParameter)
57 AlreadyDisplayingProps =
TRUE;
61 wcscat(szBuffer,
L"\\console.dll");
63 if (hConsoleApplet ==
NULL)
65 DPRINT1(
"Failed to load console.dll\n");
74 DPRINT1(
"Error: console.dll misses CPlApplet export\n");
82 DPRINT1(
"Error: failed to initialize console.dll\n");
90 DPRINT1(
"Error: console.dll returned unexpected CPL count\n");
107 AlreadyDisplayingProps =
FALSE;
116 DPRINT(
"ParseShellInfo is UNIMPLEMENTED\n");
146 ConsoleStartInfo->IconIndex = 0;
147 ConsoleStartInfo->hIcon =
NULL;
148 ConsoleStartInfo->hIconSm =
NULL;
149 ConsoleStartInfo->dwStartupFlags =
Parameters->WindowFlags;
150 ConsoleStartInfo->nFont = 0;
151 ConsoleStartInfo->nInputBufferSize = 0;
152 ConsoleStartInfo->uCodePage =
GetOEMCP();
209 if (lpDesktop) *lpDesktop =
NULL;
214 ConsoleStartInfo->wFillAttribute = (
WORD)
Parameters->FillAttribute;
218 ConsoleStartInfo->dwScreenBufferSize.X = (
SHORT)
Parameters->CountCharsX;
219 ConsoleStartInfo->dwScreenBufferSize.Y = (
SHORT)
Parameters->CountCharsY;
223 ConsoleStartInfo->wShowWindow = (
WORD)
Parameters->ShowWindowFlags;
241 if ((
Parameters->WindowFlags & STARTF_USEHOTKEY) == 0)
254 if (ConsoleStartInfo->dwStartupFlags & STARTF_USEHOTKEY)
264 Parameters->ConsoleHandle = ConsoleStartInfo->ConsoleHandle;
268 Parameters->StandardInput = ConsoleStartInfo->InputHandle;
269 Parameters->StandardOutput = ConsoleStartInfo->OutputHandle;
270 Parameters->StandardError = ConsoleStartInfo->ErrorHandle;
290 ULONG ConnectInfoSize =
sizeof(*ConnectInfo);
295 DPRINT(
"Connecting to the Console Server...\n");
303 DPRINT1(
"Failed to connect to the Console Server (Status %lx)\n",
Status);
308 if (*InServerProcess)
return TRUE;
311 if (!ConnectInfo->IsConsoleApp)
return TRUE;
316 ConnectInfo->ConsoleStartInfo.InitEvents,
366 DPRINT(
"ConDllInitialize for: %wZ\n" 367 "Our current console handles are: 0x%p, 0x%p, 0x%p 0x%p\n",
387 DPRINT(
"Image is not a console application\n");
396 DPRINT(
"No console to create\n");
408 DPRINT(
"Creating a new separate console\n");
418 DPRINT(
"Creating a new invisible console\n");
466 DPRINT(
"ConsoleTitle = '%S' - Desktop = '%S'\n",
467 ConsoleTitle, ConnectInfo.
Desktop);
491 DPRINT(
"CurDir = '%S' - AppName = '%S'\n",
528 DPRINT(
"Console setup: 0x%p, 0x%p, 0x%p, 0x%p\n",
_In_ ULONG _In_ ULONG _In_ ULONG Length
VOID SetTEBLangID(VOID)
Internal helper function used to synchronize the current thread's language ID with the one from the c...
_Must_inspect_result_ _In_ WDFQUEUE _In_opt_ WDFREQUEST _In_opt_ WDFFILEOBJECT _Inout_opt_ PWDF_REQUEST_PARAMETERS Parameters
CONSOLE_START_INFO ConsoleStartInfo
#define HANDLE_DETACHED_PROCESS
#define HANDLE_CREATE_NO_WINDOW
#define DLL_THREAD_ATTACH
LONG(APIENTRY * APPLET_PROC)(HWND, UINT, LPARAM, LPARAM)
BOOLEAN ConsoleInitialized
static CHAR AppName[MAX_PATH]
#define STARTF_USEFILLATTRIBUTE
#define STARTF_USEPOSITION
NTSTATUS NTAPI NtWaitForMultipleObjects(IN ULONG ObjectCount, IN PHANDLE HandleArray, IN WAIT_TYPE WaitType, IN BOOLEAN Alertable, IN PLARGE_INTEGER TimeOut OPTIONAL)
#define DLL_PROCESS_ATTACH
VOID InitializeCtrlHandling(VOID)
static INT ParseShellInfo(LPCWSTR lpszShellInfo, LPCWSTR lpszKeyword)
VOID SetUpAppName(IN BOOLEAN CaptureStrings, IN OUT LPDWORD CurDirLength, IN OUT LPWSTR *CurDir, IN OUT LPDWORD AppNameLength, IN OUT LPWSTR *AppName)
LPTHREAD_START_ROUTINE CtrlRoutine
#define STARTF_SHELLPRIVATE
#define IMAGE_SUBSYSTEM_WINDOWS_CUI
VOID SetUpHandles(IN PCONSOLE_START_INFO ConsoleStartInfo)
DWORD BaseSetLastNTError(IN NTSTATUS Status)
#define STARTF_USESHOWWINDOW
VOID SetUpConsoleInfo(IN BOOLEAN CaptureTitle, IN OUT LPDWORD pTitleLength, IN OUT LPWSTR *lpTitle OPTIONAL, IN OUT LPDWORD pDesktopLength, IN OUT LPWSTR *lpDesktop OPTIONAL, IN OUT PCONSOLE_START_INFO ConsoleStartInfo)
#define DLL_PROCESS_DETACH
DWORD WINAPI PropDialogHandler(IN LPVOID lpThreadParameter)
#define STARTF_USESTDHANDLES
#define HANDLE_CREATE_NEW_CONSOLE
static const WCHAR Title[]
NTSYSAPI NTSTATUS NTAPI RtlInitializeCriticalSection(_In_ PRTL_CRITICAL_SECTION CriticalSection)
#define NT_SUCCESS(StatCode)
static BOOLEAN IsConsoleApp(VOID)
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
#define STATUS_UNSUCCESSFUL
static BOOLEAN ConnectConsole(IN PWSTR SessionDir, IN PCONSRV_API_CONNECTINFO ConnectInfo, OUT PBOOLEAN InServerProcess)
LPTHREAD_START_ROUTINE PropRoutine
static const PWSTR DefaultConsoleTitle
WCHAR ConsoleTitle[MAX_PATH+1]
#define STARTF_USECOUNTCHARS
BOOLEAN WINAPI ConDllInitialize(IN ULONG Reason, IN PWSTR SessionDir)
UINT WINAPI GetSystemDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
_CRTIMP wchar_t *__cdecl wcscat(_Inout_updates_z_(_String_length_(_Dest)+_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
RTL_CRITICAL_SECTION ConsoleLock
DWORD WINAPI ConsoleControlDispatcher(IN LPVOID lpThreadParameter)
PIMAGE_NT_HEADERS WINAPI ImageNtHeader(_In_ PVOID)
#define GetProcAddress(x, y)
#define RtlCopyMemory(Destination, Source, Length)
NTSYSAPI NTSTATUS NTAPI RtlDeleteCriticalSection(_In_ PRTL_CRITICAL_SECTION CriticalSection)
PVOID PVOID PWCHAR PVOID USHORT PULONG Reason
NTSTATUS NTAPI CsrClientConnectToServer(IN PWSTR ObjectDirectory, IN ULONG ServerId, IN PVOID ConnectionInfo, IN OUT PULONG ConnectionInfoSize, OUT PBOOLEAN ServerToServerCall)
#define CONSRV_SERVERDLL_INDEX
struct CPlApplet CPlApplet
UINT WINAPI GetOEMCP(VOID)
PULONG MinorVersion OPTIONAL