*/
HMENU
WINAPI
+DECLSPEC_HOTPATCH
ConsoleMenuControl(HANDLE hConsoleOutput,
DWORD dwCmdIdLow,
DWORD dwCmdIdHigh)
*/
HANDLE
WINAPI
+DECLSPEC_HOTPATCH
DuplicateConsoleHandle(HANDLE hConsole,
DWORD dwDesiredAccess,
BOOL bInheritHandle,
/*
- * @unimplemented (Undocumented)
+ * @implemented (Undocumented)
+ * @note See http://cboard.cprogramming.com/windows-programming/102187-console-font-size.html
*/
DWORD
WINAPI
-GetConsoleFontInfo(HANDLE hConsoleOutput,
- BOOL bMaximumWindow,
- DWORD nFontCount,
- PCONSOLE_FONT_INFO lpConsoleFontInfo)
+GetConsoleFontInfo(IN HANDLE hConsoleOutput,
+ IN BOOL bMaximumWindow,
+ IN DWORD nFontCount,
+ OUT PCONSOLE_FONT_INFO lpConsoleFontInfo)
{
- DPRINT1("GetConsoleFontInfo(0x%p, %d, %lu, 0x%p) UNIMPLEMENTED!\n", hConsoleOutput, bMaximumWindow, nFontCount, lpConsoleFontInfo);
- SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
- return 0;
+ CONSOLE_API_MESSAGE ApiMessage;
+ PCONSOLE_GETFONTINFO GetFontInfoRequest = &ApiMessage.Data.GetFontInfoRequest;
+ PCSR_CAPTURE_BUFFER CaptureBuffer;
+
+ GetFontInfoRequest->ConsoleHandle = NtCurrentPeb()->ProcessParameters->ConsoleHandle;
+ GetFontInfoRequest->OutputHandle = hConsoleOutput;
+ GetFontInfoRequest->MaximumWindow = bMaximumWindow;
+ GetFontInfoRequest->NumFonts = nFontCount;
+
+ CaptureBuffer = CsrAllocateCaptureBuffer(1, nFontCount * sizeof(CONSOLE_FONT_INFO));
+ if (CaptureBuffer == NULL)
+ {
+ DPRINT1("CsrAllocateCaptureBuffer failed!\n");
+ SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+ return 0;
+ }
+
+ CsrAllocateMessagePointer(CaptureBuffer,
+ nFontCount * sizeof(CONSOLE_FONT_INFO),
+ (PVOID*)&GetFontInfoRequest->FontInfo);
+
+ CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
+ CaptureBuffer,
+ CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepGetFontInfo),
+ sizeof(*GetFontInfoRequest));
+ if (!NT_SUCCESS(ApiMessage.Status))
+ {
+ BaseSetLastNTError(ApiMessage.Status);
+ }
+ else
+ {
+ RtlCopyMemory(lpConsoleFontInfo,
+ GetFontInfoRequest->FontInfo,
+ GetFontInfoRequest->NumFonts * sizeof(CONSOLE_FONT_INFO));
+ }
+
+ CsrFreeCaptureBuffer(CaptureBuffer);
+ return GetFontInfoRequest->NumFonts;
}
/*
- * @unimplemented
+ * @implemented
*/
COORD
WINAPI
-GetConsoleFontSize(HANDLE hConsoleOutput,
- DWORD nFont)
+DECLSPEC_HOTPATCH
+GetConsoleFontSize(IN HANDLE hConsoleOutput,
+ IN DWORD nFont)
{
+ CONSOLE_API_MESSAGE ApiMessage;
+ PCONSOLE_GETFONTSIZE GetFontSizeRequest = &ApiMessage.Data.GetFontSizeRequest;
COORD Empty = {0, 0};
- DPRINT1("GetConsoleFontSize(0x%p, 0x%x) UNIMPLEMENTED!\n", hConsoleOutput, nFont);
- SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
- return Empty;
+
+ GetFontSizeRequest->ConsoleHandle = NtCurrentPeb()->ProcessParameters->ConsoleHandle;
+ GetFontSizeRequest->OutputHandle = hConsoleOutput;
+ GetFontSizeRequest->FontIndex = nFont;
+
+ CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
+ NULL,
+ CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepGetFontSize),
+ sizeof(*GetFontSizeRequest));
+ if (!NT_SUCCESS(ApiMessage.Status))
+ {
+ BaseSetLastNTError(ApiMessage.Status);
+ return Empty;
+ }
+
+ return GetFontSizeRequest->FontSize;
}
/*
- * @unimplemented
+ * @implemented
*/
BOOL
WINAPI
-GetCurrentConsoleFont(HANDLE hConsoleOutput,
- BOOL bMaximumWindow,
- PCONSOLE_FONT_INFO lpConsoleCurrentFont)
+GetCurrentConsoleFont(IN HANDLE hConsoleOutput,
+ IN BOOL bMaximumWindow,
+ OUT PCONSOLE_FONT_INFO lpConsoleCurrentFont)
{
- DPRINT1("GetCurrentConsoleFont(0x%p, 0x%x, 0x%p) UNIMPLEMENTED!\n", hConsoleOutput, bMaximumWindow, lpConsoleCurrentFont);
- SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
- return 0;
+ CONSOLE_API_MESSAGE ApiMessage;
+ PCONSOLE_GETCURRENTFONT GetCurrentFontRequest = &ApiMessage.Data.GetCurrentFontRequest;
+
+ GetCurrentFontRequest->ConsoleHandle = NtCurrentPeb()->ProcessParameters->ConsoleHandle;
+ GetCurrentFontRequest->OutputHandle = hConsoleOutput;
+ GetCurrentFontRequest->MaximumWindow = bMaximumWindow;
+
+ CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
+ NULL,
+ CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepGetCurrentFont),
+ sizeof(*GetCurrentFontRequest));
+ if (!NT_SUCCESS(ApiMessage.Status))
+ {
+ BaseSetLastNTError(ApiMessage.Status);
+ return FALSE;
+ }
+
+ lpConsoleCurrentFont->dwFontSize = GetCurrentFontRequest->FontSize;
+ lpConsoleCurrentFont->nFont = GetCurrentFontRequest->FontIndex;
+
+ return TRUE;
}
/*
- * @unimplemented (Undocumented)
+ * @implemented (Undocumented)
+ * @note See http://cboard.cprogramming.com/windows-programming/102187-console-font-size.html
*/
-ULONG
+DWORD
WINAPI
+DECLSPEC_HOTPATCH
GetNumberOfConsoleFonts(VOID)
{
- DPRINT1("GetNumberOfConsoleFonts() UNIMPLEMENTED!\n");
- SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
- return 1;
+ CONSOLE_API_MESSAGE ApiMessage;
+ PCONSOLE_GETNUMFONTS GetNumFontsRequest = &ApiMessage.Data.GetNumFontsRequest;
+
+ GetNumFontsRequest->ConsoleHandle = NtCurrentPeb()->ProcessParameters->ConsoleHandle;
+
+ CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
+ NULL,
+ CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepGetNumberOfFonts),
+ sizeof(*GetNumFontsRequest));
+ if (!NT_SUCCESS(ApiMessage.Status))
+ {
+ BaseSetLastNTError(ApiMessage.Status);
+ return 0;
+ }
+
+ return GetNumFontsRequest->NumFonts;
}
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
SetConsoleCursor(HANDLE hConsoleOutput,
HCURSOR hCursor)
{
/*
- * @unimplemented (Undocumented)
+ * @implemented (Undocumented)
+ * @note See http://cboard.cprogramming.com/windows-programming/102187-console-font-size.html
*/
BOOL
WINAPI
-SetConsoleFont(HANDLE hConsoleOutput,
- DWORD nFont)
+DECLSPEC_HOTPATCH
+SetConsoleFont(IN HANDLE hConsoleOutput,
+ IN DWORD nFont)
{
- DPRINT1("SetConsoleFont(0x%p, %lu) UNIMPLEMENTED!\n", hConsoleOutput, nFont);
- SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
- return FALSE;
+ CONSOLE_API_MESSAGE ApiMessage;
+ PCONSOLE_SETFONT SetFontRequest = &ApiMessage.Data.SetFontRequest;
+
+ SetFontRequest->ConsoleHandle = NtCurrentPeb()->ProcessParameters->ConsoleHandle;
+ SetFontRequest->OutputHandle = hConsoleOutput;
+ SetFontRequest->FontIndex = nFont;
+
+ CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
+ NULL,
+ CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepSetFont),
+ sizeof(*SetFontRequest));
+ if (!NT_SUCCESS(ApiMessage.Status))
+ {
+ BaseSetLastNTError(ApiMessage.Status);
+ return FALSE;
+ }
+
+ return TRUE;
}
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
SetConsoleKeyShortcuts(DWORD Unknown0,
DWORD Unknown1,
DWORD Unknown2,
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
SetConsoleMenuClose(BOOL bEnable)
{
CONSOLE_API_MESSAGE ApiMessage;
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
SetConsolePalette(HANDLE hConsoleOutput,
HPALETTE hPalette,
UINT dwUsage)
*/
INT
WINAPI
+DECLSPEC_HOTPATCH
ShowConsoleCursor(HANDLE hConsoleOutput,
BOOL bShow)
{
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
VerifyConsoleIoHandle(HANDLE hIoHandle)
{
CONSOLE_API_MESSAGE ApiMessage;
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
CloseConsoleHandle(HANDLE hHandle)
{
CONSOLE_API_MESSAGE ApiMessage;
*/
HANDLE
WINAPI
+DECLSPEC_HOTPATCH
GetStdHandle(DWORD nStdHandle)
/*
* FUNCTION: Get a handle for the standard input, standard output
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
SetStdHandle(DWORD nStdHandle,
HANDLE hHandle)
/*
PCONSOLE_START_INFO ConsoleStartInfo)
{
BOOL Success = TRUE;
-#ifdef USE_CONSOLE_INIT_HANDLES
NTSTATUS Status;
-#endif
CONSOLE_API_MESSAGE ApiMessage;
PCONSOLE_ALLOCCONSOLE AllocConsoleRequest = &ApiMessage.Data.AllocConsoleRequest;
goto Quit;
}
-#ifdef USE_CONSOLE_INIT_HANDLES
- // Is AllocConsoleRequest->ConsoleStartInfo->Events aligned on handle boundary ????
- Status = NtWaitForMultipleObjects(2, AllocConsoleRequest->ConsoleStartInfo->Events,
+ // Is AllocConsoleRequest->ConsoleStartInfo->InitEvents aligned on handle boundary ????
+ Status = NtWaitForMultipleObjects(MAX_INIT_EVENTS,
+ AllocConsoleRequest->ConsoleStartInfo->InitEvents,
WaitAny, FALSE, NULL);
if (!NT_SUCCESS(Status))
{
goto Quit;
}
- NtClose(AllocConsoleRequest->ConsoleStartInfo->Events[0]);
- NtClose(AllocConsoleRequest->ConsoleStartInfo->Events[1]);
- if (Status != STATUS_SUCCESS)
+ NtClose(AllocConsoleRequest->ConsoleStartInfo->InitEvents[INIT_SUCCESS]);
+ NtClose(AllocConsoleRequest->ConsoleStartInfo->InitEvents[INIT_FAILURE]);
+ if (Status != INIT_SUCCESS)
{
NtCurrentPeb()->ProcessParameters->ConsoleHandle = NULL;
Success = FALSE;
}
else
-#endif
{
RtlCopyMemory(ConsoleStartInfo,
AllocConsoleRequest->ConsoleStartInfo,
BOOL
WINAPI
+DECLSPEC_HOTPATCH
AllocConsole(VOID)
{
BOOL Success;
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
FreeConsole(VOID)
{
+ BOOL Success = TRUE;
CONSOLE_API_MESSAGE ApiMessage;
PCONSOLE_FREECONSOLE FreeConsoleRequest = &ApiMessage.Data.FreeConsoleRequest;
HANDLE ConsoleHandle = NtCurrentPeb()->ProcessParameters->ConsoleHandle;
+ RtlEnterCriticalSection(&ConsoleLock);
+
/* We must have a non-trivial handle to close */
if (ConsoleHandle == NULL) // IsConsoleHandle(ConsoleHandle)
{
SetLastError(ERROR_INVALID_PARAMETER);
- return FALSE;
+ Success = FALSE;
+ goto Quit;
}
/* Set up the data to send to the Console Server */
if (!NT_SUCCESS(ApiMessage.Status))
{
BaseSetLastNTError(ApiMessage.Status);
- return FALSE;
+ Success = FALSE;
+ goto Quit;
}
/* Reset the console handle */
CloseHandle(InputWaitHandle);
InputWaitHandle = INVALID_HANDLE_VALUE;
- return TRUE;
+Quit:
+ RtlLeaveCriticalSection(&ConsoleLock);
+ return Success;
}
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
SetConsoleCursorPosition(HANDLE hConsoleOutput,
COORD dwCursorPosition)
{
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
SetConsoleMode(HANDLE hConsoleHandle,
DWORD dwMode)
{
*/
COORD
WINAPI
+DECLSPEC_HOTPATCH
GetLargestConsoleWindowSize(HANDLE hConsoleOutput)
{
CONSOLE_API_MESSAGE ApiMessage;
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
SetConsoleActiveScreenBuffer(HANDLE hConsoleOutput)
{
CONSOLE_API_MESSAGE ApiMessage;
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
FlushConsoleInputBuffer(HANDLE hConsoleInput)
{
CONSOLE_API_MESSAGE ApiMessage;
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
SetConsoleScreenBufferSize(HANDLE hConsoleOutput,
COORD dwSize)
{
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
ScrollConsoleScreenBufferA(HANDLE hConsoleOutput,
CONST SMALL_RECT* lpScrollRectangle,
CONST SMALL_RECT* lpClipRectangle,
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
ScrollConsoleScreenBufferW(HANDLE hConsoleOutput,
CONST SMALL_RECT *lpScrollRectangle,
CONST SMALL_RECT *lpClipRectangle,
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
SetConsoleTextAttribute(HANDLE hConsoleOutput,
WORD wAttributes)
{
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
SetConsoleCtrlHandler(PHANDLER_ROUTINE HandlerRoutine,
BOOL Add)
{
BOOL Ret;
- RtlEnterCriticalSection(&BaseDllDirectoryLock);
+ RtlEnterCriticalSection(&ConsoleLock);
+
if (Add)
- {
Ret = AddConsoleCtrlHandler(HandlerRoutine);
- }
else
- {
Ret = RemoveConsoleCtrlHandler(HandlerRoutine);
- }
- RtlLeaveCriticalSection(&BaseDllDirectoryLock);
- return(Ret);
+ RtlLeaveCriticalSection(&ConsoleLock);
+ return Ret;
}
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
GenerateConsoleCtrlEvent(DWORD dwCtrlEvent,
DWORD dwProcessGroupId)
{
if (dwNumChars > 0)
{
- memcpy(lpConsoleTitle, TitleRequest->Title, TitleRequest->Length);
+ RtlCopyMemory(lpConsoleTitle, TitleRequest->Title, TitleRequest->Length);
if (bUnicode)
((LPWSTR)lpConsoleTitle)[dwNumChars] = UNICODE_NULL;
*/
DWORD
WINAPI
+DECLSPEC_HOTPATCH
GetConsoleTitleW(LPWSTR lpConsoleTitle,
DWORD nSize)
{
*/
DWORD
WINAPI
+DECLSPEC_HOTPATCH
GetConsoleTitleA(LPSTR lpConsoleTitle,
DWORD nSize)
{
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
SetConsoleTitleW(LPCWSTR lpConsoleTitle)
{
return IntSetConsoleTitle(lpConsoleTitle, TRUE);
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
SetConsoleTitleA(LPCSTR lpConsoleTitle)
{
return IntSetConsoleTitle(lpConsoleTitle, FALSE);
*/
UINT
WINAPI
+DECLSPEC_HOTPATCH
GetConsoleCP(VOID)
{
CONSOLE_API_MESSAGE ApiMessage;
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
SetConsoleCP(UINT wCodePageID)
{
CONSOLE_API_MESSAGE ApiMessage;
*/
UINT
WINAPI
+DECLSPEC_HOTPATCH
GetConsoleOutputCP(VOID)
{
CONSOLE_API_MESSAGE ApiMessage;
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
SetConsoleOutputCP(UINT wCodePageID)
{
CONSOLE_API_MESSAGE ApiMessage;
nProcesses = GetProcessListRequest->ProcessCount;
if (dwProcessCount >= nProcesses)
{
- memcpy(lpdwProcessList, GetProcessListRequest->ProcessIdsList, nProcesses * sizeof(DWORD));
+ RtlCopyMemory(lpdwProcessList, GetProcessListRequest->ProcessIdsList, nProcesses * sizeof(DWORD));
}
}
PCONSOLE_START_INFO ConsoleStartInfo)
{
BOOL Success = TRUE;
-#ifdef USE_CONSOLE_INIT_HANDLES
NTSTATUS Status;
-#endif
CONSOLE_API_MESSAGE ApiMessage;
PCONSOLE_ATTACHCONSOLE AttachConsoleRequest = &ApiMessage.Data.AttachConsoleRequest;
goto Quit;
}
-#ifdef USE_CONSOLE_INIT_HANDLES
- // Is AttachConsoleRequest->ConsoleStartInfo->Events aligned on handle boundary ????
- Status = NtWaitForMultipleObjects(2, AttachConsoleRequest->ConsoleStartInfo->Events,
+ // Is AttachConsoleRequest->ConsoleStartInfo->InitEvents aligned on handle boundary ????
+ Status = NtWaitForMultipleObjects(MAX_INIT_EVENTS,
+ AttachConsoleRequest->ConsoleStartInfo->InitEvents,
WaitAny, FALSE, NULL);
if (!NT_SUCCESS(Status))
{
goto Quit;
}
- NtClose(AttachConsoleRequest->ConsoleStartInfo->Events[0]);
- NtClose(AttachConsoleRequest->ConsoleStartInfo->Events[1]);
- if (Status != STATUS_SUCCESS)
+ NtClose(AttachConsoleRequest->ConsoleStartInfo->InitEvents[INIT_SUCCESS]);
+ NtClose(AttachConsoleRequest->ConsoleStartInfo->InitEvents[INIT_FAILURE]);
+ if (Status != INIT_SUCCESS)
{
NtCurrentPeb()->ProcessParameters->ConsoleHandle = NULL;
Success = FALSE;
}
else
-#endif
{
RtlCopyMemory(ConsoleStartInfo,
AttachConsoleRequest->ConsoleStartInfo,
*/
HWND
WINAPI
+DECLSPEC_HOTPATCH
GetConsoleWindow(VOID)
{
CONSOLE_API_MESSAGE ApiMessage;
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
SetConsoleIcon(HICON hIcon)
{
CONSOLE_API_MESSAGE ApiMessage;
* \name SetConsoleInputExeNameW
* \brief Sets the console input file name from a unicode string.
* \param lpExeName Pointer to a unicode string with the name.
- * \return TRUE if successful, FALSE if unsuccsedful.
+ * \return TRUE if successful, FALSE if unsuccessful.
* \remarks If lpExeName is 0 or the string length is 0 or greater than 255,
* the function fails and sets last error to ERROR_INVALID_PARAMETER.
*/
BOOL
WINAPI
-SetConsoleInputExeNameW(IN LPWSTR lpExeName)
+DECLSPEC_HOTPATCH
+SetConsoleInputExeNameW(IN LPCWSTR lpExeName)
{
DWORD ExeLength;
* \name SetConsoleInputExeNameA
* \brief Sets the console input file name from an ansi string.
* \param lpExeName Pointer to an ansi string with the name.
- * \return TRUE if successful, FALSE if unsuccsedful.
+ * \return TRUE if successful, FALSE if unsuccessful.
* \remarks If lpExeName is 0 or the string length is 0 or greater than 255,
* the function fails and sets last error to ERROR_INVALID_PARAMETER.
*/
BOOL
WINAPI
-SetConsoleInputExeNameA(IN LPSTR lpExeName)
+DECLSPEC_HOTPATCH
+SetConsoleInputExeNameA(IN LPCSTR lpExeName)
{
NTSTATUS Status;
#ifdef USE_TEB_STATIC_USTR
*/
DWORD
WINAPI
+DECLSPEC_HOTPATCH
GetConsoleInputExeNameW(IN DWORD nBufferLength,
OUT LPWSTR lpExeName)
{
*/
DWORD
WINAPI
+DECLSPEC_HOTPATCH
GetConsoleInputExeNameA(IN DWORD nBufferLength,
OUT LPSTR lpExeName)
{
BOOL
WINAPI
+DECLSPEC_HOTPATCH
GetConsoleCursorMode(HANDLE hConsole, PBOOL pUnknown1, PBOOL pUnknown2)
{
STUB;
BOOL
WINAPI
+DECLSPEC_HOTPATCH
SetConsoleCursorMode(HANDLE hConsole, BOOL Unknown1, BOOL Unknown2)
{
STUB;
BOOL
WINAPI
+DECLSPEC_HOTPATCH
GetConsoleNlsMode(HANDLE hConsole, LPDWORD lpMode)
{
STUB;
BOOL
WINAPI
+DECLSPEC_HOTPATCH
SetConsoleNlsMode(HANDLE hConsole, DWORD dwMode)
{
STUB;
BOOL
WINAPI
+DECLSPEC_HOTPATCH
SetConsoleLocalEUDC(DWORD Unknown1, DWORD Unknown2, DWORD Unknown3, DWORD Unknown4)
{
STUB;
BOOL
WINAPI
+DECLSPEC_HOTPATCH
RegisterConsoleIME(HWND hWnd, LPDWORD ThreadId)
{
STUB;
BOOL
WINAPI
+DECLSPEC_HOTPATCH
RegisterConsoleOS2(BOOL bUnknown)
{
STUB;
BOOL
WINAPI
+DECLSPEC_HOTPATCH
SetConsoleOS2OemFormat(BOOL bUnknown)
{
STUB;
BOOL
WINAPI
+DECLSPEC_HOTPATCH
UnregisterConsoleIME(VOID)
{
STUB;
}
+static
BOOL
IntGetConsoleKeyboardLayoutName(OUT PVOID pszLayoutName,
IN BOOL bAnsi)
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
GetConsoleKeyboardLayoutNameA(OUT LPSTR pszLayoutName)
{
return IntGetConsoleKeyboardLayoutName(pszLayoutName, TRUE);
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
GetConsoleKeyboardLayoutNameW(OUT LPWSTR pszLayoutName)
{
return IntGetConsoleKeyboardLayoutName(pszLayoutName, FALSE);