3 Copyright (c) 2006, 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 \
34 { 0x58c518b1, 0x76f3, 0x11d4, { 0xbc, 0xea, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81 } }
39 (WINAPI
*WinNtSleep
) (
46 (WINAPI
*WinNtSuspendThread
) (
53 (WINAPI
*WinNtGetCurrentThread
) (
60 (WINAPI
*WinNtGetCurrentThreadId
) (
67 (WINAPI
*WinNtGetCurrentProcess
) (
74 (WINAPI
*WinNtCreateThread
) (
75 LPSECURITY_ATTRIBUTES lpThreadAttributes
,
77 LPTHREAD_START_ROUTINE lpStartAddress
,
79 DWORD dwCreationFlags
,
86 (WINAPI
*WinNtTerminateThread
) (
94 (WINAPI
*WinNtSendMessage
) (
104 (WINAPI
*WinNtExitThread
) (
111 (WINAPI
*WinNtResumeThread
) (
118 (WINAPI
*WinNtSetThreadPriority
) (
126 (WINAPI
*WinNtInitializeCriticalSection
) (
127 LPCRITICAL_SECTION lpCriticalSection
133 (WINAPI
*WinNtDeleteCriticalSection
) (
134 LPCRITICAL_SECTION lpCriticalSection
140 (WINAPI
*WinNtEnterCriticalSection
) (
141 LPCRITICAL_SECTION lpCriticalSection
147 (WINAPI
*WinNtLeaveCriticalSection
) (
148 LPCRITICAL_SECTION lpCriticalSection
154 (WINAPI
*WinNtTlsAlloc
) (
161 (WINAPI
*WinNtTlsGetValue
) (
168 (WINAPI
*WinNtTlsSetValue
) (
176 (WINAPI
*WinNtTlsFree
) (
183 (WINAPI
*WinNtCreateSemaphore
) (
184 LPSECURITY_ATTRIBUTES lpSemaphoreAttributes
,
193 (WINAPI
*WinNtWaitForSingleObject
) (
201 (WINAPI
*WinNtReleaseSemaphore
) (
204 LPLONG lpPreviousCount
210 (WINAPI
*WinNtDuplicateHandle
) (
211 HANDLE hSourceProcessHandle
,
212 HANDLE hSourceHandle
,
213 HANDLE hTargetProcessHandle
,
214 LPHANDLE lpTargetHandle
,
215 DWORD dwDesiredAccess
,
223 (WINAPI
*WinNtCreateConsoleScreenBuffer
) (
226 CONST SECURITY_ATTRIBUTES
*SecurityAttributes
,
228 LPVOID ScreenBufferData
234 (WINAPI
*WinNtSetConsoleScreenBufferSize
) (
235 HANDLE ConsoleOutput
,
242 (WINAPI
*WinNtSetConsoleActiveScreenBuffer
) (
249 (WINAPI
*WinNtFillConsoleOutputAttribute
) (
250 HANDLE ConsoleOutput
,
254 LPDWORD NumberOfAttrsWritten
260 (WINAPI
*WinNtFillConsoleOutputCharacter
) (
261 HANDLE ConsoleOutput
,
265 LPDWORD NumberOfCharsWritten
271 (WINAPI
*WinNtWriteConsoleOutput
) (
272 HANDLE ConsoleOutput
,
273 CONST CHAR_INFO
*Buffer
,
276 PSMALL_RECT WriteRegion
282 (WINAPI
*WinNtScrollConsoleScreenBuffer
) (
283 HANDLE ConsoleOutput
,
284 CONST SMALL_RECT
*ScrollRectangle
,
285 CONST SMALL_RECT
*ClipRectangle
,
286 COORD DestinationOrigin
,
287 CONST CHAR_INFO
*Fill
293 (WINAPI
*WinNtSetConsoleTitleW
) (
300 (WINAPI
*WinNtGetConsoleCursorInfo
) (
301 HANDLE ConsoleOutput
,
302 PCONSOLE_CURSOR_INFO ConsoleCursorInfo
308 (WINAPI
*WinNtSetConsoleCursorInfo
) (
309 HANDLE ConsoleOutput
,
310 CONST CONSOLE_CURSOR_INFO
*ConsoleCursorInfo
316 (WINAPI
*WinNtSetPriorityClass
) (
324 (WINAPI
*WinNtWriteConsoleInput
) (
326 CONST INPUT_RECORD
*Buffer
,
328 LPDWORD NumberOfEventsWritten
334 (WINAPI
*WinNtGetNumberOfConsoleInputEvents
) (
336 LPDWORD NumberOfEvents
342 (WINAPI
*WinNtGetStdHandle
) (
349 (WINAPI
*WinNtReadConsoleInput
) (
351 PINPUT_RECORD Buffer
,
353 LPDWORD NumberOfEventsRead
359 (WINAPI
*WinNtPeekConsoleInput
) (
361 PINPUT_RECORD Buffer
,
363 LPDWORD NumberOfEventsRead
369 (WINAPI
*WinNtSetConsoleCursorPosition
) (
377 (WINAPI
*WinNtCreateFile
) (
381 LPSECURITY_ATTRIBUTES SecurityAttributes
,
382 DWORD CreationDisposition
,
383 DWORD FlagsAndAttributes
,
390 (WINAPI
*WinNtDeviceIoControl
) (
397 LPDWORD BytesReturned
,
398 LPOVERLAPPED Overlapped
404 (WINAPI
*WinNtCreateDirectory
) (
406 LPSECURITY_ATTRIBUTES SecurityAttributes
412 (WINAPI
*WinNtRemoveDirectory
) (
419 (WINAPI
*WinNtGetFileAttributes
) (
426 (WINAPI
*WinNtSetFileAttributes
) (
434 (WINAPI
*WinNtCreateFileMapping
) (
436 LPSECURITY_ATTRIBUTES Attributes
,
438 DWORD MaximumSizeHigh
,
439 DWORD MaximumSizeLow
,
446 (WINAPI
*WinNtMapViewOfFileEx
) (
449 DWORD FileOffsetHigh
,
451 DWORD NumberOfBytesToMap
,
458 (WINAPI
*WinNtGetEnvironmentVariable
) (
467 (WINAPI
*WinNtCloseHandle
) (
474 (WINAPI
*WinNtSetFilePointer
) (
477 PLONG DistanceToHoveHigh
,
484 (WINAPI
*WinNtSetEndOfFile
) (
491 (WINAPI
*WinNtReadFile
) (
494 DWORD NumberOfBytesToRead
,
495 LPDWORD NumberOfBytesRead
,
496 LPOVERLAPPED Overlapped
502 (WINAPI
*WinNtWriteFile
) (
505 DWORD NumberOfBytesToWrite
,
506 LPDWORD NumberOfBytesWritten
,
507 LPOVERLAPPED Overlapped
513 (WINAPI
*WinNtGetFileInformationByHandle
) (
515 BY_HANDLE_FILE_INFORMATION
*FileInfo
521 (WINAPI
*WinNtGetDiskFreeSpace
) (
522 LPCTSTR RootPathName
,
523 LPDWORD SectorsPerCluster
,
524 LPDWORD BytesPerSector
,
525 LPDWORD NumberOfFreeClusters
,
526 LPDWORD TotalNumberOfClusters
532 (WINAPI
*WinNtGetDiskFreeSpaceEx
) (
533 LPCTSTR DirectoryName
,
534 PULARGE_INTEGER FreeBytesAvailable
,
535 PULARGE_INTEGER TotalNumberOfBytes
,
536 PULARGE_INTEGER TotoalNumberOfFreeBytes
542 (WINAPI
*WinNtMoveFile
) (
543 LPCTSTR ExistingFileName
,
550 (WINAPI
*WinNtSetFileTime
) (
552 FILETIME
*CreationTime
,
553 FILETIME
*LastAccessTime
,
554 FILETIME
*LastWriteTime
560 (WINAPI
*WinNtSystemTimeToFileTime
) (
561 SYSTEMTIME
* SystemTime
,
568 (WINAPI
*WinNtDeleteFile
) (
575 (WINAPI
*WinNtFlushFileBuffers
) (
582 (WINAPI
*WinNtGetLastError
) (
589 (WINAPI
*WinNtSetErrorMode
) (
596 (WINAPI
*WinNtGetTickCount
) (
603 (WINAPI
*WinNtLoadLibraryEx
) (
612 (WINAPI
*WinNtGetProcAddress
) (
620 (WINAPI
*WinNtGetTimeZoneInformation
) (
621 LPTIME_ZONE_INFORMATION timeZoneInformation
627 (WINAPI
*WinNttimeSetEvent
) (
630 LPTIMECALLBACK lpTimeProc
,
638 (WINAPI
*WinNttimeKillEvent
) (
645 (WINAPI
*WinNtSetTimeZoneInformation
) (
646 LPTIME_ZONE_INFORMATION timeZoneInformation
652 (WINAPI
*WinNtGetSystemTime
) (
653 LPSYSTEMTIME SystemTime
659 (WINAPI
*WinNtSetSystemTime
) (
660 CONST SYSTEMTIME
*SystemTime
666 (WINAPI
*WinNtGetLocalTime
) (
667 LPSYSTEMTIME SystemTime
673 (WINAPI
*WinNtSetLocalTime
) (
674 CONST SYSTEMTIME
*SystemTime
680 (WINAPI
*WinNtFileTimeToLocalFileTime
) (
681 CONST FILETIME
*FileTime
,
682 LPFILETIME LocalFileTime
688 (WINAPI
*WinNtFileTimeToSystemTime
) (
689 CONST FILETIME
*FileTime
,
690 LPSYSTEMTIME SystemTime
696 (WINAPI
*WinNtFindFirstFile
) (
698 LPWIN32_FIND_DATA FindFileData
704 (WINAPI
*WinNtFindNextFile
) (
706 LPWIN32_FIND_DATA FindFileData
712 (WINAPI
*WinNtFindClose
) (
719 (WINAPI
*WinNtGetCommState
) (
727 (WINAPI
*WinNtSetCommState
) (
735 (WINAPI
*WinNtSetCommState
) (
743 (WINAPI
*WinNtSetCommTimeouts
) (
745 LPCOMMTIMEOUTS CommTimeouts
751 (WINAPI
*WinNtExitProcess
) (
752 UINT uExitCode
// exit code for all threads
758 (WINAPI
*WinNtPurgeComm
) (
766 (WINAPI
*WinNtEscapeCommFunction
) (
774 (WINAPI
*WinNtGetCommModemStatus
) (
782 (WINAPI
*WinNtClearCommError
) (
791 (WINAPIV
*WinNtSprintf
) (
800 (WINAPI
*WinNtGetDesktopWindow
) (
807 (WINAPI
*WinNtGetForegroundWindow
) (
814 (WINAPI
*WinNtCreateWindowEx
) (
817 LPCTSTR lpWindowName
,
832 (WINAPI
*WinNtUpdateWindow
) (
839 (WINAPI
*WinNtShowWindow
) (
847 (WINAPI
*WinNtDestroyWindow
) (
854 (WINAPI
*WinNtGetWindowDC
) (
861 (WINAPI
*WinNtGetClientRect
) (
869 (WINAPI
*WinNtAdjustWindowRect
) (
878 (WINAPI
*WinNtSetDIBitsToDevice
) (
896 (WINAPI
*WinNtBitBlt
) (
911 (WINAPI
*WinNtInvalidateRect
) (
920 (WINAPI
*WinNtGetDC
) (
927 (WINAPI
*WinNtReleaseDC
) (
935 (WINAPI
*WinNtRegisterClassEx
) (
942 (WINAPI
*WinNtUnregisterClass
) (
950 (WINAPI
*WinNtBeginPaint
) (
952 LPPAINTSTRUCT lpPaint
958 (WINAPI
*WinNtEndPaint
) (
960 CONST PAINTSTRUCT
*lpPaint
966 (WINAPI
*WinNtPostQuitMessage
) (
973 (WINAPI
*WinNtDefWindowProc
) (
983 (WINAPI
*WinNtLoadIcon
) (
991 (WINAPI
*WinNtLoadCursor
) (
999 (WINAPI
*WinNtGetStockObject
) (
1006 (WINAPI
*WinNtSetViewportOrgEx
) (
1016 (WINAPI
*WinNtSetWindowOrgEx
) (
1025 (WINAPI
*WinNtMoveWindow
) (
1037 (WINAPI
*WinNtGetWindowRect
) (
1045 (WINAPI
*WinNtGetMessage
) (
1055 (WINAPI
*WinNtTranslateMessage
) (
1062 (WINAPI
*WinNtDispatchMessage
) (
1069 (WINAPI
*WinNtGetProcessHeap
) ();
1074 (WINAPI
*WinNtHeapAlloc
) (
1083 (WINAPI
*WinNtHeapFree
) (
1092 (WINAPI
*WinNtFreeLibrary
) (
1099 #define EFI_WIN_NT_THUNK_PROTOCOL_SIGNATURE EFI_SIGNATURE_32 ('N', 'T', 'T', 'T')
1105 // Win32 Process APIs
1107 WinNtGetProcAddress GetProcAddress
;
1108 WinNtGetTickCount GetTickCount
;
1109 WinNtLoadLibraryEx LoadLibraryEx
;
1110 WinNtFreeLibrary FreeLibrary
;
1112 WinNtSetPriorityClass SetPriorityClass
;
1113 WinNtSetThreadPriority SetThreadPriority
;
1116 WinNtSuspendThread SuspendThread
;
1117 WinNtGetCurrentThread GetCurrentThread
;
1118 WinNtGetCurrentThreadId GetCurrentThreadId
;
1119 WinNtGetCurrentProcess GetCurrentProcess
;
1120 WinNtCreateThread CreateThread
;
1121 WinNtTerminateThread TerminateThread
;
1122 WinNtSendMessage SendMessage
;
1123 WinNtExitThread ExitThread
;
1124 WinNtResumeThread ResumeThread
;
1125 WinNtDuplicateHandle DuplicateHandle
;
1128 // Wint32 Mutex primitive
1130 WinNtInitializeCriticalSection InitializeCriticalSection
;
1131 WinNtEnterCriticalSection EnterCriticalSection
;
1132 WinNtLeaveCriticalSection LeaveCriticalSection
;
1133 WinNtDeleteCriticalSection DeleteCriticalSection
;
1134 WinNtTlsAlloc TlsAlloc
;
1135 WinNtTlsFree TlsFree
;
1136 WinNtTlsSetValue TlsSetValue
;
1137 WinNtTlsGetValue TlsGetValue
;
1138 WinNtCreateSemaphore CreateSemaphore
;
1139 WinNtWaitForSingleObject WaitForSingleObject
;
1140 WinNtReleaseSemaphore ReleaseSemaphore
;
1143 // Win32 Console APIs
1145 WinNtCreateConsoleScreenBuffer CreateConsoleScreenBuffer
;
1146 WinNtFillConsoleOutputAttribute FillConsoleOutputAttribute
;
1147 WinNtFillConsoleOutputCharacter FillConsoleOutputCharacter
;
1148 WinNtGetConsoleCursorInfo GetConsoleCursorInfo
;
1149 WinNtGetNumberOfConsoleInputEvents GetNumberOfConsoleInputEvents
;
1150 WinNtPeekConsoleInput PeekConsoleInput
;
1151 WinNtScrollConsoleScreenBuffer ScrollConsoleScreenBuffer
;
1152 WinNtReadConsoleInput ReadConsoleInput
;
1154 WinNtSetConsoleActiveScreenBuffer SetConsoleActiveScreenBuffer
;
1155 WinNtSetConsoleCursorInfo SetConsoleCursorInfo
;
1156 WinNtSetConsoleCursorPosition SetConsoleCursorPosition
;
1157 WinNtSetConsoleScreenBufferSize SetConsoleScreenBufferSize
;
1158 WinNtSetConsoleTitleW SetConsoleTitleW
;
1159 WinNtWriteConsoleInput WriteConsoleInput
;
1160 WinNtWriteConsoleOutput WriteConsoleOutput
;
1165 WinNtCreateFile CreateFile
;
1166 WinNtDeviceIoControl DeviceIoControl
;
1167 WinNtCreateDirectory CreateDirectory
;
1168 WinNtRemoveDirectory RemoveDirectory
;
1169 WinNtGetFileAttributes GetFileAttributes
;
1170 WinNtSetFileAttributes SetFileAttributes
;
1171 WinNtCreateFileMapping CreateFileMapping
;
1172 WinNtCloseHandle CloseHandle
;
1173 WinNtDeleteFile DeleteFile
;
1174 WinNtFindFirstFile FindFirstFile
;
1175 WinNtFindNextFile FindNextFile
;
1176 WinNtFindClose FindClose
;
1177 WinNtFlushFileBuffers FlushFileBuffers
;
1178 WinNtGetEnvironmentVariable GetEnvironmentVariable
;
1179 WinNtGetLastError GetLastError
;
1180 WinNtSetErrorMode SetErrorMode
;
1181 WinNtGetStdHandle GetStdHandle
;
1182 WinNtMapViewOfFileEx MapViewOfFileEx
;
1183 WinNtReadFile ReadFile
;
1184 WinNtSetEndOfFile SetEndOfFile
;
1185 WinNtSetFilePointer SetFilePointer
;
1186 WinNtWriteFile WriteFile
;
1187 WinNtGetFileInformationByHandle GetFileInformationByHandle
;
1188 WinNtGetDiskFreeSpace GetDiskFreeSpace
;
1189 WinNtGetDiskFreeSpaceEx GetDiskFreeSpaceEx
;
1190 WinNtMoveFile MoveFile
;
1191 WinNtSetFileTime SetFileTime
;
1192 WinNtSystemTimeToFileTime SystemTimeToFileTime
;
1197 WinNtFileTimeToLocalFileTime FileTimeToLocalFileTime
;
1198 WinNtFileTimeToSystemTime FileTimeToSystemTime
;
1199 WinNtGetSystemTime GetSystemTime
;
1200 WinNtSetSystemTime SetSystemTime
;
1201 WinNtGetLocalTime GetLocalTime
;
1202 WinNtSetLocalTime SetLocalTime
;
1203 WinNtGetTimeZoneInformation GetTimeZoneInformation
;
1204 WinNtSetTimeZoneInformation SetTimeZoneInformation
;
1205 WinNttimeSetEvent timeSetEvent
;
1206 WinNttimeKillEvent timeKillEvent
;
1209 // Win32 Serial APIs
1211 WinNtClearCommError ClearCommError
;
1212 WinNtEscapeCommFunction EscapeCommFunction
;
1213 WinNtGetCommModemStatus GetCommModemStatus
;
1214 WinNtGetCommState GetCommState
;
1215 WinNtSetCommState SetCommState
;
1216 WinNtPurgeComm PurgeComm
;
1217 WinNtSetCommTimeouts SetCommTimeouts
;
1219 WinNtExitProcess ExitProcess
;
1221 WinNtSprintf SPrintf
;
1223 WinNtGetDesktopWindow GetDesktopWindow
;
1224 WinNtGetForegroundWindow GetForegroundWindow
;
1225 WinNtCreateWindowEx CreateWindowEx
;
1226 WinNtShowWindow ShowWindow
;
1227 WinNtUpdateWindow UpdateWindow
;
1228 WinNtDestroyWindow DestroyWindow
;
1229 WinNtInvalidateRect InvalidateRect
;
1230 WinNtGetWindowDC GetWindowDC
;
1231 WinNtGetClientRect GetClientRect
;
1232 WinNtAdjustWindowRect AdjustWindowRect
;
1233 WinNtSetDIBitsToDevice SetDIBitsToDevice
;
1236 WinNtReleaseDC ReleaseDC
;
1237 WinNtRegisterClassEx RegisterClassEx
;
1238 WinNtUnregisterClass UnregisterClass
;
1240 WinNtBeginPaint BeginPaint
;
1241 WinNtEndPaint EndPaint
;
1242 WinNtPostQuitMessage PostQuitMessage
;
1243 WinNtDefWindowProc DefWindowProc
;
1244 WinNtLoadIcon LoadIcon
;
1245 WinNtLoadCursor LoadCursor
;
1246 WinNtGetStockObject GetStockObject
;
1247 WinNtSetViewportOrgEx SetViewportOrgEx
;
1248 WinNtSetWindowOrgEx SetWindowOrgEx
;
1249 WinNtMoveWindow MoveWindow
;
1250 WinNtGetWindowRect GetWindowRect
;
1252 WinNtGetMessage GetMessage
;
1253 WinNtTranslateMessage TranslateMessage
;
1254 WinNtDispatchMessage DispatchMessage
;
1256 WinNtGetProcessHeap GetProcessHeap
;
1257 WinNtHeapAlloc HeapAlloc
;
1258 WinNtHeapFree HeapFree
;
1260 } EFI_WIN_NT_THUNK_PROTOCOL
;
1262 extern EFI_GUID gEfiWinNtThunkProtocolGuid
;