3 Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
4 SPDX-License-Identifier: BSD-2-Clause-Patent
12 This protocol allows an EFI driver (DLL) in the NT emulation envirnment
13 to make Win32 API calls.
15 NEVER make a Win32 call directly, always make the call via this protocol.
17 There are no This pointers on the protocol member functions as they map
18 exactly into Win32 system calls.
20 YOU MUST include EfiWinNT.h in place of Efi.h to make this file compile.
24 #ifndef __WIN_NT_THUNK_H__
25 #define __WIN_NT_THUNK_H__
27 #include <Common/WinNtInclude.h>
29 #define EFI_WIN_NT_THUNK_PROTOCOL_GUID \
30 { 0x58c518b1, 0x76f3, 0x11d4, { 0xbc, 0xea, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81 } }
35 (WINAPI
*WinNtSleep
) (
42 (WINAPI
*WinNtSuspendThread
) (
49 (WINAPI
*WinNtGetCurrentThread
) (
56 (WINAPI
*WinNtGetCurrentThreadId
) (
63 (WINAPI
*WinNtGetCurrentProcess
) (
70 (WINAPI
*WinNtCreateThread
) (
71 LPSECURITY_ATTRIBUTES lpThreadAttributes
,
73 LPTHREAD_START_ROUTINE lpStartAddress
,
75 DWORD dwCreationFlags
,
82 (WINAPI
*WinNtTerminateThread
) (
90 (WINAPI
*WinNtSendMessage
) (
100 (WINAPI
*WinNtExitThread
) (
107 (WINAPI
*WinNtResumeThread
) (
114 (WINAPI
*WinNtSetThreadPriority
) (
122 (WINAPI
*WinNtInitializeCriticalSection
) (
123 LPCRITICAL_SECTION lpCriticalSection
129 (WINAPI
*WinNtDeleteCriticalSection
) (
130 LPCRITICAL_SECTION lpCriticalSection
136 (WINAPI
*WinNtEnterCriticalSection
) (
137 LPCRITICAL_SECTION lpCriticalSection
143 (WINAPI
*WinNtLeaveCriticalSection
) (
144 LPCRITICAL_SECTION lpCriticalSection
150 (WINAPI
*WinNtTlsAlloc
) (
157 (WINAPI
*WinNtTlsGetValue
) (
164 (WINAPI
*WinNtTlsSetValue
) (
172 (WINAPI
*WinNtTlsFree
) (
179 (WINAPI
*WinNtCreateSemaphore
) (
180 LPSECURITY_ATTRIBUTES lpSemaphoreAttributes
,
189 (WINAPI
*WinNtWaitForSingleObject
) (
197 (WINAPI
*WinNtReleaseSemaphore
) (
200 LPLONG lpPreviousCount
206 (WINAPI
*WinNtDuplicateHandle
) (
207 HANDLE hSourceProcessHandle
,
208 HANDLE hSourceHandle
,
209 HANDLE hTargetProcessHandle
,
210 LPHANDLE lpTargetHandle
,
211 DWORD dwDesiredAccess
,
219 (WINAPI
*WinNtCreateConsoleScreenBuffer
) (
222 CONST SECURITY_ATTRIBUTES
*SecurityAttributes
,
224 LPVOID ScreenBufferData
230 (WINAPI
*WinNtSetConsoleScreenBufferSize
) (
231 HANDLE ConsoleOutput
,
238 (WINAPI
*WinNtSetConsoleActiveScreenBuffer
) (
245 (WINAPI
*WinNtFillConsoleOutputAttribute
) (
246 HANDLE ConsoleOutput
,
250 LPDWORD NumberOfAttrsWritten
256 (WINAPI
*WinNtFillConsoleOutputCharacter
) (
257 HANDLE ConsoleOutput
,
261 LPDWORD NumberOfCharsWritten
267 (WINAPI
*WinNtWriteConsoleOutput
) (
268 HANDLE ConsoleOutput
,
269 CONST CHAR_INFO
*Buffer
,
272 PSMALL_RECT WriteRegion
278 (WINAPI
*WinNtScrollConsoleScreenBuffer
) (
279 HANDLE ConsoleOutput
,
280 CONST SMALL_RECT
*ScrollRectangle
,
281 CONST SMALL_RECT
*ClipRectangle
,
282 COORD DestinationOrigin
,
283 CONST CHAR_INFO
*Fill
289 (WINAPI
*WinNtSetConsoleTitleW
) (
296 (WINAPI
*WinNtGetConsoleCursorInfo
) (
297 HANDLE ConsoleOutput
,
298 PCONSOLE_CURSOR_INFO ConsoleCursorInfo
304 (WINAPI
*WinNtSetConsoleCursorInfo
) (
305 HANDLE ConsoleOutput
,
306 CONST CONSOLE_CURSOR_INFO
*ConsoleCursorInfo
312 (WINAPI
*WinNtSetPriorityClass
) (
320 (WINAPI
*WinNtWriteConsoleInput
) (
322 CONST INPUT_RECORD
*Buffer
,
324 LPDWORD NumberOfEventsWritten
330 (WINAPI
*WinNtGetNumberOfConsoleInputEvents
) (
332 LPDWORD NumberOfEvents
338 (WINAPI
*WinNtGetStdHandle
) (
345 (WINAPI
*WinNtReadConsoleInput
) (
347 PINPUT_RECORD Buffer
,
349 LPDWORD NumberOfEventsRead
355 (WINAPI
*WinNtPeekConsoleInput
) (
357 PINPUT_RECORD Buffer
,
359 LPDWORD NumberOfEventsRead
365 (WINAPI
*WinNtSetConsoleCursorPosition
) (
373 (WINAPI
*WinNtCreateFile
) (
377 LPSECURITY_ATTRIBUTES SecurityAttributes
,
378 DWORD CreationDisposition
,
379 DWORD FlagsAndAttributes
,
386 (WINAPI
*WinNtDeviceIoControl
) (
393 LPDWORD BytesReturned
,
394 LPOVERLAPPED Overlapped
400 (WINAPI
*WinNtCreateDirectory
) (
402 LPSECURITY_ATTRIBUTES SecurityAttributes
408 (WINAPI
*WinNtRemoveDirectory
) (
415 (WINAPI
*WinNtGetFileAttributes
) (
422 (WINAPI
*WinNtSetFileAttributes
) (
430 (WINAPI
*WinNtCreateFileMapping
) (
432 LPSECURITY_ATTRIBUTES Attributes
,
434 DWORD MaximumSizeHigh
,
435 DWORD MaximumSizeLow
,
442 (WINAPI
*WinNtMapViewOfFileEx
) (
445 DWORD FileOffsetHigh
,
447 DWORD NumberOfBytesToMap
,
454 (WINAPI
*WinNtGetEnvironmentVariable
) (
463 (WINAPI
*WinNtCloseHandle
) (
470 (WINAPI
*WinNtSetFilePointer
) (
473 PLONG DistanceToHoveHigh
,
480 (WINAPI
*WinNtSetEndOfFile
) (
487 (WINAPI
*WinNtReadFile
) (
490 DWORD NumberOfBytesToRead
,
491 LPDWORD NumberOfBytesRead
,
492 LPOVERLAPPED Overlapped
498 (WINAPI
*WinNtWriteFile
) (
501 DWORD NumberOfBytesToWrite
,
502 LPDWORD NumberOfBytesWritten
,
503 LPOVERLAPPED Overlapped
509 (WINAPI
*WinNtGetFileInformationByHandle
) (
511 BY_HANDLE_FILE_INFORMATION
*FileInfo
517 (WINAPI
*WinNtGetDiskFreeSpace
) (
518 LPCTSTR RootPathName
,
519 LPDWORD SectorsPerCluster
,
520 LPDWORD BytesPerSector
,
521 LPDWORD NumberOfFreeClusters
,
522 LPDWORD TotalNumberOfClusters
528 (WINAPI
*WinNtGetDiskFreeSpaceEx
) (
529 LPCTSTR DirectoryName
,
530 PULARGE_INTEGER FreeBytesAvailable
,
531 PULARGE_INTEGER TotalNumberOfBytes
,
532 PULARGE_INTEGER TotoalNumberOfFreeBytes
538 (WINAPI
*WinNtMoveFile
) (
539 LPCTSTR ExistingFileName
,
546 (WINAPI
*WinNtSetFileTime
) (
548 FILETIME
*CreationTime
,
549 FILETIME
*LastAccessTime
,
550 FILETIME
*LastWriteTime
556 (WINAPI
*WinNtSystemTimeToFileTime
) (
557 SYSTEMTIME
* SystemTime
,
564 (WINAPI
*WinNtDeleteFile
) (
571 (WINAPI
*WinNtFlushFileBuffers
) (
578 (WINAPI
*WinNtGetLastError
) (
585 (WINAPI
*WinNtSetErrorMode
) (
592 (WINAPI
*WinNtGetTickCount
) (
599 (WINAPI
*WinNtLoadLibraryEx
) (
608 (WINAPI
*WinNtGetProcAddress
) (
616 (WINAPI
*WinNtGetTimeZoneInformation
) (
617 LPTIME_ZONE_INFORMATION timeZoneInformation
623 (WINAPI
*WinNttimeSetEvent
) (
626 LPTIMECALLBACK lpTimeProc
,
634 (WINAPI
*WinNttimeKillEvent
) (
641 (WINAPI
*WinNtSetTimeZoneInformation
) (
642 LPTIME_ZONE_INFORMATION timeZoneInformation
648 (WINAPI
*WinNtGetSystemTime
) (
649 LPSYSTEMTIME SystemTime
655 (WINAPI
*WinNtSetSystemTime
) (
656 CONST SYSTEMTIME
*SystemTime
662 (WINAPI
*WinNtGetLocalTime
) (
663 LPSYSTEMTIME SystemTime
669 (WINAPI
*WinNtSetLocalTime
) (
670 CONST SYSTEMTIME
*SystemTime
676 (WINAPI
*WinNtLocalFileTimeToFileTime
) (
677 CONST FILETIME
*LocalFileTime
,
685 (WINAPI
*WinNtFileTimeToLocalFileTime
) (
686 CONST FILETIME
*FileTime
,
687 LPFILETIME LocalFileTime
693 (WINAPI
*WinNtFileTimeToSystemTime
) (
694 CONST FILETIME
*FileTime
,
695 LPSYSTEMTIME SystemTime
701 (WINAPI
*WinNtFindFirstFile
) (
703 LPWIN32_FIND_DATA FindFileData
709 (WINAPI
*WinNtFindNextFile
) (
711 LPWIN32_FIND_DATA FindFileData
717 (WINAPI
*WinNtFindClose
) (
724 (WINAPI
*WinNtGetCommState
) (
732 (WINAPI
*WinNtSetCommState
) (
740 (WINAPI
*WinNtSetCommState
) (
748 (WINAPI
*WinNtSetCommTimeouts
) (
750 LPCOMMTIMEOUTS CommTimeouts
756 (WINAPI
*WinNtExitProcess
) (
757 UINT uExitCode
// exit code for all threads
763 (WINAPI
*WinNtPurgeComm
) (
771 (WINAPI
*WinNtEscapeCommFunction
) (
779 (WINAPI
*WinNtGetCommModemStatus
) (
787 (WINAPI
*WinNtClearCommError
) (
796 (WINAPIV
*WinNtSprintf
) (
806 (WINAPI
*WinNtGetDesktopWindow
) (
813 (WINAPI
*WinNtGetForegroundWindow
) (
820 (WINAPI
*WinNtCreateWindowEx
) (
823 LPCTSTR lpWindowName
,
838 (WINAPI
*WinNtUpdateWindow
) (
845 (WINAPI
*WinNtShowWindow
) (
853 (WINAPI
*WinNtDestroyWindow
) (
860 (WINAPI
*WinNtGetWindowDC
) (
867 (WINAPI
*WinNtGetClientRect
) (
875 (WINAPI
*WinNtAdjustWindowRect
) (
884 (WINAPI
*WinNtSetDIBitsToDevice
) (
902 (WINAPI
*WinNtBitBlt
) (
917 (WINAPI
*WinNtInvalidateRect
) (
926 (WINAPI
*WinNtGetDC
) (
933 (WINAPI
*WinNtReleaseDC
) (
941 (WINAPI
*WinNtRegisterClassEx
) (
948 (WINAPI
*WinNtUnregisterClass
) (
956 (WINAPI
*WinNtBeginPaint
) (
958 LPPAINTSTRUCT lpPaint
964 (WINAPI
*WinNtEndPaint
) (
966 CONST PAINTSTRUCT
*lpPaint
972 (WINAPI
*WinNtPostQuitMessage
) (
979 (WINAPI
*WinNtDefWindowProc
) (
989 (WINAPI
*WinNtLoadIcon
) (
997 (WINAPI
*WinNtLoadCursor
) (
1005 (WINAPI
*WinNtGetStockObject
) (
1012 (WINAPI
*WinNtSetViewportOrgEx
) (
1022 (WINAPI
*WinNtSetWindowOrgEx
) (
1031 (WINAPI
*WinNtMoveWindow
) (
1043 (WINAPI
*WinNtGetWindowRect
) (
1051 (WINAPI
*WinNtGetMessage
) (
1061 (WINAPI
*WinNtTranslateMessage
) (
1068 (WINAPI
*WinNtDispatchMessage
) (
1075 (WINAPI
*WinNtGetProcessHeap
) ();
1080 (WINAPI
*WinNtHeapAlloc
) (
1089 (WINAPI
*WinNtHeapFree
) (
1098 (WINAPI
*WinNtFreeLibrary
) (
1104 (WINAPI
*WinNtQueryPerformanceCounter
) (
1105 LARGE_INTEGER
*PerformanceCount
1111 (WINAPI
*WinNtQueryPerformanceFrequency
) (
1112 LARGE_INTEGER
*Frequency
1118 #define EFI_WIN_NT_THUNK_PROTOCOL_SIGNATURE SIGNATURE_32 ('N', 'T', 'T', 'T')
1124 // Win32 Process APIs
1126 WinNtGetProcAddress GetProcAddress
;
1127 WinNtGetTickCount GetTickCount
;
1128 WinNtLoadLibraryEx LoadLibraryEx
;
1129 WinNtFreeLibrary FreeLibrary
;
1131 WinNtSetPriorityClass SetPriorityClass
;
1132 WinNtSetThreadPriority SetThreadPriority
;
1135 WinNtSuspendThread SuspendThread
;
1136 WinNtGetCurrentThread GetCurrentThread
;
1137 WinNtGetCurrentThreadId GetCurrentThreadId
;
1138 WinNtGetCurrentProcess GetCurrentProcess
;
1139 WinNtCreateThread CreateThread
;
1140 WinNtTerminateThread TerminateThread
;
1141 WinNtSendMessage SendMessage
;
1142 WinNtExitThread ExitThread
;
1143 WinNtResumeThread ResumeThread
;
1144 WinNtDuplicateHandle DuplicateHandle
;
1147 // Wint32 Mutex primitive
1149 WinNtInitializeCriticalSection InitializeCriticalSection
;
1150 WinNtEnterCriticalSection EnterCriticalSection
;
1151 WinNtLeaveCriticalSection LeaveCriticalSection
;
1152 WinNtDeleteCriticalSection DeleteCriticalSection
;
1153 WinNtTlsAlloc TlsAlloc
;
1154 WinNtTlsFree TlsFree
;
1155 WinNtTlsSetValue TlsSetValue
;
1156 WinNtTlsGetValue TlsGetValue
;
1157 WinNtCreateSemaphore CreateSemaphore
;
1158 WinNtWaitForSingleObject WaitForSingleObject
;
1159 WinNtReleaseSemaphore ReleaseSemaphore
;
1162 // Win32 Console APIs
1164 WinNtCreateConsoleScreenBuffer CreateConsoleScreenBuffer
;
1165 WinNtFillConsoleOutputAttribute FillConsoleOutputAttribute
;
1166 WinNtFillConsoleOutputCharacter FillConsoleOutputCharacter
;
1167 WinNtGetConsoleCursorInfo GetConsoleCursorInfo
;
1168 WinNtGetNumberOfConsoleInputEvents GetNumberOfConsoleInputEvents
;
1169 WinNtPeekConsoleInput PeekConsoleInput
;
1170 WinNtScrollConsoleScreenBuffer ScrollConsoleScreenBuffer
;
1171 WinNtReadConsoleInput ReadConsoleInput
;
1173 WinNtSetConsoleActiveScreenBuffer SetConsoleActiveScreenBuffer
;
1174 WinNtSetConsoleCursorInfo SetConsoleCursorInfo
;
1175 WinNtSetConsoleCursorPosition SetConsoleCursorPosition
;
1176 WinNtSetConsoleScreenBufferSize SetConsoleScreenBufferSize
;
1177 WinNtSetConsoleTitleW SetConsoleTitleW
;
1178 WinNtWriteConsoleInput WriteConsoleInput
;
1179 WinNtWriteConsoleOutput WriteConsoleOutput
;
1184 WinNtCreateFile CreateFile
;
1185 WinNtDeviceIoControl DeviceIoControl
;
1186 WinNtCreateDirectory CreateDirectory
;
1187 WinNtRemoveDirectory RemoveDirectory
;
1188 WinNtGetFileAttributes GetFileAttributes
;
1189 WinNtSetFileAttributes SetFileAttributes
;
1190 WinNtCreateFileMapping CreateFileMapping
;
1191 WinNtCloseHandle CloseHandle
;
1192 WinNtDeleteFile DeleteFile
;
1193 WinNtFindFirstFile FindFirstFile
;
1194 WinNtFindNextFile FindNextFile
;
1195 WinNtFindClose FindClose
;
1196 WinNtFlushFileBuffers FlushFileBuffers
;
1197 WinNtGetEnvironmentVariable GetEnvironmentVariable
;
1198 WinNtGetLastError GetLastError
;
1199 WinNtSetErrorMode SetErrorMode
;
1200 WinNtGetStdHandle GetStdHandle
;
1201 WinNtMapViewOfFileEx MapViewOfFileEx
;
1202 WinNtReadFile ReadFile
;
1203 WinNtSetEndOfFile SetEndOfFile
;
1204 WinNtSetFilePointer SetFilePointer
;
1205 WinNtWriteFile WriteFile
;
1206 WinNtGetFileInformationByHandle GetFileInformationByHandle
;
1207 WinNtGetDiskFreeSpace GetDiskFreeSpace
;
1208 WinNtGetDiskFreeSpaceEx GetDiskFreeSpaceEx
;
1209 WinNtMoveFile MoveFile
;
1210 WinNtSetFileTime SetFileTime
;
1211 WinNtSystemTimeToFileTime SystemTimeToFileTime
;
1216 WinNtLocalFileTimeToFileTime LocalFileTimeToFileTime
;
1217 WinNtFileTimeToLocalFileTime FileTimeToLocalFileTime
;
1218 WinNtFileTimeToSystemTime FileTimeToSystemTime
;
1219 WinNtGetSystemTime GetSystemTime
;
1220 WinNtSetSystemTime SetSystemTime
;
1221 WinNtGetLocalTime GetLocalTime
;
1222 WinNtSetLocalTime SetLocalTime
;
1223 WinNtGetTimeZoneInformation GetTimeZoneInformation
;
1224 WinNtSetTimeZoneInformation SetTimeZoneInformation
;
1225 WinNttimeSetEvent timeSetEvent
;
1226 WinNttimeKillEvent timeKillEvent
;
1229 // Win32 Serial APIs
1231 WinNtClearCommError ClearCommError
;
1232 WinNtEscapeCommFunction EscapeCommFunction
;
1233 WinNtGetCommModemStatus GetCommModemStatus
;
1234 WinNtGetCommState GetCommState
;
1235 WinNtSetCommState SetCommState
;
1236 WinNtPurgeComm PurgeComm
;
1237 WinNtSetCommTimeouts SetCommTimeouts
;
1239 WinNtExitProcess ExitProcess
;
1241 WinNtSprintf SPrintf
;
1243 WinNtGetDesktopWindow GetDesktopWindow
;
1244 WinNtGetForegroundWindow GetForegroundWindow
;
1245 WinNtCreateWindowEx CreateWindowEx
;
1246 WinNtShowWindow ShowWindow
;
1247 WinNtUpdateWindow UpdateWindow
;
1248 WinNtDestroyWindow DestroyWindow
;
1249 WinNtInvalidateRect InvalidateRect
;
1250 WinNtGetWindowDC GetWindowDC
;
1251 WinNtGetClientRect GetClientRect
;
1252 WinNtAdjustWindowRect AdjustWindowRect
;
1253 WinNtSetDIBitsToDevice SetDIBitsToDevice
;
1256 WinNtReleaseDC ReleaseDC
;
1257 WinNtRegisterClassEx RegisterClassEx
;
1258 WinNtUnregisterClass UnregisterClass
;
1260 WinNtBeginPaint BeginPaint
;
1261 WinNtEndPaint EndPaint
;
1262 WinNtPostQuitMessage PostQuitMessage
;
1263 WinNtDefWindowProc DefWindowProc
;
1264 WinNtLoadIcon LoadIcon
;
1265 WinNtLoadCursor LoadCursor
;
1266 WinNtGetStockObject GetStockObject
;
1267 WinNtSetViewportOrgEx SetViewportOrgEx
;
1268 WinNtSetWindowOrgEx SetWindowOrgEx
;
1269 WinNtMoveWindow MoveWindow
;
1270 WinNtGetWindowRect GetWindowRect
;
1272 WinNtGetMessage GetMessage
;
1273 WinNtTranslateMessage TranslateMessage
;
1274 WinNtDispatchMessage DispatchMessage
;
1276 WinNtGetProcessHeap GetProcessHeap
;
1277 WinNtHeapAlloc HeapAlloc
;
1278 WinNtHeapFree HeapFree
;
1280 WinNtQueryPerformanceCounter QueryPerformanceCounter
;
1281 WinNtQueryPerformanceFrequency QueryPerformanceFrequency
;
1283 } EFI_WIN_NT_THUNK_PROTOCOL
;
1285 extern EFI_GUID gEfiWinNtThunkProtocolGuid
;