blob: 8336021f6c87496b1ce17cc35215c353b4cd7615 [file]
/* **********************************************************
* Copyright (c) 2011-2024 Google, Inc. All rights reserved.
* **********************************************************/
/* Dr. Memory: the memory debugger
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License, and no later version.
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
/* Need this defined and to the latest to get the latest defines and types */
#define _WIN32_WINNT 0x0601 /* == _WIN32_WINNT_WIN7 */
#define WINVER _WIN32_WINNT
#include "dr_api.h"
#include "drsyscall.h"
#include "drsyscall_os.h"
#include "drsyscall_windows.h"
#include "table_defines.h"
/***************************************************************************/
/* System calls with wrappers in kernel32.dll (on win7 these are duplicated
* in kernelbase.dll as well but w/ the same syscall number)
* Not all wrappers are exported: xref i#388.
*/
/* FIXME i#1089: fill in info on all the inlined args for all of
* syscalls in this file.
*/
syscall_info_t syscall_kernel32_info[] = {
/* wchar_t *locale DR_PARAM_OUT, size_t locale_sz (assuming size in bytes) */
{{0,0},"NtWow64CsrBasepNlsGetUserInfo", OK, RNTST, 2,
{
{0, -1, W|CT, SYSARG_TYPE_CSTRING_WIDE},
}
},
/* Takes a single param that's a pointer to a struct that has a PHANDLE at offset
* 0x7c where the base of a new mmap is stored by the kernel. We handle that by
* waiting for RtlCreateActivationContext (i#352). We don't know of any written
* values in the rest of the struct or its total size so we ignore it for now and
* use this entry to avoid "unknown syscall" warnings.
*
* XXX: there are 4+ wchar_t* input strings in the struct: should check them.
*/
{{0,0},"NtWow64CsrBasepCreateActCtx", OK, RNTST, 1, },
/* FIXME i#1091: add further kernel32 syscall info */
{{0,0},"AddConsoleAliasInternal", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"AllocConsoleInternal", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"AttachConsoleInternal", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"CloseConsoleHandle", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"ConnectConsoleInternal", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"ConsoleMenuControl", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"CreateConsoleScreenBuffer", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"DuplicateConsoleHandle", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"ExpungeConsoleCommandHistoryInternal", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"FillConsoleOutput", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"FlushConsoleInputBuffer", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"FreeConsoleInternal", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"GenerateConsoleCtrlEvent", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"GetConsoleAliasExesInternal", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"GetConsoleAliasExesLengthInternal", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"GetConsoleAliasInternal", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"GetConsoleAliasesInternal", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"GetConsoleAliasesLengthInternal", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"GetConsoleCP", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"GetConsoleCharType", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"GetConsoleCommandHistoryInternal", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"GetConsoleCommandHistoryLengthInternal", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"GetConsoleCursorInfo", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"GetConsoleCursorMode", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"GetConsoleDisplayMode", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"GetConsoleFontInfo", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"GetConsoleFontSize", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"GetConsoleHandleInformation", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"GetConsoleHardwareState", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"GetConsoleInput", OK, SYSARG_TYPE_BOOL32, 6,
{
{0, sizeof(HANDLE), SYSARG_INLINED, DRSYS_TYPE_HANDLE},
{1, -2, W|SYSARG_SIZE_IN_ELEMENTS, sizeof(INPUT_RECORD)},
{1, -3, WI|SYSARG_SIZE_IN_ELEMENTS, sizeof(INPUT_RECORD)},
{2, sizeof(DWORD), SYSARG_INLINED, DRSYS_TYPE_UNSIGNED_INT},
{3, sizeof(DWORD), W|HT, DRSYS_TYPE_UNSIGNED_INT},
{4, sizeof(DWORD), SYSARG_INLINED, DRSYS_TYPE_UNSIGNED_INT},
{5, sizeof(DWORD), SYSARG_INLINED, DRSYS_TYPE_UNSIGNED_INT},
}
},
{{0,0},"GetConsoleKeyboardLayoutNameWorker", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"GetConsoleLangId", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"GetConsoleMode", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"GetConsoleNlsMode", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"GetConsoleOutputCP", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"GetConsoleProcessList", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"GetConsoleScreenBufferInfo", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"GetConsoleSelectionInfo", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"GetConsoleTitleInternal", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"GetConsoleWindow", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"GetCurrentConsoleFont", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"GetLargestConsoleWindowSize", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"GetNumberOfConsoleFonts", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"GetNumberOfConsoleInputEvents", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"GetNumberOfConsoleMouseButtons", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"InvalidateConsoleDIBits", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"NtWow64CsrBaseCheckRunApp", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"NtWow64CsrBaseClientConnectToServer", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"NtWow64CsrBaseQueryModuleData", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"NtWow64CsrBasepCreateProcess", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"NtWow64CsrBasepCreateThread", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"NtWow64CsrBasepDefineDosDevice", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"NtWow64CsrBasepExitProcess", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"NtWow64CsrBasepGetProcessShutdownParam", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"NtWow64CsrBasepGetTempFile", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"NtWow64CsrBasepNlsCreateSection", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"NtWow64CsrBasepNlsSetMultipleUserInfo", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"NtWow64CsrBasepNlsSetUserInfo", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"NtWow64CsrBasepNlsUpdateCacheCount", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"NtWow64CsrBasepRefreshIniFileMapping", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"NtWow64CsrBasepSetClientTimeZoneInformation", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"NtWow64CsrBasepSetProcessShutdownParam", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"NtWow64CsrBasepSetTermsrvAppInstallMode", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"NtWow64CsrBasepSoundSentryNotification", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"OpenConsoleWInternal", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"ReadConsoleInternal", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"ReadConsoleOutputInternal", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"ReadConsoleOutputString", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"RegisterConsoleIMEInternal", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"RegisterConsoleOS2", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"RegisterConsoleVDM", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"ScrollConsoleScreenBufferInternal", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"SetConsoleActiveScreenBuffer", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"SetConsoleCP", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"SetConsoleCommandHistoryMode", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"SetConsoleCursor", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"SetConsoleCursorInfo", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"SetConsoleCursorMode", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"SetConsoleCursorPosition", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"SetConsoleDisplayMode", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"SetConsoleFont", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"SetConsoleHandleInformation", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"SetConsoleHardwareState", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"SetConsoleIcon", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"SetConsoleKeyShortcuts", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"SetConsoleLocalEUDC", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"SetConsoleMenuClose", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"SetConsoleMode", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"SetConsoleNlsMode", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"SetConsoleNumberOfCommandsInternal", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"SetConsoleOS2OemFormat", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"SetConsoleOutputCPInternal", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"SetConsolePaletteInternal", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"SetConsoleScreenBufferSize", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"SetConsoleTextAttribute", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"SetConsoleTitleInternal", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"SetConsoleWindowInfo", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"SetLastConsoleEventActiveInternal", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"ShowConsoleCursor", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"UnregisterConsoleIMEInternal", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"VerifyConsoleIoHandle", OK, DRSYS_TYPE_BOOL, 1,
{
{0, sizeof(HANDLE), SYSARG_INLINED, DRSYS_TYPE_HANDLE},
}
},
{{0,0},"WriteConsoleInputInternal", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"WriteConsoleInternal", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"WriteConsoleOutputInternal", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"WriteConsoleOutputString", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
/***************************************************/
/* Added in Vista */
/* XXX: add min OS version: but we have to distinguish the service packs! */
{{0,0},"GetConsoleHistoryInfo", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"GetConsoleScreenBufferInfoEx", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"GetCurrentConsoleFontEx", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"QueryConsoleIMEInternal", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"SetConsoleHistoryInfo", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"SetConsoleScreenBufferInfoEx", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
{{0,0},"SetCurrentConsoleFontEx", UNKNOWN, DRSYS_TYPE_UNKNOWN, },
/***************************************************/
/* Added in Windows 8 */
{{WIN8,0},"NtWow64ConsoleLaunchServerProcess", UNKNOWN, DRSYS_TYPE_UNKNOWN, 4, },
};
#define NUM_KERNEL32_SYSCALLS \
(sizeof(syscall_kernel32_info)/sizeof(syscall_kernel32_info[0]))
size_t
num_kernel32_syscalls(void)
{
return NUM_KERNEL32_SYSCALLS;
}