[NTVDM] Deduplicate IsConsoleHandle() using the correct version pointed by Hermès. #179

This commit is contained in:
Amine Khaldi 2017-12-23 23:56:04 +01:00
parent 3d93998d6e
commit 9716814879
3 changed files with 25 additions and 24 deletions

View file

@ -500,6 +500,30 @@ ConsoleCleanup(VOID)
if (ConsoleInput != INVALID_HANDLE_VALUE) CloseHandle(ConsoleInput); if (ConsoleInput != INVALID_HANDLE_VALUE) CloseHandle(ConsoleInput);
} }
BOOL IsConsoleHandle(HANDLE hHandle)
{
DWORD dwMode;
/* Check whether the handle may be that of a console... */
if ((GetFileType(hHandle) & ~FILE_TYPE_REMOTE) != FILE_TYPE_CHAR)
return FALSE;
/*
* It may be. Perform another test... The idea comes from the
* MSDN description of the WriteConsole API:
*
* "WriteConsole fails if it is used with a standard handle
* that is redirected to a file. If an application processes
* multilingual output that can be redirected, determine whether
* the output handle is a console handle (one method is to call
* the GetConsoleMode function and check whether it succeeds).
* If the handle is a console handle, call WriteConsole. If the
* handle is not a console handle, the output is redirected and
* you should call WriteFile to perform the I/O."
*/
return GetConsoleMode(hHandle, &dwMode);
}
VOID MenuEventHandler(PMENU_EVENT_RECORD MenuEvent) VOID MenuEventHandler(PMENU_EVENT_RECORD MenuEvent)
{ {
switch (MenuEvent->dwCommandId) switch (MenuEvent->dwCommandId)

View file

@ -436,30 +436,6 @@ static VOID DetachFromConsoleInternal(VOID)
TextFramebuffer = NULL; TextFramebuffer = NULL;
} }
static BOOL IsConsoleHandle(HANDLE hHandle)
{
DWORD dwMode;
/* Check whether the handle may be that of a console... */
if ((GetFileType(hHandle) & ~FILE_TYPE_REMOTE) != FILE_TYPE_CHAR)
return FALSE;
/*
* It may be. Perform another test... The idea comes from the
* MSDN description of the WriteConsole API:
*
* "WriteConsole fails if it is used with a standard handle
* that is redirected to a file. If an application processes
* multilingual output that can be redirected, determine whether
* the output handle is a console handle (one method is to call
* the GetConsoleMode function and check whether it succeeds).
* If the handle is a console handle, call WriteConsole. If the
* handle is not a console handle, the output is redirected and
* you should call WriteFile to perform the I/O."
*/
return GetConsoleMode(hHandle, &dwMode);
}
static VOID SetActiveScreenBuffer(HANDLE ScreenBuffer) static VOID SetActiveScreenBuffer(HANDLE ScreenBuffer)
{ {
ASSERT(ScreenBuffer); ASSERT(ScreenBuffer);

View file

@ -103,6 +103,7 @@ UpdateVdmMenuDisks(VOID);
BOOL ConsoleAttach(VOID); BOOL ConsoleAttach(VOID);
VOID ConsoleDetach(VOID); VOID ConsoleDetach(VOID);
VOID ConsoleReattach(HANDLE ConOutHandle); VOID ConsoleReattach(HANDLE ConOutHandle);
BOOL IsConsoleHandle(HANDLE hHandle);
VOID MenuEventHandler(PMENU_EVENT_RECORD MenuEvent); VOID MenuEventHandler(PMENU_EVENT_RECORD MenuEvent);
VOID FocusEventHandler(PFOCUS_EVENT_RECORD FocusEvent); VOID FocusEventHandler(PFOCUS_EVENT_RECORD FocusEvent);