1 /**@file 2 3 Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR> 4 This program and the accompanying materials 5 are licensed and made available under the terms and conditions of the BSD License 6 which accompanies this distribution. The full text of the license may be found at 7 http://opensource.org/licenses/bsd-license.php 8 9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 11 12 Module Name: 13 14 WinNtThunk.c 15 16 Abstract: 17 18 Since the SEC is the only windows program in our emulation we 19 must use a Tiano mechanism to export Win32 APIs to other modules. 20 This is the role of the EFI_WIN_NT_THUNK_PROTOCOL. 21 22 The mWinNtThunkTable exists so that a change to EFI_WIN_NT_THUNK_PROTOCOL 23 will cause an error in initializing the array if all the member functions 24 are not added. It looks like adding a element to end and not initializing 25 it may cause the table to be initaliized with the members at the end being 26 set to zero. This is bad as jumping to zero will case the NT32 to crash. 27 28 All the member functions in mWinNtThunkTable are Win32 29 API calls, so please reference Microsoft documentation. 30 31 32 gWinNt is a a public exported global that contains the initialized 33 data. 34 35 **/ 36 37 #include "SecMain.h" 38 39 // 40 // This pragma is needed for all the DLL entry points to be asigned to the array. 41 // if warning 4232 is not dissabled a warning will be generated as a DLL entry 42 // point could be modified dynamically. The SEC does not do that, so we must 43 // disable the warning so we can compile the SEC. The previous method was to 44 // asign each element in code. The disadvantage to that approach is it's harder 45 // to tell if all the elements have been initailized properly. 46 // 47 #pragma warning(disable : 4232) 48 #pragma warning(disable : 4996) 49 50 #if __INTEL_COMPILER 51 #pragma warning ( disable : 144 ) 52 #endif 53 54 EFI_WIN_NT_THUNK_PROTOCOL mWinNtThunkTable = { 55 EFI_WIN_NT_THUNK_PROTOCOL_SIGNATURE, 56 GetProcAddress, 57 GetTickCount, 58 LoadLibraryEx, 59 FreeLibrary, 60 SetPriorityClass, 61 SetThreadPriority, 62 Sleep, 63 SuspendThread, 64 GetCurrentThread, 65 GetCurrentThreadId, 66 GetCurrentProcess, 67 CreateThread, 68 TerminateThread, 69 SendMessage, 70 ExitThread, 71 ResumeThread, 72 DuplicateHandle, 73 InitializeCriticalSection, 74 EnterCriticalSection, 75 LeaveCriticalSection, 76 DeleteCriticalSection, 77 TlsAlloc, 78 TlsFree, 79 TlsSetValue, 80 TlsGetValue, 81 CreateSemaphore, 82 WaitForSingleObject, 83 ReleaseSemaphore, 84 CreateConsoleScreenBuffer, 85 FillConsoleOutputAttribute, 86 FillConsoleOutputCharacter, 87 GetConsoleCursorInfo, 88 GetNumberOfConsoleInputEvents, 89 PeekConsoleInput, 90 ScrollConsoleScreenBuffer, 91 ReadConsoleInput, 92 SetConsoleActiveScreenBuffer, 93 SetConsoleCursorInfo, 94 SetConsoleCursorPosition, 95 SetConsoleScreenBufferSize, 96 SetConsoleTitleW, 97 WriteConsoleInput, 98 WriteConsoleOutput, 99 CreateFile, 100 DeviceIoControl, 101 CreateDirectory, 102 RemoveDirectory, 103 GetFileAttributes, 104 SetFileAttributes, 105 CreateFileMapping, 106 CloseHandle, 107 DeleteFile, 108 FindFirstFile, 109 FindNextFile, 110 FindClose, 111 FlushFileBuffers, 112 GetEnvironmentVariable, 113 GetLastError, 114 SetErrorMode, 115 GetStdHandle, 116 MapViewOfFileEx, 117 ReadFile, 118 SetEndOfFile, 119 SetFilePointer, 120 WriteFile, 121 GetFileInformationByHandle, 122 GetDiskFreeSpace, 123 GetDiskFreeSpaceEx, 124 MoveFile, 125 SetFileTime, 126 SystemTimeToFileTime, 127 LocalFileTimeToFileTime, 128 FileTimeToLocalFileTime, 129 FileTimeToSystemTime, 130 GetSystemTime, 131 SetSystemTime, 132 GetLocalTime, 133 SetLocalTime, 134 GetTimeZoneInformation, 135 SetTimeZoneInformation, 136 timeSetEvent, 137 timeKillEvent, 138 ClearCommError, 139 EscapeCommFunction, 140 GetCommModemStatus, 141 GetCommState, 142 SetCommState, 143 PurgeComm, 144 SetCommTimeouts, 145 ExitProcess, 146 _snwprintf, 147 GetDesktopWindow, 148 GetForegroundWindow, 149 CreateWindowEx, 150 ShowWindow, 151 UpdateWindow, 152 DestroyWindow, 153 InvalidateRect, 154 GetWindowDC, 155 GetClientRect, 156 AdjustWindowRect, 157 SetDIBitsToDevice, 158 BitBlt, 159 GetDC, 160 ReleaseDC, 161 RegisterClassEx, 162 UnregisterClass, 163 BeginPaint, 164 EndPaint, 165 PostQuitMessage, 166 DefWindowProc, 167 LoadIcon, 168 LoadCursor, 169 GetStockObject, 170 SetViewportOrgEx, 171 SetWindowOrgEx, 172 MoveWindow, 173 GetWindowRect, 174 GetMessage, 175 TranslateMessage, 176 DispatchMessage, 177 GetProcessHeap, 178 HeapAlloc, 179 HeapFree, 180 QueryPerformanceCounter, 181 QueryPerformanceFrequency 182 }; 183 184 #pragma warning(default : 4996) 185 #pragma warning(default : 4232) 186 187 EFI_WIN_NT_THUNK_PROTOCOL *gWinNt = &mWinNtThunkTable; 188