3 Copyright (c) 2004 - 2008, Intel Corporation
4 All rights reserved. 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
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.
18 This protocol allows an EFI driver (DLL) in the NT emulation envirnment
19 to make Win32 API calls.
21 NEVER make a Win32 call directly, always make the call via this protocol.
23 There are no This pointers on the protocol member functions as they map
24 exactly into Win32 system calls.
26 YOU MUST include EfiWinNT.h in place of Efi.h to make this file compile.
30 #ifndef _WIN_NT_THUNK_H_
31 #define _WIN_NT_THUNK_H_
33 #define EFI_WIN_NT_THUNK_PROTOCOL_GUID \
35 0x58c518b1, 0x76f3, 0x11d4, {0xbc, 0xea, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81} \
39 // The following APIs require EfiWinNT.h. In some environmnets the GUID
40 // definitions are needed but the EfiWinNT.h is not included.
41 // EfiWinNT.h is needed to support WINDOWS API requirements.
48 (WINAPI
*WinNtSleep
) (
55 (WINAPI
*WinNtSuspendThread
) (
62 (WINAPI
*WinNtGetCurrentThread
) (
69 (WINAPI
*WinNtGetCurrentThreadId
) (
76 (WINAPI
*WinNtGetCurrentProcess
) (
83 (WINAPI
*WinNtCreateThread
) (
84 LPSECURITY_ATTRIBUTES lpThreadAttributes
,
86 LPTHREAD_START_ROUTINE lpStartAddress
,
88 DWORD dwCreationFlags
,
95 (WINAPI
*WinNtTerminateThread
) (
103 (WINAPI
*WinNtSendMessage
) (
113 (WINAPI
*WinNtExitThread
) (
120 (WINAPI
*WinNtResumeThread
) (
127 (WINAPI
*WinNtSetThreadPriority
) (
135 (WINAPI
*WinNtInitializeCriticalSection
) (
136 LPCRITICAL_SECTION lpCriticalSection
142 (WINAPI
*WinNtDeleteCriticalSection
) (
143 LPCRITICAL_SECTION lpCriticalSection
149 (WINAPI
*WinNtEnterCriticalSection
) (
150 LPCRITICAL_SECTION lpCriticalSection
156 (WINAPI
*WinNtLeaveCriticalSection
) (
157 LPCRITICAL_SECTION lpCriticalSection
163 (WINAPI
*WinNtTlsAlloc
) (
170 (WINAPI
*WinNtTlsGetValue
) (
177 (WINAPI
*WinNtTlsSetValue
) (
185 (WINAPI
*WinNtTlsFree
) (
192 (WINAPI
*WinNtCreateSemaphore
) (
193 LPSECURITY_ATTRIBUTES lpSemaphoreAttributes
,
202 (WINAPI
*WinNtWaitForSingleObject
) (
210 (WINAPI
*WinNtReleaseSemaphore
) (
213 LPLONG lpPreviousCount
219 (WINAPI
*WinNtDuplicateHandle
) (
220 HANDLE hSourceProcessHandle
,
221 HANDLE hSourceHandle
,
222 HANDLE hTargetProcessHandle
,
223 LPHANDLE lpTargetHandle
,
224 DWORD dwDesiredAccess
,
232 (WINAPI
*WinNtCreateConsoleScreenBuffer
) (
235 CONST SECURITY_ATTRIBUTES
*SecurityAttributes
,
237 LPVOID ScreenBufferData
243 (WINAPI
*WinNtSetConsoleScreenBufferSize
) (
244 HANDLE ConsoleOutput
,
251 (WINAPI
*WinNtSetConsoleActiveScreenBuffer
) (
258 (WINAPI
*WinNtFillConsoleOutputAttribute
) (
259 HANDLE ConsoleOutput
,
263 LPDWORD NumberOfAttrsWritten
269 (WINAPI
*WinNtFillConsoleOutputCharacter
) (
270 HANDLE ConsoleOutput
,
274 LPDWORD NumberOfCharsWritten
280 (WINAPI
*WinNtWriteConsoleOutput
) (
281 HANDLE ConsoleOutput
,
282 CONST CHAR_INFO
*Buffer
,
285 PSMALL_RECT WriteRegion
291 (WINAPI
*WinNtScrollConsoleScreenBuffer
) (
292 HANDLE ConsoleOutput
,
293 CONST SMALL_RECT
*ScrollRectangle
,
294 CONST SMALL_RECT
*ClipRectangle
,
295 COORD DestinationOrigin
,
296 CONST CHAR_INFO
*Fill
302 (WINAPI
*WinNtSetConsoleTitleW
) (
309 (WINAPI
*WinNtGetConsoleCursorInfo
) (
310 HANDLE ConsoleOutput
,
311 PCONSOLE_CURSOR_INFO ConsoleCursorInfo
317 (WINAPI
*WinNtSetConsoleCursorInfo
) (
318 HANDLE ConsoleOutput
,
319 CONST CONSOLE_CURSOR_INFO
*ConsoleCursorInfo
325 (WINAPI
*WinNtSetPriorityClass
) (
333 (WINAPI
*WinNtWriteConsoleInput
) (
335 CONST INPUT_RECORD
*Buffer
,
337 LPDWORD NumberOfEventsWritten
343 (WINAPI
*WinNtGetNumberOfConsoleInputEvents
) (
345 LPDWORD NumberOfEvents
351 (WINAPI
*WinNtGetStdHandle
) (
358 (WINAPI
*WinNtReadConsoleInput
) (
360 PINPUT_RECORD Buffer
,
362 LPDWORD NumberOfEventsRead
368 (WINAPI
*WinNtPeekConsoleInput
) (
370 PINPUT_RECORD Buffer
,
372 LPDWORD NumberOfEventsRead
378 (WINAPI
*WinNtSetConsoleCursorPosition
) (
386 (WINAPI
*WinNtCreateFile
) (
390 LPSECURITY_ATTRIBUTES SecurityAttributes
,
391 DWORD CreationDisposition
,
392 DWORD FlagsAndAttributes
,
399 (WINAPI
*WinNtDeviceIoControl
) (
406 LPDWORD BytesReturned
,
407 LPOVERLAPPED Overlapped
413 (WINAPI
*WinNtCreateDirectory
) (
415 LPSECURITY_ATTRIBUTES SecurityAttributes
421 (WINAPI
*WinNtRemoveDirectory
) (
428 (WINAPI
*WinNtGetFileAttributes
) (
435 (WINAPI
*WinNtSetFileAttributes
) (
443 (WINAPI
*WinNtCreateFileMapping
) (
445 LPSECURITY_ATTRIBUTES Attributes
,
447 DWORD MaximumSizeHigh
,
448 DWORD MaximumSizeLow
,
455 (WINAPI
*WinNtMapViewOfFileEx
) (
458 DWORD FileOffsetHigh
,
460 DWORD NumberOfBytesToMap
,
467 (WINAPI
*WinNtGetEnvironmentVariable
) (
476 (WINAPI
*WinNtCloseHandle
) (
483 (WINAPI
*WinNtSetFilePointer
) (
486 PLONG DistanceToHoveHigh
,
493 (WINAPI
*WinNtSetEndOfFile
) (
500 (WINAPI
*WinNtReadFile
) (
503 DWORD NumberOfBytesToRead
,
504 LPDWORD NumberOfBytesRead
,
505 LPOVERLAPPED Overlapped
511 (WINAPI
*WinNtWriteFile
) (
514 DWORD NumberOfBytesToWrite
,
515 LPDWORD NumberOfBytesWritten
,
516 LPOVERLAPPED Overlapped
522 (WINAPI
*WinNtGetFileInformationByHandle
) (
524 BY_HANDLE_FILE_INFORMATION
*FileInfo
530 (WINAPI
*WinNtGetDiskFreeSpace
) (
531 LPCTSTR RootPathName
,
532 LPDWORD SectorsPerCluster
,
533 LPDWORD BytesPerSector
,
534 LPDWORD NumberOfFreeClusters
,
535 LPDWORD TotalNumberOfClusters
541 (WINAPI
*WinNtGetDiskFreeSpaceEx
) (
542 LPCTSTR DirectoryName
,
543 PULARGE_INTEGER FreeBytesAvailable
,
544 PULARGE_INTEGER TotalNumberOfBytes
,
545 PULARGE_INTEGER TotoalNumberOfFreeBytes
551 (WINAPI
*WinNtMoveFile
) (
552 LPCTSTR ExistingFileName
,
559 (WINAPI
*WinNtSetFileTime
) (
561 FILETIME
*CreationTime
,
562 FILETIME
*LastAccessTime
,
563 FILETIME
*LastWriteTime
569 (WINAPI
*WinNtSystemTimeToFileTime
) (
570 SYSTEMTIME
* SystemTime
,
577 (WINAPI
*WinNtDeleteFile
) (
584 (WINAPI
*WinNtFlushFileBuffers
) (
591 (WINAPI
*WinNtGetLastError
) (
598 (WINAPI
*WinNtSetErrorMode
) (
605 (WINAPI
*WinNtGetTickCount
) (
612 (WINAPI
*WinNtLoadLibraryEx
) (
621 (WINAPI
*WinNtGetProcAddress
) (
629 (WINAPI
*WinNtGetTimeZoneInformation
) (
630 LPTIME_ZONE_INFORMATION timeZoneInformation
636 (WINAPI
*WinNttimeSetEvent
) (
639 LPTIMECALLBACK lpTimeProc
,
647 (WINAPI
*WinNttimeKillEvent
) (
654 (WINAPI
*WinNtSetTimeZoneInformation
) (
655 LPTIME_ZONE_INFORMATION timeZoneInformation
661 (WINAPI
*WinNtGetSystemTime
) (
662 LPSYSTEMTIME SystemTime
668 (WINAPI
*WinNtSetSystemTime
) (
669 CONST SYSTEMTIME
*SystemTime
675 (WINAPI
*WinNtGetLocalTime
) (
676 LPSYSTEMTIME SystemTime
682 (WINAPI
*WinNtSetLocalTime
) (
683 CONST SYSTEMTIME
*SystemTime
689 (WINAPI
*WinNtFileTimeToLocalFileTime
) (
690 CONST FILETIME
*FileTime
,
691 LPFILETIME LocalFileTime
697 (WINAPI
*WinNtFileTimeToSystemTime
) (
698 CONST FILETIME
*FileTime
,
699 LPSYSTEMTIME SystemTime
705 (WINAPI
*WinNtFindFirstFile
) (
707 LPWIN32_FIND_DATA FindFileData
713 (WINAPI
*WinNtFindNextFile
) (
715 LPWIN32_FIND_DATA FindFileData
721 (WINAPI
*WinNtFindClose
) (
728 (WINAPI
*WinNtGetCommState
) (
736 (WINAPI
*WinNtSetCommState
) (
744 (WINAPI
*WinNtSetCommState
) (
752 (WINAPI
*WinNtSetCommTimeouts
) (
754 LPCOMMTIMEOUTS CommTimeouts
760 (WINAPI
*WinNtExitProcess
) (
761 UINT uExitCode
// exit code for all threads
767 (WINAPI
*WinNtPurgeComm
) (
775 (WINAPI
*WinNtEscapeCommFunction
) (
783 (WINAPI
*WinNtGetCommModemStatus
) (
791 (WINAPI
*WinNtClearCommError
) (
800 (WINAPIV
*WinNtSprintf
) (
809 (WINAPI
*WinNtGetDesktopWindow
) (
816 (WINAPI
*WinNtGetForegroundWindow
) (
823 (WINAPI
*WinNtCreateWindowEx
) (
826 LPCTSTR lpWindowName
,
841 (WINAPI
*WinNtUpdateWindow
) (
848 (WINAPI
*WinNtShowWindow
) (
856 (WINAPI
*WinNtDestroyWindow
) (
863 (WINAPI
*WinNtGetWindowDC
) (
870 (WINAPI
*WinNtGetClientRect
) (
878 (WINAPI
*WinNtAdjustWindowRect
) (
887 (WINAPI
*WinNtSetDIBitsToDevice
) (
905 (WINAPI
*WinNtBitBlt
) (
920 (WINAPI
*WinNtInvalidateRect
) (
929 (WINAPI
*WinNtGetDC
) (
936 (WINAPI
*WinNtReleaseDC
) (
944 (WINAPI
*WinNtRegisterClassEx
) (
951 (WINAPI
*WinNtUnregisterClass
) (
959 (WINAPI
*WinNtBeginPaint
) (
961 LPPAINTSTRUCT lpPaint
967 (WINAPI
*WinNtEndPaint
) (
969 CONST PAINTSTRUCT
*lpPaint
975 (WINAPI
*WinNtPostQuitMessage
) (
982 (WINAPI
*WinNtDefWindowProc
) (
992 (WINAPI
*WinNtLoadIcon
) (
1000 (WINAPI
*WinNtLoadCursor
) (
1001 HINSTANCE hInstance
,
1002 LPCTSTR lpCursorName
1008 (WINAPI
*WinNtGetStockObject
) (
1015 (WINAPI
*WinNtSetViewportOrgEx
) (
1025 (WINAPI
*WinNtSetWindowOrgEx
) (
1034 (WINAPI
*WinNtMoveWindow
) (
1046 (WINAPI
*WinNtGetWindowRect
) (
1054 (WINAPI
*WinNtGetMessage
) (
1064 (WINAPI
*WinNtTranslateMessage
) (
1071 (WINAPI
*WinNtDispatchMessage
) (
1078 (WINAPI
*WinNtGetProcessHeap
) ();
1083 (WINAPI
*WinNtHeapAlloc
) (
1092 (WINAPI
*WinNtHeapFree
) (
1101 (WINAPI
*WinNtFreeLibrary
) (
1107 EFI_FORWARD_DECLARATION (EFI_WIN_NT_THUNK_PROTOCOL
);
1109 #define EFI_WIN_NT_THUNK_PROTOCOL_SIGNATURE EFI_SIGNATURE_32 ('N', 'T', 'T', 'T')
1111 typedef struct _EFI_WIN_NT_THUNK_PROTOCOL
{
1115 // Win32 Process APIs
1117 WinNtGetProcAddress GetProcAddress
;
1118 WinNtGetTickCount GetTickCount
;
1119 WinNtLoadLibraryEx LoadLibraryEx
;
1120 WinNtFreeLibrary FreeLibrary
;
1122 WinNtSetPriorityClass SetPriorityClass
;
1123 WinNtSetThreadPriority SetThreadPriority
;
1126 WinNtSuspendThread SuspendThread
;
1127 WinNtGetCurrentThread GetCurrentThread
;
1128 WinNtGetCurrentThreadId GetCurrentThreadId
;
1129 WinNtGetCurrentProcess GetCurrentProcess
;
1130 WinNtCreateThread CreateThread
;
1131 WinNtTerminateThread TerminateThread
;
1132 WinNtSendMessage SendMessage
;
1133 WinNtExitThread ExitThread
;
1134 WinNtResumeThread ResumeThread
;
1135 WinNtDuplicateHandle DuplicateHandle
;
1138 // Wint32 Mutex primitive
1140 WinNtInitializeCriticalSection InitializeCriticalSection
;
1141 WinNtEnterCriticalSection EnterCriticalSection
;
1142 WinNtLeaveCriticalSection LeaveCriticalSection
;
1143 WinNtDeleteCriticalSection DeleteCriticalSection
;
1144 WinNtTlsAlloc TlsAlloc
;
1145 WinNtTlsFree TlsFree
;
1146 WinNtTlsSetValue TlsSetValue
;
1147 WinNtTlsGetValue TlsGetValue
;
1148 WinNtCreateSemaphore CreateSemaphore
;
1149 WinNtWaitForSingleObject WaitForSingleObject
;
1150 WinNtReleaseSemaphore ReleaseSemaphore
;
1153 // Win32 Console APIs
1155 WinNtCreateConsoleScreenBuffer CreateConsoleScreenBuffer
;
1156 WinNtFillConsoleOutputAttribute FillConsoleOutputAttribute
;
1157 WinNtFillConsoleOutputCharacter FillConsoleOutputCharacter
;
1158 WinNtGetConsoleCursorInfo GetConsoleCursorInfo
;
1159 WinNtGetNumberOfConsoleInputEvents GetNumberOfConsoleInputEvents
;
1160 WinNtPeekConsoleInput PeekConsoleInput
;
1161 WinNtScrollConsoleScreenBuffer ScrollConsoleScreenBuffer
;
1162 WinNtReadConsoleInput ReadConsoleInput
;
1164 WinNtSetConsoleActiveScreenBuffer SetConsoleActiveScreenBuffer
;
1165 WinNtSetConsoleCursorInfo SetConsoleCursorInfo
;
1166 WinNtSetConsoleCursorPosition SetConsoleCursorPosition
;
1167 WinNtSetConsoleScreenBufferSize SetConsoleScreenBufferSize
;
1168 WinNtSetConsoleTitleW SetConsoleTitleW
;
1169 WinNtWriteConsoleInput WriteConsoleInput
;
1170 WinNtWriteConsoleOutput WriteConsoleOutput
;
1175 WinNtCreateFile CreateFile
;
1176 WinNtDeviceIoControl DeviceIoControl
;
1177 WinNtCreateDirectory CreateDirectory
;
1178 WinNtRemoveDirectory RemoveDirectory
;
1179 WinNtGetFileAttributes GetFileAttributes
;
1180 WinNtSetFileAttributes SetFileAttributes
;
1181 WinNtCreateFileMapping CreateFileMapping
;
1182 WinNtCloseHandle CloseHandle
;
1183 WinNtDeleteFile DeleteFile
;
1184 WinNtFindFirstFile FindFirstFile
;
1185 WinNtFindNextFile FindNextFile
;
1186 WinNtFindClose FindClose
;
1187 WinNtFlushFileBuffers FlushFileBuffers
;
1188 WinNtGetEnvironmentVariable GetEnvironmentVariable
;
1189 WinNtGetLastError GetLastError
;
1190 WinNtSetErrorMode SetErrorMode
;
1191 WinNtGetStdHandle GetStdHandle
;
1192 WinNtMapViewOfFileEx MapViewOfFileEx
;
1193 WinNtReadFile ReadFile
;
1194 WinNtSetEndOfFile SetEndOfFile
;
1195 WinNtSetFilePointer SetFilePointer
;
1196 WinNtWriteFile WriteFile
;
1197 WinNtGetFileInformationByHandle GetFileInformationByHandle
;
1198 WinNtGetDiskFreeSpace GetDiskFreeSpace
;
1199 WinNtGetDiskFreeSpaceEx GetDiskFreeSpaceEx
;
1200 WinNtMoveFile MoveFile
;
1201 WinNtSetFileTime SetFileTime
;
1202 WinNtSystemTimeToFileTime SystemTimeToFileTime
;
1207 WinNtFileTimeToLocalFileTime FileTimeToLocalFileTime
;
1208 WinNtFileTimeToSystemTime FileTimeToSystemTime
;
1209 WinNtGetSystemTime GetSystemTime
;
1210 WinNtSetSystemTime SetSystemTime
;
1211 WinNtGetLocalTime GetLocalTime
;
1212 WinNtSetLocalTime SetLocalTime
;
1213 WinNtGetTimeZoneInformation GetTimeZoneInformation
;
1214 WinNtSetTimeZoneInformation SetTimeZoneInformation
;
1215 WinNttimeSetEvent timeSetEvent
;
1216 WinNttimeKillEvent timeKillEvent
;
1219 // Win32 Serial APIs
1221 WinNtClearCommError ClearCommError
;
1222 WinNtEscapeCommFunction EscapeCommFunction
;
1223 WinNtGetCommModemStatus GetCommModemStatus
;
1224 WinNtGetCommState GetCommState
;
1225 WinNtSetCommState SetCommState
;
1226 WinNtPurgeComm PurgeComm
;
1227 WinNtSetCommTimeouts SetCommTimeouts
;
1229 WinNtExitProcess ExitProcess
;
1231 WinNtSprintf SPrintf
;
1233 WinNtGetDesktopWindow GetDesktopWindow
;
1234 WinNtGetForegroundWindow GetForegroundWindow
;
1235 WinNtCreateWindowEx CreateWindowEx
;
1236 WinNtShowWindow ShowWindow
;
1237 WinNtUpdateWindow UpdateWindow
;
1238 WinNtDestroyWindow DestroyWindow
;
1239 WinNtInvalidateRect InvalidateRect
;
1240 WinNtGetWindowDC GetWindowDC
;
1241 WinNtGetClientRect GetClientRect
;
1242 WinNtAdjustWindowRect AdjustWindowRect
;
1243 WinNtSetDIBitsToDevice SetDIBitsToDevice
;
1246 WinNtReleaseDC ReleaseDC
;
1247 WinNtRegisterClassEx RegisterClassEx
;
1248 WinNtUnregisterClass UnregisterClass
;
1250 WinNtBeginPaint BeginPaint
;
1251 WinNtEndPaint EndPaint
;
1252 WinNtPostQuitMessage PostQuitMessage
;
1253 WinNtDefWindowProc DefWindowProc
;
1254 WinNtLoadIcon LoadIcon
;
1255 WinNtLoadCursor LoadCursor
;
1256 WinNtGetStockObject GetStockObject
;
1257 WinNtSetViewportOrgEx SetViewportOrgEx
;
1258 WinNtSetWindowOrgEx SetWindowOrgEx
;
1259 WinNtMoveWindow MoveWindow
;
1260 WinNtGetWindowRect GetWindowRect
;
1262 WinNtGetMessage GetMessage
;
1263 WinNtTranslateMessage TranslateMessage
;
1264 WinNtDispatchMessage DispatchMessage
;
1266 WinNtGetProcessHeap GetProcessHeap
;
1267 WinNtHeapAlloc HeapAlloc
;
1268 WinNtHeapFree HeapFree
;
1270 } EFI_WIN_NT_THUNK_PROTOCOL
;
1274 extern EFI_GUID gEfiWinNtThunkProtocolGuid
;