WinBase.h
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:203k
源码类别:

模拟服务器

开发平台:

C/C++

  1. /************************************************************************
  2. *                                                                       *
  3. *   winbase.h -- This module defines the 32-Bit Windows Base APIs       *
  4. *                                                                       *
  5. *   Copyright (c) Microsoft Corp. All rights reserved.                  *
  6. *                                                                       *
  7. ************************************************************************/
  8. #ifndef _WINBASE_
  9. #define _WINBASE_
  10. #if _MSC_VER > 1000
  11. #pragma once
  12. #endif
  13. #ifdef _MAC
  14. #include <macwin32.h>
  15. #endif //_MAC
  16. //
  17. // Define API decoration for direct importing of DLL references.
  18. //
  19. #if !defined(_ADVAPI32_)
  20. #define WINADVAPI DECLSPEC_IMPORT
  21. #else
  22. #define WINADVAPI
  23. #endif
  24. #if !defined(_KERNEL32_)
  25. #define WINBASEAPI DECLSPEC_IMPORT
  26. #else
  27. #define WINBASEAPI
  28. #endif
  29. #if !defined(_ZAWPROXY_)
  30. #define ZAWPROXYAPI DECLSPEC_IMPORT
  31. #else
  32. #define ZAWPROXYAPI
  33. #endif
  34. #ifdef __cplusplus
  35. extern "C" {
  36. #endif
  37. /*
  38.  * Compatibility macros
  39.  */
  40. #define DefineHandleTable(w)            ((w),TRUE)
  41. #define LimitEmsPages(dw)
  42. #define SetSwapAreaSize(w)              (w)
  43. #define LockSegment(w)                  GlobalFix((HANDLE)(w))
  44. #define UnlockSegment(w)                GlobalUnfix((HANDLE)(w))
  45. #define GetCurrentTime()                GetTickCount()
  46. #define Yield()
  47. #define INVALID_HANDLE_VALUE ((HANDLE)(LONG_PTR)-1)
  48. #define INVALID_FILE_SIZE ((DWORD)0xFFFFFFFF)
  49. #define INVALID_SET_FILE_POINTER ((DWORD)-1)
  50. #define INVALID_FILE_ATTRIBUTES ((DWORD)-1)
  51. #define FILE_BEGIN           0
  52. #define FILE_CURRENT         1
  53. #define FILE_END             2
  54. #define TIME_ZONE_ID_INVALID ((DWORD)0xFFFFFFFF)
  55. #define WAIT_FAILED ((DWORD)0xFFFFFFFF)
  56. #define WAIT_OBJECT_0       ((STATUS_WAIT_0 ) + 0 )
  57. #define WAIT_ABANDONED         ((STATUS_ABANDONED_WAIT_0 ) + 0 )
  58. #define WAIT_ABANDONED_0       ((STATUS_ABANDONED_WAIT_0 ) + 0 )
  59. #define WAIT_IO_COMPLETION                  STATUS_USER_APC
  60. #define STILL_ACTIVE                        STATUS_PENDING
  61. #define EXCEPTION_ACCESS_VIOLATION          STATUS_ACCESS_VIOLATION
  62. #define EXCEPTION_DATATYPE_MISALIGNMENT     STATUS_DATATYPE_MISALIGNMENT
  63. #define EXCEPTION_BREAKPOINT                STATUS_BREAKPOINT
  64. #define EXCEPTION_SINGLE_STEP               STATUS_SINGLE_STEP
  65. #define EXCEPTION_ARRAY_BOUNDS_EXCEEDED     STATUS_ARRAY_BOUNDS_EXCEEDED
  66. #define EXCEPTION_FLT_DENORMAL_OPERAND      STATUS_FLOAT_DENORMAL_OPERAND
  67. #define EXCEPTION_FLT_DIVIDE_BY_ZERO        STATUS_FLOAT_DIVIDE_BY_ZERO
  68. #define EXCEPTION_FLT_INEXACT_RESULT        STATUS_FLOAT_INEXACT_RESULT
  69. #define EXCEPTION_FLT_INVALID_OPERATION     STATUS_FLOAT_INVALID_OPERATION
  70. #define EXCEPTION_FLT_OVERFLOW              STATUS_FLOAT_OVERFLOW
  71. #define EXCEPTION_FLT_STACK_CHECK           STATUS_FLOAT_STACK_CHECK
  72. #define EXCEPTION_FLT_UNDERFLOW             STATUS_FLOAT_UNDERFLOW
  73. #define EXCEPTION_INT_DIVIDE_BY_ZERO        STATUS_INTEGER_DIVIDE_BY_ZERO
  74. #define EXCEPTION_INT_OVERFLOW              STATUS_INTEGER_OVERFLOW
  75. #define EXCEPTION_PRIV_INSTRUCTION          STATUS_PRIVILEGED_INSTRUCTION
  76. #define EXCEPTION_IN_PAGE_ERROR             STATUS_IN_PAGE_ERROR
  77. #define EXCEPTION_ILLEGAL_INSTRUCTION       STATUS_ILLEGAL_INSTRUCTION
  78. #define EXCEPTION_NONCONTINUABLE_EXCEPTION  STATUS_NONCONTINUABLE_EXCEPTION
  79. #define EXCEPTION_STACK_OVERFLOW            STATUS_STACK_OVERFLOW
  80. #define EXCEPTION_INVALID_DISPOSITION       STATUS_INVALID_DISPOSITION
  81. #define EXCEPTION_GUARD_PAGE                STATUS_GUARD_PAGE_VIOLATION
  82. #define EXCEPTION_INVALID_HANDLE            STATUS_INVALID_HANDLE
  83. #define CONTROL_C_EXIT                      STATUS_CONTROL_C_EXIT
  84. #define MoveMemory RtlMoveMemory
  85. #define CopyMemory RtlCopyMemory
  86. #define FillMemory RtlFillMemory
  87. #define ZeroMemory RtlZeroMemory
  88. //
  89. // File creation flags must start at the high end since they
  90. // are combined with the attributes
  91. //
  92. #define FILE_FLAG_WRITE_THROUGH         0x80000000
  93. #define FILE_FLAG_OVERLAPPED            0x40000000
  94. #define FILE_FLAG_NO_BUFFERING          0x20000000
  95. #define FILE_FLAG_RANDOM_ACCESS         0x10000000
  96. #define FILE_FLAG_SEQUENTIAL_SCAN       0x08000000
  97. #define FILE_FLAG_DELETE_ON_CLOSE       0x04000000
  98. #define FILE_FLAG_BACKUP_SEMANTICS      0x02000000
  99. #define FILE_FLAG_POSIX_SEMANTICS       0x01000000
  100. #define FILE_FLAG_OPEN_REPARSE_POINT    0x00200000
  101. #define FILE_FLAG_OPEN_NO_RECALL        0x00100000
  102. #define FILE_FLAG_FIRST_PIPE_INSTANCE   0x00080000
  103. #define CREATE_NEW          1
  104. #define CREATE_ALWAYS       2
  105. #define OPEN_EXISTING       3
  106. #define OPEN_ALWAYS         4
  107. #define TRUNCATE_EXISTING   5
  108. #if(_WIN32_WINNT >= 0x0400)
  109. //
  110. // Define possible return codes from the CopyFileEx callback routine
  111. //
  112. #define PROGRESS_CONTINUE   0
  113. #define PROGRESS_CANCEL     1
  114. #define PROGRESS_STOP       2
  115. #define PROGRESS_QUIET      3
  116. //
  117. // Define CopyFileEx callback routine state change values
  118. //
  119. #define CALLBACK_CHUNK_FINISHED         0x00000000
  120. #define CALLBACK_STREAM_SWITCH          0x00000001
  121. //
  122. // Define CopyFileEx option flags
  123. //
  124. #define COPY_FILE_FAIL_IF_EXISTS              0x00000001
  125. #define COPY_FILE_RESTARTABLE                 0x00000002
  126. #define COPY_FILE_OPEN_SOURCE_FOR_WRITE       0x00000004
  127. #define COPY_FILE_ALLOW_DECRYPTED_DESTINATION 0x00000008
  128. #endif /* _WIN32_WINNT >= 0x0400 */
  129. #if (_WIN32_WINNT >= 0x0500)
  130. //
  131. // Define ReplaceFile option flags
  132. //
  133. #define REPLACEFILE_WRITE_THROUGH       0x00000001
  134. #define REPLACEFILE_IGNORE_MERGE_ERRORS 0x00000002
  135. #endif // #if (_WIN32_WINNT >= 0x0500)
  136. //
  137. // Define the NamedPipe definitions
  138. //
  139. //
  140. // Define the dwOpenMode values for CreateNamedPipe
  141. //
  142. #define PIPE_ACCESS_INBOUND         0x00000001
  143. #define PIPE_ACCESS_OUTBOUND        0x00000002
  144. #define PIPE_ACCESS_DUPLEX          0x00000003
  145. //
  146. // Define the Named Pipe End flags for GetNamedPipeInfo
  147. //
  148. #define PIPE_CLIENT_END             0x00000000
  149. #define PIPE_SERVER_END             0x00000001
  150. //
  151. // Define the dwPipeMode values for CreateNamedPipe
  152. //
  153. #define PIPE_WAIT                   0x00000000
  154. #define PIPE_NOWAIT                 0x00000001
  155. #define PIPE_READMODE_BYTE          0x00000000
  156. #define PIPE_READMODE_MESSAGE       0x00000002
  157. #define PIPE_TYPE_BYTE              0x00000000
  158. #define PIPE_TYPE_MESSAGE           0x00000004
  159. //
  160. // Define the well known values for CreateNamedPipe nMaxInstances
  161. //
  162. #define PIPE_UNLIMITED_INSTANCES    255
  163. //
  164. // Define the Security Quality of Service bits to be passed
  165. // into CreateFile
  166. //
  167. #define SECURITY_ANONYMOUS          ( SecurityAnonymous      << 16 )
  168. #define SECURITY_IDENTIFICATION     ( SecurityIdentification << 16 )
  169. #define SECURITY_IMPERSONATION      ( SecurityImpersonation  << 16 )
  170. #define SECURITY_DELEGATION         ( SecurityDelegation     << 16 )
  171. #define SECURITY_CONTEXT_TRACKING  0x00040000
  172. #define SECURITY_EFFECTIVE_ONLY    0x00080000
  173. #define SECURITY_SQOS_PRESENT      0x00100000
  174. #define SECURITY_VALID_SQOS_FLAGS  0x001F0000
  175. //
  176. //  File structures
  177. //
  178. typedef struct _OVERLAPPED {
  179.     ULONG_PTR Internal;
  180.     ULONG_PTR InternalHigh;
  181.     union {
  182.         struct {
  183.             DWORD Offset;
  184.             DWORD OffsetHigh;
  185.         };
  186.         PVOID Pointer;
  187.     };
  188.     HANDLE  hEvent;
  189. } OVERLAPPED, *LPOVERLAPPED;
  190. typedef struct _SECURITY_ATTRIBUTES {
  191.     DWORD nLength;
  192.     LPVOID lpSecurityDescriptor;
  193.     BOOL bInheritHandle;
  194. } SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES;
  195. typedef struct _PROCESS_INFORMATION {
  196.     HANDLE hProcess;
  197.     HANDLE hThread;
  198.     DWORD dwProcessId;
  199.     DWORD dwThreadId;
  200. } PROCESS_INFORMATION, *PPROCESS_INFORMATION, *LPPROCESS_INFORMATION;
  201. //
  202. //  File System time stamps are represented with the following structure:
  203. //
  204. typedef struct _FILETIME {
  205.     DWORD dwLowDateTime;
  206.     DWORD dwHighDateTime;
  207. } FILETIME, *PFILETIME, *LPFILETIME;
  208. //
  209. // System time is represented with the following structure:
  210. //
  211. typedef struct _SYSTEMTIME {
  212.     WORD wYear;
  213.     WORD wMonth;
  214.     WORD wDayOfWeek;
  215.     WORD wDay;
  216.     WORD wHour;
  217.     WORD wMinute;
  218.     WORD wSecond;
  219.     WORD wMilliseconds;
  220. } SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;
  221. typedef DWORD (WINAPI *PTHREAD_START_ROUTINE)(
  222.     LPVOID lpThreadParameter
  223.     );
  224. typedef PTHREAD_START_ROUTINE LPTHREAD_START_ROUTINE;
  225. #if(_WIN32_WINNT >= 0x0400)
  226. typedef VOID (WINAPI *PFIBER_START_ROUTINE)(
  227.     LPVOID lpFiberParameter
  228.     );
  229. typedef PFIBER_START_ROUTINE LPFIBER_START_ROUTINE;
  230. #endif /* _WIN32_WINNT >= 0x0400 */
  231. typedef RTL_CRITICAL_SECTION CRITICAL_SECTION;
  232. typedef PRTL_CRITICAL_SECTION PCRITICAL_SECTION;
  233. typedef PRTL_CRITICAL_SECTION LPCRITICAL_SECTION;
  234. typedef RTL_CRITICAL_SECTION_DEBUG CRITICAL_SECTION_DEBUG;
  235. typedef PRTL_CRITICAL_SECTION_DEBUG PCRITICAL_SECTION_DEBUG;
  236. typedef PRTL_CRITICAL_SECTION_DEBUG LPCRITICAL_SECTION_DEBUG;
  237. #if defined(_X86_)
  238. typedef PLDT_ENTRY LPLDT_ENTRY;
  239. #else
  240. typedef LPVOID LPLDT_ENTRY;
  241. #endif
  242. #define MUTEX_MODIFY_STATE MUTANT_QUERY_STATE
  243. #define MUTEX_ALL_ACCESS MUTANT_ALL_ACCESS
  244. //
  245. // Serial provider type.
  246. //
  247. #define SP_SERIALCOMM    ((DWORD)0x00000001)
  248. //
  249. // Provider SubTypes
  250. //
  251. #define PST_UNSPECIFIED      ((DWORD)0x00000000)
  252. #define PST_RS232            ((DWORD)0x00000001)
  253. #define PST_PARALLELPORT     ((DWORD)0x00000002)
  254. #define PST_RS422            ((DWORD)0x00000003)
  255. #define PST_RS423            ((DWORD)0x00000004)
  256. #define PST_RS449            ((DWORD)0x00000005)
  257. #define PST_MODEM            ((DWORD)0x00000006)
  258. #define PST_FAX              ((DWORD)0x00000021)
  259. #define PST_SCANNER          ((DWORD)0x00000022)
  260. #define PST_NETWORK_BRIDGE   ((DWORD)0x00000100)
  261. #define PST_LAT              ((DWORD)0x00000101)
  262. #define PST_TCPIP_TELNET     ((DWORD)0x00000102)
  263. #define PST_X25              ((DWORD)0x00000103)
  264. //
  265. // Provider capabilities flags.
  266. //
  267. #define PCF_DTRDSR        ((DWORD)0x0001)
  268. #define PCF_RTSCTS        ((DWORD)0x0002)
  269. #define PCF_RLSD          ((DWORD)0x0004)
  270. #define PCF_PARITY_CHECK  ((DWORD)0x0008)
  271. #define PCF_XONXOFF       ((DWORD)0x0010)
  272. #define PCF_SETXCHAR      ((DWORD)0x0020)
  273. #define PCF_TOTALTIMEOUTS ((DWORD)0x0040)
  274. #define PCF_INTTIMEOUTS   ((DWORD)0x0080)
  275. #define PCF_SPECIALCHARS  ((DWORD)0x0100)
  276. #define PCF_16BITMODE     ((DWORD)0x0200)
  277. //
  278. // Comm provider settable parameters.
  279. //
  280. #define SP_PARITY         ((DWORD)0x0001)
  281. #define SP_BAUD           ((DWORD)0x0002)
  282. #define SP_DATABITS       ((DWORD)0x0004)
  283. #define SP_STOPBITS       ((DWORD)0x0008)
  284. #define SP_HANDSHAKING    ((DWORD)0x0010)
  285. #define SP_PARITY_CHECK   ((DWORD)0x0020)
  286. #define SP_RLSD           ((DWORD)0x0040)
  287. //
  288. // Settable baud rates in the provider.
  289. //
  290. #define BAUD_075          ((DWORD)0x00000001)
  291. #define BAUD_110          ((DWORD)0x00000002)
  292. #define BAUD_134_5        ((DWORD)0x00000004)
  293. #define BAUD_150          ((DWORD)0x00000008)
  294. #define BAUD_300          ((DWORD)0x00000010)
  295. #define BAUD_600          ((DWORD)0x00000020)
  296. #define BAUD_1200         ((DWORD)0x00000040)
  297. #define BAUD_1800         ((DWORD)0x00000080)
  298. #define BAUD_2400         ((DWORD)0x00000100)
  299. #define BAUD_4800         ((DWORD)0x00000200)
  300. #define BAUD_7200         ((DWORD)0x00000400)
  301. #define BAUD_9600         ((DWORD)0x00000800)
  302. #define BAUD_14400        ((DWORD)0x00001000)
  303. #define BAUD_19200        ((DWORD)0x00002000)
  304. #define BAUD_38400        ((DWORD)0x00004000)
  305. #define BAUD_56K          ((DWORD)0x00008000)
  306. #define BAUD_128K         ((DWORD)0x00010000)
  307. #define BAUD_115200       ((DWORD)0x00020000)
  308. #define BAUD_57600        ((DWORD)0x00040000)
  309. #define BAUD_USER         ((DWORD)0x10000000)
  310. //
  311. // Settable Data Bits
  312. //
  313. #define DATABITS_5        ((WORD)0x0001)
  314. #define DATABITS_6        ((WORD)0x0002)
  315. #define DATABITS_7        ((WORD)0x0004)
  316. #define DATABITS_8        ((WORD)0x0008)
  317. #define DATABITS_16       ((WORD)0x0010)
  318. #define DATABITS_16X      ((WORD)0x0020)
  319. //
  320. // Settable Stop and Parity bits.
  321. //
  322. #define STOPBITS_10       ((WORD)0x0001)
  323. #define STOPBITS_15       ((WORD)0x0002)
  324. #define STOPBITS_20       ((WORD)0x0004)
  325. #define PARITY_NONE       ((WORD)0x0100)
  326. #define PARITY_ODD        ((WORD)0x0200)
  327. #define PARITY_EVEN       ((WORD)0x0400)
  328. #define PARITY_MARK       ((WORD)0x0800)
  329. #define PARITY_SPACE      ((WORD)0x1000)
  330. typedef struct _COMMPROP {
  331.     WORD wPacketLength;
  332.     WORD wPacketVersion;
  333.     DWORD dwServiceMask;
  334.     DWORD dwReserved1;
  335.     DWORD dwMaxTxQueue;
  336.     DWORD dwMaxRxQueue;
  337.     DWORD dwMaxBaud;
  338.     DWORD dwProvSubType;
  339.     DWORD dwProvCapabilities;
  340.     DWORD dwSettableParams;
  341.     DWORD dwSettableBaud;
  342.     WORD wSettableData;
  343.     WORD wSettableStopParity;
  344.     DWORD dwCurrentTxQueue;
  345.     DWORD dwCurrentRxQueue;
  346.     DWORD dwProvSpec1;
  347.     DWORD dwProvSpec2;
  348.     WCHAR wcProvChar[1];
  349. } COMMPROP,*LPCOMMPROP;
  350. //
  351. // Set dwProvSpec1 to COMMPROP_INITIALIZED to indicate that wPacketLength
  352. // is valid before a call to GetCommProperties().
  353. //
  354. #define COMMPROP_INITIALIZED ((DWORD)0xE73CF52E)
  355. typedef struct _COMSTAT {
  356.     DWORD fCtsHold : 1;
  357.     DWORD fDsrHold : 1;
  358.     DWORD fRlsdHold : 1;
  359.     DWORD fXoffHold : 1;
  360.     DWORD fXoffSent : 1;
  361.     DWORD fEof : 1;
  362.     DWORD fTxim : 1;
  363.     DWORD fReserved : 25;
  364.     DWORD cbInQue;
  365.     DWORD cbOutQue;
  366. } COMSTAT, *LPCOMSTAT;
  367. //
  368. // DTR Control Flow Values.
  369. //
  370. #define DTR_CONTROL_DISABLE    0x00
  371. #define DTR_CONTROL_ENABLE     0x01
  372. #define DTR_CONTROL_HANDSHAKE  0x02
  373. //
  374. // RTS Control Flow Values
  375. //
  376. #define RTS_CONTROL_DISABLE    0x00
  377. #define RTS_CONTROL_ENABLE     0x01
  378. #define RTS_CONTROL_HANDSHAKE  0x02
  379. #define RTS_CONTROL_TOGGLE     0x03
  380. typedef struct _DCB {
  381.     DWORD DCBlength;      /* sizeof(DCB)                     */
  382.     DWORD BaudRate;       /* Baudrate at which running       */
  383.     DWORD fBinary: 1;     /* Binary Mode (skip EOF check)    */
  384.     DWORD fParity: 1;     /* Enable parity checking          */
  385.     DWORD fOutxCtsFlow:1; /* CTS handshaking on output       */
  386.     DWORD fOutxDsrFlow:1; /* DSR handshaking on output       */
  387.     DWORD fDtrControl:2;  /* DTR Flow control                */
  388.     DWORD fDsrSensitivity:1; /* DSR Sensitivity              */
  389.     DWORD fTXContinueOnXoff: 1; /* Continue TX when Xoff sent */
  390.     DWORD fOutX: 1;       /* Enable output X-ON/X-OFF        */
  391.     DWORD fInX: 1;        /* Enable input X-ON/X-OFF         */
  392.     DWORD fErrorChar: 1;  /* Enable Err Replacement          */
  393.     DWORD fNull: 1;       /* Enable Null stripping           */
  394.     DWORD fRtsControl:2;  /* Rts Flow control                */
  395.     DWORD fAbortOnError:1; /* Abort all reads and writes on Error */
  396.     DWORD fDummy2:17;     /* Reserved                        */
  397.     WORD wReserved;       /* Not currently used              */
  398.     WORD XonLim;          /* Transmit X-ON threshold         */
  399.     WORD XoffLim;         /* Transmit X-OFF threshold        */
  400.     BYTE ByteSize;        /* Number of bits/byte, 4-8        */
  401.     BYTE Parity;          /* 0-4=None,Odd,Even,Mark,Space    */
  402.     BYTE StopBits;        /* 0,1,2 = 1, 1.5, 2               */
  403.     char XonChar;         /* Tx and Rx X-ON character        */
  404.     char XoffChar;        /* Tx and Rx X-OFF character       */
  405.     char ErrorChar;       /* Error replacement char          */
  406.     char EofChar;         /* End of Input character          */
  407.     char EvtChar;         /* Received Event character        */
  408.     WORD wReserved1;      /* Fill for now.                   */
  409. } DCB, *LPDCB;
  410. typedef struct _COMMTIMEOUTS {
  411.     DWORD ReadIntervalTimeout;          /* Maximum time between read chars. */
  412.     DWORD ReadTotalTimeoutMultiplier;   /* Multiplier of characters.        */
  413.     DWORD ReadTotalTimeoutConstant;     /* Constant in milliseconds.        */
  414.     DWORD WriteTotalTimeoutMultiplier;  /* Multiplier of characters.        */
  415.     DWORD WriteTotalTimeoutConstant;    /* Constant in milliseconds.        */
  416. } COMMTIMEOUTS,*LPCOMMTIMEOUTS;
  417. typedef struct _COMMCONFIG {
  418.     DWORD dwSize;               /* Size of the entire struct */
  419.     WORD wVersion;              /* version of the structure */
  420.     WORD wReserved;             /* alignment */
  421.     DCB dcb;                    /* device control block */
  422.     DWORD dwProviderSubType;    /* ordinal value for identifying
  423.                                    provider-defined data structure format*/
  424.     DWORD dwProviderOffset;     /* Specifies the offset of provider specific
  425.                                    data field in bytes from the start */
  426.     DWORD dwProviderSize;       /* size of the provider-specific data field */
  427.     WCHAR wcProviderData[1];    /* provider-specific data */
  428. } COMMCONFIG,*LPCOMMCONFIG;
  429. typedef struct _SYSTEM_INFO {
  430.     union {
  431.         DWORD dwOemId;          // Obsolete field...do not use
  432.         struct {
  433.             WORD wProcessorArchitecture;
  434.             WORD wReserved;
  435.         };
  436.     };
  437.     DWORD dwPageSize;
  438.     LPVOID lpMinimumApplicationAddress;
  439.     LPVOID lpMaximumApplicationAddress;
  440.     DWORD_PTR dwActiveProcessorMask;
  441.     DWORD dwNumberOfProcessors;
  442.     DWORD dwProcessorType;
  443.     DWORD dwAllocationGranularity;
  444.     WORD wProcessorLevel;
  445.     WORD wProcessorRevision;
  446. } SYSTEM_INFO, *LPSYSTEM_INFO;
  447. //
  448. //
  449. #define FreeModule(hLibModule) FreeLibrary((hLibModule))
  450. #define MakeProcInstance(lpProc,hInstance) (lpProc)
  451. #define FreeProcInstance(lpProc) (lpProc)
  452. /* Global Memory Flags */
  453. #define GMEM_FIXED          0x0000
  454. #define GMEM_MOVEABLE       0x0002
  455. #define GMEM_NOCOMPACT      0x0010
  456. #define GMEM_NODISCARD      0x0020
  457. #define GMEM_ZEROINIT       0x0040
  458. #define GMEM_MODIFY         0x0080
  459. #define GMEM_DISCARDABLE    0x0100
  460. #define GMEM_NOT_BANKED     0x1000
  461. #define GMEM_SHARE          0x2000
  462. #define GMEM_DDESHARE       0x2000
  463. #define GMEM_NOTIFY         0x4000
  464. #define GMEM_LOWER          GMEM_NOT_BANKED
  465. #define GMEM_VALID_FLAGS    0x7F72
  466. #define GMEM_INVALID_HANDLE 0x8000
  467. #define GHND                (GMEM_MOVEABLE | GMEM_ZEROINIT)
  468. #define GPTR                (GMEM_FIXED | GMEM_ZEROINIT)
  469. #define GlobalLRUNewest( h )    ((HANDLE)(h))
  470. #define GlobalLRUOldest( h )    ((HANDLE)(h))
  471. #define GlobalDiscard( h )      GlobalReAlloc( (h), 0, GMEM_MOVEABLE )
  472. /* Flags returned by GlobalFlags (in addition to GMEM_DISCARDABLE) */
  473. #define GMEM_DISCARDED      0x4000
  474. #define GMEM_LOCKCOUNT      0x00FF
  475. typedef struct _MEMORYSTATUS {
  476.     DWORD dwLength;
  477.     DWORD dwMemoryLoad;
  478.     SIZE_T dwTotalPhys;
  479.     SIZE_T dwAvailPhys;
  480.     SIZE_T dwTotalPageFile;
  481.     SIZE_T dwAvailPageFile;
  482.     SIZE_T dwTotalVirtual;
  483.     SIZE_T dwAvailVirtual;
  484. } MEMORYSTATUS, *LPMEMORYSTATUS;
  485. /* Local Memory Flags */
  486. #define LMEM_FIXED          0x0000
  487. #define LMEM_MOVEABLE       0x0002
  488. #define LMEM_NOCOMPACT      0x0010
  489. #define LMEM_NODISCARD      0x0020
  490. #define LMEM_ZEROINIT       0x0040
  491. #define LMEM_MODIFY         0x0080
  492. #define LMEM_DISCARDABLE    0x0F00
  493. #define LMEM_VALID_FLAGS    0x0F72
  494. #define LMEM_INVALID_HANDLE 0x8000
  495. #define LHND                (LMEM_MOVEABLE | LMEM_ZEROINIT)
  496. #define LPTR                (LMEM_FIXED | LMEM_ZEROINIT)
  497. #define NONZEROLHND         (LMEM_MOVEABLE)
  498. #define NONZEROLPTR         (LMEM_FIXED)
  499. #define LocalDiscard( h )   LocalReAlloc( (h), 0, LMEM_MOVEABLE )
  500. /* Flags returned by LocalFlags (in addition to LMEM_DISCARDABLE) */
  501. #define LMEM_DISCARDED      0x4000
  502. #define LMEM_LOCKCOUNT      0x00FF
  503. //
  504. // dwCreationFlag values
  505. //
  506. #define DEBUG_PROCESS                     0x00000001
  507. #define DEBUG_ONLY_THIS_PROCESS           0x00000002
  508. #define CREATE_SUSPENDED                  0x00000004
  509. #define DETACHED_PROCESS                  0x00000008
  510. #define CREATE_NEW_CONSOLE                0x00000010
  511. #define NORMAL_PRIORITY_CLASS             0x00000020
  512. #define IDLE_PRIORITY_CLASS               0x00000040
  513. #define HIGH_PRIORITY_CLASS               0x00000080
  514. #define REALTIME_PRIORITY_CLASS           0x00000100
  515. #define CREATE_NEW_PROCESS_GROUP          0x00000200
  516. #define CREATE_UNICODE_ENVIRONMENT        0x00000400
  517. #define CREATE_SEPARATE_WOW_VDM           0x00000800
  518. #define CREATE_SHARED_WOW_VDM             0x00001000
  519. #define CREATE_FORCEDOS                   0x00002000
  520. #define BELOW_NORMAL_PRIORITY_CLASS       0x00004000
  521. #define ABOVE_NORMAL_PRIORITY_CLASS       0x00008000
  522. #define STACK_SIZE_PARAM_IS_A_RESERVATION 0x00010000
  523. #define CREATE_BREAKAWAY_FROM_JOB         0x01000000
  524. #define CREATE_PRESERVE_CODE_AUTHZ_LEVEL  0x02000000
  525. #define CREATE_DEFAULT_ERROR_MODE         0x04000000
  526. #define CREATE_NO_WINDOW                  0x08000000
  527. #define PROFILE_USER                      0x10000000
  528. #define PROFILE_KERNEL                    0x20000000
  529. #define PROFILE_SERVER                    0x40000000
  530. #define CREATE_IGNORE_SYSTEM_DEFAULT      0x80000000
  531. #define THREAD_PRIORITY_LOWEST          THREAD_BASE_PRIORITY_MIN
  532. #define THREAD_PRIORITY_BELOW_NORMAL    (THREAD_PRIORITY_LOWEST+1)
  533. #define THREAD_PRIORITY_NORMAL          0
  534. #define THREAD_PRIORITY_HIGHEST         THREAD_BASE_PRIORITY_MAX
  535. #define THREAD_PRIORITY_ABOVE_NORMAL    (THREAD_PRIORITY_HIGHEST-1)
  536. #define THREAD_PRIORITY_ERROR_RETURN    (MAXLONG)
  537. #define THREAD_PRIORITY_TIME_CRITICAL   THREAD_BASE_PRIORITY_LOWRT
  538. #define THREAD_PRIORITY_IDLE            THREAD_BASE_PRIORITY_IDLE
  539. //
  540. // Debug APIs
  541. //
  542. #define EXCEPTION_DEBUG_EVENT       1
  543. #define CREATE_THREAD_DEBUG_EVENT   2
  544. #define CREATE_PROCESS_DEBUG_EVENT  3
  545. #define EXIT_THREAD_DEBUG_EVENT     4
  546. #define EXIT_PROCESS_DEBUG_EVENT    5
  547. #define LOAD_DLL_DEBUG_EVENT        6
  548. #define UNLOAD_DLL_DEBUG_EVENT      7
  549. #define OUTPUT_DEBUG_STRING_EVENT   8
  550. #define RIP_EVENT                   9
  551. typedef struct _EXCEPTION_DEBUG_INFO {
  552.     EXCEPTION_RECORD ExceptionRecord;
  553.     DWORD dwFirstChance;
  554. } EXCEPTION_DEBUG_INFO, *LPEXCEPTION_DEBUG_INFO;
  555. typedef struct _CREATE_THREAD_DEBUG_INFO {
  556.     HANDLE hThread;
  557.     LPVOID lpThreadLocalBase;
  558.     LPTHREAD_START_ROUTINE lpStartAddress;
  559. } CREATE_THREAD_DEBUG_INFO, *LPCREATE_THREAD_DEBUG_INFO;
  560. typedef struct _CREATE_PROCESS_DEBUG_INFO {
  561.     HANDLE hFile;
  562.     HANDLE hProcess;
  563.     HANDLE hThread;
  564.     LPVOID lpBaseOfImage;
  565.     DWORD dwDebugInfoFileOffset;
  566.     DWORD nDebugInfoSize;
  567.     LPVOID lpThreadLocalBase;
  568.     LPTHREAD_START_ROUTINE lpStartAddress;
  569.     LPVOID lpImageName;
  570.     WORD fUnicode;
  571. } CREATE_PROCESS_DEBUG_INFO, *LPCREATE_PROCESS_DEBUG_INFO;
  572. typedef struct _EXIT_THREAD_DEBUG_INFO {
  573.     DWORD dwExitCode;
  574. } EXIT_THREAD_DEBUG_INFO, *LPEXIT_THREAD_DEBUG_INFO;
  575. typedef struct _EXIT_PROCESS_DEBUG_INFO {
  576.     DWORD dwExitCode;
  577. } EXIT_PROCESS_DEBUG_INFO, *LPEXIT_PROCESS_DEBUG_INFO;
  578. typedef struct _LOAD_DLL_DEBUG_INFO {
  579.     HANDLE hFile;
  580.     LPVOID lpBaseOfDll;
  581.     DWORD dwDebugInfoFileOffset;
  582.     DWORD nDebugInfoSize;
  583.     LPVOID lpImageName;
  584.     WORD fUnicode;
  585. } LOAD_DLL_DEBUG_INFO, *LPLOAD_DLL_DEBUG_INFO;
  586. typedef struct _UNLOAD_DLL_DEBUG_INFO {
  587.     LPVOID lpBaseOfDll;
  588. } UNLOAD_DLL_DEBUG_INFO, *LPUNLOAD_DLL_DEBUG_INFO;
  589. typedef struct _OUTPUT_DEBUG_STRING_INFO {
  590.     LPSTR lpDebugStringData;
  591.     WORD fUnicode;
  592.     WORD nDebugStringLength;
  593. } OUTPUT_DEBUG_STRING_INFO, *LPOUTPUT_DEBUG_STRING_INFO;
  594. typedef struct _RIP_INFO {
  595.     DWORD dwError;
  596.     DWORD dwType;
  597. } RIP_INFO, *LPRIP_INFO;
  598. typedef struct _DEBUG_EVENT {
  599.     DWORD dwDebugEventCode;
  600.     DWORD dwProcessId;
  601.     DWORD dwThreadId;
  602.     union {
  603.         EXCEPTION_DEBUG_INFO Exception;
  604.         CREATE_THREAD_DEBUG_INFO CreateThread;
  605.         CREATE_PROCESS_DEBUG_INFO CreateProcessInfo;
  606.         EXIT_THREAD_DEBUG_INFO ExitThread;
  607.         EXIT_PROCESS_DEBUG_INFO ExitProcess;
  608.         LOAD_DLL_DEBUG_INFO LoadDll;
  609.         UNLOAD_DLL_DEBUG_INFO UnloadDll;
  610.         OUTPUT_DEBUG_STRING_INFO DebugString;
  611.         RIP_INFO RipInfo;
  612.     } u;
  613. } DEBUG_EVENT, *LPDEBUG_EVENT;
  614. #if !defined(MIDL_PASS)
  615. typedef PCONTEXT LPCONTEXT;
  616. typedef PEXCEPTION_RECORD LPEXCEPTION_RECORD;
  617. typedef PEXCEPTION_POINTERS LPEXCEPTION_POINTERS;
  618. #endif
  619. #define DRIVE_UNKNOWN     0
  620. #define DRIVE_NO_ROOT_DIR 1
  621. #define DRIVE_REMOVABLE   2
  622. #define DRIVE_FIXED       3
  623. #define DRIVE_REMOTE      4
  624. #define DRIVE_CDROM       5
  625. #define DRIVE_RAMDISK     6
  626. #ifndef _MAC
  627. #define GetFreeSpace(w)                 (0x100000L)
  628. #else
  629. WINBASEAPI DWORD WINAPI GetFreeSpace(UINT);
  630. #endif
  631. #define FILE_TYPE_UNKNOWN   0x0000
  632. #define FILE_TYPE_DISK      0x0001
  633. #define FILE_TYPE_CHAR      0x0002
  634. #define FILE_TYPE_PIPE      0x0003
  635. #define FILE_TYPE_REMOTE    0x8000
  636. #define STD_INPUT_HANDLE    ((DWORD)-10)
  637. #define STD_OUTPUT_HANDLE   ((DWORD)-11)
  638. #define STD_ERROR_HANDLE    ((DWORD)-12)
  639. #define NOPARITY            0
  640. #define ODDPARITY           1
  641. #define EVENPARITY          2
  642. #define MARKPARITY          3
  643. #define SPACEPARITY         4
  644. #define ONESTOPBIT          0
  645. #define ONE5STOPBITS        1
  646. #define TWOSTOPBITS         2
  647. #define IGNORE              0       // Ignore signal
  648. #define INFINITE            0xFFFFFFFF  // Infinite timeout
  649. //
  650. // Baud rates at which the communication device operates
  651. //
  652. #define CBR_110             110
  653. #define CBR_300             300
  654. #define CBR_600             600
  655. #define CBR_1200            1200
  656. #define CBR_2400            2400
  657. #define CBR_4800            4800
  658. #define CBR_9600            9600
  659. #define CBR_14400           14400
  660. #define CBR_19200           19200
  661. #define CBR_38400           38400
  662. #define CBR_56000           56000
  663. #define CBR_57600           57600
  664. #define CBR_115200          115200
  665. #define CBR_128000          128000
  666. #define CBR_256000          256000
  667. //
  668. // Error Flags
  669. //
  670. #define CE_RXOVER           0x0001  // Receive Queue overflow
  671. #define CE_OVERRUN          0x0002  // Receive Overrun Error
  672. #define CE_RXPARITY         0x0004  // Receive Parity Error
  673. #define CE_FRAME            0x0008  // Receive Framing error
  674. #define CE_BREAK            0x0010  // Break Detected
  675. #define CE_TXFULL           0x0100  // TX Queue is full
  676. #define CE_PTO              0x0200  // LPTx Timeout
  677. #define CE_IOE              0x0400  // LPTx I/O Error
  678. #define CE_DNS              0x0800  // LPTx Device not selected
  679. #define CE_OOP              0x1000  // LPTx Out-Of-Paper
  680. #define CE_MODE             0x8000  // Requested mode unsupported
  681. #define IE_BADID            (-1)    // Invalid or unsupported id
  682. #define IE_OPEN             (-2)    // Device Already Open
  683. #define IE_NOPEN            (-3)    // Device Not Open
  684. #define IE_MEMORY           (-4)    // Unable to allocate queues
  685. #define IE_DEFAULT          (-5)    // Error in default parameters
  686. #define IE_HARDWARE         (-10)   // Hardware Not Present
  687. #define IE_BYTESIZE         (-11)   // Illegal Byte Size
  688. #define IE_BAUDRATE         (-12)   // Unsupported BaudRate
  689. //
  690. // Events
  691. //
  692. #define EV_RXCHAR           0x0001  // Any Character received
  693. #define EV_RXFLAG           0x0002  // Received certain character
  694. #define EV_TXEMPTY          0x0004  // Transmitt Queue Empty
  695. #define EV_CTS              0x0008  // CTS changed state
  696. #define EV_DSR              0x0010  // DSR changed state
  697. #define EV_RLSD             0x0020  // RLSD changed state
  698. #define EV_BREAK            0x0040  // BREAK received
  699. #define EV_ERR              0x0080  // Line status error occurred
  700. #define EV_RING             0x0100  // Ring signal detected
  701. #define EV_PERR             0x0200  // Printer error occured
  702. #define EV_RX80FULL         0x0400  // Receive buffer is 80 percent full
  703. #define EV_EVENT1           0x0800  // Provider specific event 1
  704. #define EV_EVENT2           0x1000  // Provider specific event 2
  705. //
  706. // Escape Functions
  707. //
  708. #define SETXOFF             1       // Simulate XOFF received
  709. #define SETXON              2       // Simulate XON received
  710. #define SETRTS              3       // Set RTS high
  711. #define CLRRTS              4       // Set RTS low
  712. #define SETDTR              5       // Set DTR high
  713. #define CLRDTR              6       // Set DTR low
  714. #define RESETDEV            7       // Reset device if possible
  715. #define SETBREAK            8       // Set the device break line.
  716. #define CLRBREAK            9       // Clear the device break line.
  717. //
  718. // PURGE function flags.
  719. //
  720. #define PURGE_TXABORT       0x0001  // Kill the pending/current writes to the comm port.
  721. #define PURGE_RXABORT       0x0002  // Kill the pending/current reads to the comm port.
  722. #define PURGE_TXCLEAR       0x0004  // Kill the transmit queue if there.
  723. #define PURGE_RXCLEAR       0x0008  // Kill the typeahead buffer if there.
  724. #define LPTx                0x80    // Set if ID is for LPT device
  725. //
  726. // Modem Status Flags
  727. //
  728. #define MS_CTS_ON           ((DWORD)0x0010)
  729. #define MS_DSR_ON           ((DWORD)0x0020)
  730. #define MS_RING_ON          ((DWORD)0x0040)
  731. #define MS_RLSD_ON          ((DWORD)0x0080)
  732. //
  733. // WaitSoundState() Constants
  734. //
  735. #define S_QUEUEEMPTY        0
  736. #define S_THRESHOLD         1
  737. #define S_ALLTHRESHOLD      2
  738. //
  739. // Accent Modes
  740. //
  741. #define S_NORMAL      0
  742. #define S_LEGATO      1
  743. #define S_STACCATO    2
  744. //
  745. // SetSoundNoise() Sources
  746. //
  747. #define S_PERIOD512   0     // Freq = N/512 high pitch, less coarse hiss
  748. #define S_PERIOD1024  1     // Freq = N/1024
  749. #define S_PERIOD2048  2     // Freq = N/2048 low pitch, more coarse hiss
  750. #define S_PERIODVOICE 3     // Source is frequency from voice channel (3)
  751. #define S_WHITE512    4     // Freq = N/512 high pitch, less coarse hiss
  752. #define S_WHITE1024   5     // Freq = N/1024
  753. #define S_WHITE2048   6     // Freq = N/2048 low pitch, more coarse hiss
  754. #define S_WHITEVOICE  7     // Source is frequency from voice channel (3)
  755. #define S_SERDVNA     (-1)  // Device not available
  756. #define S_SEROFM      (-2)  // Out of memory
  757. #define S_SERMACT     (-3)  // Music active
  758. #define S_SERQFUL     (-4)  // Queue full
  759. #define S_SERBDNT     (-5)  // Invalid note
  760. #define S_SERDLN      (-6)  // Invalid note length
  761. #define S_SERDCC      (-7)  // Invalid note count
  762. #define S_SERDTP      (-8)  // Invalid tempo
  763. #define S_SERDVL      (-9)  // Invalid volume
  764. #define S_SERDMD      (-10) // Invalid mode
  765. #define S_SERDSH      (-11) // Invalid shape
  766. #define S_SERDPT      (-12) // Invalid pitch
  767. #define S_SERDFQ      (-13) // Invalid frequency
  768. #define S_SERDDR      (-14) // Invalid duration
  769. #define S_SERDSR      (-15) // Invalid source
  770. #define S_SERDST      (-16) // Invalid state
  771. #define NMPWAIT_WAIT_FOREVER            0xffffffff
  772. #define NMPWAIT_NOWAIT                  0x00000001
  773. #define NMPWAIT_USE_DEFAULT_WAIT        0x00000000
  774. #define FS_CASE_IS_PRESERVED            FILE_CASE_PRESERVED_NAMES
  775. #define FS_CASE_SENSITIVE               FILE_CASE_SENSITIVE_SEARCH
  776. #define FS_UNICODE_STORED_ON_DISK       FILE_UNICODE_ON_DISK
  777. #define FS_PERSISTENT_ACLS              FILE_PERSISTENT_ACLS
  778. #define FS_VOL_IS_COMPRESSED            FILE_VOLUME_IS_COMPRESSED
  779. #define FS_FILE_COMPRESSION             FILE_FILE_COMPRESSION
  780. #define FS_FILE_ENCRYPTION              FILE_SUPPORTS_ENCRYPTION
  781. #define FILE_MAP_COPY       SECTION_QUERY
  782. #define FILE_MAP_WRITE      SECTION_MAP_WRITE
  783. #define FILE_MAP_READ       SECTION_MAP_READ
  784. #define FILE_MAP_ALL_ACCESS SECTION_ALL_ACCESS
  785. #define OF_READ             0x00000000
  786. #define OF_WRITE            0x00000001
  787. #define OF_READWRITE        0x00000002
  788. #define OF_SHARE_COMPAT     0x00000000
  789. #define OF_SHARE_EXCLUSIVE  0x00000010
  790. #define OF_SHARE_DENY_WRITE 0x00000020
  791. #define OF_SHARE_DENY_READ  0x00000030
  792. #define OF_SHARE_DENY_NONE  0x00000040
  793. #define OF_PARSE            0x00000100
  794. #define OF_DELETE           0x00000200
  795. #define OF_VERIFY           0x00000400
  796. #define OF_CANCEL           0x00000800
  797. #define OF_CREATE           0x00001000
  798. #define OF_PROMPT           0x00002000
  799. #define OF_EXIST            0x00004000
  800. #define OF_REOPEN           0x00008000
  801. #define OFS_MAXPATHNAME 128
  802. typedef struct _OFSTRUCT {
  803.     BYTE cBytes;
  804.     BYTE fFixedDisk;
  805.     WORD nErrCode;
  806.     WORD Reserved1;
  807.     WORD Reserved2;
  808.     CHAR szPathName[OFS_MAXPATHNAME];
  809. } OFSTRUCT, *LPOFSTRUCT, *POFSTRUCT;
  810. //
  811. // The Risc compilers support intrinsic functions for interlocked
  812. // increment, decrement, and exchange.
  813. //
  814. #ifndef NOWINBASEINTERLOCK
  815. #ifndef _NTOS_
  816. #if defined(_M_IA64) && !defined(RC_INVOKED)
  817. #define InterlockedIncrement _InterlockedIncrement
  818. #define InterlockedDecrement _InterlockedDecrement
  819. #define InterlockedExchange _InterlockedExchange
  820. #define InterlockedExchangeAdd _InterlockedExchangeAdd
  821. #define InterlockedCompareExchange _InterlockedCompareExchange
  822. #define InterlockedExchangePointer _InterlockedExchangePointer
  823. #define InterlockedCompareExchangePointer _InterlockedCompareExchangePointer
  824. LONG
  825. __cdecl
  826. InterlockedIncrement(
  827.     IN OUT LONG volatile *lpAddend
  828.     );
  829. LONG
  830. __cdecl
  831. InterlockedDecrement(
  832.     IN OUT LONG volatile *lpAddend
  833.     );
  834. LONG
  835. __cdecl
  836. InterlockedExchange(
  837.     IN OUT LONG volatile *Target,
  838.     IN LONG Value
  839.     );
  840. LONG
  841. __cdecl
  842. InterlockedExchangeAdd(
  843.     IN OUT LONG volatile *Addend,
  844.     IN LONG Value
  845.     );
  846. LONG
  847. __cdecl
  848. InterlockedCompareExchange (
  849.     IN OUT LONG volatile *Destination,
  850.     IN LONG ExChange,
  851.     IN LONG Comperand
  852.     );
  853. PVOID
  854. __cdecl
  855. InterlockedExchangePointer(
  856.     IN OUT PVOID volatile *Target,
  857.     IN PVOID Value
  858.     );
  859. PVOID
  860. __cdecl
  861. InterlockedCompareExchangePointer (
  862.     IN OUT PVOID volatile *Destination,
  863.     IN PVOID ExChange,
  864.     IN PVOID Comperand
  865.     );
  866. #pragma intrinsic(_InterlockedIncrement)
  867. #pragma intrinsic(_InterlockedDecrement)
  868. #pragma intrinsic(_InterlockedExchange)
  869. #pragma intrinsic(_InterlockedExchangeAdd)
  870. #pragma intrinsic(_InterlockedCompareExchange)
  871. #pragma intrinsic(_InterlockedExchangePointer)
  872. #pragma intrinsic(_InterlockedCompareExchangePointer)
  873. #elif defined(_M_AMD64) && !defined(RC_INVOKED)
  874. #define InterlockedIncrement _InterlockedIncrement
  875. #define InterlockedDecrement _InterlockedDecrement
  876. #define InterlockedExchange _InterlockedExchange
  877. #define InterlockedExchangeAdd _InterlockedExchangeAdd
  878. #define InterlockedCompareExchange _InterlockedCompareExchange
  879. #define InterlockedExchangePointer _InterlockedExchangePointer
  880. #define InterlockedCompareExchangePointer _InterlockedCompareExchangePointer
  881. LONG
  882. InterlockedIncrement(
  883.     IN OUT LONG volatile *Addend
  884.     );
  885. LONG
  886. InterlockedDecrement(
  887.     IN OUT LONG volatile *Addend
  888.     );
  889. LONG
  890. InterlockedExchange(
  891.     IN OUT LONG volatile *Target,
  892.     IN LONG Value
  893.     );
  894. LONG
  895. InterlockedExchangeAdd(
  896.     IN OUT LONG volatile *Addend,
  897.     IN LONG Value
  898.     );
  899. LONG
  900. InterlockedCompareExchange (
  901.     IN OUT LONG volatile *Destination,
  902.     IN LONG ExChange,
  903.     IN LONG Comperand
  904.     );
  905. PVOID
  906. InterlockedCompareExchangePointer (
  907.     IN OUT PVOID volatile *Destination,
  908.     IN PVOID Exchange,
  909.     IN PVOID Comperand
  910.     );
  911. PVOID
  912. InterlockedExchangePointer(
  913.     IN OUT PVOID volatile *Target,
  914.     IN PVOID Value
  915.     );
  916. #pragma intrinsic(_InterlockedIncrement)
  917. #pragma intrinsic(_InterlockedDecrement)
  918. #pragma intrinsic(_InterlockedExchange)
  919. #pragma intrinsic(_InterlockedExchangeAdd)
  920. #pragma intrinsic(_InterlockedCompareExchange)
  921. #pragma intrinsic(_InterlockedExchangePointer)
  922. #pragma intrinsic(_InterlockedCompareExchangePointer)
  923. #else           // X86 interlocked definitions
  924. WINBASEAPI
  925. LONG
  926. WINAPI
  927. InterlockedIncrement(
  928.     IN OUT LONG volatile *lpAddend
  929.     );
  930. WINBASEAPI
  931. LONG
  932. WINAPI
  933. InterlockedDecrement(
  934.     IN OUT LONG volatile *lpAddend
  935.     );
  936. WINBASEAPI
  937. LONG
  938. WINAPI
  939. InterlockedExchange(
  940.     IN OUT LONG volatile *Target,
  941.     IN LONG Value
  942.     );
  943. #define InterlockedExchangePointer(Target, Value) 
  944.     (PVOID)InterlockedExchange((PLONG)(Target), (LONG)(Value))
  945. WINBASEAPI
  946. LONG
  947. WINAPI
  948. InterlockedExchangeAdd(
  949.     IN OUT LONG volatile *Addend,
  950.     IN LONG Value
  951.     );
  952. WINBASEAPI
  953. LONG
  954. WINAPI
  955. InterlockedCompareExchange (
  956.     IN OUT LONG volatile *Destination,
  957.     IN LONG Exchange,
  958.     IN LONG Comperand
  959.     );
  960. //
  961. // Use a function for C++ so X86 will generate the same errors as RISC.
  962. //
  963. #ifdef __cplusplus
  964. FORCEINLINE
  965. PVOID
  966. __cdecl
  967. __InlineInterlockedCompareExchangePointer (
  968.     IN OUT PVOID volatile *Destination,
  969.     IN PVOID ExChange,
  970.     IN PVOID Comperand
  971.     )
  972. {
  973.     return((PVOID)(LONG_PTR)InterlockedCompareExchange((LONG volatile *)Destination, (LONG)(LONG_PTR)ExChange, (LONG)(LONG_PTR)Comperand));
  974. }
  975. #define InterlockedCompareExchangePointer __InlineInterlockedCompareExchangePointer
  976. #else
  977. #define InterlockedCompareExchangePointer(Destination, ExChange, Comperand) 
  978.     (PVOID)(LONG_PTR)InterlockedCompareExchange((LONG volatile *)(Destination), (LONG)(LONG_PTR)(ExChange), (LONG)(LONG_PTR)(Comperand))
  979. #endif /* __cplusplus */
  980. #endif /* X86 | IA64 */
  981. #if defined(_SLIST_HEADER_) && !defined(_NTOSP_)
  982. WINBASEAPI
  983. VOID
  984. WINAPI
  985. InitializeSListHead (
  986.     IN PSLIST_HEADER ListHead
  987.     );
  988. WINBASEAPI
  989. PSINGLE_LIST_ENTRY
  990. WINAPI
  991. InterlockedPopEntrySList (
  992.     IN PSLIST_HEADER ListHead
  993.     );
  994. WINBASEAPI
  995. PSINGLE_LIST_ENTRY
  996. WINAPI
  997. InterlockedPushEntrySList (
  998.     IN PSLIST_HEADER ListHead,
  999.     IN PSINGLE_LIST_ENTRY ListEntry
  1000.     );
  1001. WINBASEAPI
  1002. PSINGLE_LIST_ENTRY
  1003. WINAPI
  1004. InterlockedFlushSList (
  1005.     IN PSLIST_HEADER ListHead
  1006.     );
  1007. WINBASEAPI
  1008. USHORT
  1009. WINAPI
  1010. QueryDepthSList (
  1011.     IN PSLIST_HEADER ListHead
  1012.     );
  1013. #endif /* _SLIST_HEADER_ */
  1014. #endif /* _NTOS_ */
  1015. #endif /* NOWINBASEINTERLOCK */
  1016. WINBASEAPI
  1017. BOOL
  1018. WINAPI
  1019. FreeResource(
  1020.         IN HGLOBAL hResData
  1021.         );
  1022. WINBASEAPI
  1023. LPVOID
  1024. WINAPI
  1025. LockResource(
  1026.         IN HGLOBAL hResData
  1027.         );
  1028. #define UnlockResource(hResData) ((hResData), 0)
  1029. #define MAXINTATOM 0xC000
  1030. #define MAKEINTATOM(i)  (LPTSTR)((ULONG_PTR)((WORD)(i)))
  1031. #define INVALID_ATOM ((ATOM)0)
  1032. #ifndef _MAC
  1033. int
  1034. WINAPI
  1035. #else
  1036. int
  1037. CALLBACK
  1038. #endif
  1039. WinMain(
  1040.     IN HINSTANCE hInstance,
  1041.     IN HINSTANCE hPrevInstance,
  1042.     IN LPSTR lpCmdLine,
  1043.     IN int nShowCmd
  1044.     );
  1045. WINBASEAPI
  1046. BOOL
  1047. WINAPI
  1048. FreeLibrary(
  1049.     IN OUT HMODULE hLibModule
  1050.     );
  1051. WINBASEAPI
  1052. DECLSPEC_NORETURN
  1053. VOID
  1054. WINAPI
  1055. FreeLibraryAndExitThread(
  1056.     IN HMODULE hLibModule,
  1057.     IN DWORD dwExitCode
  1058.     );
  1059. WINBASEAPI
  1060. BOOL
  1061. WINAPI
  1062. DisableThreadLibraryCalls(
  1063.     IN HMODULE hLibModule
  1064.     );
  1065. WINBASEAPI
  1066. FARPROC
  1067. WINAPI
  1068. GetProcAddress(
  1069.     IN HMODULE hModule,
  1070.     IN LPCSTR lpProcName
  1071.     );
  1072. WINBASEAPI
  1073. DWORD
  1074. WINAPI
  1075. GetVersion( VOID );
  1076. WINBASEAPI
  1077. HGLOBAL
  1078. WINAPI
  1079. GlobalAlloc(
  1080.     IN UINT uFlags,
  1081.     IN SIZE_T dwBytes
  1082.     );
  1083. WINBASEAPI
  1084. HGLOBAL
  1085. WINAPI
  1086. GlobalReAlloc(
  1087.     IN HGLOBAL hMem,
  1088.     IN SIZE_T dwBytes,
  1089.     IN UINT uFlags
  1090.     );
  1091. WINBASEAPI
  1092. SIZE_T
  1093. WINAPI
  1094. GlobalSize(
  1095.     IN HGLOBAL hMem
  1096.     );
  1097. WINBASEAPI
  1098. UINT
  1099. WINAPI
  1100. GlobalFlags(
  1101.     IN HGLOBAL hMem
  1102.     );
  1103. WINBASEAPI
  1104. LPVOID
  1105. WINAPI
  1106. GlobalLock(
  1107.     IN HGLOBAL hMem
  1108.     );
  1109. //!!!MWH My version  win31 = DWORD WINAPI GlobalHandle(UINT)
  1110. WINBASEAPI
  1111. HGLOBAL
  1112. WINAPI
  1113. GlobalHandle(
  1114.     IN LPCVOID pMem
  1115.     );
  1116. WINBASEAPI
  1117. BOOL
  1118. WINAPI
  1119. GlobalUnlock(
  1120.     IN HGLOBAL hMem
  1121.     );
  1122. WINBASEAPI
  1123. HGLOBAL
  1124. WINAPI
  1125. GlobalFree(
  1126.     IN HGLOBAL hMem
  1127.     );
  1128. WINBASEAPI
  1129. SIZE_T
  1130. WINAPI
  1131. GlobalCompact(
  1132.     IN DWORD dwMinFree
  1133.     );
  1134. WINBASEAPI
  1135. VOID
  1136. WINAPI
  1137. GlobalFix(
  1138.     IN HGLOBAL hMem
  1139.     );
  1140. WINBASEAPI
  1141. VOID
  1142. WINAPI
  1143. GlobalUnfix(
  1144.     IN HGLOBAL hMem
  1145.     );
  1146. WINBASEAPI
  1147. LPVOID
  1148. WINAPI
  1149. GlobalWire(
  1150.     IN HGLOBAL hMem
  1151.     );
  1152. WINBASEAPI
  1153. BOOL
  1154. WINAPI
  1155. GlobalUnWire(
  1156.     IN HGLOBAL hMem
  1157.     );
  1158. WINBASEAPI
  1159. VOID
  1160. WINAPI
  1161. GlobalMemoryStatus(
  1162.     IN OUT LPMEMORYSTATUS lpBuffer
  1163.     );
  1164. typedef struct _MEMORYSTATUSEX {
  1165.     DWORD dwLength;
  1166.     DWORD dwMemoryLoad;
  1167.     DWORDLONG ullTotalPhys;
  1168.     DWORDLONG ullAvailPhys;
  1169.     DWORDLONG ullTotalPageFile;
  1170.     DWORDLONG ullAvailPageFile;
  1171.     DWORDLONG ullTotalVirtual;
  1172.     DWORDLONG ullAvailVirtual;
  1173.     DWORDLONG ullAvailExtendedVirtual;
  1174. } MEMORYSTATUSEX, *LPMEMORYSTATUSEX;
  1175. WINBASEAPI
  1176. BOOL
  1177. WINAPI
  1178. GlobalMemoryStatusEx(
  1179.     IN OUT LPMEMORYSTATUSEX lpBuffer
  1180.     );
  1181. WINBASEAPI
  1182. HLOCAL
  1183. WINAPI
  1184. LocalAlloc(
  1185.     IN UINT uFlags,
  1186.     IN SIZE_T uBytes
  1187.     );
  1188. WINBASEAPI
  1189. HLOCAL
  1190. WINAPI
  1191. LocalReAlloc(
  1192.     IN HLOCAL hMem,
  1193.     IN SIZE_T uBytes,
  1194.     IN UINT uFlags
  1195.     );
  1196. WINBASEAPI
  1197. LPVOID
  1198. WINAPI
  1199. LocalLock(
  1200.     IN HLOCAL hMem
  1201.     );
  1202. WINBASEAPI
  1203. HLOCAL
  1204. WINAPI
  1205. LocalHandle(
  1206.     IN LPCVOID pMem
  1207.     );
  1208. WINBASEAPI
  1209. BOOL
  1210. WINAPI
  1211. LocalUnlock(
  1212.     IN HLOCAL hMem
  1213.     );
  1214. WINBASEAPI
  1215. SIZE_T
  1216. WINAPI
  1217. LocalSize(
  1218.     IN HLOCAL hMem
  1219.     );
  1220. WINBASEAPI
  1221. UINT
  1222. WINAPI
  1223. LocalFlags(
  1224.     IN HLOCAL hMem
  1225.     );
  1226. WINBASEAPI
  1227. HLOCAL
  1228. WINAPI
  1229. LocalFree(
  1230.     IN HLOCAL hMem
  1231.     );
  1232. WINBASEAPI
  1233. SIZE_T
  1234. WINAPI
  1235. LocalShrink(
  1236.     IN HLOCAL hMem,
  1237.     IN UINT cbNewSize
  1238.     );
  1239. WINBASEAPI
  1240. SIZE_T
  1241. WINAPI
  1242. LocalCompact(
  1243.     IN UINT uMinFree
  1244.     );
  1245. WINBASEAPI
  1246. BOOL
  1247. WINAPI
  1248. FlushInstructionCache(
  1249.     IN HANDLE hProcess,
  1250.     IN LPCVOID lpBaseAddress,
  1251.     IN SIZE_T dwSize
  1252.     );
  1253. WINBASEAPI
  1254. LPVOID
  1255. WINAPI
  1256. VirtualAlloc(
  1257.     IN LPVOID lpAddress,
  1258.     IN SIZE_T dwSize,
  1259.     IN DWORD flAllocationType,
  1260.     IN DWORD flProtect
  1261.     );
  1262. WINBASEAPI
  1263. BOOL
  1264. WINAPI
  1265. VirtualFree(
  1266.     IN LPVOID lpAddress,
  1267.     IN SIZE_T dwSize,
  1268.     IN DWORD dwFreeType
  1269.     );
  1270. WINBASEAPI
  1271. BOOL
  1272. WINAPI
  1273. VirtualProtect(
  1274.     IN  LPVOID lpAddress,
  1275.     IN  SIZE_T dwSize,
  1276.     IN  DWORD flNewProtect,
  1277.     OUT PDWORD lpflOldProtect
  1278.     );
  1279. WINBASEAPI
  1280. SIZE_T
  1281. WINAPI
  1282. VirtualQuery(
  1283.     IN LPCVOID lpAddress,
  1284.     OUT PMEMORY_BASIC_INFORMATION lpBuffer,
  1285.     IN SIZE_T dwLength
  1286.     );
  1287. WINBASEAPI
  1288. LPVOID
  1289. WINAPI
  1290. VirtualAllocEx(
  1291.     IN HANDLE hProcess,
  1292.     IN LPVOID lpAddress,
  1293.     IN SIZE_T dwSize,
  1294.     IN DWORD flAllocationType,
  1295.     IN DWORD flProtect
  1296.     );
  1297. WINBASEAPI
  1298. UINT
  1299. WINAPI
  1300. GetWriteWatch(
  1301.     IN DWORD  dwFlags,
  1302.     IN PVOID  lpBaseAddress,
  1303.     IN SIZE_T dwRegionSize,
  1304.     IN OUT PVOID *lpAddresses,
  1305.     IN OUT PULONG_PTR lpdwCount,
  1306.     OUT PULONG lpdwGranularity
  1307.     );
  1308. WINBASEAPI
  1309. UINT
  1310. WINAPI
  1311. ResetWriteWatch(
  1312.     IN LPVOID lpBaseAddress,
  1313.     IN SIZE_T dwRegionSize
  1314.     );
  1315. WINBASEAPI
  1316. BOOL
  1317. WINAPI
  1318. VirtualFreeEx(
  1319.     IN HANDLE hProcess,
  1320.     IN LPVOID lpAddress,
  1321.     IN SIZE_T dwSize,
  1322.     IN DWORD dwFreeType
  1323.     );
  1324. WINBASEAPI
  1325. BOOL
  1326. WINAPI
  1327. VirtualProtectEx(
  1328.     IN  HANDLE hProcess,
  1329.     IN  LPVOID lpAddress,
  1330.     IN  SIZE_T dwSize,
  1331.     IN  DWORD flNewProtect,
  1332.     OUT PDWORD lpflOldProtect
  1333.     );
  1334. WINBASEAPI
  1335. SIZE_T
  1336. WINAPI
  1337. VirtualQueryEx(
  1338.     IN HANDLE hProcess,
  1339.     IN LPCVOID lpAddress,
  1340.     OUT PMEMORY_BASIC_INFORMATION lpBuffer,
  1341.     IN SIZE_T dwLength
  1342.     );
  1343. WINBASEAPI
  1344. HANDLE
  1345. WINAPI
  1346. HeapCreate(
  1347.     IN DWORD flOptions,
  1348.     IN SIZE_T dwInitialSize,
  1349.     IN SIZE_T dwMaximumSize
  1350.     );
  1351. WINBASEAPI
  1352. BOOL
  1353. WINAPI
  1354. HeapDestroy(
  1355.     IN OUT HANDLE hHeap
  1356.     );
  1357. WINBASEAPI
  1358. LPVOID
  1359. WINAPI
  1360. HeapAlloc(
  1361.     IN HANDLE hHeap,
  1362.     IN DWORD dwFlags,
  1363.     IN SIZE_T dwBytes
  1364.     );
  1365. WINBASEAPI
  1366. LPVOID
  1367. WINAPI
  1368. HeapReAlloc(
  1369.     IN HANDLE hHeap,
  1370.     IN DWORD dwFlags,
  1371.     IN LPVOID lpMem,
  1372.     IN SIZE_T dwBytes
  1373.     );
  1374. WINBASEAPI
  1375. BOOL
  1376. WINAPI
  1377. HeapFree(
  1378.     IN HANDLE hHeap,
  1379.     IN DWORD dwFlags,
  1380.     IN LPVOID lpMem
  1381.     );
  1382. WINBASEAPI
  1383. SIZE_T
  1384. WINAPI
  1385. HeapSize(
  1386.     IN HANDLE hHeap,
  1387.     IN DWORD dwFlags,
  1388.     IN LPCVOID lpMem
  1389.     );
  1390. WINBASEAPI
  1391. BOOL
  1392. WINAPI
  1393. HeapValidate(
  1394.     IN HANDLE hHeap,
  1395.     IN DWORD dwFlags,
  1396.     IN LPCVOID lpMem
  1397.     );
  1398. WINBASEAPI
  1399. SIZE_T
  1400. WINAPI
  1401. HeapCompact(
  1402.     IN HANDLE hHeap,
  1403.     IN DWORD dwFlags
  1404.     );
  1405. WINBASEAPI
  1406. HANDLE
  1407. WINAPI
  1408. GetProcessHeap( VOID );
  1409. WINBASEAPI
  1410. DWORD
  1411. WINAPI
  1412. GetProcessHeaps(
  1413.     IN DWORD NumberOfHeaps,
  1414.     OUT PHANDLE ProcessHeaps
  1415.     );
  1416. typedef struct _PROCESS_HEAP_ENTRY {
  1417.     PVOID lpData;
  1418.     DWORD cbData;
  1419.     BYTE cbOverhead;
  1420.     BYTE iRegionIndex;
  1421.     WORD wFlags;
  1422.     union {
  1423.         struct {
  1424.             HANDLE hMem;
  1425.             DWORD dwReserved[ 3 ];
  1426.         } Block;
  1427.         struct {
  1428.             DWORD dwCommittedSize;
  1429.             DWORD dwUnCommittedSize;
  1430.             LPVOID lpFirstBlock;
  1431.             LPVOID lpLastBlock;
  1432.         } Region;
  1433.     };
  1434. } PROCESS_HEAP_ENTRY, *LPPROCESS_HEAP_ENTRY, *PPROCESS_HEAP_ENTRY;
  1435. #define PROCESS_HEAP_REGION             0x0001
  1436. #define PROCESS_HEAP_UNCOMMITTED_RANGE  0x0002
  1437. #define PROCESS_HEAP_ENTRY_BUSY         0x0004
  1438. #define PROCESS_HEAP_ENTRY_MOVEABLE     0x0010
  1439. #define PROCESS_HEAP_ENTRY_DDESHARE     0x0020
  1440. WINBASEAPI
  1441. BOOL
  1442. WINAPI
  1443. HeapLock(
  1444.     IN HANDLE hHeap
  1445.     );
  1446. WINBASEAPI
  1447. BOOL
  1448. WINAPI
  1449. HeapUnlock(
  1450.     IN HANDLE hHeap
  1451.     );
  1452. WINBASEAPI
  1453. BOOL
  1454. WINAPI
  1455. HeapWalk(
  1456.     IN HANDLE hHeap,
  1457.     IN OUT LPPROCESS_HEAP_ENTRY lpEntry
  1458.     );
  1459. WINBASEAPI
  1460. BOOL
  1461. WINAPI
  1462. HeapSetInformation (
  1463.     IN PVOID HeapHandle, 
  1464.     IN HEAP_INFORMATION_CLASS HeapInformationClass,
  1465.     IN PVOID HeapInformation OPTIONAL,
  1466.     IN SIZE_T HeapInformationLength OPTIONAL
  1467.     );
  1468. WINBASEAPI
  1469. BOOL
  1470. WINAPI
  1471. HeapQueryInformation (
  1472.     IN PVOID HeapHandle, 
  1473.     IN HEAP_INFORMATION_CLASS HeapInformationClass,
  1474.     OUT PVOID HeapInformation OPTIONAL,
  1475.     IN SIZE_T HeapInformationLength OPTIONAL,
  1476.     OUT PSIZE_T ReturnLength OPTIONAL
  1477.     );
  1478. // GetBinaryType return values.
  1479. #define SCS_32BIT_BINARY    0
  1480. #define SCS_DOS_BINARY      1
  1481. #define SCS_WOW_BINARY      2
  1482. #define SCS_PIF_BINARY      3
  1483. #define SCS_POSIX_BINARY    4
  1484. #define SCS_OS216_BINARY    5
  1485. #define SCS_64BIT_BINARY    6
  1486. #if defined(_WIN64)
  1487. # define SCS_THIS_PLATFORM_BINARY SCS_64BIT_BINARY
  1488. #else
  1489. # define SCS_THIS_PLATFORM_BINARY SCS_32BIT_BINARY
  1490. #endif
  1491. WINBASEAPI
  1492. BOOL
  1493. WINAPI
  1494. GetBinaryTypeA(
  1495.     IN LPCSTR lpApplicationName,
  1496.     OUT LPDWORD lpBinaryType
  1497.     );
  1498. WINBASEAPI
  1499. BOOL
  1500. WINAPI
  1501. GetBinaryTypeW(
  1502.     IN LPCWSTR lpApplicationName,
  1503.     OUT LPDWORD lpBinaryType
  1504.     );
  1505. #ifdef UNICODE
  1506. #define GetBinaryType  GetBinaryTypeW
  1507. #else
  1508. #define GetBinaryType  GetBinaryTypeA
  1509. #endif // !UNICODE
  1510. WINBASEAPI
  1511. DWORD
  1512. WINAPI
  1513. GetShortPathNameA(
  1514.     IN LPCSTR lpszLongPath,
  1515.     OUT LPSTR  lpszShortPath,
  1516.     IN DWORD    cchBuffer
  1517.     );
  1518. WINBASEAPI
  1519. DWORD
  1520. WINAPI
  1521. GetShortPathNameW(
  1522.     IN LPCWSTR lpszLongPath,
  1523.     OUT LPWSTR  lpszShortPath,
  1524.     IN DWORD    cchBuffer
  1525.     );
  1526. #ifdef UNICODE
  1527. #define GetShortPathName  GetShortPathNameW
  1528. #else
  1529. #define GetShortPathName  GetShortPathNameA
  1530. #endif // !UNICODE
  1531. WINBASEAPI
  1532. DWORD
  1533. WINAPI
  1534. GetLongPathNameA(
  1535.     IN LPCSTR lpszShortPath,
  1536.     OUT LPSTR  lpszLongPath,
  1537.     IN DWORD    cchBuffer
  1538.     );
  1539. WINBASEAPI
  1540. DWORD
  1541. WINAPI
  1542. GetLongPathNameW(
  1543.     IN LPCWSTR lpszShortPath,
  1544.     OUT LPWSTR  lpszLongPath,
  1545.     IN DWORD    cchBuffer
  1546.     );
  1547. #ifdef UNICODE
  1548. #define GetLongPathName  GetLongPathNameW
  1549. #else
  1550. #define GetLongPathName  GetLongPathNameA
  1551. #endif // !UNICODE
  1552. WINBASEAPI
  1553. BOOL
  1554. WINAPI
  1555. GetProcessAffinityMask(
  1556.     IN HANDLE hProcess,
  1557.     OUT PDWORD_PTR lpProcessAffinityMask,
  1558.     OUT PDWORD_PTR lpSystemAffinityMask
  1559.     );
  1560. WINBASEAPI
  1561. BOOL
  1562. WINAPI
  1563. SetProcessAffinityMask(
  1564.     IN HANDLE hProcess,
  1565.     IN DWORD_PTR dwProcessAffinityMask
  1566.     );
  1567. WINBASEAPI
  1568. BOOL
  1569. WINAPI
  1570. GetProcessTimes(
  1571.     IN HANDLE hProcess,
  1572.     OUT LPFILETIME lpCreationTime,
  1573.     OUT LPFILETIME lpExitTime,
  1574.     OUT LPFILETIME lpKernelTime,
  1575.     OUT LPFILETIME lpUserTime
  1576.     );
  1577. WINBASEAPI
  1578. BOOL
  1579. WINAPI
  1580. GetProcessIoCounters(
  1581.     IN HANDLE hProcess,
  1582.     OUT PIO_COUNTERS lpIoCounters
  1583.     );
  1584. WINBASEAPI
  1585. BOOL
  1586. WINAPI
  1587. GetProcessWorkingSetSize(
  1588.     IN HANDLE hProcess,
  1589.     OUT PSIZE_T lpMinimumWorkingSetSize,
  1590.     OUT PSIZE_T lpMaximumWorkingSetSize
  1591.     );
  1592. WINBASEAPI
  1593. BOOL
  1594. WINAPI
  1595. SetProcessWorkingSetSize(
  1596.     IN HANDLE hProcess,
  1597.     IN SIZE_T dwMinimumWorkingSetSize,
  1598.     IN SIZE_T dwMaximumWorkingSetSize
  1599.     );
  1600. WINBASEAPI
  1601. HANDLE
  1602. WINAPI
  1603. OpenProcess(
  1604.     IN DWORD dwDesiredAccess,
  1605.     IN BOOL bInheritHandle,
  1606.     IN DWORD dwProcessId
  1607.     );
  1608. WINBASEAPI
  1609. HANDLE
  1610. WINAPI
  1611. GetCurrentProcess(
  1612.     VOID
  1613.     );
  1614. WINBASEAPI
  1615. DWORD
  1616. WINAPI
  1617. GetCurrentProcessId(
  1618.     VOID
  1619.     );
  1620. WINBASEAPI
  1621. DECLSPEC_NORETURN
  1622. VOID
  1623. WINAPI
  1624. ExitProcess(
  1625.     IN UINT uExitCode
  1626.     );
  1627. WINBASEAPI
  1628. BOOL
  1629. WINAPI
  1630. TerminateProcess(
  1631.     IN HANDLE hProcess,
  1632.     IN UINT uExitCode
  1633.     );
  1634. WINBASEAPI
  1635. BOOL
  1636. WINAPI
  1637. GetExitCodeProcess(
  1638.     IN HANDLE hProcess,
  1639.     OUT LPDWORD lpExitCode
  1640.     );
  1641. WINBASEAPI
  1642. VOID
  1643. WINAPI
  1644. FatalExit(
  1645.     IN int ExitCode
  1646.     );
  1647. WINBASEAPI
  1648. LPSTR
  1649. WINAPI
  1650. GetEnvironmentStrings(
  1651.     VOID
  1652.     );
  1653. WINBASEAPI
  1654. LPWSTR
  1655. WINAPI
  1656. GetEnvironmentStringsW(
  1657.     VOID
  1658.     );
  1659. #ifdef UNICODE
  1660. #define GetEnvironmentStrings  GetEnvironmentStringsW
  1661. #else
  1662. #define GetEnvironmentStringsA  GetEnvironmentStrings
  1663. #endif // !UNICODE
  1664. WINBASEAPI
  1665. BOOL
  1666. WINAPI
  1667. FreeEnvironmentStringsA(
  1668.     IN LPSTR
  1669.     );
  1670. WINBASEAPI
  1671. BOOL
  1672. WINAPI
  1673. FreeEnvironmentStringsW(
  1674.     IN LPWSTR
  1675.     );
  1676. #ifdef UNICODE
  1677. #define FreeEnvironmentStrings  FreeEnvironmentStringsW
  1678. #else
  1679. #define FreeEnvironmentStrings  FreeEnvironmentStringsA
  1680. #endif // !UNICODE
  1681. WINBASEAPI
  1682. VOID
  1683. WINAPI
  1684. RaiseException(
  1685.     IN DWORD dwExceptionCode,
  1686.     IN DWORD dwExceptionFlags,
  1687.     IN DWORD nNumberOfArguments,
  1688.     IN CONST ULONG_PTR *lpArguments
  1689.     );
  1690. WINBASEAPI
  1691. LONG
  1692. WINAPI
  1693. UnhandledExceptionFilter(
  1694.     IN struct _EXCEPTION_POINTERS *ExceptionInfo
  1695.     );
  1696. typedef LONG (WINAPI *PTOP_LEVEL_EXCEPTION_FILTER)(
  1697.     struct _EXCEPTION_POINTERS *ExceptionInfo
  1698.     );
  1699. typedef PTOP_LEVEL_EXCEPTION_FILTER LPTOP_LEVEL_EXCEPTION_FILTER;
  1700. WINBASEAPI
  1701. LPTOP_LEVEL_EXCEPTION_FILTER
  1702. WINAPI
  1703. SetUnhandledExceptionFilter(
  1704.     IN LPTOP_LEVEL_EXCEPTION_FILTER lpTopLevelExceptionFilter
  1705.     );
  1706. #if(_WIN32_WINNT >= 0x0400)
  1707. WINBASEAPI
  1708. LPVOID
  1709. WINAPI
  1710. CreateFiber(
  1711.     IN SIZE_T dwStackSize,
  1712.     IN LPFIBER_START_ROUTINE lpStartAddress,
  1713.     IN LPVOID lpParameter
  1714.     );
  1715. WINBASEAPI
  1716. LPVOID
  1717. WINAPI
  1718. CreateFiberEx(
  1719.     SIZE_T dwStackCommitSize,
  1720.     SIZE_T dwStackReserveSize,
  1721.     DWORD dwFlags,
  1722.     LPFIBER_START_ROUTINE lpStartAddress,
  1723.     LPVOID lpParameter
  1724.     );
  1725. WINBASEAPI
  1726. VOID
  1727. WINAPI
  1728. DeleteFiber(
  1729.     IN LPVOID lpFiber
  1730.     );
  1731. WINBASEAPI
  1732. LPVOID
  1733. WINAPI
  1734. ConvertThreadToFiber(
  1735.     IN LPVOID lpParameter
  1736.     );
  1737. WINBASEAPI
  1738. BOOL
  1739. WINAPI
  1740. ConvertFiberToThread(
  1741.     VOID
  1742.     );
  1743. WINBASEAPI
  1744. VOID
  1745. WINAPI
  1746. SwitchToFiber(
  1747.     IN LPVOID lpFiber
  1748.     );
  1749. WINBASEAPI
  1750. BOOL
  1751. WINAPI
  1752. SwitchToThread(
  1753.     VOID
  1754.     );
  1755. #endif /* _WIN32_WINNT >= 0x0400 */
  1756. WINBASEAPI
  1757. HANDLE
  1758. WINAPI
  1759. CreateThread(
  1760.     IN LPSECURITY_ATTRIBUTES lpThreadAttributes,
  1761.     IN SIZE_T dwStackSize,
  1762.     IN LPTHREAD_START_ROUTINE lpStartAddress,
  1763.     IN LPVOID lpParameter,
  1764.     IN DWORD dwCreationFlags,
  1765.     OUT LPDWORD lpThreadId
  1766.     );
  1767. WINBASEAPI
  1768. HANDLE
  1769. WINAPI
  1770. CreateRemoteThread(
  1771.     IN HANDLE hProcess,
  1772.     IN LPSECURITY_ATTRIBUTES lpThreadAttributes,
  1773.     IN SIZE_T dwStackSize,
  1774.     IN LPTHREAD_START_ROUTINE lpStartAddress,
  1775.     IN LPVOID lpParameter,
  1776.     IN DWORD dwCreationFlags,
  1777.     OUT LPDWORD lpThreadId
  1778.     );
  1779. WINBASEAPI
  1780. HANDLE
  1781. WINAPI
  1782. GetCurrentThread(
  1783.     VOID
  1784.     );
  1785. WINBASEAPI
  1786. DWORD
  1787. WINAPI
  1788. GetCurrentThreadId(
  1789.     VOID
  1790.     );
  1791. WINBASEAPI
  1792. DWORD_PTR
  1793. WINAPI
  1794. SetThreadAffinityMask(
  1795.     IN HANDLE hThread,
  1796.     IN DWORD_PTR dwThreadAffinityMask
  1797.     );
  1798. #if(_WIN32_WINNT >= 0x0400)
  1799. WINBASEAPI
  1800. DWORD
  1801. WINAPI
  1802. SetThreadIdealProcessor(
  1803.     IN HANDLE hThread,
  1804.     IN DWORD dwIdealProcessor
  1805.     );
  1806. #endif /* _WIN32_WINNT >= 0x0400 */
  1807. WINBASEAPI
  1808. BOOL
  1809. WINAPI
  1810. SetProcessPriorityBoost(
  1811.     IN HANDLE hProcess,
  1812.     IN BOOL bDisablePriorityBoost
  1813.     );
  1814. WINBASEAPI
  1815. BOOL
  1816. WINAPI
  1817. GetProcessPriorityBoost(
  1818.     IN HANDLE hProcess,
  1819.     OUT PBOOL pDisablePriorityBoost
  1820.     );
  1821. WINBASEAPI
  1822. BOOL
  1823. WINAPI
  1824. RequestWakeupLatency(
  1825.     IN LATENCY_TIME latency
  1826.     );
  1827. WINBASEAPI
  1828. BOOL
  1829. WINAPI
  1830. IsSystemResumeAutomatic(
  1831.     VOID
  1832.     );
  1833. WINBASEAPI
  1834. HANDLE
  1835. WINAPI
  1836. OpenThread(
  1837.     DWORD dwDesiredAccess,
  1838.     BOOL bInheritHandle,
  1839.     DWORD dwThreadId
  1840.     );
  1841. WINBASEAPI
  1842. BOOL
  1843. WINAPI
  1844. SetThreadPriority(
  1845.     IN HANDLE hThread,
  1846.     IN int nPriority
  1847.     );
  1848. WINBASEAPI
  1849. BOOL
  1850. WINAPI
  1851. SetThreadPriorityBoost(
  1852.     IN HANDLE hThread,
  1853.     IN BOOL bDisablePriorityBoost
  1854.     );
  1855. WINBASEAPI
  1856. BOOL
  1857. WINAPI
  1858. GetThreadPriorityBoost(
  1859.     IN HANDLE hThread,
  1860.     OUT PBOOL pDisablePriorityBoost
  1861.     );
  1862. WINBASEAPI
  1863. int
  1864. WINAPI
  1865. GetThreadPriority(
  1866.     IN HANDLE hThread
  1867.     );
  1868. WINBASEAPI
  1869. BOOL
  1870. WINAPI
  1871. GetThreadTimes(
  1872.     IN HANDLE hThread,
  1873.     OUT LPFILETIME lpCreationTime,
  1874.     OUT LPFILETIME lpExitTime,
  1875.     OUT LPFILETIME lpKernelTime,
  1876.     OUT LPFILETIME lpUserTime
  1877.     );
  1878. WINBASEAPI
  1879. DECLSPEC_NORETURN
  1880. VOID
  1881. WINAPI
  1882. ExitThread(
  1883.     IN DWORD dwExitCode
  1884.     );
  1885. WINBASEAPI
  1886. BOOL
  1887. WINAPI
  1888. TerminateThread(
  1889.     IN OUT HANDLE hThread,
  1890.     IN DWORD dwExitCode
  1891.     );
  1892. WINBASEAPI
  1893. BOOL
  1894. WINAPI
  1895. GetExitCodeThread(
  1896.     IN HANDLE hThread,
  1897.     OUT LPDWORD lpExitCode
  1898.     );
  1899. WINBASEAPI
  1900. BOOL
  1901. WINAPI
  1902. GetThreadSelectorEntry(
  1903.     IN HANDLE hThread,
  1904.     IN DWORD dwSelector,
  1905.     OUT LPLDT_ENTRY lpSelectorEntry
  1906.     );
  1907. WINBASEAPI
  1908. EXECUTION_STATE
  1909. WINAPI
  1910. SetThreadExecutionState(
  1911.     IN EXECUTION_STATE esFlags
  1912.     );
  1913. WINBASEAPI
  1914. DWORD
  1915. WINAPI
  1916. GetLastError(
  1917.     VOID
  1918.     );
  1919. WINBASEAPI
  1920. VOID
  1921. WINAPI
  1922. SetLastError(
  1923.     IN DWORD dwErrCode
  1924.     );
  1925. #if !defined(RC_INVOKED) // RC warns because "WINBASE_DECLARE_RESTORE_LAST_ERROR" is a bit long.
  1926. //#if _WIN32_WINNT >= 0x0501 || defined(WINBASE_DECLARE_RESTORE_LAST_ERROR)
  1927. #if defined(WINBASE_DECLARE_RESTORE_LAST_ERROR)
  1928. WINBASEAPI
  1929. VOID
  1930. WINAPI
  1931. RestoreLastError(
  1932.     IN DWORD dwErrCode
  1933.     );
  1934. typedef VOID (WINAPI* PRESTORE_LAST_ERROR)(DWORD);
  1935. #define RESTORE_LAST_ERROR_NAME_A      "RestoreLastError"
  1936. #define RESTORE_LAST_ERROR_NAME_W     L"RestoreLastError"
  1937. #define RESTORE_LAST_ERROR_NAME   TEXT("RestoreLastError")
  1938. #endif
  1939. #endif
  1940. #define HasOverlappedIoCompleted(lpOverlapped) ((lpOverlapped)->Internal != STATUS_PENDING)
  1941. WINBASEAPI
  1942. BOOL
  1943. WINAPI
  1944. GetOverlappedResult(
  1945.     IN HANDLE hFile,
  1946.     IN LPOVERLAPPED lpOverlapped,
  1947.     OUT LPDWORD lpNumberOfBytesTransferred,
  1948.     IN BOOL bWait
  1949.     );
  1950. WINBASEAPI
  1951. HANDLE
  1952. WINAPI
  1953. CreateIoCompletionPort(
  1954.     IN HANDLE FileHandle,
  1955.     IN HANDLE ExistingCompletionPort,
  1956.     IN ULONG_PTR CompletionKey,
  1957.     IN DWORD NumberOfConcurrentThreads
  1958.     );
  1959. WINBASEAPI
  1960. BOOL
  1961. WINAPI
  1962. GetQueuedCompletionStatus(
  1963.     IN  HANDLE CompletionPort,
  1964.     OUT LPDWORD lpNumberOfBytesTransferred,
  1965.     OUT PULONG_PTR lpCompletionKey,
  1966.     OUT LPOVERLAPPED *lpOverlapped,
  1967.     IN  DWORD dwMilliseconds
  1968.     );
  1969. WINBASEAPI
  1970. BOOL
  1971. WINAPI
  1972. PostQueuedCompletionStatus(
  1973.     IN HANDLE CompletionPort,
  1974.     IN DWORD dwNumberOfBytesTransferred,
  1975.     IN ULONG_PTR dwCompletionKey,
  1976.     IN LPOVERLAPPED lpOverlapped
  1977.     );
  1978. #define SEM_FAILCRITICALERRORS      0x0001
  1979. #define SEM_NOGPFAULTERRORBOX       0x0002
  1980. #define SEM_NOALIGNMENTFAULTEXCEPT  0x0004
  1981. #define SEM_NOOPENFILEERRORBOX      0x8000
  1982. WINBASEAPI
  1983. UINT
  1984. WINAPI
  1985. SetErrorMode(
  1986.     IN UINT uMode
  1987.     );
  1988. WINBASEAPI
  1989. BOOL
  1990. WINAPI
  1991. ReadProcessMemory(
  1992.     IN HANDLE hProcess,
  1993.     IN LPCVOID lpBaseAddress,
  1994.     OUT LPVOID lpBuffer,
  1995.     IN SIZE_T nSize,
  1996.     OUT SIZE_T * lpNumberOfBytesRead
  1997.     );
  1998. WINBASEAPI
  1999. BOOL
  2000. WINAPI
  2001. WriteProcessMemory(
  2002.     IN HANDLE hProcess,
  2003.     IN LPVOID lpBaseAddress,
  2004.     IN LPCVOID lpBuffer,
  2005.     IN SIZE_T nSize,
  2006.     OUT SIZE_T * lpNumberOfBytesWritten
  2007.     );
  2008. #if !defined(MIDL_PASS)
  2009. WINBASEAPI
  2010. BOOL
  2011. WINAPI
  2012. GetThreadContext(
  2013.     IN HANDLE hThread,
  2014.     IN OUT LPCONTEXT lpContext
  2015.     );
  2016. WINBASEAPI
  2017. BOOL
  2018. WINAPI
  2019. SetThreadContext(
  2020.     IN HANDLE hThread,
  2021.     IN CONST CONTEXT *lpContext
  2022.     );
  2023. #endif
  2024. WINBASEAPI
  2025. DWORD
  2026. WINAPI
  2027. SuspendThread(
  2028.     IN HANDLE hThread
  2029.     );
  2030. WINBASEAPI
  2031. DWORD
  2032. WINAPI
  2033. ResumeThread(
  2034.     IN HANDLE hThread
  2035.     );
  2036. #if(_WIN32_WINNT >= 0x0400) || (_WIN32_WINDOWS > 0x0400)
  2037. typedef
  2038. VOID
  2039. (APIENTRY *PAPCFUNC)(
  2040.     ULONG_PTR dwParam
  2041.     );
  2042. WINBASEAPI
  2043. DWORD
  2044. WINAPI
  2045. QueueUserAPC(
  2046.     IN PAPCFUNC pfnAPC,
  2047.     IN HANDLE hThread,
  2048.     IN ULONG_PTR dwData
  2049.     );
  2050. #endif /* _WIN32_WINNT >= 0x0400 || _WIN32_WINDOWS > 0x0400 */
  2051. #if (_WIN32_WINNT >= 0x0400) || (_WIN32_WINDOWS > 0x0400)
  2052. WINBASEAPI
  2053. BOOL
  2054. WINAPI
  2055. IsDebuggerPresent(
  2056.     VOID
  2057.     );
  2058. #endif
  2059. WINBASEAPI
  2060. VOID
  2061. WINAPI
  2062. DebugBreak(
  2063.     VOID
  2064.     );
  2065. WINBASEAPI
  2066. BOOL
  2067. WINAPI
  2068. WaitForDebugEvent(
  2069.     IN LPDEBUG_EVENT lpDebugEvent,
  2070.     IN DWORD dwMilliseconds
  2071.     );
  2072. WINBASEAPI
  2073. BOOL
  2074. WINAPI
  2075. ContinueDebugEvent(
  2076.     IN DWORD dwProcessId,
  2077.     IN DWORD dwThreadId,
  2078.     IN DWORD dwContinueStatus
  2079.     );
  2080. WINBASEAPI
  2081. BOOL
  2082. WINAPI
  2083. DebugActiveProcess(
  2084.     IN DWORD dwProcessId
  2085.     );
  2086. WINBASEAPI
  2087. BOOL
  2088. WINAPI
  2089. DebugActiveProcessStop(
  2090.     IN DWORD dwProcessId
  2091.     );
  2092. WINBASEAPI
  2093. BOOL
  2094. WINAPI
  2095. DebugSetProcessKillOnExit(
  2096.     IN BOOL KillOnExit
  2097.     );
  2098. WINBASEAPI
  2099. BOOL
  2100. WINAPI
  2101. DebugBreakProcess (
  2102.     IN HANDLE Process
  2103.     );
  2104. WINBASEAPI
  2105. VOID
  2106. WINAPI
  2107. InitializeCriticalSection(
  2108.     OUT LPCRITICAL_SECTION lpCriticalSection
  2109.     );
  2110. WINBASEAPI
  2111. VOID
  2112. WINAPI
  2113. EnterCriticalSection(
  2114.     IN OUT LPCRITICAL_SECTION lpCriticalSection
  2115.     );
  2116. WINBASEAPI
  2117. VOID
  2118. WINAPI
  2119. LeaveCriticalSection(
  2120.     IN OUT LPCRITICAL_SECTION lpCriticalSection
  2121.     );
  2122. #if (_WIN32_WINNT >= 0x0403)
  2123. WINBASEAPI
  2124. BOOL
  2125. WINAPI
  2126. InitializeCriticalSectionAndSpinCount(
  2127.     IN OUT LPCRITICAL_SECTION lpCriticalSection,
  2128.     IN DWORD dwSpinCount
  2129.     );
  2130. WINBASEAPI
  2131. DWORD
  2132. WINAPI
  2133. SetCriticalSectionSpinCount(
  2134.     IN OUT LPCRITICAL_SECTION lpCriticalSection,
  2135.     IN DWORD dwSpinCount
  2136.     );
  2137. #endif
  2138. #if(_WIN32_WINNT >= 0x0400)
  2139. WINBASEAPI
  2140. BOOL
  2141. WINAPI
  2142. TryEnterCriticalSection(
  2143.     IN OUT LPCRITICAL_SECTION lpCriticalSection
  2144.     );
  2145. #endif /* _WIN32_WINNT >= 0x0400 */
  2146. WINBASEAPI
  2147. VOID
  2148. WINAPI
  2149. DeleteCriticalSection(
  2150.     IN OUT LPCRITICAL_SECTION lpCriticalSection
  2151.     );
  2152. WINBASEAPI
  2153. BOOL
  2154. WINAPI
  2155. SetEvent(
  2156.     IN HANDLE hEvent
  2157.     );
  2158. WINBASEAPI
  2159. BOOL
  2160. WINAPI
  2161. ResetEvent(
  2162.     IN HANDLE hEvent
  2163.     );
  2164. WINBASEAPI
  2165. BOOL
  2166. WINAPI
  2167. PulseEvent(
  2168.     IN HANDLE hEvent
  2169.     );
  2170. WINBASEAPI
  2171. BOOL
  2172. WINAPI
  2173. ReleaseSemaphore(
  2174.     IN HANDLE hSemaphore,
  2175.     IN LONG lReleaseCount,
  2176.     OUT LPLONG lpPreviousCount
  2177.     );
  2178. WINBASEAPI
  2179. BOOL
  2180. WINAPI
  2181. ReleaseMutex(
  2182.     IN HANDLE hMutex
  2183.     );
  2184. WINBASEAPI
  2185. DWORD
  2186. WINAPI
  2187. WaitForSingleObject(
  2188.     IN HANDLE hHandle,
  2189.     IN DWORD dwMilliseconds
  2190.     );
  2191. WINBASEAPI
  2192. DWORD
  2193. WINAPI
  2194. WaitForMultipleObjects(
  2195.     IN DWORD nCount,
  2196.     IN CONST HANDLE *lpHandles,
  2197.     IN BOOL bWaitAll,
  2198.     IN DWORD dwMilliseconds
  2199.     );
  2200. WINBASEAPI
  2201. VOID
  2202. WINAPI
  2203. Sleep(
  2204.     IN DWORD dwMilliseconds
  2205.     );
  2206. WINBASEAPI
  2207. HGLOBAL
  2208. WINAPI
  2209. LoadResource(
  2210.     IN HMODULE hModule,
  2211.     IN HRSRC hResInfo
  2212.     );
  2213. WINBASEAPI
  2214. DWORD
  2215. WINAPI
  2216. SizeofResource(
  2217.     IN HMODULE hModule,
  2218.     IN HRSRC hResInfo
  2219.     );
  2220. WINBASEAPI
  2221. ATOM
  2222. WINAPI
  2223. GlobalDeleteAtom(
  2224.     IN ATOM nAtom
  2225.     );
  2226. WINBASEAPI
  2227. BOOL
  2228. WINAPI
  2229. InitAtomTable(
  2230.     IN DWORD nSize
  2231.     );
  2232. WINBASEAPI
  2233. ATOM
  2234. WINAPI
  2235. DeleteAtom(
  2236.     IN ATOM nAtom
  2237.     );
  2238. WINBASEAPI
  2239. UINT
  2240. WINAPI
  2241. SetHandleCount(
  2242.     IN UINT uNumber
  2243.     );
  2244. WINBASEAPI
  2245. DWORD
  2246. WINAPI
  2247. GetLogicalDrives(
  2248.     VOID
  2249.     );
  2250. WINBASEAPI
  2251. BOOL
  2252. WINAPI
  2253. LockFile(
  2254.     IN HANDLE hFile,
  2255.     IN DWORD dwFileOffsetLow,
  2256.     IN DWORD dwFileOffsetHigh,
  2257.     IN DWORD nNumberOfBytesToLockLow,
  2258.     IN DWORD nNumberOfBytesToLockHigh
  2259.     );
  2260. WINBASEAPI
  2261. BOOL
  2262. WINAPI
  2263. UnlockFile(
  2264.     IN HANDLE hFile,
  2265.     IN DWORD dwFileOffsetLow,
  2266.     IN DWORD dwFileOffsetHigh,
  2267.     IN DWORD nNumberOfBytesToUnlockLow,
  2268.     IN DWORD nNumberOfBytesToUnlockHigh
  2269.     );
  2270. WINBASEAPI
  2271. BOOL
  2272. WINAPI
  2273. LockFileEx(
  2274.     IN HANDLE hFile,
  2275.     IN DWORD dwFlags,
  2276.     IN DWORD dwReserved,
  2277.     IN DWORD nNumberOfBytesToLockLow,
  2278.     IN DWORD nNumberOfBytesToLockHigh,
  2279.     IN LPOVERLAPPED lpOverlapped
  2280.     );
  2281. #define LOCKFILE_FAIL_IMMEDIATELY   0x00000001
  2282. #define LOCKFILE_EXCLUSIVE_LOCK     0x00000002
  2283. WINBASEAPI
  2284. BOOL
  2285. WINAPI
  2286. UnlockFileEx(
  2287.     IN HANDLE hFile,
  2288.     IN DWORD dwReserved,
  2289.     IN DWORD nNumberOfBytesToUnlockLow,
  2290.     IN DWORD nNumberOfBytesToUnlockHigh,
  2291.     IN LPOVERLAPPED lpOverlapped
  2292.     );
  2293. typedef struct _BY_HANDLE_FILE_INFORMATION {
  2294.     DWORD dwFileAttributes;
  2295.     FILETIME ftCreationTime;
  2296.     FILETIME ftLastAccessTime;
  2297.     FILETIME ftLastWriteTime;
  2298.     DWORD dwVolumeSerialNumber;
  2299.     DWORD nFileSizeHigh;
  2300.     DWORD nFileSizeLow;
  2301.     DWORD nNumberOfLinks;
  2302.     DWORD nFileIndexHigh;
  2303.     DWORD nFileIndexLow;
  2304. } BY_HANDLE_FILE_INFORMATION, *PBY_HANDLE_FILE_INFORMATION, *LPBY_HANDLE_FILE_INFORMATION;
  2305. WINBASEAPI
  2306. BOOL
  2307. WINAPI
  2308. GetFileInformationByHandle(
  2309.     IN HANDLE hFile,
  2310.     OUT LPBY_HANDLE_FILE_INFORMATION lpFileInformation
  2311.     );
  2312. WINBASEAPI
  2313. DWORD
  2314. WINAPI
  2315. GetFileType(
  2316.     IN HANDLE hFile
  2317.     );
  2318. WINBASEAPI
  2319. DWORD
  2320. WINAPI
  2321. GetFileSize(
  2322.     IN HANDLE hFile,
  2323.     OUT LPDWORD lpFileSizeHigh
  2324.     );
  2325. WINBASEAPI
  2326. BOOL
  2327. WINAPI
  2328. GetFileSizeEx(
  2329.     HANDLE hFile,
  2330.     PLARGE_INTEGER lpFileSize
  2331.     );
  2332. WINBASEAPI
  2333. HANDLE
  2334. WINAPI
  2335. GetStdHandle(
  2336.     IN DWORD nStdHandle
  2337.     );
  2338. WINBASEAPI
  2339. BOOL
  2340. WINAPI
  2341. SetStdHandle(
  2342.     IN DWORD nStdHandle,
  2343.     IN HANDLE hHandle
  2344.     );
  2345. WINBASEAPI
  2346. BOOL
  2347. WINAPI
  2348. WriteFile(
  2349.     IN HANDLE hFile,
  2350.     IN LPCVOID lpBuffer,
  2351.     IN DWORD nNumberOfBytesToWrite,
  2352.     OUT LPDWORD lpNumberOfBytesWritten,
  2353.     IN LPOVERLAPPED lpOverlapped
  2354.     );
  2355. WINBASEAPI
  2356. BOOL
  2357. WINAPI
  2358. ReadFile(
  2359.     IN HANDLE hFile,
  2360.     OUT LPVOID lpBuffer,
  2361.     IN DWORD nNumberOfBytesToRead,
  2362.     OUT LPDWORD lpNumberOfBytesRead,
  2363.     IN LPOVERLAPPED lpOverlapped
  2364.     );
  2365. WINBASEAPI
  2366. BOOL
  2367. WINAPI
  2368. FlushFileBuffers(
  2369.     IN HANDLE hFile
  2370.     );
  2371. WINBASEAPI
  2372. BOOL
  2373. WINAPI
  2374. DeviceIoControl(
  2375.     IN HANDLE hDevice,
  2376.     IN DWORD dwIoControlCode,
  2377.     IN LPVOID lpInBuffer,
  2378.     IN DWORD nInBufferSize,
  2379.     OUT LPVOID lpOutBuffer,
  2380.     IN DWORD nOutBufferSize,
  2381.     OUT LPDWORD lpBytesReturned,
  2382.     IN LPOVERLAPPED lpOverlapped
  2383.     );
  2384. WINBASEAPI
  2385. BOOL
  2386. WINAPI
  2387. RequestDeviceWakeup(
  2388.     IN HANDLE hDevice
  2389.     );
  2390. WINBASEAPI
  2391. BOOL
  2392. WINAPI
  2393. CancelDeviceWakeupRequest(
  2394.     IN HANDLE hDevice
  2395.     );
  2396. WINBASEAPI
  2397. BOOL
  2398. WINAPI
  2399. GetDevicePowerState(
  2400.     IN HANDLE hDevice,
  2401.     OUT BOOL *pfOn
  2402.     );
  2403. WINBASEAPI
  2404. BOOL
  2405. WINAPI
  2406. SetMessageWaitingIndicator(
  2407.     IN HANDLE hMsgIndicator,
  2408.     IN ULONG ulMsgCount
  2409.     );
  2410. WINBASEAPI
  2411. BOOL
  2412. WINAPI
  2413. SetEndOfFile(
  2414.     IN HANDLE hFile
  2415.     );
  2416. WINBASEAPI
  2417. DWORD
  2418. WINAPI
  2419. SetFilePointer(
  2420.     IN HANDLE hFile,
  2421.     IN LONG lDistanceToMove,
  2422.     IN PLONG lpDistanceToMoveHigh,
  2423.     IN DWORD dwMoveMethod
  2424.     );
  2425. WINBASEAPI
  2426. BOOL
  2427. WINAPI
  2428. SetFilePointerEx(
  2429.     HANDLE hFile,
  2430.     LARGE_INTEGER liDistanceToMove,
  2431.     PLARGE_INTEGER lpNewFilePointer,
  2432.     DWORD dwMoveMethod
  2433.     );
  2434. WINBASEAPI
  2435. BOOL
  2436. WINAPI
  2437. FindClose(
  2438.     IN OUT HANDLE hFindFile
  2439.     );
  2440. WINBASEAPI
  2441. BOOL
  2442. WINAPI
  2443. GetFileTime(
  2444.     IN HANDLE hFile,
  2445.     OUT LPFILETIME lpCreationTime,
  2446.     OUT LPFILETIME lpLastAccessTime,
  2447.     OUT LPFILETIME lpLastWriteTime
  2448.     );
  2449. WINBASEAPI
  2450. BOOL
  2451. WINAPI
  2452. SetFileTime(
  2453.     IN HANDLE hFile,
  2454.     IN CONST FILETIME *lpCreationTime,
  2455.     IN CONST FILETIME *lpLastAccessTime,
  2456.     IN CONST FILETIME *lpLastWriteTime
  2457.     );
  2458. WINBASEAPI
  2459. BOOL
  2460. WINAPI
  2461. SetFileValidData(
  2462.     IN HANDLE hFile,
  2463.     IN LONGLONG ValidDataLength
  2464.     );
  2465. WINBASEAPI
  2466. BOOL
  2467. WINAPI
  2468. SetFileShortNameA(
  2469.     IN HANDLE hFile,
  2470.     IN LPCSTR lpShortName
  2471.     );
  2472. WINBASEAPI
  2473. BOOL
  2474. WINAPI
  2475. SetFileShortNameW(
  2476.     IN HANDLE hFile,
  2477.     IN LPCWSTR lpShortName
  2478.     );
  2479. #ifdef UNICODE
  2480. #define SetFileShortName  SetFileShortNameW
  2481. #else
  2482. #define SetFileShortName  SetFileShortNameA
  2483. #endif // !UNICODE
  2484. WINBASEAPI
  2485. BOOL
  2486. WINAPI
  2487. CloseHandle(
  2488.     IN OUT HANDLE hObject
  2489.     );
  2490. WINBASEAPI
  2491. BOOL
  2492. WINAPI
  2493. DuplicateHandle(
  2494.     IN HANDLE hSourceProcessHandle,
  2495.     IN HANDLE hSourceHandle,
  2496.     IN HANDLE hTargetProcessHandle,
  2497.     OUT LPHANDLE lpTargetHandle,
  2498.     IN DWORD dwDesiredAccess,
  2499.     IN BOOL bInheritHandle,
  2500.     IN DWORD dwOptions
  2501.     );
  2502. WINBASEAPI
  2503. BOOL
  2504. WINAPI
  2505. GetHandleInformation(
  2506.     IN HANDLE hObject,
  2507.     OUT LPDWORD lpdwFlags
  2508.     );
  2509. WINBASEAPI
  2510. BOOL
  2511. WINAPI
  2512. SetHandleInformation(
  2513.     IN HANDLE hObject,
  2514.     IN DWORD dwMask,
  2515.     IN DWORD dwFlags
  2516.     );
  2517. #define HANDLE_FLAG_INHERIT             0x00000001
  2518. #define HANDLE_FLAG_PROTECT_FROM_CLOSE  0x00000002
  2519. #define HINSTANCE_ERROR 32
  2520. WINBASEAPI
  2521. DWORD
  2522. WINAPI
  2523. LoadModule(
  2524.     IN LPCSTR lpModuleName,
  2525.     IN LPVOID lpParameterBlock
  2526.     );
  2527. WINBASEAPI
  2528. UINT
  2529. WINAPI
  2530. WinExec(
  2531.     IN LPCSTR lpCmdLine,
  2532.     IN UINT uCmdShow
  2533.     );
  2534. WINBASEAPI
  2535. BOOL
  2536. WINAPI
  2537. ClearCommBreak(
  2538.     IN HANDLE hFile
  2539.     );
  2540. WINBASEAPI
  2541. BOOL
  2542. WINAPI
  2543. ClearCommError(
  2544.     IN HANDLE hFile,
  2545.     OUT LPDWORD lpErrors,
  2546.     OUT LPCOMSTAT lpStat
  2547.     );
  2548. WINBASEAPI
  2549. BOOL
  2550. WINAPI
  2551. SetupComm(
  2552.     IN HANDLE hFile,
  2553.     IN DWORD dwInQueue,
  2554.     IN DWORD dwOutQueue
  2555.     );
  2556. WINBASEAPI
  2557. BOOL
  2558. WINAPI
  2559. EscapeCommFunction(
  2560.     IN HANDLE hFile,
  2561.     IN DWORD dwFunc
  2562.     );
  2563. WINBASEAPI
  2564. BOOL
  2565. WINAPI
  2566. GetCommConfig(
  2567.     IN HANDLE hCommDev,
  2568.     OUT LPCOMMCONFIG lpCC,
  2569.     IN OUT LPDWORD lpdwSize
  2570.     );
  2571. WINBASEAPI
  2572. BOOL
  2573. WINAPI
  2574. GetCommMask(
  2575.     IN HANDLE hFile,
  2576.     OUT LPDWORD lpEvtMask
  2577.     );
  2578. WINBASEAPI
  2579. BOOL
  2580. WINAPI
  2581. GetCommProperties(
  2582.     IN HANDLE hFile,
  2583.     OUT LPCOMMPROP lpCommProp
  2584.     );
  2585. WINBASEAPI
  2586. BOOL
  2587. WINAPI
  2588. GetCommModemStatus(
  2589.     IN HANDLE hFile,
  2590.     OUT LPDWORD lpModemStat
  2591.     );
  2592. WINBASEAPI
  2593. BOOL
  2594. WINAPI
  2595. GetCommState(
  2596.     IN HANDLE hFile,
  2597.     OUT LPDCB lpDCB
  2598.     );
  2599. WINBASEAPI
  2600. BOOL
  2601. WINAPI
  2602. GetCommTimeouts(
  2603.     IN HANDLE hFile,
  2604.     OUT LPCOMMTIMEOUTS lpCommTimeouts
  2605.     );
  2606. WINBASEAPI
  2607. BOOL
  2608. WINAPI
  2609. PurgeComm(
  2610.     IN HANDLE hFile,
  2611.     IN DWORD dwFlags
  2612.     );
  2613. WINBASEAPI
  2614. BOOL
  2615. WINAPI
  2616. SetCommBreak(
  2617.     IN HANDLE hFile
  2618.     );
  2619. WINBASEAPI
  2620. BOOL
  2621. WINAPI
  2622. SetCommConfig(
  2623.     IN HANDLE hCommDev,
  2624.     IN LPCOMMCONFIG lpCC,
  2625.     IN DWORD dwSize
  2626.     );
  2627. WINBASEAPI
  2628. BOOL
  2629. WINAPI
  2630. SetCommMask(
  2631.     IN HANDLE hFile,
  2632.     IN DWORD dwEvtMask
  2633.     );
  2634. WINBASEAPI
  2635. BOOL
  2636. WINAPI
  2637. SetCommState(
  2638.     IN HANDLE hFile,
  2639.     IN LPDCB lpDCB
  2640.     );
  2641. WINBASEAPI
  2642. BOOL
  2643. WINAPI
  2644. SetCommTimeouts(
  2645.     IN HANDLE hFile,
  2646.     IN LPCOMMTIMEOUTS lpCommTimeouts
  2647.     );
  2648. WINBASEAPI
  2649. BOOL
  2650. WINAPI
  2651. TransmitCommChar(
  2652.     IN HANDLE hFile,
  2653.     IN char cChar
  2654.     );
  2655. WINBASEAPI
  2656. BOOL
  2657. WINAPI
  2658. WaitCommEvent(
  2659.     IN HANDLE hFile,
  2660.     OUT LPDWORD lpEvtMask,
  2661.     IN LPOVERLAPPED lpOverlapped
  2662.     );
  2663. WINBASEAPI
  2664. DWORD
  2665. WINAPI
  2666. SetTapePosition(
  2667.     IN HANDLE hDevice,
  2668.     IN DWORD dwPositionMethod,
  2669.     IN DWORD dwPartition,
  2670.     IN DWORD dwOffsetLow,
  2671.     IN DWORD dwOffsetHigh,
  2672.     IN BOOL bImmediate
  2673.     );
  2674. WINBASEAPI
  2675. DWORD
  2676. WINAPI
  2677. GetTapePosition(
  2678.     IN HANDLE hDevice,
  2679.     IN DWORD dwPositionType,
  2680.     OUT LPDWORD lpdwPartition,
  2681.     OUT LPDWORD lpdwOffsetLow,
  2682.     OUT LPDWORD lpdwOffsetHigh
  2683.     );
  2684. WINBASEAPI
  2685. DWORD
  2686. WINAPI
  2687. PrepareTape(
  2688.     IN HANDLE hDevice,
  2689.     IN DWORD dwOperation,
  2690.     IN BOOL bImmediate
  2691.     );
  2692. WINBASEAPI
  2693. DWORD
  2694. WINAPI
  2695. EraseTape(
  2696.     IN HANDLE hDevice,
  2697.     IN DWORD dwEraseType,
  2698.     IN BOOL bImmediate
  2699.     );
  2700. WINBASEAPI
  2701. DWORD
  2702. WINAPI
  2703. CreateTapePartition(
  2704.     IN HANDLE hDevice,
  2705.     IN DWORD dwPartitionMethod,
  2706.     IN DWORD dwCount,
  2707.     IN DWORD dwSize
  2708.     );
  2709. WINBASEAPI
  2710. DWORD
  2711. WINAPI
  2712. WriteTapemark(
  2713.     IN HANDLE hDevice,
  2714.     IN DWORD dwTapemarkType,
  2715.     IN DWORD dwTapemarkCount,
  2716.     IN BOOL bImmediate
  2717.     );
  2718. WINBASEAPI
  2719. DWORD
  2720. WINAPI
  2721. GetTapeStatus(
  2722.     IN HANDLE hDevice
  2723.     );
  2724. WINBASEAPI
  2725. DWORD
  2726. WINAPI
  2727. GetTapeParameters(
  2728.     IN HANDLE hDevice,
  2729.     IN DWORD dwOperation,
  2730.     OUT LPDWORD lpdwSize,
  2731.     OUT LPVOID lpTapeInformation
  2732.     );
  2733. #define GET_TAPE_MEDIA_INFORMATION 0
  2734. #define GET_TAPE_DRIVE_INFORMATION 1
  2735. WINBASEAPI
  2736. DWORD
  2737. WINAPI
  2738. SetTapeParameters(
  2739.     IN HANDLE hDevice,
  2740.     IN DWORD dwOperation,
  2741.     IN LPVOID lpTapeInformation
  2742.     );
  2743. #define SET_TAPE_MEDIA_INFORMATION 0
  2744. #define SET_TAPE_DRIVE_INFORMATION 1
  2745. WINBASEAPI
  2746. BOOL
  2747. WINAPI
  2748. Beep(
  2749.     IN DWORD dwFreq,
  2750.     IN DWORD dwDuration
  2751.     );
  2752. WINBASEAPI
  2753. int
  2754. WINAPI
  2755. MulDiv(
  2756.     IN int nNumber,
  2757.     IN int nNumerator,
  2758.     IN int nDenominator
  2759.     );
  2760. WINBASEAPI
  2761. VOID
  2762. WINAPI
  2763. GetSystemTime(
  2764.     OUT LPSYSTEMTIME lpSystemTime
  2765.     );
  2766. WINBASEAPI
  2767. VOID
  2768. WINAPI
  2769. GetSystemTimeAsFileTime(
  2770.     OUT LPFILETIME lpSystemTimeAsFileTime
  2771.     );
  2772. WINBASEAPI
  2773. BOOL
  2774. WINAPI
  2775. SetSystemTime(
  2776.     IN CONST SYSTEMTIME *lpSystemTime
  2777.     );
  2778. WINBASEAPI
  2779. VOID
  2780. WINAPI
  2781. GetLocalTime(
  2782.     OUT LPSYSTEMTIME lpSystemTime
  2783.     );
  2784. WINBASEAPI
  2785. BOOL
  2786. WINAPI
  2787. SetLocalTime(
  2788.     IN CONST SYSTEMTIME *lpSystemTime
  2789.     );
  2790. WINBASEAPI
  2791. VOID
  2792. WINAPI
  2793. GetSystemInfo(
  2794.     OUT LPSYSTEM_INFO lpSystemInfo
  2795.     );
  2796. #if _WIN32_WINNT >= 0x0501
  2797. WINBASEAPI
  2798. VOID
  2799. WINAPI
  2800. GetNativeSystemInfo(
  2801.     OUT LPSYSTEM_INFO lpSystemInfo
  2802.     );
  2803. #endif
  2804. WINBASEAPI
  2805. BOOL
  2806. WINAPI
  2807. IsProcessorFeaturePresent(
  2808.     IN DWORD ProcessorFeature
  2809.     );
  2810. typedef struct _TIME_ZONE_INFORMATION {
  2811.     LONG Bias;
  2812.     WCHAR StandardName[ 32 ];
  2813.     SYSTEMTIME StandardDate;
  2814.     LONG StandardBias;
  2815.     WCHAR DaylightName[ 32 ];
  2816.     SYSTEMTIME DaylightDate;
  2817.     LONG DaylightBias;
  2818. } TIME_ZONE_INFORMATION, *PTIME_ZONE_INFORMATION, *LPTIME_ZONE_INFORMATION;
  2819. WINBASEAPI
  2820. BOOL
  2821. WINAPI
  2822. SystemTimeToTzSpecificLocalTime(
  2823.     IN LPTIME_ZONE_INFORMATION lpTimeZoneInformation,
  2824.     IN LPSYSTEMTIME lpUniversalTime,
  2825.     OUT LPSYSTEMTIME lpLocalTime
  2826.     );
  2827. WINBASEAPI
  2828. BOOL
  2829. WINAPI
  2830. TzSpecificLocalTimeToSystemTime(
  2831.     IN LPTIME_ZONE_INFORMATION lpTimeZoneInformation,
  2832.     IN LPSYSTEMTIME lpLocalTime,
  2833.     OUT LPSYSTEMTIME lpUniversalTime
  2834.     );
  2835. WINBASEAPI
  2836. DWORD
  2837. WINAPI
  2838. GetTimeZoneInformation(
  2839.     OUT LPTIME_ZONE_INFORMATION lpTimeZoneInformation
  2840.     );
  2841. WINBASEAPI
  2842. BOOL
  2843. WINAPI
  2844. SetTimeZoneInformation(
  2845.     IN CONST TIME_ZONE_INFORMATION *lpTimeZoneInformation
  2846.     );
  2847. //
  2848. // Routines to convert back and forth between system time and file time
  2849. //
  2850. WINBASEAPI
  2851. BOOL
  2852. WINAPI
  2853. SystemTimeToFileTime(
  2854.     IN CONST SYSTEMTIME *lpSystemTime,
  2855.     OUT LPFILETIME lpFileTime
  2856.     );
  2857. WINBASEAPI
  2858. BOOL
  2859. WINAPI
  2860. FileTimeToLocalFileTime(
  2861.     IN CONST FILETIME *lpFileTime,
  2862.     OUT LPFILETIME lpLocalFileTime
  2863.     );
  2864. WINBASEAPI
  2865. BOOL
  2866. WINAPI
  2867. LocalFileTimeToFileTime(
  2868.     IN CONST FILETIME *lpLocalFileTime,
  2869.     OUT LPFILETIME lpFileTime
  2870.     );
  2871. WINBASEAPI
  2872. BOOL
  2873. WINAPI
  2874. FileTimeToSystemTime(
  2875.     IN CONST FILETIME *lpFileTime,
  2876.     OUT LPSYSTEMTIME lpSystemTime
  2877.     );
  2878. WINBASEAPI
  2879. LONG
  2880. WINAPI
  2881. CompareFileTime(
  2882.     IN CONST FILETIME *lpFileTime1,
  2883.     IN CONST FILETIME *lpFileTime2
  2884.     );
  2885. WINBASEAPI
  2886. BOOL
  2887. WINAPI
  2888. FileTimeToDosDateTime(
  2889.     IN CONST FILETIME *lpFileTime,
  2890.     OUT LPWORD lpFatDate,
  2891.     OUT LPWORD lpFatTime
  2892.     );
  2893. WINBASEAPI
  2894. BOOL
  2895. WINAPI
  2896. DosDateTimeToFileTime(
  2897.     IN WORD wFatDate,
  2898.     IN WORD wFatTime,
  2899.     OUT LPFILETIME lpFileTime
  2900.     );
  2901. WINBASEAPI
  2902. DWORD
  2903. WINAPI
  2904. GetTickCount(
  2905.     VOID
  2906.     );
  2907. WINBASEAPI
  2908. BOOL
  2909. WINAPI
  2910. SetSystemTimeAdjustment(
  2911.     IN DWORD dwTimeAdjustment,
  2912.     IN BOOL  bTimeAdjustmentDisabled
  2913.     );
  2914. WINBASEAPI
  2915. BOOL
  2916. WINAPI
  2917. GetSystemTimeAdjustment(
  2918.     OUT PDWORD lpTimeAdjustment,
  2919.     OUT PDWORD lpTimeIncrement,
  2920.     OUT PBOOL  lpTimeAdjustmentDisabled
  2921.     );
  2922. #if !defined(MIDL_PASS)
  2923. WINBASEAPI
  2924. DWORD
  2925. WINAPI
  2926. FormatMessageA(
  2927.     IN DWORD dwFlags,
  2928.     IN LPCVOID lpSource,
  2929.     IN DWORD dwMessageId,
  2930.     IN DWORD dwLanguageId,
  2931.     OUT LPSTR lpBuffer,
  2932.     IN DWORD nSize,
  2933.     IN va_list *Arguments
  2934.     );
  2935. WINBASEAPI
  2936. DWORD
  2937. WINAPI
  2938. FormatMessageW(
  2939.     IN DWORD dwFlags,
  2940.     IN LPCVOID lpSource,
  2941.     IN DWORD dwMessageId,
  2942.     IN DWORD dwLanguageId,
  2943.     OUT LPWSTR lpBuffer,
  2944.     IN DWORD nSize,
  2945.     IN va_list *Arguments
  2946.     );
  2947. #ifdef UNICODE
  2948. #define FormatMessage  FormatMessageW
  2949. #else
  2950. #define FormatMessage  FormatMessageA
  2951. #endif // !UNICODE
  2952. #endif
  2953. #define FORMAT_MESSAGE_ALLOCATE_BUFFER 0x00000100
  2954. #define FORMAT_MESSAGE_IGNORE_INSERTS  0x00000200
  2955. #define FORMAT_MESSAGE_FROM_STRING     0x00000400
  2956. #define FORMAT_MESSAGE_FROM_HMODULE    0x00000800
  2957. #define FORMAT_MESSAGE_FROM_SYSTEM     0x00001000
  2958. #define FORMAT_MESSAGE_ARGUMENT_ARRAY  0x00002000
  2959. #define FORMAT_MESSAGE_MAX_WIDTH_MASK  0x000000FF
  2960. WINBASEAPI
  2961. BOOL
  2962. WINAPI
  2963. CreatePipe(
  2964.     OUT PHANDLE hReadPipe,
  2965.     OUT PHANDLE hWritePipe,
  2966.     IN LPSECURITY_ATTRIBUTES lpPipeAttributes,
  2967.     IN DWORD nSize
  2968.     );
  2969. WINBASEAPI
  2970. BOOL
  2971. WINAPI
  2972. ConnectNamedPipe(
  2973.     IN HANDLE hNamedPipe,
  2974.     IN LPOVERLAPPED lpOverlapped
  2975.     );
  2976. WINBASEAPI
  2977. BOOL
  2978. WINAPI
  2979. DisconnectNamedPipe(
  2980.     IN HANDLE hNamedPipe
  2981.     );
  2982. WINBASEAPI
  2983. BOOL
  2984. WINAPI
  2985. SetNamedPipeHandleState(
  2986.     IN HANDLE hNamedPipe,
  2987.     IN LPDWORD lpMode,
  2988.     IN LPDWORD lpMaxCollectionCount,
  2989.     IN LPDWORD lpCollectDataTimeout
  2990.     );
  2991. WINBASEAPI
  2992. BOOL
  2993. WINAPI
  2994. GetNamedPipeInfo(
  2995.     IN HANDLE hNamedPipe,
  2996.     IN LPDWORD lpFlags,
  2997.     OUT LPDWORD lpOutBufferSize,
  2998.     OUT LPDWORD lpInBufferSize,
  2999.     OUT LPDWORD lpMaxInstances
  3000.     );
  3001. WINBASEAPI
  3002. BOOL
  3003. WINAPI
  3004. PeekNamedPipe(
  3005.     IN HANDLE hNamedPipe,
  3006.     OUT LPVOID lpBuffer,
  3007.     IN DWORD nBufferSize,
  3008.     OUT LPDWORD lpBytesRead,
  3009.     OUT LPDWORD lpTotalBytesAvail,
  3010.     OUT LPDWORD lpBytesLeftThisMessage
  3011.     );
  3012. WINBASEAPI
  3013. BOOL
  3014. WINAPI
  3015. TransactNamedPipe(
  3016.     IN HANDLE hNamedPipe,
  3017.     IN LPVOID lpInBuffer,
  3018.     IN DWORD nInBufferSize,
  3019.     OUT LPVOID lpOutBuffer,
  3020.     IN DWORD nOutBufferSize,
  3021.     OUT LPDWORD lpBytesRead,
  3022.     IN LPOVERLAPPED lpOverlapped
  3023.     );
  3024. WINBASEAPI
  3025. HANDLE
  3026. WINAPI
  3027. CreateMailslotA(
  3028.     IN LPCSTR lpName,
  3029.     IN DWORD nMaxMessageSize,
  3030.     IN DWORD lReadTimeout,
  3031.     IN LPSECURITY_ATTRIBUTES lpSecurityAttributes
  3032.     );
  3033. WINBASEAPI
  3034. HANDLE
  3035. WINAPI
  3036. CreateMailslotW(
  3037.     IN LPCWSTR lpName,
  3038.     IN DWORD nMaxMessageSize,
  3039.     IN DWORD lReadTimeout,
  3040.     IN LPSECURITY_ATTRIBUTES lpSecurityAttributes
  3041.     );
  3042. #ifdef UNICODE
  3043. #define CreateMailslot  CreateMailslotW
  3044. #else
  3045. #define CreateMailslot  CreateMailslotA
  3046. #endif // !UNICODE
  3047. WINBASEAPI
  3048. BOOL
  3049. WINAPI
  3050. GetMailslotInfo(
  3051.     IN HANDLE hMailslot,
  3052.     IN LPDWORD lpMaxMessageSize,
  3053.     IN LPDWORD lpNextSize,
  3054.     IN LPDWORD lpMessageCount,
  3055.     IN LPDWORD lpReadTimeout
  3056.     );
  3057. WINBASEAPI
  3058. BOOL
  3059. WINAPI
  3060. SetMailslotInfo(
  3061.     IN HANDLE hMailslot,
  3062.     IN DWORD lReadTimeout
  3063.     );
  3064. WINBASEAPI
  3065. LPVOID
  3066. WINAPI
  3067. MapViewOfFile(
  3068.     IN HANDLE hFileMappingObject,
  3069.     IN DWORD dwDesiredAccess,
  3070.     IN DWORD dwFileOffsetHigh,
  3071.     IN DWORD dwFileOffsetLow,
  3072.     IN SIZE_T dwNumberOfBytesToMap
  3073.     );
  3074. WINBASEAPI
  3075. BOOL
  3076. WINAPI
  3077. FlushViewOfFile(
  3078.     IN LPCVOID lpBaseAddress,
  3079.     IN SIZE_T dwNumberOfBytesToFlush
  3080.     );
  3081. WINBASEAPI
  3082. BOOL
  3083. WINAPI
  3084. UnmapViewOfFile(
  3085.     IN LPCVOID lpBaseAddress
  3086.     );
  3087. //
  3088. // File Encryption API
  3089. //
  3090. WINADVAPI
  3091. BOOL
  3092. WINAPI
  3093. EncryptFileA(
  3094.     IN LPCSTR lpFileName
  3095.     );
  3096. WINADVAPI
  3097. BOOL
  3098. WINAPI
  3099. EncryptFileW(
  3100.     IN LPCWSTR lpFileName
  3101.     );
  3102. #ifdef UNICODE
  3103. #define EncryptFile  EncryptFileW
  3104. #else
  3105. #define EncryptFile  EncryptFileA
  3106. #endif // !UNICODE
  3107. WINADVAPI
  3108. BOOL
  3109. WINAPI
  3110. DecryptFileA(
  3111.     IN LPCSTR lpFileName,
  3112.     IN DWORD    dwReserved
  3113.     );
  3114. WINADVAPI
  3115. BOOL
  3116. WINAPI
  3117. DecryptFileW(
  3118.     IN LPCWSTR lpFileName,
  3119.     IN DWORD    dwReserved
  3120.     );
  3121. #ifdef UNICODE
  3122. #define DecryptFile  DecryptFileW
  3123. #else
  3124. #define DecryptFile  DecryptFileA
  3125. #endif // !UNICODE
  3126. //
  3127. //  Encryption Status Value
  3128. //
  3129. #define FILE_ENCRYPTABLE                0
  3130. #define FILE_IS_ENCRYPTED               1
  3131. #define FILE_SYSTEM_ATTR                2
  3132. #define FILE_ROOT_DIR                   3
  3133. #define FILE_SYSTEM_DIR                 4
  3134. #define FILE_UNKNOWN                    5
  3135. #define FILE_SYSTEM_NOT_SUPPORT         6
  3136. #define FILE_USER_DISALLOWED            7
  3137. #define FILE_READ_ONLY                  8
  3138. #define FILE_DIR_DISALLOWED             9
  3139. WINADVAPI
  3140. BOOL
  3141. WINAPI
  3142. FileEncryptionStatusA(
  3143.     LPCSTR lpFileName,
  3144.     LPDWORD  lpStatus
  3145.     );
  3146. WINADVAPI
  3147. BOOL
  3148. WINAPI
  3149. FileEncryptionStatusW(
  3150.     LPCWSTR lpFileName,
  3151.     LPDWORD  lpStatus
  3152.     );
  3153. #ifdef UNICODE
  3154. #define FileEncryptionStatus  FileEncryptionStatusW
  3155. #else
  3156. #define FileEncryptionStatus  FileEncryptionStatusA
  3157. #endif // !UNICODE
  3158. //
  3159. // Currently defined recovery flags
  3160. //
  3161. #define EFS_USE_RECOVERY_KEYS  (0x1)
  3162. typedef
  3163. DWORD
  3164. (WINAPI *PFE_EXPORT_FUNC)(
  3165.     PBYTE pbData,
  3166.     PVOID pvCallbackContext,
  3167.     ULONG ulLength
  3168.     );
  3169. typedef
  3170. DWORD
  3171. (WINAPI *PFE_IMPORT_FUNC)(
  3172.     PBYTE pbData,
  3173.     PVOID pvCallbackContext,
  3174.     PULONG ulLength
  3175.     );
  3176. //
  3177. //  OpenRaw flag values
  3178. //
  3179. #define CREATE_FOR_IMPORT  (1)
  3180. #define CREATE_FOR_DIR     (2)
  3181. #define OVERWRITE_HIDDEN   (4)
  3182. WINADVAPI
  3183. DWORD
  3184. WINAPI
  3185. OpenEncryptedFileRawA(
  3186.     IN LPCSTR        lpFileName,
  3187.     IN ULONG           ulFlags,
  3188.     IN PVOID *         pvContext
  3189.     );
  3190. WINADVAPI
  3191. DWORD
  3192. WINAPI
  3193. OpenEncryptedFileRawW(
  3194.     IN LPCWSTR        lpFileName,
  3195.     IN ULONG           ulFlags,
  3196.     IN PVOID *         pvContext
  3197.     );
  3198. #ifdef UNICODE
  3199. #define OpenEncryptedFileRaw  OpenEncryptedFileRawW
  3200. #else
  3201. #define OpenEncryptedFileRaw  OpenEncryptedFileRawA
  3202. #endif // !UNICODE
  3203. WINADVAPI
  3204. DWORD
  3205. WINAPI
  3206. ReadEncryptedFileRaw(
  3207.     IN PFE_EXPORT_FUNC pfExportCallback,
  3208.     IN PVOID           pvCallbackContext,
  3209.     IN PVOID           pvContext
  3210.     );
  3211. WINADVAPI
  3212. DWORD
  3213. WINAPI
  3214. WriteEncryptedFileRaw(
  3215.     IN PFE_IMPORT_FUNC pfImportCallback,
  3216.     IN PVOID           pvCallbackContext,
  3217.     IN PVOID           pvContext
  3218.     );
  3219. WINADVAPI
  3220. VOID
  3221. WINAPI
  3222. CloseEncryptedFileRaw(
  3223.     IN PVOID           pvContext
  3224.     );
  3225. //
  3226. // _l Compat Functions
  3227. //
  3228. WINBASEAPI
  3229. int
  3230. WINAPI
  3231. lstrcmpA(
  3232.     IN LPCSTR lpString1,
  3233.     IN LPCSTR lpString2
  3234.     );
  3235. WINBASEAPI
  3236. int
  3237. WINAPI
  3238. lstrcmpW(
  3239.     IN LPCWSTR lpString1,
  3240.     IN LPCWSTR lpString2
  3241.     );
  3242. #ifdef UNICODE
  3243. #define lstrcmp  lstrcmpW
  3244. #else
  3245. #define lstrcmp  lstrcmpA
  3246. #endif // !UNICODE
  3247. WINBASEAPI
  3248. int
  3249. WINAPI
  3250. lstrcmpiA(
  3251.     IN LPCSTR lpString1,
  3252.     IN LPCSTR lpString2
  3253.     );
  3254. WINBASEAPI
  3255. int
  3256. WINAPI
  3257. lstrcmpiW(
  3258.     IN LPCWSTR lpString1,
  3259.     IN LPCWSTR lpString2
  3260.     );
  3261. #ifdef UNICODE
  3262. #define lstrcmpi  lstrcmpiW
  3263. #else
  3264. #define lstrcmpi  lstrcmpiA
  3265. #endif // !UNICODE
  3266. WINBASEAPI
  3267. LPSTR
  3268. WINAPI
  3269. lstrcpynA(
  3270.     OUT LPSTR lpString1,
  3271.     IN LPCSTR lpString2,
  3272.     IN int iMaxLength
  3273.     );
  3274. WINBASEAPI
  3275. LPWSTR
  3276. WINAPI
  3277. lstrcpynW(
  3278.     OUT LPWSTR lpString1,
  3279.     IN LPCWSTR lpString2,
  3280.     IN int iMaxLength
  3281.     );
  3282. #ifdef UNICODE
  3283. #define lstrcpyn  lstrcpynW
  3284. #else
  3285. #define lstrcpyn  lstrcpynA
  3286. #endif // !UNICODE
  3287. WINBASEAPI
  3288. LPSTR
  3289. WINAPI
  3290. lstrcpyA(
  3291.     OUT LPSTR lpString1,
  3292.     IN LPCSTR lpString2
  3293.     );
  3294. WINBASEAPI
  3295. LPWSTR
  3296. WINAPI
  3297. lstrcpyW(
  3298.     OUT LPWSTR lpString1,
  3299.     IN LPCWSTR lpString2
  3300.     );
  3301. #ifdef UNICODE
  3302. #define lstrcpy  lstrcpyW
  3303. #else
  3304. #define lstrcpy  lstrcpyA
  3305. #endif // !UNICODE
  3306. WINBASEAPI
  3307. LPSTR
  3308. WINAPI
  3309. lstrcatA(
  3310.     IN OUT LPSTR lpString1,
  3311.     IN LPCSTR lpString2
  3312.     );
  3313. WINBASEAPI
  3314. LPWSTR
  3315. WINAPI
  3316. lstrcatW(
  3317.     IN OUT LPWSTR lpString1,
  3318.     IN LPCWSTR lpString2
  3319.     );
  3320. #ifdef UNICODE
  3321. #define lstrcat  lstrcatW
  3322. #else
  3323. #define lstrcat  lstrcatA
  3324. #endif // !UNICODE
  3325. WINBASEAPI
  3326. int
  3327. WINAPI
  3328. lstrlenA(
  3329.     IN LPCSTR lpString
  3330.     );
  3331. WINBASEAPI
  3332. int
  3333. WINAPI
  3334. lstrlenW(
  3335.     IN LPCWSTR lpString
  3336.     );
  3337. #ifdef UNICODE
  3338. #define lstrlen  lstrlenW
  3339. #else
  3340. #define lstrlen  lstrlenA
  3341. #endif // !UNICODE
  3342. WINBASEAPI
  3343. HFILE
  3344. WINAPI
  3345. OpenFile(
  3346.     IN LPCSTR lpFileName,
  3347.     OUT LPOFSTRUCT lpReOpenBuff,
  3348.     IN UINT uStyle
  3349.     );
  3350. WINBASEAPI
  3351. HFILE
  3352. WINAPI
  3353. _lopen(
  3354.     IN LPCSTR lpPathName,
  3355.     IN int iReadWrite
  3356.     );
  3357. WINBASEAPI
  3358. HFILE
  3359. WINAPI
  3360. _lcreat(
  3361.     IN LPCSTR lpPathName,
  3362.     IN int  iAttribute
  3363.     );
  3364. WINBASEAPI
  3365. UINT
  3366. WINAPI
  3367. _lread(
  3368.     IN HFILE hFile,
  3369.     OUT LPVOID lpBuffer,
  3370.     IN UINT uBytes
  3371.     );
  3372. WINBASEAPI
  3373. UINT
  3374. WINAPI
  3375. _lwrite(
  3376.     IN HFILE hFile,
  3377.     IN LPCSTR lpBuffer,
  3378.     IN UINT uBytes
  3379.     );
  3380. WINBASEAPI
  3381. long
  3382. WINAPI
  3383. _hread(
  3384.     IN HFILE hFile,
  3385.     OUT LPVOID lpBuffer,
  3386.     IN long lBytes
  3387.     );
  3388. WINBASEAPI
  3389. long
  3390. WINAPI
  3391. _hwrite(
  3392.     IN HFILE hFile,
  3393.     IN LPCSTR lpBuffer,
  3394.     IN long lBytes
  3395.     );
  3396. WINBASEAPI
  3397. HFILE
  3398. WINAPI
  3399. _lclose(
  3400.     IN OUT HFILE hFile
  3401.     );
  3402. WINBASEAPI
  3403. LONG
  3404. WINAPI
  3405. _llseek(
  3406.     IN HFILE hFile,
  3407.     IN LONG lOffset,
  3408.     IN int iOrigin
  3409.     );
  3410. WINADVAPI
  3411. BOOL
  3412. WINAPI
  3413. IsTextUnicode(
  3414.     IN CONST VOID* lpBuffer,
  3415.     IN int cb,
  3416.     IN OUT LPINT lpi
  3417.     );
  3418. WINBASEAPI
  3419. DWORD
  3420. WINAPI
  3421. TlsAlloc(
  3422.     VOID
  3423.     );
  3424. #define TLS_OUT_OF_INDEXES ((DWORD)0xFFFFFFFF)
  3425. WINBASEAPI
  3426. LPVOID
  3427. WINAPI
  3428. TlsGetValue(
  3429.     IN DWORD dwTlsIndex
  3430.     );
  3431. WINBASEAPI
  3432. BOOL
  3433. WINAPI
  3434. TlsSetValue(
  3435.     IN DWORD dwTlsIndex,
  3436.     IN LPVOID lpTlsValue
  3437.     );
  3438. WINBASEAPI
  3439. BOOL
  3440. WINAPI
  3441. TlsFree(
  3442.     IN DWORD dwTlsIndex
  3443.     );
  3444. typedef
  3445. VOID
  3446. (WINAPI *LPOVERLAPPED_COMPLETION_ROUTINE)(
  3447.     DWORD dwErrorCode,
  3448.     DWORD dwNumberOfBytesTransfered,
  3449.     LPOVERLAPPED lpOverlapped
  3450.     );
  3451. WINBASEAPI
  3452. DWORD
  3453. WINAPI
  3454. SleepEx(
  3455.     IN DWORD dwMilliseconds,
  3456.     IN BOOL bAlertable
  3457.     );
  3458. WINBASEAPI
  3459. DWORD
  3460. WINAPI
  3461. WaitForSingleObjectEx(
  3462.     IN HANDLE hHandle,
  3463.     IN DWORD dwMilliseconds,
  3464.     IN BOOL bAlertable
  3465.     );
  3466. WINBASEAPI
  3467. DWORD
  3468. WINAPI
  3469. WaitForMultipleObjectsEx(
  3470.     IN DWORD nCount,
  3471.     IN CONST HANDLE *lpHandles,
  3472.     IN BOOL bWaitAll,
  3473.     IN DWORD dwMilliseconds,
  3474.     IN BOOL bAlertable
  3475.     );
  3476. #if(_WIN32_WINNT >= 0x0400)
  3477. WINBASEAPI
  3478. DWORD
  3479. WINAPI
  3480. SignalObjectAndWait(
  3481.     IN HANDLE hObjectToSignal,
  3482.     IN HANDLE hObjectToWaitOn,
  3483.     IN DWORD dwMilliseconds,
  3484.     IN BOOL bAlertable
  3485.     );
  3486. #endif /* _WIN32_WINNT >= 0x0400 */
  3487. WINBASEAPI
  3488. BOOL
  3489. WINAPI
  3490. ReadFileEx(
  3491.     IN HANDLE hFile,
  3492.     OUT LPVOID lpBuffer,
  3493.     IN DWORD nNumberOfBytesToRead,
  3494.     IN LPOVERLAPPED lpOverlapped,
  3495.     IN LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
  3496.     );
  3497. WINBASEAPI
  3498. BOOL
  3499. WINAPI
  3500. WriteFileEx(
  3501.     IN HANDLE hFile,
  3502.     IN LPCVOID lpBuffer,
  3503.     IN DWORD nNumberOfBytesToWrite,
  3504.     IN LPOVERLAPPED lpOverlapped,
  3505.     IN LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
  3506.     );
  3507. WINBASEAPI
  3508. BOOL
  3509. WINAPI
  3510. BackupRead(
  3511.     IN HANDLE hFile,
  3512.     OUT LPBYTE lpBuffer,
  3513.     IN DWORD nNumberOfBytesToRead,
  3514.     OUT LPDWORD lpNumberOfBytesRead,
  3515.     IN BOOL bAbort,
  3516.     IN BOOL bProcessSecurity,
  3517.     OUT LPVOID *lpContext
  3518.     );
  3519. WINBASEAPI
  3520. BOOL
  3521. WINAPI
  3522. BackupSeek(
  3523.     IN HANDLE hFile,
  3524.     IN DWORD  dwLowBytesToSeek,
  3525.     IN DWORD  dwHighBytesToSeek,
  3526.     OUT LPDWORD lpdwLowByteSeeked,
  3527.     OUT LPDWORD lpdwHighByteSeeked,
  3528.     IN LPVOID *lpContext
  3529.     );
  3530. WINBASEAPI
  3531. BOOL
  3532. WINAPI
  3533. BackupWrite(
  3534.     IN HANDLE hFile,
  3535.     IN LPBYTE lpBuffer,
  3536.     IN DWORD nNumberOfBytesToWrite,
  3537.     OUT LPDWORD lpNumberOfBytesWritten,
  3538.     IN BOOL bAbort,
  3539.     IN BOOL bProcessSecurity,
  3540.     OUT LPVOID *lpContext
  3541.     );
  3542. //
  3543. //  Stream id structure
  3544. //
  3545. typedef struct _WIN32_STREAM_ID {
  3546.         DWORD          dwStreamId ;
  3547.         DWORD          dwStreamAttributes ;
  3548.         LARGE_INTEGER  Size ;
  3549.         DWORD          dwStreamNameSize ;
  3550.         WCHAR          cStreamName[ ANYSIZE_ARRAY ] ;
  3551. } WIN32_STREAM_ID, *LPWIN32_STREAM_ID ;
  3552. //
  3553. //  Stream Ids
  3554. //
  3555. #define BACKUP_INVALID          0x00000000
  3556. #define BACKUP_DATA             0x00000001
  3557. #define BACKUP_EA_DATA          0x00000002
  3558. #define BACKUP_SECURITY_DATA    0x00000003
  3559. #define BACKUP_ALTERNATE_DATA   0x00000004
  3560. #define BACKUP_LINK             0x00000005
  3561. #define BACKUP_PROPERTY_DATA    0x00000006
  3562. #define BACKUP_OBJECT_ID        0x00000007
  3563. #define BACKUP_REPARSE_DATA     0x00000008
  3564. #define BACKUP_SPARSE_BLOCK     0x00000009
  3565. //
  3566. //  Stream Attributes
  3567. //
  3568. #define STREAM_NORMAL_ATTRIBUTE         0x00000000
  3569. #define STREAM_MODIFIED_WHEN_READ       0x00000001
  3570. #define STREAM_CONTAINS_SECURITY        0x00000002
  3571. #define STREAM_CONTAINS_PROPERTIES      0x00000004
  3572. #define STREAM_SPARSE_ATTRIBUTE         0x00000008
  3573. WINBASEAPI
  3574. BOOL
  3575. WINAPI
  3576. ReadFileScatter(
  3577.     IN HANDLE hFile,
  3578.     IN FILE_SEGMENT_ELEMENT aSegmentArray[],
  3579.     IN DWORD nNumberOfBytesToRead,
  3580.     IN LPDWORD lpReserved,
  3581.     IN LPOVERLAPPED lpOverlapped
  3582.     );
  3583. WINBASEAPI
  3584. BOOL
  3585. WINAPI
  3586. WriteFileGather(
  3587.     IN HANDLE hFile,
  3588.     OUT FILE_SEGMENT_ELEMENT aSegmentArray[],
  3589.     IN DWORD nNumberOfBytesToWrite,
  3590.     IN LPDWORD lpReserved,
  3591.     IN LPOVERLAPPED lpOverlapped
  3592.     );
  3593. //
  3594. // Dual Mode API below this line. Dual Mode Structures also included.
  3595. //
  3596. #define STARTF_USESHOWWINDOW    0x00000001
  3597. #define STARTF_USESIZE          0x00000002
  3598. #define STARTF_USEPOSITION      0x00000004
  3599. #define STARTF_USECOUNTCHARS    0x00000008
  3600. #define STARTF_USEFILLATTRIBUTE 0x00000010
  3601. #define STARTF_RUNFULLSCREEN    0x00000020  // ignored for non-x86 platforms
  3602. #define STARTF_FORCEONFEEDBACK  0x00000040
  3603. #define STARTF_FORCEOFFFEEDBACK 0x00000080
  3604. #define STARTF_USESTDHANDLES    0x00000100
  3605. #if(WINVER >= 0x0400)
  3606. #define STARTF_USEHOTKEY        0x00000200
  3607. #endif /* WINVER >= 0x0400 */
  3608. typedef struct _STARTUPINFOA {
  3609.     DWORD   cb;
  3610.     LPSTR   lpReserved;
  3611.     LPSTR   lpDesktop;
  3612.     LPSTR   lpTitle;
  3613.     DWORD   dwX;
  3614.     DWORD   dwY;
  3615.     DWORD   dwXSize;
  3616.     DWORD   dwYSize;
  3617.     DWORD   dwXCountChars;
  3618.     DWORD   dwYCountChars;
  3619.     DWORD   dwFillAttribute;
  3620.     DWORD   dwFlags;
  3621.     WORD    wShowWindow;
  3622.     WORD    cbReserved2;
  3623.     LPBYTE  lpReserved2;
  3624.     HANDLE  hStdInput;
  3625.     HANDLE  hStdOutput;
  3626.     HANDLE  hStdError;
  3627. } STARTUPINFOA, *LPSTARTUPINFOA;
  3628. typedef struct _STARTUPINFOW {
  3629.     DWORD   cb;
  3630.     LPWSTR  lpReserved;
  3631.     LPWSTR  lpDesktop;
  3632.     LPWSTR  lpTitle;
  3633.     DWORD   dwX;
  3634.     DWORD   dwY;
  3635.     DWORD   dwXSize;
  3636.     DWORD   dwYSize;
  3637.     DWORD   dwXCountChars;
  3638.     DWORD   dwYCountChars;
  3639.     DWORD   dwFillAttribute;
  3640.     DWORD   dwFlags;
  3641.     WORD    wShowWindow;
  3642.     WORD    cbReserved2;
  3643.     LPBYTE  lpReserved2;
  3644.     HANDLE  hStdInput;
  3645.     HANDLE  hStdOutput;
  3646.     HANDLE  hStdError;
  3647. } STARTUPINFOW, *LPSTARTUPINFOW;
  3648. #ifdef UNICODE
  3649. typedef STARTUPINFOW STARTUPINFO;
  3650. typedef LPSTARTUPINFOW LPSTARTUPINFO;
  3651. #else
  3652. typedef STARTUPINFOA STARTUPINFO;
  3653. typedef LPSTARTUPINFOA LPSTARTUPINFO;
  3654. #endif // UNICODE
  3655. #define SHUTDOWN_NORETRY                0x00000001
  3656. typedef struct _WIN32_FIND_DATAA {
  3657.     DWORD dwFileAttributes;
  3658.     FILETIME ftCreationTime;
  3659.     FILETIME ftLastAccessTime;
  3660.     FILETIME ftLastWriteTime;
  3661.     DWORD nFileSizeHigh;
  3662.     DWORD nFileSizeLow;
  3663.     DWORD dwReserved0;
  3664.     DWORD dwReserved1;
  3665.     CHAR   cFileName[ MAX_PATH ];
  3666.     CHAR   cAlternateFileName[ 14 ];
  3667. #ifdef _MAC
  3668.     DWORD dwFileType;
  3669.     DWORD dwCreatorType;
  3670.     WORD  wFinderFlags;
  3671. #endif
  3672. } WIN32_FIND_DATAA, *PWIN32_FIND_DATAA, *LPWIN32_FIND_DATAA;
  3673. typedef struct _WIN32_FIND_DATAW {
  3674.     DWORD dwFileAttributes;
  3675.     FILETIME ftCreationTime;
  3676.     FILETIME ftLastAccessTime;
  3677.     FILETIME ftLastWriteTime;
  3678.     DWORD nFileSizeHigh;
  3679.     DWORD nFileSizeLow;
  3680.     DWORD dwReserved0;
  3681.     DWORD dwReserved1;
  3682.     WCHAR  cFileName[ MAX_PATH ];
  3683.     WCHAR  cAlternateFileName[ 14 ];
  3684. #ifdef _MAC
  3685.     DWORD dwFileType;
  3686.     DWORD dwCreatorType;
  3687.     WORD  wFinderFlags;
  3688. #endif
  3689. } WIN32_FIND_DATAW, *PWIN32_FIND_DATAW, *LPWIN32_FIND_DATAW;
  3690. #ifdef UNICODE
  3691. typedef WIN32_FIND_DATAW WIN32_FIND_DATA;
  3692. typedef PWIN32_FIND_DATAW PWIN32_FIND_DATA;
  3693. typedef LPWIN32_FIND_DATAW LPWIN32_FIND_DATA;
  3694. #else
  3695. typedef WIN32_FIND_DATAA WIN32_FIND_DATA;
  3696. typedef PWIN32_FIND_DATAA PWIN32_FIND_DATA;
  3697. typedef LPWIN32_FIND_DATAA LPWIN32_FIND_DATA;
  3698. #endif // UNICODE
  3699. typedef struct _WIN32_FILE_ATTRIBUTE_DATA {
  3700.     DWORD dwFileAttributes;
  3701.     FILETIME ftCreationTime;
  3702.     FILETIME ftLastAccessTime;
  3703.     FILETIME ftLastWriteTime;
  3704.     DWORD nFileSizeHigh;
  3705.     DWORD nFileSizeLow;
  3706. } WIN32_FILE_ATTRIBUTE_DATA, *LPWIN32_FILE_ATTRIBUTE_DATA;
  3707. WINBASEAPI
  3708. HANDLE
  3709. WINAPI
  3710. CreateMutexA(
  3711.     IN LPSECURITY_ATTRIBUTES lpMutexAttributes,
  3712.     IN BOOL bInitialOwner,
  3713.     IN LPCSTR lpName
  3714.     );
  3715. WINBASEAPI
  3716. HANDLE
  3717. WINAPI
  3718. CreateMutexW(
  3719.     IN LPSECURITY_ATTRIBUTES lpMutexAttributes,
  3720.     IN BOOL bInitialOwner,
  3721.     IN LPCWSTR lpName
  3722.     );
  3723. #ifdef UNICODE
  3724. #define CreateMutex  CreateMutexW
  3725. #else
  3726. #define CreateMutex  CreateMutexA
  3727. #endif // !UNICODE
  3728. WINBASEAPI
  3729. HANDLE
  3730. WINAPI
  3731. OpenMutexA(
  3732.     IN DWORD dwDesiredAccess,
  3733.     IN BOOL bInheritHandle,
  3734.     IN LPCSTR lpName
  3735.     );
  3736. WINBASEAPI
  3737. HANDLE
  3738. WINAPI
  3739. OpenMutexW(
  3740.     IN DWORD dwDesiredAccess,
  3741.     IN BOOL bInheritHandle,
  3742.     IN LPCWSTR lpName
  3743.     );
  3744. #ifdef UNICODE
  3745. #define OpenMutex  OpenMutexW
  3746. #else
  3747. #define OpenMutex  OpenMutexA
  3748. #endif // !UNICODE
  3749. WINBASEAPI
  3750. HANDLE
  3751. WINAPI
  3752. CreateEventA(
  3753.     IN LPSECURITY_ATTRIBUTES lpEventAttributes,
  3754.     IN BOOL bManualReset,
  3755.     IN BOOL bInitialState,
  3756.     IN LPCSTR lpName
  3757.     );
  3758. WINBASEAPI
  3759. HANDLE
  3760. WINAPI
  3761. CreateEventW(
  3762.     IN LPSECURITY_ATTRIBUTES lpEventAttributes,
  3763.     IN BOOL bManualReset,
  3764.     IN BOOL bInitialState,
  3765.     IN LPCWSTR lpName
  3766.     );
  3767. #ifdef UNICODE
  3768. #define CreateEvent  CreateEventW
  3769. #else
  3770. #define CreateEvent  CreateEventA
  3771. #endif // !UNICODE
  3772. WINBASEAPI
  3773. HANDLE
  3774. WINAPI
  3775. OpenEventA(
  3776.     IN DWORD dwDesiredAccess,
  3777.     IN BOOL bInheritHandle,
  3778.     IN LPCSTR lpName
  3779.     );
  3780. WINBASEAPI
  3781. HANDLE
  3782. WINAPI
  3783. OpenEventW(
  3784.     IN DWORD dwDesiredAccess,
  3785.     IN BOOL bInheritHandle,
  3786.     IN LPCWSTR lpName
  3787.     );
  3788. #ifdef UNICODE
  3789. #define OpenEvent  OpenEventW
  3790. #else
  3791. #define OpenEvent  OpenEventA
  3792. #endif // !UNICODE
  3793. WINBASEAPI
  3794. HANDLE
  3795. WINAPI
  3796. CreateSemaphoreA(
  3797.     IN LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,
  3798.     IN LONG lInitialCount,
  3799.     IN LONG lMaximumCount,
  3800.     IN LPCSTR lpName
  3801.     );
  3802. WINBASEAPI
  3803. HANDLE
  3804. WINAPI
  3805. CreateSemaphoreW(
  3806.     IN LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,
  3807.     IN LONG lInitialCount,
  3808.     IN LONG lMaximumCount,
  3809.     IN LPCWSTR lpName
  3810.     );
  3811. #ifdef UNICODE
  3812. #define CreateSemaphore  CreateSemaphoreW
  3813. #else
  3814. #define CreateSemaphore  CreateSemaphoreA
  3815. #endif // !UNICODE
  3816. WINBASEAPI
  3817. HANDLE
  3818. WINAPI
  3819. OpenSemaphoreA(
  3820.     IN DWORD dwDesiredAccess,
  3821.     IN BOOL bInheritHandle,
  3822.     IN LPCSTR lpName
  3823.     );
  3824. WINBASEAPI
  3825. HANDLE
  3826. WINAPI
  3827. OpenSemaphoreW(
  3828.     IN DWORD dwDesiredAccess,
  3829.     IN BOOL bInheritHandle,
  3830.     IN LPCWSTR lpName
  3831.     );
  3832. #ifdef UNICODE
  3833. #define OpenSemaphore  OpenSemaphoreW
  3834. #else
  3835. #define OpenSemaphore  OpenSemaphoreA
  3836. #endif // !UNICODE
  3837. #if (_WIN32_WINNT >= 0x0400) || (_WIN32_WINDOWS > 0x0400)
  3838. typedef
  3839. VOID
  3840. (APIENTRY *PTIMERAPCROUTINE)(
  3841.     LPVOID lpArgToCompletionRoutine,
  3842.     DWORD dwTimerLowValue,
  3843.     DWORD dwTimerHighValue
  3844.     );
  3845. WINBASEAPI
  3846. HANDLE
  3847. WINAPI
  3848. CreateWaitableTimerA(
  3849.     IN LPSECURITY_ATTRIBUTES lpTimerAttributes,
  3850.     IN BOOL bManualReset,
  3851.     IN LPCSTR lpTimerName
  3852.     );
  3853. WINBASEAPI
  3854. HANDLE
  3855. WINAPI
  3856. CreateWaitableTimerW(
  3857.     IN LPSECURITY_ATTRIBUTES lpTimerAttributes,
  3858.     IN BOOL bManualReset,
  3859.     IN LPCWSTR lpTimerName
  3860.     );
  3861. #ifdef UNICODE
  3862. #define CreateWaitableTimer  CreateWaitableTimerW
  3863. #else
  3864. #define CreateWaitableTimer  CreateWaitableTimerA
  3865. #endif // !UNICODE
  3866. WINBASEAPI
  3867. HANDLE
  3868. WINAPI
  3869. OpenWaitableTimerA(
  3870.     IN DWORD dwDesiredAccess,
  3871.     IN BOOL bInheritHandle,
  3872.     IN LPCSTR lpTimerName
  3873.     );
  3874. WINBASEAPI
  3875. HANDLE
  3876. WINAPI
  3877. OpenWaitableTimerW(
  3878.     IN DWORD dwDesiredAccess,
  3879.     IN BOOL bInheritHandle,
  3880.     IN LPCWSTR lpTimerName
  3881.     );
  3882. #ifdef UNICODE
  3883. #define OpenWaitableTimer  OpenWaitableTimerW
  3884. #else
  3885. #define OpenWaitableTimer  OpenWaitableTimerA
  3886. #endif // !UNICODE
  3887. WINBASEAPI
  3888. BOOL
  3889. WINAPI
  3890. SetWaitableTimer(
  3891.     IN HANDLE hTimer,
  3892.     IN const LARGE_INTEGER *lpDueTime,
  3893.     IN LONG lPeriod,
  3894.     IN PTIMERAPCROUTINE pfnCompletionRoutine,
  3895.     IN LPVOID lpArgToCompletionRoutine,
  3896.     IN BOOL fResume
  3897.     );
  3898. WINBASEAPI
  3899. BOOL
  3900. WINAPI
  3901. CancelWaitableTimer(
  3902.     IN HANDLE hTimer
  3903.     );
  3904. #endif /* (_WIN32_WINNT >= 0x0400) || (_WIN32_WINDOWS > 0x0400) */
  3905. WINBASEAPI
  3906. HANDLE
  3907. WINAPI
  3908. CreateFileMappingA(
  3909.     IN HANDLE hFile,
  3910.     IN LPSECURITY_ATTRIBUTES lpFileMappingAttributes,
  3911.     IN DWORD flProtect,
  3912.     IN DWORD dwMaximumSizeHigh,
  3913.     IN DWORD dwMaximumSizeLow,
  3914.     IN LPCSTR lpName
  3915.     );
  3916. WINBASEAPI
  3917. HANDLE
  3918. WINAPI
  3919. CreateFileMappingW(
  3920.     IN HANDLE hFile,
  3921.     IN LPSECURITY_ATTRIBUTES lpFileMappingAttributes,
  3922.     IN DWORD flProtect,
  3923.     IN DWORD dwMaximumSizeHigh,
  3924.     IN DWORD dwMaximumSizeLow,
  3925.     IN LPCWSTR lpName
  3926.     );
  3927. #ifdef UNICODE
  3928. #define CreateFileMapping  CreateFileMappingW
  3929. #else
  3930. #define CreateFileMapping  CreateFileMappingA
  3931. #endif // !UNICODE
  3932. WINBASEAPI
  3933. HANDLE
  3934. WINAPI
  3935. OpenFileMappingA(
  3936.     IN DWORD dwDesiredAccess,
  3937.     IN BOOL bInheritHandle,
  3938.     IN LPCSTR lpName
  3939.     );
  3940. WINBASEAPI
  3941. HANDLE
  3942. WINAPI
  3943. OpenFileMappingW(
  3944.     IN DWORD dwDesiredAccess,
  3945.     IN BOOL bInheritHandle,
  3946.     IN LPCWSTR lpName
  3947.     );
  3948. #ifdef UNICODE
  3949. #define OpenFileMapping  OpenFileMappingW
  3950. #else
  3951. #define OpenFileMapping  OpenFileMappingA
  3952. #endif // !UNICODE
  3953. WINBASEAPI
  3954. DWORD
  3955. WINAPI
  3956. GetLogicalDriveStringsA(
  3957.     IN DWORD nBufferLength,
  3958.     OUT LPSTR lpBuffer
  3959.     );
  3960. WINBASEAPI
  3961. DWORD
  3962. WINAPI
  3963. GetLogicalDriveStringsW(
  3964.     IN DWORD nBufferLength,
  3965.     OUT LPWSTR lpBuffer
  3966.     );
  3967. #ifdef UNICODE
  3968. #define GetLogicalDriveStrings  GetLogicalDriveStringsW
  3969. #else
  3970. #define GetLogicalDriveStrings  GetLogicalDriveStringsA
  3971. #endif // !UNICODE
  3972. #if _WIN32_WINNT >= 0x0501
  3973. typedef enum _MEMORY_RESOURCE_NOTIFICATION_TYPE {
  3974.     LowMemoryResourceNotification,
  3975.     HighMemoryResourceNotification
  3976. } MEMORY_RESOURCE_NOTIFICATION_TYPE;
  3977. WINBASEAPI
  3978. HANDLE
  3979. WINAPI
  3980. CreateMemoryResourceNotification(
  3981.     IN MEMORY_RESOURCE_NOTIFICATION_TYPE NotificationType
  3982.     );
  3983. WINBASEAPI
  3984. BOOL
  3985. WINAPI
  3986. QueryMemoryResourceNotification(
  3987.     IN  HANDLE ResourceNotificationHandle,
  3988.     OUT PBOOL  ResourceState
  3989.     );
  3990. #endif // _WIN32_WINNT >= 0x0501
  3991. WINBASEAPI
  3992. HMODULE
  3993. WINAPI
  3994. LoadLibraryA(
  3995.     IN LPCSTR lpLibFileName
  3996.     );
  3997. WINBASEAPI
  3998. HMODULE
  3999. WINAPI
  4000. LoadLibraryW(
  4001.     IN LPCWSTR lpLibFileName
  4002.     );
  4003. #ifdef UNICODE
  4004. #define LoadLibrary  LoadLibraryW
  4005. #else
  4006. #define LoadLibrary  LoadLibraryA
  4007. #endif // !UNICODE
  4008. WINBASEAPI
  4009. HMODULE
  4010. WINAPI
  4011. LoadLibraryExA(
  4012.     IN LPCSTR lpLibFileName,
  4013.     IN HANDLE hFile,
  4014.     IN DWORD dwFlags
  4015.     );
  4016. WINBASEAPI
  4017. HMODULE
  4018. WINAPI
  4019. LoadLibraryExW(
  4020.     IN LPCWSTR lpLibFileName,
  4021.     IN HANDLE hFile,
  4022.     IN DWORD dwFlags
  4023.     );
  4024. #ifdef UNICODE
  4025. #define LoadLibraryEx  LoadLibraryExW
  4026. #else
  4027. #define LoadLibraryEx  LoadLibraryExA
  4028. #endif // !UNICODE
  4029. #define DONT_RESOLVE_DLL_REFERENCES     0x00000001
  4030. #define LOAD_LIBRARY_AS_DATAFILE        0x00000002
  4031. #define LOAD_WITH_ALTERED_SEARCH_PATH   0x00000008
  4032. #define LOAD_IGNORE_CODE_AUTHZ_LEVEL    0x00000010
  4033. WINBASEAPI
  4034. DWORD
  4035. WINAPI
  4036. GetModuleFileNameA(
  4037.     IN HMODULE hModule,
  4038.     OUT LPSTR lpFilename,
  4039.     IN DWORD nSize
  4040.     );
  4041. WINBASEAPI
  4042. DWORD
  4043. WINAPI
  4044. GetModuleFileNameW(
  4045.     IN HMODULE hModule,
  4046.     OUT LPWSTR lpFilename,
  4047.     IN DWORD nSize
  4048.     );
  4049. #ifdef UNICODE
  4050. #define GetModuleFileName  GetModuleFileNameW
  4051. #else
  4052. #define GetModuleFileName  GetModuleFileNameA
  4053. #endif // !UNICODE
  4054. WINBASEAPI
  4055. HMODULE
  4056. WINAPI
  4057. GetModuleHandleA(
  4058.     IN LPCSTR lpModuleName
  4059.     );
  4060. WINBASEAPI
  4061. HMODULE
  4062. WINAPI
  4063. GetModuleHandleW(
  4064.     IN LPCWSTR lpModuleName
  4065.     );
  4066. #ifdef UNICODE
  4067. #define GetModuleHandle  GetModuleHandleW
  4068. #else
  4069. #define GetModuleHandle  GetModuleHandleA
  4070. #endif // !UNICODE
  4071. #if !defined(RC_INVOKED)
  4072. #if _WIN32_WINNT > 0x0500 || defined(WINBASE_DECLARE_GET_MODULE_HANDLE_EX) || ISOLATION_AWARE_ENABLED
  4073. #define GET_MODULE_HANDLE_EX_FLAG_PIN                 (0x00000001)
  4074. #define GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT  (0x00000002)
  4075. #define GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS        (0x00000004)
  4076. typedef
  4077. BOOL
  4078. (WINAPI*
  4079. PGET_MODULE_HANDLE_EXA)(
  4080.     IN DWORD        dwFlags,
  4081.     IN LPCSTR     lpModuleName,
  4082.     OUT HMODULE*    phModule
  4083.     );
  4084. typedef
  4085. BOOL
  4086. (WINAPI*
  4087. PGET_MODULE_HANDLE_EXW)(
  4088.     IN DWORD        dwFlags,
  4089.     IN LPCWSTR     lpModuleName,
  4090.     OUT HMODULE*    phModule
  4091.     );
  4092. #ifdef UNICODE
  4093. #define PGET_MODULE_HANDLE_EX  PGET_MODULE_HANDLE_EXW
  4094. #else
  4095. #define PGET_MODULE_HANDLE_EX  PGET_MODULE_HANDLE_EXA
  4096. #endif // !UNICODE
  4097. WINBASEAPI
  4098. BOOL
  4099. WINAPI
  4100. GetModuleHandleExA(
  4101.     IN DWORD        dwFlags,
  4102.     IN LPCSTR     lpModuleName,
  4103.     OUT HMODULE*    phModule
  4104.     );
  4105. WINBASEAPI
  4106. BOOL
  4107. WINAPI
  4108. GetModuleHandleExW(
  4109.     IN DWORD        dwFlags,
  4110.     IN LPCWSTR     lpModuleName,
  4111.     OUT HMODULE*    phModule
  4112.     );
  4113. #ifdef UNICODE
  4114. #define GetModuleHandleEx  GetModuleHandleExW
  4115. #else
  4116. #define GetModuleHandleEx  GetModuleHandleExA
  4117. #endif // !UNICODE
  4118. #endif
  4119. #endif
  4120. WINBASEAPI
  4121. BOOL
  4122. WINAPI
  4123. CreateProcessA(
  4124.     IN LPCSTR lpApplicationName,
  4125.     IN LPSTR lpCommandLine,
  4126.     IN LPSECURITY_ATTRIBUTES lpProcessAttributes,
  4127.     IN LPSECURITY_ATTRIBUTES lpThreadAttributes,
  4128.     IN BOOL bInheritHandles,
  4129.     IN DWORD dwCreationFlags,
  4130.     IN LPVOID lpEnvironment,
  4131.     IN LPCSTR lpCurrentDirectory,
  4132.     IN LPSTARTUPINFOA lpStartupInfo,
  4133.     OUT LPPROCESS_INFORMATION lpProcessInformation
  4134.     );
  4135. WINBASEAPI
  4136. BOOL
  4137. WINAPI
  4138. CreateProcessW(
  4139.     IN LPCWSTR lpApplicationName,
  4140.     IN LPWSTR lpCommandLine,
  4141.     IN LPSECURITY_ATTRIBUTES lpProcessAttributes,
  4142.     IN LPSECURITY_ATTRIBUTES lpThreadAttributes,
  4143.     IN BOOL bInheritHandles,
  4144.     IN DWORD dwCreationFlags,
  4145.     IN LPVOID lpEnvironment,
  4146.     IN LPCWSTR lpCurrentDirectory,
  4147.     IN LPSTARTUPINFOW lpStartupInfo,
  4148.     OUT LPPROCESS_INFORMATION lpProcessInformation
  4149.     );
  4150. #ifdef UNICODE
  4151. #define CreateProcess  CreateProcessW
  4152. #else
  4153. #define CreateProcess  CreateProcessA
  4154. #endif // !UNICODE
  4155. WINBASEAPI
  4156. BOOL
  4157. WINAPI
  4158. SetProcessShutdownParameters(
  4159.     IN DWORD dwLevel,
  4160.     IN DWORD dwFlags
  4161.     );
  4162. WINBASEAPI
  4163. BOOL
  4164. WINAPI
  4165. GetProcessShutdownParameters(
  4166.     OUT LPDWORD lpdwLevel,
  4167.     OUT LPDWORD lpdwFlags
  4168.     );
  4169. WINBASEAPI
  4170. DWORD
  4171. WINAPI
  4172. GetProcessVersion(
  4173.     IN DWORD ProcessId
  4174.     );
  4175. WINBASEAPI
  4176. VOID
  4177. WINAPI
  4178. FatalAppExitA(
  4179.     IN UINT uAction,
  4180.     IN LPCSTR lpMessageText
  4181.     );
  4182. WINBASEAPI
  4183. VOID
  4184. WINAPI
  4185. FatalAppExitW(
  4186.     IN UINT uAction,
  4187.     IN LPCWSTR lpMessageText
  4188.     );
  4189. #ifdef UNICODE
  4190. #define FatalAppExit  FatalAppExitW
  4191. #else
  4192. #define FatalAppExit  FatalAppExitA
  4193. #endif // !UNICODE
  4194. WINBASEAPI
  4195. VOID
  4196. WINAPI
  4197. GetStartupInfoA(
  4198.     OUT LPSTARTUPINFOA lpStartupInfo
  4199.     );
  4200. WINBASEAPI
  4201. VOID
  4202. WINAPI
  4203. GetStartupInfoW(
  4204.     OUT LPSTARTUPINFOW lpStartupInfo
  4205.     );
  4206. #ifdef UNICODE
  4207. #define GetStartupInfo  GetStartupInfoW
  4208. #else
  4209. #define GetStartupInfo  GetStartupInfoA
  4210. #endif // !UNICODE
  4211. WINBASEAPI
  4212. LPSTR
  4213. WINAPI
  4214. GetCommandLineA(
  4215.     VOID
  4216.     );
  4217. WINBASEAPI
  4218. LPWSTR
  4219. WINAPI
  4220. GetCommandLineW(
  4221.     VOID
  4222.     );
  4223. #ifdef UNICODE
  4224. #define GetCommandLine  GetCommandLineW
  4225. #else
  4226. #define GetCommandLine  GetCommandLineA
  4227. #endif // !UNICODE
  4228. WINBASEAPI
  4229. DWORD
  4230. WINAPI
  4231. GetEnvironmentVariableA(
  4232.     IN LPCSTR lpName,
  4233.     OUT LPSTR lpBuffer,
  4234.     IN DWORD nSize
  4235.     );
  4236. WINBASEAPI
  4237. DWORD
  4238. WINAPI
  4239. GetEnvironmentVariableW(
  4240.     IN LPCWSTR lpName,
  4241.     OUT LPWSTR lpBuffer,
  4242.     IN DWORD nSize
  4243.     );
  4244. #ifdef UNICODE
  4245. #define GetEnvironmentVariable  GetEnvironmentVariableW
  4246. #else
  4247. #define GetEnvironmentVariable  GetEnvironmentVariableA
  4248. #endif // !UNICODE
  4249. WINBASEAPI
  4250. BOOL
  4251. WINAPI
  4252. SetEnvironmentVariableA(
  4253.     IN LPCSTR lpName,
  4254.     IN LPCSTR lpValue
  4255.     );
  4256. WINBASEAPI
  4257. BOOL
  4258. WINAPI
  4259. SetEnvironmentVariableW(
  4260.     IN LPCWSTR lpName,
  4261.     IN LPCWSTR lpValue
  4262.     );
  4263. #ifdef UNICODE
  4264. #define SetEnvironmentVariable  SetEnvironmentVariableW
  4265. #else
  4266. #define SetEnvironmentVariable  SetEnvironmentVariableA
  4267. #endif // !UNICODE
  4268. WINBASEAPI
  4269. DWORD
  4270. WINAPI
  4271. ExpandEnvironmentStringsA(
  4272.     IN LPCSTR lpSrc,
  4273.     OUT LPSTR lpDst,
  4274.     IN DWORD nSize
  4275.     );
  4276. WINBASEAPI
  4277. DWORD
  4278. WINAPI
  4279. ExpandEnvironmentStringsW(
  4280.     IN LPCWSTR lpSrc,
  4281.     OUT LPWSTR lpDst,
  4282.     IN DWORD nSize
  4283.     );
  4284. #ifdef UNICODE
  4285. #define ExpandEnvironmentStrings  ExpandEnvironmentStringsW
  4286. #else
  4287. #define ExpandEnvironmentStrings  ExpandEnvironmentStringsA
  4288. #endif // !UNICODE
  4289. WINBASEAPI
  4290. DWORD
  4291. WINAPI
  4292. GetFirmwareEnvironmentVariableA(
  4293.     IN LPCSTR lpName,
  4294.     IN LPCSTR lpGuid,
  4295.     OUT PVOID   pBuffer,
  4296.     IN DWORD    nSize
  4297.     );
  4298. WINBASEAPI
  4299. DWORD
  4300. WINAPI
  4301. GetFirmwareEnvironmentVariableW(
  4302.     IN LPCWSTR lpName,
  4303.     IN LPCWSTR lpGuid,
  4304.     OUT PVOID   pBuffer,
  4305.     IN DWORD    nSize
  4306.     );
  4307. #ifdef UNICODE
  4308. #define GetFirmwareEnvironmentVariable  GetFirmwareEnvironmentVariableW
  4309. #else
  4310. #define GetFirmwareEnvironmentVariable  GetFirmwareEnvironmentVariableA
  4311. #endif // !UNICODE
  4312. WINBASEAPI
  4313. BOOL
  4314. WINAPI
  4315. SetFirmwareEnvironmentVariableA(
  4316.     IN LPCSTR lpName,
  4317.     IN LPCSTR lpGuid,
  4318.     IN PVOID    pValue,
  4319.     IN DWORD    nSize
  4320.     );
  4321. WINBASEAPI
  4322. BOOL
  4323. WINAPI
  4324. SetFirmwareEnvironmentVariableW(
  4325.     IN LPCWSTR lpName,
  4326.     IN LPCWSTR lpGuid,
  4327.     IN PVOID    pValue,
  4328.     IN DWORD    nSize
  4329.     );
  4330. #ifdef UNICODE
  4331. #define SetFirmwareEnvironmentVariable  SetFirmwareEnvironmentVariableW
  4332. #else
  4333. #define SetFirmwareEnvironmentVariable  SetFirmwareEnvironmentVariableA
  4334. #endif // !UNICODE
  4335. WINBASEAPI
  4336. VOID
  4337. WINAPI
  4338. OutputDebugStringA(
  4339.     IN LPCSTR lpOutputString
  4340.     );
  4341. WINBASEAPI
  4342. VOID
  4343. WINAPI
  4344. OutputDebugStringW(
  4345.     IN LPCWSTR lpOutputString
  4346.     );
  4347. #ifdef UNICODE
  4348. #define OutputDebugString  OutputDebugStringW
  4349. #else
  4350. #define OutputDebugString  OutputDebugStringA
  4351. #endif // !UNICODE
  4352. WINBASEAPI
  4353. HRSRC
  4354. WINAPI
  4355. FindResourceA(
  4356.     IN HMODULE hModule,
  4357.     IN LPCSTR lpName,
  4358.     IN LPCSTR lpType
  4359.     );
  4360. WINBASEAPI
  4361. HRSRC
  4362. WINAPI
  4363. FindResourceW(
  4364.     IN HMODULE hModule,
  4365.     IN LPCWSTR lpName,
  4366.     IN LPCWSTR lpType
  4367.     );
  4368. #ifdef UNICODE
  4369. #define FindResource  FindResourceW
  4370. #else
  4371. #define FindResource  FindResourceA
  4372. #endif // !UNICODE
  4373. WINBASEAPI
  4374. HRSRC
  4375. WINAPI
  4376. FindResourceExA(
  4377.     IN HMODULE hModule,
  4378.     IN LPCSTR lpType,
  4379.     IN LPCSTR lpName,
  4380.     IN WORD    wLanguage
  4381.     );
  4382. WINBASEAPI
  4383. HRSRC
  4384. WINAPI
  4385. FindResourceExW(
  4386.     IN HMODULE hModule,
  4387.     IN LPCWSTR lpType,
  4388.     IN LPCWSTR lpName,
  4389.     IN WORD    wLanguage
  4390.     );
  4391. #ifdef UNICODE
  4392. #define FindResourceEx  FindResourceExW
  4393. #else
  4394. #define FindResourceEx  FindResourceExA
  4395. #endif // !UNICODE
  4396. #ifdef STRICT
  4397. typedef BOOL (CALLBACK* ENUMRESTYPEPROCA)(HMODULE hModule, LPSTR lpType,
  4398.         LONG_PTR lParam);
  4399. typedef BOOL (CALLBACK* ENUMRESTYPEPROCW)(HMODULE hModule, LPWSTR lpType,
  4400.         LONG_PTR lParam);
  4401. #ifdef UNICODE
  4402. #define ENUMRESTYPEPROC  ENUMRESTYPEPROCW
  4403. #else
  4404. #define ENUMRESTYPEPROC  ENUMRESTYPEPROCA
  4405. #endif // !UNICODE
  4406. typedef BOOL (CALLBACK* ENUMRESNAMEPROCA)(HMODULE hModule, LPCSTR lpType,
  4407.         LPSTR lpName, LONG_PTR lParam);
  4408. typedef BOOL (CALLBACK* ENUMRESNAMEPROCW)(HMODULE hModule, LPCWSTR lpType,
  4409.         LPWSTR lpName, LONG_PTR lParam);
  4410. #ifdef UNICODE
  4411. #define ENUMRESNAMEPROC  ENUMRESNAMEPROCW
  4412. #else
  4413. #define ENUMRESNAMEPROC  ENUMRESNAMEPROCA
  4414. #endif // !UNICODE
  4415. typedef BOOL (CALLBACK* ENUMRESLANGPROCA)(HMODULE hModule, LPCSTR lpType,
  4416.         LPCSTR lpName, WORD  wLanguage, LONG_PTR lParam);
  4417. typedef BOOL (CALLBACK* ENUMRESLANGPROCW)(HMODULE hModule, LPCWSTR lpType,
  4418.         LPCWSTR lpName, WORD  wLanguage, LONG_PTR lParam);
  4419. #ifdef UNICODE
  4420. #define ENUMRESLANGPROC  ENUMRESLANGPROCW
  4421. #else
  4422. #define ENUMRESLANGPROC  ENUMRESLANGPROCA
  4423. #endif // !UNICODE
  4424. #else
  4425. typedef FARPROC ENUMRESTYPEPROCA;
  4426. typedef FARPROC ENUMRESTYPEPROCW;
  4427. #ifdef UNICODE