/**@file

Copyright (c) 2006, Intel Corporation                                                         
All rights reserved. This program and the accompanying materials                          
are licensed and made available under the terms and conditions of the BSD License         
which accompanies this distribution.  The full text of the license may be found at        
http://opensource.org/licenses/bsd-license.php                                            
                                                                                          
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             

Module Name:

  WinNtThunk.c

Abstract:

  Since the SEC is the only windows program in our emulation we 
  must use a Tiano mechanism to export Win32 APIs to other modules.
  This is the role of the EFI_WIN_NT_THUNK_PROTOCOL.

  The mWinNtThunkTable exists so that a change to EFI_WIN_NT_THUNK_PROTOCOL
  will cause an error in initializing the array if all the member functions
  are not added. It looks like adding a element to end and not initializing
  it may cause the table to be initaliized with the members at the end being
  set to zero. This is bad as jumping to zero will case the NT32 to crash.
  
  All the member functions in mWinNtThunkTable are Win32
  API calls, so please reference Microsoft documentation. 


  gWinNt is a a public exported global that contains the initialized
  data.

**/

#include "SecMain.h"

//
// This pragma is needed for all the DLL entry points to be asigned to the array.
//  if warning 4232 is not dissabled a warning will be generated as a DLL entry
//  point could be modified dynamically. The SEC does not do that, so we must
//  disable the warning so we can compile the SEC. The previous method was to
//  asign each element in code. The disadvantage to that approach is it's harder
//  to tell if all the elements have been initailized properly.
//
#pragma warning(disable : 4232)
#pragma warning(disable : 4996)

#if __INTEL_COMPILER
#pragma warning ( disable : 144 )  
#endif

EFI_WIN_NT_THUNK_PROTOCOL mWinNtThunkTable = {
  EFI_WIN_NT_THUNK_PROTOCOL_SIGNATURE,
  GetProcAddress,
  GetTickCount,
  LoadLibraryEx,
  FreeLibrary,
  SetPriorityClass,
  SetThreadPriority,
  Sleep,
  SuspendThread,
  GetCurrentThread,
  GetCurrentThreadId,
  GetCurrentProcess,
  CreateThread,
  TerminateThread,
  SendMessage,
  ExitThread,
  ResumeThread,
  DuplicateHandle,
  InitializeCriticalSection,
  EnterCriticalSection,
  LeaveCriticalSection,
  DeleteCriticalSection,
  TlsAlloc,
  TlsFree,
  TlsSetValue,
  TlsGetValue,
  CreateSemaphore,
  WaitForSingleObject,
  ReleaseSemaphore,
  CreateConsoleScreenBuffer,
  FillConsoleOutputAttribute,
  FillConsoleOutputCharacter,
  GetConsoleCursorInfo,
  GetNumberOfConsoleInputEvents,
  PeekConsoleInput,
  ScrollConsoleScreenBuffer,
  ReadConsoleInput,
  SetConsoleActiveScreenBuffer,
  SetConsoleCursorInfo,
  SetConsoleCursorPosition,
  SetConsoleScreenBufferSize,
  SetConsoleTitleW,
  WriteConsoleInput,
  WriteConsoleOutput,
  CreateFile,
  DeviceIoControl,
  CreateDirectory,
  RemoveDirectory,
  GetFileAttributes,
  SetFileAttributes,
  CreateFileMapping,
  CloseHandle,
  DeleteFile,
  FindFirstFile,
  FindNextFile,
  FindClose,
  FlushFileBuffers,
  GetEnvironmentVariable,
  GetLastError,
  SetErrorMode,
  GetStdHandle,
  MapViewOfFileEx,
  ReadFile,
  SetEndOfFile,
  SetFilePointer,
  WriteFile,
  GetFileInformationByHandle,
  GetDiskFreeSpace,
  GetDiskFreeSpaceEx,
  MoveFile,
  SetFileTime,
  SystemTimeToFileTime,
  FileTimeToLocalFileTime,
  FileTimeToSystemTime,
  GetSystemTime,
  SetSystemTime,
  GetLocalTime,
  SetLocalTime,
  GetTimeZoneInformation,
  SetTimeZoneInformation,
  timeSetEvent,
  timeKillEvent,
  ClearCommError,
  EscapeCommFunction,
  GetCommModemStatus,
  GetCommState,
  SetCommState,
  PurgeComm,
  SetCommTimeouts,
  ExitProcess,
  _snwprintf,
  GetDesktopWindow,
  GetForegroundWindow,
  CreateWindowEx,
  ShowWindow,
  UpdateWindow,
  DestroyWindow,
  InvalidateRect,
  GetWindowDC,
  GetClientRect,
  AdjustWindowRect,
  SetDIBitsToDevice,
  BitBlt,
  GetDC,
  ReleaseDC,
  RegisterClassEx,
  UnregisterClass,
  BeginPaint,
  EndPaint,
  PostQuitMessage,
  DefWindowProc,
  LoadIcon,
  LoadCursor,
  GetStockObject,
  SetViewportOrgEx,
  SetWindowOrgEx,
  MoveWindow,
  GetWindowRect,
  GetMessage,
  TranslateMessage,
  DispatchMessage,
  GetProcessHeap,
  HeapAlloc,
  HeapFree
};

#pragma warning(default : 4996)
#pragma warning(default : 4232)

EFI_WIN_NT_THUNK_PROTOCOL *gWinNt = &mWinNtThunkTable;
