github.com/searKing/golang/go@v1.2.74/os/signal/cgo/include/boost/winapi/dll.hpp (about)

     1  /*
     2   * Copyright 2010 Vicente J. Botet Escriba
     3   * Copyright 2014 Renato Tegon Forti, Antony Polukhin
     4   * Copyright 2015 Andrey Semashev
     5   * Copyright 2015 Antony Polukhin
     6   *
     7   * Distributed under the Boost Software License, Version 1.0.
     8   * See http://www.boost.org/LICENSE_1_0.txt
     9   */
    10  
    11  #ifndef BOOST_WINAPI_DLL_HPP_INCLUDED_
    12  #define BOOST_WINAPI_DLL_HPP_INCLUDED_
    13  
    14  #include <boost/winapi/basic_types.hpp>
    15  
    16  #ifdef BOOST_HAS_PRAGMA_ONCE
    17  #pragma once
    18  #endif
    19  
    20  #if BOOST_WINAPI_PARTITION_DESKTOP || BOOST_WINAPI_PARTITION_SYSTEM
    21  
    22  #if !defined( BOOST_USE_WINDOWS_H )
    23  extern "C" {
    24  namespace boost { namespace winapi {
    25  #ifdef _WIN64
    26  typedef INT_PTR_ (BOOST_WINAPI_WINAPI_CC *FARPROC_)();
    27  typedef INT_PTR_ (BOOST_WINAPI_WINAPI_CC *NEARPROC_)();
    28  typedef INT_PTR_ (BOOST_WINAPI_WINAPI_CC *PROC_)();
    29  #else
    30  typedef int (BOOST_WINAPI_WINAPI_CC *FARPROC_)();
    31  typedef int (BOOST_WINAPI_WINAPI_CC *NEARPROC_)();
    32  typedef int (BOOST_WINAPI_WINAPI_CC *PROC_)();
    33  #endif // _WIN64
    34  }} // namespace boost::winapi
    35  
    36  #if !defined( BOOST_NO_ANSI_APIS )
    37  BOOST_SYMBOL_IMPORT boost::winapi::HMODULE_ BOOST_WINAPI_WINAPI_CC
    38  LoadLibraryA(boost::winapi::LPCSTR_ lpFileName);
    39  
    40  BOOST_SYMBOL_IMPORT boost::winapi::HMODULE_ BOOST_WINAPI_WINAPI_CC
    41  LoadLibraryExA(
    42      boost::winapi::LPCSTR_ lpFileName,
    43      boost::winapi::HANDLE_ hFile,
    44      boost::winapi::DWORD_ dwFlags
    45  );
    46  
    47  BOOST_SYMBOL_IMPORT boost::winapi::HMODULE_ BOOST_WINAPI_WINAPI_CC
    48  GetModuleHandleA(boost::winapi::LPCSTR_ lpFileName);
    49  
    50  BOOST_SYMBOL_IMPORT boost::winapi::DWORD_ BOOST_WINAPI_WINAPI_CC
    51  GetModuleFileNameA(
    52      boost::winapi::HMODULE_ hModule,
    53      boost::winapi::LPSTR_ lpFilename,
    54      boost::winapi::DWORD_ nSize
    55  );
    56  #endif
    57  
    58  BOOST_SYMBOL_IMPORT boost::winapi::HMODULE_ BOOST_WINAPI_WINAPI_CC
    59  LoadLibraryW(boost::winapi::LPCWSTR_ lpFileName);
    60  
    61  BOOST_SYMBOL_IMPORT boost::winapi::HMODULE_ BOOST_WINAPI_WINAPI_CC
    62  LoadLibraryExW(
    63      boost::winapi::LPCWSTR_ lpFileName,
    64      boost::winapi::HANDLE_ hFile,
    65      boost::winapi::DWORD_ dwFlags
    66  );
    67  
    68  BOOST_SYMBOL_IMPORT boost::winapi::HMODULE_ BOOST_WINAPI_WINAPI_CC
    69  GetModuleHandleW(boost::winapi::LPCWSTR_ lpFileName);
    70  
    71  BOOST_SYMBOL_IMPORT boost::winapi::DWORD_ BOOST_WINAPI_WINAPI_CC
    72  GetModuleFileNameW(
    73      boost::winapi::HMODULE_ hModule,
    74      boost::winapi::LPWSTR_ lpFilename,
    75      boost::winapi::DWORD_ nSize
    76  );
    77  
    78  #if !defined( UNDER_CE )
    79  BOOST_SYMBOL_IMPORT boost::winapi::FARPROC_ BOOST_WINAPI_WINAPI_CC
    80  GetProcAddress(boost::winapi::HMODULE_ hModule, boost::winapi::LPCSTR_ lpProcName);
    81  #else
    82  // On Windows CE there are two functions: GetProcAddressA (since Windows CE 3.0) and GetProcAddressW.
    83  // GetProcAddress is a macro that is _always_ defined to GetProcAddressW.
    84  BOOST_SYMBOL_IMPORT boost::winapi::FARPROC_ BOOST_WINAPI_WINAPI_CC
    85  GetProcAddressA(boost::winapi::HMODULE_ hModule, boost::winapi::LPCSTR_ lpProcName);
    86  BOOST_SYMBOL_IMPORT boost::winapi::FARPROC_ BOOST_WINAPI_WINAPI_CC
    87  GetProcAddressW(boost::winapi::HMODULE_ hModule, boost::winapi::LPCWSTR_ lpProcName);
    88  #endif
    89  
    90  struct _MEMORY_BASIC_INFORMATION;
    91  
    92  #if !defined( BOOST_WINAPI_IS_MINGW )
    93  BOOST_SYMBOL_IMPORT boost::winapi::SIZE_T_ BOOST_WINAPI_WINAPI_CC
    94  VirtualQuery(
    95      boost::winapi::LPCVOID_ lpAddress,
    96      ::_MEMORY_BASIC_INFORMATION* lpBuffer,
    97      boost::winapi::SIZE_T_ dwLength
    98  );
    99  #else // !defined( BOOST_WINAPI_IS_MINGW )
   100  BOOST_SYMBOL_IMPORT boost::winapi::DWORD_ BOOST_WINAPI_WINAPI_CC
   101  VirtualQuery(
   102      boost::winapi::LPCVOID_ lpAddress,
   103      ::_MEMORY_BASIC_INFORMATION* lpBuffer,
   104      boost::winapi::DWORD_ dwLength
   105  );
   106  #endif // !defined( BOOST_WINAPI_IS_MINGW )
   107  } // extern "C"
   108  #endif // #if !defined( BOOST_USE_WINDOWS_H )
   109  
   110  namespace boost {
   111  namespace winapi {
   112  
   113  typedef struct BOOST_MAY_ALIAS MEMORY_BASIC_INFORMATION_ {
   114      PVOID_  BaseAddress;
   115      PVOID_  AllocationBase;
   116      DWORD_  AllocationProtect;
   117      SIZE_T_ RegionSize;
   118      DWORD_  State;
   119      DWORD_  Protect;
   120      DWORD_  Type;
   121  } *PMEMORY_BASIC_INFORMATION_;
   122  
   123  #if defined( BOOST_USE_WINDOWS_H )
   124  typedef ::FARPROC FARPROC_;
   125  typedef ::NEARPROC NEARPROC_;
   126  typedef ::PROC PROC_;
   127  
   128  BOOST_CONSTEXPR_OR_CONST DWORD_ DONT_RESOLVE_DLL_REFERENCES_           = DONT_RESOLVE_DLL_REFERENCES;
   129  BOOST_CONSTEXPR_OR_CONST DWORD_ LOAD_WITH_ALTERED_SEARCH_PATH_         = LOAD_WITH_ALTERED_SEARCH_PATH;
   130  #else // defined( BOOST_USE_WINDOWS_H )
   131  BOOST_CONSTEXPR_OR_CONST DWORD_ DONT_RESOLVE_DLL_REFERENCES_           = 0x00000001;
   132  BOOST_CONSTEXPR_OR_CONST DWORD_ LOAD_WITH_ALTERED_SEARCH_PATH_         = 0x00000008;
   133  #endif // defined( BOOST_USE_WINDOWS_H )
   134  
   135  // This one is not defined by MinGW
   136  BOOST_CONSTEXPR_OR_CONST DWORD_ LOAD_IGNORE_CODE_AUTHZ_LEVEL_          = 0x00000010;
   137  
   138  #if !defined( BOOST_NO_ANSI_APIS )
   139  using ::LoadLibraryA;
   140  using ::LoadLibraryExA;
   141  using ::GetModuleHandleA;
   142  using ::GetModuleFileNameA;
   143  #endif // !defined( BOOST_NO_ANSI_APIS )
   144  using ::LoadLibraryW;
   145  using ::LoadLibraryExW;
   146  using ::GetModuleHandleW;
   147  using ::GetModuleFileNameW;
   148  
   149  #if !defined( UNDER_CE )
   150  // For backward compatibility, don't use directly. Use get_proc_address instead.
   151  using ::GetProcAddress;
   152  #else
   153  using ::GetProcAddressA;
   154  using ::GetProcAddressW;
   155  #endif
   156  
   157  BOOST_FORCEINLINE FARPROC_ get_proc_address(HMODULE_ hModule, LPCSTR_ lpProcName)
   158  {
   159  #if !defined( UNDER_CE )
   160      return ::GetProcAddress(hModule, lpProcName);
   161  #else
   162      return ::GetProcAddressA(hModule, lpProcName);
   163  #endif
   164  }
   165  
   166  BOOST_FORCEINLINE SIZE_T_ VirtualQuery(LPCVOID_ lpAddress, MEMORY_BASIC_INFORMATION_* lpBuffer, SIZE_T_ dwLength)
   167  {
   168      return ::VirtualQuery(lpAddress, reinterpret_cast< ::_MEMORY_BASIC_INFORMATION* >(lpBuffer), dwLength);
   169  }
   170  
   171  #if !defined( BOOST_NO_ANSI_APIS )
   172  BOOST_FORCEINLINE HMODULE_ load_library(LPCSTR_ lpFileName)
   173  {
   174      return ::LoadLibraryA(lpFileName);
   175  }
   176  
   177  BOOST_FORCEINLINE HMODULE_ load_library_ex(LPCSTR_ lpFileName, HANDLE_ hFile, DWORD_ dwFlags)
   178  {
   179      return ::LoadLibraryExA(lpFileName, hFile, dwFlags);
   180  }
   181  
   182  BOOST_FORCEINLINE HMODULE_ get_module_handle(LPCSTR_ lpFileName)
   183  {
   184      return ::GetModuleHandleA(lpFileName);
   185  }
   186  
   187  BOOST_FORCEINLINE DWORD_ get_module_file_name(HMODULE_ hModule, LPSTR_ lpFilename, DWORD_ nSize)
   188  {
   189      return ::GetModuleFileNameA(hModule, lpFilename, nSize);
   190  }
   191  #endif // #if !defined( BOOST_NO_ANSI_APIS )
   192  
   193  BOOST_FORCEINLINE HMODULE_ load_library(LPCWSTR_ lpFileName)
   194  {
   195      return ::LoadLibraryW(lpFileName);
   196  }
   197  
   198  BOOST_FORCEINLINE HMODULE_ load_library_ex(LPCWSTR_ lpFileName, HANDLE_ hFile, DWORD_ dwFlags)
   199  {
   200      return ::LoadLibraryExW(lpFileName, hFile, dwFlags);
   201  }
   202  
   203  BOOST_FORCEINLINE HMODULE_ get_module_handle(LPCWSTR_ lpFileName)
   204  {
   205      return ::GetModuleHandleW(lpFileName);
   206  }
   207  
   208  BOOST_FORCEINLINE DWORD_ get_module_file_name(HMODULE_ hModule, LPWSTR_ lpFilename, DWORD_ nSize)
   209  {
   210      return ::GetModuleFileNameW(hModule, lpFilename, nSize);
   211  }
   212  
   213  } // namespace winapi
   214  } // namespace boost
   215  
   216  #endif // BOOST_WINAPI_PARTITION_DESKTOP || BOOST_WINAPI_PARTITION_SYSTEM
   217  
   218  //
   219  // FreeLibrary is in a different partition set (slightly)
   220  //
   221  
   222  #if BOOST_WINAPI_PARTITION_APP || BOOST_WINAPI_PARTITION_SYSTEM
   223  
   224  #if !defined(BOOST_USE_WINDOWS_H)
   225  extern "C" {
   226  BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
   227  FreeLibrary(boost::winapi::HMODULE_ hModule);
   228  }
   229  #endif
   230  
   231  namespace boost {
   232  namespace winapi {
   233  using ::FreeLibrary;
   234  }
   235  }
   236  
   237  #endif // BOOST_WINAPI_PARTITION_APP || BOOST_WINAPI_PARTITION_SYSTEM
   238  #endif // BOOST_WINAPI_DLL_HPP_INCLUDED_