+/*++\r
+\r
+Copyright (c) 2006, Intel Corporation \r
+All rights reserved. This program and the accompanying materials \r
+are licensed and made available under the terms and conditions of the BSD License \r
+which accompanies this distribution. The full text of the license may be found at \r
+http://opensource.org/licenses/bsd-license.php \r
+ \r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
+\r
+Module Name:\r
+\r
+ WinNtThunk.h\r
+\r
+Abstract:\r
+\r
+ This protocol allows an EFI driver (DLL) in the NT emulation envirnment\r
+ to make Win32 API calls.\r
+\r
+ NEVER make a Win32 call directly, always make the call via this protocol.\r
+\r
+ There are no This pointers on the protocol member functions as they map\r
+ exactly into Win32 system calls.\r
+\r
+ YOU MUST include EfiWinNT.h in place of Efi.h to make this file compile.\r
+\r
+--*/\r
+\r
+#ifndef __WIN_NT_THUNK_H__\r
+#define __WIN_NT_THUNK_H__\r
+\r
+#define EFI_WIN_NT_THUNK_PROTOCOL_GUID \\r
+ { 0x58c518b1, 0x76f3, 0x11d4, { 0xbc, 0xea, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81 } }\r
+\r
+typedef\r
+WINBASEAPI\r
+VOID\r
+(WINAPI *WinNtSleep) (\r
+ DWORD Milliseconds\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+DWORD\r
+(WINAPI *WinNtSuspendThread) (\r
+ HANDLE hThread\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+HANDLE\r
+(WINAPI *WinNtGetCurrentThread) (\r
+ VOID\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+DWORD\r
+(WINAPI *WinNtGetCurrentThreadId) (\r
+ VOID\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+HANDLE\r
+(WINAPI *WinNtGetCurrentProcess) (\r
+ VOID\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+HANDLE\r
+(WINAPI *WinNtCreateThread) (\r
+ LPSECURITY_ATTRIBUTES lpThreadAttributes,\r
+ DWORD dwStackSize,\r
+ LPTHREAD_START_ROUTINE lpStartAddress,\r
+ LPVOID lpParameter,\r
+ DWORD dwCreationFlags,\r
+ LPDWORD lpThreadId\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+BOOL\r
+(WINAPI *WinNtTerminateThread) (\r
+ HANDLE hThread,\r
+ DWORD dwExitCode\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+BOOL\r
+(WINAPI *WinNtSendMessage) (\r
+ HWND hWnd,\r
+ UINT Msg,\r
+ WPARAM wParam,\r
+ LPARAM lParam\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+VOID\r
+(WINAPI *WinNtExitThread) (\r
+ DWORD dwExitCode\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+DWORD\r
+(WINAPI *WinNtResumeThread) (\r
+ HANDLE hThread\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+BOOL\r
+(WINAPI *WinNtSetThreadPriority) (\r
+ HANDLE hThread,\r
+ INTN nPriority\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+VOID\r
+(WINAPI *WinNtInitializeCriticalSection) (\r
+ LPCRITICAL_SECTION lpCriticalSection\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+VOID\r
+(WINAPI *WinNtDeleteCriticalSection) (\r
+ LPCRITICAL_SECTION lpCriticalSection\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+VOID\r
+(WINAPI *WinNtEnterCriticalSection) (\r
+ LPCRITICAL_SECTION lpCriticalSection\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+VOID\r
+(WINAPI *WinNtLeaveCriticalSection) (\r
+ LPCRITICAL_SECTION lpCriticalSection\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+BOOL\r
+(WINAPI *WinNtTlsAlloc) (\r
+ VOID\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+LPVOID\r
+(WINAPI *WinNtTlsGetValue) (\r
+ DWORD dwTlsIndex\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+BOOL\r
+(WINAPI *WinNtTlsSetValue) (\r
+ DWORD dwTlsIndex,\r
+ LPVOID lpTlsValue\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+BOOL\r
+(WINAPI *WinNtTlsFree) (\r
+ DWORD dwTlsIndex\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+HANDLE\r
+(WINAPI *WinNtCreateSemaphore) (\r
+ LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,\r
+ LONG lInitialCount,\r
+ LONG lMaximumCount,\r
+ LPCWSTR lpName\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+DWORD\r
+(WINAPI *WinNtWaitForSingleObject) (\r
+ HANDLE hHandle,\r
+ DWORD dwMilliseconds\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+BOOL\r
+(WINAPI *WinNtReleaseSemaphore) (\r
+ HANDLE hSemaphore,\r
+ LONG lReleaseCount,\r
+ LPLONG lpPreviousCount\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+BOOL\r
+(WINAPI *WinNtDuplicateHandle) (\r
+ HANDLE hSourceProcessHandle,\r
+ HANDLE hSourceHandle,\r
+ HANDLE hTargetProcessHandle,\r
+ LPHANDLE lpTargetHandle,\r
+ DWORD dwDesiredAccess,\r
+ BOOL bInheritHandle,\r
+ DWORD dwOptions\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+HANDLE\r
+(WINAPI *WinNtCreateConsoleScreenBuffer) (\r
+ DWORD DesiredAccess,\r
+ DWORD ShareMode,\r
+ CONST SECURITY_ATTRIBUTES *SecurityAttributes,\r
+ DWORD Flags,\r
+ LPVOID ScreenBufferData\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+BOOL\r
+(WINAPI *WinNtSetConsoleScreenBufferSize) (\r
+ HANDLE ConsoleOutput,\r
+ COORD Size\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+BOOL\r
+(WINAPI *WinNtSetConsoleActiveScreenBuffer) (\r
+ HANDLE ConsoleOutput\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+BOOL\r
+(WINAPI *WinNtFillConsoleOutputAttribute) (\r
+ HANDLE ConsoleOutput,\r
+ WORD Attribute,\r
+ DWORD Length,\r
+ COORD WriteCoord,\r
+ LPDWORD NumberOfAttrsWritten\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+BOOL\r
+(WINAPI *WinNtFillConsoleOutputCharacter) (\r
+ HANDLE ConsoleOutput,\r
+ TCHAR Character,\r
+ DWORD Length,\r
+ COORD WriteCoord,\r
+ LPDWORD NumberOfCharsWritten\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+BOOL\r
+(WINAPI *WinNtWriteConsoleOutput) (\r
+ HANDLE ConsoleOutput,\r
+ CONST CHAR_INFO *Buffer,\r
+ COORD BufferSize,\r
+ COORD BufferCoord,\r
+ PSMALL_RECT WriteRegion\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+BOOL\r
+(WINAPI *WinNtScrollConsoleScreenBuffer) (\r
+ HANDLE ConsoleOutput,\r
+ CONST SMALL_RECT *ScrollRectangle,\r
+ CONST SMALL_RECT *ClipRectangle,\r
+ COORD DestinationOrigin,\r
+ CONST CHAR_INFO *Fill\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+BOOL\r
+(WINAPI *WinNtSetConsoleTitleW) (\r
+ LPCTSTR ConsoleTitle\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+BOOL\r
+(WINAPI *WinNtGetConsoleCursorInfo) (\r
+ HANDLE ConsoleOutput,\r
+ PCONSOLE_CURSOR_INFO ConsoleCursorInfo\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+BOOL\r
+(WINAPI *WinNtSetConsoleCursorInfo) (\r
+ HANDLE ConsoleOutput,\r
+ CONST CONSOLE_CURSOR_INFO *ConsoleCursorInfo\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+BOOL\r
+(WINAPI *WinNtSetPriorityClass) (\r
+ HANDLE Process,\r
+ DWORD PriorityClass\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+BOOL\r
+(WINAPI *WinNtWriteConsoleInput) (\r
+ HANDLE ConsoleInput,\r
+ CONST INPUT_RECORD *Buffer,\r
+ DWORD Legnth,\r
+ LPDWORD NumberOfEventsWritten\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+BOOL\r
+(WINAPI *WinNtGetNumberOfConsoleInputEvents) (\r
+ HANDLE ConsoleInput,\r
+ LPDWORD NumberOfEvents\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+HANDLE\r
+(WINAPI *WinNtGetStdHandle) (\r
+ DWORD StdHandle\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+BOOL\r
+(WINAPI *WinNtReadConsoleInput) (\r
+ HANDLE ConsoleInput,\r
+ PINPUT_RECORD Buffer,\r
+ DWORD Length,\r
+ LPDWORD NumberOfEventsRead\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+BOOL\r
+(WINAPI *WinNtPeekConsoleInput) (\r
+ HANDLE ConsoleInput,\r
+ PINPUT_RECORD Buffer,\r
+ DWORD Length,\r
+ LPDWORD NumberOfEventsRead\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+BOOL\r
+(WINAPI *WinNtSetConsoleCursorPosition) (\r
+ HANDLE ConsoleInput,\r
+ COORD CursorPosition\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+HANDLE\r
+(WINAPI *WinNtCreateFile) (\r
+ LPCWSTR FileName,\r
+ DWORD DesiredAccess,\r
+ DWORD SharedMode,\r
+ LPSECURITY_ATTRIBUTES SecurityAttributes,\r
+ DWORD CreationDisposition,\r
+ DWORD FlagsAndAttributes,\r
+ HANDLE TemplateFile\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+BOOL\r
+(WINAPI *WinNtDeviceIoControl) (\r
+ HANDLE DeviceHandle,\r
+ DWORD IoControlCode,\r
+ LPVOID InBuffer,\r
+ DWORD InBufferSize,\r
+ LPVOID OutBuffer,\r
+ DWORD OutBufferSize,\r
+ LPDWORD BytesReturned,\r
+ LPOVERLAPPED Overlapped\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+BOOL\r
+(WINAPI *WinNtCreateDirectory) (\r
+ LPCWSTR PathName,\r
+ LPSECURITY_ATTRIBUTES SecurityAttributes\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+BOOL\r
+(WINAPI *WinNtRemoveDirectory) (\r
+ LPCWSTR PathName\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+DWORD\r
+(WINAPI *WinNtGetFileAttributes) (\r
+ LPCWSTR FileName\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+BOOL\r
+(WINAPI *WinNtSetFileAttributes) (\r
+ LPCWSTR FileName,\r
+ DWORD FileAttributes\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+HANDLE\r
+(WINAPI *WinNtCreateFileMapping) (\r
+ HANDLE FileHandle,\r
+ LPSECURITY_ATTRIBUTES Attributes,\r
+ DWORD Protect,\r
+ DWORD MaximumSizeHigh,\r
+ DWORD MaximumSizeLow,\r
+ LPCTSTR Name\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+LPVOID\r
+(WINAPI *WinNtMapViewOfFileEx) (\r
+ HANDLE FileHandle,\r
+ DWORD DesiredAccess,\r
+ DWORD FileOffsetHigh,\r
+ DWORD FileOffsetLow,\r
+ DWORD NumberOfBytesToMap,\r
+ LPVOID BaseAddress\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+DWORD\r
+(WINAPI *WinNtGetEnvironmentVariable) (\r
+ LPCTSTR Name,\r
+ LPTSTR Buffer,\r
+ DWORD Size\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+BOOL\r
+(WINAPI *WinNtCloseHandle) (\r
+ HANDLE Object\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+DWORD\r
+(WINAPI *WinNtSetFilePointer) (\r
+ HANDLE FileHandle,\r
+ LONG DistanceToMove,\r
+ PLONG DistanceToHoveHigh,\r
+ DWORD MoveMethod\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+BOOL\r
+(WINAPI *WinNtSetEndOfFile) (\r
+ HANDLE FileHandle\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+BOOL\r
+(WINAPI *WinNtReadFile) (\r
+ HANDLE FileHandle,\r
+ LPVOID Buffer,\r
+ DWORD NumberOfBytesToRead,\r
+ LPDWORD NumberOfBytesRead,\r
+ LPOVERLAPPED Overlapped\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+BOOL\r
+(WINAPI *WinNtWriteFile) (\r
+ HANDLE FileHandle,\r
+ LPCVOID Buffer,\r
+ DWORD NumberOfBytesToWrite,\r
+ LPDWORD NumberOfBytesWritten,\r
+ LPOVERLAPPED Overlapped\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+BOOL\r
+(WINAPI *WinNtGetFileInformationByHandle) (\r
+ HANDLE FileHandle,\r
+ BY_HANDLE_FILE_INFORMATION *FileInfo\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+BOOL\r
+(WINAPI *WinNtGetDiskFreeSpace) (\r
+ LPCTSTR RootPathName,\r
+ LPDWORD SectorsPerCluster,\r
+ LPDWORD BytesPerSector,\r
+ LPDWORD NumberOfFreeClusters,\r
+ LPDWORD TotalNumberOfClusters\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+BOOL\r
+(WINAPI *WinNtGetDiskFreeSpaceEx) (\r
+ LPCTSTR DirectoryName,\r
+ PULARGE_INTEGER FreeBytesAvailable,\r
+ PULARGE_INTEGER TotalNumberOfBytes,\r
+ PULARGE_INTEGER TotoalNumberOfFreeBytes\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+BOOL\r
+(WINAPI *WinNtMoveFile) (\r
+ LPCTSTR ExistingFileName,\r
+ LPCTSTR NewFileName\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+BOOL\r
+(WINAPI *WinNtSetFileTime) (\r
+ HANDLE FileHandle,\r
+ FILETIME *CreationTime,\r
+ FILETIME *LastAccessTime,\r
+ FILETIME *LastWriteTime\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+BOOL\r
+(WINAPI *WinNtSystemTimeToFileTime) (\r
+ SYSTEMTIME * SystemTime,\r
+ FILETIME * FileTime\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+BOOL\r
+(WINAPI *WinNtDeleteFile) (\r
+ LPCTSTR FileName\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+BOOL\r
+(WINAPI *WinNtFlushFileBuffers) (\r
+ HANDLE\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+DWORD\r
+(WINAPI *WinNtGetLastError) (\r
+ VOID\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+UINT\r
+(WINAPI *WinNtSetErrorMode) (\r
+ UINT Mode\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+DWORD\r
+(WINAPI *WinNtGetTickCount) (\r
+ VOID\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+HMODULE\r
+(WINAPI *WinNtLoadLibraryEx) (\r
+ LPCTSTR LibFileName,\r
+ HANDLE FileHandle,\r
+ DWORD Flags\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+FARPROC\r
+(WINAPI *WinNtGetProcAddress) (\r
+ HMODULE Module,\r
+ LPCSTR ProcName\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+DWORD\r
+(WINAPI *WinNtGetTimeZoneInformation) (\r
+ LPTIME_ZONE_INFORMATION timeZoneInformation\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+MMRESULT\r
+(WINAPI *WinNttimeSetEvent) (\r
+ UINT uDelay,\r
+ UINT uResolution,\r
+ LPTIMECALLBACK lpTimeProc,\r
+ DWORD_PTR dwUser,\r
+ UINT fuEvent\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+MMRESULT\r
+(WINAPI *WinNttimeKillEvent) (\r
+ UINT uTimerID\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+DWORD\r
+(WINAPI *WinNtSetTimeZoneInformation) (\r
+ LPTIME_ZONE_INFORMATION timeZoneInformation\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+VOID\r
+(WINAPI *WinNtGetSystemTime) (\r
+ LPSYSTEMTIME SystemTime\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+BOOL\r
+(WINAPI *WinNtSetSystemTime) (\r
+ CONST SYSTEMTIME *SystemTime\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+VOID\r
+(WINAPI *WinNtGetLocalTime) (\r
+ LPSYSTEMTIME SystemTime\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+BOOL\r
+(WINAPI *WinNtSetLocalTime) (\r
+ CONST SYSTEMTIME *SystemTime\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+BOOL\r
+(WINAPI *WinNtFileTimeToLocalFileTime) (\r
+ CONST FILETIME *FileTime,\r
+ LPFILETIME LocalFileTime\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+BOOL\r
+(WINAPI *WinNtFileTimeToSystemTime) (\r
+ CONST FILETIME *FileTime,\r
+ LPSYSTEMTIME SystemTime\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+HANDLE\r
+(WINAPI *WinNtFindFirstFile) (\r
+ LPCTSTR FileName,\r
+ LPWIN32_FIND_DATA FindFileData\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+BOOL\r
+(WINAPI *WinNtFindNextFile) (\r
+ HANDLE FindFile,\r
+ LPWIN32_FIND_DATA FindFileData\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+BOOL\r
+(WINAPI *WinNtFindClose) (\r
+ HANDLE FindFile\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+BOOL\r
+(WINAPI *WinNtGetCommState) (\r
+ HANDLE FileHandle,\r
+ LPDCB DCB\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+BOOL\r
+(WINAPI *WinNtSetCommState) (\r
+ HANDLE FileHandle,\r
+ LPDCB DCB\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+BOOL\r
+(WINAPI *WinNtSetCommState) (\r
+ HANDLE FileHandle,\r
+ LPDCB DCB\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+BOOL\r
+(WINAPI *WinNtSetCommTimeouts) (\r
+ HANDLE FileHandle,\r
+ LPCOMMTIMEOUTS CommTimeouts\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+VOID\r
+(WINAPI *WinNtExitProcess) (\r
+ UINT uExitCode // exit code for all threads\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+BOOL\r
+(WINAPI *WinNtPurgeComm) (\r
+ HANDLE FileHandle,\r
+ DWORD Flags\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+BOOL\r
+(WINAPI *WinNtEscapeCommFunction) (\r
+ HANDLE FileHandle,\r
+ DWORD Func\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+BOOL\r
+(WINAPI *WinNtGetCommModemStatus) (\r
+ HANDLE FileHandle,\r
+ LPDWORD ModemStat\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+BOOL\r
+(WINAPI *WinNtClearCommError) (\r
+ HANDLE FileHandle,\r
+ LPDWORD Errors,\r
+ LPCOMSTAT Stat\r
+ );\r
+\r
+typedef\r
+WINUSERAPI\r
+INT32\r
+(WINAPIV *WinNtSprintf) (\r
+ LPWSTR Buffer,\r
+ size_t Count,\r
+ LPCWSTR String,\r
+ ...\r
+ );\r
+\r
+typedef\r
+WINUSERAPI\r
+HWND\r
+(WINAPI *WinNtGetDesktopWindow) (\r
+ VOID\r
+ );\r
+\r
+typedef\r
+WINUSERAPI\r
+HWND\r
+(WINAPI *WinNtGetForegroundWindow) (\r
+ VOID\r
+ );\r
+\r
+typedef\r
+WINUSERAPI\r
+HWND\r
+(WINAPI *WinNtCreateWindowEx) (\r
+ DWORD dwExStyle,\r
+ LPCTSTR lpClassName,\r
+ LPCTSTR lpWindowName,\r
+ DWORD dwStyle,\r
+ INT32 x,\r
+ INT32 y,\r
+ INT32 nWidth,\r
+ INT32 nHeight,\r
+ HWND hWndParent,\r
+ HMENU hMenu,\r
+ HINSTANCE hInstance,\r
+ LPVOID *lpParam\r
+ );\r
+\r
+typedef\r
+WINUSERAPI\r
+BOOL\r
+(WINAPI *WinNtUpdateWindow) (\r
+ HWND hWnd\r
+ );\r
+\r
+typedef\r
+WINUSERAPI\r
+BOOL\r
+(WINAPI *WinNtShowWindow) (\r
+ HWND hWnd,\r
+ INT32 nCmdShow\r
+ );\r
+\r
+typedef\r
+WINGDIAPI\r
+BOOL\r
+(WINAPI *WinNtDestroyWindow) (\r
+ HWND hWnd\r
+ );\r
+\r
+typedef\r
+WINUSERAPI\r
+HDC\r
+(WINAPI *WinNtGetWindowDC) (\r
+ HWND hWnd\r
+ );\r
+\r
+typedef\r
+WINUSERAPI\r
+BOOL\r
+(WINAPI *WinNtGetClientRect) (\r
+ HWND hWnd,\r
+ LPRECT lpRect\r
+ );\r
+\r
+typedef\r
+WINUSERAPI\r
+BOOL\r
+(WINAPI *WinNtAdjustWindowRect) (\r
+ LPRECT lpRect,\r
+ DWORD dwStyle,\r
+ BOOL bMenu\r
+ );\r
+\r
+typedef\r
+WINGDIAPI\r
+INT32\r
+(WINAPI *WinNtSetDIBitsToDevice) (\r
+ HDC,\r
+ INT32,\r
+ INT32,\r
+ DWORD,\r
+ DWORD,\r
+ INT32,\r
+ INT32,\r
+ UINT,\r
+ UINT,\r
+ CONST VOID *,\r
+ CONST BITMAPINFO *,\r
+ UINT\r
+ );\r
+\r
+typedef\r
+WINGDIAPI\r
+BOOL\r
+(WINAPI *WinNtBitBlt) (\r
+ HDC,\r
+ INT32,\r
+ INT32,\r
+ INT32,\r
+ INT32,\r
+ HDC,\r
+ INT32,\r
+ INT32,\r
+ DWORD\r
+ );\r
+\r
+typedef\r
+WINUSERAPI\r
+BOOL\r
+(WINAPI *WinNtInvalidateRect) (\r
+ HWND hWnd,\r
+ CONST RECT *lpRect,\r
+ BOOL bErase\r
+ );\r
+\r
+typedef\r
+WINUSERAPI\r
+HDC\r
+(WINAPI *WinNtGetDC) (\r
+ HWND hWnd\r
+ );\r
+\r
+typedef\r
+WINUSERAPI\r
+INT32\r
+(WINAPI *WinNtReleaseDC) (\r
+ HWND hWnd,\r
+ HDC hDC\r
+ );\r
+\r
+typedef\r
+WINUSERAPI\r
+ATOM\r
+(WINAPI *WinNtRegisterClassEx) (\r
+ CONST WNDCLASSEX *\r
+ );\r
+\r
+typedef\r
+WINUSERAPI\r
+BOOL\r
+(WINAPI *WinNtUnregisterClass) (\r
+ LPCTSTR lpClassName,\r
+ HINSTANCE hInstance\r
+ );\r
+\r
+typedef\r
+WINUSERAPI\r
+HDC\r
+(WINAPI *WinNtBeginPaint) (\r
+ HWND hWnd,\r
+ LPPAINTSTRUCT lpPaint\r
+ );\r
+\r
+typedef\r
+WINUSERAPI\r
+BOOL\r
+(WINAPI *WinNtEndPaint) (\r
+ HWND hWnd,\r
+ CONST PAINTSTRUCT *lpPaint\r
+ );\r
+\r
+typedef\r
+WINUSERAPI\r
+VOID\r
+(WINAPI *WinNtPostQuitMessage) (\r
+ INT32 nExitCode\r
+ );\r
+\r
+typedef\r
+WINUSERAPI\r
+LRESULT\r
+(WINAPI *WinNtDefWindowProc) (\r
+ HWND hWnd,\r
+ UINT Msg,\r
+ WPARAM wParam,\r
+ LPARAM lParam\r
+ );\r
+\r
+typedef\r
+WINUSERAPI\r
+HICON\r
+(WINAPI *WinNtLoadIcon) (\r
+ HINSTANCE hInstance,\r
+ LPCTSTR lpIconName\r
+ );\r
+\r
+typedef\r
+WINUSERAPI\r
+HCURSOR\r
+(WINAPI *WinNtLoadCursor) (\r
+ HINSTANCE hInstance,\r
+ LPCTSTR lpCursorName\r
+ );\r
+\r
+typedef\r
+WINGDIAPI\r
+HGDIOBJ\r
+(WINAPI *WinNtGetStockObject) (\r
+ INT32\r
+ );\r
+\r
+typedef\r
+WINGDIAPI\r
+BOOL\r
+(WINAPI *WinNtSetViewportOrgEx) (\r
+ HDC,\r
+ INT32,\r
+ INT32,\r
+ LPPOINT\r
+ );\r
+\r
+typedef\r
+WINGDIAPI\r
+BOOL\r
+(WINAPI *WinNtSetWindowOrgEx) (\r
+ HDC,\r
+ INT32,\r
+ INT32,\r
+ LPPOINT\r
+ );\r
+typedef\r
+WINGDIAPI\r
+BOOL\r
+(WINAPI *WinNtMoveWindow) (\r
+ HWND,\r
+ INT32,\r
+ INT32,\r
+ INT32,\r
+ INT32,\r
+ BOOL\r
+ );\r
+\r
+typedef\r
+WINGDIAPI\r
+BOOL\r
+(WINAPI *WinNtGetWindowRect) (\r
+ HWND,\r
+ LPRECT\r
+ );\r
+\r
+typedef\r
+WINUSERAPI\r
+BOOL\r
+(WINAPI *WinNtGetMessage) (\r
+ LPMSG lpMsg,\r
+ HWND hWnd,\r
+ UINT wMsgFilterMin,\r
+ UINT wMsgFilterMax\r
+ );\r
+\r
+typedef\r
+WINUSERAPI\r
+BOOL\r
+(WINAPI *WinNtTranslateMessage) (\r
+ CONST MSG *lpMsg\r
+ );\r
+\r
+typedef\r
+WINUSERAPI\r
+BOOL\r
+(WINAPI *WinNtDispatchMessage) (\r
+ CONST MSG *lpMsg\r
+ );\r
+\r
+typedef\r
+WINUSERAPI\r
+HANDLE\r
+(WINAPI *WinNtGetProcessHeap) ();\r
+\r
+typedef\r
+WINUSERAPI\r
+LPVOID\r
+(WINAPI *WinNtHeapAlloc) (\r
+ HANDLE hHeap,\r
+ DWORD dwFlags,\r
+ SIZE_T dwBytes\r
+ );\r
+\r
+typedef\r
+WINUSERAPI\r
+BOOL\r
+(WINAPI *WinNtHeapFree) (\r
+ HANDLE hHeap,\r
+ DWORD dwFlags,\r
+ LPVOID lpMem\r
+ );\r
+\r
+typedef\r
+WINBASEAPI\r
+BOOL\r
+(WINAPI *WinNtFreeLibrary) (\r
+ HANDLE ModHandle\r
+ );\r
+//\r
+//\r
+//\r
+\r
+#define EFI_WIN_NT_THUNK_PROTOCOL_SIGNATURE EFI_SIGNATURE_32 ('N', 'T', 'T', 'T')\r
+\r
+typedef struct {\r
+ UINT64 Signature;\r
+\r
+ //\r
+ // Win32 Process APIs\r
+ //\r
+ WinNtGetProcAddress GetProcAddress;\r
+ WinNtGetTickCount GetTickCount;\r
+ WinNtLoadLibraryEx LoadLibraryEx;\r
+ WinNtFreeLibrary FreeLibrary;\r
+\r
+ WinNtSetPriorityClass SetPriorityClass;\r
+ WinNtSetThreadPriority SetThreadPriority;\r
+ WinNtSleep Sleep;\r
+\r
+ WinNtSuspendThread SuspendThread;\r
+ WinNtGetCurrentThread GetCurrentThread;\r
+ WinNtGetCurrentThreadId GetCurrentThreadId;\r
+ WinNtGetCurrentProcess GetCurrentProcess;\r
+ WinNtCreateThread CreateThread;\r
+ WinNtTerminateThread TerminateThread;\r
+ WinNtSendMessage SendMessage;\r
+ WinNtExitThread ExitThread;\r
+ WinNtResumeThread ResumeThread;\r
+ WinNtDuplicateHandle DuplicateHandle;\r
+\r
+ //\r
+ // Wint32 Mutex primitive\r
+ //\r
+ WinNtInitializeCriticalSection InitializeCriticalSection;\r
+ WinNtEnterCriticalSection EnterCriticalSection;\r
+ WinNtLeaveCriticalSection LeaveCriticalSection;\r
+ WinNtDeleteCriticalSection DeleteCriticalSection;\r
+ WinNtTlsAlloc TlsAlloc;\r
+ WinNtTlsFree TlsFree;\r
+ WinNtTlsSetValue TlsSetValue;\r
+ WinNtTlsGetValue TlsGetValue;\r
+ WinNtCreateSemaphore CreateSemaphore;\r
+ WinNtWaitForSingleObject WaitForSingleObject;\r
+ WinNtReleaseSemaphore ReleaseSemaphore;\r
+\r
+ //\r
+ // Win32 Console APIs\r
+ //\r
+ WinNtCreateConsoleScreenBuffer CreateConsoleScreenBuffer;\r
+ WinNtFillConsoleOutputAttribute FillConsoleOutputAttribute;\r
+ WinNtFillConsoleOutputCharacter FillConsoleOutputCharacter;\r
+ WinNtGetConsoleCursorInfo GetConsoleCursorInfo;\r
+ WinNtGetNumberOfConsoleInputEvents GetNumberOfConsoleInputEvents;\r
+ WinNtPeekConsoleInput PeekConsoleInput;\r
+ WinNtScrollConsoleScreenBuffer ScrollConsoleScreenBuffer;\r
+ WinNtReadConsoleInput ReadConsoleInput;\r
+\r
+ WinNtSetConsoleActiveScreenBuffer SetConsoleActiveScreenBuffer;\r
+ WinNtSetConsoleCursorInfo SetConsoleCursorInfo;\r
+ WinNtSetConsoleCursorPosition SetConsoleCursorPosition;\r
+ WinNtSetConsoleScreenBufferSize SetConsoleScreenBufferSize;\r
+ WinNtSetConsoleTitleW SetConsoleTitleW;\r
+ WinNtWriteConsoleInput WriteConsoleInput;\r
+ WinNtWriteConsoleOutput WriteConsoleOutput;\r
+\r
+ //\r
+ // Win32 File APIs\r
+ //\r
+ WinNtCreateFile CreateFile;\r
+ WinNtDeviceIoControl DeviceIoControl;\r
+ WinNtCreateDirectory CreateDirectory;\r
+ WinNtRemoveDirectory RemoveDirectory;\r
+ WinNtGetFileAttributes GetFileAttributes;\r
+ WinNtSetFileAttributes SetFileAttributes;\r
+ WinNtCreateFileMapping CreateFileMapping;\r
+ WinNtCloseHandle CloseHandle;\r
+ WinNtDeleteFile DeleteFile;\r
+ WinNtFindFirstFile FindFirstFile;\r
+ WinNtFindNextFile FindNextFile;\r
+ WinNtFindClose FindClose;\r
+ WinNtFlushFileBuffers FlushFileBuffers;\r
+ WinNtGetEnvironmentVariable GetEnvironmentVariable;\r
+ WinNtGetLastError GetLastError;\r
+ WinNtSetErrorMode SetErrorMode;\r
+ WinNtGetStdHandle GetStdHandle;\r
+ WinNtMapViewOfFileEx MapViewOfFileEx;\r
+ WinNtReadFile ReadFile;\r
+ WinNtSetEndOfFile SetEndOfFile;\r
+ WinNtSetFilePointer SetFilePointer;\r
+ WinNtWriteFile WriteFile;\r
+ WinNtGetFileInformationByHandle GetFileInformationByHandle;\r
+ WinNtGetDiskFreeSpace GetDiskFreeSpace;\r
+ WinNtGetDiskFreeSpaceEx GetDiskFreeSpaceEx;\r
+ WinNtMoveFile MoveFile;\r
+ WinNtSetFileTime SetFileTime;\r
+ WinNtSystemTimeToFileTime SystemTimeToFileTime;\r
+\r
+ //\r
+ // Win32 Time APIs\r
+ //\r
+ WinNtFileTimeToLocalFileTime FileTimeToLocalFileTime;\r
+ WinNtFileTimeToSystemTime FileTimeToSystemTime;\r
+ WinNtGetSystemTime GetSystemTime;\r
+ WinNtSetSystemTime SetSystemTime;\r
+ WinNtGetLocalTime GetLocalTime;\r
+ WinNtSetLocalTime SetLocalTime;\r
+ WinNtGetTimeZoneInformation GetTimeZoneInformation;\r
+ WinNtSetTimeZoneInformation SetTimeZoneInformation;\r
+ WinNttimeSetEvent timeSetEvent;\r
+ WinNttimeKillEvent timeKillEvent;\r
+\r
+ //\r
+ // Win32 Serial APIs\r
+ //\r
+ WinNtClearCommError ClearCommError;\r
+ WinNtEscapeCommFunction EscapeCommFunction;\r
+ WinNtGetCommModemStatus GetCommModemStatus;\r
+ WinNtGetCommState GetCommState;\r
+ WinNtSetCommState SetCommState;\r
+ WinNtPurgeComm PurgeComm;\r
+ WinNtSetCommTimeouts SetCommTimeouts;\r
+\r
+ WinNtExitProcess ExitProcess;\r
+\r
+ WinNtSprintf SPrintf;\r
+\r
+ WinNtGetDesktopWindow GetDesktopWindow;\r
+ WinNtGetForegroundWindow GetForegroundWindow;\r
+ WinNtCreateWindowEx CreateWindowEx;\r
+ WinNtShowWindow ShowWindow;\r
+ WinNtUpdateWindow UpdateWindow;\r
+ WinNtDestroyWindow DestroyWindow;\r
+ WinNtInvalidateRect InvalidateRect;\r
+ WinNtGetWindowDC GetWindowDC;\r
+ WinNtGetClientRect GetClientRect;\r
+ WinNtAdjustWindowRect AdjustWindowRect;\r
+ WinNtSetDIBitsToDevice SetDIBitsToDevice;\r
+ WinNtBitBlt BitBlt;\r
+ WinNtGetDC GetDC;\r
+ WinNtReleaseDC ReleaseDC;\r
+ WinNtRegisterClassEx RegisterClassEx;\r
+ WinNtUnregisterClass UnregisterClass;\r
+\r
+ WinNtBeginPaint BeginPaint;\r
+ WinNtEndPaint EndPaint;\r
+ WinNtPostQuitMessage PostQuitMessage;\r
+ WinNtDefWindowProc DefWindowProc;\r
+ WinNtLoadIcon LoadIcon;\r
+ WinNtLoadCursor LoadCursor;\r
+ WinNtGetStockObject GetStockObject;\r
+ WinNtSetViewportOrgEx SetViewportOrgEx;\r
+ WinNtSetWindowOrgEx SetWindowOrgEx;\r
+ WinNtMoveWindow MoveWindow;\r
+ WinNtGetWindowRect GetWindowRect;\r
+\r
+ WinNtGetMessage GetMessage;\r
+ WinNtTranslateMessage TranslateMessage;\r
+ WinNtDispatchMessage DispatchMessage;\r
+\r
+ WinNtGetProcessHeap GetProcessHeap;\r
+ WinNtHeapAlloc HeapAlloc;\r
+ WinNtHeapFree HeapFree;\r
+\r
+} EFI_WIN_NT_THUNK_PROTOCOL;\r
+\r
+extern EFI_GUID gEfiWinNtThunkProtocolGuid;\r
+\r
+#endif\r