PageRenderTime 79ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 1ms

/binding/win32/winbase.d

http://github.com/wilkie/djehuty
D | 10445 lines | 8157 code | 1877 blank | 411 comment | 215 complexity | 05ea4678f52a2975e34e288e325d5799 MD5 | raw file
  1. /*
  2. * winbase.d
  3. *
  4. * This module is a port of winbase.h to D.
  5. * The original copyright notice appears after this information block.
  6. *
  7. * Author: Dave Wilkinson
  8. * Originated: November 24th, 2009
  9. *
  10. */
  11. module binding.win32.winbase;
  12. import binding.c;
  13. import binding.win32.guiddef;
  14. import binding.win32.windef;
  15. import binding.win32.winnt;
  16. import binding.win32.ntstatus;
  17. extern(System):
  18. /************************************************************************
  19. * *
  20. * winbase.h -- This module defines the 32-Bit Windows Base APIs *
  21. * *
  22. * Copyright (c) Microsoft Corp. All rights reserved. *
  23. * *
  24. ************************************************************************/
  25. const auto INVALID_HANDLE_VALUE = (cast(HANDLE)cast(LONG_PTR)-1);
  26. const auto INVALID_FILE_SIZE = (cast(DWORD)0xFFFFFFFF);
  27. const auto INVALID_SET_FILE_POINTER = (cast(DWORD)-1);
  28. const auto INVALID_FILE_ATTRIBUTES = (cast(DWORD)-1);
  29. const auto FILE_BEGIN = 0;
  30. const auto FILE_CURRENT = 1;
  31. const auto FILE_END = 2;
  32. const auto TIME_ZONE_ID_INVALID = (cast(DWORD)0xFFFFFFFF);
  33. const auto WAIT_FAILED = (cast(DWORD)0xFFFFFFFF);
  34. const auto WAIT_OBJECT_0 = ((STATUS_WAIT_0 ) + 0 );
  35. const auto WAIT_ABANDONED = ((STATUS_ABANDONED_WAIT_0 ) + 0 );
  36. const auto WAIT_ABANDONED_0 = ((STATUS_ABANDONED_WAIT_0 ) + 0 );
  37. const auto WAIT_IO_COMPLETION = STATUS_USER_APC;
  38. const auto STILL_ACTIVE = STATUS_PENDING;
  39. const auto EXCEPTION_ACCESS_VIOLATION = STATUS_ACCESS_VIOLATION;
  40. const auto EXCEPTION_DATATYPE_MISALIGNMENT = STATUS_DATATYPE_MISALIGNMENT;
  41. const auto EXCEPTION_BREAKPOINT = STATUS_BREAKPOINT;
  42. const auto EXCEPTION_SINGLE_STEP = STATUS_SINGLE_STEP;
  43. const auto EXCEPTION_ARRAY_BOUNDS_EXCEEDED = STATUS_ARRAY_BOUNDS_EXCEEDED;
  44. const auto EXCEPTION_FLT_DENORMAL_OPERAND = STATUS_FLOAT_DENORMAL_OPERAND;
  45. const auto EXCEPTION_FLT_DIVIDE_BY_ZERO = STATUS_FLOAT_DIVIDE_BY_ZERO;
  46. const auto EXCEPTION_FLT_INEXACT_RESULT = STATUS_FLOAT_INEXACT_RESULT;
  47. const auto EXCEPTION_FLT_INVALID_OPERATION = STATUS_FLOAT_INVALID_OPERATION;
  48. const auto EXCEPTION_FLT_OVERFLOW = STATUS_FLOAT_OVERFLOW;
  49. const auto EXCEPTION_FLT_STACK_CHECK = STATUS_FLOAT_STACK_CHECK;
  50. const auto EXCEPTION_FLT_UNDERFLOW = STATUS_FLOAT_UNDERFLOW;
  51. const auto EXCEPTION_INT_DIVIDE_BY_ZERO = STATUS_INTEGER_DIVIDE_BY_ZERO;
  52. const auto EXCEPTION_INT_OVERFLOW = STATUS_INTEGER_OVERFLOW;
  53. const auto EXCEPTION_PRIV_INSTRUCTION = STATUS_PRIVILEGED_INSTRUCTION;
  54. const auto EXCEPTION_IN_PAGE_ERROR = STATUS_IN_PAGE_ERROR;
  55. const auto EXCEPTION_ILLEGAL_INSTRUCTION = STATUS_ILLEGAL_INSTRUCTION;
  56. const auto EXCEPTION_NONCONTINUABLE_EXCEPTION = STATUS_NONCONTINUABLE_EXCEPTION;
  57. const auto EXCEPTION_STACK_OVERFLOW = STATUS_STACK_OVERFLOW;
  58. const auto EXCEPTION_INVALID_DISPOSITION = STATUS_INVALID_DISPOSITION;
  59. const auto EXCEPTION_GUARD_PAGE = STATUS_GUARD_PAGE_VIOLATION;
  60. const auto EXCEPTION_INVALID_HANDLE = STATUS_INVALID_HANDLE;
  61. const auto EXCEPTION_POSSIBLE_DEADLOCK = STATUS_POSSIBLE_DEADLOCK;
  62. const auto CONTROL_C_EXIT = STATUS_CONTROL_C_EXIT;
  63. alias RtlMoveMemory MoveMemory;
  64. alias RtlCopyMemory CopyMemory;
  65. alias RtlFillMemory FillMemory;
  66. alias RtlZeroMemory ZeroMemory;
  67. //alias SecureZeroMemory RtlSecureZeroMemory;
  68. //alias CaptureStackBackTrace RtlCaptureStackBackTrace;
  69. //
  70. // File creation flags must start at the high end since they
  71. // are combined with the attributes
  72. //
  73. const auto FILE_FLAG_WRITE_THROUGH = 0x80000000;
  74. const auto FILE_FLAG_OVERLAPPED = 0x40000000;
  75. const auto FILE_FLAG_NO_BUFFERING = 0x20000000;
  76. const auto FILE_FLAG_RANDOM_ACCESS = 0x10000000;
  77. const auto FILE_FLAG_SEQUENTIAL_SCAN = 0x08000000;
  78. const auto FILE_FLAG_DELETE_ON_CLOSE = 0x04000000;
  79. const auto FILE_FLAG_BACKUP_SEMANTICS = 0x02000000;
  80. const auto FILE_FLAG_POSIX_SEMANTICS = 0x01000000;
  81. const auto FILE_FLAG_OPEN_REPARSE_POINT = 0x00200000;
  82. const auto FILE_FLAG_OPEN_NO_RECALL = 0x00100000;
  83. const auto FILE_FLAG_FIRST_PIPE_INSTANCE = 0x00080000;
  84. const auto CREATE_NEW = 1;
  85. const auto CREATE_ALWAYS = 2;
  86. const auto OPEN_EXISTING = 3;
  87. const auto OPEN_ALWAYS = 4;
  88. const auto TRUNCATE_EXISTING = 5;
  89. //
  90. // Define possible return codes from the CopyFileEx callback routine
  91. //
  92. const auto PROGRESS_CONTINUE = 0;
  93. const auto PROGRESS_CANCEL = 1;
  94. const auto PROGRESS_STOP = 2;
  95. const auto PROGRESS_QUIET = 3;
  96. //
  97. // Define CopyFileEx callback routine state change values
  98. //
  99. const auto CALLBACK_CHUNK_FINISHED = 0x00000000;
  100. const auto CALLBACK_STREAM_SWITCH = 0x00000001;
  101. //
  102. // Define CopyFileEx option flags
  103. //
  104. const auto COPY_FILE_FAIL_IF_EXISTS = 0x00000001;
  105. const auto COPY_FILE_RESTARTABLE = 0x00000002;
  106. const auto COPY_FILE_OPEN_SOURCE_FOR_WRITE = 0x00000004;
  107. const auto COPY_FILE_ALLOW_DECRYPTED_DESTINATION = 0x00000008;
  108. //
  109. // Gap for private copyfile flags
  110. //
  111. const auto COPY_FILE_COPY_SYMLINK = 0x00000800;
  112. //
  113. // Define ReplaceFile option flags
  114. //
  115. const auto REPLACEFILE_WRITE_THROUGH = 0x00000001;
  116. const auto REPLACEFILE_IGNORE_MERGE_ERRORS = 0x00000002;
  117. //
  118. // Define the NamedPipe definitions
  119. //
  120. //
  121. // Define the dwOpenMode values for CreateNamedPipe
  122. //
  123. const auto PIPE_ACCESS_INBOUND = 0x00000001;
  124. const auto PIPE_ACCESS_OUTBOUND = 0x00000002;
  125. const auto PIPE_ACCESS_DUPLEX = 0x00000003;
  126. //
  127. // Define the Named Pipe End flags for GetNamedPipeInfo
  128. //
  129. const auto PIPE_CLIENT_END = 0x00000000;
  130. const auto PIPE_SERVER_END = 0x00000001;
  131. //
  132. // Define the dwPipeMode values for CreateNamedPipe
  133. //
  134. const auto PIPE_WAIT = 0x00000000;
  135. const auto PIPE_NOWAIT = 0x00000001;
  136. const auto PIPE_READMODE_BYTE = 0x00000000;
  137. const auto PIPE_READMODE_MESSAGE = 0x00000002;
  138. const auto PIPE_TYPE_BYTE = 0x00000000;
  139. const auto PIPE_TYPE_MESSAGE = 0x00000004;
  140. const auto PIPE_ACCEPT_REMOTE_CLIENTS = 0x00000000;
  141. const auto PIPE_REJECT_REMOTE_CLIENTS = 0x00000008;
  142. //
  143. // Define the well known values for CreateNamedPipe nMaxInstances
  144. //
  145. const auto PIPE_UNLIMITED_INSTANCES = 255;
  146. //
  147. // Define the Security Quality of Service bits to be passed
  148. // into CreateFile
  149. //
  150. const auto SECURITY_ANONYMOUS = ( SECURITY_IMPERSONATION_LEVEL.SecurityAnonymous << 16 );
  151. const auto SECURITY_IDENTIFICATION = ( SECURITY_IMPERSONATION_LEVEL.SecurityIdentification << 16 );
  152. const auto SECURITY_IMPERSONATION = ( SECURITY_IMPERSONATION_LEVEL.SecurityImpersonation << 16 );
  153. const auto SECURITY_DELEGATION = ( SECURITY_IMPERSONATION_LEVEL.SecurityDelegation << 16 );
  154. const auto SECURITY_CONTEXT_TRACKING = 0x00040000;
  155. const auto SECURITY_EFFECTIVE_ONLY = 0x00080000;
  156. const auto SECURITY_SQOS_PRESENT = 0x00100000;
  157. const auto SECURITY_VALID_SQOS_FLAGS = 0x001F0000;
  158. //
  159. // File structures
  160. //
  161. struct OVERLAPPED {
  162. ULONG_PTR Internal;
  163. ULONG_PTR InternalHigh;
  164. union _inner_union {
  165. struct _inner_struct {
  166. DWORD Offset;
  167. DWORD OffsetHigh;
  168. }
  169. _inner_struct data;
  170. PVOID Pointer;
  171. }
  172. _inner_union fields;
  173. HANDLE hEvent;
  174. }
  175. alias OVERLAPPED* LPOVERLAPPED;
  176. struct OVERLAPPED_ENTRY {
  177. ULONG_PTR lpCompletionKey;
  178. LPOVERLAPPED lpOverlapped;
  179. ULONG_PTR Internal;
  180. DWORD dwNumberOfBytesTransferred;
  181. }
  182. alias OVERLAPPED_ENTRY* LPOVERLAPPED_ENTRY;
  183. struct SECURITY_ATTRIBUTES {
  184. DWORD nLength;
  185. LPVOID lpSecurityDescriptor;
  186. BOOL bInheritHandle;
  187. }
  188. alias SECURITY_ATTRIBUTES* PSECURITY_ATTRIBUTES;
  189. alias SECURITY_ATTRIBUTES* LPSECURITY_ATTRIBUTES;
  190. struct PROCESS_INFORMATION {
  191. HANDLE hProcess;
  192. HANDLE hThread;
  193. DWORD dwProcessId;
  194. DWORD dwThreadId;
  195. }
  196. alias PROCESS_INFORMATION* PPROCESS_INFORMATION;
  197. alias PROCESS_INFORMATION* LPPROCESS_INFORMATION;
  198. //
  199. // File System time stamps are represented with the following structure:
  200. //
  201. struct FILETIME {
  202. DWORD dwLowDateTime;
  203. DWORD dwHighDateTime;
  204. }
  205. alias FILETIME* PFILETIME;
  206. alias FILETIME* LPFILETIME;
  207. //
  208. // System time is represented with the following structure:
  209. //
  210. struct SYSTEMTIME {
  211. WORD wYear;
  212. WORD wMonth;
  213. WORD wDayOfWeek;
  214. WORD wDay;
  215. WORD wHour;
  216. WORD wMinute;
  217. WORD wSecond;
  218. WORD wMilliseconds;
  219. }
  220. alias SYSTEMTIME* PSYSTEMTIME;
  221. alias SYSTEMTIME* LPSYSTEMTIME;
  222. alias DWORD function(LPVOID lpThreadParameter) PTHREAD_START_ROUTINE;
  223. alias PTHREAD_START_ROUTINE LPTHREAD_START_ROUTINE;
  224. alias VOID function(LPVOID) PFIBER_START_ROUTINE;
  225. alias PFIBER_START_ROUTINE LPFIBER_START_ROUTINE;
  226. alias RTL_CRITICAL_SECTION CRITICAL_SECTION;
  227. alias PRTL_CRITICAL_SECTION PCRITICAL_SECTION;
  228. alias PRTL_CRITICAL_SECTION LPCRITICAL_SECTION;
  229. alias RTL_CRITICAL_SECTION_DEBUG CRITICAL_SECTION_DEBUG;
  230. alias PRTL_CRITICAL_SECTION_DEBUG PCRITICAL_SECTION_DEBUG;
  231. alias PRTL_CRITICAL_SECTION_DEBUG LPCRITICAL_SECTION_DEBUG;
  232. //
  233. // Define one-time initialization primitive
  234. //
  235. alias RTL_RUN_ONCE INIT_ONCE;
  236. alias PRTL_RUN_ONCE PINIT_ONCE;
  237. alias PRTL_RUN_ONCE LPINIT_ONCE;
  238. const auto INIT_ONCE_STATIC_INIT = RTL_RUN_ONCE_INIT;
  239. //
  240. // Run once flags
  241. //
  242. const auto INIT_ONCE_CHECK_ONLY = RTL_RUN_ONCE_CHECK_ONLY;
  243. const auto INIT_ONCE_ASYNC = RTL_RUN_ONCE_ASYNC;
  244. const auto INIT_ONCE_INIT_FAILED = RTL_RUN_ONCE_INIT_FAILED;
  245. //
  246. // The context stored in the run once structure must leave the following number
  247. // of low order bits unused.
  248. //
  249. const auto INIT_ONCE_CTX_RESERVED_BITS = RTL_RUN_ONCE_CTX_RESERVED_BITS;
  250. alias BOOL function(PINIT_ONCE InitOnce, PVOID Parameter, PVOID* Context) PINIT_ONCE_FN;
  251. VOID InitOnceInitialize (
  252. PINIT_ONCE InitOnce
  253. );
  254. BOOL InitOnceExecuteOnce (
  255. PINIT_ONCE InitOnce,
  256. PINIT_ONCE_FN InitFn,
  257. PVOID Parameter,
  258. LPVOID *Context
  259. );
  260. BOOL InitOnceBeginInitialize (
  261. LPINIT_ONCE lpInitOnce,
  262. DWORD dwFlags,
  263. PBOOL fPending,
  264. LPVOID *lpContext
  265. );
  266. BOOL InitOnceComplete (
  267. LPINIT_ONCE lpInitOnce,
  268. DWORD dwFlags,
  269. LPVOID lpContext
  270. );
  271. //
  272. // Define the slim r/w lock
  273. //
  274. alias RTL_SRWLOCK SRWLOCK;
  275. alias RTL_SRWLOCK* PSRWLOCK;
  276. const auto SRWLOCK_INIT = RTL_SRWLOCK_INIT;
  277. VOID InitializeSRWLock (
  278. PSRWLOCK SRWLock
  279. );
  280. VOID ReleaseSRWLockExclusive (
  281. PSRWLOCK SRWLock
  282. );
  283. VOID ReleaseSRWLockShared (
  284. PSRWLOCK SRWLock
  285. );
  286. VOID AcquireSRWLockExclusive (
  287. PSRWLOCK SRWLock
  288. );
  289. VOID AcquireSRWLockShared (
  290. PSRWLOCK SRWLock
  291. );
  292. //
  293. // Define condition variable
  294. //
  295. alias RTL_CONDITION_VARIABLE CONDITION_VARIABLE;
  296. alias RTL_CONDITION_VARIABLE* PCONDITION_VARIABLE;
  297. VOID InitializeConditionVariable (
  298. PCONDITION_VARIABLE ConditionVariable
  299. );
  300. VOID WakeConditionVariable (
  301. PCONDITION_VARIABLE ConditionVariable
  302. );
  303. VOID WakeAllConditionVariable (
  304. PCONDITION_VARIABLE ConditionVariable
  305. );
  306. BOOL SleepConditionVariableCS (
  307. PCONDITION_VARIABLE ConditionVariable,
  308. PCRITICAL_SECTION CriticalSection,
  309. DWORD dwMilliseconds
  310. );
  311. BOOL SleepConditionVariableSRW (
  312. PCONDITION_VARIABLE ConditionVariable,
  313. PSRWLOCK SRWLock,
  314. DWORD dwMilliseconds,
  315. ULONG Flags
  316. );
  317. //
  318. // Static initializer for the condition variable
  319. //
  320. const auto CONDITION_VARIABLE_INIT = RTL_CONDITION_VARIABLE_INIT;
  321. //
  322. // Flags for condition variables
  323. //
  324. const auto CONDITION_VARIABLE_LOCKMODE_SHARED = RTL_CONDITION_VARIABLE_LOCKMODE_SHARED;
  325. PVOID EncodePointer (
  326. PVOID Ptr
  327. );
  328. PVOID DecodePointer (
  329. PVOID Ptr
  330. );
  331. PVOID EncodeSystemPointer (
  332. PVOID Ptr
  333. );
  334. PVOID DecodeSystemPointer (
  335. PVOID Ptr
  336. );
  337. version(X86) {
  338. //alias PLDT_ENTRY LPLDT_ENTRY;
  339. alias LPVOID LPLDT_ENTRY;
  340. }
  341. else {
  342. alias LPVOID LPLDT_ENTRY;
  343. }
  344. const auto MUTEX_MODIFY_STATE = MUTANT_QUERY_STATE;
  345. const auto MUTEX_ALL_ACCESS = MUTANT_ALL_ACCESS;
  346. //
  347. // Serial provider type.
  348. //
  349. const auto SP_SERIALCOMM = (cast(DWORD)0x00000001);
  350. //
  351. // Provider SubTypes
  352. //
  353. const auto PST_UNSPECIFIED = (cast(DWORD)0x00000000);
  354. const auto PST_RS232 = (cast(DWORD)0x00000001);
  355. const auto PST_PARALLELPORT = (cast(DWORD)0x00000002);
  356. const auto PST_RS422 = (cast(DWORD)0x00000003);
  357. const auto PST_RS423 = (cast(DWORD)0x00000004);
  358. const auto PST_RS449 = (cast(DWORD)0x00000005);
  359. const auto PST_MODEM = (cast(DWORD)0x00000006);
  360. const auto PST_FAX = (cast(DWORD)0x00000021);
  361. const auto PST_SCANNER = (cast(DWORD)0x00000022);
  362. const auto PST_NETWORK_BRIDGE = (cast(DWORD)0x00000100);
  363. const auto PST_LAT = (cast(DWORD)0x00000101);
  364. const auto PST_TCPIP_TELNET = (cast(DWORD)0x00000102);
  365. const auto PST_X25 = (cast(DWORD)0x00000103);
  366. //
  367. // Provider capabilities flags.
  368. //
  369. const auto PCF_DTRDSR = (cast(DWORD)0x0001);
  370. const auto PCF_RTSCTS = (cast(DWORD)0x0002);
  371. const auto PCF_RLSD = (cast(DWORD)0x0004);
  372. const auto PCF_PARITY_CHECK = (cast(DWORD)0x0008);
  373. const auto PCF_XONXOFF = (cast(DWORD)0x0010);
  374. const auto PCF_SETXCHAR = (cast(DWORD)0x0020);
  375. const auto PCF_TOTALTIMEOUTS = (cast(DWORD)0x0040);
  376. const auto PCF_INTTIMEOUTS = (cast(DWORD)0x0080);
  377. const auto PCF_SPECIALCHARS = (cast(DWORD)0x0100);
  378. const auto PCF_16BITMODE = (cast(DWORD)0x0200);
  379. //
  380. // Comm provider settable parameters.
  381. //
  382. const auto SP_PARITY = (cast(DWORD)0x0001);
  383. const auto SP_BAUD = (cast(DWORD)0x0002);
  384. const auto SP_DATABITS = (cast(DWORD)0x0004);
  385. const auto SP_STOPBITS = (cast(DWORD)0x0008);
  386. const auto SP_HANDSHAKING = (cast(DWORD)0x0010);
  387. const auto SP_PARITY_CHECK = (cast(DWORD)0x0020);
  388. const auto SP_RLSD = (cast(DWORD)0x0040);
  389. //
  390. // Settable baud rates in the provider.
  391. //
  392. const auto BAUD_075 = (cast(DWORD)0x00000001);
  393. const auto BAUD_110 = (cast(DWORD)0x00000002);
  394. const auto BAUD_134_5 = (cast(DWORD)0x00000004);
  395. const auto BAUD_150 = (cast(DWORD)0x00000008);
  396. const auto BAUD_300 = (cast(DWORD)0x00000010);
  397. const auto BAUD_600 = (cast(DWORD)0x00000020);
  398. const auto BAUD_1200 = (cast(DWORD)0x00000040);
  399. const auto BAUD_1800 = (cast(DWORD)0x00000080);
  400. const auto BAUD_2400 = (cast(DWORD)0x00000100);
  401. const auto BAUD_4800 = (cast(DWORD)0x00000200);
  402. const auto BAUD_7200 = (cast(DWORD)0x00000400);
  403. const auto BAUD_9600 = (cast(DWORD)0x00000800);
  404. const auto BAUD_14400 = (cast(DWORD)0x00001000);
  405. const auto BAUD_19200 = (cast(DWORD)0x00002000);
  406. const auto BAUD_38400 = (cast(DWORD)0x00004000);
  407. const auto BAUD_56K = (cast(DWORD)0x00008000);
  408. const auto BAUD_128K = (cast(DWORD)0x00010000);
  409. const auto BAUD_115200 = (cast(DWORD)0x00020000);
  410. const auto BAUD_57600 = (cast(DWORD)0x00040000);
  411. const auto BAUD_USER = (cast(DWORD)0x10000000);
  412. //
  413. // Settable Data Bits
  414. //
  415. const auto DATABITS_5 = (cast(WORD)0x0001);
  416. const auto DATABITS_6 = (cast(WORD)0x0002);
  417. const auto DATABITS_7 = (cast(WORD)0x0004);
  418. const auto DATABITS_8 = (cast(WORD)0x0008);
  419. const auto DATABITS_16 = (cast(WORD)0x0010);
  420. const auto DATABITS_16X = (cast(WORD)0x0020);
  421. //
  422. // Settable Stop and Parity bits.
  423. //
  424. const auto STOPBITS_10 = (cast(WORD)0x0001);
  425. const auto STOPBITS_15 = (cast(WORD)0x0002);
  426. const auto STOPBITS_20 = (cast(WORD)0x0004);
  427. const auto PARITY_NONE = (cast(WORD)0x0100);
  428. const auto PARITY_ODD = (cast(WORD)0x0200);
  429. const auto PARITY_EVEN = (cast(WORD)0x0400);
  430. const auto PARITY_MARK = (cast(WORD)0x0800);
  431. const auto PARITY_SPACE = (cast(WORD)0x1000);
  432. struct COMMPROP {
  433. WORD wPacketLength;
  434. WORD wPacketVersion;
  435. DWORD dwServiceMask;
  436. DWORD dwReserved1;
  437. DWORD dwMaxTxQueue;
  438. DWORD dwMaxRxQueue;
  439. DWORD dwMaxBaud;
  440. DWORD dwProvSubType;
  441. DWORD dwProvCapabilities;
  442. DWORD dwSettableParams;
  443. DWORD dwSettableBaud;
  444. WORD wSettableData;
  445. WORD wSettableStopParity;
  446. DWORD dwCurrentTxQueue;
  447. DWORD dwCurrentRxQueue;
  448. DWORD dwProvSpec1;
  449. DWORD dwProvSpec2;
  450. WCHAR[1] wcProvChar;
  451. }
  452. alias COMMPROP* LPCOMMPROP;
  453. //
  454. // Set dwProvSpec1 to COMMPROP_INITIALIZED to indicate that wPacketLength
  455. // is valid before a call to GetCommProperties().
  456. //
  457. const auto COMMPROP_INITIALIZED = (cast(DWORD)0xE73CF52E);
  458. struct COMSTAT {
  459. DWORD flags;
  460. /* DWORD fCtsHold : 1;
  461. DWORD fDsrHold : 1;
  462. DWORD fRlsdHold : 1;
  463. DWORD fXoffHold : 1;
  464. DWORD fXoffSent : 1;
  465. DWORD fEof : 1;
  466. DWORD fTxim : 1;
  467. DWORD fReserved : 25;
  468. */
  469. DWORD cbInQue;
  470. DWORD cbOutQue;
  471. }
  472. alias COMSTAT* LPCOMSTAT;
  473. //
  474. // DTR Control Flow Values.
  475. //
  476. const auto DTR_CONTROL_DISABLE = 0x00;
  477. const auto DTR_CONTROL_ENABLE = 0x01;
  478. const auto DTR_CONTROL_HANDSHAKE = 0x02;
  479. //
  480. // RTS Control Flow Values
  481. //
  482. const auto RTS_CONTROL_DISABLE = 0x00;
  483. const auto RTS_CONTROL_ENABLE = 0x01;
  484. const auto RTS_CONTROL_HANDSHAKE = 0x02;
  485. const auto RTS_CONTROL_TOGGLE = 0x03;
  486. struct DCB {
  487. DWORD DCBlength; /* sizeof(DCB) */
  488. DWORD BaudRate; /* Baudrate at which running */
  489. DWORD flags;
  490. /+ DWORD fBinary: 1; /* Binary Mode (skip EOF check) */
  491. DWORD fParity: 1; /* Enable parity checking */
  492. DWORD fOutxCtsFlow:1; /* CTS handshaking on output */
  493. DWORD fOutxDsrFlow:1; /* DSR handshaking on output */
  494. DWORD fDtrControl:2; /* DTR Flow control */
  495. DWORD fDsrSensitivity:1; /* DSR Sensitivity */
  496. DWORD fTXContinueOnXoff: 1; /* Continue TX when Xoff sent */
  497. DWORD fOutX: 1; /* Enable output X-ON/X-OFF */
  498. DWORD fInX: 1; /* Enable input X-ON/X-OFF */
  499. DWORD fErrorChar: 1; /* Enable Err Replacement */
  500. DWORD fNull: 1; /* Enable Null stripping */
  501. DWORD fRtsControl:2; /* Rts Flow control */
  502. DWORD fAbortOnError:1; /* Abort all reads and writes on Error */
  503. DWORD fDummy2:17; /* Reserved */
  504. +/
  505. WORD wReserved; /* Not currently used */
  506. WORD XonLim; /* Transmit X-ON threshold */
  507. WORD XoffLim; /* Transmit X-OFF threshold */
  508. BYTE ByteSize; /* Number of bits/byte, 4-8 */
  509. BYTE Parity; /* 0-4=None,Odd,Even,Mark,Space */
  510. BYTE StopBits; /* 0,1,2 = 1, 1.5, 2 */
  511. char XonChar; /* Tx and Rx X-ON character */
  512. char XoffChar; /* Tx and Rx X-OFF character */
  513. char ErrorChar; /* Error replacement char */
  514. char EofChar; /* End of Input character */
  515. char EvtChar; /* Received Event character */
  516. WORD wReserved1; /* Fill for now. */
  517. }
  518. alias DCB* LPDCB;
  519. struct COMMTIMEOUTS {
  520. DWORD ReadIntervalTimeout; /* Maximum time between read chars. */
  521. DWORD ReadTotalTimeoutMultiplier; /* Multiplier of characters. */
  522. DWORD ReadTotalTimeoutConstant; /* Constant in milliseconds. */
  523. DWORD WriteTotalTimeoutMultiplier; /* Multiplier of characters. */
  524. DWORD WriteTotalTimeoutConstant; /* Constant in milliseconds. */
  525. }
  526. alias COMMTIMEOUTS* LPCOMMTIMEOUTS;
  527. struct COMMCONFIG {
  528. DWORD dwSize; /* Size of the entire struct */
  529. WORD wVersion; /* version of the structure */
  530. WORD wReserved; /* alignment */
  531. DCB dcb; /* device control block */
  532. DWORD dwProviderSubType; /* ordinal value for identifying
  533. provider-defined data structure format*/
  534. DWORD dwProviderOffset; /* Specifies the offset of provider specific
  535. data field in bytes from the start */
  536. DWORD dwProviderSize; /* size of the provider-specific data field */
  537. WCHAR wcProviderData[1]; /* provider-specific data */
  538. }
  539. alias COMMCONFIG* LPCOMMCONFIG;
  540. struct SYSTEM_INFO {
  541. WORD wProcessorArchitecture;
  542. WORD wReserved;
  543. DWORD dwPageSize;
  544. LPVOID lpMinimumApplicationAddress;
  545. LPVOID lpMaximumApplicationAddress;
  546. DWORD_PTR dwActiveProcessorMask;
  547. DWORD dwNumberOfProcessors;
  548. DWORD dwProcessorType;
  549. DWORD dwAllocationGranularity;
  550. WORD wProcessorLevel;
  551. WORD wProcessorRevision;
  552. }
  553. alias SYSTEM_INFO* LPSYSTEM_INFO;
  554. //
  555. //
  556. alias FreeLibrary FreeModule;
  557. //const auto MakeProcInstance(lpProc,hInstance) = (lpProc);
  558. //const auto FreeProcInstance(lpProc) = (lpProc);
  559. /* Global Memory Flags */
  560. const auto GMEM_FIXED = 0x0000;
  561. const auto GMEM_MOVEABLE = 0x0002;
  562. const auto GMEM_NOCOMPACT = 0x0010;
  563. const auto GMEM_NODISCARD = 0x0020;
  564. const auto GMEM_ZEROINIT = 0x0040;
  565. const auto GMEM_MODIFY = 0x0080;
  566. const auto GMEM_DISCARDABLE = 0x0100;
  567. const auto GMEM_NOT_BANKED = 0x1000;
  568. const auto GMEM_SHARE = 0x2000;
  569. const auto GMEM_DDESHARE = 0x2000;
  570. const auto GMEM_NOTIFY = 0x4000;
  571. const auto GMEM_LOWER = GMEM_NOT_BANKED;
  572. const auto GMEM_VALID_FLAGS = 0x7F72;
  573. const auto GMEM_INVALID_HANDLE = 0x8000;
  574. const auto GHND = (GMEM_MOVEABLE | GMEM_ZEROINIT);
  575. const auto GPTR = (GMEM_FIXED | GMEM_ZEROINIT);
  576. //const auto GlobalLRUNewest( = h ) ((HANDLE)(h));
  577. //const auto GlobalLRUOldest( = h ) ((HANDLE)(h));
  578. //const auto GlobalDiscard( = h ) GlobalReAlloc( (h), 0, GMEM_MOVEABLE );
  579. /* Flags returned by GlobalFlags (in addition to GMEM_DISCARDABLE) */
  580. const auto GMEM_DISCARDED = 0x4000;
  581. const auto GMEM_LOCKCOUNT = 0x00FF;
  582. struct MEMORYSTATUS {
  583. DWORD dwLength;
  584. DWORD dwMemoryLoad;
  585. SIZE_T dwTotalPhys;
  586. SIZE_T dwAvailPhys;
  587. SIZE_T dwTotalPageFile;
  588. SIZE_T dwAvailPageFile;
  589. SIZE_T dwTotalVirtual;
  590. SIZE_T dwAvailVirtual;
  591. }
  592. alias MEMORYSTATUS* LPMEMORYSTATUS;
  593. /* Local Memory Flags */
  594. const auto LMEM_FIXED = 0x0000;
  595. const auto LMEM_MOVEABLE = 0x0002;
  596. const auto LMEM_NOCOMPACT = 0x0010;
  597. const auto LMEM_NODISCARD = 0x0020;
  598. const auto LMEM_ZEROINIT = 0x0040;
  599. const auto LMEM_MODIFY = 0x0080;
  600. const auto LMEM_DISCARDABLE = 0x0F00;
  601. const auto LMEM_VALID_FLAGS = 0x0F72;
  602. const auto LMEM_INVALID_HANDLE = 0x8000;
  603. const auto LHND = (LMEM_MOVEABLE | LMEM_ZEROINIT);
  604. const auto LPTR = (LMEM_FIXED | LMEM_ZEROINIT);
  605. const auto NONZEROLHND = (LMEM_MOVEABLE);
  606. const auto NONZEROLPTR = (LMEM_FIXED);
  607. //const auto LocalDiscard( = h ) LocalReAlloc( (h), 0, LMEM_MOVEABLE );
  608. /* Flags returned by LocalFlags (in addition to LMEM_DISCARDABLE) */
  609. const auto LMEM_DISCARDED = 0x4000;
  610. const auto LMEM_LOCKCOUNT = 0x00FF;
  611. //
  612. // NUMA values
  613. //
  614. const auto NUMA_NO_PREFERRED_NODE = (cast(DWORD) -1);
  615. //
  616. // dwCreationFlag values
  617. //
  618. const auto DEBUG_PROCESS = 0x00000001;
  619. const auto DEBUG_ONLY_THIS_PROCESS = 0x00000002;
  620. const auto CREATE_SUSPENDED = 0x00000004;
  621. const auto DETACHED_PROCESS = 0x00000008;
  622. const auto CREATE_NEW_CONSOLE = 0x00000010;
  623. const auto NORMAL_PRIORITY_CLASS = 0x00000020;
  624. const auto IDLE_PRIORITY_CLASS = 0x00000040;
  625. const auto HIGH_PRIORITY_CLASS = 0x00000080;
  626. const auto REALTIME_PRIORITY_CLASS = 0x00000100;
  627. const auto CREATE_NEW_PROCESS_GROUP = 0x00000200;
  628. const auto CREATE_UNICODE_ENVIRONMENT = 0x00000400;
  629. const auto CREATE_SEPARATE_WOW_VDM = 0x00000800;
  630. const auto CREATE_SHARED_WOW_VDM = 0x00001000;
  631. const auto CREATE_FORCEDOS = 0x00002000;
  632. const auto BELOW_NORMAL_PRIORITY_CLASS = 0x00004000;
  633. const auto ABOVE_NORMAL_PRIORITY_CLASS = 0x00008000;
  634. const auto STACK_SIZE_PARAM_IS_A_RESERVATION = 0x00010000;
  635. const auto INHERIT_CALLER_PRIORITY = 0x00020000;
  636. const auto CREATE_PROTECTED_PROCESS = 0x00040000;
  637. const auto EXTENDED_STARTUPINFO_PRESENT = 0x00080000;
  638. const auto PROCESS_MODE_BACKGROUND_BEGIN = 0x00100000;
  639. const auto PROCESS_MODE_BACKGROUND_END = 0x00200000;
  640. const auto CREATE_BREAKAWAY_FROM_JOB = 0x01000000;
  641. const auto CREATE_PRESERVE_CODE_AUTHZ_LEVEL = 0x02000000;
  642. const auto CREATE_DEFAULT_ERROR_MODE = 0x04000000;
  643. const auto CREATE_NO_WINDOW = 0x08000000;
  644. const auto PROFILE_USER = 0x10000000;
  645. const auto PROFILE_KERNEL = 0x20000000;
  646. const auto PROFILE_SERVER = 0x40000000;
  647. const auto CREATE_IGNORE_SYSTEM_DEFAULT = 0x80000000;
  648. const auto THREAD_PRIORITY_LOWEST = THREAD_BASE_PRIORITY_MIN;
  649. const auto THREAD_PRIORITY_BELOW_NORMAL = (THREAD_PRIORITY_LOWEST+1);
  650. const auto THREAD_PRIORITY_NORMAL = 0;
  651. const auto THREAD_PRIORITY_HIGHEST = THREAD_BASE_PRIORITY_MAX;
  652. const auto THREAD_PRIORITY_ABOVE_NORMAL = (THREAD_PRIORITY_HIGHEST-1);
  653. const auto THREAD_PRIORITY_ERROR_RETURN = (MAXLONG);
  654. const auto THREAD_PRIORITY_TIME_CRITICAL = THREAD_BASE_PRIORITY_LOWRT;
  655. const auto THREAD_PRIORITY_IDLE = THREAD_BASE_PRIORITY_IDLE;
  656. const auto THREAD_MODE_BACKGROUND_BEGIN = 0x00010000;
  657. const auto THREAD_MODE_BACKGROUND_END = 0x00020000;
  658. //
  659. // GetFinalPathNameByHandle
  660. //
  661. const auto VOLUME_NAME_DOS = 0x0 ; //default
  662. const auto VOLUME_NAME_GUID = 0x1;
  663. const auto VOLUME_NAME_NT = 0x2;
  664. const auto VOLUME_NAME_NONE = 0x4;
  665. const auto FILE_NAME_NORMALIZED = 0x0 ; //default
  666. const auto FILE_NAME_OPENED = 0x8;
  667. //
  668. // Debug APIs
  669. //
  670. const auto EXCEPTION_DEBUG_EVENT = 1;
  671. const auto CREATE_THREAD_DEBUG_EVENT = 2;
  672. const auto CREATE_PROCESS_DEBUG_EVENT = 3;
  673. const auto EXIT_THREAD_DEBUG_EVENT = 4;
  674. const auto EXIT_PROCESS_DEBUG_EVENT = 5;
  675. const auto LOAD_DLL_DEBUG_EVENT = 6;
  676. const auto UNLOAD_DLL_DEBUG_EVENT = 7;
  677. const auto OUTPUT_DEBUG_STRING_EVENT = 8;
  678. const auto RIP_EVENT = 9;
  679. struct EXCEPTION_DEBUG_INFO {
  680. EXCEPTION_RECORD ExceptionRecord;
  681. DWORD dwFirstChance;
  682. }
  683. alias EXCEPTION_DEBUG_INFO* LPEXCEPTION_DEBUG_INFO;
  684. struct CREATE_THREAD_DEBUG_INFO {
  685. HANDLE hThread;
  686. LPVOID lpThreadLocalBase;
  687. LPTHREAD_START_ROUTINE lpStartAddress;
  688. }
  689. alias CREATE_THREAD_DEBUG_INFO* LPCREATE_THREAD_DEBUG_INFO;
  690. struct CREATE_PROCESS_DEBUG_INFO {
  691. HANDLE hFile;
  692. HANDLE hProcess;
  693. HANDLE hThread;
  694. LPVOID lpBaseOfImage;
  695. DWORD dwDebugInfoFileOffset;
  696. DWORD nDebugInfoSize;
  697. LPVOID lpThreadLocalBase;
  698. LPTHREAD_START_ROUTINE lpStartAddress;
  699. LPVOID lpImageName;
  700. WORD fUnicode;
  701. }
  702. alias CREATE_PROCESS_DEBUG_INFO* LPCREATE_PROCESS_DEBUG_INFO;
  703. struct EXIT_THREAD_DEBUG_INFO {
  704. DWORD dwExitCode;
  705. }
  706. alias EXIT_THREAD_DEBUG_INFO* LPEXIT_THREAD_DEBUG_INFO;
  707. struct EXIT_PROCESS_DEBUG_INFO {
  708. DWORD dwExitCode;
  709. }
  710. alias EXIT_PROCESS_DEBUG_INFO* LPEXIT_PROCESS_DEBUG_INFO;
  711. struct LOAD_DLL_DEBUG_INFO {
  712. HANDLE hFile;
  713. LPVOID lpBaseOfDll;
  714. DWORD dwDebugInfoFileOffset;
  715. DWORD nDebugInfoSize;
  716. LPVOID lpImageName;
  717. WORD fUnicode;
  718. }
  719. alias LOAD_DLL_DEBUG_INFO* LPLOAD_DLL_DEBUG_INFO;
  720. struct UNLOAD_DLL_DEBUG_INFO {
  721. LPVOID lpBaseOfDll;
  722. }
  723. alias UNLOAD_DLL_DEBUG_INFO* LPUNLOAD_DLL_DEBUG_INFO;
  724. struct OUTPUT_DEBUG_STRING_INFO {
  725. LPSTR lpDebugStringData;
  726. WORD fUnicode;
  727. WORD nDebugStringLength;
  728. }
  729. alias OUTPUT_DEBUG_STRING_INFO* LPOUTPUT_DEBUG_STRING_INFO;
  730. struct RIP_INFO {
  731. DWORD dwError;
  732. DWORD dwType;
  733. }
  734. alias RIP_INFO* LPRIP_INFO;
  735. struct DEBUG_EVENT {
  736. DWORD dwDebugEventCode;
  737. DWORD dwProcessId;
  738. DWORD dwThreadId;
  739. union _inner_union {
  740. EXCEPTION_DEBUG_INFO Exception;
  741. CREATE_THREAD_DEBUG_INFO CreateThread;
  742. CREATE_PROCESS_DEBUG_INFO CreateProcessInfo;
  743. EXIT_THREAD_DEBUG_INFO ExitThread;
  744. EXIT_PROCESS_DEBUG_INFO ExitProcess;
  745. LOAD_DLL_DEBUG_INFO LoadDll;
  746. UNLOAD_DLL_DEBUG_INFO UnloadDll;
  747. OUTPUT_DEBUG_STRING_INFO DebugString;
  748. RIP_INFO RipInfo;
  749. }
  750. _inner_union u;
  751. }
  752. alias DEBUG_EVENT* LPDEBUG_EVENT;
  753. //
  754. // JIT Debugging Info. This structure is defined to have constant size in
  755. // both the emulated and native environment.
  756. //
  757. struct JIT_DEBUG_INFO {
  758. DWORD dwSize;
  759. DWORD dwProcessorArchitecture;
  760. DWORD dwThreadID;
  761. DWORD dwReserved0;
  762. ULONG64 lpExceptionAddress;
  763. ULONG64 lpExceptionRecord;
  764. ULONG64 lpContextRecord;
  765. }
  766. alias JIT_DEBUG_INFO* LPJIT_DEBUG_INFO;
  767. alias JIT_DEBUG_INFO JIT_DEBUG_INFO32;
  768. alias JIT_DEBUG_INFO* LPJIT_DEBUG_INFO32;
  769. alias JIT_DEBUG_INFO JIT_DEBUG_INFO64;
  770. alias JIT_DEBUG_INFO* LPJIT_DEBUG_INFO64;
  771. alias PCONTEXT LPCONTEXT;
  772. alias PEXCEPTION_RECORD LPEXCEPTION_RECORD;
  773. alias PEXCEPTION_POINTERS LPEXCEPTION_POINTERS;
  774. const auto DRIVE_UNKNOWN = 0;
  775. const auto DRIVE_NO_ROOT_DIR = 1;
  776. const auto DRIVE_REMOVABLE = 2;
  777. const auto DRIVE_FIXED = 3;
  778. const auto DRIVE_REMOTE = 4;
  779. const auto DRIVE_CDROM = 5;
  780. const auto DRIVE_RAMDISK = 6;
  781. DWORD GetFreeSpace(uint w) { return (0x100000); }
  782. const auto FILE_TYPE_UNKNOWN = 0x0000;
  783. const auto FILE_TYPE_DISK = 0x0001;
  784. const auto FILE_TYPE_CHAR = 0x0002;
  785. const auto FILE_TYPE_PIPE = 0x0003;
  786. const auto FILE_TYPE_REMOTE = 0x8000;
  787. const auto STD_INPUT_HANDLE = (cast(DWORD)-10);
  788. const auto STD_OUTPUT_HANDLE = (cast(DWORD)-11);
  789. const auto STD_ERROR_HANDLE = (cast(DWORD)-12);
  790. const auto NOPARITY = 0;
  791. const auto ODDPARITY = 1;
  792. const auto EVENPARITY = 2;
  793. const auto MARKPARITY = 3;
  794. const auto SPACEPARITY = 4;
  795. const auto ONESTOPBIT = 0;
  796. const auto ONE5STOPBITS = 1;
  797. const auto TWOSTOPBITS = 2;
  798. const auto IGNORE = 0 ; // Ignore signal
  799. const auto INFINITE = 0xFFFFFFFF ; // Infinite timeout
  800. //
  801. // Baud rates at which the communication device operates
  802. //
  803. const auto CBR_110 = 110;
  804. const auto CBR_300 = 300;
  805. const auto CBR_600 = 600;
  806. const auto CBR_1200 = 1200;
  807. const auto CBR_2400 = 2400;
  808. const auto CBR_4800 = 4800;
  809. const auto CBR_9600 = 9600;
  810. const auto CBR_14400 = 14400;
  811. const auto CBR_19200 = 19200;
  812. const auto CBR_38400 = 38400;
  813. const auto CBR_56000 = 56000;
  814. const auto CBR_57600 = 57600;
  815. const auto CBR_115200 = 115200;
  816. const auto CBR_128000 = 128000;
  817. const auto CBR_256000 = 256000;
  818. //
  819. // Error Flags
  820. //
  821. const auto CE_RXOVER = 0x0001 ; // Receive Queue overflow
  822. const auto CE_OVERRUN = 0x0002 ; // Receive Overrun Error
  823. const auto CE_RXPARITY = 0x0004 ; // Receive Parity Error
  824. const auto CE_FRAME = 0x0008 ; // Receive Framing error
  825. const auto CE_BREAK = 0x0010 ; // Break Detected
  826. const auto CE_TXFULL = 0x0100 ; // TX Queue is full
  827. const auto CE_PTO = 0x0200 ; // LPTx Timeout
  828. const auto CE_IOE = 0x0400 ; // LPTx I/O Error
  829. const auto CE_DNS = 0x0800 ; // LPTx Device not selected
  830. const auto CE_OOP = 0x1000 ; // LPTx Out-Of-Paper
  831. const auto CE_MODE = 0x8000 ; // Requested mode unsupported
  832. const auto IE_BADID = (-1) ; // Invalid or unsupported id
  833. const auto IE_OPEN = (-2) ; // Device Already Open
  834. const auto IE_NOPEN = (-3) ; // Device Not Open
  835. const auto IE_MEMORY = (-4) ; // Unable to allocate queues
  836. const auto IE_DEFAULT = (-5) ; // Error in default parameters
  837. const auto IE_HARDWARE = (-10) ; // Hardware Not Present
  838. const auto IE_BYTESIZE = (-11) ; // Illegal Byte Size
  839. const auto IE_BAUDRATE = (-12) ; // Unsupported BaudRate
  840. //
  841. // Events
  842. //
  843. const auto EV_RXCHAR = 0x0001 ; // Any Character received
  844. const auto EV_RXFLAG = 0x0002 ; // Received certain character
  845. const auto EV_TXEMPTY = 0x0004 ; // Transmitt Queue Empty
  846. const auto EV_CTS = 0x0008 ; // CTS changed state
  847. const auto EV_DSR = 0x0010 ; // DSR changed state
  848. const auto EV_RLSD = 0x0020 ; // RLSD changed state
  849. const auto EV_BREAK = 0x0040 ; // BREAK received
  850. const auto EV_ERR = 0x0080 ; // Line status error occurred
  851. const auto EV_RING = 0x0100 ; // Ring signal detected
  852. const auto EV_PERR = 0x0200 ; // Printer error occured
  853. const auto EV_RX80FULL = 0x0400 ; // Receive buffer is 80 percent full
  854. const auto EV_EVENT1 = 0x0800 ; // Provider specific event 1
  855. const auto EV_EVENT2 = 0x1000 ; // Provider specific event 2
  856. //
  857. // Escape Functions
  858. //
  859. const auto SETXOFF = 1 ; // Simulate XOFF received
  860. const auto SETXON = 2 ; // Simulate XON received
  861. const auto SETRTS = 3 ; // Set RTS high
  862. const auto CLRRTS = 4 ; // Set RTS low
  863. const auto SETDTR = 5 ; // Set DTR high
  864. const auto CLRDTR = 6 ; // Set DTR low
  865. const auto RESETDEV = 7 ; // Reset device if possible
  866. const auto SETBREAK = 8 ; // Set the device break line.
  867. const auto CLRBREAK = 9 ; // Clear the device break line.
  868. //
  869. // PURGE function flags.
  870. //
  871. const auto PURGE_TXABORT = 0x0001 ; // Kill the pending/current writes to the comm port.
  872. const auto PURGE_RXABORT = 0x0002 ; // Kill the pending/current reads to the comm port.
  873. const auto PURGE_TXCLEAR = 0x0004 ; // Kill the transmit queue if there.
  874. const auto PURGE_RXCLEAR = 0x0008 ; // Kill the typeahead buffer if there.
  875. const auto LPTx = 0x80 ; // Set if ID is for LPT device
  876. //
  877. // Modem Status Flags
  878. //
  879. const auto MS_CTS_ON = (cast(DWORD)0x0010);
  880. const auto MS_DSR_ON = (cast(DWORD)0x0020);
  881. const auto MS_RING_ON = (cast(DWORD)0x0040);
  882. const auto MS_RLSD_ON = (cast(DWORD)0x0080);
  883. //
  884. // WaitSoundState() Constants
  885. //
  886. const auto S_QUEUEEMPTY = 0;
  887. const auto S_THRESHOLD = 1;
  888. const auto S_ALLTHRESHOLD = 2;
  889. //
  890. // Accent Modes
  891. //
  892. const auto S_NORMAL = 0;
  893. const auto S_LEGATO = 1;
  894. const auto S_STACCATO = 2;
  895. //
  896. // SetSoundNoise() Sources
  897. //
  898. const auto S_PERIOD512 = 0 ; // Freq = N/512 high pitch, less coarse hiss
  899. const auto S_PERIOD1024 = 1 ; // Freq = N/1024
  900. const auto S_PERIOD2048 = 2 ; // Freq = N/2048 low pitch, more coarse hiss
  901. const auto S_PERIODVOICE = 3 ; // Source is frequency from voice channel (3)
  902. const auto S_WHITE512 = 4 ; // Freq = N/512 high pitch, less coarse hiss
  903. const auto S_WHITE1024 = 5 ; // Freq = N/1024
  904. const auto S_WHITE2048 = 6 ; // Freq = N/2048 low pitch, more coarse hiss
  905. const auto S_WHITEVOICE = 7 ; // Source is frequency from voice channel (3)
  906. const auto S_SERDVNA = (-1) ; // Device not available
  907. const auto S_SEROFM = (-2) ; // Out of memory
  908. const auto S_SERMACT = (-3) ; // Music active
  909. const auto S_SERQFUL = (-4) ; // Queue full
  910. const auto S_SERBDNT = (-5) ; // Invalid note
  911. const auto S_SERDLN = (-6) ; // Invalid note length
  912. const auto S_SERDCC = (-7) ; // Invalid note count
  913. const auto S_SERDTP = (-8) ; // Invalid tempo
  914. const auto S_SERDVL = (-9) ; // Invalid volume
  915. const auto S_SERDMD = (-10) ; // Invalid mode
  916. const auto S_SERDSH = (-11) ; // Invalid shape
  917. const auto S_SERDPT = (-12) ; // Invalid pitch
  918. const auto S_SERDFQ = (-13) ; // Invalid frequency
  919. const auto S_SERDDR = (-14) ; // Invalid duration
  920. const auto S_SERDSR = (-15) ; // Invalid source
  921. const auto S_SERDST = (-16) ; // Invalid state
  922. const auto NMPWAIT_WAIT_FOREVER = 0xffffffff;
  923. const auto NMPWAIT_NOWAIT = 0x00000001;
  924. const auto NMPWAIT_USE_DEFAULT_WAIT = 0x00000000;
  925. const auto FS_CASE_IS_PRESERVED = FILE_CASE_PRESERVED_NAMES;
  926. const auto FS_CASE_SENSITIVE = FILE_CASE_SENSITIVE_SEARCH;
  927. const auto FS_UNICODE_STORED_ON_DISK = FILE_UNICODE_ON_DISK;
  928. const auto FS_PERSISTENT_ACLS = FILE_PERSISTENT_ACLS;
  929. const auto FS_VOL_IS_COMPRESSED = FILE_VOLUME_IS_COMPRESSED;
  930. const auto FS_FILE_COMPRESSION = FILE_FILE_COMPRESSION;
  931. const auto FS_FILE_ENCRYPTION = FILE_SUPPORTS_ENCRYPTION;
  932. const auto FILE_MAP_COPY = SECTION_QUERY;
  933. const auto FILE_MAP_WRITE = SECTION_MAP_WRITE;
  934. const auto FILE_MAP_READ = SECTION_MAP_READ;
  935. const auto FILE_MAP_ALL_ACCESS = SECTION_ALL_ACCESS;
  936. const auto FILE_MAP_EXECUTE = SECTION_MAP_EXECUTE_EXPLICIT ; // not included in FILE_MAP_ALL_ACCESS
  937. const auto OF_READ = 0x00000000;
  938. const auto OF_WRITE = 0x00000001;
  939. const auto OF_READWRITE = 0x00000002;
  940. const auto OF_SHARE_COMPAT = 0x00000000;
  941. const auto OF_SHARE_EXCLUSIVE = 0x00000010;
  942. const auto OF_SHARE_DENY_WRITE = 0x00000020;
  943. const auto OF_SHARE_DENY_READ = 0x00000030;
  944. const auto OF_SHARE_DENY_NONE = 0x00000040;
  945. const auto OF_PARSE = 0x00000100;
  946. const auto OF_DELETE = 0x00000200;
  947. const auto OF_VERIFY = 0x00000400;
  948. const auto OF_CANCEL = 0x00000800;
  949. const auto OF_CREATE = 0x00001000;
  950. const auto OF_PROMPT = 0x00002000;
  951. const auto OF_EXIST = 0x00004000;
  952. const auto OF_REOPEN = 0x00008000;
  953. const auto OFS_MAXPATHNAME = 128;
  954. struct OFSTRUCT {
  955. BYTE cBytes;
  956. BYTE fFixedDisk;
  957. WORD nErrCode;
  958. WORD Reserved1;
  959. WORD Reserved2;
  960. CHAR szPathName[OFS_MAXPATHNAME];
  961. }
  962. alias OFSTRUCT* LPOFSTRUCT;
  963. alias OFSTRUCT* POFSTRUCT;
  964. version(NOWINBASEINTERLOCK) {
  965. }
  966. else {
  967. LONG InterlockedIncrement (
  968. LONG* lpAddend
  969. );
  970. LONG InterlockedDecrement (
  971. LONG* lpAddend
  972. );
  973. LONG InterlockedExchange (
  974. LONG* Target,
  975. LONG Value
  976. );
  977. //const auto InterlockedExchangePointer(Target, = Value) \;
  978. // (PVOID)InterlockedExchange((PLONG)(Target), (LONG)(Value))
  979. LONG InterlockedExchangeAdd (
  980. LONG *Addend,
  981. LONG Value
  982. );
  983. LONG InterlockedCompareExchange (
  984. LONG* Destination,
  985. LONG Exchange,
  986. LONG Comperand
  987. );
  988. LONGLONG InterlockedCompareExchange64 (
  989. LONGLONG *Destination,
  990. LONGLONG Exchange,
  991. LONGLONG Comperand
  992. );
  993. alias InterlockedIncrement InterlockedIncrementAcquire;
  994. alias InterlockedIncrement InterlockedIncrementRelease;
  995. alias InterlockedDecrement InterlockedDecrementAcquire;
  996. alias InterlockedDecrement InterlockedDecrementRelease;
  997. alias InterlockedIncrement InterlockedIncrementAcquire;
  998. alias InterlockedIncrement InterlockedIncrementRelease;
  999. alias InterlockedCompareExchange InterlockedCompareExchangeAcquire;
  1000. alias InterlockedCompareExchange InterlockedCompareExchangeRelease;
  1001. alias InterlockedCompareExchange64 InterlockedCompareExchangeAcquire64;
  1002. alias InterlockedCompareExchange64 InterlockedCompareExchangeRelease64;
  1003. //alias InterlockedCompareExchangePointer InterlockedCompareExchangePointerAcquire;
  1004. //alias InterlockedCompareExchangePointer InterlockedCompareExchangePointerRelease;
  1005. VOID InitializeSListHead (
  1006. PSLIST_HEADER ListHead
  1007. );
  1008. PSLIST_ENTRY InterlockedPopEntrySList (
  1009. PSLIST_HEADER ListHead
  1010. );
  1011. PSLIST_ENTRY InterlockedPushEntrySList (
  1012. PSLIST_HEADER ListHead,
  1013. PSLIST_ENTRY ListEntry
  1014. );
  1015. PSLIST_ENTRY InterlockedFlushSList (
  1016. PSLIST_HEADER ListHead
  1017. );
  1018. USHORT QueryDepthSList (
  1019. PSLIST_HEADER ListHead
  1020. );
  1021. }
  1022. BOOL FreeResource(
  1023. HGLOBAL hResData
  1024. );
  1025. LPVOID LockResource(
  1026. HGLOBAL hResData
  1027. );
  1028. //const auto UnlockResource(hResData) = ((hResData), 0);
  1029. const auto MAXINTATOM = 0xC000;
  1030. template MAKEINTATOM(WORD i) {
  1031. const LPTSTR MAKEINTATOM = cast(LPTSTR)(cast(ULONG_PTR)(cast(WORD)(i)));
  1032. }
  1033. const auto INVALID_ATOM = (cast(ATOM)0);
  1034. int WinMain (
  1035. HINSTANCE hInstance,
  1036. HINSTANCE hPrevInstance,
  1037. LPSTR lpCmdLine,
  1038. int nShowCmd
  1039. );
  1040. int wWinMain(
  1041. HINSTANCE hInstance,
  1042. HINSTANCE hPrevInstance,
  1043. LPWSTR lpCmdLine,
  1044. int nShowCmd
  1045. );
  1046. BOOL FreeLibrary (
  1047. HMODULE hLibModule
  1048. );
  1049. VOID FreeLibraryAndExitThread (
  1050. HMODULE hLibModule,
  1051. DWORD dwExitCode
  1052. );
  1053. BOOL DisableThreadLibraryCalls (
  1054. HMODULE hLibModule
  1055. );
  1056. FARPROC GetProcAddress (
  1057. HMODULE hModule,
  1058. LPCSTR lpProcName
  1059. );
  1060. DWORD GetVersion (
  1061. );
  1062. HGLOBAL GlobalAlloc (
  1063. UINT uFlags,
  1064. SIZE_T dwBytes
  1065. );
  1066. HGLOBAL GlobalReAlloc (
  1067. HGLOBAL hMem,
  1068. SIZE_T dwBytes,
  1069. UINT uFlags
  1070. );
  1071. SIZE_T GlobalSize (
  1072. HGLOBAL hMem
  1073. );
  1074. UINT GlobalFlags (
  1075. HGLOBAL hMem
  1076. );
  1077. LPVOID GlobalLock (
  1078. HGLOBAL hMem
  1079. );
  1080. HGLOBAL GlobalHandle (
  1081. LPCVOID pMem
  1082. );
  1083. BOOL GlobalUnlock(
  1084. HGLOBAL hMem
  1085. );
  1086. HGLOBAL GlobalFree(
  1087. HGLOBAL hMem
  1088. );
  1089. SIZE_T GlobalCompact(
  1090. DWORD dwMinFree
  1091. );
  1092. VOID GlobalFix(
  1093. HGLOBAL hMem
  1094. );
  1095. VOID GlobalUnfix(
  1096. HGLOBAL hMem
  1097. );
  1098. LPVOID GlobalWire(
  1099. HGLOBAL hMem
  1100. );
  1101. BOOL GlobalUnWire(
  1102. HGLOBAL hMem
  1103. );
  1104. VOID GlobalMemoryStatus(
  1105. LPMEMORYSTATUS lpBuffer
  1106. );
  1107. struct MEMORYSTATUSEX {
  1108. DWORD dwLength;
  1109. DWORD dwMemoryLoad;
  1110. DWORDLONG ullTotalPhys;
  1111. DWORDLONG ullAvailPhys;
  1112. DWORDLONG ullTotalPageFile;
  1113. DWORDLONG ullAvailPageFile;
  1114. DWORDLONG ullTotalVirtual;
  1115. DWORDLONG ullAvailVirtual;
  1116. DWORDLONG ullAvailExtendedVirtual;
  1117. }
  1118. alias MEMORYSTATUSEX* LPMEMORYSTATUSEX;
  1119. BOOL GlobalMemoryStatusEx(
  1120. LPMEMORYSTATUSEX lpBuffer
  1121. );
  1122. HLOCAL LocalAlloc(
  1123. UINT uFlags,
  1124. SIZE_T uBytes
  1125. );
  1126. HLOCAL LocalReAlloc(
  1127. HLOCAL hMem,
  1128. SIZE_T uBytes,
  1129. UINT uFlags
  1130. );
  1131. LPVOID LocalLock(
  1132. HLOCAL hMem
  1133. );
  1134. HLOCAL LocalHandle(
  1135. LPCVOID pMem
  1136. );
  1137. BOOL LocalUnlock(
  1138. HLOCAL hMem
  1139. );
  1140. SIZE_T LocalSize(
  1141. HLOCAL hMem
  1142. );
  1143. UINT LocalFlags(
  1144. HLOCAL hMem
  1145. );
  1146. HLOCAL LocalFree(
  1147. HLOCAL hMem
  1148. );
  1149. SIZE_T LocalShrink(
  1150. HLOCAL hMem,
  1151. UINT cbNewSize
  1152. );
  1153. SIZE_T LocalCompact(
  1154. UINT uMinFree
  1155. );
  1156. BOOL FlushInstructionCache(
  1157. HANDLE hProcess,
  1158. LPCVOID lpBaseAddress,
  1159. SIZE_T dwSize
  1160. );
  1161. VOID FlushProcessWriteBuffers();
  1162. BOOL QueryThreadCycleTime (
  1163. HANDLE ThreadHandle,
  1164. PULONG64 CycleTime
  1165. );
  1166. BOOL QueryProcessCycleTime (
  1167. HANDLE ProcessHandle,
  1168. PULONG64 CycleTime
  1169. );
  1170. BOOL QueryIdleProcessorCycleTime (
  1171. PULONG BufferLength,
  1172. PULONG64 ProcessorIdleCycleTime
  1173. );
  1174. LPVOID VirtualAlloc(
  1175. LPVOID lpAddress,
  1176. SIZE_T dwSize,
  1177. DWORD flAllocationType,
  1178. DWORD flProtect
  1179. );
  1180. BOOL VirtualFree(
  1181. LPVOID lpAddress,
  1182. SIZE_T dwSize,
  1183. DWORD dwFreeType
  1184. );
  1185. BOOL VirtualProtect(
  1186. LPVOID lpAddress,
  1187. SIZE_T dwSize,
  1188. DWORD flNewProtect,
  1189. PDWORD lpflOldProtect
  1190. );
  1191. SIZE_T VirtualQuery(
  1192. LPCVOID lpAddress,
  1193. PMEMORY_BASIC_INFORMATION lpBuffer,
  1194. SIZE_T dwLength
  1195. );
  1196. LPVOID VirtualAllocEx(
  1197. HANDLE hProcess,
  1198. LPVOID lpAddress,
  1199. SIZE_T dwSize,
  1200. DWORD flAllocationType,
  1201. DWORD flProtect
  1202. );
  1203. LPVOID VirtualAllocExNuma(
  1204. HANDLE hProcess,
  1205. LPVOID lpAddress,
  1206. SIZE_T dwSize,
  1207. DWORD flAllocationType,
  1208. DWORD flProtect,
  1209. DWORD nndPreferred
  1210. );
  1211. UINT GetWriteWatch(
  1212. DWORD dwFlags,
  1213. PVOID lpBaseAddress,
  1214. SIZE_T dwRegionSize,
  1215. PVOID *lpAddresses,
  1216. ULONG_PTR *lpdwCount,
  1217. PULONG lpdwGranularity
  1218. );
  1219. UINT ResetWriteWatch(
  1220. LPVOID lpBaseAddress,
  1221. SIZE_T dwRegionSize
  1222. );
  1223. SIZE_T GetLargePageMinimum();
  1224. UINT EnumSystemFirmwareTables(
  1225. DWORD FirmwareTableProviderSignature,
  1226. PVOID pFirmwareTableEnumBuffer,
  1227. DWORD BufferSize
  1228. );
  1229. UINT GetSystemFirmwareTable(
  1230. DWORD FirmwareTableProviderSignature,
  1231. DWORD FirmwareTableID,
  1232. PVOID pFirmwareTableBuffer,
  1233. DWORD BufferSize
  1234. );
  1235. BOOL VirtualFreeEx(
  1236. HANDLE hProcess,
  1237. LPVOID lpAddress,
  1238. SIZE_T dwSize,
  1239. DWORD dwFreeType
  1240. );
  1241. BOOL VirtualProtectEx(
  1242. HANDLE hProcess,
  1243. LPVOID lpAddress,
  1244. SIZE_T dwSize,
  1245. DWORD flNewProtect,
  1246. PDWORD lpflOldProtect
  1247. );
  1248. SIZE_T VirtualQueryEx(
  1249. HANDLE hProcess,
  1250. LPCVOID lpAddress,
  1251. PMEMORY_BASIC_INFORMATION lpBuffer,
  1252. SIZE_T dwLength
  1253. );
  1254. HANDLE HeapCreate(
  1255. DWORD flOptions,
  1256. SIZE_T dwInitialSize,
  1257. SIZE_T dwMaximumSize
  1258. );
  1259. BOOL HeapDestroy(
  1260. HANDLE hHeap
  1261. );
  1262. LPVOID HeapAlloc(
  1263. HANDLE hHeap,
  1264. DWORD dwFlags,
  1265. SIZE_T dwBytes
  1266. );
  1267. LPVOID HeapReAlloc(
  1268. HANDLE hHeap,
  1269. DWORD dwFlags,
  1270. LPVOID lpMem,
  1271. SIZE_T dwBytes
  1272. );
  1273. BOOL HeapFree(
  1274. HANDLE hHeap,
  1275. DWORD dwFlags,
  1276. LPVOID lpMem
  1277. );
  1278. SIZE_T HeapSize(
  1279. HANDLE hHeap,
  1280. DWORD dwFlags,
  1281. LPCVOID lpMem
  1282. );
  1283. BOOL HeapValidate(
  1284. HANDLE hHeap,
  1285. DWORD dwFlags,
  1286. LPCVOID lpMem
  1287. );
  1288. SIZE_T HeapCompact(
  1289. HANDLE hHeap,
  1290. DWORD dwFlags
  1291. );
  1292. HANDLE GetProcessHeap();
  1293. DWORD GetProcessHeaps(
  1294. DWORD NumberOfHeaps,
  1295. PHANDLE ProcessHeaps
  1296. );
  1297. struct PROCESS_HEAP_ENTRY {
  1298. PVOID lpData;
  1299. DWORD cbData;
  1300. BYTE cbOverhead;
  1301. BYTE iRegionIndex;
  1302. WORD wFlags;
  1303. union _inner_union {
  1304. struct _inner_struct {
  1305. HANDLE hMem;
  1306. DWORD[3] dwReserved;
  1307. }
  1308. _inner_struct Block;
  1309. struct _inner_struct2 {
  1310. DWORD dwCommittedSize;
  1311. DWORD dwUnCommittedSize;
  1312. LPVOID lpFirstBlock;
  1313. LPVOID lpLastBlock;
  1314. }
  1315. _inner_struct2 Region;
  1316. }
  1317. _inner_union fields;
  1318. }
  1319. alias PROCESS_HEAP_ENTRY* LPPROCESS_HEAP_ENTRY;
  1320. alias PROCESS_HEAP_ENTRY* PPROCESS_HEAP_ENTRY;
  1321. const auto PROCESS_HEAP_REGION = 0x0001;
  1322. const auto PROCESS_HEAP_UNCOMMITTED_RANGE = 0x0002;
  1323. const auto PROCESS_HEAP_ENTRY_BUSY = 0x0004;
  1324. const auto PROCESS_HEAP_ENTRY_MOVEABLE = 0x0010;
  1325. const auto PROCESS_HEAP_ENTRY_DDESHARE = 0x0020;
  1326. BOOL HeapLock(
  1327. HANDLE hHeap
  1328. );
  1329. BOOL HeapUnlock(
  1330. HANDLE hHeap
  1331. );
  1332. BOOL HeapWalk(
  1333. HANDLE hHeap,
  1334. LPPROCESS_HEAP_ENTRY lpEntry
  1335. );
  1336. BOOL HeapSetInformation (
  1337. HANDLE HeapHandle,
  1338. HEAP_INFORMATION_CLASS HeapInformationClass,
  1339. PVOID HeapInformation,
  1340. SIZE_T HeapInformationLength
  1341. );
  1342. BOOL HeapQueryInformation (
  1343. HANDLE HeapHandle,
  1344. HEAP_INFORMATION_CLASS HeapInformationClass,
  1345. PVOID HeapInformation,
  1346. SIZE_T HeapInformationLength,
  1347. PSIZE_T ReturnLength
  1348. );
  1349. // GetBinaryType return values.
  1350. const auto SCS_32BIT_BINARY = 0;
  1351. const auto SCS_DOS_BINARY = 1;
  1352. const auto SCS_WOW_BINARY = 2;
  1353. const auto SCS_PIF_BINARY = 3;
  1354. const auto SCS_POSIX_BINARY = 4;
  1355. const auto SCS_OS216_BINARY = 5;
  1356. const auto SCS_64BIT_BINARY = 6;
  1357. version(X86_64) {
  1358. const auto SCS_THIS_PLATFORM_BINARY = SCS_64BIT_BINARY;
  1359. }
  1360. else {
  1361. const auto SCS_THIS_PLATFORM_BINARY = SCS_32BIT_BINARY;
  1362. }
  1363. BOOL GetBinaryTypeA(
  1364. LPCSTR lpApplicationName,
  1365. LPDWORD lpBinaryType
  1366. );
  1367. BOOL GetBinaryTypeW(
  1368. LPCWSTR lpApplicationName,
  1369. LPDWORD lpBinaryType
  1370. );
  1371. version(UNICODE) {
  1372. alias GetBinaryTypeW GetBinaryType;
  1373. }
  1374. else {
  1375. alias GetBinaryTypeA GetBinaryType;
  1376. }
  1377. DWORD GetShortPathNameA(
  1378. LPCSTR lpszLongPath,
  1379. LPSTR lpszShortPath,
  1380. DWORD cchBuffer
  1381. );
  1382. DWORD GetShortPathNameW(
  1383. LPCWSTR lpszLongPath,
  1384. LPWSTR lpszShortPath,
  1385. DWORD cchBuffer
  1386. );
  1387. version(UNICODE) {
  1388. alias GetShortPathNameW GetShortPathName;
  1389. }
  1390. else {
  1391. alias GetShortPathNameA GetShortPathName;
  1392. }
  1393. DWORD GetLongPathNameA(
  1394. LPCSTR lpszShortPath,
  1395. LPSTR lpszLongPath,
  1396. DWORD cchBuffer
  1397. );
  1398. DWORD GetLongPathNameW(
  1399. LPCWSTR lpszShortPath,
  1400. LPWSTR lpszLongPath,
  1401. DWORD cchBuffer
  1402. );
  1403. version(UNICODE) {
  1404. alias GetLongPathNameW GetLongPathName;
  1405. }
  1406. else {
  1407. alias GetLongPathNameA GetLongPathName;
  1408. }
  1409. DWORD GetLongPathNameTransactedA(
  1410. LPCSTR lpszShortPath,
  1411. LPSTR lpszLongPath,
  1412. DWORD cchBuffer,
  1413. HANDLE hTransaction
  1414. );
  1415. DWORD GetLongPathNameTransactedW(
  1416. LPCWSTR lpszShortPath,
  1417. LPWSTR lpszLongPath,
  1418. DWORD cchBuffer,
  1419. HANDLE hTransaction
  1420. );
  1421. version(UNICODE) {
  1422. alias GetLongPathNameTransactedW GetLongPathNameTransacted;
  1423. }
  1424. else {
  1425. alias GetLongPathNameTransactedA GetLongPathNameTransacted;
  1426. }
  1427. BOOL GetProcessAffinityMask(
  1428. HANDLE hProcess,
  1429. PDWORD_PTR lpProcessAffinityMask,
  1430. PDWORD_PTR lpSystemAffinityMask
  1431. );
  1432. BOOL SetProcessAffinityMask(
  1433. HANDLE hProcess,
  1434. DWORD_PTR dwProcessAffinityMask
  1435. );
  1436. BOOL GetProcessHandleCount(
  1437. HANDLE hProcess,
  1438. PDWORD pdwHandleCount
  1439. );
  1440. BOOL GetProcessTimes(
  1441. HANDLE hProcess,
  1442. LPFILETIME lpCreationTime,
  1443. LPFILETIME lpExitTime,
  1444. LPFILETIME lpKernelTime,
  1445. LPFILETIME lpUserTime
  1446. );
  1447. BOOL GetProcessIoCounters(
  1448. HANDLE hProcess,
  1449. PIO_COUNTERS lpIoCounters
  1450. );
  1451. BOOL GetProcessWorkingSetSize(
  1452. HANDLE hProcess,
  1453. PSIZE_T lpMinimumWorkingSetSize,
  1454. PSIZE_T lpMaximumWorkingSetSize
  1455. );
  1456. BOOL GetProcessWorkingSetSizeEx(
  1457. HANDLE hProcess,
  1458. PSIZE_T lpMinimumWorkingSetSize,
  1459. PSIZE_T lpMaximumWorkingSetSize,
  1460. PDWORD Flags
  1461. );
  1462. BOOL SetProcessWorkingSetSize(
  1463. HANDLE hProcess,
  1464. SIZE_T dwMinimumWorkingSetSize,
  1465. SIZE_T dwMaximumWorkingSetSize
  1466. );
  1467. BOOL SetProcessWorkingSetSizeEx(
  1468. HANDLE hProcess,
  1469. SIZE_T dwMinimumWorkingSetSize,
  1470. SIZE_T dwMaximumWorkingSetSize,
  1471. DWORD Flags
  1472. );
  1473. HANDLE OpenProcess(
  1474. DWORD dwDesiredAccess,
  1475. BOOL bInheritHandle,
  1476. DWORD dwProcessId
  1477. );
  1478. HANDLE GetCurrentProcess();
  1479. DWORD GetCurrentProcessId();
  1480. VOID ExitProcess(
  1481. UINT uExitCode
  1482. );
  1483. BOOL TerminateProcess(
  1484. HANDLE hProcess,
  1485. UINT uExitCode
  1486. );
  1487. BOOL GetExitCodeProcess(
  1488. HANDLE hProcess,
  1489. LPDWORD lpExitCode
  1490. );
  1491. VOID FatalExit(
  1492. int ExitCode
  1493. );
  1494. LPCH GetEnvironmentStrings();
  1495. LPWCH
  1496. GetEnvironmentStringsW();
  1497. version(UNICODE) {
  1498. alias GetEnvironmentStringsW GetEnvironmentStrings;
  1499. }
  1500. else {
  1501. alias GetEnvironmentStrings GetEnvironmentStringsA;
  1502. }
  1503. BOOL SetEnvironmentStringsA(
  1504. LPCH NewEnvironment
  1505. );
  1506. BOOL SetEnvironmentStringsW(
  1507. LPWCH NewEnvironment
  1508. );
  1509. version(UNICODE) {
  1510. alias SetEnvironmentStringsW SetEnvironmentStrings;
  1511. }
  1512. else {
  1513. alias SetEnvironmentStringsA SetEnvironmentStrings;
  1514. }
  1515. BOOL FreeEnvironmentStringsA(
  1516. LPCH
  1517. );
  1518. BOOL FreeEnvironmentStringsW(
  1519. LPWCH
  1520. );
  1521. version(UNICODE) {
  1522. alias FreeEnvironmentStringsW FreeEnvironmentStrings;
  1523. }
  1524. else {
  1525. alias FreeEnvironmentStringsA FreeEnvironmentStrings;
  1526. }
  1527. VOID RaiseException(
  1528. DWORD dwExceptionCode,
  1529. DWORD dwExceptionFlags,
  1530. DWORD nNumberOfArguments,
  1531. ULONG_PTR *lpArguments
  1532. );
  1533. LONG UnhandledExceptionFilter(
  1534. EXCEPTION_POINTERS *ExceptionInfo
  1535. );
  1536. alias LONG function(EXCEPTION_POINTERS* ExceptionInfo) PTOP_LEVEL_EXCEPTION_FILTER;
  1537. alias PTOP_LEVEL_EXCEPTION_FILTER LPTOP_LEVEL_EXCEPTION_FILTER;
  1538. LPTOP_LEVEL_EXCEPTION_FILTER SetUnhandledExceptionFilter(
  1539. LPTOP_LEVEL_EXCEPTION_FILTER lpTopLevelExceptionFilter
  1540. );
  1541. //
  1542. // Fiber creation flags
  1543. //
  1544. const auto FIBER_FLAG_FLOAT_SWITCH = 0x1 ; // context switch floating point
  1545. LPVOID CreateFiber(
  1546. SIZE_T dwStackSize,
  1547. LPFIBER_START_ROUTINE lpStartAddress,
  1548. LPVOID lpParameter
  1549. );
  1550. LPVOID CreateFiberEx(
  1551. SIZE_T dwStackCommitSize,
  1552. SIZE_T dwStackReserveSize,
  1553. DWORD dwFlags,
  1554. LPFIBER_START_ROUTINE lpStartAddress,
  1555. LPVOID lpParameter
  1556. );
  1557. VOID DeleteFiber(
  1558. LPVOID lpFiber
  1559. );
  1560. LPVOID ConvertThreadToFiber(
  1561. LPVOID lpParameter
  1562. );
  1563. LPVOID ConvertThreadToFiberEx(
  1564. LPVOID lpParameter,
  1565. DWORD dwFlags
  1566. );
  1567. BOOL ConvertFiberToThread();
  1568. BOOL IsThreadAFiber();
  1569. VOID SwitchToFiber(
  1570. LPVOID lpFiber
  1571. );
  1572. BOOL SwitchToThread();
  1573. HANDLE CreateThread(
  1574. LPSECURITY_ATTRIBUTES lpThreadAttributes,
  1575. SIZE_T dwStackSize,
  1576. LPTHREAD_START_ROUTINE lpStartAddress,
  1577. LPVOID lpParameter,
  1578. DWORD dwCreationFlags,
  1579. LPDWORD lpThreadId
  1580. );
  1581. HANDLE CreateRemoteThread(
  1582. HANDLE hProcess,
  1583. LPSECURITY_ATTRIBUTES lpThreadAttributes,
  1584. SIZE_T dwStackSize,
  1585. LPTHREAD_START_ROUTINE lpStartAddress,
  1586. LPVOID lpParameter,
  1587. DWORD dwCreationFlags,
  1588. LPDWORD lpThreadId
  1589. );
  1590. HANDLE GetCurrentThread();
  1591. DWORD GetCurrentThreadId();
  1592. BOOL SetThreadStackGuarantee (
  1593. PULONG StackSizeInBytes
  1594. );
  1595. DWORD GetProcessIdOfThread(
  1596. HANDLE Thread
  1597. );
  1598. DWORD GetThreadId(
  1599. HANDLE Thread
  1600. );
  1601. DWORD GetProcessId(
  1602. HANDLE Process
  1603. );
  1604. DWORD GetCurrentProcessorNumber();
  1605. DWORD_PTR SetThreadAffinityMask(
  1606. HANDLE hThread,
  1607. DWORD_PTR dwThreadAffinityMask
  1608. );
  1609. DWORD SetThreadIdealProcessor(
  1610. HANDLE hThread,
  1611. DWORD dwIdealProcessor
  1612. );
  1613. BOOL SetProcessPriorityBoost(
  1614. HANDLE hProcess,
  1615. BOOL bDisablePriorityBoost
  1616. );
  1617. BOOL GetProcessPriorityBoost(
  1618. HANDLE hProcess,
  1619. PBOOL pDisablePriorityBoost
  1620. );
  1621. BOOL RequestWakeupLatency(
  1622. LATENCY_TIME latency
  1623. );
  1624. BOOL IsSystemResumeAutomatic();
  1625. HANDLE OpenThread(
  1626. DWORD dwDesiredAccess,
  1627. BOOL bInheritHandle,
  1628. DWORD dwThreadId
  1629. );
  1630. BOOL SetThreadPriority(
  1631. HANDLE hThread,
  1632. int nPriority
  1633. );
  1634. BOOL SetThreadPriorityBoost(
  1635. HANDLE hThread,
  1636. BOOL bDisablePriorityBoost
  1637. );
  1638. BOOL GetThreadPriorityBoost(
  1639. HANDLE hThread,
  1640. PBOOL pDisablePriorityBoost
  1641. );
  1642. int GetThreadPriority(
  1643. HANDLE hThread
  1644. );
  1645. BOOL GetThreadTimes(
  1646. HANDLE hThread,
  1647. LPFILETIME lpCreationTime,
  1648. LPFILETIME lpExitTime,
  1649. LPFILETIME lpKernelTime,
  1650. LPFILETIME lpUserTime
  1651. );
  1652. BOOL GetThreadIOPendingFlag(
  1653. HANDLE hThread,
  1654. PBOOL lpIOIsPending
  1655. );
  1656. VOID ExitThread(
  1657. DWORD dwExitCode
  1658. );
  1659. BOOL TerminateThread(
  1660. HANDLE hThread,
  1661. DWORD dwExitCode
  1662. );
  1663. BOOL GetExitCodeThread(
  1664. HANDLE hThread,
  1665. LPDWORD lpExitCode
  1666. );
  1667. BOOL GetThreadSelectorEntry(
  1668. HANDLE hThread,
  1669. DWORD dwSelector,
  1670. LPLDT_ENTRY lpSelectorEntry
  1671. );
  1672. EXECUTION_STATE SetThreadExecutionState(
  1673. EXECUTION_STATE esFlags
  1674. );
  1675. DWORD GetLastError();
  1676. VOID SetLastError(
  1677. DWORD dwErrCode
  1678. );
  1679. VOID RestoreLastError(
  1680. DWORD dwErrCode
  1681. );
  1682. alias VOID function(DWORD) PRESTORE_LAST_ERROR;
  1683. const auto RESTORE_LAST_ERROR_NAME_A = "RestoreLastError\0"c;
  1684. const auto RESTORE_LAST_ERROR_NAME_W = "RestoreLastError\0"w;
  1685. version(UNICODE) {
  1686. const auto RESTORE_LAST_ERROR_NAME = RESTORE_LAST_ERROR_NAME_W;
  1687. }
  1688. else {
  1689. const auto RESTORE_LAST_ERROR_NAME = RESTORE_LAST_ERROR_NAME_A;
  1690. }
  1691. //const auto HasOverlappedIoCompleted(lpOverlapped) = (((DWORD)(lpOverlapped)->Internal) != STATUS_PENDING);
  1692. BOOL GetOverlappedResult(
  1693. HANDLE hFile,
  1694. LPOVERLAPPED lpOverlapped,
  1695. LPDWORD lpNumberOfBytesTransferred,
  1696. BOOL bWait
  1697. );
  1698. HANDLE CreateIoCompletionPort(
  1699. HANDLE FileHandle,
  1700. HANDLE ExistingCompletionPort,
  1701. ULONG_PTR CompletionKey,
  1702. DWORD NumberOfConcurrentThreads
  1703. );
  1704. BOOL GetQueuedCompletionStatus(
  1705. HANDLE CompletionPort,
  1706. LPDWORD lpNumberOfBytesTransferred,
  1707. PULONG_PTR lpCompletionKey,
  1708. LPOVERLAPPED *lpOverlapped,
  1709. DWORD dwMilliseconds
  1710. );
  1711. BOOL GetQueuedCompletionStatusEx(
  1712. HANDLE CompletionPort,
  1713. LPOVERLAPPED_ENTRY lpCompletionPortEntries,
  1714. ULONG ulCount,
  1715. PULONG ulNumEntriesRemoved,
  1716. DWORD dwMilliseconds,
  1717. BOOL fAlertable
  1718. );
  1719. BOOL PostQueuedCompletionStatus(
  1720. HANDLE CompletionPort,
  1721. DWORD dwNumberOfBytesTransferred,
  1722. ULONG_PTR dwCompletionKey,
  1723. LPOVERLAPPED lpOverlapped
  1724. );
  1725. //
  1726. // The following flags allows an application to change
  1727. // the semantics of IO completion notification.
  1728. //
  1729. //
  1730. // Don't queue an entry to an associated completion port if returning success
  1731. // synchronously.
  1732. //
  1733. const auto FILE_SKIP_COMPLETION_PORT_ON_SUCCESS = 0x1;
  1734. //
  1735. // Don't set the file handle event on IO completion.
  1736. //
  1737. const auto FILE_SKIP_SET_EVENT_ON_HANDLE = 0x2;
  1738. BOOL SetFileCompletionNotificationModes(
  1739. HANDLE FileHandle,
  1740. UCHAR Flags
  1741. );
  1742. BOOL SetFileIoOverlappedRange(
  1743. HANDLE FileHandle,
  1744. PUCHAR OverlappedRangeStart,
  1745. ULONG Length
  1746. );
  1747. const auto SEM_FAILCRITICALERRORS = 0x0001;
  1748. const auto SEM_NOGPFAULTERRORBOX = 0x0002;
  1749. const auto SEM_NOALIGNMENTFAULTEXCEPT = 0x0004;
  1750. const auto SEM_NOOPENFILEERRORBOX = 0x8000;
  1751. UINT GetErrorMode();
  1752. UINT SetErrorMode(
  1753. UINT uMode
  1754. );
  1755. BOOL ReadProcessMemory(
  1756. HANDLE hProcess,
  1757. LPCVOID lpBaseAddress,
  1758. LPVOID lpBuffer,
  1759. SIZE_T nSize,
  1760. SIZE_T * lpNumberOfBytesRead
  1761. );
  1762. BOOL WriteProcessMemory(
  1763. HANDLE hProcess,
  1764. LPVOID lpBaseAddress,
  1765. LPCVOID lpBuffer,
  1766. SIZE_T nSize,
  1767. SIZE_T * lpNumberOfBytesWritten
  1768. );
  1769. BOOL GetThreadContext(
  1770. HANDLE hThread,
  1771. LPCONTEXT lpContext
  1772. );
  1773. BOOL SetThreadContext(
  1774. HANDLE hThread,
  1775. CONTEXT *lpContext
  1776. );
  1777. BOOL Wow64GetThreadContext(
  1778. HANDLE hThread,
  1779. PWOW64_CONTEXT lpContext
  1780. );
  1781. BOOL Wow64SetThreadContext(
  1782. HANDLE hThread,
  1783. WOW64_CONTEXT *lpContext
  1784. );
  1785. DWORD SuspendThread(
  1786. HANDLE hThread
  1787. );
  1788. DWORD Wow64SuspendThread(
  1789. HANDLE hThread
  1790. );
  1791. DWORD ResumeThread(
  1792. HANDLE hThread
  1793. );
  1794. alias VOID function(ULONG_PTR dwParam) PAPCFUNC;
  1795. DWORD QueueUserAPC(
  1796. PAPCFUNC pfnAPC,
  1797. HANDLE hThread,
  1798. ULONG_PTR dwData
  1799. );
  1800. BOOL IsDebuggerPresent();
  1801. BOOL CheckRemoteDebuggerPresent(
  1802. HANDLE hProcess,
  1803. PBOOL pbDebuggerPresent
  1804. );
  1805. VOID DebugBreak();
  1806. BOOL WaitForDebugEvent(
  1807. LPDEBUG_EVENT lpDebugEvent,
  1808. DWORD dwMilliseconds
  1809. );
  1810. BOOL ContinueDebugEvent(
  1811. DWORD dwProcessId,
  1812. DWORD dwThreadId,
  1813. DWORD dwContinueStatus
  1814. );
  1815. BOOL DebugActiveProcess(
  1816. DWORD dwProcessId
  1817. );
  1818. BOOL DebugActiveProcessStop(
  1819. DWORD dwProcessId
  1820. );
  1821. BOOL DebugSetProcessKillOnExit(
  1822. BOOL KillOnExit
  1823. );
  1824. BOOL DebugBreakProcess (
  1825. HANDLE Process
  1826. );
  1827. VOID InitializeCriticalSection(
  1828. LPCRITICAL_SECTION lpCriticalSection
  1829. );
  1830. VOID EnterCriticalSection(
  1831. LPCRITICAL_SECTION lpCriticalSection
  1832. );
  1833. VOID LeaveCriticalSection(
  1834. LPCRITICAL_SECTION lpCriticalSection
  1835. );
  1836. const auto CRITICAL_SECTION_NO_DEBUG_INFO = RTL_CRITICAL_SECTION_FLAG_NO_DEBUG_INFO;
  1837. BOOL InitializeCriticalSectionAndSpinCount(
  1838. LPCRITICAL_SECTION lpCriticalSection,
  1839. DWORD dwSpinCount
  1840. );
  1841. BOOL InitializeCriticalSectionEx(
  1842. LPCRITICAL_SECTION lpCriticalSection,
  1843. DWORD dwSpinCount,
  1844. DWORD Flags
  1845. );
  1846. DWORD SetCriticalSectionSpinCount(
  1847. LPCRITICAL_SECTION lpCriticalSection,
  1848. DWORD dwSpinCount
  1849. );
  1850. BOOL TryEnterCriticalSection(
  1851. LPCRITICAL_SECTION lpCriticalSection
  1852. );
  1853. VOID DeleteCriticalSection(
  1854. LPCRITICAL_SECTION lpCriticalSection
  1855. );
  1856. BOOL SetEvent(
  1857. HANDLE hEvent
  1858. );
  1859. BOOL ResetEvent(
  1860. HANDLE hEvent
  1861. );
  1862. BOOL PulseEvent(
  1863. HANDLE hEvent
  1864. );
  1865. BOOL ReleaseSemaphore(
  1866. HANDLE hSemaphore,
  1867. LONG lReleaseCount,
  1868. LPLONG lpPreviousCount
  1869. );
  1870. BOOL ReleaseMutex(
  1871. HANDLE hMutex
  1872. );
  1873. DWORD WaitForSingleObject(
  1874. HANDLE hHandle,
  1875. DWORD dwMilliseconds
  1876. );
  1877. DWORD WaitForMultipleObjects(
  1878. DWORD nCount,
  1879. HANDLE *lpHandles,
  1880. BOOL bWaitAll,
  1881. DWORD dwMilliseconds
  1882. );
  1883. VOID Sleep(
  1884. DWORD dwMilliseconds
  1885. );
  1886. HGLOBAL LoadResource(
  1887. HMODULE hModule,
  1888. HRSRC hResInfo
  1889. );
  1890. DWORD SizeofResource(
  1891. HMODULE hModule,
  1892. HRSRC hResInfo
  1893. );
  1894. ATOM GlobalDeleteAtom(
  1895. ATOM nAtom
  1896. );
  1897. BOOL InitAtomTable(
  1898. DWORD nSize
  1899. );
  1900. ATOM DeleteAtom(
  1901. ATOM nAtom
  1902. );
  1903. UINT SetHandleCount(
  1904. UINT uNumber
  1905. );
  1906. DWORD GetLogicalDrives();
  1907. BOOL LockFile(
  1908. HANDLE hFile,
  1909. DWORD dwFileOffsetLow,
  1910. DWORD dwFileOffsetHigh,
  1911. DWORD nNumberOfBytesToLockLow,
  1912. DWORD nNumberOfBytesToLockHigh
  1913. );
  1914. BOOL UnlockFile(
  1915. HANDLE hFile,
  1916. DWORD dwFileOffsetLow,
  1917. DWORD dwFileOffsetHigh,
  1918. DWORD nNumberOfBytesToUnlockLow,
  1919. DWORD nNumberOfBytesToUnlockHigh
  1920. );
  1921. BOOL LockFileEx(
  1922. HANDLE hFile,
  1923. DWORD dwFlags,
  1924. DWORD dwReserved,
  1925. DWORD nNumberOfBytesToLockLow,
  1926. DWORD nNumberOfBytesToLockHigh,
  1927. LPOVERLAPPED lpOverlapped
  1928. );
  1929. const auto LOCKFILE_FAIL_IMMEDIATELY = 0x00000001;
  1930. const auto LOCKFILE_EXCLUSIVE_LOCK = 0x00000002;
  1931. BOOL UnlockFileEx(
  1932. HANDLE hFile,
  1933. DWORD dwReserved,
  1934. DWORD nNumberOfBytesToUnlockLow,
  1935. DWORD nNumberOfBytesToUnlockHigh,
  1936. LPOVERLAPPED lpOverlapped
  1937. );
  1938. struct BY_HANDLE_FILE_INFORMATION {
  1939. DWORD dwFileAttributes;
  1940. FILETIME ftCreationTime;
  1941. FILETIME ftLastAccessTime;
  1942. FILETIME ftLastWriteTime;
  1943. DWORD dwVolumeSerialNumber;
  1944. DWORD nFileSizeHigh;
  1945. DWORD nFileSizeLow;
  1946. DWORD nNumberOfLinks;
  1947. DWORD nFileIndexHigh;
  1948. DWORD nFileIndexLow;
  1949. }
  1950. alias BY_HANDLE_FILE_INFORMATION* PBY_HANDLE_FILE_INFORMATION;
  1951. alias BY_HANDLE_FILE_INFORMATION* LPBY_HANDLE_FILE_INFORMATION;
  1952. BOOL GetFileInformationByHandle(
  1953. HANDLE hFile,
  1954. LPBY_HANDLE_FILE_INFORMATION lpFileInformation
  1955. );
  1956. DWORD GetFileType(
  1957. HANDLE hFile
  1958. );
  1959. DWORD GetFileSize(
  1960. HANDLE hFile,
  1961. LPDWORD lpFileSizeHigh
  1962. );
  1963. BOOL GetFileSizeEx(
  1964. HANDLE hFile,
  1965. PLARGE_INTEGER lpFileSize
  1966. );
  1967. HANDLE GetStdHandle(
  1968. DWORD nStdHandle
  1969. );
  1970. BOOL SetStdHandle(
  1971. DWORD nStdHandle,
  1972. HANDLE hHandle
  1973. );
  1974. BOOL SetStdHandleEx(
  1975. DWORD nStdHandle,
  1976. HANDLE hHandle,
  1977. PHANDLE phPrevValue
  1978. );
  1979. BOOL WriteFile(
  1980. HANDLE hFile,
  1981. LPCVOID lpBuffer,
  1982. DWORD nNumberOfBytesToWrite,
  1983. LPDWORD lpNumberOfBytesWritten,
  1984. LPOVERLAPPED lpOverlapped
  1985. );
  1986. BOOL ReadFile(
  1987. HANDLE hFile,
  1988. LPVOID lpBuffer,
  1989. DWORD nNumberOfBytesToRead,
  1990. LPDWORD lpNumberOfBytesRead,
  1991. LPOVERLAPPED lpOverlapped
  1992. );
  1993. BOOL FlushFileBuffers(
  1994. HANDLE hFile
  1995. );
  1996. BOOL DeviceIoControl(
  1997. HANDLE hDevice,
  1998. DWORD dwIoControlCode,
  1999. LPVOID lpInBuffer,
  2000. DWORD nInBufferSize,
  2001. LPVOID lpOutBuffer,
  2002. DWORD nOutBufferSize,
  2003. LPDWORD lpBytesReturned,
  2004. LPOVERLAPPED lpOverlapped
  2005. );
  2006. BOOL RequestDeviceWakeup(
  2007. HANDLE hDevice
  2008. );
  2009. BOOL CancelDeviceWakeupRequest(
  2010. HANDLE hDevice
  2011. );
  2012. BOOL GetDevicePowerState(
  2013. HANDLE hDevice,
  2014. BOOL *pfOn
  2015. );
  2016. BOOL SetMessageWaitingIndicator(
  2017. HANDLE hMsgIndicator,
  2018. ULONG ulMsgCount
  2019. );
  2020. BOOL SetEndOfFile(
  2021. HANDLE hFile
  2022. );
  2023. DWORD SetFilePointer(
  2024. HANDLE hFile,
  2025. LONG lDistanceToMove,
  2026. PLONG lpDistanceToMoveHigh,
  2027. DWORD dwMoveMethod
  2028. );
  2029. BOOL SetFilePointerEx(
  2030. HANDLE hFile,
  2031. LARGE_INTEGER liDistanceToMove,
  2032. PLARGE_INTEGER lpNewFilePointer,
  2033. DWORD dwMoveMethod
  2034. );
  2035. BOOL FindClose(
  2036. HANDLE hFindFile
  2037. );
  2038. BOOL GetFileTime(
  2039. HANDLE hFile,
  2040. LPFILETIME lpCreationTime,
  2041. LPFILETIME lpLastAccessTime,
  2042. LPFILETIME lpLastWriteTime
  2043. );
  2044. BOOL SetFileTime(
  2045. HANDLE hFile,
  2046. FILETIME *lpCreationTime,
  2047. FILETIME *lpLastAccessTime,
  2048. FILETIME *lpLastWriteTime
  2049. );
  2050. BOOL SetFileValidData(
  2051. HANDLE hFile,
  2052. LONGLONG ValidDataLength
  2053. );
  2054. BOOL SetFileShortNameA(
  2055. HANDLE hFile,
  2056. LPCSTR lpShortName
  2057. );
  2058. BOOL SetFileShortNameW(
  2059. HANDLE hFile,
  2060. LPCWSTR lpShortName
  2061. );
  2062. version(UNICODE) {
  2063. alias SetFileShortNameW SetFileShortName;
  2064. }
  2065. else {
  2066. alias SetFileShortNameA SetFileShortName;
  2067. }
  2068. BOOL CloseHandle(
  2069. HANDLE hObject
  2070. );
  2071. BOOL DuplicateHandle(
  2072. HANDLE hSourceProcessHandle,
  2073. HANDLE hSourceHandle,
  2074. HANDLE hTargetProcessHandle,
  2075. LPHANDLE lpTargetHandle,
  2076. DWORD dwDesiredAccess,
  2077. BOOL bInheritHandle,
  2078. DWORD dwOptions
  2079. );
  2080. BOOL GetHandleInformation(
  2081. HANDLE hObject,
  2082. LPDWORD lpdwFlags
  2083. );
  2084. BOOL SetHandleInformation(
  2085. HANDLE hObject,
  2086. DWORD dwMask,
  2087. DWORD dwFlags
  2088. );
  2089. const auto HANDLE_FLAG_INHERIT = 0x00000001;
  2090. const auto HANDLE_FLAG_PROTECT_FROM_CLOSE = 0x00000002;
  2091. const auto HINSTANCE_ERROR = 32;
  2092. DWORD LoadModule(
  2093. LPCSTR lpModuleName,
  2094. LPVOID lpParameterBlock
  2095. );
  2096. UINT WinExec(
  2097. LPCSTR lpCmdLine,
  2098. UINT uCmdShow
  2099. );
  2100. BOOL ClearCommBreak(
  2101. HANDLE hFile
  2102. );
  2103. BOOL ClearCommError(
  2104. HANDLE hFile,
  2105. LPDWORD lpErrors,
  2106. LPCOMSTAT lpStat
  2107. );
  2108. BOOL SetupComm(
  2109. HANDLE hFile,
  2110. DWORD dwInQueue,
  2111. DWORD dwOutQueue
  2112. );
  2113. BOOL EscapeCommFunction(
  2114. HANDLE hFile,
  2115. DWORD dwFunc
  2116. );
  2117. BOOL GetCommConfig(
  2118. HANDLE hCommDev,
  2119. LPCOMMCONFIG lpCC,
  2120. LPDWORD lpdwSize
  2121. );
  2122. BOOL GetCommMask(
  2123. HANDLE hFile,
  2124. LPDWORD lpEvtMask
  2125. );
  2126. BOOL GetCommProperties(
  2127. HANDLE hFile,
  2128. LPCOMMPROP lpCommProp
  2129. );
  2130. BOOL GetCommModemStatus(
  2131. HANDLE hFile,
  2132. LPDWORD lpModemStat
  2133. );
  2134. BOOL GetCommState(
  2135. HANDLE hFile,
  2136. LPDCB lpDCB
  2137. );
  2138. BOOL GetCommTimeouts(
  2139. HANDLE hFile,
  2140. LPCOMMTIMEOUTS lpCommTimeouts
  2141. );
  2142. BOOL PurgeComm(
  2143. HANDLE hFile,
  2144. DWORD dwFlags
  2145. );
  2146. BOOL SetCommBreak(
  2147. HANDLE hFile
  2148. );
  2149. BOOL SetCommConfig(
  2150. HANDLE hCommDev,
  2151. LPCOMMCONFIG lpCC,
  2152. DWORD dwSize
  2153. );
  2154. BOOL SetCommMask(
  2155. HANDLE hFile,
  2156. DWORD dwEvtMask
  2157. );
  2158. BOOL SetCommState(
  2159. HANDLE hFile,
  2160. LPDCB lpDCB
  2161. );
  2162. BOOL SetCommTimeouts(
  2163. HANDLE hFile,
  2164. LPCOMMTIMEOUTS lpCommTimeouts
  2165. );
  2166. BOOL TransmitCommChar(
  2167. HANDLE hFile,
  2168. char cChar
  2169. );
  2170. BOOL WaitCommEvent(
  2171. HANDLE hFile,
  2172. LPDWORD lpEvtMask,
  2173. LPOVERLAPPED lpOverlapped
  2174. );
  2175. DWORD SetTapePosition(
  2176. HANDLE hDevice,
  2177. DWORD dwPositionMethod,
  2178. DWORD dwPartition,
  2179. DWORD dwOffsetLow,
  2180. DWORD dwOffsetHigh,
  2181. BOOL bImmediate
  2182. );
  2183. DWORD GetTapePosition(
  2184. HANDLE hDevice,
  2185. DWORD dwPositionType,
  2186. LPDWORD lpdwPartition,
  2187. LPDWORD lpdwOffsetLow,
  2188. LPDWORD lpdwOffsetHigh
  2189. );
  2190. DWORD PrepareTape(
  2191. HANDLE hDevice,
  2192. DWORD dwOperation,
  2193. BOOL bImmediate
  2194. );
  2195. DWORD EraseTape(
  2196. HANDLE hDevice,
  2197. DWORD dwEraseType,
  2198. BOOL bImmediate
  2199. );
  2200. DWORD CreateTapePartition(
  2201. HANDLE hDevice,
  2202. DWORD dwPartitionMethod,
  2203. DWORD dwCount,
  2204. DWORD dwSize
  2205. );
  2206. DWORD WriteTapemark(
  2207. HANDLE hDevice,
  2208. DWORD dwTapemarkType,
  2209. DWORD dwTapemarkCount,
  2210. BOOL bImmediate
  2211. );
  2212. DWORD GetTapeStatus(
  2213. HANDLE hDevice
  2214. );
  2215. DWORD GetTapeParameters(
  2216. HANDLE hDevice,
  2217. DWORD dwOperation,
  2218. LPDWORD lpdwSize,
  2219. LPVOID lpTapeInformation
  2220. );
  2221. const auto GET_TAPE_MEDIA_INFORMATION = 0;
  2222. const auto GET_TAPE_DRIVE_INFORMATION = 1;
  2223. DWORD SetTapeParameters(
  2224. HANDLE hDevice,
  2225. DWORD dwOperation,
  2226. LPVOID lpTapeInformation
  2227. );
  2228. const auto SET_TAPE_MEDIA_INFORMATION = 0;
  2229. const auto SET_TAPE_DRIVE_INFORMATION = 1;
  2230. BOOL Beep(
  2231. DWORD dwFreq,
  2232. DWORD dwDuration
  2233. );
  2234. int MulDiv(
  2235. int nNumber,
  2236. int nNumerator,
  2237. int nDenominator
  2238. );
  2239. VOID GetSystemTime(
  2240. LPSYSTEMTIME lpSystemTime
  2241. );
  2242. VOID GetSystemTimeAsFileTime(
  2243. LPFILETIME lpSystemTimeAsFileTime
  2244. );
  2245. BOOL SetSystemTime(
  2246. SYSTEMTIME *lpSystemTime
  2247. );
  2248. VOID GetLocalTime(
  2249. LPSYSTEMTIME lpSystemTime
  2250. );
  2251. BOOL SetLocalTime(
  2252. SYSTEMTIME *lpSystemTime
  2253. );
  2254. VOID GetSystemInfo(
  2255. LPSYSTEM_INFO lpSystemInfo
  2256. );
  2257. BOOL SetSystemFileCacheSize (
  2258. SIZE_T MinimumFileCacheSize,
  2259. SIZE_T MaximumFileCacheSize,
  2260. DWORD Flags
  2261. );
  2262. BOOL GetSystemFileCacheSize (
  2263. PSIZE_T lpMinimumFileCacheSize,
  2264. PSIZE_T lpMaximumFileCacheSize,
  2265. PDWORD lpFlags
  2266. );
  2267. BOOL GetSystemRegistryQuota(
  2268. PDWORD pdwQuotaAllowed,
  2269. PDWORD pdwQuotaUsed
  2270. );
  2271. BOOL GetSystemTimes(
  2272. LPFILETIME lpIdleTime,
  2273. LPFILETIME lpKernelTime,
  2274. LPFILETIME lpUserTime
  2275. );
  2276. VOID GetNativeSystemInfo(
  2277. LPSYSTEM_INFO lpSystemInfo
  2278. );
  2279. BOOL IsProcessorFeaturePresent(
  2280. DWORD ProcessorFeature
  2281. );
  2282. struct TIME_ZONE_INFORMATION {
  2283. LONG Bias;
  2284. WCHAR[32] StandardName;
  2285. SYSTEMTIME StandardDate;
  2286. LONG StandardBias;
  2287. WCHAR[32] DaylightName;
  2288. SYSTEMTIME DaylightDate;
  2289. LONG DaylightBias;
  2290. }
  2291. alias TIME_ZONE_INFORMATION* PTIME_ZONE_INFORMATION;
  2292. alias TIME_ZONE_INFORMATION* LPTIME_ZONE_INFORMATION;
  2293. struct DYNAMIC_TIME_ZONE_INFORMATION {
  2294. LONG Bias;
  2295. WCHAR[32] StandardName;
  2296. SYSTEMTIME StandardDate;
  2297. LONG StandardBias;
  2298. WCHAR[32] DaylightName;
  2299. SYSTEMTIME DaylightDate;
  2300. LONG DaylightBias;
  2301. WCHAR[128] TimeZoneKeyName;
  2302. BOOLEAN DynamicDaylightTimeDisabled;
  2303. }
  2304. alias DYNAMIC_TIME_ZONE_INFORMATION* PDYNAMIC_TIME_ZONE_INFORMATION;
  2305. BOOL SystemTimeToTzSpecificLocalTime(
  2306. TIME_ZONE_INFORMATION *lpTimeZoneInformation,
  2307. SYSTEMTIME *lpUniversalTime,
  2308. LPSYSTEMTIME lpLocalTime
  2309. );
  2310. BOOL TzSpecificLocalTimeToSystemTime(
  2311. TIME_ZONE_INFORMATION *lpTimeZoneInformation,
  2312. SYSTEMTIME *lpLocalTime,
  2313. LPSYSTEMTIME lpUniversalTime
  2314. );
  2315. DWORD GetTimeZoneInformation(
  2316. LPTIME_ZONE_INFORMATION lpTimeZoneInformation
  2317. );
  2318. BOOL SetTimeZoneInformation(
  2319. TIME_ZONE_INFORMATION *lpTimeZoneInformation
  2320. );
  2321. DWORD GetDynamicTimeZoneInformation(
  2322. PDYNAMIC_TIME_ZONE_INFORMATION pTimeZoneInformation
  2323. );
  2324. BOOL SetDynamicTimeZoneInformation(
  2325. DYNAMIC_TIME_ZONE_INFORMATION *lpTimeZoneInformation
  2326. );
  2327. //
  2328. // Routines to convert back and forth between system time and file time
  2329. //
  2330. BOOL SystemTimeToFileTime(
  2331. SYSTEMTIME *lpSystemTime,
  2332. LPFILETIME lpFileTime
  2333. );
  2334. BOOL FileTimeToLocalFileTime(
  2335. FILETIME *lpFileTime,
  2336. LPFILETIME lpLocalFileTime
  2337. );
  2338. BOOL LocalFileTimeToFileTime(
  2339. FILETIME *lpLocalFileTime,
  2340. LPFILETIME lpFileTime
  2341. );
  2342. BOOL FileTimeToSystemTime(
  2343. FILETIME *lpFileTime,
  2344. LPSYSTEMTIME lpSystemTime
  2345. );
  2346. LONG CompareFileTime(
  2347. FILETIME *lpFileTime1,
  2348. FILETIME *lpFileTime2
  2349. );
  2350. BOOL FileTimeToDosDateTime(
  2351. FILETIME *lpFileTime,
  2352. LPWORD lpFatDate,
  2353. LPWORD lpFatTime
  2354. );
  2355. BOOL DosDateTimeToFileTime(
  2356. WORD wFatDate,
  2357. WORD wFatTime,
  2358. LPFILETIME lpFileTime
  2359. );
  2360. DWORD GetTickCount();
  2361. ULONGLONG GetTickCount64();
  2362. BOOL SetSystemTimeAdjustment(
  2363. DWORD dwTimeAdjustment,
  2364. BOOL bTimeAdjustmentDisabled
  2365. );
  2366. BOOL GetSystemTimeAdjustment(
  2367. PDWORD lpTimeAdjustment,
  2368. PDWORD lpTimeIncrement,
  2369. PBOOL lpTimeAdjustmentDisabled
  2370. );
  2371. // #if !defined(MIDL_PASS)
  2372. // DWORD
  2373. // FormatMessageA(
  2374. // DWORD dwFlags,
  2375. // LPCVOID lpSource,
  2376. // DWORD dwMessageId,
  2377. // DWORD dwLanguageId,
  2378. // LPSTR lpBuffer,
  2379. // DWORD nSize,
  2380. // va_list *Arguments
  2381. // );
  2382. // DWORD
  2383. // FormatMessageW(
  2384. // DWORD dwFlags,
  2385. // LPCVOID lpSource,
  2386. // DWORD dwMessageId,
  2387. // DWORD dwLanguageId,
  2388. // LPWSTR lpBuffer,
  2389. // DWORD nSize,
  2390. // va_list *Arguments
  2391. // );
  2392. //
  2393. /*version(UNICODE) {
  2394. alias FormatMessageW FormatMessage;
  2395. }
  2396. else {
  2397. alias FormatMessageA FormatMessage;
  2398. }*/
  2399. const auto FORMAT_MESSAGE_ALLOCATE_BUFFER = 0x00000100;
  2400. const auto FORMAT_MESSAGE_IGNORE_INSERTS = 0x00000200;
  2401. const auto FORMAT_MESSAGE_FROM_STRING = 0x00000400;
  2402. const auto FORMAT_MESSAGE_FROM_HMODULE = 0x00000800;
  2403. const auto FORMAT_MESSAGE_FROM_SYSTEM = 0x00001000;
  2404. const auto FORMAT_MESSAGE_ARGUMENT_ARRAY = 0x00002000;
  2405. const auto FORMAT_MESSAGE_MAX_WIDTH_MASK = 0x000000FF;
  2406. BOOL CreatePipe(
  2407. PHANDLE hReadPipe,
  2408. PHANDLE hWritePipe,
  2409. LPSECURITY_ATTRIBUTES lpPipeAttributes,
  2410. DWORD nSize
  2411. );
  2412. BOOL ConnectNamedPipe(
  2413. HANDLE hNamedPipe,
  2414. LPOVERLAPPED lpOverlapped
  2415. );
  2416. BOOL DisconnectNamedPipe(
  2417. HANDLE hNamedPipe
  2418. );
  2419. BOOL SetNamedPipeHandleState(
  2420. HANDLE hNamedPipe,
  2421. LPDWORD lpMode,
  2422. LPDWORD lpMaxCollectionCount,
  2423. LPDWORD lpCollectDataTimeout
  2424. );
  2425. BOOL GetNamedPipeInfo(
  2426. HANDLE hNamedPipe,
  2427. LPDWORD lpFlags,
  2428. LPDWORD lpOutBufferSize,
  2429. LPDWORD lpInBufferSize,
  2430. LPDWORD lpMaxInstances
  2431. );
  2432. BOOL PeekNamedPipe(
  2433. HANDLE hNamedPipe,
  2434. LPVOID lpBuffer,
  2435. DWORD nBufferSize,
  2436. LPDWORD lpBytesRead,
  2437. LPDWORD lpTotalBytesAvail,
  2438. LPDWORD lpBytesLeftThisMessage
  2439. );
  2440. BOOL TransactNamedPipe(
  2441. HANDLE hNamedPipe,
  2442. LPVOID lpInBuffer,
  2443. DWORD nInBufferSize,
  2444. LPVOID lpOutBuffer,
  2445. DWORD nOutBufferSize,
  2446. LPDWORD lpBytesRead,
  2447. LPOVERLAPPED lpOverlapped
  2448. );
  2449. HANDLE CreateMailslotA(
  2450. LPCSTR lpName,
  2451. DWORD nMaxMessageSize,
  2452. DWORD lReadTimeout,
  2453. LPSECURITY_ATTRIBUTES lpSecurityAttributes
  2454. );
  2455. HANDLE CreateMailslotW(
  2456. LPCWSTR lpName,
  2457. DWORD nMaxMessageSize,
  2458. DWORD lReadTimeout,
  2459. LPSECURITY_ATTRIBUTES lpSecurityAttributes
  2460. );
  2461. version(UNICODE) {
  2462. alias CreateMailslotW CreateMailslot;
  2463. }
  2464. else {
  2465. alias CreateMailslotA CreateMailslot;
  2466. }
  2467. BOOL GetMailslotInfo(
  2468. HANDLE hMailslot,
  2469. LPDWORD lpMaxMessageSize,
  2470. LPDWORD lpNextSize,
  2471. LPDWORD lpMessageCount,
  2472. LPDWORD lpReadTimeout
  2473. );
  2474. BOOL SetMailslotInfo(
  2475. HANDLE hMailslot,
  2476. DWORD lReadTimeout
  2477. );
  2478. LPVOID MapViewOfFile(
  2479. HANDLE hFileMappingObject,
  2480. DWORD dwDesiredAccess,
  2481. DWORD dwFileOffsetHigh,
  2482. DWORD dwFileOffsetLow,
  2483. SIZE_T dwNumberOfBytesToMap
  2484. );
  2485. BOOL FlushViewOfFile(
  2486. LPCVOID lpBaseAddress,
  2487. SIZE_T dwNumberOfBytesToFlush
  2488. );
  2489. BOOL UnmapViewOfFile(
  2490. LPCVOID lpBaseAddress
  2491. );
  2492. //
  2493. // File Encryption API
  2494. //
  2495. BOOL EncryptFileA(
  2496. LPCSTR lpFileName
  2497. );
  2498. BOOL EncryptFileW(
  2499. LPCWSTR lpFileName
  2500. );
  2501. version(UNICODE) {
  2502. alias EncryptFileW EncryptFile;
  2503. }
  2504. else {
  2505. alias EncryptFileA EncryptFile;
  2506. }
  2507. BOOL DecryptFileA(
  2508. LPCSTR lpFileName,
  2509. DWORD dwReserved
  2510. );
  2511. BOOL DecryptFileW(
  2512. LPCWSTR lpFileName,
  2513. DWORD dwReserved
  2514. );
  2515. version(UNICODE) {
  2516. alias DecryptFileW DecryptFile;
  2517. }
  2518. else {
  2519. alias DecryptFileA DecryptFile;
  2520. }
  2521. //
  2522. // Encryption Status Value
  2523. //
  2524. const auto FILE_ENCRYPTABLE = 0;
  2525. const auto FILE_IS_ENCRYPTED = 1;
  2526. const auto FILE_SYSTEM_ATTR = 2;
  2527. const auto FILE_ROOT_DIR = 3;
  2528. const auto FILE_SYSTEM_DIR = 4;
  2529. const auto FILE_UNKNOWN = 5;
  2530. const auto FILE_SYSTEM_NOT_SUPPORT = 6;
  2531. const auto FILE_USER_DISALLOWED = 7;
  2532. const auto FILE_READ_ONLY = 8;
  2533. const auto FILE_DIR_DISALLOWED = 9;
  2534. BOOL FileEncryptionStatusA(
  2535. LPCSTR lpFileName,
  2536. LPDWORD lpStatus
  2537. );
  2538. BOOL FileEncryptionStatusW(
  2539. LPCWSTR lpFileName,
  2540. LPDWORD lpStatus
  2541. );
  2542. version(UNICODE) {
  2543. alias FileEncryptionStatusW FileEncryptionStatus;
  2544. }
  2545. else {
  2546. alias FileEncryptionStatusA FileEncryptionStatus;
  2547. }
  2548. //
  2549. // Currently defined recovery flags
  2550. //
  2551. const auto EFS_USE_RECOVERY_KEYS = (0x1);
  2552. alias DWORD function(PBYTE pbData, PVOID pvCallbackContext, ULONG ulLength) PFE_EXPORT_FUNC;
  2553. alias DWORD function(PBYTE pbData, PVOID pvCallbackContext, PULONG ulLength) PFE_IMPORT_FUNC;
  2554. //
  2555. // OpenRaw flag values
  2556. //
  2557. const auto CREATE_FOR_IMPORT = (1);
  2558. const auto CREATE_FOR_DIR = (2);
  2559. const auto OVERWRITE_HIDDEN = (4);
  2560. const auto EFSRPC_SECURE_ONLY = (8);
  2561. DWORD OpenEncryptedFileRawA(
  2562. LPCSTR lpFileName,
  2563. ULONG ulFlags,
  2564. PVOID *pvContext
  2565. );
  2566. DWORD OpenEncryptedFileRawW(
  2567. LPCWSTR lpFileName,
  2568. ULONG ulFlags,
  2569. PVOID *pvContext
  2570. );
  2571. version(UNICODE) {
  2572. alias OpenEncryptedFileRawW OpenEncryptedFileRaw;
  2573. }
  2574. else {
  2575. alias OpenEncryptedFileRawA OpenEncryptedFileRaw;
  2576. }
  2577. DWORD ReadEncryptedFileRaw(
  2578. PFE_EXPORT_FUNC pfExportCallback,
  2579. PVOID pvCallbackContext,
  2580. PVOID pvContext
  2581. );
  2582. DWORD WriteEncryptedFileRaw(
  2583. PFE_IMPORT_FUNC pfImportCallback,
  2584. PVOID pvCallbackContext,
  2585. PVOID pvContext
  2586. );
  2587. VOID CloseEncryptedFileRaw(
  2588. PVOID pvContext
  2589. );
  2590. //
  2591. // _l Compat Functions
  2592. //
  2593. int lstrcmpA(
  2594. LPCSTR lpString1,
  2595. LPCSTR lpString2
  2596. );
  2597. int lstrcmpW(
  2598. LPCWSTR lpString1,
  2599. LPCWSTR lpString2
  2600. );
  2601. version(UNICODE) {
  2602. alias lstrcmpW lstrcmp;
  2603. }
  2604. else {
  2605. alias lstrcmpA lstrcmp;
  2606. }
  2607. int lstrcmpiA(
  2608. LPCSTR lpString1,
  2609. LPCSTR lpString2
  2610. );
  2611. int lstrcmpiW(
  2612. LPCWSTR lpString1,
  2613. LPCWSTR lpString2
  2614. );
  2615. version(UNICODE) {
  2616. alias lstrcmpiW lstrcmpi;
  2617. }
  2618. else {
  2619. alias lstrcmpiA lstrcmpi;
  2620. }
  2621. LPSTR lstrcpynA(
  2622. LPSTR lpString1,
  2623. LPCSTR lpString2,
  2624. int iMaxLength
  2625. );
  2626. LPWSTR lstrcpynW(
  2627. LPWSTR lpString1,
  2628. LPCWSTR lpString2,
  2629. int iMaxLength
  2630. );
  2631. version(UNICODE) {
  2632. alias lstrcpynW lstrcpyn;
  2633. }
  2634. else {
  2635. alias lstrcpynA lstrcpyn;
  2636. }
  2637. LPSTR lstrcpyA(
  2638. LPSTR lpString1,
  2639. LPCSTR lpString2
  2640. );
  2641. LPWSTR lstrcpyW(
  2642. LPWSTR lpString1,
  2643. LPCWSTR lpString2
  2644. );
  2645. version(UNICODE) {
  2646. alias lstrcpyW lstrcpy;
  2647. }
  2648. else {
  2649. alias lstrcpyA lstrcpy;
  2650. }
  2651. LPSTR lstrcatA(
  2652. LPSTR lpString1,
  2653. LPCSTR lpString2
  2654. );
  2655. LPWSTR lstrcatW(
  2656. LPWSTR lpString1,
  2657. LPCWSTR lpString2
  2658. );
  2659. version(UNICODE) {
  2660. alias lstrcatW lstrcat;
  2661. }
  2662. else {
  2663. alias lstrcatA lstrcat;
  2664. }
  2665. int lstrlenA(
  2666. LPCSTR lpString
  2667. );
  2668. int lstrlenW(
  2669. LPCWSTR lpString
  2670. );
  2671. version(UNICODE) {
  2672. alias lstrlenW lstrlen;
  2673. }
  2674. else {
  2675. alias lstrlenA lstrlen;
  2676. }
  2677. HFILE OpenFile(
  2678. LPCSTR lpFileName,
  2679. LPOFSTRUCT lpReOpenBuff,
  2680. UINT uStyle
  2681. );
  2682. HFILE _lopen(
  2683. LPCSTR lpPathName,
  2684. int iReadWrite
  2685. );
  2686. HFILE _lcreat(
  2687. LPCSTR lpPathName,
  2688. int iAttribute
  2689. );
  2690. UINT _lread(
  2691. HFILE hFile,
  2692. LPVOID lpBuffer,
  2693. UINT uBytes
  2694. );
  2695. UINT _lwrite(
  2696. HFILE hFile,
  2697. LPCCH lpBuffer,
  2698. UINT uBytes
  2699. );
  2700. Clong_t _hread(
  2701. HFILE hFile,
  2702. LPVOID lpBuffer,
  2703. Clong_t lBytes
  2704. );
  2705. Clong_t _hwrite(
  2706. HFILE hFile,
  2707. LPCCH lpBuffer,
  2708. Clong_t lBytes
  2709. );
  2710. HFILE _lclose(
  2711. HFILE hFile
  2712. );
  2713. LONG _llseek(
  2714. HFILE hFile,
  2715. LONG lOffset,
  2716. int iOrigin
  2717. );
  2718. BOOL IsTextUnicode(
  2719. VOID* lpv,
  2720. int iSize,
  2721. LPINT lpiResult
  2722. );
  2723. const auto FLS_OUT_OF_INDEXES = (cast(DWORD)0xFFFFFFFF);
  2724. DWORD FlsAlloc(
  2725. PFLS_CALLBACK_FUNCTION lpCallback
  2726. );
  2727. PVOID FlsGetValue(
  2728. DWORD dwFlsIndex
  2729. );
  2730. BOOL FlsSetValue(
  2731. DWORD dwFlsIndex,
  2732. PVOID lpFlsData
  2733. );
  2734. BOOL FlsFree(
  2735. DWORD dwFlsIndex
  2736. );
  2737. const auto TLS_OUT_OF_INDEXES = (cast(DWORD)0xFFFFFFFF);
  2738. DWORD TlsAlloc();
  2739. LPVOID TlsGetValue(
  2740. DWORD dwTlsIndex
  2741. );
  2742. BOOL TlsSetValue(
  2743. DWORD dwTlsIndex,
  2744. LPVOID lpTlsValue
  2745. );
  2746. BOOL TlsFree(
  2747. DWORD dwTlsIndex
  2748. );
  2749. alias VOID function(DWORD dwErrorCode, DWORD dwNumberOfBytesTransfered, LPOVERLAPPED lpOverlapped) LPOVERLAPPED_COMPLETION_ROUTINE;
  2750. DWORD SleepEx(
  2751. DWORD dwMilliseconds,
  2752. BOOL bAlertable
  2753. );
  2754. DWORD WaitForSingleObjectEx(
  2755. HANDLE hHandle,
  2756. DWORD dwMilliseconds,
  2757. BOOL bAlertable
  2758. );
  2759. DWORD WaitForMultipleObjectsEx(
  2760. DWORD nCount,
  2761. HANDLE *lpHandles,
  2762. BOOL bWaitAll,
  2763. DWORD dwMilliseconds,
  2764. BOOL bAlertable
  2765. );
  2766. DWORD SignalObjectAndWait(
  2767. HANDLE hObjectToSignal,
  2768. HANDLE hObjectToWaitOn,
  2769. DWORD dwMilliseconds,
  2770. BOOL bAlertable
  2771. );
  2772. BOOL ReadFileEx(
  2773. HANDLE hFile,
  2774. LPVOID lpBuffer,
  2775. DWORD nNumberOfBytesToRead,
  2776. LPOVERLAPPED lpOverlapped,
  2777. LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
  2778. );
  2779. BOOL WriteFileEx(
  2780. HANDLE hFile,
  2781. LPCVOID lpBuffer,
  2782. DWORD nNumberOfBytesToWrite,
  2783. LPOVERLAPPED lpOverlapped,
  2784. LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
  2785. );
  2786. BOOL BackupRead(
  2787. HANDLE hFile,
  2788. LPBYTE lpBuffer,
  2789. DWORD nNumberOfBytesToRead,
  2790. LPDWORD lpNumberOfBytesRead,
  2791. BOOL bAbort,
  2792. BOOL bProcessSecurity,
  2793. LPVOID *lpContext
  2794. );
  2795. BOOL BackupSeek(
  2796. HANDLE hFile,
  2797. DWORD dwLowBytesToSeek,
  2798. DWORD dwHighBytesToSeek,
  2799. LPDWORD lpdwLowByteSeeked,
  2800. LPDWORD lpdwHighByteSeeked,
  2801. LPVOID *lpContext
  2802. );
  2803. BOOL BackupWrite(
  2804. HANDLE hFile,
  2805. LPBYTE lpBuffer,
  2806. DWORD nNumberOfBytesToWrite,
  2807. LPDWORD lpNumberOfBytesWritten,
  2808. BOOL bAbort,
  2809. BOOL bProcessSecurity,
  2810. LPVOID *lpContext
  2811. );
  2812. //
  2813. // Stream id structure
  2814. //
  2815. struct WIN32_STREAM_ID {
  2816. DWORD dwStreamId ;
  2817. DWORD dwStreamAttributes ;
  2818. LARGE_INTEGER Size ;
  2819. DWORD dwStreamNameSize ;
  2820. WCHAR[] cStreamName;
  2821. }
  2822. alias WIN32_STREAM_ID* LPWIN32_STREAM_ID ;
  2823. //
  2824. // Stream Ids
  2825. //
  2826. const auto BACKUP_INVALID = 0x00000000;
  2827. const auto BACKUP_DATA = 0x00000001;
  2828. const auto BACKUP_EA_DATA = 0x00000002;
  2829. const auto BACKUP_SECURITY_DATA = 0x00000003;
  2830. const auto BACKUP_ALTERNATE_DATA = 0x00000004;
  2831. const auto BACKUP_LINK = 0x00000005;
  2832. const auto BACKUP_PROPERTY_DATA = 0x00000006;
  2833. const auto BACKUP_OBJECT_ID = 0x00000007;
  2834. const auto BACKUP_REPARSE_DATA = 0x00000008;
  2835. const auto BACKUP_SPARSE_BLOCK = 0x00000009;
  2836. const auto BACKUP_TXFS_DATA = 0x0000000a;
  2837. //
  2838. // Stream Attributes
  2839. //
  2840. const auto STREAM_NORMAL_ATTRIBUTE = 0x00000000;
  2841. const auto STREAM_MODIFIED_WHEN_READ = 0x00000001;
  2842. const auto STREAM_CONTAINS_SECURITY = 0x00000002;
  2843. const auto STREAM_CONTAINS_PROPERTIES = 0x00000004;
  2844. const auto STREAM_SPARSE_ATTRIBUTE = 0x00000008;
  2845. BOOL ReadFileScatter(
  2846. HANDLE hFile,
  2847. FILE_SEGMENT_ELEMENT aSegmentArray[],
  2848. DWORD nNumberOfBytesToRead,
  2849. LPDWORD lpReserved,
  2850. LPOVERLAPPED lpOverlapped
  2851. );
  2852. BOOL WriteFileGather(
  2853. HANDLE hFile,
  2854. FILE_SEGMENT_ELEMENT aSegmentArray[],
  2855. DWORD nNumberOfBytesToWrite,
  2856. LPDWORD lpReserved,
  2857. LPOVERLAPPED lpOverlapped
  2858. );
  2859. //
  2860. // Dual Mode API below this line. Dual Mode Structures also included.
  2861. //
  2862. const auto STARTF_USESHOWWINDOW = 0x00000001;
  2863. const auto STARTF_USESIZE = 0x00000002;
  2864. const auto STARTF_USEPOSITION = 0x00000004;
  2865. const auto STARTF_USECOUNTCHARS = 0x00000008;
  2866. const auto STARTF_USEFILLATTRIBUTE = 0x00000010;
  2867. const auto STARTF_RUNFULLSCREEN = 0x00000020 ; // ignored for non-x86 platforms
  2868. const auto STARTF_FORCEONFEEDBACK = 0x00000040;
  2869. const auto STARTF_FORCEOFFFEEDBACK = 0x00000080;
  2870. const auto STARTF_USESTDHANDLES = 0x00000100;
  2871. const auto STARTF_USEHOTKEY = 0x00000200;
  2872. struct STARTUPINFOA {
  2873. DWORD cb;
  2874. LPSTR lpReserved;
  2875. LPSTR lpDesktop;
  2876. LPSTR lpTitle;
  2877. DWORD dwX;
  2878. DWORD dwY;
  2879. DWORD dwXSize;
  2880. DWORD dwYSize;
  2881. DWORD dwXCountChars;
  2882. DWORD dwYCountChars;
  2883. DWORD dwFillAttribute;
  2884. DWORD dwFlags;
  2885. WORD wShowWindow;
  2886. WORD cbReserved2;
  2887. LPBYTE lpReserved2;
  2888. HANDLE hStdInput;
  2889. HANDLE hStdOutput;
  2890. HANDLE hStdError;
  2891. }
  2892. alias STARTUPINFOA* LPSTARTUPINFOA;
  2893. struct STARTUPINFOW {
  2894. DWORD cb;
  2895. LPWSTR lpReserved;
  2896. LPWSTR lpDesktop;
  2897. LPWSTR lpTitle;
  2898. DWORD dwX;
  2899. DWORD dwY;
  2900. DWORD dwXSize;
  2901. DWORD dwYSize;
  2902. DWORD dwXCountChars;
  2903. DWORD dwYCountChars;
  2904. DWORD dwFillAttribute;
  2905. DWORD dwFlags;
  2906. WORD wShowWindow;
  2907. WORD cbReserved2;
  2908. LPBYTE lpReserved2;
  2909. HANDLE hStdInput;
  2910. HANDLE hStdOutput;
  2911. HANDLE hStdError;
  2912. }
  2913. alias STARTUPINFOW* LPSTARTUPINFOW;
  2914. version(UNICODE) {
  2915. alias STARTUPINFOW STARTUPINFO;
  2916. alias LPSTARTUPINFOW LPSTARTUPINFO;
  2917. }
  2918. else {
  2919. alias STARTUPINFOA STARTUPINFO;
  2920. alias LPSTARTUPINFOA LPSTARTUPINFO;
  2921. }
  2922. alias LPVOID PROC_THREAD_ATTRIBUTE_LIST;
  2923. struct STARTUPINFOEXA {
  2924. STARTUPINFOA StartupInfo;
  2925. PROC_THREAD_ATTRIBUTE_LIST *lpAttributeList;
  2926. }
  2927. alias STARTUPINFOEXA* LPSTARTUPINFOEXA;
  2928. struct STARTUPINFOEXW {
  2929. STARTUPINFOW StartupInfo;
  2930. PROC_THREAD_ATTRIBUTE_LIST *lpAttributeList;
  2931. }
  2932. alias STARTUPINFOEXW* LPSTARTUPINFOEXW;
  2933. version(UNICODE) {
  2934. alias STARTUPINFOEXW STARTUPINFOEX;
  2935. alias LPSTARTUPINFOEXW LPSTARTUPINFOEX;
  2936. }
  2937. else {
  2938. alias STARTUPINFOEXA STARTUPINFOEX;
  2939. alias LPSTARTUPINFOEXA LPSTARTUPINFOEX;
  2940. }
  2941. const auto SHUTDOWN_NORETRY = 0x00000001;
  2942. struct WIN32_FIND_DATAA {
  2943. DWORD dwFileAttributes;
  2944. FILETIME ftCreationTime;
  2945. FILETIME ftLastAccessTime;
  2946. FILETIME ftLastWriteTime;
  2947. DWORD nFileSizeHigh;
  2948. DWORD nFileSizeLow;
  2949. DWORD dwReserved0;
  2950. DWORD dwReserved1;
  2951. CHAR cFileName[ MAX_PATH ];
  2952. CHAR cAlternateFileName[ 14 ];
  2953. }
  2954. alias WIN32_FIND_DATAA* PWIN32_FIND_DATAA;
  2955. alias WIN32_FIND_DATAA* LPWIN32_FIND_DATAA;
  2956. struct WIN32_FIND_DATAW {
  2957. DWORD dwFileAttributes;
  2958. FILETIME ftCreationTime;
  2959. FILETIME ftLastAccessTime;
  2960. FILETIME ftLastWriteTime;
  2961. DWORD nFileSizeHigh;
  2962. DWORD nFileSizeLow;
  2963. DWORD dwReserved0;
  2964. DWORD dwReserved1;
  2965. WCHAR cFileName[ MAX_PATH ];
  2966. WCHAR cAlternateFileName[ 14 ];
  2967. }
  2968. alias WIN32_FIND_DATAW* PWIN32_FIND_DATAW;
  2969. alias WIN32_FIND_DATAW* LPWIN32_FIND_DATAW;
  2970. version(UNICODE) {
  2971. alias WIN32_FIND_DATAW WIN32_FIND_DATA;
  2972. alias PWIN32_FIND_DATAW PWIN32_FIND_DATA;
  2973. alias LPWIN32_FIND_DATAW LPWIN32_FIND_DATA;
  2974. }
  2975. else {
  2976. alias WIN32_FIND_DATAA WIN32_FIND_DATA;
  2977. alias PWIN32_FIND_DATAA PWIN32_FIND_DATA;
  2978. alias LPWIN32_FIND_DATAA LPWIN32_FIND_DATA;
  2979. }
  2980. struct WIN32_FILE_ATTRIBUTE_DATA {
  2981. DWORD dwFileAttributes;
  2982. FILETIME ftCreationTime;
  2983. FILETIME ftLastAccessTime;
  2984. FILETIME ftLastWriteTime;
  2985. DWORD nFileSizeHigh;
  2986. DWORD nFileSizeLow;
  2987. }
  2988. alias WIN32_FILE_ATTRIBUTE_DATA* LPWIN32_FILE_ATTRIBUTE_DATA;
  2989. //
  2990. // Synchronization APIs
  2991. //
  2992. HANDLE CreateMutexA(
  2993. LPSECURITY_ATTRIBUTES lpMutexAttributes,
  2994. BOOL bInitialOwner,
  2995. LPCSTR lpName
  2996. );
  2997. HANDLE CreateMutexW(
  2998. LPSECURITY_ATTRIBUTES lpMutexAttributes,
  2999. BOOL bInitialOwner,
  3000. LPCWSTR lpName
  3001. );
  3002. version(UNICODE) {
  3003. alias CreateMutexW CreateMutex;
  3004. }
  3005. else {
  3006. alias CreateMutexA CreateMutex;
  3007. }
  3008. HANDLE OpenMutexA(
  3009. DWORD dwDesiredAccess,
  3010. BOOL bInheritHandle,
  3011. LPCSTR lpName
  3012. );
  3013. HANDLE OpenMutexW(
  3014. DWORD dwDesiredAccess,
  3015. BOOL bInheritHandle,
  3016. LPCWSTR lpName
  3017. );
  3018. version(UNICODE) {
  3019. alias OpenMutexW OpenMutex;
  3020. }
  3021. else {
  3022. alias OpenMutexA OpenMutex;
  3023. }
  3024. HANDLE CreateEventA(
  3025. LPSECURITY_ATTRIBUTES lpEventAttributes,
  3026. BOOL bManualReset,
  3027. BOOL bInitialState,
  3028. LPCSTR lpName
  3029. );
  3030. HANDLE
  3031. CreateEventW(
  3032. LPSECURITY_ATTRIBUTES lpEventAttributes,
  3033. BOOL bManualReset,
  3034. BOOL bInitialState,
  3035. LPCWSTR lpName
  3036. );
  3037. version(UNICODE) {
  3038. alias CreateEventW CreateEvent;
  3039. }
  3040. else {
  3041. alias CreateEventA CreateEvent;
  3042. }
  3043. HANDLE
  3044. OpenEventA(
  3045. DWORD dwDesiredAccess,
  3046. BOOL bInheritHandle,
  3047. LPCSTR lpName
  3048. );
  3049. HANDLE
  3050. OpenEventW(
  3051. DWORD dwDesiredAccess,
  3052. BOOL bInheritHandle,
  3053. LPCWSTR lpName
  3054. );
  3055. version(UNICODE) {
  3056. alias OpenEventW OpenEvent;
  3057. }
  3058. else {
  3059. alias OpenEventA OpenEvent;
  3060. }
  3061. HANDLE
  3062. CreateSemaphoreA(
  3063. LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,
  3064. LONG lInitialCount,
  3065. LONG lMaximumCount,
  3066. LPCSTR lpName
  3067. );
  3068. HANDLE
  3069. CreateSemaphoreW(
  3070. LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,
  3071. LONG lInitialCount,
  3072. LONG lMaximumCount,
  3073. LPCWSTR lpName
  3074. );
  3075. version(UNICODE) {
  3076. alias CreateSemaphoreW CreateSemaphore;
  3077. }
  3078. else {
  3079. alias CreateSemaphoreA CreateSemaphore;
  3080. }
  3081. HANDLE
  3082. OpenSemaphoreA(
  3083. DWORD dwDesiredAccess,
  3084. BOOL bInheritHandle,
  3085. LPCSTR lpName
  3086. );
  3087. HANDLE
  3088. OpenSemaphoreW(
  3089. DWORD dwDesiredAccess,
  3090. BOOL bInheritHandle,
  3091. LPCWSTR lpName
  3092. );
  3093. version(UNICODE) {
  3094. alias OpenSemaphoreW OpenSemaphore;
  3095. }
  3096. else {
  3097. alias OpenSemaphoreA OpenSemaphore;
  3098. }
  3099. alias VOID function(LPVOID lpArgToCompletionRoutine, DWORD dwTimerLowValue, DWORD dwTimerHighValue) PTIMERAPCROUTINE;
  3100. HANDLE
  3101. CreateWaitableTimerA(
  3102. LPSECURITY_ATTRIBUTES lpTimerAttributes,
  3103. BOOL bManualReset,
  3104. LPCSTR lpTimerName
  3105. );
  3106. HANDLE
  3107. CreateWaitableTimerW(
  3108. LPSECURITY_ATTRIBUTES lpTimerAttributes,
  3109. BOOL bManualReset,
  3110. LPCWSTR lpTimerName
  3111. );
  3112. version(UNICODE) {
  3113. alias CreateWaitableTimerW CreateWaitableTimer;
  3114. }
  3115. else {
  3116. alias CreateWaitableTimerA CreateWaitableTimer;
  3117. }
  3118. HANDLE
  3119. OpenWaitableTimerA(
  3120. DWORD dwDesiredAccess,
  3121. BOOL bInheritHandle,
  3122. LPCSTR lpTimerName
  3123. );
  3124. HANDLE
  3125. OpenWaitableTimerW(
  3126. DWORD dwDesiredAccess,
  3127. BOOL bInheritHandle,
  3128. LPCWSTR lpTimerName
  3129. );
  3130. version(UNICODE) {
  3131. alias OpenWaitableTimerW OpenWaitableTimer;
  3132. }
  3133. else {
  3134. alias OpenWaitableTimerA OpenWaitableTimer;
  3135. }
  3136. BOOL
  3137. SetWaitableTimer(
  3138. HANDLE hTimer,
  3139. LARGE_INTEGER *lpDueTime,
  3140. LONG lPeriod,
  3141. PTIMERAPCROUTINE pfnCompletionRoutine,
  3142. LPVOID lpArgToCompletionRoutine,
  3143. BOOL fResume
  3144. );
  3145. BOOL
  3146. CancelWaitableTimer(
  3147. HANDLE hTimer
  3148. );
  3149. const auto CREATE_MUTEX_INITIAL_OWNER = 0x00000001;
  3150. HANDLE
  3151. CreateMutexExA(
  3152. LPSECURITY_ATTRIBUTES lpMutexAttributes,
  3153. LPCSTR lpName,
  3154. DWORD dwFlags,
  3155. DWORD dwDesiredAccess
  3156. );
  3157. HANDLE
  3158. CreateMutexExW(
  3159. LPSECURITY_ATTRIBUTES lpMutexAttributes,
  3160. LPCWSTR lpName,
  3161. DWORD dwFlags,
  3162. DWORD dwDesiredAccess
  3163. );
  3164. version(UNICODE) {
  3165. alias CreateMutexExW CreateMutexEx;
  3166. }
  3167. else {
  3168. alias CreateMutexExA CreateMutexEx;
  3169. }
  3170. const auto CREATE_EVENT_MANUAL_RESET = 0x00000001;
  3171. const auto CREATE_EVENT_INITIAL_SET = 0x00000002;
  3172. HANDLE
  3173. CreateEventExA(
  3174. LPSECURITY_ATTRIBUTES lpEventAttributes,
  3175. LPCSTR lpName,
  3176. DWORD dwFlags,
  3177. DWORD dwDesiredAccess
  3178. );
  3179. HANDLE
  3180. CreateEventExW(
  3181. LPSECURITY_ATTRIBUTES lpEventAttributes,
  3182. LPCWSTR lpName,
  3183. DWORD dwFlags,
  3184. DWORD dwDesiredAccess
  3185. );
  3186. version(UNICODE) {
  3187. alias CreateEventExW CreateEventEx;
  3188. }
  3189. else {
  3190. alias CreateEventExA CreateEventEx;
  3191. }
  3192. HANDLE
  3193. CreateSemaphoreExA(
  3194. LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,
  3195. LONG lInitialCount,
  3196. LONG lMaximumCount,
  3197. LPCSTR lpName,
  3198. DWORD dwFlags,
  3199. DWORD dwDesiredAccess
  3200. );
  3201. HANDLE
  3202. CreateSemaphoreExW(
  3203. LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,
  3204. LONG lInitialCount,
  3205. LONG lMaximumCount,
  3206. LPCWSTR lpName,
  3207. DWORD dwFlags,
  3208. DWORD dwDesiredAccess
  3209. );
  3210. version(UNICODE) {
  3211. alias CreateSemaphoreExW CreateSemaphoreEx;
  3212. }
  3213. else {
  3214. alias CreateSemaphoreExA CreateSemaphoreEx;
  3215. }
  3216. const auto CREATE_WAITABLE_TIMER_MANUAL_RESET = 0x00000001;
  3217. HANDLE
  3218. CreateWaitableTimerExA(
  3219. LPSECURITY_ATTRIBUTES lpTimerAttributes,
  3220. LPCSTR lpTimerName,
  3221. DWORD dwFlags,
  3222. DWORD dwDesiredAccess
  3223. );
  3224. HANDLE
  3225. CreateWaitableTimerExW(
  3226. LPSECURITY_ATTRIBUTES lpTimerAttributes,
  3227. LPCWSTR lpTimerName,
  3228. DWORD dwFlags,
  3229. DWORD dwDesiredAccess
  3230. );
  3231. version(UNICODE) {
  3232. alias CreateWaitableTimerExW CreateWaitableTimerEx;
  3233. }
  3234. else {
  3235. alias CreateWaitableTimerExA CreateWaitableTimerEx;
  3236. }
  3237. HANDLE
  3238. CreateFileMappingA(
  3239. HANDLE hFile,
  3240. LPSECURITY_ATTRIBUTES lpFileMappingAttributes,
  3241. DWORD flProtect,
  3242. DWORD dwMaximumSizeHigh,
  3243. DWORD dwMaximumSizeLow,
  3244. LPCSTR lpName
  3245. );
  3246. HANDLE
  3247. CreateFileMappingW(
  3248. HANDLE hFile,
  3249. LPSECURITY_ATTRIBUTES lpFileMappingAttributes,
  3250. DWORD flProtect,
  3251. DWORD dwMaximumSizeHigh,
  3252. DWORD dwMaximumSizeLow,
  3253. LPCWSTR lpName
  3254. );
  3255. version(UNICODE) {
  3256. alias CreateFileMappingW CreateFileMapping;
  3257. }
  3258. else {
  3259. alias CreateFileMappingA CreateFileMapping;
  3260. }
  3261. HANDLE
  3262. CreateFileMappingNumaA(
  3263. HANDLE hFile,
  3264. LPSECURITY_ATTRIBUTES lpFileMappingAttributes,
  3265. DWORD flProtect,
  3266. DWORD dwMaximumSizeHigh,
  3267. DWORD dwMaximumSizeLow,
  3268. LPCSTR lpName,
  3269. DWORD nndPreferred
  3270. );
  3271. HANDLE
  3272. CreateFileMappingNumaW(
  3273. HANDLE hFile,
  3274. LPSECURITY_ATTRIBUTES lpFileMappingAttributes,
  3275. DWORD flProtect,
  3276. DWORD dwMaximumSizeHigh,
  3277. DWORD dwMaximumSizeLow,
  3278. LPCWSTR lpName,
  3279. DWORD nndPreferred
  3280. );
  3281. version(UNICODE) {
  3282. alias CreateFileMappingNumaW CreateFileMappingNuma;
  3283. }
  3284. else {
  3285. alias CreateFileMappingNumaA CreateFileMappingNuma;
  3286. }
  3287. HANDLE
  3288. OpenFileMappingA(
  3289. DWORD dwDesiredAccess,
  3290. BOOL bInheritHandle,
  3291. LPCSTR lpName
  3292. );
  3293. HANDLE
  3294. OpenFileMappingW(
  3295. DWORD dwDesiredAccess,
  3296. BOOL bInheritHandle,
  3297. LPCWSTR lpName
  3298. );
  3299. version(UNICODE) {
  3300. alias OpenFileMappingW OpenFileMapping;
  3301. }
  3302. else {
  3303. alias OpenFileMappingA OpenFileMapping;
  3304. }
  3305. DWORD
  3306. GetLogicalDriveStringsA(
  3307. DWORD nBufferLength,
  3308. LPSTR lpBuffer
  3309. );
  3310. DWORD
  3311. GetLogicalDriveStringsW(
  3312. DWORD nBufferLength,
  3313. LPWSTR lpBuffer
  3314. );
  3315. version(UNICODE) {
  3316. alias GetLogicalDriveStringsW GetLogicalDriveStrings;
  3317. }
  3318. else {
  3319. alias GetLogicalDriveStringsA GetLogicalDriveStrings;
  3320. }
  3321. enum MEMORY_RESOURCE_NOTIFICATION_TYPE {
  3322. LowMemoryResourceNotification,
  3323. HighMemoryResourceNotification
  3324. }
  3325. HANDLE
  3326. CreateMemoryResourceNotification(
  3327. MEMORY_RESOURCE_NOTIFICATION_TYPE NotificationType
  3328. );
  3329. BOOL
  3330. QueryMemoryResourceNotification(
  3331. HANDLE ResourceNotificationHandle,
  3332. PBOOL ResourceState
  3333. );
  3334. HMODULE
  3335. LoadLibraryA(
  3336. LPCSTR lpLibFileName
  3337. );
  3338. HMODULE
  3339. LoadLibraryW(
  3340. LPCWSTR lpLibFileName
  3341. );
  3342. version(UNICODE) {
  3343. alias LoadLibraryW LoadLibrary;
  3344. }
  3345. else {
  3346. alias LoadLibraryA LoadLibrary;
  3347. }
  3348. HMODULE
  3349. LoadLibraryExA(
  3350. LPCSTR lpLibFileName,
  3351. HANDLE hFile,
  3352. DWORD dwFlags
  3353. );
  3354. HMODULE
  3355. LoadLibraryExW(
  3356. LPCWSTR lpLibFileName,
  3357. HANDLE hFile,
  3358. DWORD dwFlags
  3359. );
  3360. version(UNICODE) {
  3361. alias LoadLibraryExW LoadLibraryEx;
  3362. }
  3363. else {
  3364. alias LoadLibraryExA LoadLibraryEx;
  3365. }
  3366. const auto DONT_RESOLVE_DLL_REFERENCES = 0x00000001;
  3367. const auto LOAD_LIBRARY_AS_DATAFILE = 0x00000002;
  3368. const auto LOAD_WITH_ALTERED_SEARCH_PATH = 0x00000008;
  3369. const auto LOAD_IGNORE_CODE_AUTHZ_LEVEL = 0x00000010;
  3370. const auto LOAD_LIBRARY_AS_IMAGE_RESOURCE = 0x00000020;
  3371. const auto LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE = 0x00000040;
  3372. DWORD
  3373. GetModuleFileNameA(
  3374. HMODULE hModule,
  3375. LPCH lpFilename,
  3376. DWORD nSize
  3377. );
  3378. DWORD
  3379. GetModuleFileNameW(
  3380. HMODULE hModule,
  3381. LPWCH lpFilename,
  3382. DWORD nSize
  3383. );
  3384. version(UNICODE) {
  3385. alias GetModuleFileNameW GetModuleFileName;
  3386. }
  3387. else {
  3388. alias GetModuleFileNameA GetModuleFileName;
  3389. }
  3390. HMODULE
  3391. GetModuleHandleA(
  3392. LPCSTR lpModuleName
  3393. );
  3394. HMODULE
  3395. GetModuleHandleW(
  3396. LPCWSTR lpModuleName
  3397. );
  3398. version(UNICODE) {
  3399. alias GetModuleHandleW GetModuleHandle;
  3400. }
  3401. else {
  3402. alias GetModuleHandleA GetModuleHandle;
  3403. }
  3404. const auto GET_MODULE_HANDLE_EX_FLAG_PIN = (0x00000001);
  3405. const auto GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT = (0x00000002);
  3406. const auto GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS = (0x00000004);
  3407. alias BOOL function(DWORD dwFlags, LPCSTR lpModuleName, HMODULE* phModule) PGET_MODULE_HANDLE_EXA;
  3408. alias BOOL function(DWORD dwFlags, LPCWSTR lpModuleName, HMODULE* phModule) PGET_MODULE_HANDLE_EXW;
  3409. version(UNICODE) {
  3410. alias PGET_MODULE_HANDLE_EXW PGET_MODULE_HANDLE_EX;
  3411. }
  3412. else {
  3413. alias PGET_MODULE_HANDLE_EXA PGET_MODULE_HANDLE_EX;
  3414. }
  3415. BOOL
  3416. GetModuleHandleExA(
  3417. DWORD dwFlags,
  3418. LPCSTR lpModuleName,
  3419. HMODULE* phModule
  3420. );
  3421. BOOL
  3422. GetModuleHandleExW(
  3423. DWORD dwFlags,
  3424. LPCWSTR lpModuleName,
  3425. HMODULE* phModule
  3426. );
  3427. version(UNICODE) {
  3428. alias GetModuleHandleExW GetModuleHandleEx;
  3429. }
  3430. else {
  3431. alias GetModuleHandleExA GetModuleHandleEx;
  3432. }
  3433. BOOL
  3434. NeedCurrentDirectoryForExePathA(
  3435. LPCSTR ExeName
  3436. );
  3437. BOOL
  3438. NeedCurrentDirectoryForExePathW(
  3439. LPCWSTR ExeName
  3440. );
  3441. version(UNICODE) {
  3442. alias NeedCurrentDirectoryForExePathW NeedCurrentDirectoryForExePath;
  3443. }
  3444. else {
  3445. alias NeedCurrentDirectoryForExePathA NeedCurrentDirectoryForExePath;
  3446. }
  3447. const auto PROCESS_NAME_NATIVE = 0x00000001;
  3448. BOOL
  3449. QueryFullProcessImageNameA(
  3450. HANDLE hProcess,
  3451. DWORD dwFlags,
  3452. LPSTR lpExeName,
  3453. PDWORD lpdwSize
  3454. );
  3455. BOOL
  3456. QueryFullProcessImageNameW(
  3457. HANDLE hProcess,
  3458. DWORD dwFlags,
  3459. LPWSTR lpExeName,
  3460. PDWORD lpdwSize
  3461. );
  3462. version(UNICODE) {
  3463. alias QueryFullProcessImageNameW QueryFullProcessImageName;
  3464. }
  3465. else {
  3466. alias QueryFullProcessImageNameA QueryFullProcessImageName;
  3467. }
  3468. //
  3469. // Extended process and thread attribute support
  3470. //
  3471. const auto PROC_THREAD_ATTRIBUTE_NUMBER = 0x0000FFFF;
  3472. const auto PROC_THREAD_ATTRIBUTE_THREAD = 0x00010000 ; // Attribute may be used with thread creation
  3473. const auto PROC_THREAD_ATTRIBUTE_INPUT = 0x00020000 ; // Attribute is input only
  3474. const auto PROC_THREAD_ATTRIBUTE_ADDITIVE = 0x00040000 ; // Attribute may be "accumulated," e.g. bitmasks, counters, etc.
  3475. enum PROC_THREAD_ATTRIBUTE_NUM {
  3476. ProcThreadAttributeParentProcess = 0,
  3477. ProcThreadAttributeExtendedFlags,
  3478. ProcThreadAttributeHandleList,
  3479. ProcThreadAttributeMax
  3480. }
  3481. /*const auto ProcThreadAttributeValue(Number, = Thread, Input, Additive) \;
  3482. (((Number) & PROC_THREAD_ATTRIBUTE_NUMBER) | \
  3483. ((Thread != FALSE) ? PROC_THREAD_ATTRIBUTE_THREAD : 0) | \
  3484. ((Input != FALSE) ? PROC_THREAD_ATTRIBUTE_INPUT : 0) | \
  3485. ((Additive != FALSE) ? PROC_THREAD_ATTRIBUTE_ADDITIVE : 0))
  3486. */
  3487. /*const auto PROC_THREAD_ATTRIBUTE_PARENT_PROCESS = \;
  3488. ProcThreadAttributeValue (ProcThreadAttributeParentProcess, FALSE, TRUE, FALSE)
  3489. const auto PROC_THREAD_ATTRIBUTE_EXTENDED_FLAGS = \;
  3490. ProcThreadAttributeValue (ProcThreadAttributeExtendedFlags, FALSE, TRUE, TRUE)
  3491. const auto PROC_THREAD_ATTRIBUTE_HANDLE_LIST = \;
  3492. ProcThreadAttributeValue (ProcThreadAttributeHandleList, FALSE, TRUE, FALSE)
  3493. */
  3494. alias PROC_THREAD_ATTRIBUTE_LIST *PPROC_THREAD_ATTRIBUTE_LIST;
  3495. alias PROC_THREAD_ATTRIBUTE_LIST *LPPROC_THREAD_ATTRIBUTE_LIST;
  3496. BOOL
  3497. InitializeProcThreadAttributeList(
  3498. LPPROC_THREAD_ATTRIBUTE_LIST lpAttributeList,
  3499. DWORD dwAttributeCount,
  3500. DWORD dwFlags,
  3501. PSIZE_T lpSize
  3502. );
  3503. VOID
  3504. DeleteProcThreadAttributeList(
  3505. LPPROC_THREAD_ATTRIBUTE_LIST lpAttributeList
  3506. );
  3507. const auto PROC_THREAD_ATTRIBUTE_REPLACE_VALUE = 0x00000001;
  3508. BOOL
  3509. UpdateProcThreadAttribute(
  3510. LPPROC_THREAD_ATTRIBUTE_LIST lpAttributeList,
  3511. DWORD dwFlags,
  3512. DWORD_PTR Attribute,
  3513. PVOID lpValue,
  3514. SIZE_T cbSize,
  3515. PVOID lpPreviousValue,
  3516. PSIZE_T lpReturnSize
  3517. );
  3518. BOOL
  3519. CreateProcessA(
  3520. LPCSTR lpApplicationName,
  3521. LPSTR lpCommandLine,
  3522. LPSECURITY_ATTRIBUTES lpProcessAttributes,
  3523. LPSECURITY_ATTRIBUTES lpThreadAttributes,
  3524. BOOL bInheritHandles,
  3525. DWORD dwCreationFlags,
  3526. LPVOID lpEnvironment,
  3527. LPCSTR lpCurrentDirectory,
  3528. LPSTARTUPINFOA lpStartupInfo,
  3529. LPPROCESS_INFORMATION lpProcessInformation
  3530. );
  3531. BOOL
  3532. CreateProcessW(
  3533. LPCWSTR lpApplicationName,
  3534. LPWSTR lpCommandLine,
  3535. LPSECURITY_ATTRIBUTES lpProcessAttributes,
  3536. LPSECURITY_ATTRIBUTES lpThreadAttributes,
  3537. BOOL bInheritHandles,
  3538. DWORD dwCreationFlags,
  3539. LPVOID lpEnvironment,
  3540. LPCWSTR lpCurrentDirectory,
  3541. LPSTARTUPINFOW lpStartupInfo,
  3542. LPPROCESS_INFORMATION lpProcessInformation
  3543. );
  3544. version(UNICODE) {
  3545. alias CreateProcessW CreateProcess;
  3546. }
  3547. else {
  3548. alias CreateProcessA CreateProcess;
  3549. }
  3550. BOOL
  3551. SetProcessShutdownParameters(
  3552. DWORD dwLevel,
  3553. DWORD dwFlags
  3554. );
  3555. BOOL
  3556. GetProcessShutdownParameters(
  3557. LPDWORD lpdwLevel,
  3558. LPDWORD lpdwFlags
  3559. );
  3560. DWORD
  3561. GetProcessVersion(
  3562. DWORD ProcessId
  3563. );
  3564. VOID
  3565. FatalAppExitA(
  3566. UINT uAction,
  3567. LPCSTR lpMessageText
  3568. );
  3569. VOID
  3570. FatalAppExitW(
  3571. UINT uAction,
  3572. LPCWSTR lpMessageText
  3573. );
  3574. version(UNICODE) {
  3575. alias FatalAppExitW FatalAppExit;
  3576. }
  3577. else {
  3578. alias FatalAppExitA FatalAppExit;
  3579. }
  3580. VOID
  3581. GetStartupInfoA(
  3582. LPSTARTUPINFOA lpStartupInfo
  3583. );
  3584. VOID
  3585. GetStartupInfoW(
  3586. LPSTARTUPINFOW lpStartupInfo
  3587. );
  3588. version(UNICODE) {
  3589. alias GetStartupInfoW GetStartupInfo;
  3590. }
  3591. else {
  3592. alias GetStartupInfoA GetStartupInfo;
  3593. }
  3594. LPSTR GetCommandLineA();
  3595. LPWSTR GetCommandLineW();
  3596. version(UNICODE) {
  3597. alias GetCommandLineW GetCommandLine;
  3598. }
  3599. else {
  3600. alias GetCommandLineA GetCommandLine;
  3601. }
  3602. DWORD
  3603. GetEnvironmentVariableA(
  3604. LPCSTR lpName,
  3605. LPSTR lpBuffer,
  3606. DWORD nSize
  3607. );
  3608. DWORD
  3609. GetEnvironmentVariableW(
  3610. LPCWSTR lpName,
  3611. LPWSTR lpBuffer,
  3612. DWORD nSize
  3613. );
  3614. version(UNICODE) {
  3615. alias GetEnvironmentVariableW GetEnvironmentVariable;
  3616. }
  3617. else {
  3618. alias GetEnvironmentVariableA GetEnvironmentVariable;
  3619. }
  3620. BOOL
  3621. SetEnvironmentVariableA(
  3622. LPCSTR lpName,
  3623. LPCSTR lpValue
  3624. );
  3625. BOOL
  3626. SetEnvironmentVariableW(
  3627. LPCWSTR lpName,
  3628. LPCWSTR lpValue
  3629. );
  3630. version(UNICODE) {
  3631. alias SetEnvironmentVariableW SetEnvironmentVariable;
  3632. }
  3633. else {
  3634. alias SetEnvironmentVariableA SetEnvironmentVariable;
  3635. }
  3636. DWORD ExpandEnvironmentStringsA(
  3637. LPCSTR lpSrc,
  3638. LPSTR lpDst,
  3639. DWORD nSize
  3640. );
  3641. DWORD ExpandEnvironmentStringsW(
  3642. LPCWSTR lpSrc,
  3643. LPWSTR lpDst,
  3644. DWORD nSize
  3645. );
  3646. version(UNICODE) {
  3647. alias ExpandEnvironmentStringsW ExpandEnvironmentStrings;
  3648. }
  3649. else {
  3650. alias ExpandEnvironmentStringsA ExpandEnvironmentStrings;
  3651. }
  3652. DWORD
  3653. GetFirmwareEnvironmentVariableA(
  3654. LPCSTR lpName,
  3655. LPCSTR lpGuid,
  3656. PVOID pBuffer,
  3657. DWORD nSize
  3658. );
  3659. DWORD
  3660. GetFirmwareEnvironmentVariableW(
  3661. LPCWSTR lpName,
  3662. LPCWSTR lpGuid,
  3663. PVOID pBuffer,
  3664. DWORD nSize
  3665. );
  3666. version(UNICODE) {
  3667. alias GetFirmwareEnvironmentVariableW GetFirmwareEnvironmentVariable;
  3668. }
  3669. else {
  3670. alias GetFirmwareEnvironmentVariableA GetFirmwareEnvironmentVariable;
  3671. }
  3672. BOOL
  3673. SetFirmwareEnvironmentVariableA(
  3674. LPCSTR lpName,
  3675. LPCSTR lpGuid,
  3676. PVOID pValue,
  3677. DWORD nSize
  3678. );
  3679. BOOL
  3680. SetFirmwareEnvironmentVariableW(
  3681. LPCWSTR lpName,
  3682. LPCWSTR lpGuid,
  3683. PVOID pValue,
  3684. DWORD nSize
  3685. );
  3686. version(UNICODE) {
  3687. alias SetFirmwareEnvironmentVariableW SetFirmwareEnvironmentVariable;
  3688. }
  3689. else {
  3690. alias SetFirmwareEnvironmentVariableA SetFirmwareEnvironmentVariable;
  3691. }
  3692. VOID
  3693. OutputDebugStringA(
  3694. LPCSTR lpOutputString
  3695. );
  3696. VOID
  3697. OutputDebugStringW(
  3698. LPCWSTR lpOutputString
  3699. );
  3700. version(UNICODE) {
  3701. alias OutputDebugStringW OutputDebugString;
  3702. }
  3703. else {
  3704. alias OutputDebugStringA OutputDebugString;
  3705. }
  3706. HRSRC
  3707. FindResourceA(
  3708. HMODULE hModule,
  3709. LPCSTR lpName,
  3710. LPCSTR lpType
  3711. );
  3712. HRSRC
  3713. FindResourceW(
  3714. HMODULE hModule,
  3715. LPCWSTR lpName,
  3716. LPCWSTR lpType
  3717. );
  3718. version(UNICODE) {
  3719. alias FindResourceW FindResource;
  3720. }
  3721. else {
  3722. alias FindResourceA FindResource;
  3723. }
  3724. HRSRC
  3725. FindResourceExA(
  3726. HMODULE hModule,
  3727. LPCSTR lpType,
  3728. LPCSTR lpName,
  3729. WORD wLanguage
  3730. );
  3731. HRSRC
  3732. FindResourceExW(
  3733. HMODULE hModule,
  3734. LPCWSTR lpType,
  3735. LPCWSTR lpName,
  3736. WORD wLanguage
  3737. );
  3738. version(UNICODE) {
  3739. alias FindResourceExW FindResourceEx;
  3740. }
  3741. else {
  3742. alias FindResourceExA FindResourceEx;
  3743. }
  3744. alias BOOL function(HMODULE hModule, LPSTR lpType,
  3745. LONG_PTR lParam) ENUMRESTYPEPROCA;
  3746. alias BOOL function(HMODULE hModule, LPWSTR lpType,
  3747. LONG_PTR lParam) ENUMRESTYPEPROCW;
  3748. version(UNICODE) {
  3749. alias ENUMRESTYPEPROCW ENUMRESTYPEPROC;
  3750. }
  3751. else {
  3752. alias ENUMRESTYPEPROCA ENUMRESTYPEPROC;
  3753. }
  3754. alias BOOL function(HMODULE hModule, LPCSTR lpType,
  3755. LPSTR lpName, LONG_PTR lParam) ENUMRESNAMEPROCA;
  3756. alias BOOL function(HMODULE hModule, LPCWSTR lpType,
  3757. LPWSTR lpName, LONG_PTR lParam) ENUMRESNAMEPROCW;
  3758. version(UNICODE) {
  3759. alias ENUMRESNAMEPROCW ENUMRESNAMEPROC;
  3760. }
  3761. else {
  3762. alias ENUMRESNAMEPROCA ENUMRESNAMEPROC;
  3763. }
  3764. alias BOOL function(HMODULE hModule, LPCSTR lpType,
  3765. LPCSTR lpName, WORD wLanguage, LONG_PTR lParam) ENUMRESLANGPROCA;
  3766. alias BOOL function(HMODULE hModule, LPCWSTR lpType,
  3767. LPCWSTR lpName, WORD wLanguage, LONG_PTR lParam) ENUMRESLANGPROCW;
  3768. version(UNICODE) {
  3769. alias ENUMRESLANGPROCW ENUMRESLANGPROC;
  3770. }
  3771. else {
  3772. alias ENUMRESLANGPROCA ENUMRESLANGPROC;
  3773. }
  3774. BOOL
  3775. EnumResourceTypesA(
  3776. HMODULE hModule,
  3777. ENUMRESTYPEPROCA lpEnumFunc,
  3778. LONG_PTR lParam
  3779. );
  3780. BOOL
  3781. EnumResourceTypesW(
  3782. HMODULE hModule,
  3783. ENUMRESTYPEPROCW lpEnumFunc,
  3784. LONG_PTR lParam
  3785. );
  3786. version(UNICODE) {
  3787. alias EnumResourceTypesW EnumResourceTypes;
  3788. }
  3789. else {
  3790. alias EnumResourceTypesA EnumResourceTypes;
  3791. }
  3792. BOOL
  3793. EnumResourceNamesA(
  3794. HMODULE hModule,
  3795. LPCSTR lpType,
  3796. ENUMRESNAMEPROCA lpEnumFunc,
  3797. LONG_PTR lParam
  3798. );
  3799. BOOL
  3800. EnumResourceNamesW(
  3801. HMODULE hModule,
  3802. LPCWSTR lpType,
  3803. ENUMRESNAMEPROCW lpEnumFunc,
  3804. LONG_PTR lParam
  3805. );
  3806. version(UNICODE) {
  3807. alias EnumResourceNamesW EnumResourceNames;
  3808. }
  3809. else {
  3810. alias EnumResourceNamesA EnumResourceNames;
  3811. }
  3812. BOOL
  3813. EnumResourceLanguagesA(
  3814. HMODULE hModule,
  3815. LPCSTR lpType,
  3816. LPCSTR lpName,
  3817. ENUMRESLANGPROCA lpEnumFunc,
  3818. LONG_PTR lParam
  3819. );
  3820. BOOL
  3821. EnumResourceLanguagesW(
  3822. HMODULE hModule,
  3823. LPCWSTR lpType,
  3824. LPCWSTR lpName,
  3825. ENUMRESLANGPROCW lpEnumFunc,
  3826. LONG_PTR lParam
  3827. );
  3828. version(UNICODE) {
  3829. alias EnumResourceLanguagesW EnumResourceLanguages;
  3830. }
  3831. else {
  3832. alias EnumResourceLanguagesA EnumResourceLanguages;
  3833. }
  3834. const auto RESOURCE_ENUM_LN = (0x0001);
  3835. const auto RESOURCE_ENUM_MUI = (0x0002);
  3836. const auto RESOURCE_ENUM_MUI_SYSTEM = (0x0004);
  3837. const auto RESOURCE_UPDATE_LN = (0x0010);
  3838. const auto RESOURCE_UPDATE_MUI = (0x0020);
  3839. BOOL
  3840. EnumResourceTypesExA(
  3841. HMODULE hModule,
  3842. ENUMRESTYPEPROCA lpEnumFunc,
  3843. LONG_PTR lParam,
  3844. DWORD dwFlags,
  3845. LANGID LangId
  3846. );
  3847. BOOL
  3848. EnumResourceTypesExW(
  3849. HMODULE hModule,
  3850. ENUMRESTYPEPROCW lpEnumFunc,
  3851. LONG_PTR lParam,
  3852. DWORD dwFlags,
  3853. LANGID LangId
  3854. );
  3855. version(UNICODE) {
  3856. alias EnumResourceTypesExW EnumResourceTypesEx;
  3857. }
  3858. else {
  3859. alias EnumResourceTypesExA EnumResourceTypesEx;
  3860. }
  3861. BOOL
  3862. EnumResourceNamesExA(
  3863. HMODULE hModule,
  3864. LPCSTR lpType,
  3865. ENUMRESNAMEPROCA lpEnumFunc,
  3866. LONG_PTR lParam,
  3867. DWORD dwFlags,
  3868. LANGID LangId
  3869. );
  3870. BOOL
  3871. EnumResourceNamesExW(
  3872. HMODULE hModule,
  3873. LPCWSTR lpType,
  3874. ENUMRESNAMEPROCW lpEnumFunc,
  3875. LONG_PTR lParam,
  3876. DWORD dwFlags,
  3877. LANGID LangId
  3878. );
  3879. version(UNICODE) {
  3880. alias EnumResourceNamesExW EnumResourceNamesEx;
  3881. }
  3882. else {
  3883. alias EnumResourceNamesExA EnumResourceNamesEx;
  3884. }
  3885. BOOL
  3886. EnumResourceLanguagesExA(
  3887. HMODULE hModule,
  3888. LPCSTR lpType,
  3889. LPCSTR lpName,
  3890. ENUMRESLANGPROCA lpEnumFunc,
  3891. LONG_PTR lParam,
  3892. DWORD dwFlags,
  3893. LANGID LangId
  3894. );
  3895. BOOL
  3896. EnumResourceLanguagesExW(
  3897. HMODULE hModule,
  3898. LPCWSTR lpType,
  3899. LPCWSTR lpName,
  3900. ENUMRESLANGPROCW lpEnumFunc,
  3901. LONG_PTR lParam,
  3902. DWORD dwFlags,
  3903. LANGID LangId
  3904. );
  3905. version(UNICODE) {
  3906. alias EnumResourceLanguagesExW EnumResourceLanguagesEx;
  3907. }
  3908. else {
  3909. alias EnumResourceLanguagesExA EnumResourceLanguagesEx;
  3910. }
  3911. HANDLE
  3912. BeginUpdateResourceA(
  3913. LPCSTR pFileName,
  3914. BOOL bDeleteExistingResources
  3915. );
  3916. HANDLE
  3917. BeginUpdateResourceW(
  3918. LPCWSTR pFileName,
  3919. BOOL bDeleteExistingResources
  3920. );
  3921. version(UNICODE) {
  3922. alias BeginUpdateResourceW BeginUpdateResource;
  3923. }
  3924. else {
  3925. alias BeginUpdateResourceA BeginUpdateResource;
  3926. }
  3927. BOOL
  3928. UpdateResourceA(
  3929. HANDLE hUpdate,
  3930. LPCSTR lpType,
  3931. LPCSTR lpName,
  3932. WORD wLanguage,
  3933. LPVOID lpData,
  3934. DWORD cb
  3935. );
  3936. BOOL
  3937. UpdateResourceW(
  3938. HANDLE hUpdate,
  3939. LPCWSTR lpType,
  3940. LPCWSTR lpName,
  3941. WORD wLanguage,
  3942. LPVOID lpData,
  3943. DWORD cb
  3944. );
  3945. version(UNICODE) {
  3946. alias UpdateResourceW UpdateResource;
  3947. }
  3948. else {
  3949. alias UpdateResourceA UpdateResource;
  3950. }
  3951. BOOL
  3952. EndUpdateResourceA(
  3953. HANDLE hUpdate,
  3954. BOOL fDiscard
  3955. );
  3956. BOOL
  3957. EndUpdateResourceW(
  3958. HANDLE hUpdate,
  3959. BOOL fDiscard
  3960. );
  3961. version(UNICODE) {
  3962. alias EndUpdateResourceW EndUpdateResource;
  3963. }
  3964. else {
  3965. alias EndUpdateResourceA EndUpdateResource;
  3966. }
  3967. ATOM
  3968. GlobalAddAtomA(
  3969. LPCSTR lpString
  3970. );
  3971. ATOM
  3972. GlobalAddAtomW(
  3973. LPCWSTR lpString
  3974. );
  3975. version(UNICODE) {
  3976. alias GlobalAddAtomW GlobalAddAtom;
  3977. }
  3978. else {
  3979. alias GlobalAddAtomA GlobalAddAtom;
  3980. }
  3981. ATOM
  3982. GlobalFindAtomA(
  3983. LPCSTR lpString
  3984. );
  3985. ATOM
  3986. GlobalFindAtomW(
  3987. LPCWSTR lpString
  3988. );
  3989. version(UNICODE) {
  3990. alias GlobalFindAtomW GlobalFindAtom;
  3991. }
  3992. else {
  3993. alias GlobalFindAtomA GlobalFindAtom;
  3994. }
  3995. UINT
  3996. GlobalGetAtomNameA(
  3997. ATOM nAtom,
  3998. LPSTR lpBuffer,
  3999. int nSize
  4000. );
  4001. UINT
  4002. GlobalGetAtomNameW(
  4003. ATOM nAtom,
  4004. LPWSTR lpBuffer,
  4005. int nSize
  4006. );
  4007. version(UNICODE) {
  4008. alias GlobalGetAtomNameW GlobalGetAtomName;
  4009. }
  4010. else {
  4011. alias GlobalGetAtomNameA GlobalGetAtomName;
  4012. }
  4013. ATOM
  4014. AddAtomA(
  4015. LPCSTR lpString
  4016. );
  4017. ATOM
  4018. AddAtomW(
  4019. LPCWSTR lpString
  4020. );
  4021. version(UNICODE) {
  4022. alias AddAtomW AddAtom;
  4023. }
  4024. else {
  4025. alias AddAtomA AddAtom;
  4026. }
  4027. ATOM
  4028. FindAtomA(
  4029. LPCSTR lpString
  4030. );
  4031. ATOM
  4032. FindAtomW(
  4033. LPCWSTR lpString
  4034. );
  4035. version(UNICODE) {
  4036. alias FindAtomW FindAtom;
  4037. }
  4038. else {
  4039. alias FindAtomA FindAtom;
  4040. }
  4041. UINT
  4042. GetAtomNameA(
  4043. ATOM nAtom,
  4044. LPSTR lpBuffer,
  4045. int nSize
  4046. );
  4047. UINT
  4048. GetAtomNameW(
  4049. ATOM nAtom,
  4050. LPWSTR lpBuffer,
  4051. int nSize
  4052. );
  4053. version(UNICODE) {
  4054. alias GetAtomNameW GetAtomName;
  4055. }
  4056. else {
  4057. alias GetAtomNameA GetAtomName;
  4058. }
  4059. UINT
  4060. GetProfileIntA(
  4061. LPCSTR lpAppName,
  4062. LPCSTR lpKeyName,
  4063. INT nDefault
  4064. );
  4065. UINT
  4066. GetProfileIntW(
  4067. LPCWSTR lpAppName,
  4068. LPCWSTR lpKeyName,
  4069. INT nDefault
  4070. );
  4071. version(UNICODE) {
  4072. alias GetProfileIntW GetProfileInt;
  4073. }
  4074. else {
  4075. alias GetProfileIntA GetProfileInt;
  4076. }
  4077. DWORD GetProfileStringA(
  4078. LPCSTR lpAppName,
  4079. LPCSTR lpKeyName,
  4080. LPCSTR lpDefault,
  4081. LPSTR lpReturnedString,
  4082. DWORD nSize
  4083. );
  4084. DWORD GetProfileStringW(
  4085. LPCWSTR lpAppName,
  4086. LPCWSTR lpKeyName,
  4087. LPCWSTR lpDefault,
  4088. LPWSTR lpReturnedString,
  4089. DWORD nSize
  4090. );
  4091. version(UNICODE) {
  4092. alias GetProfileStringW GetProfileString;
  4093. }
  4094. else {
  4095. alias GetProfileStringA GetProfileString;
  4096. }
  4097. BOOL
  4098. WriteProfileStringA(
  4099. LPCSTR lpAppName,
  4100. LPCSTR lpKeyName,
  4101. LPCSTR lpString
  4102. );
  4103. BOOL
  4104. WriteProfileStringW(
  4105. LPCWSTR lpAppName,
  4106. LPCWSTR lpKeyName,
  4107. LPCWSTR lpString
  4108. );
  4109. version(UNICODE) {
  4110. alias WriteProfileStringW WriteProfileString;
  4111. }
  4112. else {
  4113. alias WriteProfileStringA WriteProfileString;
  4114. }
  4115. DWORD
  4116. GetProfileSectionA(
  4117. LPCSTR lpAppName,
  4118. LPSTR lpReturnedString,
  4119. DWORD nSize
  4120. );
  4121. DWORD
  4122. GetProfileSectionW(
  4123. LPCWSTR lpAppName,
  4124. LPWSTR lpReturnedString,
  4125. DWORD nSize
  4126. );
  4127. version(UNICODE) {
  4128. alias GetProfileSectionW GetProfileSection;
  4129. }
  4130. else {
  4131. alias GetProfileSectionA GetProfileSection;
  4132. }
  4133. BOOL
  4134. WriteProfileSectionA(
  4135. LPCSTR lpAppName,
  4136. LPCSTR lpString
  4137. );
  4138. BOOL
  4139. WriteProfileSectionW(
  4140. LPCWSTR lpAppName,
  4141. LPCWSTR lpString
  4142. );
  4143. version(UNICODE) {
  4144. alias WriteProfileSectionW WriteProfileSection;
  4145. }
  4146. else {
  4147. alias WriteProfileSectionA WriteProfileSection;
  4148. }
  4149. UINT
  4150. GetPrivateProfileIntA(
  4151. LPCSTR lpAppName,
  4152. LPCSTR lpKeyName,
  4153. INT nDefault,
  4154. LPCSTR lpFileName
  4155. );
  4156. UINT
  4157. GetPrivateProfileIntW(
  4158. LPCWSTR lpAppName,
  4159. LPCWSTR lpKeyName,
  4160. INT nDefault,
  4161. LPCWSTR lpFileName
  4162. );
  4163. version(UNICODE) {
  4164. alias GetPrivateProfileIntW GetPrivateProfileInt;
  4165. }
  4166. else {
  4167. alias GetPrivateProfileIntA GetPrivateProfileInt;
  4168. }
  4169. DWORD
  4170. GetPrivateProfileStringA(
  4171. LPCSTR lpAppName,
  4172. LPCSTR lpKeyName,
  4173. LPCSTR lpDefault,
  4174. LPSTR lpReturnedString,
  4175. DWORD nSize,
  4176. LPCSTR lpFileName
  4177. );
  4178. DWORD
  4179. GetPrivateProfileStringW(
  4180. LPCWSTR lpAppName,
  4181. LPCWSTR lpKeyName,
  4182. LPCWSTR lpDefault,
  4183. LPWSTR lpReturnedString,
  4184. DWORD nSize,
  4185. LPCWSTR lpFileName
  4186. );
  4187. version(UNICODE) {
  4188. alias GetPrivateProfileStringW GetPrivateProfileString;
  4189. }
  4190. else {
  4191. alias GetPrivateProfileStringA GetPrivateProfileString;
  4192. }
  4193. BOOL
  4194. WritePrivateProfileStringA(
  4195. LPCSTR lpAppName,
  4196. LPCSTR lpKeyName,
  4197. LPCSTR lpString,
  4198. LPCSTR lpFileName
  4199. );
  4200. BOOL
  4201. WritePrivateProfileStringW(
  4202. LPCWSTR lpAppName,
  4203. LPCWSTR lpKeyName,
  4204. LPCWSTR lpString,
  4205. LPCWSTR lpFileName
  4206. );
  4207. version(UNICODE) {
  4208. alias WritePrivateProfileStringW WritePrivateProfileString;
  4209. }
  4210. else {
  4211. alias WritePrivateProfileStringA WritePrivateProfileString;
  4212. }
  4213. DWORD
  4214. GetPrivateProfileSectionA(
  4215. LPCSTR lpAppName,
  4216. LPSTR lpReturnedString,
  4217. DWORD nSize,
  4218. LPCSTR lpFileName
  4219. );
  4220. DWORD
  4221. GetPrivateProfileSectionW(
  4222. LPCWSTR lpAppName,
  4223. LPWSTR lpReturnedString,
  4224. DWORD nSize,
  4225. LPCWSTR lpFileName
  4226. );
  4227. version(UNICODE) {
  4228. alias GetPrivateProfileSectionW GetPrivateProfileSection;
  4229. }
  4230. else {
  4231. alias GetPrivateProfileSectionA GetPrivateProfileSection;
  4232. }
  4233. BOOL
  4234. WritePrivateProfileSectionA(
  4235. LPCSTR lpAppName,
  4236. LPCSTR lpString,
  4237. LPCSTR lpFileName
  4238. );
  4239. BOOL
  4240. WritePrivateProfileSectionW(
  4241. LPCWSTR lpAppName,
  4242. LPCWSTR lpString,
  4243. LPCWSTR lpFileName
  4244. );
  4245. version(UNICODE) {
  4246. alias WritePrivateProfileSectionW WritePrivateProfileSection;
  4247. }
  4248. else {
  4249. alias WritePrivateProfileSectionA WritePrivateProfileSection;
  4250. }
  4251. DWORD
  4252. GetPrivateProfileSectionNamesA(
  4253. LPSTR lpszReturnBuffer,
  4254. DWORD nSize,
  4255. LPCSTR lpFileName
  4256. );
  4257. DWORD
  4258. GetPrivateProfileSectionNamesW(
  4259. LPWSTR lpszReturnBuffer,
  4260. DWORD nSize,
  4261. LPCWSTR lpFileName
  4262. );
  4263. version(UNICODE) {
  4264. alias GetPrivateProfileSectionNamesW GetPrivateProfileSectionNames;
  4265. }
  4266. else {
  4267. alias GetPrivateProfileSectionNamesA GetPrivateProfileSectionNames;
  4268. }
  4269. BOOL
  4270. GetPrivateProfileStructA(
  4271. LPCSTR lpszSection,
  4272. LPCSTR lpszKey,
  4273. LPVOID lpStruct,
  4274. UINT uSizeStruct,
  4275. LPCSTR szFile
  4276. );
  4277. BOOL
  4278. GetPrivateProfileStructW(
  4279. LPCWSTR lpszSection,
  4280. LPCWSTR lpszKey,
  4281. LPVOID lpStruct,
  4282. UINT uSizeStruct,
  4283. LPCWSTR szFile
  4284. );
  4285. version(UNICODE) {
  4286. alias GetPrivateProfileStructW GetPrivateProfileStruct;
  4287. }
  4288. else {
  4289. alias GetPrivateProfileStructA GetPrivateProfileStruct;
  4290. }
  4291. BOOL
  4292. WritePrivateProfileStructA(
  4293. LPCSTR lpszSection,
  4294. LPCSTR lpszKey,LPVOID lpStruct,
  4295. UINT uSizeStruct,
  4296. LPCSTR szFile
  4297. );
  4298. BOOL
  4299. WritePrivateProfileStructW(
  4300. LPCWSTR lpszSection,
  4301. LPCWSTR lpszKey,
  4302. LPVOID lpStruct,
  4303. UINT uSizeStruct,
  4304. LPCWSTR szFile
  4305. );
  4306. version(UNICODE) {
  4307. alias WritePrivateProfileStructW WritePrivateProfileStruct;
  4308. }
  4309. else {
  4310. alias WritePrivateProfileStructA WritePrivateProfileStruct;
  4311. }
  4312. UINT
  4313. GetDriveTypeA(
  4314. LPCSTR lpRootPathName
  4315. );
  4316. UINT
  4317. GetDriveTypeW(
  4318. LPCWSTR lpRootPathName
  4319. );
  4320. version(UNICODE) {
  4321. alias GetDriveTypeW GetDriveType;
  4322. }
  4323. else {
  4324. alias GetDriveTypeA GetDriveType;
  4325. }
  4326. UINT
  4327. GetSystemDirectoryA(
  4328. LPSTR lpBuffer,
  4329. UINT uSize
  4330. );
  4331. UINT
  4332. GetSystemDirectoryW(
  4333. LPWSTR lpBuffer,
  4334. UINT uSize
  4335. );
  4336. version(UNICODE) {
  4337. alias GetSystemDirectoryW GetSystemDirectory;
  4338. }
  4339. else {
  4340. alias GetSystemDirectoryA GetSystemDirectory;
  4341. }
  4342. DWORD
  4343. GetTempPathA(
  4344. DWORD nBufferLength,
  4345. LPSTR lpBuffer
  4346. );
  4347. DWORD
  4348. GetTempPathW(
  4349. DWORD nBufferLength,
  4350. LPWSTR lpBuffer
  4351. );
  4352. version(UNICODE) {
  4353. alias GetTempPathW GetTempPath;
  4354. }
  4355. else {
  4356. alias GetTempPathA GetTempPath;
  4357. }
  4358. UINT
  4359. GetTempFileNameA(
  4360. LPCSTR lpPathName,
  4361. LPCSTR lpPrefixString,
  4362. UINT uUnique,
  4363. LPSTR lpTempFileName
  4364. );
  4365. UINT
  4366. GetTempFileNameW(
  4367. LPCWSTR lpPathName,
  4368. LPCWSTR lpPrefixString,
  4369. UINT uUnique,
  4370. LPWSTR lpTempFileName
  4371. );
  4372. version(UNICODE) {
  4373. alias GetTempFileNameW GetTempFileName;
  4374. }
  4375. else {
  4376. alias GetTempFileNameA GetTempFileName;
  4377. }
  4378. UINT GetWindowsDirectoryA(
  4379. LPSTR lpBuffer,
  4380. UINT uSize
  4381. );
  4382. UINT GetWindowsDirectoryW(
  4383. LPWSTR lpBuffer,
  4384. UINT uSize
  4385. );
  4386. version(UNICODE) {
  4387. alias GetWindowsDirectoryW GetWindowsDirectory;
  4388. }
  4389. else {
  4390. alias GetWindowsDirectoryA GetWindowsDirectory;
  4391. }
  4392. UINT
  4393. GetSystemWindowsDirectoryA(
  4394. LPSTR lpBuffer,
  4395. UINT uSize
  4396. );
  4397. UINT
  4398. GetSystemWindowsDirectoryW(
  4399. LPWSTR lpBuffer,
  4400. UINT uSize
  4401. );
  4402. version(UNICODE) {
  4403. alias GetSystemWindowsDirectoryW GetSystemWindowsDirectory;
  4404. }
  4405. else {
  4406. alias GetSystemWindowsDirectoryA GetSystemWindowsDirectory;
  4407. }
  4408. UINT GetSystemWow64DirectoryA(
  4409. LPSTR lpBuffer,
  4410. UINT uSize
  4411. );
  4412. UINT
  4413. GetSystemWow64DirectoryW(
  4414. LPWSTR lpBuffer,
  4415. UINT uSize
  4416. );
  4417. version(UNICODE) {
  4418. alias GetSystemWow64DirectoryW GetSystemWow64Directory;
  4419. }
  4420. else {
  4421. alias GetSystemWow64DirectoryA GetSystemWow64Directory;
  4422. }
  4423. BOOLEAN
  4424. Wow64EnableWow64FsRedirection (
  4425. BOOLEAN Wow64FsEnableRedirection
  4426. );
  4427. BOOL
  4428. Wow64DisableWow64FsRedirection (
  4429. PVOID *OldValue
  4430. );
  4431. BOOL
  4432. Wow64RevertWow64FsRedirection (
  4433. PVOID OlValue
  4434. );
  4435. //
  4436. // for GetProcAddress
  4437. //
  4438. alias UINT function(LPSTR lpBuffer, UINT uSize) PGET_SYSTEM_WOW64_DIRECTORY_A;
  4439. alias UINT function(LPWSTR lpBuffer, UINT uSize) PGET_SYSTEM_WOW64_DIRECTORY_W;
  4440. //
  4441. // GetProcAddress only accepts GET_SYSTEM_WOW64_DIRECTORY_NAME_A_A,
  4442. // GET_SYSTEM_WOW64_DIRECTORY_NAME_W_A, GET_SYSTEM_WOW64_DIRECTORY_NAME_T_A.
  4443. // The others are if you want to use the strings in some other way.
  4444. //
  4445. const auto GET_SYSTEM_WOW64_DIRECTORY_NAME_A_A = "GetSystemWow64DirectoryA\0"c;
  4446. const auto GET_SYSTEM_WOW64_DIRECTORY_NAME_A_W = "GetSystemWow64DirectoryA\0"w;
  4447. const auto GET_SYSTEM_WOW64_DIRECTORY_NAME_W_A = "GetSystemWow64DirectoryW\0"c;
  4448. const auto GET_SYSTEM_WOW64_DIRECTORY_NAME_W_W = "GetSystemWow64DirectoryW\0"w;
  4449. version(UNICODE) {
  4450. const auto GET_SYSTEM_WOW64_DIRECTORY_NAME_A_T = GET_SYSTEM_WOW64_DIRECTORY_NAME_A_W;
  4451. const auto GET_SYSTEM_WOW64_DIRECTORY_NAME_W_T = GET_SYSTEM_WOW64_DIRECTORY_NAME_W_W;
  4452. }
  4453. else {
  4454. const auto GET_SYSTEM_WOW64_DIRECTORY_NAME_A_T = GET_SYSTEM_WOW64_DIRECTORY_NAME_A_A;
  4455. const auto GET_SYSTEM_WOW64_DIRECTORY_NAME_W_T = GET_SYSTEM_WOW64_DIRECTORY_NAME_W_A;
  4456. }
  4457. version(UNICODE) {
  4458. alias GET_SYSTEM_WOW64_DIRECTORY_NAME_W_A GET_SYSTEM_WOW64_DIRECTORY_NAME_T_A;
  4459. alias GET_SYSTEM_WOW64_DIRECTORY_NAME_W_W GET_SYSTEM_WOW64_DIRECTORY_NAME_T_W;
  4460. alias GET_SYSTEM_WOW64_DIRECTORY_NAME_W_T GET_SYSTEM_WOW64_DIRECTORY_NAME_T_T;
  4461. }
  4462. else {
  4463. alias GET_SYSTEM_WOW64_DIRECTORY_NAME_A_A GET_SYSTEM_WOW64_DIRECTORY_NAME_T_A;
  4464. alias GET_SYSTEM_WOW64_DIRECTORY_NAME_A_W GET_SYSTEM_WOW64_DIRECTORY_NAME_T_W;
  4465. alias GET_SYSTEM_WOW64_DIRECTORY_NAME_A_T GET_SYSTEM_WOW64_DIRECTORY_NAME_T_T;
  4466. }
  4467. BOOL
  4468. SetCurrentDirectoryA(
  4469. LPCSTR lpPathName
  4470. );
  4471. BOOL
  4472. SetCurrentDirectoryW(
  4473. LPCWSTR lpPathName
  4474. );
  4475. version(UNICODE) {
  4476. alias SetCurrentDirectoryW SetCurrentDirectory;
  4477. }
  4478. else {
  4479. alias SetCurrentDirectoryA SetCurrentDirectory;
  4480. }
  4481. DWORD GetCurrentDirectoryA(
  4482. DWORD nBufferLength,
  4483. LPSTR lpBuffer
  4484. );
  4485. DWORD GetCurrentDirectoryW(
  4486. DWORD nBufferLength,
  4487. LPWSTR lpBuffer
  4488. );
  4489. version(UNICODE) {
  4490. alias GetCurrentDirectoryW GetCurrentDirectory;
  4491. }
  4492. else {
  4493. alias GetCurrentDirectoryA GetCurrentDirectory;
  4494. }
  4495. BOOL
  4496. SetDllDirectoryA(
  4497. LPCSTR lpPathName
  4498. );
  4499. BOOL
  4500. SetDllDirectoryW(
  4501. LPCWSTR lpPathName
  4502. );
  4503. version(UNICODE) {
  4504. alias SetDllDirectoryW SetDllDirectory;
  4505. }
  4506. else {
  4507. alias SetDllDirectoryA SetDllDirectory;
  4508. }
  4509. DWORD
  4510. GetDllDirectoryA(
  4511. DWORD nBufferLength,
  4512. LPSTR lpBuffer
  4513. );
  4514. DWORD
  4515. GetDllDirectoryW(
  4516. DWORD nBufferLength,
  4517. LPWSTR lpBuffer
  4518. );
  4519. version(UNICODE) {
  4520. alias GetDllDirectoryW GetDllDirectory;
  4521. }
  4522. else {
  4523. alias GetDllDirectoryA GetDllDirectory;
  4524. }
  4525. BOOL
  4526. GetDiskFreeSpaceA(
  4527. LPCSTR lpRootPathName,
  4528. LPDWORD lpSectorsPerCluster,
  4529. LPDWORD lpBytesPerSector,
  4530. LPDWORD lpNumberOfFreeClusters,
  4531. LPDWORD lpTotalNumberOfClusters
  4532. );
  4533. BOOL
  4534. GetDiskFreeSpaceW(
  4535. LPCWSTR lpRootPathName,
  4536. LPDWORD lpSectorsPerCluster,
  4537. LPDWORD lpBytesPerSector,
  4538. LPDWORD lpNumberOfFreeClusters,
  4539. LPDWORD lpTotalNumberOfClusters
  4540. );
  4541. version(UNICODE) {
  4542. alias GetDiskFreeSpaceW GetDiskFreeSpace;
  4543. }
  4544. else {
  4545. alias GetDiskFreeSpaceA GetDiskFreeSpace;
  4546. }
  4547. BOOL
  4548. GetDiskFreeSpaceExA(
  4549. LPCSTR lpDirectoryName,
  4550. PULARGE_INTEGER lpFreeBytesAvailableToCaller,
  4551. PULARGE_INTEGER lpTotalNumberOfBytes,
  4552. PULARGE_INTEGER lpTotalNumberOfFreeBytes
  4553. );
  4554. BOOL
  4555. GetDiskFreeSpaceExW(
  4556. LPCWSTR lpDirectoryName,
  4557. PULARGE_INTEGER lpFreeBytesAvailableToCaller,
  4558. PULARGE_INTEGER lpTotalNumberOfBytes,
  4559. PULARGE_INTEGER lpTotalNumberOfFreeBytes
  4560. );
  4561. version(UNICODE) {
  4562. alias GetDiskFreeSpaceExW GetDiskFreeSpaceEx;
  4563. }
  4564. else {
  4565. alias GetDiskFreeSpaceExA GetDiskFreeSpaceEx;
  4566. }
  4567. BOOL
  4568. CreateDirectoryA(
  4569. LPCSTR lpPathName,
  4570. LPSECURITY_ATTRIBUTES lpSecurityAttributes
  4571. );
  4572. BOOL
  4573. CreateDirectoryW(
  4574. LPCWSTR lpPathName,
  4575. LPSECURITY_ATTRIBUTES lpSecurityAttributes
  4576. );
  4577. version(UNICODE) {
  4578. alias CreateDirectoryW CreateDirectory;
  4579. }
  4580. else {
  4581. alias CreateDirectoryA CreateDirectory;
  4582. }
  4583. BOOL
  4584. CreateDirectoryExA(
  4585. LPCSTR lpTemplateDirectory,
  4586. LPCSTR lpNewDirectory,
  4587. LPSECURITY_ATTRIBUTES lpSecurityAttributes
  4588. );
  4589. BOOL
  4590. CreateDirectoryExW(
  4591. LPCWSTR lpTemplateDirectory,
  4592. LPCWSTR lpNewDirectory,
  4593. LPSECURITY_ATTRIBUTES lpSecurityAttributes
  4594. );
  4595. version(UNICODE) {
  4596. alias CreateDirectoryExW CreateDirectoryEx;
  4597. }
  4598. else {
  4599. alias CreateDirectoryExA CreateDirectoryEx;
  4600. }
  4601. BOOL
  4602. CreateDirectoryTransactedA(
  4603. LPCSTR lpTemplateDirectory,
  4604. LPCSTR lpNewDirectory,
  4605. LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  4606. HANDLE hTransaction
  4607. );
  4608. BOOL
  4609. CreateDirectoryTransactedW(
  4610. LPCWSTR lpTemplateDirectory,
  4611. LPCWSTR lpNewDirectory,
  4612. LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  4613. HANDLE hTransaction
  4614. );
  4615. version(UNICODE) {
  4616. alias CreateDirectoryTransactedW CreateDirectoryTransacted;
  4617. }
  4618. else {
  4619. alias CreateDirectoryTransactedA CreateDirectoryTransacted;
  4620. }
  4621. BOOL
  4622. RemoveDirectoryA(
  4623. LPCSTR lpPathName
  4624. );
  4625. BOOL
  4626. RemoveDirectoryW(
  4627. LPCWSTR lpPathName
  4628. );
  4629. version(UNICODE) {
  4630. alias RemoveDirectoryW RemoveDirectory;
  4631. }
  4632. else {
  4633. alias RemoveDirectoryA RemoveDirectory;
  4634. }
  4635. BOOL
  4636. RemoveDirectoryTransactedA(
  4637. LPCSTR lpPathName,
  4638. HANDLE hTransaction
  4639. );
  4640. BOOL
  4641. RemoveDirectoryTransactedW(
  4642. LPCWSTR lpPathName,
  4643. HANDLE hTransaction
  4644. );
  4645. version(UNICODE) {
  4646. alias RemoveDirectoryTransactedW RemoveDirectoryTransacted;
  4647. }
  4648. else {
  4649. alias RemoveDirectoryTransactedA RemoveDirectoryTransacted;
  4650. }
  4651. DWORD
  4652. GetFullPathNameA(
  4653. LPCSTR lpFileName,
  4654. DWORD nBufferLength,
  4655. LPSTR lpBuffer,
  4656. LPSTR *lpFilePart
  4657. );
  4658. DWORD
  4659. GetFullPathNameW(
  4660. LPCWSTR lpFileName,
  4661. DWORD nBufferLength,
  4662. LPWSTR lpBuffer,
  4663. LPWSTR *lpFilePart
  4664. );
  4665. version(UNICODE) {
  4666. alias GetFullPathNameW GetFullPathName;
  4667. }
  4668. else {
  4669. alias GetFullPathNameA GetFullPathName;
  4670. }
  4671. DWORD
  4672. GetFullPathNameTransactedA(
  4673. LPCSTR lpFileName,
  4674. DWORD nBufferLength,
  4675. LPSTR lpBuffer,
  4676. LPSTR *lpFilePart,
  4677. HANDLE hTransaction
  4678. );
  4679. DWORD
  4680. GetFullPathNameTransactedW(
  4681. LPCWSTR lpFileName,
  4682. DWORD nBufferLength,
  4683. LPWSTR lpBuffer,
  4684. LPWSTR *lpFilePart,
  4685. HANDLE hTransaction
  4686. );
  4687. version(UNICODE) {
  4688. alias GetFullPathNameTransactedW GetFullPathNameTransacted;
  4689. }
  4690. else {
  4691. alias GetFullPathNameTransactedA GetFullPathNameTransacted;
  4692. }
  4693. const auto DDD_RAW_TARGET_PATH = 0x00000001;
  4694. const auto DDD_REMOVE_DEFINITION = 0x00000002;
  4695. const auto DDD_EXACT_MATCH_ON_REMOVE = 0x00000004;
  4696. const auto DDD_NO_BROADCAST_SYSTEM = 0x00000008;
  4697. const auto DDD_LUID_BROADCAST_DRIVE = 0x00000010;
  4698. BOOL
  4699. DefineDosDeviceA(
  4700. DWORD dwFlags,
  4701. LPCSTR lpDeviceName,
  4702. LPCSTR lpTargetPath
  4703. );
  4704. BOOL
  4705. DefineDosDeviceW(
  4706. DWORD dwFlags,
  4707. LPCWSTR lpDeviceName,
  4708. LPCWSTR lpTargetPath
  4709. );
  4710. version(UNICODE) {
  4711. alias DefineDosDeviceW DefineDosDevice;
  4712. }
  4713. else {
  4714. alias DefineDosDeviceA DefineDosDevice;
  4715. }
  4716. DWORD
  4717. QueryDosDeviceA(
  4718. LPCSTR lpDeviceName,
  4719. LPSTR lpTargetPath,
  4720. DWORD ucchMax
  4721. );
  4722. DWORD
  4723. QueryDosDeviceW(
  4724. LPCWSTR lpDeviceName,
  4725. LPWSTR lpTargetPath,
  4726. DWORD ucchMax
  4727. );
  4728. version(UNICODE) {
  4729. alias QueryDosDeviceW QueryDosDevice;
  4730. }
  4731. else {
  4732. alias QueryDosDeviceA QueryDosDevice;
  4733. }
  4734. HANDLE
  4735. CreateFileA(
  4736. LPCSTR lpFileName,
  4737. DWORD dwDesiredAccess,
  4738. DWORD dwShareMode,
  4739. LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  4740. DWORD dwCreationDisposition,
  4741. DWORD dwFlagsAndAttributes,
  4742. HANDLE hTemplateFile
  4743. );
  4744. HANDLE
  4745. CreateFileW(
  4746. LPCWSTR lpFileName,
  4747. DWORD dwDesiredAccess,
  4748. DWORD dwShareMode,
  4749. LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  4750. DWORD dwCreationDisposition,
  4751. DWORD dwFlagsAndAttributes,
  4752. HANDLE hTemplateFile
  4753. );
  4754. version(UNICODE) {
  4755. alias CreateFileW CreateFile;
  4756. }
  4757. else {
  4758. alias CreateFileA CreateFile;
  4759. }
  4760. HANDLE
  4761. CreateFileTransactedA(
  4762. LPCSTR lpFileName,
  4763. DWORD dwDesiredAccess,
  4764. DWORD dwShareMode,
  4765. LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  4766. DWORD dwCreationDisposition,
  4767. DWORD dwFlagsAndAttributes,
  4768. HANDLE hTemplateFile,
  4769. HANDLE hTransaction,
  4770. PUSHORT pusMiniVersion,
  4771. PVOID lpExtendedParameter
  4772. );
  4773. HANDLE
  4774. CreateFileTransactedW(
  4775. LPCWSTR lpFileName,
  4776. DWORD dwDesiredAccess,
  4777. DWORD dwShareMode,
  4778. LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  4779. DWORD dwCreationDisposition,
  4780. DWORD dwFlagsAndAttributes,
  4781. HANDLE hTemplateFile,
  4782. HANDLE hTransaction,
  4783. PUSHORT pusMiniVersion,
  4784. PVOID lpExtendedParameter
  4785. );
  4786. version(UNICODE) {
  4787. alias CreateFileTransactedW CreateFileTransacted;
  4788. }
  4789. else {
  4790. alias CreateFileTransactedA CreateFileTransacted;
  4791. }
  4792. HANDLE
  4793. ReOpenFile(
  4794. HANDLE hOriginalFile,
  4795. DWORD dwDesiredAccess,
  4796. DWORD dwShareMode,
  4797. DWORD dwFlagsAndAttributes
  4798. );
  4799. BOOL
  4800. SetFileAttributesA(
  4801. LPCSTR lpFileName,
  4802. DWORD dwFileAttributes
  4803. );
  4804. BOOL
  4805. SetFileAttributesW(
  4806. LPCWSTR lpFileName,
  4807. DWORD dwFileAttributes
  4808. );
  4809. version(UNICODE) {
  4810. alias SetFileAttributesW SetFileAttributes;
  4811. }
  4812. else {
  4813. alias SetFileAttributesA SetFileAttributes;
  4814. }
  4815. DWORD
  4816. GetFileAttributesA(
  4817. LPCSTR lpFileName
  4818. );
  4819. DWORD
  4820. GetFileAttributesW(
  4821. LPCWSTR lpFileName
  4822. );
  4823. version(UNICODE) {
  4824. alias GetFileAttributesW GetFileAttributes;
  4825. }
  4826. else {
  4827. alias GetFileAttributesA GetFileAttributes;
  4828. }
  4829. BOOL
  4830. SetFileAttributesTransactedA(
  4831. LPCSTR lpFileName,
  4832. DWORD dwFileAttributes,
  4833. HANDLE hTransaction
  4834. );
  4835. BOOL
  4836. SetFileAttributesTransactedW(
  4837. LPCWSTR lpFileName,
  4838. DWORD dwFileAttributes,
  4839. HANDLE hTransaction
  4840. );
  4841. version(UNICODE) {
  4842. alias SetFileAttributesTransactedW SetFileAttributesTransacted;
  4843. }
  4844. else {
  4845. alias SetFileAttributesTransactedA SetFileAttributesTransacted;
  4846. }
  4847. enum GET_FILEEX_INFO_LEVELS {
  4848. GetFileExInfoStandard,
  4849. GetFileExMaxInfoLevel
  4850. }
  4851. BOOL
  4852. GetFileAttributesTransactedA(
  4853. LPCSTR lpFileName,
  4854. GET_FILEEX_INFO_LEVELS fInfoLevelId,
  4855. LPVOID lpFileInformation,
  4856. HANDLE hTransaction
  4857. );
  4858. BOOL
  4859. GetFileAttributesTransactedW(
  4860. LPCWSTR lpFileName,
  4861. GET_FILEEX_INFO_LEVELS fInfoLevelId,
  4862. LPVOID lpFileInformation,
  4863. HANDLE hTransaction
  4864. );
  4865. version(UNICODE) {
  4866. alias GetFileAttributesTransactedW GetFileAttributesTransacted;
  4867. }
  4868. else {
  4869. alias GetFileAttributesTransactedA GetFileAttributesTransacted;
  4870. }
  4871. BOOL
  4872. GetFileAttributesExA(
  4873. LPCSTR lpFileName,
  4874. GET_FILEEX_INFO_LEVELS fInfoLevelId,
  4875. LPVOID lpFileInformation
  4876. );
  4877. BOOL
  4878. GetFileAttributesExW(
  4879. LPCWSTR lpFileName,
  4880. GET_FILEEX_INFO_LEVELS fInfoLevelId,
  4881. LPVOID lpFileInformation
  4882. );
  4883. version(UNICODE) {
  4884. alias GetFileAttributesExW GetFileAttributesEx;
  4885. }
  4886. else {
  4887. alias GetFileAttributesExA GetFileAttributesEx;
  4888. }
  4889. DWORD
  4890. GetCompressedFileSizeA(
  4891. LPCSTR lpFileName,
  4892. LPDWORD lpFileSizeHigh
  4893. );
  4894. DWORD
  4895. GetCompressedFileSizeW(
  4896. LPCWSTR lpFileName,
  4897. LPDWORD lpFileSizeHigh
  4898. );
  4899. version(UNICODE) {
  4900. alias GetCompressedFileSizeW GetCompressedFileSize;
  4901. }
  4902. else {
  4903. alias GetCompressedFileSizeA GetCompressedFileSize;
  4904. }
  4905. DWORD
  4906. GetCompressedFileSizeTransactedA(
  4907. LPCSTR lpFileName,
  4908. LPDWORD lpFileSizeHigh,
  4909. HANDLE hTransaction
  4910. );
  4911. DWORD
  4912. GetCompressedFileSizeTransactedW(
  4913. LPCWSTR lpFileName,
  4914. LPDWORD lpFileSizeHigh,
  4915. HANDLE hTransaction
  4916. );
  4917. version(UNICODE) {
  4918. alias GetCompressedFileSizeTransactedW GetCompressedFileSizeTransacted;
  4919. }
  4920. else {
  4921. alias GetCompressedFileSizeTransactedA GetCompressedFileSizeTransacted;
  4922. }
  4923. BOOL
  4924. DeleteFileA(
  4925. LPCSTR lpFileName
  4926. );
  4927. BOOL
  4928. DeleteFileW(
  4929. LPCWSTR lpFileName
  4930. );
  4931. version(UNICODE) {
  4932. alias DeleteFileW DeleteFile;
  4933. }
  4934. else {
  4935. alias DeleteFileA DeleteFile;
  4936. }
  4937. BOOL
  4938. DeleteFileTransactedA(
  4939. LPCSTR lpFileName,
  4940. HANDLE hTransaction
  4941. );
  4942. BOOL
  4943. DeleteFileTransactedW(
  4944. LPCWSTR lpFileName,
  4945. HANDLE hTransaction
  4946. );
  4947. version(UNICODE) {
  4948. alias DeleteFileTransactedW DeleteFileTransacted;
  4949. }
  4950. else {
  4951. alias DeleteFileTransactedA DeleteFileTransacted;
  4952. }
  4953. BOOL
  4954. CheckNameLegalDOS8Dot3A(
  4955. LPCSTR lpName,
  4956. LPSTR lpOemName,
  4957. DWORD OemNameSize,
  4958. PBOOL pbNameContainsSpaces ,
  4959. PBOOL pbNameLegal
  4960. );
  4961. BOOL
  4962. CheckNameLegalDOS8Dot3W(
  4963. LPCWSTR lpName,
  4964. LPSTR lpOemName,
  4965. DWORD OemNameSize,
  4966. PBOOL pbNameContainsSpaces ,
  4967. PBOOL pbNameLegal
  4968. );
  4969. version(UNICODE) {
  4970. alias CheckNameLegalDOS8Dot3W CheckNameLegalDOS8Dot3;
  4971. }
  4972. else {
  4973. alias CheckNameLegalDOS8Dot3A CheckNameLegalDOS8Dot3;
  4974. }
  4975. enum FINDEX_INFO_LEVELS {
  4976. FindExInfoStandard,
  4977. FindExInfoMaxInfoLevel
  4978. }
  4979. enum FINDEX_SEARCH_OPS {
  4980. FindExSearchNameMatch,
  4981. FindExSearchLimitToDirectories,
  4982. FindExSearchLimitToDevices,
  4983. FindExSearchMaxSearchOp
  4984. }
  4985. const auto FIND_FIRST_EX_CASE_SENSITIVE = 0x00000001;
  4986. HANDLE
  4987. FindFirstFileExA(
  4988. LPCSTR lpFileName,
  4989. FINDEX_INFO_LEVELS fInfoLevelId,
  4990. LPVOID lpFindFileData,
  4991. FINDEX_SEARCH_OPS fSearchOp,
  4992. LPVOID lpSearchFilter,
  4993. DWORD dwAdditionalFlags
  4994. );
  4995. HANDLE
  4996. FindFirstFileExW(
  4997. LPCWSTR lpFileName,
  4998. FINDEX_INFO_LEVELS fInfoLevelId,
  4999. LPVOID lpFindFileData,
  5000. FINDEX_SEARCH_OPS fSearchOp,
  5001. LPVOID lpSearchFilter,
  5002. DWORD dwAdditionalFlags
  5003. );
  5004. version(UNICODE) {
  5005. alias FindFirstFileExW FindFirstFileEx;
  5006. }
  5007. else {
  5008. alias FindFirstFileExA FindFirstFileEx;
  5009. }
  5010. HANDLE
  5011. FindFirstFileTransactedA(
  5012. LPCSTR lpFileName,
  5013. FINDEX_INFO_LEVELS fInfoLevelId,
  5014. LPVOID lpFindFileData,
  5015. FINDEX_SEARCH_OPS fSearchOp,
  5016. LPVOID lpSearchFilter,
  5017. DWORD dwAdditionalFlags,
  5018. HANDLE hTransaction
  5019. );
  5020. HANDLE
  5021. FindFirstFileTransactedW(
  5022. LPCWSTR lpFileName,
  5023. FINDEX_INFO_LEVELS fInfoLevelId,
  5024. LPVOID lpFindFileData,
  5025. FINDEX_SEARCH_OPS fSearchOp,
  5026. LPVOID lpSearchFilter,
  5027. DWORD dwAdditionalFlags,
  5028. HANDLE hTransaction
  5029. );
  5030. version(UNICODE) {
  5031. alias FindFirstFileTransactedW FindFirstFileTransacted;
  5032. }
  5033. else {
  5034. alias FindFirstFileTransactedA FindFirstFileTransacted;
  5035. }
  5036. HANDLE
  5037. FindFirstFileA(
  5038. LPCSTR lpFileName,
  5039. LPWIN32_FIND_DATAA lpFindFileData
  5040. );
  5041. HANDLE
  5042. FindFirstFileW(
  5043. LPCWSTR lpFileName,
  5044. LPWIN32_FIND_DATAW lpFindFileData
  5045. );
  5046. version(UNICODE) {
  5047. alias FindFirstFileW FindFirstFile;
  5048. }
  5049. else {
  5050. alias FindFirstFileA FindFirstFile;
  5051. }
  5052. BOOL
  5053. FindNextFileA(
  5054. HANDLE hFindFile,
  5055. LPWIN32_FIND_DATAA lpFindFileData
  5056. );
  5057. BOOL
  5058. FindNextFileW(
  5059. HANDLE hFindFile,
  5060. LPWIN32_FIND_DATAW lpFindFileData
  5061. );
  5062. version(UNICODE) {
  5063. alias FindNextFileW FindNextFile;
  5064. }
  5065. else {
  5066. alias FindNextFileA FindNextFile;
  5067. }
  5068. DWORD
  5069. SearchPathA(
  5070. LPCSTR lpPath,
  5071. LPCSTR lpFileName,
  5072. LPCSTR lpExtension,
  5073. DWORD nBufferLength,
  5074. LPSTR lpBuffer,
  5075. LPSTR *lpFilePart
  5076. );
  5077. DWORD
  5078. SearchPathW(
  5079. LPCWSTR lpPath,
  5080. LPCWSTR lpFileName,
  5081. LPCWSTR lpExtension,
  5082. DWORD nBufferLength,
  5083. LPWSTR lpBuffer,
  5084. LPWSTR *lpFilePart
  5085. );
  5086. version(UNICODE) {
  5087. alias SearchPathW SearchPath;
  5088. }
  5089. else {
  5090. alias SearchPathA SearchPath;
  5091. }
  5092. BOOL
  5093. CopyFileA(
  5094. LPCSTR lpExistingFileName,
  5095. LPCSTR lpNewFileName,
  5096. BOOL bFailIfExists
  5097. );
  5098. BOOL
  5099. CopyFileW(
  5100. LPCWSTR lpExistingFileName,
  5101. LPCWSTR lpNewFileName,
  5102. BOOL bFailIfExists
  5103. );
  5104. version(UNICODE) {
  5105. alias CopyFileW CopyFile;
  5106. }
  5107. else {
  5108. alias CopyFileA CopyFile;
  5109. }
  5110. alias DWORD function(
  5111. LARGE_INTEGER TotalFileSize,
  5112. LARGE_INTEGER TotalBytesTransferred,
  5113. LARGE_INTEGER StreamSize,
  5114. LARGE_INTEGER StreamBytesTransferred,
  5115. DWORD dwStreamNumber,
  5116. DWORD dwCallbackReason,
  5117. HANDLE hSourceFile,
  5118. HANDLE hDestinationFile,
  5119. LPVOID lpData
  5120. ) LPPROGRESS_ROUTINE;
  5121. BOOL
  5122. CopyFileExA(
  5123. LPCSTR lpExistingFileName,
  5124. LPCSTR lpNewFileName,
  5125. LPPROGRESS_ROUTINE lpProgressRoutine,
  5126. LPVOID lpData,
  5127. LPBOOL pbCancel,
  5128. DWORD dwCopyFlags
  5129. );
  5130. BOOL
  5131. CopyFileExW(
  5132. LPCWSTR lpExistingFileName,
  5133. LPCWSTR lpNewFileName,
  5134. LPPROGRESS_ROUTINE lpProgressRoutine,
  5135. LPVOID lpData,
  5136. LPBOOL pbCancel,
  5137. DWORD dwCopyFlags
  5138. );
  5139. version(UNICODE) {
  5140. alias CopyFileExW CopyFileEx;
  5141. }
  5142. else {
  5143. alias CopyFileExA CopyFileEx;
  5144. }
  5145. BOOL
  5146. CopyFileTransactedA(
  5147. LPCSTR lpExistingFileName,
  5148. LPCSTR lpNewFileName,
  5149. LPPROGRESS_ROUTINE lpProgressRoutine,
  5150. LPVOID lpData,
  5151. LPBOOL pbCancel,
  5152. DWORD dwCopyFlags,
  5153. HANDLE hTransaction
  5154. );
  5155. BOOL
  5156. CopyFileTransactedW(
  5157. LPCWSTR lpExistingFileName,
  5158. LPCWSTR lpNewFileName,
  5159. LPPROGRESS_ROUTINE lpProgressRoutine,
  5160. LPVOID lpData,
  5161. LPBOOL pbCancel,
  5162. DWORD dwCopyFlags,
  5163. HANDLE hTransaction
  5164. );
  5165. version(UNICODE) {
  5166. alias CopyFileTransactedW CopyFileTransacted;
  5167. }
  5168. else {
  5169. alias CopyFileTransactedA CopyFileTransacted;
  5170. }
  5171. BOOL
  5172. MoveFileA(
  5173. LPCSTR lpExistingFileName,
  5174. LPCSTR lpNewFileName
  5175. );
  5176. BOOL
  5177. MoveFileW(
  5178. LPCWSTR lpExistingFileName,
  5179. LPCWSTR lpNewFileName
  5180. );
  5181. version(UNICODE) {
  5182. alias MoveFileW MoveFile;
  5183. }
  5184. else {
  5185. alias MoveFileA MoveFile;
  5186. }
  5187. BOOL
  5188. MoveFileExA(
  5189. LPCSTR lpExistingFileName,
  5190. LPCSTR lpNewFileName,
  5191. DWORD dwFlags
  5192. );
  5193. BOOL
  5194. MoveFileExW(
  5195. LPCWSTR lpExistingFileName,
  5196. LPCWSTR lpNewFileName,
  5197. DWORD dwFlags
  5198. );
  5199. version(UNICODE) {
  5200. alias MoveFileExW MoveFileEx;
  5201. }
  5202. else {
  5203. alias MoveFileExA MoveFileEx;
  5204. }
  5205. BOOL MoveFileWithProgressA(
  5206. LPCSTR lpExistingFileName,
  5207. LPCSTR lpNewFileName,
  5208. LPPROGRESS_ROUTINE lpProgressRoutine,
  5209. LPVOID lpData,
  5210. DWORD dwFlags
  5211. );
  5212. BOOL MoveFileWithProgressW(
  5213. LPCWSTR lpExistingFileName,
  5214. LPCWSTR lpNewFileName,
  5215. LPPROGRESS_ROUTINE lpProgressRoutine,
  5216. LPVOID lpData,
  5217. DWORD dwFlags
  5218. );
  5219. version(UNICODE) {
  5220. alias MoveFileWithProgressW MoveFileWithProgress;
  5221. }
  5222. else {
  5223. alias MoveFileWithProgressA MoveFileWithProgress;
  5224. }
  5225. BOOL MoveFileTransactedA(
  5226. LPCSTR lpExistingFileName,
  5227. LPCSTR lpNewFileName,
  5228. LPPROGRESS_ROUTINE lpProgressRoutine,
  5229. LPVOID lpData,
  5230. DWORD dwFlags,
  5231. HANDLE hTransaction
  5232. );
  5233. BOOL MoveFileTransactedW(
  5234. LPCWSTR lpExistingFileName,
  5235. LPCWSTR lpNewFileName,
  5236. LPPROGRESS_ROUTINE lpProgressRoutine,
  5237. LPVOID lpData,
  5238. DWORD dwFlags,
  5239. HANDLE hTransaction
  5240. );
  5241. version(UNICODE) {
  5242. alias MoveFileTransactedW MoveFileTransacted;
  5243. }
  5244. else {
  5245. alias MoveFileTransactedA MoveFileTransacted;
  5246. }
  5247. const auto MOVEFILE_REPLACE_EXISTING = 0x00000001;
  5248. const auto MOVEFILE_COPY_ALLOWED = 0x00000002;
  5249. const auto MOVEFILE_DELAY_UNTIL_REBOOT = 0x00000004;
  5250. const auto MOVEFILE_WRITE_THROUGH = 0x00000008;
  5251. const auto MOVEFILE_CREATE_HARDLINK = 0x00000010;
  5252. const auto MOVEFILE_FAIL_IF_NOT_TRACKABLE = 0x00000020;
  5253. BOOL ReplaceFileA(
  5254. LPCSTR lpReplacedFileName,
  5255. LPCSTR lpReplacementFileName,
  5256. LPCSTR lpBackupFileName,
  5257. DWORD dwReplaceFlags,
  5258. LPVOID lpExclude,
  5259. LPVOID lpReserved
  5260. );
  5261. BOOL
  5262. ReplaceFileW(
  5263. LPCWSTR lpReplacedFileName,
  5264. LPCWSTR lpReplacementFileName,
  5265. LPCWSTR lpBackupFileName,
  5266. DWORD dwReplaceFlags,
  5267. LPVOID lpExclude,
  5268. LPVOID lpReserved
  5269. );
  5270. version(UNICODE) {
  5271. alias ReplaceFileW ReplaceFile;
  5272. }
  5273. else {
  5274. alias ReplaceFileA ReplaceFile;
  5275. }
  5276. //
  5277. // API call to create hard links.
  5278. //
  5279. BOOL
  5280. CreateHardLinkA(
  5281. LPCSTR lpFileName,
  5282. LPCSTR lpExistingFileName,
  5283. LPSECURITY_ATTRIBUTES lpSecurityAttributes
  5284. );
  5285. BOOL
  5286. CreateHardLinkW(
  5287. LPCWSTR lpFileName,
  5288. LPCWSTR lpExistingFileName,
  5289. LPSECURITY_ATTRIBUTES lpSecurityAttributes
  5290. );
  5291. version(UNICODE) {
  5292. alias CreateHardLinkW CreateHardLink;
  5293. }
  5294. else {
  5295. alias CreateHardLinkA CreateHardLink;
  5296. }
  5297. //
  5298. // API call to create hard links.
  5299. //
  5300. BOOL
  5301. CreateHardLinkTransactedA(
  5302. LPCSTR lpFileName,
  5303. LPCSTR lpExistingFileName,
  5304. LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  5305. HANDLE hTransaction
  5306. );
  5307. BOOL
  5308. CreateHardLinkTransactedW(
  5309. LPCWSTR lpFileName,
  5310. LPCWSTR lpExistingFileName,
  5311. LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  5312. HANDLE hTransaction
  5313. );
  5314. version(UNICODE) {
  5315. alias CreateHardLinkTransactedW CreateHardLinkTransacted;
  5316. }
  5317. else {
  5318. alias CreateHardLinkTransactedA CreateHardLinkTransacted;
  5319. }
  5320. //
  5321. // API call to enumerate for streams within a file
  5322. //
  5323. enum STREAM_INFO_LEVELS {
  5324. FindStreamInfoStandard,
  5325. FindStreamInfoMaxInfoLevel
  5326. }
  5327. struct WIN32_FIND_STREAM_DATA {
  5328. LARGE_INTEGER StreamSize;
  5329. WCHAR cStreamName[ MAX_PATH + 36 ];
  5330. }
  5331. alias WIN32_FIND_STREAM_DATA* PWIN32_FIND_STREAM_DATA;
  5332. HANDLE
  5333. FindFirstStreamW(
  5334. LPCWSTR lpFileName,
  5335. STREAM_INFO_LEVELS InfoLevel,
  5336. LPVOID lpFindStreamData,
  5337. DWORD dwFlags
  5338. );
  5339. BOOL
  5340. FindNextStreamW(
  5341. HANDLE hFindStream,
  5342. LPVOID lpFindStreamData
  5343. );
  5344. HANDLE
  5345. FindFirstFileNameW (
  5346. LPCWSTR lpFileName,
  5347. DWORD dwFlags,
  5348. LPDWORD StringLength,
  5349. PWCHAR LinkName
  5350. );
  5351. BOOL
  5352. FindNextFileNameW (
  5353. HANDLE hFindStream,
  5354. LPDWORD StringLength,PWCHAR LinkName
  5355. );
  5356. HANDLE
  5357. FindFirstFileNameTransactedW (
  5358. LPCWSTR lpFileName,
  5359. DWORD dwFlags,
  5360. LPDWORD StringLength,PWCHAR LinkName,
  5361. HANDLE hTransaction
  5362. );
  5363. HANDLE
  5364. CreateNamedPipeA(
  5365. LPCSTR lpName,
  5366. DWORD dwOpenMode,
  5367. DWORD dwPipeMode,
  5368. DWORD nMaxInstances,
  5369. DWORD nOutBufferSize,
  5370. DWORD nInBufferSize,
  5371. DWORD nDefaultTimeOut,
  5372. LPSECURITY_ATTRIBUTES lpSecurityAttributes
  5373. );
  5374. HANDLE
  5375. CreateNamedPipeW(
  5376. LPCWSTR lpName,
  5377. DWORD dwOpenMode,
  5378. DWORD dwPipeMode,
  5379. DWORD nMaxInstances,
  5380. DWORD nOutBufferSize,
  5381. DWORD nInBufferSize,
  5382. DWORD nDefaultTimeOut,
  5383. LPSECURITY_ATTRIBUTES lpSecurityAttributes
  5384. );
  5385. version(UNICODE) {
  5386. alias CreateNamedPipeW CreateNamedPipe;
  5387. }
  5388. else {
  5389. alias CreateNamedPipeA CreateNamedPipe;
  5390. }
  5391. BOOL
  5392. GetNamedPipeHandleStateA(
  5393. HANDLE hNamedPipe,
  5394. LPDWORD lpState,
  5395. LPDWORD lpCurInstances,
  5396. LPDWORD lpMaxCollectionCount,
  5397. LPDWORD lpCollectDataTimeout,
  5398. LPSTR lpUserName,
  5399. DWORD nMaxUserNameSize
  5400. );
  5401. BOOL
  5402. GetNamedPipeHandleStateW(
  5403. HANDLE hNamedPipe,
  5404. LPDWORD lpState,
  5405. LPDWORD lpCurInstances,
  5406. LPDWORD lpMaxCollectionCount,
  5407. LPDWORD lpCollectDataTimeout,
  5408. LPWSTR lpUserName,
  5409. DWORD nMaxUserNameSize
  5410. );
  5411. version(UNICODE) {
  5412. alias GetNamedPipeHandleStateW GetNamedPipeHandleState;
  5413. }
  5414. else {
  5415. alias GetNamedPipeHandleStateA GetNamedPipeHandleState;
  5416. }
  5417. BOOL
  5418. CallNamedPipeA(
  5419. LPCSTR lpNamedPipeName,
  5420. LPVOID lpInBuffer,
  5421. DWORD nInBufferSize,
  5422. LPVOID lpOutBuffer,
  5423. DWORD nOutBufferSize,
  5424. LPDWORD lpBytesRead,
  5425. DWORD nTimeOut
  5426. );
  5427. BOOL
  5428. CallNamedPipeW(
  5429. LPCWSTR lpNamedPipeName,
  5430. LPVOID lpInBuffer,
  5431. DWORD nInBufferSize,
  5432. LPVOID lpOutBuffer,
  5433. DWORD nOutBufferSize,
  5434. LPDWORD lpBytesRead,
  5435. DWORD nTimeOut
  5436. );
  5437. version(UNICODE) {
  5438. alias CallNamedPipeW CallNamedPipe;
  5439. }
  5440. else {
  5441. alias CallNamedPipeA CallNamedPipe;
  5442. }
  5443. BOOL
  5444. WaitNamedPipeA(
  5445. LPCSTR lpNamedPipeName,
  5446. DWORD nTimeOut
  5447. );
  5448. BOOL
  5449. WaitNamedPipeW(
  5450. LPCWSTR lpNamedPipeName,
  5451. DWORD nTimeOut
  5452. );
  5453. version(UNICODE) {
  5454. alias WaitNamedPipeW WaitNamedPipe;
  5455. }
  5456. else {
  5457. alias WaitNamedPipeA WaitNamedPipe;
  5458. }
  5459. enum PIPE_ATTRIBUTE_TYPE{
  5460. PipeAttribute,
  5461. PipeConnectionAttribute,
  5462. PipeHandleAttribute
  5463. }
  5464. BOOL
  5465. GetNamedPipeAttribute(
  5466. HANDLE Pipe,
  5467. PIPE_ATTRIBUTE_TYPE AttributeType,
  5468. PSTR AttributeName,
  5469. PVOID AttributeValue,
  5470. PSIZE_T AttributeValueLength
  5471. );
  5472. BOOL
  5473. SetNamedPipeAttribute(
  5474. HANDLE Pipe,
  5475. PIPE_ATTRIBUTE_TYPE AttributeType,
  5476. PSTR AttributeName,
  5477. PVOID AttributeValue,
  5478. SIZE_T AttributeValueLength
  5479. );
  5480. BOOL
  5481. GetNamedPipeClientComputerNameA(
  5482. HANDLE Pipe,
  5483. LPSTR ClientComputerName,
  5484. ULONG ClientComputerNameLength
  5485. );
  5486. BOOL
  5487. GetNamedPipeClientComputerNameW(
  5488. HANDLE Pipe,
  5489. LPWSTR ClientComputerName,
  5490. ULONG ClientComputerNameLength
  5491. );
  5492. version(UNICODE) {
  5493. alias GetNamedPipeClientComputerNameW GetNamedPipeClientComputerName;
  5494. }
  5495. else {
  5496. alias GetNamedPipeClientComputerNameA GetNamedPipeClientComputerName;
  5497. }
  5498. BOOL
  5499. GetNamedPipeClientProcessId(
  5500. HANDLE Pipe,
  5501. PULONG ClientProcessId
  5502. );
  5503. BOOL
  5504. GetNamedPipeClientSessionId(
  5505. HANDLE Pipe,
  5506. PULONG ClientSessionId
  5507. );
  5508. BOOL
  5509. GetNamedPipeServerProcessId(
  5510. HANDLE Pipe,
  5511. PULONG ServerProcessId
  5512. );
  5513. BOOL
  5514. GetNamedPipeServerSessionId(
  5515. HANDLE Pipe,
  5516. PULONG ServerSessionId
  5517. );
  5518. BOOL
  5519. SetVolumeLabelA(
  5520. LPCSTR lpRootPathName,
  5521. LPCSTR lpVolumeName
  5522. );
  5523. BOOL
  5524. SetVolumeLabelW(
  5525. LPCWSTR lpRootPathName,
  5526. LPCWSTR lpVolumeName
  5527. );
  5528. version(UNICODE) {
  5529. alias SetVolumeLabelW SetVolumeLabel;
  5530. }
  5531. else {
  5532. alias SetVolumeLabelA SetVolumeLabel;
  5533. }
  5534. VOID SetFileApisToOEM();
  5535. VOID SetFileApisToANSI();
  5536. BOOL AreFileApisANSI();
  5537. BOOL
  5538. GetVolumeInformationA(
  5539. LPCSTR lpRootPathName,
  5540. LPSTR lpVolumeNameBuffer,
  5541. DWORD nVolumeNameSize,
  5542. LPDWORD lpVolumeSerialNumber,
  5543. LPDWORD lpMaximumComponentLength,
  5544. LPDWORD lpFileSystemFlags,
  5545. LPSTR lpFileSystemNameBuffer,
  5546. DWORD nFileSystemNameSize
  5547. );
  5548. BOOL
  5549. GetVolumeInformationW(
  5550. LPCWSTR lpRootPathName,
  5551. LPWSTR lpVolumeNameBuffer,
  5552. DWORD nVolumeNameSize,
  5553. LPDWORD lpVolumeSerialNumber,
  5554. LPDWORD lpMaximumComponentLength,
  5555. LPDWORD lpFileSystemFlags,
  5556. LPWSTR lpFileSystemNameBuffer,
  5557. DWORD nFileSystemNameSize
  5558. );
  5559. version(UNICODE) {
  5560. alias GetVolumeInformationW GetVolumeInformation;
  5561. }
  5562. else {
  5563. alias GetVolumeInformationA GetVolumeInformation;
  5564. }
  5565. BOOL
  5566. GetVolumeInformationByHandleW(
  5567. HANDLE hFile,
  5568. LPWSTR lpVolumeNameBuffer,
  5569. DWORD nVolumeNameSize,
  5570. LPDWORD lpVolumeSerialNumber,
  5571. LPDWORD lpMaximumComponentLength,
  5572. LPDWORD lpFileSystemFlags,
  5573. LPWSTR lpFileSystemNameBuffer,
  5574. DWORD nFileSystemNameSize
  5575. );
  5576. BOOL
  5577. CancelSynchronousIo(
  5578. HANDLE hThread
  5579. );
  5580. BOOL
  5581. CancelIoEx(
  5582. HANDLE hFile,
  5583. LPOVERLAPPED lpOverlapped
  5584. );
  5585. BOOL
  5586. CancelIo(
  5587. HANDLE hFile
  5588. );
  5589. BOOL
  5590. SetFileBandwidthReservation(
  5591. HANDLE hFile,
  5592. DWORD nPeriodMilliseconds,
  5593. DWORD nBytesPerPeriod,
  5594. BOOL bDiscardable,
  5595. LPDWORD lpTransferSize,
  5596. LPDWORD lpNumOutstandingRequests
  5597. );
  5598. BOOL
  5599. GetFileBandwidthReservation(
  5600. HANDLE hFile,
  5601. LPDWORD lpPeriodMilliseconds,
  5602. LPDWORD lpBytesPerPeriod,
  5603. LPBOOL pDiscardable,
  5604. LPDWORD lpTransferSize,
  5605. LPDWORD lpNumOutstandingRequests
  5606. );
  5607. //
  5608. // Event logging APIs
  5609. //
  5610. BOOL
  5611. ClearEventLogA (
  5612. HANDLE hEventLog,
  5613. LPCSTR lpBackupFileName
  5614. );
  5615. BOOL
  5616. ClearEventLogW (
  5617. HANDLE hEventLog,
  5618. LPCWSTR lpBackupFileName
  5619. );
  5620. version(UNICODE) {
  5621. alias ClearEventLogW ClearEventLog;
  5622. }
  5623. else {
  5624. alias ClearEventLogA ClearEventLog;
  5625. }
  5626. BOOL
  5627. BackupEventLogA (
  5628. HANDLE hEventLog,
  5629. LPCSTR lpBackupFileName
  5630. );
  5631. BOOL
  5632. BackupEventLogW (
  5633. HANDLE hEventLog,
  5634. LPCWSTR lpBackupFileName
  5635. );
  5636. version(UNICODE) {
  5637. alias BackupEventLogW BackupEventLog;
  5638. }
  5639. else {
  5640. alias BackupEventLogA BackupEventLog;
  5641. }
  5642. BOOL
  5643. CloseEventLog (
  5644. HANDLE hEventLog
  5645. );
  5646. BOOL
  5647. DeregisterEventSource (
  5648. HANDLE hEventLog
  5649. );
  5650. BOOL
  5651. NotifyChangeEventLog(
  5652. HANDLE hEventLog,
  5653. HANDLE hEvent
  5654. );
  5655. BOOL
  5656. GetNumberOfEventLogRecords (
  5657. HANDLE hEventLog,
  5658. PDWORD NumberOfRecords
  5659. );
  5660. BOOL
  5661. GetOldestEventLogRecord (
  5662. HANDLE hEventLog,
  5663. PDWORD OldestRecord
  5664. );
  5665. HANDLE
  5666. OpenEventLogA (
  5667. LPCSTR lpUNCServerName,
  5668. LPCSTR lpSourceName
  5669. );
  5670. HANDLE
  5671. OpenEventLogW (
  5672. LPCWSTR lpUNCServerName,
  5673. LPCWSTR lpSourceName
  5674. );
  5675. version(UNICODE) {
  5676. alias OpenEventLogW OpenEventLog;
  5677. }
  5678. else {
  5679. alias OpenEventLogA OpenEventLog;
  5680. }
  5681. HANDLE
  5682. RegisterEventSourceA (
  5683. LPCSTR lpUNCServerName,
  5684. LPCSTR lpSourceName
  5685. );
  5686. HANDLE
  5687. RegisterEventSourceW (
  5688. LPCWSTR lpUNCServerName,
  5689. LPCWSTR lpSourceName
  5690. );
  5691. version(UNICODE) {
  5692. alias RegisterEventSourceW RegisterEventSource;
  5693. }
  5694. else {
  5695. alias RegisterEventSourceA RegisterEventSource;
  5696. }
  5697. HANDLE
  5698. OpenBackupEventLogA (
  5699. LPCSTR lpUNCServerName,
  5700. LPCSTR lpFileName
  5701. );
  5702. HANDLE
  5703. OpenBackupEventLogW (
  5704. LPCWSTR lpUNCServerName,
  5705. LPCWSTR lpFileName
  5706. );
  5707. version(UNICODE) {
  5708. alias OpenBackupEventLogW OpenBackupEventLog;
  5709. }
  5710. else {
  5711. alias OpenBackupEventLogA OpenBackupEventLog;
  5712. }
  5713. BOOL
  5714. ReadEventLogA (
  5715. HANDLE hEventLog,
  5716. DWORD dwReadFlags,
  5717. DWORD dwRecordOffset,
  5718. LPVOID lpBuffer,
  5719. DWORD nNumberOfBytesToRead,
  5720. DWORD *pnBytesRead,
  5721. DWORD *pnMinNumberOfBytesNeeded
  5722. );
  5723. BOOL
  5724. ReadEventLogW (
  5725. HANDLE hEventLog,
  5726. DWORD dwReadFlags,
  5727. DWORD dwRecordOffset,
  5728. LPVOID lpBuffer,
  5729. DWORD nNumberOfBytesToRead,
  5730. DWORD *pnBytesRead,
  5731. DWORD *pnMinNumberOfBytesNeeded
  5732. );
  5733. version(UNICODE) {
  5734. alias ReadEventLogW ReadEventLog;
  5735. }
  5736. else {
  5737. alias ReadEventLogA ReadEventLog;
  5738. }
  5739. BOOL
  5740. ReportEventA (
  5741. HANDLE hEventLog,
  5742. WORD wType,
  5743. WORD wCategory,
  5744. DWORD dwEventID,
  5745. PSID lpUserSid,
  5746. WORD wNumStrings,
  5747. DWORD dwDataSize,
  5748. LPCSTR *lpStrings,
  5749. LPVOID lpRawData
  5750. );
  5751. BOOL
  5752. ReportEventW (
  5753. HANDLE hEventLog,
  5754. WORD wType,
  5755. WORD wCategory,
  5756. DWORD dwEventID,
  5757. PSID lpUserSid,
  5758. WORD wNumStrings,
  5759. DWORD dwDataSize,
  5760. LPCWSTR *lpStrings,
  5761. LPVOID lpRawData
  5762. );
  5763. version(UNICODE) {
  5764. alias ReportEventW ReportEvent;
  5765. }
  5766. else {
  5767. alias ReportEventA ReportEvent;
  5768. }
  5769. const auto EVENTLOG_FULL_INFO = 0;
  5770. struct EVENTLOG_FULL_INFORMATION {
  5771. DWORD dwFull;
  5772. }
  5773. alias EVENTLOG_FULL_INFORMATION* LPEVENTLOG_FULL_INFORMATION;
  5774. BOOL
  5775. GetEventLogInformation (
  5776. HANDLE hEventLog,
  5777. DWORD dwInfoLevel,
  5778. LPVOID lpBuffer,
  5779. DWORD cbBufSize,
  5780. LPDWORD pcbBytesNeeded
  5781. );
  5782. //
  5783. //
  5784. // Security APIs
  5785. //
  5786. BOOL
  5787. DuplicateToken(
  5788. HANDLE ExistingTokenHandle,
  5789. SECURITY_IMPERSONATION_LEVEL ImpersonationLevel,
  5790. PHANDLE DuplicateTokenHandle
  5791. );
  5792. BOOL
  5793. GetKernelObjectSecurity (
  5794. HANDLE Handle,
  5795. SECURITY_INFORMATION RequestedInformation,
  5796. PSECURITY_DESCRIPTOR pSecurityDescriptor,
  5797. DWORD nLength,
  5798. LPDWORD lpnLengthNeeded
  5799. );
  5800. BOOL
  5801. ImpersonateNamedPipeClient(
  5802. HANDLE hNamedPipe
  5803. );
  5804. BOOL
  5805. ImpersonateSelf(
  5806. SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
  5807. );
  5808. BOOL
  5809. RevertToSelf ();
  5810. BOOL
  5811. SetThreadToken (
  5812. PHANDLE Thread,
  5813. HANDLE Token
  5814. );
  5815. BOOL
  5816. AccessCheck (
  5817. PSECURITY_DESCRIPTOR pSecurityDescriptor,
  5818. HANDLE ClientToken,
  5819. DWORD DesiredAccess,
  5820. PGENERIC_MAPPING GenericMapping,
  5821. PPRIVILEGE_SET PrivilegeSet,
  5822. LPDWORD PrivilegeSetLength,
  5823. LPDWORD GrantedAccess,
  5824. LPBOOL AccessStatus
  5825. );
  5826. BOOL
  5827. AccessCheckByType (
  5828. PSECURITY_DESCRIPTOR pSecurityDescriptor,
  5829. PSID PrincipalSelfSid,
  5830. HANDLE ClientToken,
  5831. DWORD DesiredAccess,
  5832. POBJECT_TYPE_LIST ObjectTypeList,
  5833. DWORD ObjectTypeListLength,
  5834. PGENERIC_MAPPING GenericMapping,
  5835. PPRIVILEGE_SET PrivilegeSet,
  5836. LPDWORD PrivilegeSetLength,
  5837. LPDWORD GrantedAccess,
  5838. LPBOOL AccessStatus
  5839. );
  5840. BOOL
  5841. AccessCheckByTypeResultList (
  5842. PSECURITY_DESCRIPTOR pSecurityDescriptor,
  5843. PSID PrincipalSelfSid,
  5844. HANDLE ClientToken,
  5845. DWORD DesiredAccess,
  5846. POBJECT_TYPE_LIST ObjectTypeList,
  5847. DWORD ObjectTypeListLength,
  5848. PGENERIC_MAPPING GenericMapping,
  5849. PPRIVILEGE_SET PrivilegeSet,
  5850. LPDWORD PrivilegeSetLength,
  5851. LPDWORD GrantedAccessList,
  5852. LPDWORD AccessStatusList
  5853. );
  5854. BOOL
  5855. OpenProcessToken (
  5856. HANDLE ProcessHandle,
  5857. DWORD DesiredAccess,
  5858. PHANDLE TokenHandle
  5859. );
  5860. BOOL
  5861. OpenThreadToken (
  5862. HANDLE ThreadHandle,
  5863. DWORD DesiredAccess,
  5864. BOOL OpenAsSelf,
  5865. PHANDLE TokenHandle
  5866. );
  5867. BOOL
  5868. GetTokenInformation (
  5869. HANDLE TokenHandle,
  5870. TOKEN_INFORMATION_CLASS TokenInformationClass,
  5871. LPVOID TokenInformation,
  5872. DWORD TokenInformationLength,
  5873. PDWORD ReturnLength
  5874. );
  5875. BOOL
  5876. SetTokenInformation (
  5877. HANDLE TokenHandle,
  5878. TOKEN_INFORMATION_CLASS TokenInformationClass,
  5879. LPVOID TokenInformation,
  5880. DWORD TokenInformationLength
  5881. );
  5882. BOOL
  5883. AdjustTokenPrivileges (
  5884. HANDLE TokenHandle,
  5885. BOOL DisableAllPrivileges,
  5886. PTOKEN_PRIVILEGES NewState,
  5887. DWORD BufferLength,
  5888. PTOKEN_PRIVILEGES PreviousState,
  5889. PDWORD ReturnLength
  5890. );
  5891. BOOL
  5892. AdjustTokenGroups (
  5893. HANDLE TokenHandle,
  5894. BOOL ResetToDefault,
  5895. PTOKEN_GROUPS NewState,
  5896. DWORD BufferLength,
  5897. PTOKEN_GROUPS PreviousState,
  5898. PDWORD ReturnLength
  5899. );
  5900. BOOL
  5901. PrivilegeCheck (
  5902. HANDLE ClientToken,
  5903. PPRIVILEGE_SET RequiredPrivileges,
  5904. LPBOOL pfResult
  5905. );
  5906. BOOL
  5907. AccessCheckAndAuditAlarmA (
  5908. LPCSTR SubsystemName,
  5909. LPVOID HandleId,
  5910. LPSTR ObjectTypeName,
  5911. LPSTR ObjectName,
  5912. PSECURITY_DESCRIPTOR SecurityDescriptor,
  5913. DWORD DesiredAccess,
  5914. PGENERIC_MAPPING GenericMapping,
  5915. BOOL ObjectCreation,
  5916. LPDWORD GrantedAccess,
  5917. LPBOOL AccessStatus,
  5918. LPBOOL pfGenerateOnClose
  5919. );
  5920. BOOL
  5921. AccessCheckAndAuditAlarmW (
  5922. LPCWSTR SubsystemName,
  5923. LPVOID HandleId,
  5924. LPWSTR ObjectTypeName,
  5925. LPWSTR ObjectName,
  5926. PSECURITY_DESCRIPTOR SecurityDescriptor,
  5927. DWORD DesiredAccess,
  5928. PGENERIC_MAPPING GenericMapping,
  5929. BOOL ObjectCreation,
  5930. LPDWORD GrantedAccess,
  5931. LPBOOL AccessStatus,
  5932. LPBOOL pfGenerateOnClose
  5933. );
  5934. version(UNICODE) {
  5935. alias AccessCheckAndAuditAlarmW AccessCheckAndAuditAlarm;
  5936. }
  5937. else {
  5938. alias AccessCheckAndAuditAlarmA AccessCheckAndAuditAlarm;
  5939. }
  5940. BOOL
  5941. AccessCheckByTypeAndAuditAlarmA (
  5942. LPCSTR SubsystemName,
  5943. LPVOID HandleId,
  5944. LPCSTR ObjectTypeName,
  5945. LPCSTR ObjectName,
  5946. PSECURITY_DESCRIPTOR SecurityDescriptor,
  5947. PSID PrincipalSelfSid,
  5948. DWORD DesiredAccess,
  5949. AUDIT_EVENT_TYPE AuditType,
  5950. DWORD Flags,
  5951. POBJECT_TYPE_LIST ObjectTypeList,
  5952. DWORD ObjectTypeListLength,
  5953. PGENERIC_MAPPING GenericMapping,
  5954. BOOL ObjectCreation,
  5955. LPDWORD GrantedAccess,
  5956. LPBOOL AccessStatus,
  5957. LPBOOL pfGenerateOnClose
  5958. );
  5959. BOOL
  5960. AccessCheckByTypeAndAuditAlarmW (
  5961. LPCWSTR SubsystemName,
  5962. LPVOID HandleId,
  5963. LPCWSTR ObjectTypeName,
  5964. LPCWSTR ObjectName,
  5965. PSECURITY_DESCRIPTOR SecurityDescriptor,
  5966. PSID PrincipalSelfSid,
  5967. DWORD DesiredAccess,
  5968. AUDIT_EVENT_TYPE AuditType,
  5969. DWORD Flags,
  5970. POBJECT_TYPE_LIST ObjectTypeList,
  5971. DWORD ObjectTypeListLength,
  5972. PGENERIC_MAPPING GenericMapping,
  5973. BOOL ObjectCreation,
  5974. LPDWORD GrantedAccess,
  5975. LPBOOL AccessStatus,
  5976. LPBOOL pfGenerateOnClose
  5977. );
  5978. version(UNICODE) {
  5979. alias AccessCheckByTypeAndAuditAlarmW AccessCheckByTypeAndAuditAlarm;
  5980. }
  5981. else {
  5982. alias AccessCheckByTypeAndAuditAlarmA AccessCheckByTypeAndAuditAlarm;
  5983. }
  5984. BOOL
  5985. AccessCheckByTypeResultListAndAuditAlarmA (
  5986. LPCSTR SubsystemName,
  5987. LPVOID HandleId,
  5988. LPCSTR ObjectTypeName,
  5989. LPCSTR ObjectName,
  5990. PSECURITY_DESCRIPTOR SecurityDescriptor,
  5991. PSID PrincipalSelfSid,
  5992. DWORD DesiredAccess,
  5993. AUDIT_EVENT_TYPE AuditType,
  5994. DWORD Flags,
  5995. POBJECT_TYPE_LIST ObjectTypeList,
  5996. DWORD ObjectTypeListLength,
  5997. PGENERIC_MAPPING GenericMapping,
  5998. BOOL ObjectCreation,
  5999. LPDWORD GrantedAccess,
  6000. LPDWORD AccessStatusList,
  6001. LPBOOL pfGenerateOnClose
  6002. );
  6003. BOOL
  6004. AccessCheckByTypeResultListAndAuditAlarmW (
  6005. LPCWSTR SubsystemName,
  6006. LPVOID HandleId,
  6007. LPCWSTR ObjectTypeName,
  6008. LPCWSTR ObjectName,
  6009. PSECURITY_DESCRIPTOR SecurityDescriptor,
  6010. PSID PrincipalSelfSid,
  6011. DWORD DesiredAccess,
  6012. AUDIT_EVENT_TYPE AuditType,
  6013. DWORD Flags,
  6014. POBJECT_TYPE_LIST ObjectTypeList,
  6015. DWORD ObjectTypeListLength,
  6016. PGENERIC_MAPPING GenericMapping,
  6017. BOOL ObjectCreation,
  6018. LPDWORD GrantedAccess,
  6019. LPDWORD AccessStatusList,
  6020. LPBOOL pfGenerateOnClose
  6021. );
  6022. version(UNICODE) {
  6023. alias AccessCheckByTypeResultListAndAuditAlarmW AccessCheckByTypeResultListAndAuditAlarm;
  6024. }
  6025. else {
  6026. alias AccessCheckByTypeResultListAndAuditAlarmA AccessCheckByTypeResultListAndAuditAlarm;
  6027. }
  6028. BOOL
  6029. AccessCheckByTypeResultListAndAuditAlarmByHandleA (
  6030. LPCSTR SubsystemName,
  6031. LPVOID HandleId,
  6032. HANDLE ClientToken,
  6033. LPCSTR ObjectTypeName,
  6034. LPCSTR ObjectName,
  6035. PSECURITY_DESCRIPTOR SecurityDescriptor,
  6036. PSID PrincipalSelfSid,
  6037. DWORD DesiredAccess,
  6038. AUDIT_EVENT_TYPE AuditType,
  6039. DWORD Flags,
  6040. POBJECT_TYPE_LIST ObjectTypeList,
  6041. DWORD ObjectTypeListLength,
  6042. PGENERIC_MAPPING GenericMapping,
  6043. BOOL ObjectCreation,
  6044. LPDWORD GrantedAccess,
  6045. LPDWORD AccessStatusList,
  6046. LPBOOL pfGenerateOnClose
  6047. );
  6048. BOOL
  6049. AccessCheckByTypeResultListAndAuditAlarmByHandleW (
  6050. LPCWSTR SubsystemName,
  6051. LPVOID HandleId,
  6052. HANDLE ClientToken,
  6053. LPCWSTR ObjectTypeName,
  6054. LPCWSTR ObjectName,
  6055. PSECURITY_DESCRIPTOR SecurityDescriptor,
  6056. PSID PrincipalSelfSid,
  6057. DWORD DesiredAccess,
  6058. AUDIT_EVENT_TYPE AuditType,
  6059. DWORD Flags,
  6060. POBJECT_TYPE_LIST ObjectTypeList,
  6061. DWORD ObjectTypeListLength,
  6062. PGENERIC_MAPPING GenericMapping,
  6063. BOOL ObjectCreation,
  6064. LPDWORD GrantedAccess,
  6065. LPDWORD AccessStatusList,
  6066. LPBOOL pfGenerateOnClose
  6067. );
  6068. version(UNICODE) {
  6069. alias AccessCheckByTypeResultListAndAuditAlarmByHandleW AccessCheckByTypeResultListAndAuditAlarmByHandle;
  6070. }
  6071. else {
  6072. alias AccessCheckByTypeResultListAndAuditAlarmByHandleA AccessCheckByTypeResultListAndAuditAlarmByHandle;
  6073. }
  6074. BOOL
  6075. ObjectOpenAuditAlarmA (
  6076. LPCSTR SubsystemName,
  6077. LPVOID HandleId,
  6078. LPSTR ObjectTypeName,
  6079. LPSTR ObjectName,
  6080. PSECURITY_DESCRIPTOR pSecurityDescriptor,
  6081. HANDLE ClientToken,
  6082. DWORD DesiredAccess,
  6083. DWORD GrantedAccess,
  6084. PPRIVILEGE_SET Privileges,
  6085. BOOL ObjectCreation,
  6086. BOOL AccessGranted,
  6087. LPBOOL GenerateOnClose
  6088. );
  6089. BOOL
  6090. ObjectOpenAuditAlarmW (
  6091. LPCWSTR SubsystemName,
  6092. LPVOID HandleId,
  6093. LPWSTR ObjectTypeName,
  6094. LPWSTR ObjectName,
  6095. PSECURITY_DESCRIPTOR pSecurityDescriptor,
  6096. HANDLE ClientToken,
  6097. DWORD DesiredAccess,
  6098. DWORD GrantedAccess,
  6099. PPRIVILEGE_SET Privileges,
  6100. BOOL ObjectCreation,
  6101. BOOL AccessGranted,
  6102. LPBOOL GenerateOnClose
  6103. );
  6104. version(UNICODE) {
  6105. alias ObjectOpenAuditAlarmW ObjectOpenAuditAlarm;
  6106. }
  6107. else {
  6108. alias ObjectOpenAuditAlarmA ObjectOpenAuditAlarm;
  6109. }
  6110. BOOL
  6111. ObjectPrivilegeAuditAlarmA (
  6112. LPCSTR SubsystemName,
  6113. LPVOID HandleId,
  6114. HANDLE ClientToken,
  6115. DWORD DesiredAccess,
  6116. PPRIVILEGE_SET Privileges,
  6117. BOOL AccessGranted
  6118. );
  6119. BOOL
  6120. ObjectPrivilegeAuditAlarmW (
  6121. LPCWSTR SubsystemName,
  6122. LPVOID HandleId,
  6123. HANDLE ClientToken,
  6124. DWORD DesiredAccess,
  6125. PPRIVILEGE_SET Privileges,
  6126. BOOL AccessGranted
  6127. );
  6128. version(UNICODE) {
  6129. alias ObjectPrivilegeAuditAlarmW ObjectPrivilegeAuditAlarm;
  6130. }
  6131. else {
  6132. alias ObjectPrivilegeAuditAlarmA ObjectPrivilegeAuditAlarm;
  6133. }
  6134. BOOL
  6135. ObjectCloseAuditAlarmA (
  6136. LPCSTR SubsystemName,
  6137. LPVOID HandleId,
  6138. BOOL GenerateOnClose
  6139. );
  6140. BOOL
  6141. ObjectCloseAuditAlarmW (
  6142. LPCWSTR SubsystemName,
  6143. LPVOID HandleId,
  6144. BOOL GenerateOnClose
  6145. );
  6146. version(UNICODE) {
  6147. alias ObjectCloseAuditAlarmW ObjectCloseAuditAlarm;
  6148. }
  6149. else {
  6150. alias ObjectCloseAuditAlarmA ObjectCloseAuditAlarm;
  6151. }
  6152. BOOL
  6153. ObjectDeleteAuditAlarmA (
  6154. LPCSTR SubsystemName,
  6155. LPVOID HandleId,
  6156. BOOL GenerateOnClose
  6157. );
  6158. BOOL
  6159. ObjectDeleteAuditAlarmW (
  6160. LPCWSTR SubsystemName,
  6161. LPVOID HandleId,
  6162. BOOL GenerateOnClose
  6163. );
  6164. version(UNICODE) {
  6165. alias ObjectDeleteAuditAlarmW ObjectDeleteAuditAlarm;
  6166. }
  6167. else {
  6168. alias ObjectDeleteAuditAlarmA ObjectDeleteAuditAlarm;
  6169. }
  6170. BOOL
  6171. PrivilegedServiceAuditAlarmA (
  6172. LPCSTR SubsystemName,
  6173. LPCSTR ServiceName,
  6174. HANDLE ClientToken,
  6175. PPRIVILEGE_SET Privileges,
  6176. BOOL AccessGranted
  6177. );
  6178. BOOL
  6179. PrivilegedServiceAuditAlarmW (
  6180. LPCWSTR SubsystemName,
  6181. LPCWSTR ServiceName,
  6182. HANDLE ClientToken,
  6183. PPRIVILEGE_SET Privileges,
  6184. BOOL AccessGranted
  6185. );
  6186. version(UNICODE) {
  6187. alias PrivilegedServiceAuditAlarmW PrivilegedServiceAuditAlarm;
  6188. }
  6189. else {
  6190. alias PrivilegedServiceAuditAlarmA PrivilegedServiceAuditAlarm;
  6191. }
  6192. BOOL
  6193. IsWellKnownSid (
  6194. PSID pSid,
  6195. WELL_KNOWN_SID_TYPE WellKnownSidType
  6196. );
  6197. BOOL
  6198. CreateWellKnownSid(
  6199. WELL_KNOWN_SID_TYPE WellKnownSidType,
  6200. PSID DomainSid,
  6201. PSID pSid,
  6202. DWORD *cbSid
  6203. );
  6204. BOOL
  6205. EqualDomainSid(
  6206. PSID pSid1,
  6207. PSID pSid2,
  6208. BOOL *pfEqual
  6209. );
  6210. BOOL
  6211. GetWindowsAccountDomainSid(
  6212. PSID pSid,
  6213. PSID pDomainSid,
  6214. DWORD* cbDomainSid
  6215. );
  6216. BOOL
  6217. IsValidSid (
  6218. PSID pSid
  6219. );
  6220. BOOL
  6221. EqualSid (
  6222. PSID pSid1,
  6223. PSID pSid2
  6224. );
  6225. BOOL
  6226. EqualPrefixSid (
  6227. PSID pSid1,
  6228. PSID pSid2
  6229. );
  6230. DWORD
  6231. GetSidLengthRequired (
  6232. UCHAR nSubAuthorityCount
  6233. );
  6234. BOOL
  6235. AllocateAndInitializeSid (
  6236. PSID_IDENTIFIER_AUTHORITY pIdentifierAuthority,
  6237. BYTE nSubAuthorityCount,
  6238. DWORD nSubAuthority0,
  6239. DWORD nSubAuthority1,
  6240. DWORD nSubAuthority2,
  6241. DWORD nSubAuthority3,
  6242. DWORD nSubAuthority4,
  6243. DWORD nSubAuthority5,
  6244. DWORD nSubAuthority6,
  6245. DWORD nSubAuthority7,
  6246. PSID *pSid
  6247. );
  6248. PVOID
  6249. FreeSid(
  6250. PSID pSid
  6251. );
  6252. BOOL
  6253. InitializeSid (
  6254. PSID Sid,
  6255. PSID_IDENTIFIER_AUTHORITY pIdentifierAuthority,
  6256. BYTE nSubAuthorityCount
  6257. );
  6258. PSID_IDENTIFIER_AUTHORITY
  6259. GetSidIdentifierAuthority (
  6260. PSID pSid
  6261. );
  6262. PDWORD
  6263. GetSidSubAuthority (
  6264. PSID pSid,
  6265. DWORD nSubAuthority
  6266. );
  6267. PUCHAR
  6268. GetSidSubAuthorityCount (
  6269. PSID pSid
  6270. );
  6271. DWORD
  6272. GetLengthSid (
  6273. PSID pSid
  6274. );
  6275. BOOL
  6276. CopySid (
  6277. DWORD nDestinationSidLength,
  6278. PSID pDestinationSid,
  6279. PSID pSourceSid
  6280. );
  6281. BOOL
  6282. AreAllAccessesGranted (
  6283. DWORD GrantedAccess,
  6284. DWORD DesiredAccess
  6285. );
  6286. BOOL
  6287. AreAnyAccessesGranted (
  6288. DWORD GrantedAccess,
  6289. DWORD DesiredAccess
  6290. );
  6291. VOID
  6292. MapGenericMask (
  6293. PDWORD AccessMask,
  6294. PGENERIC_MAPPING GenericMapping
  6295. );
  6296. BOOL
  6297. IsValidAcl (
  6298. PACL pAcl
  6299. );
  6300. BOOL
  6301. InitializeAcl (
  6302. PACL pAcl,
  6303. DWORD nAclLength,
  6304. DWORD dwAclRevision
  6305. );
  6306. BOOL
  6307. GetAclInformation (
  6308. PACL pAcl,
  6309. LPVOID pAclInformation,
  6310. DWORD nAclInformationLength,
  6311. ACL_INFORMATION_CLASS dwAclInformationClass
  6312. );
  6313. BOOL
  6314. SetAclInformation (
  6315. PACL pAcl,
  6316. LPVOID pAclInformation,
  6317. DWORD nAclInformationLength,
  6318. ACL_INFORMATION_CLASS dwAclInformationClass
  6319. );
  6320. BOOL
  6321. AddAce (
  6322. PACL pAcl,
  6323. DWORD dwAceRevision,
  6324. DWORD dwStartingAceIndex,
  6325. LPVOID pAceList,
  6326. DWORD nAceListLength
  6327. );
  6328. BOOL
  6329. DeleteAce (
  6330. PACL pAcl,
  6331. DWORD dwAceIndex
  6332. );
  6333. BOOL
  6334. GetAce (
  6335. PACL pAcl,
  6336. DWORD dwAceIndex,
  6337. LPVOID *pAce
  6338. );
  6339. BOOL
  6340. AddAccessAllowedAce (
  6341. PACL pAcl,
  6342. DWORD dwAceRevision,
  6343. DWORD AccessMask,
  6344. PSID pSid
  6345. );
  6346. BOOL
  6347. AddAccessAllowedAceEx (
  6348. PACL pAcl,
  6349. DWORD dwAceRevision,
  6350. DWORD AceFlags,
  6351. DWORD AccessMask,
  6352. PSID pSid
  6353. );
  6354. BOOL
  6355. AddMandatoryAce (
  6356. PACL pAcl,
  6357. DWORD dwAceRevision,
  6358. DWORD AceFlags,
  6359. DWORD MandatoryPolicy,
  6360. PSID pLabelSid
  6361. );
  6362. BOOL
  6363. AddAccessDeniedAce (
  6364. PACL pAcl,
  6365. DWORD dwAceRevision,
  6366. DWORD AccessMask,
  6367. PSID pSid
  6368. );
  6369. BOOL
  6370. AddAccessDeniedAceEx (
  6371. PACL pAcl,
  6372. DWORD dwAceRevision,
  6373. DWORD AceFlags,
  6374. DWORD AccessMask,
  6375. PSID pSid
  6376. );
  6377. BOOL
  6378. AddAuditAccessAce(
  6379. PACL pAcl,
  6380. DWORD dwAceRevision,
  6381. DWORD dwAccessMask,
  6382. PSID pSid,
  6383. BOOL bAuditSuccess,
  6384. BOOL bAuditFailure
  6385. );
  6386. BOOL
  6387. AddAuditAccessAceEx(
  6388. PACL pAcl,
  6389. DWORD dwAceRevision,
  6390. DWORD AceFlags,
  6391. DWORD dwAccessMask,
  6392. PSID pSid,
  6393. BOOL bAuditSuccess,
  6394. BOOL bAuditFailure
  6395. );
  6396. BOOL
  6397. AddAccessAllowedObjectAce (
  6398. PACL pAcl,
  6399. DWORD dwAceRevision,
  6400. DWORD AceFlags,
  6401. DWORD AccessMask,
  6402. GUID *ObjectTypeGuid,
  6403. GUID *InheritedObjectTypeGuid,
  6404. PSID pSid
  6405. );
  6406. BOOL
  6407. AddAccessDeniedObjectAce (
  6408. PACL pAcl,
  6409. DWORD dwAceRevision,
  6410. DWORD AceFlags,
  6411. DWORD AccessMask,
  6412. GUID *ObjectTypeGuid,
  6413. GUID *InheritedObjectTypeGuid,
  6414. PSID pSid
  6415. );
  6416. BOOL
  6417. AddAuditAccessObjectAce (
  6418. PACL pAcl,
  6419. DWORD dwAceRevision,
  6420. DWORD AceFlags,
  6421. DWORD AccessMask,
  6422. GUID *ObjectTypeGuid,
  6423. GUID *InheritedObjectTypeGuid,
  6424. PSID pSid,
  6425. BOOL bAuditSuccess,
  6426. BOOL bAuditFailure
  6427. );
  6428. BOOL
  6429. FindFirstFreeAce (
  6430. PACL pAcl,
  6431. LPVOID *pAce
  6432. );
  6433. BOOL
  6434. InitializeSecurityDescriptor (
  6435. PSECURITY_DESCRIPTOR pSecurityDescriptor,
  6436. DWORD dwRevision
  6437. );
  6438. BOOL
  6439. IsValidSecurityDescriptor (
  6440. PSECURITY_DESCRIPTOR pSecurityDescriptor
  6441. );
  6442. BOOL
  6443. IsValidRelativeSecurityDescriptor (
  6444. PSECURITY_DESCRIPTOR pSecurityDescriptor,
  6445. ULONG SecurityDescriptorLength,
  6446. SECURITY_INFORMATION RequiredInformation
  6447. );
  6448. DWORD
  6449. GetSecurityDescriptorLength (
  6450. PSECURITY_DESCRIPTOR pSecurityDescriptor
  6451. );
  6452. BOOL
  6453. GetSecurityDescriptorControl (
  6454. PSECURITY_DESCRIPTOR pSecurityDescriptor,
  6455. PSECURITY_DESCRIPTOR_CONTROL pControl,
  6456. LPDWORD lpdwRevision
  6457. );
  6458. BOOL
  6459. SetSecurityDescriptorControl (
  6460. PSECURITY_DESCRIPTOR pSecurityDescriptor,
  6461. SECURITY_DESCRIPTOR_CONTROL ControlBitsOfInterest,
  6462. SECURITY_DESCRIPTOR_CONTROL ControlBitsToSet
  6463. );
  6464. BOOL
  6465. SetSecurityDescriptorDacl (
  6466. PSECURITY_DESCRIPTOR pSecurityDescriptor,
  6467. BOOL bDaclPresent,
  6468. PACL pDacl,
  6469. BOOL bDaclDefaulted
  6470. );
  6471. BOOL
  6472. GetSecurityDescriptorDacl (
  6473. PSECURITY_DESCRIPTOR pSecurityDescriptor,
  6474. LPBOOL lpbDaclPresent,
  6475. PACL *pDacl,
  6476. LPBOOL lpbDaclDefaulted
  6477. );
  6478. BOOL
  6479. SetSecurityDescriptorSacl (
  6480. PSECURITY_DESCRIPTOR pSecurityDescriptor,
  6481. BOOL bSaclPresent,
  6482. PACL pSacl,
  6483. BOOL bSaclDefaulted
  6484. );
  6485. BOOL
  6486. GetSecurityDescriptorSacl (
  6487. PSECURITY_DESCRIPTOR pSecurityDescriptor,
  6488. LPBOOL lpbSaclPresent,
  6489. PACL *pSacl,
  6490. LPBOOL lpbSaclDefaulted
  6491. );
  6492. BOOL
  6493. SetSecurityDescriptorOwner (
  6494. PSECURITY_DESCRIPTOR pSecurityDescriptor,
  6495. PSID pOwner,
  6496. BOOL bOwnerDefaulted
  6497. );
  6498. BOOL
  6499. GetSecurityDescriptorOwner (
  6500. PSECURITY_DESCRIPTOR pSecurityDescriptor,
  6501. PSID *pOwner,
  6502. LPBOOL lpbOwnerDefaulted
  6503. );
  6504. BOOL
  6505. SetSecurityDescriptorGroup (
  6506. PSECURITY_DESCRIPTOR pSecurityDescriptor,
  6507. PSID pGroup,
  6508. BOOL bGroupDefaulted
  6509. );
  6510. BOOL
  6511. GetSecurityDescriptorGroup (
  6512. PSECURITY_DESCRIPTOR pSecurityDescriptor,
  6513. PSID *pGroup,
  6514. LPBOOL lpbGroupDefaulted
  6515. );
  6516. DWORD
  6517. SetSecurityDescriptorRMControl(
  6518. PSECURITY_DESCRIPTOR SecurityDescriptor,
  6519. PUCHAR RMControl
  6520. );
  6521. DWORD
  6522. GetSecurityDescriptorRMControl(
  6523. PSECURITY_DESCRIPTOR SecurityDescriptor,
  6524. PUCHAR RMControl
  6525. );
  6526. BOOL
  6527. CreatePrivateObjectSecurity (
  6528. PSECURITY_DESCRIPTOR ParentDescriptor,
  6529. PSECURITY_DESCRIPTOR CreatorDescriptor,
  6530. PSECURITY_DESCRIPTOR * NewDescriptor,
  6531. BOOL IsDirectoryObject,
  6532. HANDLE Token,
  6533. PGENERIC_MAPPING GenericMapping
  6534. );
  6535. BOOL
  6536. ConvertToAutoInheritPrivateObjectSecurity(
  6537. PSECURITY_DESCRIPTOR ParentDescriptor,
  6538. PSECURITY_DESCRIPTOR CurrentSecurityDescriptor,
  6539. PSECURITY_DESCRIPTOR *NewSecurityDescriptor,
  6540. GUID *ObjectType,
  6541. BOOLEAN IsDirectoryObject,
  6542. PGENERIC_MAPPING GenericMapping
  6543. );
  6544. BOOL
  6545. CreatePrivateObjectSecurityEx (
  6546. PSECURITY_DESCRIPTOR ParentDescriptor,
  6547. PSECURITY_DESCRIPTOR CreatorDescriptor,
  6548. PSECURITY_DESCRIPTOR * NewDescriptor,
  6549. GUID *ObjectType,
  6550. BOOL IsContainerObject,
  6551. ULONG AutoInheritFlags,
  6552. HANDLE Token,
  6553. PGENERIC_MAPPING GenericMapping
  6554. );
  6555. BOOL
  6556. CreatePrivateObjectSecurityWithMultipleInheritance (
  6557. PSECURITY_DESCRIPTOR ParentDescriptor,
  6558. PSECURITY_DESCRIPTOR CreatorDescriptor,
  6559. PSECURITY_DESCRIPTOR * NewDescriptor,
  6560. GUID **ObjectTypes,
  6561. ULONG GuidCount,
  6562. BOOL IsContainerObject,
  6563. ULONG AutoInheritFlags,
  6564. HANDLE Token,
  6565. PGENERIC_MAPPING GenericMapping
  6566. );
  6567. BOOL
  6568. SetPrivateObjectSecurity (
  6569. SECURITY_INFORMATION SecurityInformation,
  6570. PSECURITY_DESCRIPTOR ModificationDescriptor,
  6571. PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor,
  6572. PGENERIC_MAPPING GenericMapping,
  6573. HANDLE Token
  6574. );
  6575. BOOL
  6576. SetPrivateObjectSecurityEx (
  6577. SECURITY_INFORMATION SecurityInformation,
  6578. PSECURITY_DESCRIPTOR ModificationDescriptor,
  6579. PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor,
  6580. ULONG AutoInheritFlags,
  6581. PGENERIC_MAPPING GenericMapping,
  6582. HANDLE Token
  6583. );
  6584. BOOL
  6585. GetPrivateObjectSecurity (
  6586. PSECURITY_DESCRIPTOR ObjectDescriptor,
  6587. SECURITY_INFORMATION SecurityInformation,
  6588. PSECURITY_DESCRIPTOR ResultantDescriptor,
  6589. DWORD DescriptorLength,
  6590. PDWORD ReturnLength
  6591. );
  6592. BOOL
  6593. DestroyPrivateObjectSecurity (
  6594. PSECURITY_DESCRIPTOR * ObjectDescriptor
  6595. );
  6596. BOOL
  6597. MakeSelfRelativeSD (
  6598. PSECURITY_DESCRIPTOR pAbsoluteSecurityDescriptor,
  6599. PSECURITY_DESCRIPTOR pSelfRelativeSecurityDescriptor,
  6600. LPDWORD lpdwBufferLength
  6601. );
  6602. BOOL
  6603. MakeAbsoluteSD (
  6604. PSECURITY_DESCRIPTOR pSelfRelativeSecurityDescriptor,
  6605. PSECURITY_DESCRIPTOR pAbsoluteSecurityDescriptor,
  6606. LPDWORD lpdwAbsoluteSecurityDescriptorSize,
  6607. PACL pDacl,
  6608. LPDWORD lpdwDaclSize,
  6609. PACL pSacl,
  6610. LPDWORD lpdwSaclSize,
  6611. PSID pOwner,
  6612. LPDWORD lpdwOwnerSize,
  6613. PSID pPrimaryGroup,
  6614. LPDWORD lpdwPrimaryGroupSize
  6615. );
  6616. BOOL
  6617. MakeAbsoluteSD2 (
  6618. PSECURITY_DESCRIPTOR pSelfRelativeSecurityDescriptor,
  6619. LPDWORD lpdwBufferSize
  6620. );
  6621. VOID
  6622. QuerySecurityAccessMask(
  6623. SECURITY_INFORMATION SecurityInformation,
  6624. LPDWORD DesiredAccess
  6625. );
  6626. VOID
  6627. SetSecurityAccessMask(
  6628. SECURITY_INFORMATION SecurityInformation,
  6629. LPDWORD DesiredAccess
  6630. );
  6631. BOOL
  6632. SetFileSecurityA (
  6633. LPCSTR lpFileName,
  6634. SECURITY_INFORMATION SecurityInformation,
  6635. PSECURITY_DESCRIPTOR pSecurityDescriptor
  6636. );
  6637. BOOL
  6638. SetFileSecurityW (
  6639. LPCWSTR lpFileName,
  6640. SECURITY_INFORMATION SecurityInformation,
  6641. PSECURITY_DESCRIPTOR pSecurityDescriptor
  6642. );
  6643. version(UNICODE) {
  6644. alias SetFileSecurityW SetFileSecurity;
  6645. }
  6646. else {
  6647. alias SetFileSecurityA SetFileSecurity;
  6648. }
  6649. BOOL
  6650. GetFileSecurityA (
  6651. LPCSTR lpFileName,
  6652. SECURITY_INFORMATION RequestedInformation,
  6653. PSECURITY_DESCRIPTOR pSecurityDescriptor,
  6654. DWORD nLength,
  6655. LPDWORD lpnLengthNeeded
  6656. );
  6657. BOOL
  6658. GetFileSecurityW (
  6659. LPCWSTR lpFileName,
  6660. SECURITY_INFORMATION RequestedInformation,
  6661. PSECURITY_DESCRIPTOR pSecurityDescriptor,
  6662. DWORD nLength,
  6663. LPDWORD lpnLengthNeeded
  6664. );
  6665. version(UNICODE) {
  6666. alias GetFileSecurityW GetFileSecurity;
  6667. }
  6668. else {
  6669. alias GetFileSecurityA GetFileSecurity;
  6670. }
  6671. BOOL
  6672. SetKernelObjectSecurity (
  6673. HANDLE Handle,
  6674. SECURITY_INFORMATION SecurityInformation,
  6675. PSECURITY_DESCRIPTOR SecurityDescriptor
  6676. );
  6677. HANDLE
  6678. FindFirstChangeNotificationA(
  6679. LPCSTR lpPathName,
  6680. BOOL bWatchSubtree,
  6681. DWORD dwNotifyFilter
  6682. );
  6683. HANDLE
  6684. FindFirstChangeNotificationW(
  6685. LPCWSTR lpPathName,
  6686. BOOL bWatchSubtree,
  6687. DWORD dwNotifyFilter
  6688. );
  6689. version(UNICODE) {
  6690. alias FindFirstChangeNotificationW FindFirstChangeNotification;
  6691. }
  6692. else {
  6693. alias FindFirstChangeNotificationA FindFirstChangeNotification;
  6694. }
  6695. BOOL
  6696. FindNextChangeNotification(
  6697. HANDLE hChangeHandle
  6698. );
  6699. BOOL
  6700. FindCloseChangeNotification(
  6701. HANDLE hChangeHandle
  6702. );
  6703. BOOL
  6704. ReadDirectoryChangesW(
  6705. HANDLE hDirectory,
  6706. LPVOID lpBuffer,
  6707. DWORD nBufferLength,
  6708. BOOL bWatchSubtree,
  6709. DWORD dwNotifyFilter,
  6710. LPDWORD lpBytesReturned,
  6711. LPOVERLAPPED lpOverlapped,
  6712. LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
  6713. );
  6714. BOOL
  6715. VirtualLock(
  6716. LPVOID lpAddress,
  6717. SIZE_T dwSize
  6718. );
  6719. BOOL
  6720. VirtualUnlock(
  6721. LPVOID lpAddress,
  6722. SIZE_T dwSize
  6723. );
  6724. LPVOID
  6725. MapViewOfFileEx(
  6726. HANDLE hFileMappingObject,
  6727. DWORD dwDesiredAccess,
  6728. DWORD dwFileOffsetHigh,
  6729. DWORD dwFileOffsetLow,
  6730. SIZE_T dwNumberOfBytesToMap,
  6731. LPVOID lpBaseAddress
  6732. );
  6733. LPVOID
  6734. MapViewOfFileExNuma(
  6735. HANDLE hFileMappingObject,
  6736. DWORD dwDesiredAccess,
  6737. DWORD dwFileOffsetHigh,
  6738. DWORD dwFileOffsetLow,
  6739. SIZE_T dwNumberOfBytesToMap,
  6740. LPVOID lpBaseAddress,
  6741. DWORD nndPreferred
  6742. );
  6743. BOOL
  6744. SetPriorityClass(
  6745. HANDLE hProcess,
  6746. DWORD dwPriorityClass
  6747. );
  6748. DWORD
  6749. GetPriorityClass(
  6750. HANDLE hProcess
  6751. );
  6752. BOOL
  6753. IsBadReadPtr(
  6754. VOID *lp,
  6755. UINT_PTR ucb
  6756. );
  6757. BOOL
  6758. IsBadWritePtr(
  6759. LPVOID lp,
  6760. UINT_PTR ucb
  6761. );
  6762. BOOL
  6763. IsBadHugeReadPtr(
  6764. VOID *lp,
  6765. UINT_PTR ucb
  6766. );
  6767. BOOL
  6768. IsBadHugeWritePtr(
  6769. LPVOID lp,
  6770. UINT_PTR ucb
  6771. );
  6772. BOOL
  6773. IsBadCodePtr(
  6774. FARPROC lpfn
  6775. );
  6776. BOOL
  6777. IsBadStringPtrA(
  6778. LPCSTR lpsz,
  6779. UINT_PTR ucchMax
  6780. );
  6781. BOOL
  6782. IsBadStringPtrW(
  6783. LPCWSTR lpsz,
  6784. UINT_PTR ucchMax
  6785. );
  6786. version(UNICODE) {
  6787. alias IsBadStringPtrW IsBadStringPtr;
  6788. }
  6789. else {
  6790. alias IsBadStringPtrA IsBadStringPtr;
  6791. }
  6792. BOOL
  6793. LookupAccountSidA(
  6794. LPCSTR lpSystemName,
  6795. PSID Sid,
  6796. LPSTR Name,
  6797. LPDWORD cchName,
  6798. LPSTR ReferencedDomainName,
  6799. LPDWORD cchReferencedDomainName,
  6800. PSID_NAME_USE peUse
  6801. );
  6802. BOOL
  6803. LookupAccountSidW(
  6804. LPCWSTR lpSystemName,
  6805. PSID Sid,
  6806. LPWSTR Name,
  6807. LPDWORD cchName,
  6808. LPWSTR ReferencedDomainName,
  6809. LPDWORD cchReferencedDomainName,
  6810. PSID_NAME_USE peUse
  6811. );
  6812. version(UNICODE) {
  6813. alias LookupAccountSidW LookupAccountSid;
  6814. }
  6815. else {
  6816. alias LookupAccountSidA LookupAccountSid;
  6817. }
  6818. BOOL
  6819. LookupAccountNameA(
  6820. LPCSTR lpSystemName,
  6821. LPCSTR lpAccountName,
  6822. PSID Sid,
  6823. LPDWORD cbSid,
  6824. LPSTR ReferencedDomainName,
  6825. LPDWORD cchReferencedDomainName,
  6826. PSID_NAME_USE peUse
  6827. );
  6828. BOOL
  6829. LookupAccountNameW(
  6830. LPCWSTR lpSystemName,
  6831. LPCWSTR lpAccountName,
  6832. PSID Sid,
  6833. LPDWORD cbSid,
  6834. LPWSTR ReferencedDomainName,
  6835. LPDWORD cchReferencedDomainName,
  6836. PSID_NAME_USE peUse
  6837. );
  6838. version(UNICODE) {
  6839. alias LookupAccountNameW LookupAccountName;
  6840. }
  6841. else {
  6842. alias LookupAccountNameA LookupAccountName;
  6843. }
  6844. BOOL
  6845. LookupPrivilegeValueA(
  6846. LPCSTR lpSystemName,
  6847. LPCSTR lpName,
  6848. PLUID lpLuid
  6849. );
  6850. BOOL
  6851. LookupPrivilegeValueW(
  6852. LPCWSTR lpSystemName,
  6853. LPCWSTR lpName,
  6854. PLUID lpLuid
  6855. );
  6856. version(UNICODE) {
  6857. alias LookupPrivilegeValueW LookupPrivilegeValue;
  6858. }
  6859. else {
  6860. alias LookupPrivilegeValueA LookupPrivilegeValue;
  6861. }
  6862. BOOL
  6863. LookupPrivilegeNameA(
  6864. LPCSTR lpSystemName,
  6865. PLUID lpLuid,
  6866. LPSTR lpName,
  6867. LPDWORD cchName
  6868. );
  6869. BOOL
  6870. LookupPrivilegeNameW(
  6871. LPCWSTR lpSystemName,
  6872. PLUID lpLuid,
  6873. LPWSTR lpName,
  6874. LPDWORD cchName
  6875. );
  6876. version(UNICODE) {
  6877. alias LookupPrivilegeNameW LookupPrivilegeName;
  6878. }
  6879. else {
  6880. alias LookupPrivilegeNameA LookupPrivilegeName;
  6881. }
  6882. BOOL
  6883. LookupPrivilegeDisplayNameA(
  6884. LPCSTR lpSystemName,
  6885. LPCSTR lpName,
  6886. LPSTR lpDisplayName,
  6887. LPDWORD cchDisplayName,
  6888. LPDWORD lpLanguageId
  6889. );
  6890. BOOL
  6891. LookupPrivilegeDisplayNameW(
  6892. LPCWSTR lpSystemName,
  6893. LPCWSTR lpName,
  6894. LPWSTR lpDisplayName,
  6895. LPDWORD cchDisplayName,
  6896. LPDWORD lpLanguageId
  6897. );
  6898. version(UNICODE) {
  6899. alias LookupPrivilegeDisplayNameW LookupPrivilegeDisplayName;
  6900. }
  6901. else {
  6902. alias LookupPrivilegeDisplayNameA LookupPrivilegeDisplayName;
  6903. }
  6904. BOOL
  6905. AllocateLocallyUniqueId(
  6906. PLUID Luid
  6907. );
  6908. BOOL
  6909. BuildCommDCBA(
  6910. LPCSTR lpDef,
  6911. LPDCB lpDCB
  6912. );
  6913. BOOL
  6914. BuildCommDCBW(
  6915. LPCWSTR lpDef,
  6916. LPDCB lpDCB
  6917. );
  6918. version(UNICODE) {
  6919. alias BuildCommDCBW BuildCommDCB;
  6920. }
  6921. else {
  6922. alias BuildCommDCBA BuildCommDCB;
  6923. }
  6924. BOOL
  6925. BuildCommDCBAndTimeoutsA(
  6926. LPCSTR lpDef,
  6927. LPDCB lpDCB,
  6928. LPCOMMTIMEOUTS lpCommTimeouts
  6929. );
  6930. BOOL
  6931. BuildCommDCBAndTimeoutsW(
  6932. LPCWSTR lpDef,
  6933. LPDCB lpDCB,
  6934. LPCOMMTIMEOUTS lpCommTimeouts
  6935. );
  6936. version(UNICODE) {
  6937. alias BuildCommDCBAndTimeoutsW BuildCommDCBAndTimeouts;
  6938. }
  6939. else {
  6940. alias BuildCommDCBAndTimeoutsA BuildCommDCBAndTimeouts;
  6941. }
  6942. BOOL
  6943. CommConfigDialogA(
  6944. LPCSTR lpszName,
  6945. HWND hWnd,
  6946. LPCOMMCONFIG lpCC
  6947. );
  6948. BOOL
  6949. CommConfigDialogW(
  6950. LPCWSTR lpszName,
  6951. HWND hWnd,
  6952. LPCOMMCONFIG lpCC
  6953. );
  6954. version(UNICODE) {
  6955. alias CommConfigDialogW CommConfigDialog;
  6956. }
  6957. else {
  6958. alias CommConfigDialogA CommConfigDialog;
  6959. }
  6960. BOOL
  6961. GetDefaultCommConfigA(
  6962. LPCSTR lpszName,
  6963. LPCOMMCONFIG lpCC,
  6964. LPDWORD lpdwSize
  6965. );
  6966. BOOL
  6967. GetDefaultCommConfigW(
  6968. LPCWSTR lpszName,
  6969. LPCOMMCONFIG lpCC,
  6970. LPDWORD lpdwSize
  6971. );
  6972. version(UNICODE) {
  6973. alias GetDefaultCommConfigW GetDefaultCommConfig;
  6974. }
  6975. else {
  6976. alias GetDefaultCommConfigA GetDefaultCommConfig;
  6977. }
  6978. BOOL
  6979. SetDefaultCommConfigA(
  6980. LPCSTR lpszName,
  6981. LPCOMMCONFIG lpCC,
  6982. DWORD dwSize
  6983. );
  6984. BOOL
  6985. SetDefaultCommConfigW(
  6986. LPCWSTR lpszName,
  6987. LPCOMMCONFIG lpCC,
  6988. DWORD dwSize
  6989. );
  6990. version(UNICODE) {
  6991. alias SetDefaultCommConfigW SetDefaultCommConfig;
  6992. }
  6993. else {
  6994. alias SetDefaultCommConfigA SetDefaultCommConfig;
  6995. }
  6996. const auto MAX_COMPUTERNAME_LENGTH = 15;
  6997. BOOL
  6998. GetComputerNameA (
  6999. LPSTR lpBuffer,
  7000. LPDWORD nSize
  7001. );
  7002. BOOL
  7003. GetComputerNameW (
  7004. LPWSTR lpBuffer,
  7005. LPDWORD nSize
  7006. );
  7007. version(UNICODE) {
  7008. alias GetComputerNameW GetComputerName;
  7009. }
  7010. else {
  7011. alias GetComputerNameA GetComputerName;
  7012. }
  7013. BOOL
  7014. SetComputerNameA (
  7015. LPCSTR lpComputerName
  7016. );
  7017. BOOL
  7018. SetComputerNameW (
  7019. LPCWSTR lpComputerName
  7020. );
  7021. version(UNICODE) {
  7022. alias SetComputerNameW SetComputerName;
  7023. }
  7024. else {
  7025. alias SetComputerNameA SetComputerName;
  7026. }
  7027. enum COMPUTER_NAME_FORMAT {
  7028. ComputerNameNetBIOS,
  7029. ComputerNameDnsHostname,
  7030. ComputerNameDnsDomain,
  7031. ComputerNameDnsFullyQualified,
  7032. ComputerNamePhysicalNetBIOS,
  7033. ComputerNamePhysicalDnsHostname,
  7034. ComputerNamePhysicalDnsDomain,
  7035. ComputerNamePhysicalDnsFullyQualified,
  7036. ComputerNameMax
  7037. }
  7038. BOOL GetComputerNameExA (
  7039. COMPUTER_NAME_FORMAT NameType,
  7040. LPSTR lpBuffer,
  7041. LPDWORD nSize
  7042. );
  7043. BOOL GetComputerNameExW (
  7044. COMPUTER_NAME_FORMAT NameType,
  7045. LPWSTR lpBuffer,
  7046. LPDWORD nSize
  7047. );
  7048. version(UNICODE) {
  7049. alias GetComputerNameExW GetComputerNameEx;
  7050. }
  7051. else {
  7052. alias GetComputerNameExA GetComputerNameEx;
  7053. }
  7054. BOOL
  7055. SetComputerNameExA (
  7056. COMPUTER_NAME_FORMAT NameType,
  7057. LPCSTR lpBuffer
  7058. );
  7059. BOOL
  7060. SetComputerNameExW (
  7061. COMPUTER_NAME_FORMAT NameType,
  7062. LPCWSTR lpBuffer
  7063. );
  7064. version(UNICODE) {
  7065. alias SetComputerNameExW SetComputerNameEx;
  7066. }
  7067. else {
  7068. alias SetComputerNameExA SetComputerNameEx;
  7069. }
  7070. BOOL DnsHostnameToComputerNameA (
  7071. LPCSTR Hostname,
  7072. LPSTR ComputerName,
  7073. LPDWORD nSize
  7074. );
  7075. BOOL DnsHostnameToComputerNameW (
  7076. LPCWSTR Hostname,
  7077. LPWSTR ComputerName,
  7078. LPDWORD nSize
  7079. );
  7080. version(UNICODE) {
  7081. alias DnsHostnameToComputerNameW DnsHostnameToComputerName;
  7082. }
  7083. else {
  7084. alias DnsHostnameToComputerNameA DnsHostnameToComputerName;
  7085. }
  7086. BOOL GetUserNameA (
  7087. LPSTR lpBuffer,
  7088. LPDWORD pcbBuffer
  7089. );
  7090. BOOL
  7091. GetUserNameW (
  7092. LPWSTR lpBuffer,
  7093. LPDWORD pcbBuffer
  7094. );
  7095. version(UNICODE) {
  7096. alias GetUserNameW GetUserName;
  7097. }
  7098. else {
  7099. alias GetUserNameA GetUserName;
  7100. }
  7101. //
  7102. // Logon Support APIs
  7103. //
  7104. const auto LOGON32_LOGON_INTERACTIVE = 2;
  7105. const auto LOGON32_LOGON_NETWORK = 3;
  7106. const auto LOGON32_LOGON_BATCH = 4;
  7107. const auto LOGON32_LOGON_SERVICE = 5;
  7108. const auto LOGON32_LOGON_UNLOCK = 7;
  7109. const auto LOGON32_LOGON_NETWORK_CLEARTEXT = 8;
  7110. const auto LOGON32_LOGON_NEW_CREDENTIALS = 9;
  7111. const auto LOGON32_PROVIDER_DEFAULT = 0;
  7112. const auto LOGON32_PROVIDER_WINNT35 = 1;
  7113. const auto LOGON32_PROVIDER_WINNT40 = 2;
  7114. const auto LOGON32_PROVIDER_WINNT50 = 3;
  7115. BOOL
  7116. LogonUserA (
  7117. LPCSTR lpszUsername,
  7118. LPCSTR lpszDomain,
  7119. LPCSTR lpszPassword,
  7120. DWORD dwLogonType,
  7121. DWORD dwLogonProvider,
  7122. PHANDLE phToken
  7123. );
  7124. BOOL
  7125. LogonUserW (
  7126. LPCWSTR lpszUsername,
  7127. LPCWSTR lpszDomain,
  7128. LPCWSTR lpszPassword,
  7129. DWORD dwLogonType,
  7130. DWORD dwLogonProvider,
  7131. PHANDLE phToken
  7132. );
  7133. version(UNICODE) {
  7134. alias LogonUserW LogonUser;
  7135. }
  7136. else {
  7137. alias LogonUserA LogonUser;
  7138. }
  7139. BOOL
  7140. LogonUserExA (
  7141. LPCSTR lpszUsername,
  7142. LPCSTR lpszDomain,
  7143. LPCSTR lpszPassword,
  7144. DWORD dwLogonType,
  7145. DWORD dwLogonProvider,
  7146. PHANDLE phToken,
  7147. PSID *ppLogonSid,
  7148. PVOID *ppProfileBuffer,
  7149. LPDWORD pdwProfileLength,
  7150. PQUOTA_LIMITS pQuotaLimits
  7151. );
  7152. BOOL
  7153. LogonUserExW (
  7154. LPCWSTR lpszUsername,
  7155. LPCWSTR lpszDomain,
  7156. LPCWSTR lpszPassword,
  7157. DWORD dwLogonType,
  7158. DWORD dwLogonProvider,
  7159. PHANDLE phToken,
  7160. PSID *ppLogonSid,
  7161. PVOID *ppProfileBuffer,
  7162. LPDWORD pdwProfileLength,
  7163. PQUOTA_LIMITS pQuotaLimits
  7164. );
  7165. version(UNICODE) {
  7166. alias LogonUserExW LogonUserEx;
  7167. }
  7168. else {
  7169. alias LogonUserExA LogonUserEx;
  7170. }
  7171. BOOL
  7172. ImpersonateLoggedOnUser(
  7173. HANDLE hToken
  7174. );
  7175. BOOL
  7176. CreateProcessAsUserA (
  7177. HANDLE hToken,
  7178. LPCSTR lpApplicationName,
  7179. LPSTR lpCommandLine,
  7180. LPSECURITY_ATTRIBUTES lpProcessAttributes,
  7181. LPSECURITY_ATTRIBUTES lpThreadAttributes,
  7182. BOOL bInheritHandles,
  7183. DWORD dwCreationFlags,
  7184. LPVOID lpEnvironment,
  7185. LPCSTR lpCurrentDirectory,
  7186. LPSTARTUPINFOA lpStartupInfo,
  7187. LPPROCESS_INFORMATION lpProcessInformation
  7188. );
  7189. BOOL
  7190. CreateProcessAsUserW (
  7191. HANDLE hToken,
  7192. LPCWSTR lpApplicationName,
  7193. LPWSTR lpCommandLine,
  7194. LPSECURITY_ATTRIBUTES lpProcessAttributes,
  7195. LPSECURITY_ATTRIBUTES lpThreadAttributes,
  7196. BOOL bInheritHandles,
  7197. DWORD dwCreationFlags,
  7198. LPVOID lpEnvironment,
  7199. LPCWSTR lpCurrentDirectory,
  7200. LPSTARTUPINFOW lpStartupInfo,
  7201. LPPROCESS_INFORMATION lpProcessInformation
  7202. );
  7203. version(UNICODE) {
  7204. alias CreateProcessAsUserW CreateProcessAsUser;
  7205. }
  7206. else {
  7207. alias CreateProcessAsUserA CreateProcessAsUser;
  7208. }
  7209. //
  7210. // LogonFlags
  7211. //
  7212. const auto LOGON_WITH_PROFILE = 0x00000001;
  7213. const auto LOGON_NETCREDENTIALS_ONLY = 0x00000002;
  7214. const auto LOGON_ZERO_PASSWORD_BUFFER = 0x80000000;
  7215. BOOL
  7216. CreateProcessWithLogonW(
  7217. LPCWSTR lpUsername,
  7218. LPCWSTR lpDomain,
  7219. LPCWSTR lpPassword,
  7220. DWORD dwLogonFlags,
  7221. LPCWSTR lpApplicationName,
  7222. LPWSTR lpCommandLine,
  7223. DWORD dwCreationFlags,
  7224. LPVOID lpEnvironment,
  7225. LPCWSTR lpCurrentDirectory,
  7226. LPSTARTUPINFOW lpStartupInfo,
  7227. LPPROCESS_INFORMATION lpProcessInformation
  7228. );
  7229. BOOL
  7230. CreateProcessWithTokenW(
  7231. HANDLE hToken,
  7232. DWORD dwLogonFlags,
  7233. LPCWSTR lpApplicationName,
  7234. LPWSTR lpCommandLine,
  7235. DWORD dwCreationFlags,
  7236. LPVOID lpEnvironment,
  7237. LPCWSTR lpCurrentDirectory,
  7238. LPSTARTUPINFOW lpStartupInfo,
  7239. LPPROCESS_INFORMATION lpProcessInformation
  7240. );
  7241. BOOL
  7242. ImpersonateAnonymousToken(
  7243. HANDLE ThreadHandle
  7244. );
  7245. BOOL
  7246. DuplicateTokenEx(
  7247. HANDLE hExistingToken,
  7248. DWORD dwDesiredAccess,
  7249. LPSECURITY_ATTRIBUTES lpTokenAttributes,
  7250. SECURITY_IMPERSONATION_LEVEL ImpersonationLevel,
  7251. TOKEN_TYPE TokenType,
  7252. PHANDLE phNewToken);
  7253. BOOL
  7254. CreateRestrictedToken(
  7255. HANDLE ExistingTokenHandle,
  7256. DWORD Flags,
  7257. DWORD DisableSidCount,
  7258. PSID_AND_ATTRIBUTES SidsToDisable,
  7259. DWORD DeletePrivilegeCount,
  7260. PLUID_AND_ATTRIBUTES PrivilegesToDelete,
  7261. DWORD RestrictedSidCount,
  7262. PSID_AND_ATTRIBUTES SidsToRestrict,
  7263. PHANDLE NewTokenHandle
  7264. );
  7265. BOOL
  7266. IsTokenRestricted(
  7267. HANDLE TokenHandle
  7268. );
  7269. BOOL
  7270. IsTokenUntrusted(
  7271. HANDLE TokenHandle
  7272. );
  7273. BOOL
  7274. CheckTokenMembership(
  7275. HANDLE TokenHandle,
  7276. PSID SidToCheck,
  7277. PBOOL IsMember
  7278. );
  7279. //
  7280. // Thread pool API's
  7281. //
  7282. alias WAITORTIMERCALLBACKFUNC WAITORTIMERCALLBACK ;
  7283. BOOL
  7284. RegisterWaitForSingleObject(
  7285. PHANDLE phNewWaitObject,
  7286. HANDLE hObject,
  7287. WAITORTIMERCALLBACK Callback,
  7288. PVOID Context,
  7289. ULONG dwMilliseconds,
  7290. ULONG dwFlags
  7291. );
  7292. HANDLE
  7293. RegisterWaitForSingleObjectEx(
  7294. HANDLE hObject,
  7295. WAITORTIMERCALLBACK Callback,
  7296. PVOID Context,
  7297. ULONG dwMilliseconds,
  7298. ULONG dwFlags
  7299. );
  7300. BOOL
  7301. UnregisterWait(
  7302. HANDLE WaitHandle
  7303. );
  7304. BOOL
  7305. UnregisterWaitEx(
  7306. HANDLE WaitHandle,
  7307. HANDLE CompletionEvent
  7308. );
  7309. BOOL
  7310. QueueUserWorkItem(
  7311. LPTHREAD_START_ROUTINE Function,
  7312. PVOID Context,
  7313. ULONG Flags
  7314. );
  7315. BOOL
  7316. BindIoCompletionCallback (
  7317. HANDLE FileHandle,
  7318. LPOVERLAPPED_COMPLETION_ROUTINE Function,
  7319. ULONG Flags
  7320. );
  7321. HANDLE
  7322. CreateTimerQueue();
  7323. BOOL
  7324. CreateTimerQueueTimer(
  7325. PHANDLE phNewTimer,
  7326. HANDLE TimerQueue,
  7327. WAITORTIMERCALLBACK Callback,
  7328. PVOID Parameter,
  7329. DWORD DueTime,
  7330. DWORD Period,
  7331. ULONG Flags
  7332. ) ;
  7333. BOOL
  7334. ChangeTimerQueueTimer(
  7335. HANDLE TimerQueue,
  7336. HANDLE Timer,
  7337. ULONG DueTime,
  7338. ULONG Period
  7339. );
  7340. BOOL
  7341. DeleteTimerQueueTimer(
  7342. HANDLE TimerQueue,
  7343. HANDLE Timer,
  7344. HANDLE CompletionEvent
  7345. );
  7346. BOOL
  7347. DeleteTimerQueueEx(
  7348. HANDLE TimerQueue,
  7349. HANDLE CompletionEvent
  7350. );
  7351. HANDLE
  7352. SetTimerQueueTimer(
  7353. HANDLE TimerQueue,
  7354. WAITORTIMERCALLBACK Callback,
  7355. PVOID Parameter,
  7356. DWORD DueTime,
  7357. DWORD Period,
  7358. BOOL PreferIo
  7359. );
  7360. BOOL
  7361. CancelTimerQueueTimer(
  7362. HANDLE TimerQueue,
  7363. HANDLE Timer
  7364. );
  7365. BOOL
  7366. DeleteTimerQueue(
  7367. HANDLE TimerQueue
  7368. );
  7369. alias VOID function(PVOID Context, PVOID Overlapped, ULONG IoResult, ULONG_PTR NumberOfBytesTransferred, PTP_IO Io) PTP_WIN32_IO_CALLBACK;
  7370. PTP_POOL
  7371. CreateThreadpool(
  7372. PVOID reserved
  7373. );
  7374. VOID
  7375. SetThreadpoolThreadMaximum(
  7376. PTP_POOL ptpp,
  7377. DWORD cthrdMost
  7378. );
  7379. BOOL
  7380. SetThreadpoolThreadMinimum(
  7381. PTP_POOL ptpp,
  7382. DWORD cthrdMic
  7383. );
  7384. VOID
  7385. CloseThreadpool(
  7386. PTP_POOL ptpp
  7387. );
  7388. PTP_CLEANUP_GROUP
  7389. CreateThreadpoolCleanupGroup();
  7390. VOID
  7391. CloseThreadpoolCleanupGroupMembers(
  7392. PTP_CLEANUP_GROUP ptpcg,
  7393. BOOL fCancelPendingCallbacks,
  7394. PVOID pvCleanupContext
  7395. );
  7396. VOID
  7397. CloseThreadpoolCleanupGroup(
  7398. PTP_CLEANUP_GROUP ptpcg
  7399. );
  7400. VOID
  7401. SetEventWhenCallbackReturns(
  7402. PTP_CALLBACK_INSTANCE pci,
  7403. HANDLE evt
  7404. );
  7405. VOID
  7406. ReleaseSemaphoreWhenCallbackReturns(
  7407. PTP_CALLBACK_INSTANCE pci,
  7408. HANDLE sem,
  7409. DWORD crel
  7410. );
  7411. VOID
  7412. ReleaseMutexWhenCallbackReturns(
  7413. PTP_CALLBACK_INSTANCE pci,
  7414. HANDLE mut
  7415. );
  7416. VOID
  7417. LeaveCriticalSectionWhenCallbackReturns(
  7418. PTP_CALLBACK_INSTANCE pci,
  7419. PCRITICAL_SECTION pcs
  7420. );
  7421. VOID
  7422. FreeLibraryWhenCallbackReturns(
  7423. PTP_CALLBACK_INSTANCE pci,
  7424. HMODULE mod
  7425. );
  7426. BOOL
  7427. CallbackMayRunLong(
  7428. PTP_CALLBACK_INSTANCE pci
  7429. );
  7430. VOID
  7431. DisassociateCurrentThreadFromCallback(
  7432. PTP_CALLBACK_INSTANCE pci
  7433. );
  7434. BOOL
  7435. TrySubmitThreadpoolCallback(
  7436. PTP_SIMPLE_CALLBACK pfns,
  7437. PVOID pv,
  7438. PTP_CALLBACK_ENVIRON pcbe
  7439. );
  7440. PTP_WORK
  7441. CreateThreadpoolWork(
  7442. PTP_WORK_CALLBACK pfnwk,
  7443. PVOID pv,
  7444. PTP_CALLBACK_ENVIRON pcbe
  7445. );
  7446. VOID
  7447. SubmitThreadpoolWork(
  7448. PTP_WORK pwk
  7449. );
  7450. VOID
  7451. WaitForThreadpoolWorkCallbacks(
  7452. PTP_WORK pwk,
  7453. BOOL fCancelPendingCallbacks
  7454. );
  7455. VOID
  7456. CloseThreadpoolWork(
  7457. PTP_WORK pwk
  7458. );
  7459. PTP_TIMER
  7460. CreateThreadpoolTimer(
  7461. PTP_TIMER_CALLBACK pfnti,
  7462. PVOID pv,
  7463. PTP_CALLBACK_ENVIRON pcbe
  7464. );
  7465. VOID
  7466. SetThreadpoolTimer(
  7467. PTP_TIMER pti,
  7468. PFILETIME pftDueTime,
  7469. DWORD msPeriod,
  7470. DWORD msWindowLength
  7471. );
  7472. BOOL
  7473. IsThreadpoolTimerSet(
  7474. PTP_TIMER pti
  7475. );
  7476. VOID
  7477. WaitForThreadpoolTimerCallbacks(
  7478. PTP_TIMER pti,
  7479. BOOL fCancelPendingCallbacks
  7480. );
  7481. VOID
  7482. CloseThreadpoolTimer(
  7483. PTP_TIMER pti
  7484. );
  7485. PTP_WAIT
  7486. CreateThreadpoolWait(
  7487. PTP_WAIT_CALLBACK pfnwa,
  7488. PVOID pv,
  7489. PTP_CALLBACK_ENVIRON pcbe
  7490. );
  7491. VOID
  7492. SetThreadpoolWait(
  7493. PTP_WAIT pwa,
  7494. HANDLE h,
  7495. PFILETIME pftTimeout
  7496. );
  7497. VOID
  7498. WaitForThreadpoolWaitCallbacks(
  7499. PTP_WAIT pwa,
  7500. BOOL fCancelPendingCallbacks
  7501. );
  7502. VOID
  7503. CloseThreadpoolWait(
  7504. PTP_WAIT pwa
  7505. );
  7506. PTP_IO
  7507. CreateThreadpoolIo(
  7508. HANDLE fl,
  7509. PTP_WIN32_IO_CALLBACK pfnio,
  7510. PVOID pv,
  7511. PTP_CALLBACK_ENVIRON pcbe
  7512. );
  7513. VOID
  7514. StartThreadpoolIo(
  7515. PTP_IO pio
  7516. );
  7517. VOID
  7518. CancelThreadpoolIo(
  7519. PTP_IO pio
  7520. );
  7521. VOID
  7522. WaitForThreadpoolIoCallbacks(
  7523. PTP_IO pio,
  7524. BOOL fCancelPendingCallbacks
  7525. );
  7526. VOID
  7527. CloseThreadpoolIo(
  7528. PTP_IO pio
  7529. );
  7530. //
  7531. // Private Namespaces support
  7532. //
  7533. HANDLE
  7534. CreatePrivateNamespaceA(
  7535. LPSECURITY_ATTRIBUTES lpPrivateNamespaceAttributes,
  7536. LPVOID lpBoundaryDescriptor,
  7537. LPCSTR lpAliasPrefix
  7538. );
  7539. HANDLE
  7540. CreatePrivateNamespaceW(
  7541. LPSECURITY_ATTRIBUTES lpPrivateNamespaceAttributes,
  7542. LPVOID lpBoundaryDescriptor,
  7543. LPCWSTR lpAliasPrefix
  7544. );
  7545. version(UNICODE) {
  7546. alias CreatePrivateNamespaceW CreatePrivateNamespace;
  7547. }
  7548. else {
  7549. alias CreatePrivateNamespaceA CreatePrivateNamespace;
  7550. }
  7551. HANDLE
  7552. OpenPrivateNamespaceA(
  7553. LPVOID lpBoundaryDescriptor,
  7554. LPCSTR lpAliasPrefix
  7555. );
  7556. HANDLE
  7557. OpenPrivateNamespaceW(
  7558. LPVOID lpBoundaryDescriptor,
  7559. LPCWSTR lpAliasPrefix
  7560. );
  7561. version(UNICODE) {
  7562. alias OpenPrivateNamespaceW OpenPrivateNamespace;
  7563. }
  7564. else {
  7565. alias OpenPrivateNamespaceA OpenPrivateNamespace;
  7566. }
  7567. const auto PRIVATE_NAMESPACE_FLAG_DESTROY = 0x00000001;
  7568. BOOLEAN
  7569. ClosePrivateNamespace(
  7570. HANDLE Handle,
  7571. ULONG Flags
  7572. );
  7573. //
  7574. // Boundary descriptors support
  7575. //
  7576. HANDLE
  7577. CreateBoundaryDescriptorA(
  7578. LPCSTR Name,
  7579. ULONG Flags
  7580. );
  7581. HANDLE
  7582. CreateBoundaryDescriptorW(
  7583. LPCWSTR Name,
  7584. ULONG Flags
  7585. );
  7586. version(UNICODE) {
  7587. alias CreateBoundaryDescriptorW CreateBoundaryDescriptor;
  7588. }
  7589. else {
  7590. alias CreateBoundaryDescriptorA CreateBoundaryDescriptor;
  7591. }
  7592. BOOL
  7593. AddSIDToBoundaryDescriptor(
  7594. HANDLE * BoundaryDescriptor,
  7595. PSID RequiredSid
  7596. );
  7597. VOID
  7598. DeleteBoundaryDescriptor(
  7599. HANDLE BoundaryDescriptor
  7600. );
  7601. //
  7602. // Plug-and-Play API's
  7603. //
  7604. const auto HW_PROFILE_GUIDLEN = 39 ; // 36-characters plus NULL terminator
  7605. const auto MAX_PROFILE_LEN = 80;
  7606. const auto DOCKINFO_UNDOCKED = (0x1);
  7607. const auto DOCKINFO_DOCKED = (0x2);
  7608. const auto DOCKINFO_USER_SUPPLIED = (0x4);
  7609. const auto DOCKINFO_USER_UNDOCKED = (DOCKINFO_USER_SUPPLIED | DOCKINFO_UNDOCKED);
  7610. const auto DOCKINFO_USER_DOCKED = (DOCKINFO_USER_SUPPLIED | DOCKINFO_DOCKED);
  7611. struct HW_PROFILE_INFOA {
  7612. DWORD dwDockInfo;
  7613. CHAR szHwProfileGuid[HW_PROFILE_GUIDLEN];
  7614. CHAR szHwProfileName[MAX_PROFILE_LEN];
  7615. }
  7616. alias HW_PROFILE_INFOA* LPHW_PROFILE_INFOA;
  7617. struct HW_PROFILE_INFOW {
  7618. DWORD dwDockInfo;
  7619. WCHAR szHwProfileGuid[HW_PROFILE_GUIDLEN];
  7620. WCHAR szHwProfileName[MAX_PROFILE_LEN];
  7621. }
  7622. alias HW_PROFILE_INFOW* LPHW_PROFILE_INFOW;
  7623. version(UNICODE) {
  7624. alias HW_PROFILE_INFOW HW_PROFILE_INFO;
  7625. alias LPHW_PROFILE_INFOW LPHW_PROFILE_INFO;
  7626. }
  7627. else {
  7628. alias HW_PROFILE_INFOA HW_PROFILE_INFO;
  7629. alias LPHW_PROFILE_INFOA LPHW_PROFILE_INFO;
  7630. }
  7631. BOOL
  7632. GetCurrentHwProfileA (
  7633. LPHW_PROFILE_INFOA lpHwProfileInfo
  7634. );
  7635. BOOL
  7636. GetCurrentHwProfileW (
  7637. LPHW_PROFILE_INFOW lpHwProfileInfo
  7638. );
  7639. version(UNICODE) {
  7640. alias GetCurrentHwProfileW GetCurrentHwProfile;
  7641. }
  7642. else {
  7643. alias GetCurrentHwProfileA GetCurrentHwProfile;
  7644. }
  7645. //
  7646. // Performance counter API's
  7647. //
  7648. BOOL
  7649. QueryPerformanceCounter(
  7650. LARGE_INTEGER *lpPerformanceCount
  7651. );
  7652. BOOL
  7653. QueryPerformanceFrequency(
  7654. LARGE_INTEGER *lpFrequency
  7655. );
  7656. BOOL
  7657. GetVersionExA(
  7658. LPOSVERSIONINFOA lpVersionInformation
  7659. );
  7660. BOOL
  7661. GetVersionExW(
  7662. LPOSVERSIONINFOW lpVersionInformation
  7663. );
  7664. version(UNICODE) {
  7665. alias GetVersionExW GetVersionEx;
  7666. }
  7667. else {
  7668. alias GetVersionExA GetVersionEx;
  7669. }
  7670. BOOL
  7671. VerifyVersionInfoA(
  7672. LPOSVERSIONINFOEXA lpVersionInformation,
  7673. DWORD dwTypeMask,
  7674. DWORDLONG dwlConditionMask
  7675. );
  7676. BOOL
  7677. VerifyVersionInfoW(
  7678. LPOSVERSIONINFOEXW lpVersionInformation,
  7679. DWORD dwTypeMask,
  7680. DWORDLONG dwlConditionMask
  7681. );
  7682. version(UNICODE) {
  7683. alias VerifyVersionInfoW VerifyVersionInfo;
  7684. }
  7685. else {
  7686. alias VerifyVersionInfoA VerifyVersionInfo;
  7687. }
  7688. BOOL
  7689. GetProductInfo(
  7690. DWORD dwOSMajorVersion,
  7691. DWORD dwOSMinorVersion,
  7692. DWORD dwSpMajorVersion,
  7693. DWORD dwSpMinorVersion,
  7694. PDWORD pdwReturnedProductType
  7695. );
  7696. // DOS and OS/2 Compatible Error Code definitions returned by the Win32 Base
  7697. // API functions.
  7698. //
  7699. /* Abnormal termination codes */
  7700. const auto TC_NORMAL = 0;
  7701. const auto TC_HARDERR = 1;
  7702. const auto TC_GP_TRAP = 2;
  7703. const auto TC_SIGNAL = 3;
  7704. //
  7705. // Power Management APIs
  7706. //
  7707. const auto AC_LINE_OFFLINE = 0x00;
  7708. const auto AC_LINE_ONLINE = 0x01;
  7709. const auto AC_LINE_BACKUP_POWER = 0x02;
  7710. const auto AC_LINE_UNKNOWN = 0xFF;
  7711. const auto BATTERY_FLAG_HIGH = 0x01;
  7712. const auto BATTERY_FLAG_LOW = 0x02;
  7713. const auto BATTERY_FLAG_CRITICAL = 0x04;
  7714. const auto BATTERY_FLAG_CHARGING = 0x08;
  7715. const auto BATTERY_FLAG_NO_BATTERY = 0x80;
  7716. const auto BATTERY_FLAG_UNKNOWN = 0xFF;
  7717. const auto BATTERY_PERCENTAGE_UNKNOWN = 0xFF;
  7718. const auto BATTERY_LIFE_UNKNOWN = 0xFFFFFFFF;
  7719. struct SYSTEM_POWER_STATUS {
  7720. BYTE ACLineStatus;
  7721. BYTE BatteryFlag;
  7722. BYTE BatteryLifePercent;
  7723. BYTE Reserved1;
  7724. DWORD BatteryLifeTime;
  7725. DWORD BatteryFullLifeTime;
  7726. }
  7727. alias SYSTEM_POWER_STATUS* LPSYSTEM_POWER_STATUS;
  7728. BOOL
  7729. GetSystemPowerStatus(
  7730. LPSYSTEM_POWER_STATUS lpSystemPowerStatus
  7731. );
  7732. BOOL
  7733. SetSystemPowerState(
  7734. BOOL fSuspend,
  7735. BOOL fForce
  7736. );
  7737. //
  7738. // Very Large Memory API Subset
  7739. //
  7740. BOOL
  7741. AllocateUserPhysicalPages(
  7742. HANDLE hProcess,
  7743. PULONG_PTR NumberOfPages,
  7744. PULONG_PTR PageArray
  7745. );
  7746. BOOL
  7747. AllocateUserPhysicalPagesNuma(
  7748. HANDLE hProcess,
  7749. PULONG_PTR NumberOfPages,
  7750. PULONG_PTR PageArray,
  7751. DWORD nndPreferred
  7752. );
  7753. BOOL
  7754. FreeUserPhysicalPages(
  7755. HANDLE hProcess,
  7756. PULONG_PTR NumberOfPages,
  7757. PULONG_PTR PageArray
  7758. );
  7759. BOOL
  7760. MapUserPhysicalPages(
  7761. PVOID VirtualAddress,
  7762. ULONG_PTR NumberOfPages,
  7763. PULONG_PTR PageArray
  7764. );
  7765. BOOL
  7766. MapUserPhysicalPagesScatter(
  7767. PVOID *VirtualAddresses,
  7768. ULONG_PTR NumberOfPages,
  7769. PULONG_PTR PageArray
  7770. );
  7771. HANDLE
  7772. CreateJobObjectA(
  7773. LPSECURITY_ATTRIBUTES lpJobAttributes,
  7774. LPCSTR lpName
  7775. );
  7776. HANDLE
  7777. CreateJobObjectW(
  7778. LPSECURITY_ATTRIBUTES lpJobAttributes,
  7779. LPCWSTR lpName
  7780. );
  7781. version(UNICODE) {
  7782. alias CreateJobObjectW CreateJobObject;
  7783. }
  7784. else {
  7785. alias CreateJobObjectA CreateJobObject;
  7786. }
  7787. HANDLE
  7788. OpenJobObjectA(
  7789. DWORD dwDesiredAccess,
  7790. BOOL bInheritHandle,
  7791. LPCSTR lpName
  7792. );
  7793. HANDLE
  7794. OpenJobObjectW(
  7795. DWORD dwDesiredAccess,
  7796. BOOL bInheritHandle,
  7797. LPCWSTR lpName
  7798. );
  7799. version(UNICODE) {
  7800. alias OpenJobObjectW OpenJobObject;
  7801. }
  7802. else {
  7803. alias OpenJobObjectA OpenJobObject;
  7804. }
  7805. BOOL
  7806. AssignProcessToJobObject(
  7807. HANDLE hJob,
  7808. HANDLE hProcess
  7809. );
  7810. BOOL
  7811. TerminateJobObject(
  7812. HANDLE hJob,
  7813. UINT uExitCode
  7814. );
  7815. BOOL
  7816. QueryInformationJobObject(
  7817. HANDLE hJob,
  7818. JOBOBJECTINFOCLASS JobObjectInformationClass,
  7819. LPVOID lpJobObjectInformation,
  7820. DWORD cbJobObjectInformationLength,
  7821. LPDWORD lpReturnLength
  7822. );
  7823. BOOL
  7824. SetInformationJobObject(
  7825. HANDLE hJob,
  7826. JOBOBJECTINFOCLASS JobObjectInformationClass,
  7827. LPVOID lpJobObjectInformation,
  7828. DWORD cbJobObjectInformationLength
  7829. );
  7830. BOOL
  7831. IsProcessInJob (
  7832. HANDLE ProcessHandle,
  7833. HANDLE JobHandle,
  7834. PBOOL Result
  7835. );
  7836. BOOL
  7837. CreateJobSet (
  7838. ULONG NumJob,
  7839. PJOB_SET_ARRAY UserJobSet,
  7840. ULONG Flags);
  7841. PVOID
  7842. AddVectoredExceptionHandler (
  7843. ULONG First,
  7844. PVECTORED_EXCEPTION_HANDLER Handler
  7845. );
  7846. ULONG
  7847. RemoveVectoredExceptionHandler (
  7848. PVOID Handle
  7849. );
  7850. PVOID
  7851. AddVectoredContinueHandler (
  7852. ULONG First,
  7853. PVECTORED_EXCEPTION_HANDLER Handler
  7854. );
  7855. ULONG
  7856. RemoveVectoredContinueHandler (
  7857. PVOID Handle
  7858. );
  7859. //
  7860. // New Volume Mount Point API.
  7861. //
  7862. HANDLE
  7863. FindFirstVolumeA(
  7864. LPSTR lpszVolumeName,
  7865. DWORD cchBufferLength
  7866. );
  7867. HANDLE
  7868. FindFirstVolumeW(
  7869. LPWSTR lpszVolumeName,
  7870. DWORD cchBufferLength
  7871. );
  7872. version(UNICODE) {
  7873. alias FindFirstVolumeW FindFirstVolume;
  7874. }
  7875. else {
  7876. alias FindFirstVolumeA FindFirstVolume;
  7877. }
  7878. BOOL
  7879. FindNextVolumeA(
  7880. HANDLE hFindVolume,
  7881. LPSTR lpszVolumeName,
  7882. DWORD cchBufferLength
  7883. );
  7884. BOOL
  7885. FindNextVolumeW(
  7886. HANDLE hFindVolume,
  7887. LPWSTR lpszVolumeName,
  7888. DWORD cchBufferLength
  7889. );
  7890. version(UNICODE) {
  7891. alias FindNextVolumeW FindNextVolume;
  7892. }
  7893. else {
  7894. alias FindNextVolumeA FindNextVolume;
  7895. }
  7896. BOOL
  7897. FindVolumeClose(
  7898. HANDLE hFindVolume
  7899. );
  7900. HANDLE
  7901. FindFirstVolumeMountPointA(
  7902. LPCSTR lpszRootPathName,
  7903. LPSTR lpszVolumeMountPoint,
  7904. DWORD cchBufferLength
  7905. );
  7906. HANDLE
  7907. FindFirstVolumeMountPointW(
  7908. LPCWSTR lpszRootPathName,
  7909. LPWSTR lpszVolumeMountPoint,
  7910. DWORD cchBufferLength
  7911. );
  7912. version(UNICODE) {
  7913. alias FindFirstVolumeMountPointW FindFirstVolumeMountPoint;
  7914. }
  7915. else {
  7916. alias FindFirstVolumeMountPointA FindFirstVolumeMountPoint;
  7917. }
  7918. BOOL
  7919. FindNextVolumeMountPointA(
  7920. HANDLE hFindVolumeMountPoint,
  7921. LPSTR lpszVolumeMountPoint,
  7922. DWORD cchBufferLength
  7923. );
  7924. BOOL
  7925. FindNextVolumeMountPointW(
  7926. HANDLE hFindVolumeMountPoint,
  7927. LPWSTR lpszVolumeMountPoint,
  7928. DWORD cchBufferLength
  7929. );
  7930. version(UNICODE) {
  7931. alias FindNextVolumeMountPointW FindNextVolumeMountPoint;
  7932. }
  7933. else {
  7934. alias FindNextVolumeMountPointA FindNextVolumeMountPoint;
  7935. }
  7936. BOOL
  7937. FindVolumeMountPointClose(
  7938. HANDLE hFindVolumeMountPoint
  7939. );
  7940. BOOL
  7941. SetVolumeMountPointA(
  7942. LPCSTR lpszVolumeMountPoint,
  7943. LPCSTR lpszVolumeName
  7944. );
  7945. BOOL
  7946. SetVolumeMountPointW(
  7947. LPCWSTR lpszVolumeMountPoint,
  7948. LPCWSTR lpszVolumeName
  7949. );
  7950. version(UNICODE) {
  7951. alias SetVolumeMountPointW SetVolumeMountPoint;
  7952. }
  7953. else {
  7954. alias SetVolumeMountPointA SetVolumeMountPoint;
  7955. }
  7956. BOOL
  7957. DeleteVolumeMountPointA(
  7958. LPCSTR lpszVolumeMountPoint
  7959. );
  7960. BOOL
  7961. DeleteVolumeMountPointW(
  7962. LPCWSTR lpszVolumeMountPoint
  7963. );
  7964. version(UNICODE) {
  7965. alias DeleteVolumeMountPointW DeleteVolumeMountPoint;
  7966. }
  7967. else {
  7968. alias DeleteVolumeMountPointA DeleteVolumeMountPoint;
  7969. }
  7970. BOOL
  7971. GetVolumeNameForVolumeMountPointA(
  7972. LPCSTR lpszVolumeMountPoint,
  7973. LPSTR lpszVolumeName,
  7974. DWORD cchBufferLength
  7975. );
  7976. BOOL
  7977. GetVolumeNameForVolumeMountPointW(
  7978. LPCWSTR lpszVolumeMountPoint,
  7979. LPWSTR lpszVolumeName,
  7980. DWORD cchBufferLength
  7981. );
  7982. version(UNICODE) {
  7983. alias GetVolumeNameForVolumeMountPointW GetVolumeNameForVolumeMountPoint;
  7984. }
  7985. else {
  7986. alias GetVolumeNameForVolumeMountPointA GetVolumeNameForVolumeMountPoint;
  7987. }
  7988. BOOL
  7989. GetVolumePathNameA(
  7990. LPCSTR lpszFileName,
  7991. LPSTR lpszVolumePathName,
  7992. DWORD cchBufferLength
  7993. );
  7994. BOOL
  7995. GetVolumePathNameW(
  7996. LPCWSTR lpszFileName,
  7997. LPWSTR lpszVolumePathName,
  7998. DWORD cchBufferLength
  7999. );
  8000. version(UNICODE) {
  8001. alias GetVolumePathNameW GetVolumePathName;
  8002. }
  8003. else {
  8004. alias GetVolumePathNameA GetVolumePathName;
  8005. }
  8006. BOOL
  8007. GetVolumePathNamesForVolumeNameA(
  8008. LPCSTR lpszVolumeName,
  8009. LPCH lpszVolumePathNames,
  8010. DWORD cchBufferLength,
  8011. PDWORD lpcchReturnLength
  8012. );
  8013. BOOL
  8014. GetVolumePathNamesForVolumeNameW(
  8015. LPCWSTR lpszVolumeName,
  8016. LPWCH lpszVolumePathNames,
  8017. DWORD cchBufferLength,
  8018. PDWORD lpcchReturnLength
  8019. );
  8020. version(UNICODE) {
  8021. alias GetVolumePathNamesForVolumeNameW GetVolumePathNamesForVolumeName;
  8022. }
  8023. else {
  8024. alias GetVolumePathNamesForVolumeNameA GetVolumePathNamesForVolumeName;
  8025. }
  8026. const auto ACTCTX_FLAG_PROCESSOR_ARCHITECTURE_VALID = (0x00000001);
  8027. const auto ACTCTX_FLAG_LANGID_VALID = (0x00000002);
  8028. const auto ACTCTX_FLAG_ASSEMBLY_DIRECTORY_VALID = (0x00000004);
  8029. const auto ACTCTX_FLAG_RESOURCE_NAME_VALID = (0x00000008);
  8030. const auto ACTCTX_FLAG_SET_PROCESS_DEFAULT = (0x00000010);
  8031. const auto ACTCTX_FLAG_APPLICATION_NAME_VALID = (0x00000020);
  8032. const auto ACTCTX_FLAG_SOURCE_IS_ASSEMBLYREF = (0x00000040);
  8033. const auto ACTCTX_FLAG_HMODULE_VALID = (0x00000080);
  8034. struct ACTCTXA {
  8035. ULONG cbSize;
  8036. DWORD dwFlags;
  8037. LPCSTR lpSource;
  8038. USHORT wProcessorArchitecture;
  8039. LANGID wLangId;
  8040. LPCSTR lpAssemblyDirectory;
  8041. LPCSTR lpResourceName;
  8042. LPCSTR lpApplicationName;
  8043. HMODULE hModule;
  8044. }
  8045. alias ACTCTXA* PACTCTXA;
  8046. struct ACTCTXW {
  8047. ULONG cbSize;
  8048. DWORD dwFlags;
  8049. LPCWSTR lpSource;
  8050. USHORT wProcessorArchitecture;
  8051. LANGID wLangId;
  8052. LPCWSTR lpAssemblyDirectory;
  8053. LPCWSTR lpResourceName;
  8054. LPCWSTR lpApplicationName;
  8055. HMODULE hModule;
  8056. }
  8057. alias ACTCTXW* PACTCTXW;
  8058. version(UNICODE) {
  8059. alias ACTCTXW ACTCTX;
  8060. alias PACTCTXW PACTCTX;
  8061. }
  8062. else {
  8063. alias ACTCTXA ACTCTX;
  8064. alias PACTCTXA PACTCTX;
  8065. }
  8066. alias ACTCTXA *PCACTCTXA;
  8067. alias ACTCTXW *PCACTCTXW;
  8068. version(UNICODE) {
  8069. alias PCACTCTXW PCACTCTX;
  8070. }
  8071. else {
  8072. alias PCACTCTXA PCACTCTX;
  8073. }
  8074. HANDLE
  8075. CreateActCtxA(
  8076. PCACTCTXA pActCtx
  8077. );
  8078. HANDLE
  8079. CreateActCtxW(
  8080. PCACTCTXW pActCtx
  8081. );
  8082. version(UNICODE) {
  8083. alias CreateActCtxW CreateActCtx;
  8084. }
  8085. else {
  8086. alias CreateActCtxA CreateActCtx;
  8087. }
  8088. VOID
  8089. AddRefActCtx(
  8090. HANDLE hActCtx
  8091. );
  8092. VOID
  8093. ReleaseActCtx(
  8094. HANDLE hActCtx
  8095. );
  8096. BOOL
  8097. ZombifyActCtx(
  8098. HANDLE hActCtx
  8099. );
  8100. BOOL
  8101. ActivateActCtx(
  8102. HANDLE hActCtx,
  8103. ULONG_PTR *lpCookie
  8104. );
  8105. const auto DEACTIVATE_ACTCTX_FLAG_FORCE_EARLY_DEACTIVATION = (0x00000001);
  8106. BOOL
  8107. DeactivateActCtx(
  8108. DWORD dwFlags,
  8109. ULONG_PTR ulCookie
  8110. );
  8111. BOOL
  8112. GetCurrentActCtx(
  8113. HANDLE *lphActCtx);
  8114. struct ACTCTX_SECTION_KEYED_DATA_2600 {
  8115. ULONG cbSize;
  8116. ULONG ulDataFormatVersion;
  8117. PVOID lpData;
  8118. ULONG ulLength;
  8119. PVOID lpSectionGlobalData;
  8120. ULONG ulSectionGlobalDataLength;
  8121. PVOID lpSectionBase;
  8122. ULONG ulSectionTotalLength;
  8123. HANDLE hActCtx;
  8124. ULONG ulAssemblyRosterIndex;
  8125. }
  8126. alias ACTCTX_SECTION_KEYED_DATA_2600* PACTCTX_SECTION_KEYED_DATA_2600;
  8127. alias ACTCTX_SECTION_KEYED_DATA_2600 * PCACTCTX_SECTION_KEYED_DATA_2600;
  8128. struct ACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA {
  8129. PVOID lpInformation;
  8130. PVOID lpSectionBase;
  8131. ULONG ulSectionLength;
  8132. PVOID lpSectionGlobalDataBase;
  8133. ULONG ulSectionGlobalDataLength;
  8134. }
  8135. alias ACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA* PACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA;
  8136. alias ACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA *PCACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA;
  8137. struct ACTCTX_SECTION_KEYED_DATA {
  8138. ULONG cbSize;
  8139. ULONG ulDataFormatVersion;
  8140. PVOID lpData;
  8141. ULONG ulLength;
  8142. PVOID lpSectionGlobalData;
  8143. ULONG ulSectionGlobalDataLength;
  8144. PVOID lpSectionBase;
  8145. ULONG ulSectionTotalLength;
  8146. HANDLE hActCtx;
  8147. ULONG ulAssemblyRosterIndex;
  8148. // 2600 stops here
  8149. ULONG ulFlags;
  8150. ACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA AssemblyMetadata;
  8151. }
  8152. alias ACTCTX_SECTION_KEYED_DATA* PACTCTX_SECTION_KEYED_DATA;
  8153. alias ACTCTX_SECTION_KEYED_DATA * PCACTCTX_SECTION_KEYED_DATA;
  8154. const auto FIND_ACTCTX_SECTION_KEY_RETURN_HACTCTX = (0x00000001);
  8155. const auto FIND_ACTCTX_SECTION_KEY_RETURN_FLAGS = (0x00000002);
  8156. const auto FIND_ACTCTX_SECTION_KEY_RETURN_ASSEMBLY_METADATA = (0x00000004);
  8157. BOOL
  8158. FindActCtxSectionStringA(
  8159. DWORD dwFlags,
  8160. GUID *lpExtensionGuid,
  8161. ULONG ulSectionId,
  8162. LPCSTR lpStringToFind,
  8163. PACTCTX_SECTION_KEYED_DATA ReturnedData
  8164. );
  8165. BOOL
  8166. FindActCtxSectionStringW(
  8167. DWORD dwFlags,
  8168. GUID *lpExtensionGuid,
  8169. ULONG ulSectionId,
  8170. LPCWSTR lpStringToFind,
  8171. PACTCTX_SECTION_KEYED_DATA ReturnedData
  8172. );
  8173. version(UNICODE) {
  8174. alias FindActCtxSectionStringW FindActCtxSectionString;
  8175. }
  8176. else {
  8177. alias FindActCtxSectionStringA FindActCtxSectionString;
  8178. }
  8179. BOOL
  8180. FindActCtxSectionGuid(
  8181. DWORD dwFlags,
  8182. GUID *lpExtensionGuid,
  8183. ULONG ulSectionId,
  8184. GUID *lpGuidToFind,
  8185. PACTCTX_SECTION_KEYED_DATA ReturnedData
  8186. );
  8187. struct ACTIVATION_CONTEXT_BASIC_INFORMATION {
  8188. HANDLE hActCtx;
  8189. DWORD dwFlags;
  8190. }
  8191. alias ACTIVATION_CONTEXT_BASIC_INFORMATION* PACTIVATION_CONTEXT_BASIC_INFORMATION;
  8192. alias ACTIVATION_CONTEXT_BASIC_INFORMATION *PCACTIVATION_CONTEXT_BASIC_INFORMATION;
  8193. const auto ACTIVATION_CONTEXT_BASIC_INFORMATION_DEFINED = 1;
  8194. const auto QUERY_ACTCTX_FLAG_USE_ACTIVE_ACTCTX = (0x00000004);
  8195. const auto QUERY_ACTCTX_FLAG_ACTCTX_IS_HMODULE = (0x00000008);
  8196. const auto QUERY_ACTCTX_FLAG_ACTCTX_IS_ADDRESS = (0x00000010);
  8197. const auto QUERY_ACTCTX_FLAG_NO_ADDREF = (0x80000000);
  8198. //
  8199. // switch (ulInfoClass)
  8200. //
  8201. // case ActivationContextBasicInformation:
  8202. // pvSubInstance == NULL
  8203. // pvBuffer is of type PACTIVATION_CONTEXT_BASIC_INFORMATION
  8204. //
  8205. // case ActivationContextDetailedInformation:
  8206. // pvSubInstance == NULL
  8207. // pvBuffer is of type PACTIVATION_CONTEXT_DETAILED_INFORMATION
  8208. //
  8209. // case AssemblyDetailedInformationInActivationContext:
  8210. // pvSubInstance is of type PULONG
  8211. // *pvSubInstance < ACTIVATION_CONTEXT_DETAILED_INFORMATION::ulAssemblyCount
  8212. // pvBuffer is of type PACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION
  8213. //
  8214. // case FileInformationInAssemblyOfAssemblyInActivationContext:
  8215. // pvSubInstance is of type PACTIVATION_CONTEXT_QUERY_INDEX
  8216. // pvSubInstance->ulAssemblyIndex < ACTIVATION_CONTEXT_DETAILED_INFORMATION::ulAssemblyCount
  8217. // pvSubInstance->ulFileIndexInAssembly < ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION::ulFileCount
  8218. // pvBuffer is of type PASSEMBLY_FILE_DETAILED_INFORMATION
  8219. //
  8220. // case RunlevelInformationInActivationContext :
  8221. // pvSubInstance == NULL
  8222. // pvBuffer is of type PACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION
  8223. //
  8224. // String are placed after the structs.
  8225. //
  8226. BOOL
  8227. QueryActCtxW(
  8228. DWORD dwFlags,
  8229. HANDLE hActCtx,
  8230. PVOID pvSubInstance,
  8231. ULONG ulInfoClass,
  8232. PVOID pvBuffer,
  8233. SIZE_T cbBuffer,
  8234. SIZE_T *pcbWrittenOrRequired
  8235. );
  8236. alias BOOL function(DWORD dwFlags, HANDLE hActCtx, PVOID pvSubInstance, ULONG ulInfoClass, PVOID pvBuffer, SIZE_T cbBuffer, SIZE_T* pcbWrittenOrRequired) PQUERYACTCTXW_FUNC;
  8237. BOOL
  8238. ProcessIdToSessionId(
  8239. DWORD dwProcessId,
  8240. DWORD *pSessionId
  8241. );
  8242. DWORD
  8243. WTSGetActiveConsoleSessionId();
  8244. BOOL
  8245. IsWow64Process(
  8246. HANDLE hProcess,
  8247. PBOOL Wow64Process
  8248. );
  8249. BOOL
  8250. GetLogicalProcessorInformation(
  8251. PSYSTEM_LOGICAL_PROCESSOR_INFORMATION Buffer,
  8252. PDWORD ReturnedLength
  8253. );
  8254. //
  8255. // NUMA Information routines.
  8256. //
  8257. BOOL
  8258. GetNumaHighestNodeNumber(
  8259. PULONG HighestNodeNumber
  8260. );
  8261. BOOL
  8262. GetNumaProcessorNode(
  8263. UCHAR Processor,
  8264. PUCHAR NodeNumber
  8265. );
  8266. BOOL
  8267. GetNumaNodeProcessorMask(
  8268. UCHAR Node,
  8269. PULONGLONG ProcessorMask
  8270. );
  8271. BOOL
  8272. GetNumaAvailableMemoryNode(
  8273. UCHAR Node,
  8274. PULONGLONG AvailableBytes
  8275. );
  8276. BOOL
  8277. GetNumaProximityNode(
  8278. ULONG ProximityId,
  8279. PUCHAR NodeNumber
  8280. );
  8281. //
  8282. // Application restart and data recovery callback
  8283. //
  8284. alias DWORD function(PVOID pvParameter) APPLICATION_RECOVERY_CALLBACK;
  8285. //
  8286. // Max length of commandline in characters (including the NULL character that can be registered for restart)
  8287. //
  8288. const auto RESTART_MAX_CMD_LINE = 2048;
  8289. //
  8290. // Do not restart the process for termination due to application crashes
  8291. //
  8292. const auto RESTART_NO_CRASH = 1;
  8293. //
  8294. // Do not restart the process for termination due to application hangs
  8295. //
  8296. const auto RESTART_NO_HANG = 2;
  8297. //
  8298. // Do not restart the process for termination due to patch installations
  8299. //
  8300. const auto RESTART_NO_PATCH = 4;
  8301. //
  8302. // Do not restart the process when the system is rebooted because the
  8303. //
  8304. const auto RESTART_NO_REBOOT = 8;
  8305. HRESULT
  8306. RegisterApplicationRecoveryCallback(
  8307. APPLICATION_RECOVERY_CALLBACK pRecoveyCallback,
  8308. PVOID pvParameter,
  8309. DWORD dwPingInterval,
  8310. DWORD dwFlags
  8311. );
  8312. HRESULT
  8313. UnregisterApplicationRecoveryCallback();
  8314. HRESULT
  8315. RegisterApplicationRestart(
  8316. PCWSTR pwzCommandline,
  8317. DWORD dwFlags
  8318. );
  8319. HRESULT
  8320. UnregisterApplicationRestart();
  8321. const auto RECOVERY_DEFAULT_PING_INTERVAL = 5000;
  8322. const auto RECOVERY_MAX_PING_INTERVAL = (5 * 60 * 1000);
  8323. HRESULT
  8324. GetApplicationRecoveryCallback(
  8325. HANDLE hProcess,
  8326. APPLICATION_RECOVERY_CALLBACK* pRecoveryCallback,
  8327. PVOID* ppvParameter,
  8328. PDWORD pdwPingInterval,
  8329. PDWORD pdwFlags
  8330. );
  8331. HRESULT
  8332. GetApplicationRestartSettings(
  8333. HANDLE hProcess,
  8334. PWSTR pwzCommandline,
  8335. PDWORD pcchSize,
  8336. PDWORD pdwFlags
  8337. );
  8338. HRESULT
  8339. ApplicationRecoveryInProgress(
  8340. PBOOL pbCancelled
  8341. );
  8342. VOID
  8343. ApplicationRecoveryFinished(
  8344. BOOL bSuccess
  8345. );
  8346. enum FILE_INFO_BY_HANDLE_CLASS {
  8347. FileBasicInfo,
  8348. FileStandardInfo,
  8349. FileNameInfo,
  8350. FileRenameInfo,
  8351. FileDispositionInfo,
  8352. FileAllocationInfo,
  8353. FileEndOfFileInfo,
  8354. FileStreamInfo,
  8355. FileCompressionInfo,
  8356. FileAttributeTagInfo,
  8357. FileIdBothDirectoryInfo,
  8358. FileIdBothDirectoryRestartInfo,
  8359. FileIoPriorityHintInfo,
  8360. MaximumFileInfoByHandleClass
  8361. }
  8362. alias FILE_INFO_BY_HANDLE_CLASS* PFILE_INFO_BY_HANDLE_CLASS;
  8363. struct FILE_BASIC_INFO {
  8364. LARGE_INTEGER CreationTime;
  8365. LARGE_INTEGER LastAccessTime;
  8366. LARGE_INTEGER LastWriteTime;
  8367. LARGE_INTEGER ChangeTime;
  8368. DWORD FileAttributes;
  8369. }
  8370. alias FILE_BASIC_INFO* PFILE_BASIC_INFO;
  8371. struct FILE_STANDARD_INFO {
  8372. LARGE_INTEGER AllocationSize;
  8373. LARGE_INTEGER EndOfFile;
  8374. DWORD NumberOfLinks;
  8375. BOOLEAN DeletePending;
  8376. BOOLEAN Directory;
  8377. }
  8378. alias FILE_STANDARD_INFO* PFILE_STANDARD_INFO;
  8379. struct FILE_NAME_INFO {
  8380. DWORD FileNameLength;
  8381. WCHAR FileName[1];
  8382. }
  8383. alias FILE_NAME_INFO* PFILE_NAME_INFO;
  8384. struct FILE_RENAME_INFO {
  8385. BOOLEAN ReplaceIfExists;
  8386. HANDLE RootDirectory;
  8387. DWORD FileNameLength;
  8388. WCHAR FileName[1];
  8389. }
  8390. alias FILE_RENAME_INFO* PFILE_RENAME_INFO;
  8391. struct FILE_ALLOCATION_INFO {
  8392. LARGE_INTEGER AllocationSize;
  8393. }
  8394. alias FILE_ALLOCATION_INFO* PFILE_ALLOCATION_INFO;
  8395. struct FILE_END_OF_FILE_INFO {
  8396. LARGE_INTEGER EndOfFile;
  8397. }
  8398. alias FILE_END_OF_FILE_INFO* PFILE_END_OF_FILE_INFO;
  8399. struct FILE_STREAM_INFO {
  8400. DWORD NextEntryOffset;
  8401. DWORD StreamNameLength;
  8402. LARGE_INTEGER StreamSize;
  8403. LARGE_INTEGER StreamAllocationSize;
  8404. WCHAR StreamName[1];
  8405. }
  8406. alias FILE_STREAM_INFO* PFILE_STREAM_INFO;
  8407. struct FILE_COMPRESSION_INFO {
  8408. LARGE_INTEGER CompressedFileSize;
  8409. WORD CompressionFormat;
  8410. UCHAR CompressionUnitShift;
  8411. UCHAR ChunkShift;
  8412. UCHAR ClusterShift;
  8413. UCHAR Reserved[3];
  8414. }
  8415. alias FILE_COMPRESSION_INFO* PFILE_COMPRESSION_INFO;
  8416. struct FILE_ATTRIBUTE_TAG_INFO {
  8417. DWORD FileAttributes;
  8418. DWORD ReparseTag;
  8419. }
  8420. alias FILE_ATTRIBUTE_TAG_INFO* PFILE_ATTRIBUTE_TAG_INFO;
  8421. struct FILE_DISPOSITION_INFO {
  8422. BOOLEAN DeleteFile;
  8423. }
  8424. alias FILE_DISPOSITION_INFO* PFILE_DISPOSITION_INFO;
  8425. struct FILE_ID_BOTH_DIR_INFO {
  8426. DWORD NextEntryOffset;
  8427. DWORD FileIndex;
  8428. LARGE_INTEGER CreationTime;
  8429. LARGE_INTEGER LastAccessTime;
  8430. LARGE_INTEGER LastWriteTime;
  8431. LARGE_INTEGER ChangeTime;
  8432. LARGE_INTEGER EndOfFile;
  8433. LARGE_INTEGER AllocationSize;
  8434. DWORD FileAttributes;
  8435. DWORD FileNameLength;
  8436. DWORD EaSize;
  8437. CCHAR ShortNameLength;
  8438. WCHAR ShortName[12];
  8439. LARGE_INTEGER FileId;
  8440. WCHAR FileName[1];
  8441. }
  8442. alias FILE_ID_BOTH_DIR_INFO* PFILE_ID_BOTH_DIR_INFO;
  8443. enum PRIORITY_HINT {
  8444. IoPriorityHintVeryLow = 0,
  8445. IoPriorityHintLow,
  8446. IoPriorityHintNormal,
  8447. MaximumIoPriorityHintType
  8448. }
  8449. struct FILE_IO_PRIORITY_HINT_INFO {
  8450. PRIORITY_HINT PriorityHint;
  8451. }
  8452. alias FILE_IO_PRIORITY_HINT_INFO* PFILE_IO_PRIORITY_HINT_INFO;
  8453. BOOL
  8454. SetFileInformationByHandle(
  8455. HANDLE hFile,
  8456. FILE_INFO_BY_HANDLE_CLASS FileInformationClass,
  8457. LPVOID lpFileInformation,
  8458. DWORD dwBufferSize
  8459. );
  8460. BOOL
  8461. GetFileInformationByHandleEx(
  8462. HANDLE hFile,
  8463. FILE_INFO_BY_HANDLE_CLASS FileInformationClass,
  8464. LPVOID lpFileInformation,
  8465. DWORD dwBufferSize
  8466. );
  8467. enum FILE_ID_TYPE {
  8468. FileIdType,
  8469. ObjectIdType,
  8470. MaximumFileIdType
  8471. }
  8472. alias FILE_ID_TYPE* PFILE_ID_TYPE;
  8473. struct FILE_ID_DESCRIPTOR {
  8474. DWORD dwSize; // Size of the struct
  8475. FILE_ID_TYPE Type; // Describes the type of identifier passed in.
  8476. union {
  8477. LARGE_INTEGER FileId;
  8478. GUID ObjectId;
  8479. };
  8480. }
  8481. alias FILE_ID_DESCRIPTOR* LPFILE_ID_DESCRIPTOR;
  8482. HANDLE
  8483. OpenFileById (
  8484. HANDLE hVolumeHint,
  8485. LPFILE_ID_DESCRIPTOR lpFileId,
  8486. DWORD dwDesiredAccess,
  8487. DWORD dwShareMode,
  8488. LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  8489. DWORD dwFlagsAndAttributes
  8490. );
  8491. //
  8492. // Flags to be passed into CREATE_SYMBOLIC_LINK
  8493. //
  8494. const auto SYMBOLIC_LINK_FLAG_DIRECTORY = (0x1);
  8495. const auto VALID_SYMBOLIC_LINK_FLAGS = SYMBOLIC_LINK_FLAG_DIRECTORY ; // & whatever other flags we think of!
  8496. BOOLEAN
  8497. CreateSymbolicLinkA (
  8498. LPCSTR lpSymlinkFileName,
  8499. LPCSTR lpTargetFileName,
  8500. DWORD dwFlags
  8501. );
  8502. BOOLEAN
  8503. CreateSymbolicLinkW (
  8504. LPCWSTR lpSymlinkFileName,
  8505. LPCWSTR lpTargetFileName,
  8506. DWORD dwFlags
  8507. );
  8508. version(UNICODE) {
  8509. alias CreateSymbolicLinkW CreateSymbolicLink;
  8510. }
  8511. else {
  8512. alias CreateSymbolicLinkA CreateSymbolicLink;
  8513. }
  8514. BOOLEAN
  8515. CreateSymbolicLinkTransactedA (
  8516. LPCSTR lpSymlinkFileName,
  8517. LPCSTR lpTargetFileName,
  8518. DWORD dwFlags,
  8519. HANDLE hTransaction
  8520. );
  8521. BOOLEAN
  8522. CreateSymbolicLinkTransactedW (
  8523. LPCWSTR lpSymlinkFileName,
  8524. LPCWSTR lpTargetFileName,
  8525. DWORD dwFlags,
  8526. HANDLE hTransaction
  8527. );
  8528. version(UNICODE) {
  8529. alias CreateSymbolicLinkTransactedW CreateSymbolicLinkTransacted;
  8530. }
  8531. else {
  8532. alias CreateSymbolicLinkTransactedA CreateSymbolicLinkTransacted;
  8533. }
  8534. DWORD
  8535. GetFinalPathNameByHandleA (
  8536. HANDLE hFile,
  8537. LPSTR lpszFilePath,
  8538. DWORD cchFilePath,
  8539. DWORD dwFlags
  8540. );
  8541. DWORD
  8542. GetFinalPathNameByHandleW (
  8543. HANDLE hFile,
  8544. LPWSTR lpszFilePath,
  8545. DWORD cchFilePath,
  8546. DWORD dwFlags
  8547. );
  8548. version(UNICODE) {
  8549. alias GetFinalPathNameByHandleW GetFinalPathNameByHandle;
  8550. }
  8551. else {
  8552. alias GetFinalPathNameByHandleA GetFinalPathNameByHandle;
  8553. }
  8554. BOOL
  8555. QueryActCtxSettingsW(
  8556. DWORD dwFlags,
  8557. HANDLE hActCtx,
  8558. PCWSTR settingsNameSpace,
  8559. PCWSTR settingName,
  8560. PWSTR pvBuffer,
  8561. SIZE_T dwBuffer,
  8562. SIZE_T *pdwWrittenOrRequired
  8563. );
  8564. // Expose Hidden Function:
  8565. FARPROC GetProcAddressW (
  8566. HMODULE hModule,
  8567. LPCWSTR lpProcName
  8568. );