3 Copyright (c) 2006 - 2010, 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
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 #include <Common/WinNtInclude.h>
35 #define EFI_WIN_NT_THUNK_PROTOCOL_GUID \
36 { 0x58c518b1, 0x76f3, 0x11d4, { 0xbc, 0xea, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81 } }
41 (WINAPI
*WinNtSleep
) (
48 (WINAPI
*WinNtSuspendThread
) (
55 (WINAPI
*WinNtGetCurrentThread
) (
62 (WINAPI
*WinNtGetCurrentThreadId
) (
69 (WINAPI
*WinNtGetCurrentProcess
) (
76 (WINAPI
*WinNtCreateThread
) (
77 LPSECURITY_ATTRIBUTES lpThreadAttributes
,
79 LPTHREAD_START_ROUTINE lpStartAddress
,
81 DWORD dwCreationFlags
,
88 (WINAPI
*WinNtTerminateThread
) (
96 (WINAPI
*WinNtSendMessage
) (
106 (WINAPI
*WinNtExitThread
) (
113 (WINAPI
*WinNtResumeThread
) (
120 (WINAPI
*WinNtSetThreadPriority
) (
128 (WINAPI
*WinNtInitializeCriticalSection
) (
129 LPCRITICAL_SECTION lpCriticalSection
135 (WINAPI
*WinNtDeleteCriticalSection
) (
136 LPCRITICAL_SECTION lpCriticalSection
142 (WINAPI
*WinNtEnterCriticalSection
) (
143 LPCRITICAL_SECTION lpCriticalSection
149 (WINAPI
*WinNtLeaveCriticalSection
) (
150 LPCRITICAL_SECTION lpCriticalSection
156 (WINAPI
*WinNtTlsAlloc
) (
163 (WINAPI
*WinNtTlsGetValue
) (
170 (WINAPI
*WinNtTlsSetValue
) (
178 (WINAPI
*WinNtTlsFree
) (
185 (WINAPI
*WinNtCreateSemaphore
) (
186 LPSECURITY_ATTRIBUTES lpSemaphoreAttributes
,
195 (WINAPI
*WinNtWaitForSingleObject
) (
203 (WINAPI
*WinNtReleaseSemaphore
) (
206 LPLONG lpPreviousCount
212 (WINAPI
*WinNtDuplicateHandle
) (
213 HANDLE hSourceProcessHandle
,
214 HANDLE hSourceHandle
,
215 HANDLE hTargetProcessHandle
,
216 LPHANDLE lpTargetHandle
,
217 DWORD dwDesiredAccess
,
225 (WINAPI
*WinNtCreateConsoleScreenBuffer
) (
228 CONST SECURITY_ATTRIBUTES
*SecurityAttributes
,
230 LPVOID ScreenBufferData
236 (WINAPI
*WinNtSetConsoleScreenBufferSize
) (
237 HANDLE ConsoleOutput
,
244 (WINAPI
*WinNtSetConsoleActiveScreenBuffer
) (
251 (WINAPI
*WinNtFillConsoleOutputAttribute
) (
252 HANDLE ConsoleOutput
,
256 LPDWORD NumberOfAttrsWritten
262 (WINAPI
*WinNtFillConsoleOutputCharacter
) (
263 HANDLE ConsoleOutput
,
267 LPDWORD NumberOfCharsWritten
273 (WINAPI
*WinNtWriteConsoleOutput
) (
274 HANDLE ConsoleOutput
,
275 CONST CHAR_INFO
*Buffer
,
278 PSMALL_RECT WriteRegion
284 (WINAPI
*WinNtScrollConsoleScreenBuffer
) (
285 HANDLE ConsoleOutput
,
286 CONST SMALL_RECT
*ScrollRectangle
,
287 CONST SMALL_RECT
*ClipRectangle
,
288 COORD DestinationOrigin
,
289 CONST CHAR_INFO
*Fill
295 (WINAPI
*WinNtSetConsoleTitleW
) (
302 (WINAPI
*WinNtGetConsoleCursorInfo
) (
303 HANDLE ConsoleOutput
,
304 PCONSOLE_CURSOR_INFO ConsoleCursorInfo
310 (WINAPI
*WinNtSetConsoleCursorInfo
) (
311 HANDLE ConsoleOutput
,
312 CONST CONSOLE_CURSOR_INFO
*ConsoleCursorInfo
318 (WINAPI
*WinNtSetPriorityClass
) (
326 (WINAPI
*WinNtWriteConsoleInput
) (
328 CONST INPUT_RECORD
*Buffer
,
330 LPDWORD NumberOfEventsWritten
336 (WINAPI
*WinNtGetNumberOfConsoleInputEvents
) (
338 LPDWORD NumberOfEvents
344 (WINAPI
*WinNtGetStdHandle
) (
351 (WINAPI
*WinNtReadConsoleInput
) (
353 PINPUT_RECORD Buffer
,
355 LPDWORD NumberOfEventsRead
361 (WINAPI
*WinNtPeekConsoleInput
) (
363 PINPUT_RECORD Buffer
,
365 LPDWORD NumberOfEventsRead
371 (WINAPI
*WinNtSetConsoleCursorPosition
) (
379 (WINAPI
*WinNtCreateFile
) (
383 LPSECURITY_ATTRIBUTES SecurityAttributes
,
384 DWORD CreationDisposition
,
385 DWORD FlagsAndAttributes
,
392 (WINAPI
*WinNtDeviceIoControl
) (
399 LPDWORD BytesReturned
,
400 LPOVERLAPPED Overlapped
406 (WINAPI
*WinNtCreateDirectory
) (
408 LPSECURITY_ATTRIBUTES SecurityAttributes
414 (WINAPI
*WinNtRemoveDirectory
) (
421 (WINAPI
*WinNtGetFileAttributes
) (
428 (WINAPI
*WinNtSetFileAttributes
) (
436 (WINAPI
*WinNtCreateFileMapping
) (
438 LPSECURITY_ATTRIBUTES Attributes
,
440 DWORD MaximumSizeHigh
,
441 DWORD MaximumSizeLow
,
448 (WINAPI
*WinNtMapViewOfFileEx
) (
451 DWORD FileOffsetHigh
,
453 DWORD NumberOfBytesToMap
,
460 (WINAPI
*WinNtGetEnvironmentVariable
) (
469 (WINAPI
*WinNtCloseHandle
) (
476 (WINAPI
*WinNtSetFilePointer
) (
479 PLONG DistanceToHoveHigh
,
486 (WINAPI
*WinNtSetEndOfFile
) (
493 (WINAPI
*WinNtReadFile
) (
496 DWORD NumberOfBytesToRead
,
497 LPDWORD NumberOfBytesRead
,
498 LPOVERLAPPED Overlapped
504 (WINAPI
*WinNtWriteFile
) (
507 DWORD NumberOfBytesToWrite
,
508 LPDWORD NumberOfBytesWritten
,
509 LPOVERLAPPED Overlapped
515 (WINAPI
*WinNtGetFileInformationByHandle
) (
517 BY_HANDLE_FILE_INFORMATION
*FileInfo
523 (WINAPI
*WinNtGetDiskFreeSpace
) (
524 LPCTSTR RootPathName
,
525 LPDWORD SectorsPerCluster
,
526 LPDWORD BytesPerSector
,
527 LPDWORD NumberOfFreeClusters
,
528 LPDWORD TotalNumberOfClusters
534 (WINAPI
*WinNtGetDiskFreeSpaceEx
) (
535 LPCTSTR DirectoryName
,
536 PULARGE_INTEGER FreeBytesAvailable
,
537 PULARGE_INTEGER TotalNumberOfBytes
,
538 PULARGE_INTEGER TotoalNumberOfFreeBytes
544 (WINAPI
*WinNtMoveFile
) (
545 LPCTSTR ExistingFileName
,
552 (WINAPI
*WinNtSetFileTime
) (
554 FILETIME
*CreationTime
,
555 FILETIME
*LastAccessTime
,
556 FILETIME
*LastWriteTime
562 (WINAPI
*WinNtSystemTimeToFileTime
) (
563 SYSTEMTIME
* SystemTime
,
570 (WINAPI
*WinNtDeleteFile
) (
577 (WINAPI
*WinNtFlushFileBuffers
) (
584 (WINAPI
*WinNtGetLastError
) (
591 (WINAPI
*WinNtSetErrorMode
) (
598 (WINAPI
*WinNtGetTickCount
) (
605 (WINAPI
*WinNtLoadLibraryEx
) (
614 (WINAPI
*WinNtGetProcAddress
) (
622 (WINAPI
*WinNtGetTimeZoneInformation
) (
623 LPTIME_ZONE_INFORMATION timeZoneInformation
629 (WINAPI
*WinNttimeSetEvent
) (
632 LPTIMECALLBACK lpTimeProc
,
640 (WINAPI
*WinNttimeKillEvent
) (
647 (WINAPI
*WinNtSetTimeZoneInformation
) (
648 LPTIME_ZONE_INFORMATION timeZoneInformation
654 (WINAPI
*WinNtGetSystemTime
) (
655 LPSYSTEMTIME SystemTime
661 (WINAPI
*WinNtSetSystemTime
) (
662 CONST SYSTEMTIME
*SystemTime
668 (WINAPI
*WinNtGetLocalTime
) (
669 LPSYSTEMTIME SystemTime
675 (WINAPI
*WinNtSetLocalTime
) (
676 CONST SYSTEMTIME
*SystemTime
682 (WINAPI
*WinNtLocalFileTimeToFileTime
) (
683 CONST FILETIME
*LocalFileTime
,
691 (WINAPI
*WinNtFileTimeToLocalFileTime
) (
692 CONST FILETIME
*FileTime
,
693 LPFILETIME LocalFileTime
699 (WINAPI
*WinNtFileTimeToSystemTime
) (
700 CONST FILETIME
*FileTime
,
701 LPSYSTEMTIME SystemTime
707 (WINAPI
*WinNtFindFirstFile
) (
709 LPWIN32_FIND_DATA FindFileData
715 (WINAPI
*WinNtFindNextFile
) (
717 LPWIN32_FIND_DATA FindFileData
723 (WINAPI
*WinNtFindClose
) (
730 (WINAPI
*WinNtGetCommState
) (
738 (WINAPI
*WinNtSetCommState
) (
746 (WINAPI
*WinNtSetCommState
) (
754 (WINAPI
*WinNtSetCommTimeouts
) (
756 LPCOMMTIMEOUTS CommTimeouts
762 (WINAPI
*WinNtExitProcess
) (
763 UINT uExitCode
// exit code for all threads
769 (WINAPI
*WinNtPurgeComm
) (
777 (WINAPI
*WinNtEscapeCommFunction
) (
785 (WINAPI
*WinNtGetCommModemStatus
) (
793 (WINAPI
*WinNtClearCommError
) (
802 (WINAPIV
*WinNtSprintf
) (
812 (WINAPI
*WinNtGetDesktopWindow
) (
819 (WINAPI
*WinNtGetForegroundWindow
) (
826 (WINAPI
*WinNtCreateWindowEx
) (
829 LPCTSTR lpWindowName
,
844 (WINAPI
*WinNtUpdateWindow
) (
851 (WINAPI
*WinNtShowWindow
) (
859 (WINAPI
*WinNtDestroyWindow
) (
866 (WINAPI
*WinNtGetWindowDC
) (
873 (WINAPI
*WinNtGetClientRect
) (
881 (WINAPI
*WinNtAdjustWindowRect
) (
890 (WINAPI
*WinNtSetDIBitsToDevice
) (
908 (WINAPI
*WinNtBitBlt
) (
923 (WINAPI
*WinNtInvalidateRect
) (
932 (WINAPI
*WinNtGetDC
) (
939 (WINAPI
*WinNtReleaseDC
) (
947 (WINAPI
*WinNtRegisterClassEx
) (
954 (WINAPI
*WinNtUnregisterClass
) (
962 (WINAPI
*WinNtBeginPaint
) (
964 LPPAINTSTRUCT lpPaint
970 (WINAPI
*WinNtEndPaint
) (
972 CONST PAINTSTRUCT
*lpPaint
978 (WINAPI
*WinNtPostQuitMessage
) (
985 (WINAPI
*WinNtDefWindowProc
) (
995 (WINAPI
*WinNtLoadIcon
) (
1003 (WINAPI
*WinNtLoadCursor
) (
1004 HINSTANCE hInstance
,
1005 LPCTSTR lpCursorName
1011 (WINAPI
*WinNtGetStockObject
) (
1018 (WINAPI
*WinNtSetViewportOrgEx
) (
1028 (WINAPI
*WinNtSetWindowOrgEx
) (
1037 (WINAPI
*WinNtMoveWindow
) (
1049 (WINAPI
*WinNtGetWindowRect
) (
1057 (WINAPI
*WinNtGetMessage
) (
1067 (WINAPI
*WinNtTranslateMessage
) (
1074 (WINAPI
*WinNtDispatchMessage
) (
1081 (WINAPI
*WinNtGetProcessHeap
) ();
1086 (WINAPI
*WinNtHeapAlloc
) (
1095 (WINAPI
*WinNtHeapFree
) (
1104 (WINAPI
*WinNtFreeLibrary
) (
1111 #define EFI_WIN_NT_THUNK_PROTOCOL_SIGNATURE SIGNATURE_32 ('N', 'T', 'T', 'T')
1117 // Win32 Process APIs
1119 WinNtGetProcAddress GetProcAddress
;
1120 WinNtGetTickCount GetTickCount
;
1121 WinNtLoadLibraryEx LoadLibraryEx
;
1122 WinNtFreeLibrary FreeLibrary
;
1124 WinNtSetPriorityClass SetPriorityClass
;
1125 WinNtSetThreadPriority SetThreadPriority
;
1128 WinNtSuspendThread SuspendThread
;
1129 WinNtGetCurrentThread GetCurrentThread
;
1130 WinNtGetCurrentThreadId GetCurrentThreadId
;
1131 WinNtGetCurrentProcess GetCurrentProcess
;
1132 WinNtCreateThread CreateThread
;
1133 WinNtTerminateThread TerminateThread
;
1134 WinNtSendMessage SendMessage
;
1135 WinNtExitThread ExitThread
;
1136 WinNtResumeThread ResumeThread
;
1137 WinNtDuplicateHandle DuplicateHandle
;
1140 // Wint32 Mutex primitive
1142 WinNtInitializeCriticalSection InitializeCriticalSection
;
1143 WinNtEnterCriticalSection EnterCriticalSection
;
1144 WinNtLeaveCriticalSection LeaveCriticalSection
;
1145 WinNtDeleteCriticalSection DeleteCriticalSection
;
1146 WinNtTlsAlloc TlsAlloc
;
1147 WinNtTlsFree TlsFree
;
1148 WinNtTlsSetValue TlsSetValue
;
1149 WinNtTlsGetValue TlsGetValue
;
1150 WinNtCreateSemaphore CreateSemaphore
;
1151 WinNtWaitForSingleObject WaitForSingleObject
;
1152 WinNtReleaseSemaphore ReleaseSemaphore
;
1155 // Win32 Console APIs
1157 WinNtCreateConsoleScreenBuffer CreateConsoleScreenBuffer
;
1158 WinNtFillConsoleOutputAttribute FillConsoleOutputAttribute
;
1159 WinNtFillConsoleOutputCharacter FillConsoleOutputCharacter
;
1160 WinNtGetConsoleCursorInfo GetConsoleCursorInfo
;
1161 WinNtGetNumberOfConsoleInputEvents GetNumberOfConsoleInputEvents
;
1162 WinNtPeekConsoleInput PeekConsoleInput
;
1163 WinNtScrollConsoleScreenBuffer ScrollConsoleScreenBuffer
;
1164 WinNtReadConsoleInput ReadConsoleInput
;
1166 WinNtSetConsoleActiveScreenBuffer SetConsoleActiveScreenBuffer
;
1167 WinNtSetConsoleCursorInfo SetConsoleCursorInfo
;
1168 WinNtSetConsoleCursorPosition SetConsoleCursorPosition
;
1169 WinNtSetConsoleScreenBufferSize SetConsoleScreenBufferSize
;
1170 WinNtSetConsoleTitleW SetConsoleTitleW
;
1171 WinNtWriteConsoleInput WriteConsoleInput
;
1172 WinNtWriteConsoleOutput WriteConsoleOutput
;
1177 WinNtCreateFile CreateFile
;
1178 WinNtDeviceIoControl DeviceIoControl
;
1179 WinNtCreateDirectory CreateDirectory
;
1180 WinNtRemoveDirectory RemoveDirectory
;
1181 WinNtGetFileAttributes GetFileAttributes
;
1182 WinNtSetFileAttributes SetFileAttributes
;
1183 WinNtCreateFileMapping CreateFileMapping
;
1184 WinNtCloseHandle CloseHandle
;
1185 WinNtDeleteFile DeleteFile
;
1186 WinNtFindFirstFile FindFirstFile
;
1187 WinNtFindNextFile FindNextFile
;
1188 WinNtFindClose FindClose
;
1189 WinNtFlushFileBuffers FlushFileBuffers
;
1190 WinNtGetEnvironmentVariable GetEnvironmentVariable
;
1191 WinNtGetLastError GetLastError
;
1192 WinNtSetErrorMode SetErrorMode
;
1193 WinNtGetStdHandle GetStdHandle
;
1194 WinNtMapViewOfFileEx MapViewOfFileEx
;
1195 WinNtReadFile ReadFile
;
1196 WinNtSetEndOfFile SetEndOfFile
;
1197 WinNtSetFilePointer SetFilePointer
;
1198 WinNtWriteFile WriteFile
;
1199 WinNtGetFileInformationByHandle GetFileInformationByHandle
;
1200 WinNtGetDiskFreeSpace GetDiskFreeSpace
;
1201 WinNtGetDiskFreeSpaceEx GetDiskFreeSpaceEx
;
1202 WinNtMoveFile MoveFile
;
1203 WinNtSetFileTime SetFileTime
;
1204 WinNtSystemTimeToFileTime SystemTimeToFileTime
;
1209 WinNtLocalFileTimeToFileTime LocalFileTimeToFileTime
;
1210 WinNtFileTimeToLocalFileTime FileTimeToLocalFileTime
;
1211 WinNtFileTimeToSystemTime FileTimeToSystemTime
;
1212 WinNtGetSystemTime GetSystemTime
;
1213 WinNtSetSystemTime SetSystemTime
;
1214 WinNtGetLocalTime GetLocalTime
;
1215 WinNtSetLocalTime SetLocalTime
;
1216 WinNtGetTimeZoneInformation GetTimeZoneInformation
;
1217 WinNtSetTimeZoneInformation SetTimeZoneInformation
;
1218 WinNttimeSetEvent timeSetEvent
;
1219 WinNttimeKillEvent timeKillEvent
;
1222 // Win32 Serial APIs
1224 WinNtClearCommError ClearCommError
;
1225 WinNtEscapeCommFunction EscapeCommFunction
;
1226 WinNtGetCommModemStatus GetCommModemStatus
;
1227 WinNtGetCommState GetCommState
;
1228 WinNtSetCommState SetCommState
;
1229 WinNtPurgeComm PurgeComm
;
1230 WinNtSetCommTimeouts SetCommTimeouts
;
1232 WinNtExitProcess ExitProcess
;
1234 WinNtSprintf SPrintf
;
1236 WinNtGetDesktopWindow GetDesktopWindow
;
1237 WinNtGetForegroundWindow GetForegroundWindow
;
1238 WinNtCreateWindowEx CreateWindowEx
;
1239 WinNtShowWindow ShowWindow
;
1240 WinNtUpdateWindow UpdateWindow
;
1241 WinNtDestroyWindow DestroyWindow
;
1242 WinNtInvalidateRect InvalidateRect
;
1243 WinNtGetWindowDC GetWindowDC
;
1244 WinNtGetClientRect GetClientRect
;
1245 WinNtAdjustWindowRect AdjustWindowRect
;
1246 WinNtSetDIBitsToDevice SetDIBitsToDevice
;
1249 WinNtReleaseDC ReleaseDC
;
1250 WinNtRegisterClassEx RegisterClassEx
;
1251 WinNtUnregisterClass UnregisterClass
;
1253 WinNtBeginPaint BeginPaint
;
1254 WinNtEndPaint EndPaint
;
1255 WinNtPostQuitMessage PostQuitMessage
;
1256 WinNtDefWindowProc DefWindowProc
;
1257 WinNtLoadIcon LoadIcon
;
1258 WinNtLoadCursor LoadCursor
;
1259 WinNtGetStockObject GetStockObject
;
1260 WinNtSetViewportOrgEx SetViewportOrgEx
;
1261 WinNtSetWindowOrgEx SetWindowOrgEx
;
1262 WinNtMoveWindow MoveWindow
;
1263 WinNtGetWindowRect GetWindowRect
;
1265 WinNtGetMessage GetMessage
;
1266 WinNtTranslateMessage TranslateMessage
;
1267 WinNtDispatchMessage DispatchMessage
;
1269 WinNtGetProcessHeap GetProcessHeap
;
1270 WinNtHeapAlloc HeapAlloc
;
1271 WinNtHeapFree HeapFree
;
1273 } EFI_WIN_NT_THUNK_PROTOCOL
;
1275 extern EFI_GUID gEfiWinNtThunkProtocolGuid
;