diff options
author | siggi@chromium.org <siggi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-03-28 17:51:09 +0000 |
---|---|---|
committer | siggi@chromium.org <siggi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-03-28 17:51:09 +0000 |
commit | 5efb0a6ddc3eb63404730493e892b8b300e7d439 (patch) | |
tree | 007dbf9bbc55f45b590388b1fb85f27f29f13de9 /build/win | |
parent | 40d11e0a3b5e51d2bb4e7b4d0d5ceb8f5b82f9aa (diff) | |
download | chromium_src-5efb0a6ddc3eb63404730493e892b8b300e7d439.zip chromium_src-5efb0a6ddc3eb63404730493e892b8b300e7d439.tar.gz chromium_src-5efb0a6ddc3eb63404730493e892b8b300e7d439.tar.bz2 |
Check in a custom-built import library for user32 exports up to Windows XP SP2/SP3, which is used by chrome.dll in preference to the Platform SDK's user32.lib import library.
Custom build an import library for Chrome's post-WinXP imports, that binds to a fictional "user32-delay.dll".
Implement and test a delay load hook that diverts dynamic loading of any dll "foo-delay.dll" to "foo.dll".
R=cpu@chromium.org
BUG=176040
Review URL: https://chromiumcodereview.appspot.com/12295040
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@191173 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'build/win')
-rw-r--r-- | build/win/importlibs/create_import_lib.gypi | 55 | ||||
-rwxr-xr-x | build/win/importlibs/create_importlib_win.py | 218 | ||||
-rwxr-xr-x | build/win/importlibs/filter_export_list.py | 85 | ||||
-rw-r--r-- | build/win/importlibs/x86/user32.winxp.imports | 670 |
4 files changed, 1028 insertions, 0 deletions
diff --git a/build/win/importlibs/create_import_lib.gypi b/build/win/importlibs/create_import_lib.gypi new file mode 100644 index 0000000..ad281fb --- /dev/null +++ b/build/win/importlibs/create_import_lib.gypi @@ -0,0 +1,55 @@ +# Copyright (c) 2012 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# This file is meant to be included into a target to provide a rule +# to create import libraries from an import description file in a consistent +# manner. +# +# To use this, create a gyp target with the following form: +# { +# 'target_name': 'my_proto_lib', +# 'type': 'none', +# 'sources': [ +# 'foo.imports', +# 'bar.imports', +# ], +# 'variables': { +# # Optional, see below: 'proto_in_dir': '.' +# 'create_importlib': 'path-to-script', +# 'lib_dir': 'path-to-output-directory', +# }, +# 'includes': ['path/to/this/gypi/file'], +# } +# +# This will generate import libraries named 'foo.lib' and 'bar.lib' in the +# specified lib directory. + +{ + 'variables': { + 'create_importlib': '<(DEPTH)/build/win/importlibs/create_importlib_win.py', + 'lib_dir': '<(PRODUCT_DIR)/lib', + }, + 'rules': [ + { + 'rule_name': 'create_import_lib', + 'extension': 'imports', + 'inputs': [ + '<(create_importlib)', + ], + 'outputs': [ + '<(lib_dir)/<(RULE_INPUT_ROOT).lib', + ], + 'action': [ + 'python', + '<(create_importlib)', + '--verbose', + '--output-file', '<@(_outputs)', + '<(RULE_INPUT_PATH)', + ], + 'msvs_cygwin_shell': 0, + 'message': 'Generating import library from <(RULE_INPUT_PATH)', + 'process_outputs_as_sources': 0, + }, + ], +} diff --git a/build/win/importlibs/create_importlib_win.py b/build/win/importlibs/create_importlib_win.py new file mode 100755 index 0000000..e71bfe4 --- /dev/null +++ b/build/win/importlibs/create_importlib_win.py @@ -0,0 +1,218 @@ +#!/usr/bin/env python +# Copyright (c) 2012 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +# +"""Creates an import library from an import description file.""" +import ast +import logging +import optparse +import os +import os.path +import shutil +import subprocess +import sys +import tempfile + + +_USAGE = """\ +Usage: %prog [options] [imports-file] + +Creates an import library from imports-file. + +Note: this script uses the microsoft assembler (ml.exe) and the library tool + (lib.exe), both of which must be in path. +""" + + +_ASM_STUB_HEADER = """\ +; This file is autogenerated by create_importlib_win.py, do not edit. +.386 +.MODEL FLAT, C +.CODE + +; Stubs to provide mangled names to lib.exe for the +; correct generation of import libs. +""" + + +_DEF_STUB_HEADER = """\ +; This file is autogenerated by create_importlib_win.py, do not edit. + +; Export declarations for generating import libs. +""" + + +_LOGGER = logging.getLogger() + + + +class _Error(Exception): + pass + + +class _ImportLibraryGenerator(object): + def __init__(self, temp_dir): + self._temp_dir = temp_dir + + def _Shell(self, cmd, **kw): + ret = subprocess.call(cmd, **kw) + _LOGGER.info('Running "%s" returned %d.', cmd, ret) + if ret != 0: + raise _Error('Command "%s" returned %d.' % (cmd, ret)) + + def _ReadImportsFile(self, imports_file): + # Slurp the imports file. + return ast.literal_eval(open(imports_file).read()) + + def _WriteStubsFile(self, import_names, output_file): + output_file.write(_ASM_STUB_HEADER) + + for name in import_names: + output_file.write('%s PROC\n' % name) + output_file.write('%s ENDP\n' % name) + + output_file.write('END\n') + + def _WriteDefFile(self, dll_name, import_names, output_file): + output_file.write(_DEF_STUB_HEADER) + output_file.write('NAME %s\n' % dll_name) + output_file.write('EXPORTS\n') + for name in import_names: + name = name.split('@')[0] + output_file.write(' %s\n' % name) + + def _CreateObj(self, dll_name, imports): + """Writes an assembly file containing empty declarations. + + For each imported function of the form: + + AddClipboardFormatListener@4 PROC + AddClipboardFormatListener@4 ENDP + + The resulting object file is then supplied to lib.exe with a .def file + declaring the corresponding non-adorned exports as they appear on the + exporting DLL, e.g. + + EXPORTS + AddClipboardFormatListener + + In combination, the .def file and the .obj file cause lib.exe to generate + an x86 import lib with public symbols named like + "__imp__AddClipboardFormatListener@4", binding to exports named like + "AddClipboardFormatListener". + + All of this is perpetrated in a temporary directory, as the intermediate + artifacts are quick and easy to produce, and of no interest to anyone + after the fact.""" + + # Create an .asm file to provide stdcall-like stub names to lib.exe. + asm_name = dll_name + '.asm' + _LOGGER.info('Writing asm file "%s".', asm_name) + with open(os.path.join(self._temp_dir, asm_name), 'wb') as stubs_file: + self._WriteStubsFile(imports, stubs_file) + + # Invoke on the assembler to compile it to .obj. + obj_name = dll_name + '.obj' + cmdline = ['ml.exe', '/nologo', '/c', asm_name, '/Fo', obj_name] + self._Shell(cmdline, cwd=self._temp_dir) + + return obj_name + + def _CreateImportLib(self, dll_name, imports, architecture, output_file): + """Creates an import lib binding imports to dll_name for architecture. + + On success, writes the import library to output file. + """ + obj_file = None + + # For x86 architecture we have to provide an object file for correct + # name mangling between the import stubs and the exported functions. + if architecture == 'x86': + obj_file = self._CreateObj(dll_name, imports) + + # Create the corresponding .def file. This file has the non stdcall-adorned + # names, as exported by the destination DLL. + def_name = dll_name + '.def' + _LOGGER.info('Writing def file "%s".', def_name) + with open(os.path.join(self._temp_dir, def_name), 'wb') as def_file: + self._WriteDefFile(dll_name, imports, def_file) + + # Invoke on lib.exe to create the import library. + # We generate everything into the temporary directory, as the .exp export + # files will be generated at the same path as the import library, and we + # don't want those files potentially gunking the works. + dll_base_name, ext = os.path.splitext(dll_name) + lib_name = dll_base_name + '.lib' + cmdline = ['lib.exe', + '/machine:%s' % architecture, + '/def:%s' % def_name, + '/out:%s' % lib_name] + if obj_file: + cmdline.append(obj_file) + + self._Shell(cmdline, cwd=self._temp_dir) + + # Copy the .lib file to the output directory. + shutil.copyfile(os.path.join(self._temp_dir, lib_name), output_file) + _LOGGER.info('Created "%s".', output_file) + + def CreateImportLib(self, imports_file, output_file): + # Read the imports file. + imports = self._ReadImportsFile(imports_file) + + # Creates the requested import library in the output directory. + self._CreateImportLib(imports['dll_name'], + imports['imports'], + imports.get('architecture', 'x86'), + output_file) + + +def main(): + parser = optparse.OptionParser(usage=_USAGE) + parser.add_option('-o', '--output-file', + help='Specifies the output file path.') + parser.add_option('-k', '--keep-temp-dir', + action='store_true', + help='Keep the temporary directory.') + parser.add_option('-v', '--verbose', + action='store_true', + help='Verbose logging.') + + options, args = parser.parse_args() + + print args + if len(args) != 1: + parser.error('You must provide an imports file.') + + if not options.output_file: + parser.error('You must provide an output file.') + + options.output_file = os.path.abspath(options.output_file) + + if options.verbose: + logging.basicConfig(level=logging.INFO) + else: + logging.basicConfig(level=logging.WARN) + + + temp_dir = tempfile.mkdtemp() + _LOGGER.info('Created temporary directory "%s."', temp_dir) + try: + # Create a generator and create the import lib. + generator = _ImportLibraryGenerator(temp_dir) + + ret = generator.CreateImportLib(args[0], options.output_file) + except Exception, e: + _LOGGER.exception('Failed to create imports.') + ret = 1 + finally: + if not options.keep_temp_dir: + shutil.rmtree(temp_dir) + _LOGGER.info('Deleted temporary directory "%s."', temp_dir) + + return ret + + +if __name__ == '__main__': + sys.exit(main()) diff --git a/build/win/importlibs/filter_export_list.py b/build/win/importlibs/filter_export_list.py new file mode 100755 index 0000000..c2489a9 --- /dev/null +++ b/build/win/importlibs/filter_export_list.py @@ -0,0 +1,85 @@ +#!/usr/bin/env python +# Copyright (c) 2012 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +# +"""Help maintaining DLL import lists.""" +import ast +import optparse +import re +import sys + + +_EXPORT_RE = re.compile(r""" + ^\s*(?P<ordinal>[0-9]+) # The ordinal field. + \s+(?P<hint>[0-9A-F]+) # The hint field. + \s(?P<rva>........) # The RVA field. + \s+(?P<name>[^ ]+) # And finally the name we're really after. +""", re.VERBOSE) + + +_USAGE = r"""\ +Usage: %prog [options] [master-file] + +This script filters a list of exports from a DLL, generated from something +like the following command line: + +C:\> dumpbin /exports user32.dll + +against a master list of imports built from e.g. + +C:\> dumpbin /exports user32.lib + +The point of this is to trim non-public exports from the list, and to +normalize the names to their stdcall-mangled form for the generation of +import libraries. +Note that the export names from the latter incanatation are stdcall-mangled, +e.g. they are suffixed with "@" and the number of argument bytes to the +function. +""" + +def _ReadMasterFile(master_file): + # Slurp the master file. + with open(master_file) as f: + master_exports = ast.literal_eval(f.read()) + + master_mapping = {} + for export in master_exports: + name = export.split('@')[0] + master_mapping[name] = export + + return master_mapping + + +def main(): + parser = optparse.OptionParser(usage=_USAGE) + parser.add_option('-r', '--reverse', + action='store_true', + help='Reverse the matching, e.g. return the functions ' + 'in the master list that aren\'t in the input.') + + options, args = parser.parse_args() + if len(args) != 1: + parser.error('Must provide a master file.') + + master_mapping = _ReadMasterFile(args[0]) + + found_exports = [] + for line in sys.stdin: + match = _EXPORT_RE.match(line) + if match: + export_name = master_mapping.get(match.group('name'), None) + if export_name: + found_exports.append(export_name) + + if options.reverse: + # Invert the found_exports list. + found_exports = set(master_mapping.values()) - set(found_exports) + + # Sort the found exports for tidy output. + print '\n'.join(sorted(found_exports)) + return 0 + + +if __name__ == '__main__': + sys.exit(main()) diff --git a/build/win/importlibs/x86/user32.winxp.imports b/build/win/importlibs/x86/user32.winxp.imports new file mode 100644 index 0000000..24403a8 --- /dev/null +++ b/build/win/importlibs/x86/user32.winxp.imports @@ -0,0 +1,670 @@ +# Copyright (c) 2012 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +# +# This file is used to create a custom import library for Chrome's use of +# user32.dll exports. The set of exports defined below +{ + 'architecture': 'x86', + + # The DLL to bind to. + 'dll_name': 'user32.dll', + + # Name of the generated import library. + 'importlib_name': 'user32.winxp.lib', + + # This is the set of exports observed on a user32.dll from Windows XP SP2. + # The version of the DLL where these were observed is 5.1.2600.2180. + # Incidentally this set of exports also coincides with Windows XP SP3, where + # the version of the DLL is 5.1.2600.5512. + # Don't add new imports here unless and until the minimal supported + # Windows version has been bumped past Windows XP SP2+. + 'imports': [ + 'ActivateKeyboardLayout@8', + 'AdjustWindowRect@12', + 'AdjustWindowRectEx@16', + 'AllowSetForegroundWindow@4', + 'AnimateWindow@12', + 'AnyPopup@0', + 'AppendMenuA@16', + 'AppendMenuW@16', + 'ArrangeIconicWindows@4', + 'AttachThreadInput@12', + 'BeginDeferWindowPos@4', + 'BeginPaint@8', + 'BlockInput@4', + 'BringWindowToTop@4', + 'BroadcastSystemMessage@20', + 'BroadcastSystemMessageA@20', + 'BroadcastSystemMessageExA@24', + 'BroadcastSystemMessageExW@24', + 'BroadcastSystemMessageW@20', + 'CallMsgFilter@8', + 'CallMsgFilterA@8', + 'CallMsgFilterW@8', + 'CallNextHookEx@16', + 'CallWindowProcA@20', + 'CallWindowProcW@20', + 'CascadeChildWindows@8', + 'CascadeWindows@20', + 'ChangeClipboardChain@8', + 'ChangeDisplaySettingsA@8', + 'ChangeDisplaySettingsExA@20', + 'ChangeDisplaySettingsExW@20', + 'ChangeDisplaySettingsW@8', + 'ChangeMenuA@20', + 'ChangeMenuW@20', + 'CharLowerA@4', + 'CharLowerBuffA@8', + 'CharLowerBuffW@8', + 'CharLowerW@4', + 'CharNextA@4', + 'CharNextExA@12', + 'CharNextW@4', + 'CharPrevA@8', + 'CharPrevExA@16', + 'CharPrevW@8', + 'CharToOemA@8', + 'CharToOemBuffA@12', + 'CharToOemBuffW@12', + 'CharToOemW@8', + 'CharUpperA@4', + 'CharUpperBuffA@8', + 'CharUpperBuffW@8', + 'CharUpperW@4', + 'CheckDlgButton@12', + 'CheckMenuItem@12', + 'CheckMenuRadioItem@20', + 'CheckRadioButton@16', + 'ChildWindowFromPoint@12', + 'ChildWindowFromPointEx@16', + 'ClientToScreen@8', + 'ClipCursor@4', + 'CloseClipboard@0', + 'CloseDesktop@4', + 'CloseWindow@4', + 'CloseWindowStation@4', + 'CopyAcceleratorTableA@12', + 'CopyAcceleratorTableW@12', + 'CopyIcon@4', + 'CopyImage@20', + 'CopyRect@8', + 'CountClipboardFormats@0', + 'CreateAcceleratorTableA@8', + 'CreateAcceleratorTableW@8', + 'CreateCaret@16', + 'CreateCursor@28', + 'CreateDesktopA@24', + 'CreateDesktopW@24', + 'CreateDialogIndirectParamA@20', + 'CreateDialogIndirectParamW@20', + 'CreateDialogParamA@20', + 'CreateDialogParamW@20', + 'CreateIcon@28', + 'CreateIconFromResource@16', + 'CreateIconFromResourceEx@28', + 'CreateIconIndirect@4', + 'CreateMDIWindowA@40', + 'CreateMDIWindowW@40', + 'CreateMenu@0', + 'CreatePopupMenu@0', + 'CreateWindowExA@48', + 'CreateWindowExW@48', + 'CreateWindowStationA@16', + 'CreateWindowStationW@16', + 'DdeAbandonTransaction@12', + 'DdeAccessData@8', + 'DdeAddData@16', + 'DdeClientTransaction@32', + 'DdeCmpStringHandles@8', + 'DdeConnect@16', + 'DdeConnectList@20', + 'DdeCreateDataHandle@28', + 'DdeCreateStringHandleA@12', + 'DdeCreateStringHandleW@12', + 'DdeDisconnect@4', + 'DdeDisconnectList@4', + 'DdeEnableCallback@12', + 'DdeFreeDataHandle@4', + 'DdeFreeStringHandle@8', + 'DdeGetData@16', + 'DdeGetLastError@4', + 'DdeImpersonateClient@4', + 'DdeInitializeA@16', + 'DdeInitializeW@16', + 'DdeKeepStringHandle@8', + 'DdeNameService@16', + 'DdePostAdvise@12', + 'DdeQueryConvInfo@12', + 'DdeQueryNextServer@8', + 'DdeQueryStringA@20', + 'DdeQueryStringW@20', + 'DdeReconnect@4', + 'DdeSetQualityOfService@12', + 'DdeSetUserHandle@12', + 'DdeUnaccessData@4', + 'DdeUninitialize@4', + 'DefDlgProcA@16', + 'DefDlgProcW@16', + 'DefFrameProcA@20', + 'DefFrameProcW@20', + 'DefMDIChildProcA@16', + 'DefMDIChildProcW@16', + 'DefRawInputProc@12', + 'DefWindowProcA@16', + 'DefWindowProcW@16', + 'DeferWindowPos@32', + 'DeleteMenu@12', + 'DeregisterShellHookWindow@4', + 'DestroyAcceleratorTable@4', + 'DestroyCaret@0', + 'DestroyCursor@4', + 'DestroyIcon@4', + 'DestroyMenu@4', + 'DestroyWindow@4', + 'DialogBoxIndirectParamA@20', + 'DialogBoxIndirectParamW@20', + 'DialogBoxParamA@20', + 'DialogBoxParamW@20', + 'DisableProcessWindowsGhosting@0', + 'DispatchMessageA@4', + 'DispatchMessageW@4', + 'DlgDirListA@20', + 'DlgDirListComboBoxA@20', + 'DlgDirListComboBoxW@20', + 'DlgDirListW@20', + 'DlgDirSelectComboBoxExA@16', + 'DlgDirSelectComboBoxExW@16', + 'DlgDirSelectExA@16', + 'DlgDirSelectExW@16', + 'DragDetect@12', + 'DragObject@20', + 'DrawAnimatedRects@16', + 'DrawCaption@16', + 'DrawEdge@16', + 'DrawFocusRect@8', + 'DrawFrame@16', + 'DrawFrameControl@16', + 'DrawIcon@16', + 'DrawIconEx@36', + 'DrawMenuBar@4', + 'DrawStateA@40', + 'DrawStateW@40', + 'DrawTextA@20', + 'DrawTextExA@24', + 'DrawTextExW@24', + 'DrawTextW@20', + 'EditWndProc@16', + 'EmptyClipboard@0', + 'EnableMenuItem@12', + 'EnableScrollBar@12', + 'EnableWindow@8', + 'EndDeferWindowPos@4', + 'EndDialog@8', + 'EndMenu@0', + 'EndPaint@8', + 'EndTask@12', + 'EnumChildWindows@12', + 'EnumClipboardFormats@4', + 'EnumDesktopWindows@12', + 'EnumDesktopsA@12', + 'EnumDesktopsW@12', + 'EnumDisplayDevicesA@16', + 'EnumDisplayDevicesW@16', + 'EnumDisplayMonitors@16', + 'EnumDisplaySettingsA@12', + 'EnumDisplaySettingsExA@16', + 'EnumDisplaySettingsExW@16', + 'EnumDisplaySettingsW@12', + 'EnumPropsA@8', + 'EnumPropsExA@12', + 'EnumPropsExW@12', + 'EnumPropsW@8', + 'EnumThreadWindows@12', + 'EnumWindowStationsA@8', + 'EnumWindowStationsW@8', + 'EnumWindows@8', + 'EqualRect@8', + 'ExcludeUpdateRgn@8', + 'ExitWindowsEx@8', + 'FillRect@12', + 'FindWindowA@8', + 'FindWindowExA@16', + 'FindWindowExW@16', + 'FindWindowW@8', + 'FlashWindow@8', + 'FlashWindowEx@4', + 'FrameRect@12', + 'FreeDDElParam@8', + 'GetActiveWindow@0', + 'GetAltTabInfo@20', + 'GetAltTabInfoA@20', + 'GetAltTabInfoW@20', + 'GetAncestor@8', + 'GetAsyncKeyState@4', + 'GetCapture@0', + 'GetCaretBlinkTime@0', + 'GetCaretPos@4', + 'GetClassInfoA@12', + 'GetClassInfoExA@12', + 'GetClassInfoExW@12', + 'GetClassInfoW@12', + 'GetClassLongA@8', + 'GetClassLongW@8', + 'GetClassNameA@12', + 'GetClassNameW@12', + 'GetClassWord@8', + 'GetClientRect@8', + 'GetClipCursor@4', + 'GetClipboardData@4', + 'GetClipboardFormatNameA@12', + 'GetClipboardFormatNameW@12', + 'GetClipboardOwner@0', + 'GetClipboardSequenceNumber@0', + 'GetClipboardViewer@0', + 'GetComboBoxInfo@8', + 'GetCursor@0', + 'GetCursorInfo@4', + 'GetCursorPos@4', + 'GetDC@4', + 'GetDCEx@12', + 'GetDesktopWindow@0', + 'GetDialogBaseUnits@0', + 'GetDlgCtrlID@4', + 'GetDlgItem@8', + 'GetDlgItemInt@16', + 'GetDlgItemTextA@16', + 'GetDlgItemTextW@16', + 'GetDoubleClickTime@0', + 'GetFocus@0', + 'GetForegroundWindow@0', + 'GetGUIThreadInfo@8', + 'GetGuiResources@8', + 'GetIconInfo@8', + 'GetInputDesktop@0', + 'GetInputState@0', + 'GetKBCodePage@0', + 'GetKeyNameTextA@12', + 'GetKeyNameTextW@12', + 'GetKeyState@4', + 'GetKeyboardLayout@4', + 'GetKeyboardLayoutList@8', + 'GetKeyboardLayoutNameA@4', + 'GetKeyboardLayoutNameW@4', + 'GetKeyboardState@4', + 'GetKeyboardType@4', + 'GetLastActivePopup@4', + 'GetLastInputInfo@4', + 'GetLayeredWindowAttributes@16', + 'GetListBoxInfo@4', + 'GetMenu@4', + 'GetMenuBarInfo@16', + 'GetMenuCheckMarkDimensions@0', + 'GetMenuContextHelpId@4', + 'GetMenuDefaultItem@12', + 'GetMenuInfo@8', + 'GetMenuItemCount@4', + 'GetMenuItemID@8', + 'GetMenuItemInfoA@16', + 'GetMenuItemInfoW@16', + 'GetMenuItemRect@16', + 'GetMenuState@12', + 'GetMenuStringA@20', + 'GetMenuStringW@20', + 'GetMessageA@16', + 'GetMessageExtraInfo@0', + 'GetMessagePos@0', + 'GetMessageTime@0', + 'GetMessageW@16', + 'GetMonitorInfoA@8', + 'GetMonitorInfoW@8', + 'GetMouseMovePointsEx@20', + 'GetNextDlgGroupItem@12', + 'GetNextDlgTabItem@12', + 'GetOpenClipboardWindow@0', + 'GetParent@4', + 'GetPriorityClipboardFormat@8', + 'GetProcessDefaultLayout@4', + 'GetProcessWindowStation@0', + 'GetPropA@8', + 'GetPropW@8', + 'GetQueueStatus@4', + 'GetRawInputBuffer@12', + 'GetRawInputData@20', + 'GetRawInputDeviceInfoA@16', + 'GetRawInputDeviceInfoW@16', + 'GetRawInputDeviceList@12', + 'GetRegisteredRawInputDevices@12', + 'GetScrollBarInfo@12', + 'GetScrollInfo@12', + 'GetScrollPos@8', + 'GetScrollRange@16', + 'GetShellWindow@0', + 'GetSubMenu@8', + 'GetSysColor@4', + 'GetSysColorBrush@4', + 'GetSystemMenu@8', + 'GetSystemMetrics@4', + 'GetTabbedTextExtentA@20', + 'GetTabbedTextExtentW@20', + 'GetThreadDesktop@4', + 'GetTitleBarInfo@8', + 'GetTopWindow@4', + 'GetUpdateRect@12', + 'GetUpdateRgn@12', + 'GetUserObjectInformationA@20', + 'GetUserObjectInformationW@20', + 'GetUserObjectSecurity@20', + 'GetWindow@8', + 'GetWindowContextHelpId@4', + 'GetWindowDC@4', + 'GetWindowInfo@8', + 'GetWindowLongA@8', + 'GetWindowLongW@8', + 'GetWindowModuleFileName@12', + 'GetWindowModuleFileNameA@12', + 'GetWindowModuleFileNameW@12', + 'GetWindowPlacement@8', + 'GetWindowRect@8', + 'GetWindowRgn@8', + 'GetWindowRgnBox@8', + 'GetWindowTextA@12', + 'GetWindowTextLengthA@4', + 'GetWindowTextLengthW@4', + 'GetWindowTextW@12', + 'GetWindowThreadProcessId@8', + 'GetWindowWord@8', + 'GrayStringA@36', + 'GrayStringW@36', + 'HideCaret@4', + 'HiliteMenuItem@16', + 'IMPGetIMEA@8', + 'IMPGetIMEW@8', + 'IMPQueryIMEA@4', + 'IMPQueryIMEW@4', + 'IMPSetIMEA@8', + 'IMPSetIMEW@8', + 'ImpersonateDdeClientWindow@8', + 'InSendMessage@0', + 'InSendMessageEx@4', + 'InflateRect@12', + 'InsertMenuA@20', + 'InsertMenuItemA@16', + 'InsertMenuItemW@16', + 'InsertMenuW@20', + 'InternalGetWindowText@12', + 'IntersectRect@12', + 'InvalidateRect@12', + 'InvalidateRgn@12', + 'InvertRect@8', + 'IsCharAlphaA@4', + 'IsCharAlphaNumericA@4', + 'IsCharAlphaNumericW@4', + 'IsCharAlphaW@4', + 'IsCharLowerA@4', + 'IsCharLowerW@4', + 'IsCharUpperA@4', + 'IsCharUpperW@4', + 'IsChild@8', + 'IsClipboardFormatAvailable@4', + 'IsDialogMessage@8', + 'IsDialogMessageA@8', + 'IsDialogMessageW@8', + 'IsDlgButtonChecked@8', + 'IsGUIThread@4', + 'IsHungAppWindow@4', + 'IsIconic@4', + 'IsMenu@4', + 'IsRectEmpty@4', + 'IsWinEventHookInstalled@4', + 'IsWindow@4', + 'IsWindowEnabled@4', + 'IsWindowUnicode@4', + 'IsWindowVisible@4', + 'IsZoomed@4', + 'KillTimer@8', + 'LoadAcceleratorsA@8', + 'LoadAcceleratorsW@8', + 'LoadBitmapA@8', + 'LoadBitmapW@8', + 'LoadCursorA@8', + 'LoadCursorFromFileA@4', + 'LoadCursorFromFileW@4', + 'LoadCursorW@8', + 'LoadIconA@8', + 'LoadIconW@8', + 'LoadImageA@24', + 'LoadImageW@24', + 'LoadKeyboardLayoutA@8', + 'LoadKeyboardLayoutW@8', + 'LoadMenuA@8', + 'LoadMenuIndirectA@4', + 'LoadMenuIndirectW@4', + 'LoadMenuW@8', + 'LoadStringA@16', + 'LoadStringW@16', + 'LockSetForegroundWindow@4', + 'LockWindowUpdate@4', + 'LockWorkStation@0', + 'LookupIconIdFromDirectory@8', + 'LookupIconIdFromDirectoryEx@20', + 'MapDialogRect@8', + 'MapVirtualKeyA@8', + 'MapVirtualKeyExA@12', + 'MapVirtualKeyExW@12', + 'MapVirtualKeyW@8', + 'MapWindowPoints@16', + 'MenuItemFromPoint@16', + 'MessageBeep@4', + 'MessageBoxA@16', + 'MessageBoxExA@20', + 'MessageBoxExW@20', + 'MessageBoxIndirectA@4', + 'MessageBoxIndirectW@4', + 'MessageBoxTimeoutA@24', + 'MessageBoxTimeoutW@24', + 'MessageBoxW@16', + 'ModifyMenuA@20', + 'ModifyMenuW@20', + 'MonitorFromPoint@12', + 'MonitorFromRect@8', + 'MonitorFromWindow@8', + 'MoveWindow@24', + 'MsgWaitForMultipleObjects@20', + 'MsgWaitForMultipleObjectsEx@20', + 'NotifyWinEvent@16', + 'OemKeyScan@4', + 'OemToCharA@8', + 'OemToCharBuffA@12', + 'OemToCharBuffW@12', + 'OemToCharW@8', + 'OffsetRect@12', + 'OpenClipboard@4', + 'OpenDesktopA@16', + 'OpenDesktopW@16', + 'OpenIcon@4', + 'OpenInputDesktop@12', + 'OpenWindowStationA@12', + 'OpenWindowStationW@12', + 'PackDDElParam@12', + 'PaintDesktop@4', + 'PeekMessageA@20', + 'PeekMessageW@20', + 'PostMessageA@16', + 'PostMessageW@16', + 'PostQuitMessage@4', + 'PostThreadMessageA@16', + 'PostThreadMessageW@16', + 'PrintWindow@12', + 'PrivateExtractIconsA@32', + 'PrivateExtractIconsW@32', + 'PtInRect@12', + 'RealChildWindowFromPoint@12', + 'RealGetWindowClass@12', + 'RealGetWindowClassA@12', + 'RealGetWindowClassW@12', + 'RedrawWindow@16', + 'RegisterClassA@4', + 'RegisterClassExA@4', + 'RegisterClassExW@4', + 'RegisterClassW@4', + 'RegisterClipboardFormatA@4', + 'RegisterClipboardFormatW@4', + 'RegisterDeviceNotificationA@12', + 'RegisterDeviceNotificationW@12', + 'RegisterHotKey@16', + 'RegisterRawInputDevices@12', + 'RegisterShellHookWindow@4', + 'RegisterWindowMessageA@4', + 'RegisterWindowMessageW@4', + 'ReleaseCapture@0', + 'ReleaseDC@8', + 'RemoveMenu@12', + 'RemovePropA@8', + 'RemovePropW@8', + 'ReplyMessage@4', + 'ReuseDDElParam@20', + 'ScreenToClient@8', + 'ScrollDC@28', + 'ScrollWindow@20', + 'ScrollWindowEx@32', + 'SendDlgItemMessageA@20', + 'SendDlgItemMessageW@20', + 'SendIMEMessageExA@8', + 'SendIMEMessageExW@8', + 'SendInput@12', + 'SendMessageA@16', + 'SendMessageCallbackA@24', + 'SendMessageCallbackW@24', + 'SendMessageTimeoutA@28', + 'SendMessageTimeoutW@28', + 'SendMessageW@16', + 'SendNotifyMessageA@16', + 'SendNotifyMessageW@16', + 'SetActiveWindow@4', + 'SetCapture@4', + 'SetCaretBlinkTime@4', + 'SetCaretPos@8', + 'SetClassLongA@12', + 'SetClassLongW@12', + 'SetClassWord@12', + 'SetClipboardData@8', + 'SetClipboardViewer@4', + 'SetCursor@4', + 'SetCursorPos@8', + 'SetDebugErrorLevel@4', + 'SetDeskWallpaper@4', + 'SetDlgItemInt@16', + 'SetDlgItemTextA@12', + 'SetDlgItemTextW@12', + 'SetDoubleClickTime@4', + 'SetFocus@4', + 'SetForegroundWindow@4', + 'SetKeyboardState@4', + 'SetLastErrorEx@8', + 'SetLayeredWindowAttributes@16', + 'SetMenu@8', + 'SetMenuContextHelpId@8', + 'SetMenuDefaultItem@12', + 'SetMenuInfo@8', + 'SetMenuItemBitmaps@20', + 'SetMenuItemInfoA@16', + 'SetMenuItemInfoW@16', + 'SetMessageExtraInfo@4', + 'SetMessageQueue@4', + 'SetParent@8', + 'SetProcessDefaultLayout@4', + 'SetProcessWindowStation@4', + 'SetPropA@12', + 'SetPropW@12', + 'SetRect@20', + 'SetRectEmpty@4', + 'SetScrollInfo@16', + 'SetScrollPos@16', + 'SetScrollRange@20', + 'SetShellWindow@4', + 'SetSysColors@12', + 'SetSystemCursor@8', + 'SetThreadDesktop@4', + 'SetTimer@16', + 'SetUserObjectInformationA@16', + 'SetUserObjectInformationW@16', + 'SetUserObjectSecurity@12', + 'SetWinEventHook@28', + 'SetWindowContextHelpId@8', + 'SetWindowLongA@12', + 'SetWindowLongW@12', + 'SetWindowPlacement@8', + 'SetWindowPos@28', + 'SetWindowRgn@12', + 'SetWindowTextA@8', + 'SetWindowTextW@8', + 'SetWindowWord@12', + 'SetWindowsHookA@8', + 'SetWindowsHookExA@16', + 'SetWindowsHookExW@16', + 'SetWindowsHookW@8', + 'ShowCaret@4', + 'ShowCursor@4', + 'ShowOwnedPopups@8', + 'ShowScrollBar@12', + 'ShowWindow@8', + 'ShowWindowAsync@8', + 'SubtractRect@12', + 'SwapMouseButton@4', + 'SwitchDesktop@4', + 'SwitchToThisWindow@8', + 'SystemParametersInfoA@16', + 'SystemParametersInfoW@16', + 'TabbedTextOutA@32', + 'TabbedTextOutW@32', + 'TileChildWindows@8', + 'TileWindows@20', + 'ToAscii@20', + 'ToAsciiEx@24', + 'ToUnicode@24', + 'ToUnicodeEx@28', + 'TrackMouseEvent@4', + 'TrackPopupMenu@28', + 'TrackPopupMenuEx@24', + 'TranslateAccelerator@12', + 'TranslateAcceleratorA@12', + 'TranslateAcceleratorW@12', + 'TranslateMDISysAccel@8', + 'TranslateMessage@4', + 'UnhookWinEvent@4', + 'UnhookWindowsHook@8', + 'UnhookWindowsHookEx@4', + 'UnionRect@12', + 'UnloadKeyboardLayout@4', + 'UnpackDDElParam@16', + 'UnregisterClassA@8', + 'UnregisterClassW@8', + 'UnregisterDeviceNotification@4', + 'UnregisterHotKey@8', + 'UpdateLayeredWindow@36', + 'UpdateWindow@4', + 'UserHandleGrantAccess@12', + 'ValidateRect@8', + 'ValidateRgn@8', + 'VkKeyScanA@4', + 'VkKeyScanExA@8', + 'VkKeyScanExW@8', + 'VkKeyScanW@4', + 'WINNLSEnableIME@8', + 'WINNLSGetEnableStatus@4', + 'WINNLSGetIMEHotkey@4', + 'WaitForInputIdle@8', + 'WaitMessage@0', + 'WinHelpA@16', + 'WinHelpW@16', + 'WindowFromDC@4', + 'WindowFromPoint@8', + 'keybd_event@16', + 'mouse_event@20', + 'wsprintfA', + 'wsprintfW', + 'wvsprintfA@12', + 'wvsprintfW@12', + ] +} |