1 /*++
2 
3 Copyright (c) 2004 - 2008, 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
8 
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.
11 
12 Module Name:
13 
14   WinNtThunk.h
15 
16 Abstract:
17 
18   This protocol allows an EFI driver (DLL) in the NT emulation envirnment
19   to make Win32 API calls.
20 
21   NEVER make a Win32 call directly, always make the call via this protocol.
22 
23   There are no This pointers on the protocol member functions as they map
24   exactly into Win32 system calls.
25 
26   YOU MUST include EfiWinNT.h in place of Efi.h to make this file compile.
27 
28 --*/
29 
30 #ifndef _WIN_NT_THUNK_H_
31 #define _WIN_NT_THUNK_H_
32 
33 #define EFI_WIN_NT_THUNK_PROTOCOL_GUID \
34   { \
35     0x58c518b1, 0x76f3, 0x11d4, {0xbc, 0xea, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81} \
36   }
37 
38 //
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.
42 //
43 #ifdef _EFI_WIN_NT_H_
44 
45 typedef
46 WINBASEAPI
47 VOID
48 (WINAPI *WinNtSleep) (
49   DWORD Milliseconds
50   );
51 
52 typedef
53 WINBASEAPI
54 DWORD
55 (WINAPI *WinNtSuspendThread) (
56   HANDLE hThread
57   );
58 
59 typedef
60 WINBASEAPI
61 HANDLE
62 (WINAPI *WinNtGetCurrentThread) (
63   VOID
64   );
65 
66 typedef
67 WINBASEAPI
68 DWORD
69 (WINAPI *WinNtGetCurrentThreadId) (
70   VOID
71   );
72 
73 typedef
74 WINBASEAPI
75 HANDLE
76 (WINAPI *WinNtGetCurrentProcess) (
77   VOID
78   );
79 
80 typedef
81 WINBASEAPI
82 HANDLE
83 (WINAPI *WinNtCreateThread) (
84   LPSECURITY_ATTRIBUTES   lpThreadAttributes,
85   DWORD                   dwStackSize,
86   LPTHREAD_START_ROUTINE  lpStartAddress,
87   LPVOID                  lpParameter,
88   DWORD                   dwCreationFlags,
89   LPDWORD                 lpThreadId
90   );
91 
92 typedef
93 WINBASEAPI
94 BOOL
95 (WINAPI *WinNtTerminateThread) (
96   HANDLE hThread,
97   DWORD  dwExitCode
98   );
99 
100 typedef
101 WINBASEAPI
102 BOOL
103 (WINAPI *WinNtSendMessage) (
104   HWND    hWnd,
105   UINT    Msg,
106   WPARAM  wParam,
107   LPARAM  lParam
108   );
109 
110 typedef
111 WINBASEAPI
112 VOID
113 (WINAPI *WinNtExitThread) (
114   DWORD   dwExitCode
115   );
116 
117 typedef
118 WINBASEAPI
119 DWORD
120 (WINAPI *WinNtResumeThread) (
121   HANDLE hThread
122   );
123 
124 typedef
125 WINBASEAPI
126 BOOL
127 (WINAPI *WinNtSetThreadPriority) (
128   HANDLE    hThread,
129   INTN      nPriority
130   );
131 
132 typedef
133 WINBASEAPI
134 VOID
135 (WINAPI *WinNtInitializeCriticalSection) (
136   LPCRITICAL_SECTION lpCriticalSection
137   );
138 
139 typedef
140 WINBASEAPI
141 VOID
142 (WINAPI *WinNtDeleteCriticalSection) (
143   LPCRITICAL_SECTION lpCriticalSection
144   );
145 
146 typedef
147 WINBASEAPI
148 VOID
149 (WINAPI *WinNtEnterCriticalSection) (
150   LPCRITICAL_SECTION lpCriticalSection
151   );
152 
153 typedef
154 WINBASEAPI
155 VOID
156 (WINAPI *WinNtLeaveCriticalSection) (
157   LPCRITICAL_SECTION lpCriticalSection
158   );
159 
160 typedef
161 WINBASEAPI
162 BOOL
163 (WINAPI *WinNtTlsAlloc) (
164   VOID
165   );
166 
167 typedef
168 WINBASEAPI
169 LPVOID
170 (WINAPI *WinNtTlsGetValue) (
171   DWORD dwTlsIndex
172   );
173 
174 typedef
175 WINBASEAPI
176 BOOL
177 (WINAPI *WinNtTlsSetValue) (
178   DWORD  dwTlsIndex,
179   LPVOID lpTlsValue
180   );
181 
182 typedef
183 WINBASEAPI
184 BOOL
185 (WINAPI *WinNtTlsFree) (
186   DWORD dwTlsIndex
187   );
188 
189 typedef
190 WINBASEAPI
191 HANDLE
192 (WINAPI *WinNtCreateSemaphore) (
193   LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,
194   LONG                  lInitialCount,
195   LONG                  lMaximumCount,
196   LPCWSTR               lpName
197   );
198 
199 typedef
200 WINBASEAPI
201 DWORD
202 (WINAPI *WinNtWaitForSingleObject) (
203   HANDLE  hHandle,
204   DWORD   dwMilliseconds
205   );
206 
207 typedef
208 WINBASEAPI
209 BOOL
210 (WINAPI *WinNtReleaseSemaphore) (
211   HANDLE  hSemaphore,
212   LONG    lReleaseCount,
213   LPLONG  lpPreviousCount
214   );
215 
216 typedef
217 WINBASEAPI
218 BOOL
219 (WINAPI *WinNtDuplicateHandle) (
220   HANDLE   hSourceProcessHandle,
221   HANDLE   hSourceHandle,
222   HANDLE   hTargetProcessHandle,
223   LPHANDLE lpTargetHandle,
224   DWORD    dwDesiredAccess,
225   BOOL     bInheritHandle,
226   DWORD    dwOptions
227   );
228 
229 typedef
230 WINBASEAPI
231 HANDLE
232 (WINAPI *WinNtCreateConsoleScreenBuffer) (
233   DWORD                       DesiredAccess,
234   DWORD                       ShareMode,
235   CONST SECURITY_ATTRIBUTES   *SecurityAttributes,
236   DWORD                       Flags,
237   LPVOID                      ScreenBufferData
238   );
239 
240 typedef
241 WINBASEAPI
242 BOOL
243 (WINAPI *WinNtSetConsoleScreenBufferSize) (
244   HANDLE  ConsoleOutput,
245   COORD   Size
246   );
247 
248 typedef
249 WINBASEAPI
250 BOOL
251 (WINAPI *WinNtSetConsoleActiveScreenBuffer) (
252   HANDLE  ConsoleOutput
253   );
254 
255 typedef
256 WINBASEAPI
257 BOOL
258 (WINAPI *WinNtFillConsoleOutputAttribute) (
259   HANDLE  ConsoleOutput,
260   WORD    Attribute,
261   DWORD   Length,
262   COORD   WriteCoord,
263   LPDWORD NumberOfAttrsWritten
264   );
265 
266 typedef
267 WINBASEAPI
268 BOOL
269 (WINAPI *WinNtFillConsoleOutputCharacter) (
270   HANDLE  ConsoleOutput,
271   TCHAR   Character,
272   DWORD   Length,
273   COORD   WriteCoord,
274   LPDWORD NumberOfCharsWritten
275   );
276 
277 typedef
278 WINBASEAPI
279 BOOL
280 (WINAPI *WinNtWriteConsoleOutput) (
281   HANDLE          ConsoleOutput,
282   CONST CHAR_INFO *Buffer,
283   COORD           BufferSize,
284   COORD           BufferCoord,
285   PSMALL_RECT     WriteRegion
286   );
287 
288 typedef
289 WINBASEAPI
290 BOOL
291 (WINAPI *WinNtScrollConsoleScreenBuffer) (
292   HANDLE            ConsoleOutput,
293   CONST SMALL_RECT  *ScrollRectangle,
294   CONST SMALL_RECT  *ClipRectangle,
295   COORD             DestinationOrigin,
296   CONST CHAR_INFO   *Fill
297   );
298 
299 typedef
300 WINBASEAPI
301 BOOL
302 (WINAPI *WinNtSetConsoleTitleW) (
303   LPCTSTR   ConsoleTitle
304   );
305 
306 typedef
307 WINBASEAPI
308 BOOL
309 (WINAPI *WinNtGetConsoleCursorInfo) (
310   HANDLE                ConsoleOutput,
311   PCONSOLE_CURSOR_INFO  ConsoleCursorInfo
312   );
313 
314 typedef
315 WINBASEAPI
316 BOOL
317 (WINAPI *WinNtSetConsoleCursorInfo) (
318   HANDLE                      ConsoleOutput,
319   CONST CONSOLE_CURSOR_INFO   *ConsoleCursorInfo
320   );
321 
322 typedef
323 WINBASEAPI
324 BOOL
325 (WINAPI *WinNtSetPriorityClass) (
326   HANDLE  Process,
327   DWORD   PriorityClass
328   );
329 
330 typedef
331 WINBASEAPI
332 BOOL
333 (WINAPI *WinNtWriteConsoleInput) (
334   HANDLE              ConsoleInput,
335   CONST INPUT_RECORD  *Buffer,
336   DWORD               Legnth,
337   LPDWORD             NumberOfEventsWritten
338   );
339 
340 typedef
341 WINBASEAPI
342 BOOL
343 (WINAPI *WinNtGetNumberOfConsoleInputEvents) (
344   HANDLE              ConsoleInput,
345   LPDWORD             NumberOfEvents
346   );
347 
348 typedef
349 WINBASEAPI
350 HANDLE
351 (WINAPI *WinNtGetStdHandle) (
352   DWORD   StdHandle
353   );
354 
355 typedef
356 WINBASEAPI
357 BOOL
358 (WINAPI *WinNtReadConsoleInput) (
359   HANDLE              ConsoleInput,
360   PINPUT_RECORD       Buffer,
361   DWORD               Length,
362   LPDWORD             NumberOfEventsRead
363   );
364 
365 typedef
366 WINBASEAPI
367 BOOL
368 (WINAPI *WinNtPeekConsoleInput) (
369   HANDLE              ConsoleInput,
370   PINPUT_RECORD       Buffer,
371   DWORD               Length,
372   LPDWORD             NumberOfEventsRead
373   );
374 
375 typedef
376 WINBASEAPI
377 BOOL
378 (WINAPI *WinNtSetConsoleCursorPosition) (
379   HANDLE              ConsoleInput,
380   COORD               CursorPosition
381   );
382 
383 typedef
384 WINBASEAPI
385 HANDLE
386 (WINAPI *WinNtCreateFile) (
387   LPCWSTR               FileName,
388   DWORD                 DesiredAccess,
389   DWORD                 SharedMode,
390   LPSECURITY_ATTRIBUTES SecurityAttributes,
391   DWORD                 CreationDisposition,
392   DWORD                 FlagsAndAttributes,
393   HANDLE                TemplateFile
394   );
395 
396 typedef
397 WINBASEAPI
398 BOOL
399 (WINAPI *WinNtDeviceIoControl) (
400   HANDLE                DeviceHandle,
401   DWORD                 IoControlCode,
402   LPVOID                InBuffer,
403   DWORD                 InBufferSize,
404   LPVOID                OutBuffer,
405   DWORD                 OutBufferSize,
406   LPDWORD               BytesReturned,
407   LPOVERLAPPED          Overlapped
408   );
409 
410 typedef
411 WINBASEAPI
412 BOOL
413 (WINAPI *WinNtCreateDirectory) (
414   LPCWSTR               PathName,
415   LPSECURITY_ATTRIBUTES SecurityAttributes
416   );
417 
418 typedef
419 WINBASEAPI
420 BOOL
421 (WINAPI *WinNtRemoveDirectory) (
422   LPCWSTR               PathName
423   );
424 
425 typedef
426 WINBASEAPI
427 DWORD
428 (WINAPI *WinNtGetFileAttributes) (
429   LPCWSTR               FileName
430   );
431 
432 typedef
433 WINBASEAPI
434 BOOL
435 (WINAPI *WinNtSetFileAttributes) (
436   LPCWSTR               FileName,
437   DWORD                 FileAttributes
438   );
439 
440 typedef
441 WINBASEAPI
442 HANDLE
443 (WINAPI *WinNtCreateFileMapping) (
444   HANDLE                  FileHandle,
445   LPSECURITY_ATTRIBUTES   Attributes,
446   DWORD                   Protect,
447   DWORD                   MaximumSizeHigh,
448   DWORD                   MaximumSizeLow,
449   LPCTSTR                 Name
450   );
451 
452 typedef
453 WINBASEAPI
454 LPVOID
455 (WINAPI *WinNtMapViewOfFileEx) (
456   HANDLE                  FileHandle,
457   DWORD                   DesiredAccess,
458   DWORD                   FileOffsetHigh,
459   DWORD                   FileOffsetLow,
460   DWORD                   NumberOfBytesToMap,
461   LPVOID                  BaseAddress
462   );
463 
464 typedef
465 WINBASEAPI
466 DWORD
467 (WINAPI *WinNtGetEnvironmentVariable) (
468   LPCTSTR Name,
469   LPTSTR  Buffer,
470   DWORD   Size
471   );
472 
473 typedef
474 WINBASEAPI
475 BOOL
476 (WINAPI *WinNtCloseHandle) (
477   HANDLE    Object
478   );
479 
480 typedef
481 WINBASEAPI
482 DWORD
483 (WINAPI *WinNtSetFilePointer) (
484   HANDLE    FileHandle,
485   LONG      DistanceToMove,
486   PLONG     DistanceToHoveHigh,
487   DWORD     MoveMethod
488   );
489 
490 typedef
491 WINBASEAPI
492 BOOL
493 (WINAPI *WinNtSetEndOfFile) (
494   HANDLE    FileHandle
495   );
496 
497 typedef
498 WINBASEAPI
499 BOOL
500 (WINAPI *WinNtReadFile) (
501   HANDLE        FileHandle,
502   LPVOID        Buffer,
503   DWORD         NumberOfBytesToRead,
504   LPDWORD       NumberOfBytesRead,
505   LPOVERLAPPED  Overlapped
506   );
507 
508 typedef
509 WINBASEAPI
510 BOOL
511 (WINAPI *WinNtWriteFile) (
512   HANDLE        FileHandle,
513   LPCVOID       Buffer,
514   DWORD         NumberOfBytesToWrite,
515   LPDWORD       NumberOfBytesWritten,
516   LPOVERLAPPED  Overlapped
517   );
518 
519 typedef
520 WINBASEAPI
521 BOOL
522 (WINAPI *WinNtGetFileInformationByHandle) (
523   HANDLE                      FileHandle,
524   BY_HANDLE_FILE_INFORMATION  *FileInfo
525   );
526 
527 typedef
528 WINBASEAPI
529 BOOL
530 (WINAPI *WinNtGetDiskFreeSpace) (
531   LPCTSTR     RootPathName,
532   LPDWORD     SectorsPerCluster,
533   LPDWORD     BytesPerSector,
534   LPDWORD     NumberOfFreeClusters,
535   LPDWORD     TotalNumberOfClusters
536   );
537 
538 typedef
539 WINBASEAPI
540 BOOL
541 (WINAPI *WinNtGetDiskFreeSpaceEx) (
542   LPCTSTR             DirectoryName,
543   PULARGE_INTEGER     FreeBytesAvailable,
544   PULARGE_INTEGER     TotalNumberOfBytes,
545   PULARGE_INTEGER     TotoalNumberOfFreeBytes
546   );
547 
548 typedef
549 WINBASEAPI
550 BOOL
551 (WINAPI *WinNtMoveFile) (
552   LPCTSTR     ExistingFileName,
553   LPCTSTR     NewFileName
554   );
555 
556 typedef
557 WINBASEAPI
558 BOOL
559 (WINAPI *WinNtSetFileTime) (
560   HANDLE      FileHandle,
561   FILETIME    *CreationTime,
562   FILETIME    *LastAccessTime,
563   FILETIME    *LastWriteTime
564   );
565 
566 typedef
567 WINBASEAPI
568 BOOL
569 (WINAPI *WinNtSystemTimeToFileTime) (
570   SYSTEMTIME  * SystemTime,
571   FILETIME    * FileTime
572   );
573 
574 typedef
575 WINBASEAPI
576 BOOL
577 (WINAPI *WinNtDeleteFile) (
578   LPCTSTR   FileName
579   );
580 
581 typedef
582 WINBASEAPI
583 BOOL
584 (WINAPI *WinNtFlushFileBuffers) (
585   HANDLE
586   );
587 
588 typedef
589 WINBASEAPI
590 DWORD
591 (WINAPI *WinNtGetLastError) (
592   VOID
593   );
594 
595 typedef
596 WINBASEAPI
597 UINT
598 (WINAPI *WinNtSetErrorMode) (
599   UINT  Mode
600   );
601 
602 typedef
603 WINBASEAPI
604 DWORD
605 (WINAPI *WinNtGetTickCount) (
606   VOID
607   );
608 
609 typedef
610 WINBASEAPI
611 HMODULE
612 (WINAPI *WinNtLoadLibraryEx) (
613   LPCTSTR LibFileName,
614   HANDLE  FileHandle,
615   DWORD   Flags
616   );
617 
618 typedef
619 WINBASEAPI
620 FARPROC
621 (WINAPI *WinNtGetProcAddress) (
622   HMODULE Module,
623   LPCSTR  ProcName
624   );
625 
626 typedef
627 WINBASEAPI
628 DWORD
629 (WINAPI *WinNtGetTimeZoneInformation) (
630   LPTIME_ZONE_INFORMATION timeZoneInformation
631   );
632 
633 typedef
634 WINBASEAPI
635 MMRESULT
636 (WINAPI *WinNttimeSetEvent) (
637   UINT           uDelay,
638   UINT           uResolution,
639   LPTIMECALLBACK lpTimeProc,
640   DWORD_PTR      dwUser,
641   UINT           fuEvent
642   );
643 
644 typedef
645 WINBASEAPI
646 MMRESULT
647 (WINAPI *WinNttimeKillEvent) (
648   UINT           uTimerID
649   );
650 
651 typedef
652 WINBASEAPI
653 DWORD
654 (WINAPI *WinNtSetTimeZoneInformation) (
655   LPTIME_ZONE_INFORMATION timeZoneInformation
656   );
657 
658 typedef
659 WINBASEAPI
660 VOID
661 (WINAPI *WinNtGetSystemTime) (
662   LPSYSTEMTIME        SystemTime
663   );
664 
665 typedef
666 WINBASEAPI
667 BOOL
668 (WINAPI *WinNtSetSystemTime) (
669   CONST SYSTEMTIME    *SystemTime
670   );
671 
672 typedef
673 WINBASEAPI
674 VOID
675 (WINAPI *WinNtGetLocalTime) (
676   LPSYSTEMTIME        SystemTime
677   );
678 
679 typedef
680 WINBASEAPI
681 BOOL
682 (WINAPI *WinNtSetLocalTime) (
683   CONST SYSTEMTIME    *SystemTime
684   );
685 
686 typedef
687 WINBASEAPI
688 BOOL
689 (WINAPI *WinNtFileTimeToLocalFileTime) (
690   CONST FILETIME  *FileTime,
691   LPFILETIME      LocalFileTime
692   );
693 
694 typedef
695 WINBASEAPI
696 BOOL
697 (WINAPI *WinNtFileTimeToSystemTime) (
698   CONST FILETIME  *FileTime,
699   LPSYSTEMTIME    SystemTime
700   );
701 
702 typedef
703 WINBASEAPI
704 HANDLE
705 (WINAPI *WinNtFindFirstFile) (
706   LPCTSTR           FileName,
707   LPWIN32_FIND_DATA FindFileData
708   );
709 
710 typedef
711 WINBASEAPI
712 BOOL
713 (WINAPI *WinNtFindNextFile) (
714   HANDLE            FindFile,
715   LPWIN32_FIND_DATA FindFileData
716   );
717 
718 typedef
719 WINBASEAPI
720 BOOL
721 (WINAPI *WinNtFindClose) (
722   HANDLE            FindFile
723   );
724 
725 typedef
726 WINBASEAPI
727 BOOL
728 (WINAPI *WinNtGetCommState) (
729   HANDLE  FileHandle,
730   LPDCB   DCB
731   );
732 
733 typedef
734 WINBASEAPI
735 BOOL
736 (WINAPI *WinNtSetCommState) (
737   HANDLE  FileHandle,
738   LPDCB   DCB
739   );
740 
741 typedef
742 WINBASEAPI
743 BOOL
744 (WINAPI *WinNtSetCommState) (
745   HANDLE  FileHandle,
746   LPDCB   DCB
747   );
748 
749 typedef
750 WINBASEAPI
751 BOOL
752 (WINAPI *WinNtSetCommTimeouts) (
753   HANDLE          FileHandle,
754   LPCOMMTIMEOUTS  CommTimeouts
755   );
756 
757 typedef
758 WINBASEAPI
759 VOID
760 (WINAPI *WinNtExitProcess) (
761   UINT uExitCode  // exit code for all threads
762   );
763 
764 typedef
765 WINBASEAPI
766 BOOL
767 (WINAPI *WinNtPurgeComm) (
768   HANDLE  FileHandle,
769   DWORD   Flags
770   );
771 
772 typedef
773 WINBASEAPI
774 BOOL
775 (WINAPI *WinNtEscapeCommFunction) (
776   HANDLE  FileHandle,
777   DWORD   Func
778   );
779 
780 typedef
781 WINBASEAPI
782 BOOL
783 (WINAPI *WinNtGetCommModemStatus) (
784   HANDLE  FileHandle,
785   LPDWORD ModemStat
786   );
787 
788 typedef
789 WINBASEAPI
790 BOOL
791 (WINAPI *WinNtClearCommError) (
792   HANDLE    FileHandle,
793   LPDWORD   Errors,
794   LPCOMSTAT Stat
795   );
796 
797 typedef
798 WINUSERAPI
799 INT32
800 (WINAPIV *WinNtSprintf) (
801   LPWSTR    Buffer,
802   LPCWSTR   String,
803   ...
804   );
805 
806 typedef
807 WINUSERAPI
808 HWND
809 (WINAPI *WinNtGetDesktopWindow) (
810   VOID
811   );
812 
813 typedef
814 WINUSERAPI
815 HWND
816 (WINAPI *WinNtGetForegroundWindow) (
817   VOID
818   );
819 
820 typedef
821 WINUSERAPI
822 HWND
823 (WINAPI *WinNtCreateWindowEx) (
824   DWORD     dwExStyle,
825   LPCTSTR   lpClassName,
826   LPCTSTR   lpWindowName,
827   DWORD     dwStyle,
828   INT32     x,
829   INT32     y,
830   INT32     nWidth,
831   INT32     nHeight,
832   HWND      hWndParent,
833   HMENU     hMenu,
834   HINSTANCE hInstance,
835   LPVOID    *lpParam
836   );
837 
838 typedef
839 WINUSERAPI
840 BOOL
841 (WINAPI *WinNtUpdateWindow) (
842   HWND      hWnd
843   );
844 
845 typedef
846 WINUSERAPI
847 BOOL
848 (WINAPI *WinNtShowWindow) (
849   HWND        hWnd,
850   INT32       nCmdShow
851   );
852 
853 typedef
854 WINGDIAPI
855 BOOL
856 (WINAPI *WinNtDestroyWindow) (
857   HWND    hWnd
858   );
859 
860 typedef
861 WINUSERAPI
862 HDC
863 (WINAPI *WinNtGetWindowDC) (
864   HWND    hWnd
865   );
866 
867 typedef
868 WINUSERAPI
869 BOOL
870 (WINAPI *WinNtGetClientRect) (
871   HWND    hWnd,
872   LPRECT  lpRect
873   );
874 
875 typedef
876 WINUSERAPI
877 BOOL
878 (WINAPI *WinNtAdjustWindowRect) (
879   LPRECT  lpRect,
880   DWORD   dwStyle,
881   BOOL    bMenu
882   );
883 
884 typedef
885 WINGDIAPI
886 INT32
887 (WINAPI *WinNtSetDIBitsToDevice) (
888   HDC,
889   INT32,
890   INT32,
891   DWORD,
892   DWORD,
893   INT32,
894   INT32,
895   UINT,
896   UINT,
897   CONST VOID       *,
898   CONST BITMAPINFO *,
899   UINT
900   );
901 
902 typedef
903 WINGDIAPI
904 BOOL
905 (WINAPI *WinNtBitBlt) (
906   HDC,
907   INT32,
908   INT32,
909   INT32,
910   INT32,
911   HDC,
912   INT32,
913   INT32,
914   DWORD
915   );
916 
917 typedef
918 WINUSERAPI
919 BOOL
920 (WINAPI *WinNtInvalidateRect) (
921   HWND        hWnd,
922   CONST RECT  *lpRect,
923   BOOL        bErase
924   );
925 
926 typedef
927 WINUSERAPI
928 HDC
929 (WINAPI *WinNtGetDC) (
930   HWND    hWnd
931   );
932 
933 typedef
934 WINUSERAPI
935 INT32
936 (WINAPI *WinNtReleaseDC) (
937   HWND    hWnd,
938   HDC     hDC
939   );
940 
941 typedef
942 WINUSERAPI
943 ATOM
944 (WINAPI *WinNtRegisterClassEx) (
945   CONST   WNDCLASSEX *
946   );
947 
948 typedef
949 WINUSERAPI
950 BOOL
951 (WINAPI *WinNtUnregisterClass) (
952   LPCTSTR   lpClassName,
953   HINSTANCE hInstance
954   );
955 
956 typedef
957 WINUSERAPI
958 HDC
959 (WINAPI *WinNtBeginPaint) (
960   HWND          hWnd,
961   LPPAINTSTRUCT lpPaint
962   );
963 
964 typedef
965 WINUSERAPI
966 BOOL
967 (WINAPI *WinNtEndPaint) (
968   HWND                hWnd,
969   CONST PAINTSTRUCT   *lpPaint
970   );
971 
972 typedef
973 WINUSERAPI
974 VOID
975 (WINAPI *WinNtPostQuitMessage) (
976   INT32   nExitCode
977   );
978 
979 typedef
980 WINUSERAPI
981 LRESULT
982 (WINAPI *WinNtDefWindowProc) (
983   HWND    hWnd,
984   UINT    Msg,
985   WPARAM  wParam,
986   LPARAM  lParam
987   );
988 
989 typedef
990 WINUSERAPI
991 HICON
992 (WINAPI *WinNtLoadIcon) (
993   HINSTANCE hInstance,
994   LPCTSTR   lpIconName
995   );
996 
997 typedef
998 WINUSERAPI
999 HCURSOR
1000 (WINAPI *WinNtLoadCursor) (
1001   HINSTANCE   hInstance,
1002   LPCTSTR     lpCursorName
1003   );
1004 
1005 typedef
1006 WINGDIAPI
1007 HGDIOBJ
1008 (WINAPI *WinNtGetStockObject) (
1009   INT32
1010   );
1011 
1012 typedef
1013 WINGDIAPI
1014 BOOL
1015 (WINAPI *WinNtSetViewportOrgEx) (
1016   HDC,
1017   INT32,
1018   INT32,
1019   LPPOINT
1020   );
1021 
1022 typedef
1023 WINGDIAPI
1024 BOOL
1025 (WINAPI *WinNtSetWindowOrgEx) (
1026   HDC,
1027   INT32,
1028   INT32,
1029   LPPOINT
1030   );
1031 typedef
1032 WINGDIAPI
1033 BOOL
1034 (WINAPI *WinNtMoveWindow) (
1035   HWND,
1036   INT32,
1037   INT32,
1038   INT32,
1039   INT32,
1040   BOOL
1041   );
1042 
1043 typedef
1044 WINGDIAPI
1045 BOOL
1046 (WINAPI *WinNtGetWindowRect) (
1047   HWND,
1048   LPRECT
1049   );
1050 
1051 typedef
1052 WINUSERAPI
1053 BOOL
1054 (WINAPI *WinNtGetMessage) (
1055   LPMSG     lpMsg,
1056   HWND      hWnd,
1057   UINT      wMsgFilterMin,
1058   UINT      wMsgFilterMax
1059   );
1060 
1061 typedef
1062 WINUSERAPI
1063 BOOL
1064 (WINAPI *WinNtTranslateMessage) (
1065   CONST MSG *lpMsg
1066   );
1067 
1068 typedef
1069 WINUSERAPI
1070 BOOL
1071 (WINAPI *WinNtDispatchMessage) (
1072   CONST MSG *lpMsg
1073   );
1074 
1075 typedef
1076 WINUSERAPI
1077 HANDLE
1078 (WINAPI *WinNtGetProcessHeap) ();
1079 
1080 typedef
1081 WINUSERAPI
1082 LPVOID
1083 (WINAPI *WinNtHeapAlloc) (
1084   HANDLE  hHeap,
1085   DWORD   dwFlags,
1086   SIZE_T  dwBytes
1087   );
1088 
1089 typedef
1090 WINUSERAPI
1091 BOOL
1092 (WINAPI *WinNtHeapFree) (
1093   HANDLE  hHeap,
1094   DWORD   dwFlags,
1095   LPVOID  lpMem
1096   );
1097 
1098 typedef
1099 WINBASEAPI
1100 BOOL
1101 (WINAPI *WinNtFreeLibrary) (
1102   HANDLE  ModHandle
1103   );
1104 //
1105 //
1106 //
1107 EFI_FORWARD_DECLARATION (EFI_WIN_NT_THUNK_PROTOCOL);
1108 
1109 #define EFI_WIN_NT_THUNK_PROTOCOL_SIGNATURE EFI_SIGNATURE_32 ('N', 'T', 'T', 'T')
1110 
1111 typedef struct _EFI_WIN_NT_THUNK_PROTOCOL {
1112   UINT64                              Signature;
1113 
1114   //
1115   // Win32 Process APIs
1116   //
1117   WinNtGetProcAddress                 GetProcAddress;
1118   WinNtGetTickCount                   GetTickCount;
1119   WinNtLoadLibraryEx                  LoadLibraryEx;
1120   WinNtFreeLibrary                    FreeLibrary;
1121 
1122   WinNtSetPriorityClass               SetPriorityClass;
1123   WinNtSetThreadPriority              SetThreadPriority;
1124   WinNtSleep                          Sleep;
1125 
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;
1136 
1137   //
1138   // Wint32 Mutex primitive
1139   //
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;
1151 
1152   //
1153   // Win32 Console APIs
1154   //
1155   WinNtCreateConsoleScreenBuffer      CreateConsoleScreenBuffer;
1156   WinNtFillConsoleOutputAttribute     FillConsoleOutputAttribute;
1157   WinNtFillConsoleOutputCharacter     FillConsoleOutputCharacter;
1158   WinNtGetConsoleCursorInfo           GetConsoleCursorInfo;
1159   WinNtGetNumberOfConsoleInputEvents  GetNumberOfConsoleInputEvents;
1160   WinNtPeekConsoleInput               PeekConsoleInput;
1161   WinNtScrollConsoleScreenBuffer      ScrollConsoleScreenBuffer;
1162   WinNtReadConsoleInput               ReadConsoleInput;
1163 
1164   WinNtSetConsoleActiveScreenBuffer   SetConsoleActiveScreenBuffer;
1165   WinNtSetConsoleCursorInfo           SetConsoleCursorInfo;
1166   WinNtSetConsoleCursorPosition       SetConsoleCursorPosition;
1167   WinNtSetConsoleScreenBufferSize     SetConsoleScreenBufferSize;
1168   WinNtSetConsoleTitleW               SetConsoleTitleW;
1169   WinNtWriteConsoleInput              WriteConsoleInput;
1170   WinNtWriteConsoleOutput             WriteConsoleOutput;
1171 
1172   //
1173   // Win32 File APIs
1174   //
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;
1203 
1204   //
1205   // Win32 Time APIs
1206   //
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;
1217 
1218   //
1219   // Win32 Serial APIs
1220   //
1221   WinNtClearCommError                 ClearCommError;
1222   WinNtEscapeCommFunction             EscapeCommFunction;
1223   WinNtGetCommModemStatus             GetCommModemStatus;
1224   WinNtGetCommState                   GetCommState;
1225   WinNtSetCommState                   SetCommState;
1226   WinNtPurgeComm                      PurgeComm;
1227   WinNtSetCommTimeouts                SetCommTimeouts;
1228 
1229   WinNtExitProcess                    ExitProcess;
1230 
1231   WinNtSprintf                        SPrintf;
1232 
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;
1244   WinNtBitBlt                         BitBlt;
1245   WinNtGetDC                          GetDC;
1246   WinNtReleaseDC                      ReleaseDC;
1247   WinNtRegisterClassEx                RegisterClassEx;
1248   WinNtUnregisterClass                UnregisterClass;
1249 
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;
1261 
1262   WinNtGetMessage                     GetMessage;
1263   WinNtTranslateMessage               TranslateMessage;
1264   WinNtDispatchMessage                DispatchMessage;
1265 
1266   WinNtGetProcessHeap                 GetProcessHeap;
1267   WinNtHeapAlloc                      HeapAlloc;
1268   WinNtHeapFree                       HeapFree;
1269 
1270 } EFI_WIN_NT_THUNK_PROTOCOL;
1271 
1272 #endif
1273 
1274 extern EFI_GUID gEfiWinNtThunkProtocolGuid;
1275 
1276 #endif
1277