PageRenderTime 28ms CodeModel.GetById 22ms RepoModel.GetById 1ms app.codeStats 0ms

/components/jcl/source/windows/JclWin32.pas

https://github.com/padcom/delcos
Pascal | 1185 lines | 419 code | 118 blank | 648 comment | 0 complexity | 9fe2437c46373efb01a9b22fbbdb329d MD5 | raw file
  1. {**************************************************************************************************}
  2. { WARNING: JEDI preprocessor generated unit. Do not edit. }
  3. {**************************************************************************************************}
  4. {**************************************************************************************************}
  5. { }
  6. { Project JEDI Code Library (JCL) }
  7. { }
  8. { The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); }
  9. { you may not use this file except in compliance with the License. You may obtain a copy of the }
  10. { License at http://www.mozilla.org/MPL/ }
  11. { }
  12. { Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF }
  13. { ANY KIND, either express or implied. See the License for the specific language governing rights }
  14. { and limitations under the License. }
  15. { }
  16. { Portions of this code are translated from DelayImp.h. }
  17. { The Initial Developer of DelayImp.h is Inprise Corporation. Portions created by Inprise }
  18. { Corporation are Copyright (C) 1999, 2000 by Inprise Corporation. All Rights Reserved. }
  19. { }
  20. { The Original Code is JclWin32.pas. }
  21. { }
  22. { The Initial Developer of the Original Code is Marcel van Brakel. Portions created by Marcel van }
  23. { Brakel are Copyright (C) Marcel van Brakel. All Rights Reserved. }
  24. { }
  25. { Contributors: }
  26. { Marcel van Brakel }
  27. { Peter Friese }
  28. { Andreas Hausladen (ahuser) }
  29. { Flier Lu (flier) }
  30. { Robert Marquardt (marquardt) }
  31. { Robert Rossmair (rrossmair) }
  32. { Olivier Sannier (obones) }
  33. { Matthias Thoma (mthoma) }
  34. { Petr Vones (pvones) }
  35. { Florent Ouchet (outchy) }
  36. { }
  37. {**************************************************************************************************}
  38. { }
  39. { This unit defines various Win32 API declarations which are either missing or incorrect in one or }
  40. { more of the supported Delphi versions. This unit is not intended for regular code, only API }
  41. { declarations. }
  42. { }
  43. {**************************************************************************************************}
  44. { }
  45. { Last modified: $Date:: 2010-08-02 21:27:59 +0200 (lun., 02 août 2010) $ }
  46. { Revision: $Rev:: 3276 $ }
  47. { Author: $Author:: outchy $ }
  48. { }
  49. {**************************************************************************************************}
  50. unit JclWin32;
  51. {$I jcl.inc}
  52. {$MINENUMSIZE 4}
  53. {$ALIGN ON}
  54. {$WARNINGS OFF}
  55. interface
  56. uses
  57. {$IFDEF UNITVERSIONING}
  58. JclUnitVersioning,
  59. {$ENDIF UNITVERSIONING}
  60. Windows, SysUtils,
  61. {$IFNDEF FPC}
  62. AccCtrl,
  63. ActiveX,
  64. {$ENDIF ~FPC}
  65. JclBase;
  66. {$HPPEMIT '#include <WinDef.h>'}
  67. {$HPPEMIT '#include <WinNT.h>'}
  68. {$HPPEMIT '#include <WinBase.h>'}
  69. {$HPPEMIT '#include <BaseTsd.h>'}
  70. {$HPPEMIT '#include <ImageHlp.h>'}
  71. {$HPPEMIT '#include <lm.h>'}
  72. {$HPPEMIT '#include <Nb30.h>'}
  73. {$HPPEMIT '#include <RasDlg.h>'}
  74. {$HPPEMIT '#include <Reason.h>'}
  75. {$HPPEMIT '#include <ShlWApi.h>'}
  76. {$HPPEMIT '#include <WinError.h>'}
  77. {$HPPEMIT '#include <WinIoCtl.h>'}
  78. {$HPPEMIT '#include <WinUser.h>'}
  79. //{$HPPEMIT '#include <Powrprof.h>'}
  80. {$HPPEMIT '#include <delayimp.h>'}
  81. {$HPPEMIT '#include <propidl.h>'}
  82. {$HPPEMIT '#include <msidefs.h>'}
  83. {$HPPEMIT '#include <shlguid.h>'}
  84. {$IFNDEF COMPILER14_UP}
  85. {$HPPEMIT '#include <imgguids.h>'}
  86. {$ENDIF ~COMPILER14_UP}
  87. {$HPPEMIT '#include <objbase.h>'}
  88. {$HPPEMIT '#include <ntsecapi.h>'}
  89. {$HPPEMIT ''}
  90. // EJclWin32Error
  91. type
  92. EJclWin32Error = class(EJclError)
  93. private
  94. FLastError: DWORD;
  95. FLastErrorMsg: string;
  96. public
  97. constructor Create(const Msg: string);
  98. constructor CreateFmt(const Msg: string; const Args: array of const);
  99. constructor CreateRes(Ident: Integer); overload;
  100. constructor CreateRes(ResStringRec: PResStringRec); overload;
  101. property LastError: DWORD read FLastError;
  102. property LastErrorMsg: string read FLastErrorMsg;
  103. end;
  104. {$IFNDEF FPC}
  105. //
  106. // Unsigned Basics
  107. //
  108. type
  109. USHORT = Word;
  110. {$EXTERNALSYM USHORT}
  111. {$ENDIF ~FPC}
  112. //==================================================================================================
  113. // presumable from any older WinNT.h or from WinIfs.h
  114. //==================================================================================================
  115. //--------------------------------------------------------------------------------------------------
  116. // NTFS Reparse Points
  117. //--------------------------------------------------------------------------------------------------
  118. // The reparse structure is used by layered drivers to store data in a
  119. // reparse point. The constraints on reparse tags are defined below.
  120. // This version of the reparse data buffer is only for Microsoft tags.
  121. (*$HPPEMIT 'typedef struct _REPARSE_DATA_BUFFER {'*)
  122. (*$HPPEMIT ''*)
  123. (*$HPPEMIT ' DWORD ReparseTag;'*)
  124. (*$HPPEMIT ' WORD ReparseDataLength;'*)
  125. (*$HPPEMIT ' WORD Reserved;'*)
  126. (*$HPPEMIT ''*)
  127. (*$HPPEMIT ' union {'*)
  128. (*$HPPEMIT ''*)
  129. (*$HPPEMIT ' struct {'*)
  130. (*$HPPEMIT ' WORD SubstituteNameOffset;'*)
  131. (*$HPPEMIT ' WORD SubstituteNameLength;'*)
  132. (*$HPPEMIT ' WORD PrintNameOffset;'*)
  133. (*$HPPEMIT ' WORD PrintNameLength;'*)
  134. (*$HPPEMIT ' WCHAR PathBuffer[1];'*)
  135. (*$HPPEMIT ' } SymbolicLinkReparseBuffer;'*)
  136. (*$HPPEMIT ''*)
  137. (*$HPPEMIT ' struct {'*)
  138. (*$HPPEMIT ' WORD SubstituteNameOffset;'*)
  139. (*$HPPEMIT ' WORD SubstituteNameLength;'*)
  140. (*$HPPEMIT ' WORD PrintNameOffset;'*)
  141. (*$HPPEMIT ' WORD PrintNameLength;'*)
  142. (*$HPPEMIT ' WCHAR PathBuffer[1];'*)
  143. (*$HPPEMIT ' } MountPointReparseBuffer;'*)
  144. (*$HPPEMIT ''*)
  145. (*$HPPEMIT ' struct {'*)
  146. (*$HPPEMIT ' UCHAR DataBuffer[1];'*)
  147. (*$HPPEMIT ' } GenericReparseBuffer;'*)
  148. (*$HPPEMIT ' };'*)
  149. (*$HPPEMIT ''*)
  150. (*$HPPEMIT '} REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER;'*)
  151. (*$HPPEMIT ''*)
  152. (*$HPPEMIT '#ifndef REPARSE_DATA_BUFFER_HEADER_SIZE'*)
  153. (*$HPPEMIT '#define REPARSE_DATA_BUFFER_HEADER_SIZE 8'*)
  154. (*$HPPEMIT '#endif'*)
  155. (*$HPPEMIT ''*)
  156. (*$HPPEMIT 'typedef struct _REPARSE_POINT_INFORMATION {'*)
  157. (*$HPPEMIT ' WORD ReparseDataLength;'*)
  158. (*$HPPEMIT ' WORD UnparsedNameLength;'*)
  159. (*$HPPEMIT '} REPARSE_POINT_INFORMATION, *PREPARSE_POINT_INFORMATION;'*)
  160. (*$HPPEMIT ''*)
  161. (*$HPPEMIT '#ifndef IO_REPARSE_TAG_VALID_VALUES'*)
  162. (*$HPPEMIT '#define IO_REPARSE_TAG_VALID_VALUES 0x0E000FFFF'*)
  163. (*$HPPEMIT '#endif'*)
  164. (*$HPPEMIT ''*)
  165. type
  166. {$EXTERNALSYM _REPARSE_DATA_BUFFER}
  167. _REPARSE_DATA_BUFFER = record
  168. ReparseTag: DWORD;
  169. ReparseDataLength: Word;
  170. Reserved: Word;
  171. case Integer of
  172. 0: ( // SymbolicLinkReparseBuffer and MountPointReparseBuffer
  173. SubstituteNameOffset: Word;
  174. SubstituteNameLength: Word;
  175. PrintNameOffset: Word;
  176. PrintNameLength: Word;
  177. PathBuffer: array [0..0] of WCHAR);
  178. 1: ( // GenericReparseBuffer
  179. DataBuffer: array [0..0] of Byte);
  180. end;
  181. {$EXTERNALSYM REPARSE_DATA_BUFFER}
  182. REPARSE_DATA_BUFFER = _REPARSE_DATA_BUFFER;
  183. {$EXTERNALSYM PREPARSE_DATA_BUFFER}
  184. PREPARSE_DATA_BUFFER = ^_REPARSE_DATA_BUFFER;
  185. TReparseDataBuffer = _REPARSE_DATA_BUFFER;
  186. PReparseDataBuffer = PREPARSE_DATA_BUFFER;
  187. const
  188. {$EXTERNALSYM REPARSE_DATA_BUFFER_HEADER_SIZE}
  189. REPARSE_DATA_BUFFER_HEADER_SIZE = 8;
  190. type
  191. {$EXTERNALSYM _REPARSE_POINT_INFORMATION}
  192. _REPARSE_POINT_INFORMATION = record
  193. ReparseDataLength: Word;
  194. UnparsedNameLength: Word;
  195. end;
  196. {$EXTERNALSYM REPARSE_POINT_INFORMATION}
  197. REPARSE_POINT_INFORMATION = _REPARSE_POINT_INFORMATION;
  198. {$EXTERNALSYM PREPARSE_POINT_INFORMATION}
  199. PREPARSE_POINT_INFORMATION = ^_REPARSE_POINT_INFORMATION;
  200. TReparsePointInformation = _REPARSE_POINT_INFORMATION;
  201. PReparsePointInformation = PREPARSE_POINT_INFORMATION;
  202. const
  203. {$EXTERNALSYM IO_REPARSE_TAG_VALID_VALUES}
  204. IO_REPARSE_TAG_VALID_VALUES = DWORD($E000FFFF);
  205. //==================================================================================================
  206. // from JwaWinNT.pas (few declarations from JwaWinType)
  207. const
  208. MAXLONGLONG = $7fffffffffffffff;
  209. {$EXTERNALSYM MAXLONGLONG}
  210. {$IFNDEF FPC}
  211. type
  212. ULONGLONG = Int64;
  213. {$EXTERNALSYM ULONGLONG}
  214. PLONGLONG = ^LONGLONG;
  215. {$EXTERNALSYM PLONGLONG}
  216. PULONGLONG = ^ULONGLONG;
  217. {$EXTERNALSYM PULONGLONG}
  218. {$ENDIF ~FPC}
  219. const
  220. ANYSIZE_ARRAY = 1;
  221. {$EXTERNALSYM ANYSIZE_ARRAY}
  222. MAX_NATURAL_ALIGNMENT = SizeOf(ULONG);
  223. {$EXTERNALSYM MAX_NATURAL_ALIGNMENT}
  224. // line 72
  225. const
  226. VER_SERVER_NT = DWORD($80000000);
  227. {$EXTERNALSYM VER_SERVER_NT}
  228. VER_WORKSTATION_NT = $40000000;
  229. {$EXTERNALSYM VER_WORKSTATION_NT}
  230. VER_SUITE_SMALLBUSINESS = $00000001;
  231. {$EXTERNALSYM VER_SUITE_SMALLBUSINESS}
  232. VER_SUITE_ENTERPRISE = $00000002;
  233. {$EXTERNALSYM VER_SUITE_ENTERPRISE}
  234. VER_SUITE_BACKOFFICE = $00000004;
  235. {$EXTERNALSYM VER_SUITE_BACKOFFICE}
  236. VER_SUITE_COMMUNICATIONS = $00000008;
  237. {$EXTERNALSYM VER_SUITE_COMMUNICATIONS}
  238. VER_SUITE_TERMINAL = $00000010;
  239. {$EXTERNALSYM VER_SUITE_TERMINAL}
  240. VER_SUITE_SMALLBUSINESS_RESTRICTED = $00000020;
  241. {$EXTERNALSYM VER_SUITE_SMALLBUSINESS_RESTRICTED}
  242. VER_SUITE_EMBEDDEDNT = $00000040;
  243. {$EXTERNALSYM VER_SUITE_EMBEDDEDNT}
  244. VER_SUITE_DATACENTER = $00000080;
  245. {$EXTERNALSYM VER_SUITE_DATACENTER}
  246. VER_SUITE_SINGLEUSERTS = $00000100;
  247. {$EXTERNALSYM VER_SUITE_SINGLEUSERTS}
  248. VER_SUITE_PERSONAL = $00000200;
  249. {$EXTERNALSYM VER_SUITE_PERSONAL}
  250. VER_SUITE_BLADE = $00000400;
  251. {$EXTERNALSYM VER_SUITE_BLADE}
  252. VER_SUITE_EMBEDDED_RESTRICTED = $00000800;
  253. {$EXTERNALSYM VER_SUITE_EMBEDDED_RESTRICTED}
  254. VER_SUITE_SECURITY_APPLIANCE = $00001000;
  255. {$EXTERNALSYM VER_SUITE_SECURITY_APPLIANCE}
  256. VER_SUITE_STORAGE_SERVER = $00002000;
  257. {$EXTERNALSYM VER_SUITE_STORAGE_SERVER}
  258. VER_SUITE_COMPUTE_SERVER = $00004000;
  259. {$EXTERNALSYM VER_SUITE_COMPUTE_SERVER}
  260. // line 515
  261. //
  262. // A language ID is a 16 bit value which is the combination of a
  263. // primary language ID and a secondary language ID. The bits are
  264. // allocated as follows:
  265. //
  266. // +-----------------------+-------------------------+
  267. // | Sublanguage ID | Primary Language ID |
  268. // +-----------------------+-------------------------+
  269. // 15 10 9 0 bit
  270. //
  271. //
  272. // Language ID creation/extraction macros:
  273. //
  274. // MAKELANGID - construct language id from a primary language id and
  275. // a sublanguage id.
  276. // PRIMARYLANGID - extract primary language id from a language id.
  277. // SUBLANGID - extract sublanguage id from a language id.
  278. //
  279. function MAKELANGID(PrimaryLang, SubLang: USHORT): WORD;
  280. {$EXTERNALSYM MAKELANGID}
  281. function PRIMARYLANGID(LangId: WORD): WORD;
  282. {$EXTERNALSYM PRIMARYLANGID}
  283. function SUBLANGID(LangId: WORD): WORD;
  284. {$EXTERNALSYM SUBLANGID}
  285. //
  286. // A locale ID is a 32 bit value which is the combination of a
  287. // language ID, a sort ID, and a reserved area. The bits are
  288. // allocated as follows:
  289. //
  290. // +-------------+---------+-------------------------+
  291. // | Reserved | Sort ID | Language ID |
  292. // +-------------+---------+-------------------------+
  293. // 31 20 19 16 15 0 bit
  294. //
  295. //
  296. // Locale ID creation/extraction macros:
  297. //
  298. // MAKELCID - construct the locale id from a language id and a sort id.
  299. // MAKESORTLCID - construct the locale id from a language id, sort id, and sort version.
  300. // LANGIDFROMLCID - extract the language id from a locale id.
  301. // SORTIDFROMLCID - extract the sort id from a locale id.
  302. // SORTVERSIONFROMLCID - extract the sort version from a locale id.
  303. //
  304. const
  305. NLS_VALID_LOCALE_MASK = $000fffff;
  306. {$EXTERNALSYM NLS_VALID_LOCALE_MASK}
  307. function MAKELCID(LangId, SortId: WORD): DWORD;
  308. {$EXTERNALSYM MAKELCID}
  309. function MAKESORTLCID(LangId, SortId, SortVersion: WORD): DWORD;
  310. {$EXTERNALSYM MAKESORTLCID}
  311. function LANGIDFROMLCID(LocaleId: LCID): WORD;
  312. {$EXTERNALSYM LANGIDFROMLCID}
  313. function SORTIDFROMLCID(LocaleId: LCID): WORD;
  314. {$EXTERNALSYM SORTIDFROMLCID}
  315. function SORTVERSIONFROMLCID(LocaleId: LCID): WORD;
  316. {$EXTERNALSYM SORTVERSIONFROMLCID}
  317. // line 1154
  318. ////////////////////////////////////////////////////////////////////////
  319. // //
  320. // Security Id (SID) //
  321. // //
  322. ////////////////////////////////////////////////////////////////////////
  323. //
  324. //
  325. // Pictorially the structure of an SID is as follows:
  326. //
  327. // 1 1 1 1 1 1
  328. // 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  329. // +---------------------------------------------------------------+
  330. // | SubAuthorityCount |Reserved1 (SBZ)| Revision |
  331. // +---------------------------------------------------------------+
  332. // | IdentifierAuthority[0] |
  333. // +---------------------------------------------------------------+
  334. // | IdentifierAuthority[1] |
  335. // +---------------------------------------------------------------+
  336. // | IdentifierAuthority[2] |
  337. // +---------------------------------------------------------------+
  338. // | |
  339. // +- - - - - - - - SubAuthority[] - - - - - - - - -+
  340. // | |
  341. // +---------------------------------------------------------------+
  342. //
  343. //
  344. {$IFNDEF FPC}
  345. type
  346. _SID_IDENTIFIER_AUTHORITY = record
  347. Value: array [0..5] of Byte;
  348. end;
  349. {$EXTERNALSYM _SID_IDENTIFIER_AUTHORITY}
  350. SID_IDENTIFIER_AUTHORITY = _SID_IDENTIFIER_AUTHORITY;
  351. {$EXTERNALSYM SID_IDENTIFIER_AUTHORITY}
  352. PSID_IDENTIFIER_AUTHORITY = ^_SID_IDENTIFIER_AUTHORITY;
  353. {$EXTERNALSYM PSID_IDENTIFIER_AUTHORITY}
  354. // PSid = ^SID;
  355. _SID = record
  356. Revision: Byte;
  357. SubAuthorityCount: Byte;
  358. IdentifierAuthority: SID_IDENTIFIER_AUTHORITY;
  359. SubAuthority: array [0..ANYSIZE_ARRAY - 1] of DWORD;
  360. end;
  361. {$EXTERNALSYM _SID}
  362. SID = _SID;
  363. {$EXTERNALSYM SID}
  364. PPSID = ^PSID;
  365. {$NODEFINE PPSID}
  366. TSid = SID;
  367. {$ENDIF ~FPC}
  368. const
  369. SID_REVISION = (1); // Current revision level
  370. {$EXTERNALSYM SID_REVISION}
  371. SID_MAX_SUB_AUTHORITIES = (15);
  372. {$EXTERNALSYM SID_MAX_SUB_AUTHORITIES}
  373. SID_RECOMMENDED_SUB_AUTHORITIES = (1); // Will change to around 6 in a future release.
  374. {$EXTERNALSYM SID_RECOMMENDED_SUB_AUTHORITIES}
  375. SECURITY_MAX_SID_SIZE = SizeOf(SID) - SizeOf(DWORD) + (SID_MAX_SUB_AUTHORITIES * SizeOf(DWORD));
  376. {$EXTERNALSYM SECURITY_MAX_SID_SIZE}
  377. {$IFNDEF FPC}
  378. SidTypeUser = 1;
  379. {$EXTERNALSYM SidTypeUser}
  380. SidTypeGroup = 2;
  381. {$EXTERNALSYM SidTypeGroup}
  382. SidTypeDomain = 3;
  383. {$EXTERNALSYM SidTypeDomain}
  384. SidTypeAlias = 4;
  385. {$EXTERNALSYM SidTypeAlias}
  386. SidTypeWellKnownGroup = 5;
  387. {$EXTERNALSYM SidTypeWellKnownGroup}
  388. SidTypeDeletedAccount = 6;
  389. {$EXTERNALSYM SidTypeDeletedAccount}
  390. SidTypeInvalid = 7;
  391. {$EXTERNALSYM SidTypeInvalid}
  392. SidTypeUnknown = 8;
  393. {$EXTERNALSYM SidTypeUnknown}
  394. SidTypeComputer = 9;
  395. {$EXTERNALSYM SidTypeComputer}
  396. type
  397. _SID_NAME_USE = DWORD;
  398. {$EXTERNALSYM _SID_NAME_USE}
  399. // SID_NAME_USE = _SID_NAME_USE;
  400. // {$EXTERNALSYM SID_NAME_USE}
  401. PSID_NAME_USE = ^SID_NAME_USE;
  402. {$EXTERNALSYM PSID_NAME_USE}
  403. TSidNameUse = SID_NAME_USE;
  404. PSidNameUSe = PSID_NAME_USE;
  405. PSID_AND_ATTRIBUTES = ^SID_AND_ATTRIBUTES;
  406. {$EXTERNALSYM PSID_AND_ATTRIBUTES}
  407. _SID_AND_ATTRIBUTES = record
  408. Sid: PSID;
  409. Attributes: DWORD;
  410. end;
  411. {$EXTERNALSYM _SID_AND_ATTRIBUTES}
  412. SID_AND_ATTRIBUTES = _SID_AND_ATTRIBUTES;
  413. {$EXTERNALSYM SID_AND_ATTRIBUTES}
  414. TSidAndAttributes = SID_AND_ATTRIBUTES;
  415. PSidAndAttributes = PSID_AND_ATTRIBUTES;
  416. SID_AND_ATTRIBUTES_ARRAY = array [0..ANYSIZE_ARRAY - 1] of SID_AND_ATTRIBUTES;
  417. {$EXTERNALSYM SID_AND_ATTRIBUTES_ARRAY}
  418. PSID_AND_ATTRIBUTES_ARRAY = ^SID_AND_ATTRIBUTES_ARRAY;
  419. {$EXTERNALSYM PSID_AND_ATTRIBUTES_ARRAY}
  420. PSidAndAttributesArray = ^TSidAndAttributesArray;
  421. TSidAndAttributesArray = SID_AND_ATTRIBUTES_ARRAY;
  422. {$ENDIF ~FPC}
  423. /////////////////////////////////////////////////////////////////////////////
  424. // //
  425. // Universal well-known SIDs //
  426. // //
  427. // Null SID S-1-0-0 //
  428. // World S-1-1-0 //
  429. // Local S-1-2-0 //
  430. // Creator Owner ID S-1-3-0 //
  431. // Creator Group ID S-1-3-1 //
  432. // Creator Owner Server ID S-1-3-2 //
  433. // Creator Group Server ID S-1-3-3 //
  434. // //
  435. // (Non-unique IDs) S-1-4 //
  436. // //
  437. /////////////////////////////////////////////////////////////////////////////
  438. const
  439. SECURITY_NULL_SID_AUTHORITY: TSidIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 0));
  440. {$EXTERNALSYM SECURITY_NULL_SID_AUTHORITY}
  441. SECURITY_WORLD_SID_AUTHORITY: TSidIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 1));
  442. {$EXTERNALSYM SECURITY_WORLD_SID_AUTHORITY}
  443. SECURITY_LOCAL_SID_AUTHORITY: TSidIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 2));
  444. {$EXTERNALSYM SECURITY_LOCAL_SID_AUTHORITY}
  445. SECURITY_CREATOR_SID_AUTHORITY: TSidIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 3));
  446. {$EXTERNALSYM SECURITY_CREATOR_SID_AUTHORITY}
  447. SECURITY_NON_UNIQUE_AUTHORITY: TSidIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 4));
  448. {$EXTERNALSYM SECURITY_NON_UNIQUE_AUTHORITY}
  449. SECURITY_RESOURCE_MANAGER_AUTHORITY: TSidIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 9));
  450. {$EXTERNALSYM SECURITY_RESOURCE_MANAGER_AUTHORITY}
  451. SECURITY_NULL_RID = ($00000000);
  452. {$EXTERNALSYM SECURITY_NULL_RID}
  453. SECURITY_WORLD_RID = ($00000000);
  454. {$EXTERNALSYM SECURITY_WORLD_RID}
  455. SECURITY_LOCAL_RID = ($00000000);
  456. {$EXTERNALSYM SECURITY_LOCAL_RID}
  457. SECURITY_CREATOR_OWNER_RID = ($00000000);
  458. {$EXTERNALSYM SECURITY_CREATOR_OWNER_RID}
  459. SECURITY_CREATOR_GROUP_RID = ($00000001);
  460. {$EXTERNALSYM SECURITY_CREATOR_GROUP_RID}
  461. SECURITY_CREATOR_OWNER_SERVER_RID = ($00000002);
  462. {$EXTERNALSYM SECURITY_CREATOR_OWNER_SERVER_RID}
  463. SECURITY_CREATOR_GROUP_SERVER_RID = ($00000003);
  464. {$EXTERNALSYM SECURITY_CREATOR_GROUP_SERVER_RID}
  465. /////////////////////////////////////////////////////////////////////////////
  466. // //
  467. // NT well-known SIDs //
  468. // //
  469. // NT Authority S-1-5 //
  470. // Dialup S-1-5-1 //
  471. // //
  472. // Network S-1-5-2 //
  473. // Batch S-1-5-3 //
  474. // Interactive S-1-5-4 //
  475. // (Logon IDs) S-1-5-5-X-Y //
  476. // Service S-1-5-6 //
  477. // AnonymousLogon S-1-5-7 (aka null logon session) //
  478. // Proxy S-1-5-8 //
  479. // Enterprise DC (EDC) S-1-5-9 (aka domain controller account) //
  480. // Self S-1-5-10 (self RID) //
  481. // Authenticated User S-1-5-11 (Authenticated user somewhere) //
  482. // Restricted Code S-1-5-12 (Running restricted code) //
  483. // Terminal Server S-1-5-13 (Running on Terminal Server) //
  484. // Remote Logon S-1-5-14 (Remote Interactive Logon) //
  485. // This Organization S-1-5-15 //
  486. // //
  487. // Local System S-1-5-18 //
  488. // Local Service S-1-5-19 //
  489. // Network Service S-1-5-20 //
  490. // //
  491. // (NT non-unique IDs) S-1-5-0x15-... (NT Domain Sids) //
  492. // //
  493. // (Built-in domain) S-1-5-0x20 //
  494. // //
  495. // (Security Package IDs) S-1-5-0x40 //
  496. // NTLM Authentication S-1-5-0x40-10 //
  497. // SChannel Authentication S-1-5-0x40-14 //
  498. // Digest Authentication S-1-5-0x40-21 //
  499. // //
  500. // Other Organization S-1-5-1000 (>=1000 can not be filtered) //
  501. // //
  502. // //
  503. // NOTE: the relative identifier values (RIDs) determine which security //
  504. // boundaries the SID is allowed to cross. Before adding new RIDs, //
  505. // a determination needs to be made regarding which range they should //
  506. // be added to in order to ensure proper "SID filtering" //
  507. // //
  508. /////////////////////////////////////////////////////////////////////////////
  509. const
  510. SECURITY_NT_AUTHORITY: TSidIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 5));
  511. {$EXTERNALSYM SECURITY_NT_AUTHORITY}
  512. SECURITY_DIALUP_RID = ($00000001);
  513. {$EXTERNALSYM SECURITY_DIALUP_RID}
  514. SECURITY_NETWORK_RID = ($00000002);
  515. {$EXTERNALSYM SECURITY_NETWORK_RID}
  516. SECURITY_BATCH_RID = ($00000003);
  517. {$EXTERNALSYM SECURITY_BATCH_RID}
  518. SECURITY_INTERACTIVE_RID = ($00000004);
  519. {$EXTERNALSYM SECURITY_INTERACTIVE_RID}
  520. SECURITY_LOGON_IDS_RID = ($00000005);
  521. {$EXTERNALSYM SECURITY_LOGON_IDS_RID}
  522. SECURITY_LOGON_IDS_RID_COUNT = (3);
  523. {$EXTERNALSYM SECURITY_LOGON_IDS_RID_COUNT}
  524. SECURITY_SERVICE_RID = ($00000006);
  525. {$EXTERNALSYM SECURITY_SERVICE_RID}
  526. SECURITY_ANONYMOUS_LOGON_RID = ($00000007);
  527. {$EXTERNALSYM SECURITY_ANONYMOUS_LOGON_RID}
  528. SECURITY_PROXY_RID = ($00000008);
  529. {$EXTERNALSYM SECURITY_PROXY_RID}
  530. SECURITY_ENTERPRISE_CONTROLLERS_RID = ($00000009);
  531. {$EXTERNALSYM SECURITY_ENTERPRISE_CONTROLLERS_RID}
  532. SECURITY_SERVER_LOGON_RID = SECURITY_ENTERPRISE_CONTROLLERS_RID;
  533. {$EXTERNALSYM SECURITY_SERVER_LOGON_RID}
  534. SECURITY_PRINCIPAL_SELF_RID = ($0000000A);
  535. {$EXTERNALSYM SECURITY_PRINCIPAL_SELF_RID}
  536. SECURITY_AUTHENTICATED_USER_RID = ($0000000B);
  537. {$EXTERNALSYM SECURITY_AUTHENTICATED_USER_RID}
  538. SECURITY_RESTRICTED_CODE_RID = ($0000000C);
  539. {$EXTERNALSYM SECURITY_RESTRICTED_CODE_RID}
  540. SECURITY_TERMINAL_SERVER_RID = ($0000000D);
  541. {$EXTERNALSYM SECURITY_TERMINAL_SERVER_RID}
  542. SECURITY_REMOTE_LOGON_RID = ($0000000E);
  543. {$EXTERNALSYM SECURITY_REMOTE_LOGON_RID}
  544. SECURITY_THIS_ORGANIZATION_RID = ($0000000F);
  545. {$EXTERNALSYM SECURITY_THIS_ORGANIZATION_RID}
  546. SECURITY_LOCAL_SYSTEM_RID = ($00000012);
  547. {$EXTERNALSYM SECURITY_LOCAL_SYSTEM_RID}
  548. SECURITY_LOCAL_SERVICE_RID = ($00000013);
  549. {$EXTERNALSYM SECURITY_LOCAL_SERVICE_RID}
  550. SECURITY_NETWORK_SERVICE_RID = ($00000014);
  551. {$EXTERNALSYM SECURITY_NETWORK_SERVICE_RID}
  552. SECURITY_NT_NON_UNIQUE = ($00000015);
  553. {$EXTERNALSYM SECURITY_NT_NON_UNIQUE}
  554. SECURITY_NT_NON_UNIQUE_SUB_AUTH_COUNT = (3);
  555. {$EXTERNALSYM SECURITY_NT_NON_UNIQUE_SUB_AUTH_COUNT}
  556. SECURITY_BUILTIN_DOMAIN_RID = ($00000020);
  557. {$EXTERNALSYM SECURITY_BUILTIN_DOMAIN_RID}
  558. SECURITY_PACKAGE_BASE_RID = ($00000040);
  559. {$EXTERNALSYM SECURITY_PACKAGE_BASE_RID}
  560. SECURITY_PACKAGE_RID_COUNT = (2);
  561. {$EXTERNALSYM SECURITY_PACKAGE_RID_COUNT}
  562. SECURITY_PACKAGE_NTLM_RID = ($0000000A);
  563. {$EXTERNALSYM SECURITY_PACKAGE_NTLM_RID}
  564. SECURITY_PACKAGE_SCHANNEL_RID = ($0000000E);
  565. {$EXTERNALSYM SECURITY_PACKAGE_SCHANNEL_RID}
  566. SECURITY_PACKAGE_DIGEST_RID = ($00000015);
  567. {$EXTERNALSYM SECURITY_PACKAGE_DIGEST_RID}
  568. SECURITY_MAX_ALWAYS_FILTERED = ($000003E7);
  569. {$EXTERNALSYM SECURITY_MAX_ALWAYS_FILTERED}
  570. SECURITY_MIN_NEVER_FILTERED = ($000003E8);
  571. {$EXTERNALSYM SECURITY_MIN_NEVER_FILTERED}
  572. SECURITY_OTHER_ORGANIZATION_RID = ($000003E8);
  573. {$EXTERNALSYM SECURITY_OTHER_ORGANIZATION_RID}
  574. /////////////////////////////////////////////////////////////////////////////
  575. // //
  576. // well-known domain relative sub-authority values (RIDs)... //
  577. // //
  578. /////////////////////////////////////////////////////////////////////////////
  579. // Well-known users ...
  580. FOREST_USER_RID_MAX = ($000001F3);
  581. {$EXTERNALSYM FOREST_USER_RID_MAX}
  582. DOMAIN_USER_RID_ADMIN = ($000001F4);
  583. {$EXTERNALSYM DOMAIN_USER_RID_ADMIN}
  584. DOMAIN_USER_RID_GUEST = ($000001F5);
  585. {$EXTERNALSYM DOMAIN_USER_RID_GUEST}
  586. DOMAIN_USER_RID_KRBTGT = ($000001F6);
  587. {$EXTERNALSYM DOMAIN_USER_RID_KRBTGT}
  588. DOMAIN_USER_RID_MAX = ($000003E7);
  589. {$EXTERNALSYM DOMAIN_USER_RID_MAX}
  590. // well-known groups ...
  591. DOMAIN_GROUP_RID_ADMINS = ($00000200);
  592. {$EXTERNALSYM DOMAIN_GROUP_RID_ADMINS}
  593. DOMAIN_GROUP_RID_USERS = ($00000201);
  594. {$EXTERNALSYM DOMAIN_GROUP_RID_USERS}
  595. DOMAIN_GROUP_RID_GUESTS = ($00000202);
  596. {$EXTERNALSYM DOMAIN_GROUP_RID_GUESTS}
  597. DOMAIN_GROUP_RID_COMPUTERS = ($00000203);
  598. {$EXTERNALSYM DOMAIN_GROUP_RID_COMPUTERS}
  599. DOMAIN_GROUP_RID_CONTROLLERS = ($00000204);
  600. {$EXTERNALSYM DOMAIN_GROUP_RID_CONTROLLERS}
  601. DOMAIN_GROUP_RID_CERT_ADMINS = ($00000205);
  602. {$EXTERNALSYM DOMAIN_GROUP_RID_CERT_ADMINS}
  603. DOMAIN_GROUP_RID_SCHEMA_ADMINS = ($00000206);
  604. {$EXTERNALSYM DOMAIN_GROUP_RID_SCHEMA_ADMINS}
  605. DOMAIN_GROUP_RID_ENTERPRISE_ADMINS = ($00000207);
  606. {$EXTERNALSYM DOMAIN_GROUP_RID_ENTERPRISE_ADMINS}
  607. DOMAIN_GROUP_RID_POLICY_ADMINS = ($00000208);
  608. {$EXTERNALSYM DOMAIN_GROUP_RID_POLICY_ADMINS}
  609. // well-known aliases ...
  610. DOMAIN_ALIAS_RID_ADMINS = ($00000220);
  611. {$EXTERNALSYM DOMAIN_ALIAS_RID_ADMINS}
  612. DOMAIN_ALIAS_RID_USERS = ($00000221);
  613. {$EXTERNALSYM DOMAIN_ALIAS_RID_USERS}
  614. DOMAIN_ALIAS_RID_GUESTS = ($00000222);
  615. {$EXTERNALSYM DOMAIN_ALIAS_RID_GUESTS}
  616. DOMAIN_ALIAS_RID_POWER_USERS = ($00000223);
  617. {$EXTERNALSYM DOMAIN_ALIAS_RID_POWER_USERS}
  618. DOMAIN_ALIAS_RID_ACCOUNT_OPS = ($00000224);
  619. {$EXTERNALSYM DOMAIN_ALIAS_RID_ACCOUNT_OPS}
  620. DOMAIN_ALIAS_RID_SYSTEM_OPS = ($00000225);
  621. {$EXTERNALSYM DOMAIN_ALIAS_RID_SYSTEM_OPS}
  622. DOMAIN_ALIAS_RID_PRINT_OPS = ($00000226);
  623. {$EXTERNALSYM DOMAIN_ALIAS_RID_PRINT_OPS}
  624. DOMAIN_ALIAS_RID_BACKUP_OPS = ($00000227);
  625. {$EXTERNALSYM DOMAIN_ALIAS_RID_BACKUP_OPS}
  626. DOMAIN_ALIAS_RID_REPLICATOR = ($00000228);
  627. {$EXTERNALSYM DOMAIN_ALIAS_RID_REPLICATOR}
  628. DOMAIN_ALIAS_RID_RAS_SERVERS = ($00000229);
  629. {$EXTERNALSYM DOMAIN_ALIAS_RID_RAS_SERVERS}
  630. DOMAIN_ALIAS_RID_PREW2KCOMPACCESS = ($0000022A);
  631. {$EXTERNALSYM DOMAIN_ALIAS_RID_PREW2KCOMPACCESS}
  632. DOMAIN_ALIAS_RID_REMOTE_DESKTOP_USERS = ($0000022B);
  633. {$EXTERNALSYM DOMAIN_ALIAS_RID_REMOTE_DESKTOP_USERS}
  634. DOMAIN_ALIAS_RID_NETWORK_CONFIGURATION_OPS = ($0000022C);
  635. {$EXTERNALSYM DOMAIN_ALIAS_RID_NETWORK_CONFIGURATION_OPS}
  636. DOMAIN_ALIAS_RID_INCOMING_FOREST_TRUST_BUILDERS = ($0000022D);
  637. {$EXTERNALSYM DOMAIN_ALIAS_RID_INCOMING_FOREST_TRUST_BUILDERS}
  638. DOMAIN_ALIAS_RID_MONITORING_USERS = ($0000022E);
  639. {$EXTERNALSYM DOMAIN_ALIAS_RID_MONITORING_USERS}
  640. DOMAIN_ALIAS_RID_LOGGING_USERS = ($0000022F);
  641. {$EXTERNALSYM DOMAIN_ALIAS_RID_LOGGING_USERS}
  642. DOMAIN_ALIAS_RID_AUTHORIZATIONACCESS = ($00000230);
  643. {$EXTERNALSYM DOMAIN_ALIAS_RID_AUTHORIZATIONACCESS}
  644. DOMAIN_ALIAS_RID_TS_LICENSE_SERVERS = ($00000231);
  645. {$EXTERNALSYM DOMAIN_ALIAS_RID_TS_LICENSE_SERVERS}
  646. // line 2495
  647. ////////////////////////////////////////////////////////////////////////
  648. // //
  649. // NT Defined Privileges //
  650. // //
  651. ////////////////////////////////////////////////////////////////////////
  652. const
  653. SE_CREATE_TOKEN_NAME = 'SeCreateTokenPrivilege';
  654. {$EXTERNALSYM SE_CREATE_TOKEN_NAME}
  655. SE_ASSIGNPRIMARYTOKEN_NAME = 'SeAssignPrimaryTokenPrivilege';
  656. {$EXTERNALSYM SE_ASSIGNPRIMARYTOKEN_NAME}
  657. SE_LOCK_MEMORY_NAME = 'SeLockMemoryPrivilege';
  658. {$EXTERNALSYM SE_LOCK_MEMORY_NAME}
  659. SE_INCREASE_QUOTA_NAME = 'SeIncreaseQuotaPrivilege';
  660. {$EXTERNALSYM SE_INCREASE_QUOTA_NAME}
  661. SE_UNSOLICITED_INPUT_NAME = 'SeUnsolicitedInputPrivilege';
  662. {$EXTERNALSYM SE_UNSOLICITED_INPUT_NAME}
  663. SE_MACHINE_ACCOUNT_NAME = 'SeMachineAccountPrivilege';
  664. {$EXTERNALSYM SE_MACHINE_ACCOUNT_NAME}
  665. SE_TCB_NAME = 'SeTcbPrivilege';
  666. {$EXTERNALSYM SE_TCB_NAME}
  667. SE_SECURITY_NAME = 'SeSecurityPrivilege';
  668. {$EXTERNALSYM SE_SECURITY_NAME}
  669. SE_TAKE_OWNERSHIP_NAME = 'SeTakeOwnershipPrivilege';
  670. {$EXTERNALSYM SE_TAKE_OWNERSHIP_NAME}
  671. SE_LOAD_DRIVER_NAME = 'SeLoadDriverPrivilege';
  672. {$EXTERNALSYM SE_LOAD_DRIVER_NAME}
  673. SE_SYSTEM_PROFILE_NAME = 'SeSystemProfilePrivilege';
  674. {$EXTERNALSYM SE_SYSTEM_PROFILE_NAME}
  675. SE_SYSTEMTIME_NAME = 'SeSystemtimePrivilege';
  676. {$EXTERNALSYM SE_SYSTEMTIME_NAME}
  677. SE_PROF_SINGLE_PROCESS_NAME = 'SeProfileSingleProcessPrivilege';
  678. {$EXTERNALSYM SE_PROF_SINGLE_PROCESS_NAME}
  679. SE_INC_BASE_PRIORITY_NAME = 'SeIncreaseBasePriorityPrivilege';
  680. {$EXTERNALSYM SE_INC_BASE_PRIORITY_NAME}
  681. SE_CREATE_PAGEFILE_NAME = 'SeCreatePagefilePrivilege';
  682. {$EXTERNALSYM SE_CREATE_PAGEFILE_NAME}
  683. SE_CREATE_PERMANENT_NAME = 'SeCreatePermanentPrivilege';
  684. {$EXTERNALSYM SE_CREATE_PERMANENT_NAME}
  685. SE_BACKUP_NAME = 'SeBackupPrivilege';
  686. {$EXTERNALSYM SE_BACKUP_NAME}
  687. SE_RESTORE_NAME = 'SeRestorePrivilege';
  688. {$EXTERNALSYM SE_RESTORE_NAME}
  689. SE_SHUTDOWN_NAME = 'SeShutdownPrivilege';
  690. {$EXTERNALSYM SE_SHUTDOWN_NAME}
  691. SE_DEBUG_NAME = 'SeDebugPrivilege';
  692. {$EXTERNALSYM SE_DEBUG_NAME}
  693. SE_AUDIT_NAME = 'SeAuditPrivilege';
  694. {$EXTERNALSYM SE_AUDIT_NAME}
  695. SE_SYSTEM_ENVIRONMENT_NAME = 'SeSystemEnvironmentPrivilege';
  696. {$EXTERNALSYM SE_SYSTEM_ENVIRONMENT_NAME}
  697. SE_CHANGE_NOTIFY_NAME = 'SeChangeNotifyPrivilege';
  698. {$EXTERNALSYM SE_CHANGE_NOTIFY_NAME}
  699. SE_REMOTE_SHUTDOWN_NAME = 'SeRemoteShutdownPrivilege';
  700. {$EXTERNALSYM SE_REMOTE_SHUTDOWN_NAME}
  701. SE_UNDOCK_NAME = 'SeUndockPrivilege';
  702. {$EXTERNALSYM SE_UNDOCK_NAME}
  703. SE_SYNC_AGENT_NAME = 'SeSyncAgentPrivilege';
  704. {$EXTERNALSYM SE_SYNC_AGENT_NAME}
  705. SE_ENABLE_DELEGATION_NAME = 'SeEnableDelegationPrivilege';
  706. {$EXTERNALSYM SE_ENABLE_DELEGATION_NAME}
  707. SE_MANAGE_VOLUME_NAME = 'SeManageVolumePrivilege';
  708. {$EXTERNALSYM SE_MANAGE_VOLUME_NAME}
  709. SE_IMPERSONATE_NAME = 'SeImpersonatePrivilege';
  710. {$EXTERNALSYM SE_IMPERSONATE_NAME}
  711. SE_CREATE_GLOBAL_NAME = 'SeCreateGlobalPrivilege';
  712. {$EXTERNALSYM SE_CREATE_GLOBAL_NAME}
  713. //
  714. // Thread Information Block (TIB)
  715. //
  716. type
  717. NT_TIB32 = packed record
  718. ExceptionList: DWORD;
  719. StackBase: DWORD;
  720. StackLimit: DWORD;
  721. SubSystemTib: DWORD;
  722. case Integer of
  723. 0 : (
  724. FiberData: DWORD;
  725. ArbitraryUserPointer: DWORD;
  726. Self: DWORD;
  727. );
  728. 1 : (
  729. Version: DWORD;
  730. );
  731. end;
  732. {$EXTERNALSYM NT_TIB32}
  733. PNT_TIB32 = ^NT_TIB32;
  734. {$EXTERNALSYM PNT_TIB32}
  735. NT_TIB64 = packed record
  736. ExceptionList: TJclAddr64;
  737. StackBase: TJclAddr64;
  738. StackLimit: TJclAddr64;
  739. SubSystemTib: TJclAddr64;
  740. case Integer of
  741. 0 : (
  742. FiberData: TJclAddr64;
  743. ArbitraryUserPointer: TJclAddr64;
  744. Self: TJclAddr64;
  745. );
  746. 1 : (
  747. Version: DWORD;
  748. );
  749. end;
  750. {$EXTERNALSYM NT_TIB64}
  751. PNT_TIB64 = ^NT_TIB64;
  752. {$EXTERNALSYM PNT_TIB64}
  753. // line 2686
  754. //
  755. // Token information class structures
  756. //
  757. {$IFNDEF FPC}
  758. type
  759. PTOKEN_USER = ^TOKEN_USER;
  760. {$EXTERNALSYM PTOKEN_USER}
  761. _TOKEN_USER = record
  762. User: SID_AND_ATTRIBUTES;
  763. end;
  764. {$EXTERNALSYM _TOKEN_USER}
  765. TOKEN_USER = _TOKEN_USER;
  766. {$EXTERNALSYM TOKEN_USER}
  767. TTokenUser = TOKEN_USER;
  768. PTokenUser = PTOKEN_USER;
  769. {$ENDIF ~FPC}
  770. // line 3858
  771. //
  772. // Define access rights to files and directories
  773. //
  774. //
  775. // The FILE_READ_DATA and FILE_WRITE_DATA constants are also defined in
  776. // devioctl.h as FILE_READ_ACCESS and FILE_WRITE_ACCESS. The values for these
  777. // constants *MUST* always be in sync.
  778. // The values are redefined in devioctl.h because they must be available to
  779. // both DOS and NT.
  780. //
  781. const
  782. FILE_READ_DATA = ($0001); // file & pipe
  783. {$EXTERNALSYM FILE_READ_DATA}
  784. FILE_LIST_DIRECTORY = ($0001); // directory
  785. {$EXTERNALSYM FILE_LIST_DIRECTORY}
  786. FILE_WRITE_DATA = ($0002); // file & pipe
  787. {$EXTERNALSYM FILE_WRITE_DATA}
  788. FILE_ADD_FILE = ($0002); // directory
  789. {$EXTERNALSYM FILE_ADD_FILE}
  790. FILE_APPEND_DATA = ($0004); // file
  791. {$EXTERNALSYM FILE_APPEND_DATA}
  792. FILE_ADD_SUBDIRECTORY = ($0004); // directory
  793. {$EXTERNALSYM FILE_ADD_SUBDIRECTORY}
  794. FILE_CREATE_PIPE_INSTANCE = ($0004); // named pipe
  795. {$EXTERNALSYM FILE_CREATE_PIPE_INSTANCE}
  796. FILE_READ_EA = ($0008); // file & directory
  797. {$EXTERNALSYM FILE_READ_EA}
  798. FILE_WRITE_EA = ($0010); // file & directory
  799. {$EXTERNALSYM FILE_WRITE_EA}
  800. FILE_EXECUTE = ($0020); // file
  801. {$EXTERNALSYM FILE_EXECUTE}
  802. FILE_TRAVERSE = ($0020); // directory
  803. {$EXTERNALSYM FILE_TRAVERSE}
  804. FILE_DELETE_CHILD = ($0040); // directory
  805. {$EXTERNALSYM FILE_DELETE_CHILD}
  806. FILE_READ_ATTRIBUTES = ($0080); // all
  807. {$EXTERNALSYM FILE_READ_ATTRIBUTES}
  808. FILE_WRITE_ATTRIBUTES = ($0100); // all
  809. {$EXTERNALSYM FILE_WRITE_ATTRIBUTES}
  810. FILE_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or $1FF);
  811. {$EXTERNALSYM FILE_ALL_ACCESS}
  812. FILE_GENERIC_READ = (STANDARD_RIGHTS_READ or FILE_READ_DATA or
  813. FILE_READ_ATTRIBUTES or FILE_READ_EA or SYNCHRONIZE);
  814. {$EXTERNALSYM FILE_GENERIC_READ}
  815. FILE_GENERIC_WRITE = (STANDARD_RIGHTS_WRITE or FILE_WRITE_DATA or
  816. FILE_WRITE_ATTRIBUTES or FILE_WRITE_EA or FILE_APPEND_DATA or SYNCHRONIZE);
  817. {$EXTERNALSYM FILE_GENERIC_WRITE}
  818. FILE_GENERIC_EXECUTE = (STANDARD_RIGHTS_EXECUTE or FILE_READ_ATTRIBUTES or
  819. FILE_EXECUTE or SYNCHRONIZE);
  820. {$EXTERNALSYM FILE_GENERIC_EXECUTE}
  821. FILE_SHARE_READ = $00000001;
  822. {$EXTERNALSYM FILE_SHARE_READ}
  823. FILE_SHARE_WRITE = $00000002;
  824. {$EXTERNALSYM FILE_SHARE_WRITE}
  825. FILE_SHARE_DELETE = $00000004;
  826. {$EXTERNALSYM FILE_SHARE_DELETE}
  827. FILE_ATTRIBUTE_READONLY = $00000001;
  828. {$EXTERNALSYM FILE_ATTRIBUTE_READONLY}
  829. FILE_ATTRIBUTE_HIDDEN = $00000002;
  830. {$EXTERNALSYM FILE_ATTRIBUTE_HIDDEN}
  831. FILE_ATTRIBUTE_SYSTEM = $00000004;
  832. {$EXTERNALSYM FILE_ATTRIBUTE_SYSTEM}
  833. FILE_ATTRIBUTE_DIRECTORY = $00000010;
  834. {$EXTERNALSYM FILE_ATTRIBUTE_DIRECTORY}
  835. FILE_ATTRIBUTE_ARCHIVE = $00000020;
  836. {$EXTERNALSYM FILE_ATTRIBUTE_ARCHIVE}
  837. FILE_ATTRIBUTE_DEVICE = $00000040;
  838. {$EXTERNALSYM FILE_ATTRIBUTE_DEVICE}
  839. FILE_ATTRIBUTE_NORMAL = $00000080;
  840. {$EXTERNALSYM FILE_ATTRIBUTE_NORMAL}
  841. FILE_ATTRIBUTE_TEMPORARY = $00000100;
  842. {$EXTERNALSYM FILE_ATTRIBUTE_TEMPORARY}
  843. FILE_ATTRIBUTE_SPARSE_FILE = $00000200;
  844. {$EXTERNALSYM FILE_ATTRIBUTE_SPARSE_FILE}
  845. FILE_ATTRIBUTE_REPARSE_POINT = $00000400;
  846. {$EXTERNALSYM FILE_ATTRIBUTE_REPARSE_POINT}
  847. FILE_ATTRIBUTE_COMPRESSED = $00000800;
  848. {$EXTERNALSYM FILE_ATTRIBUTE_COMPRESSED}
  849. FILE_ATTRIBUTE_OFFLINE = $00001000;
  850. {$EXTERNALSYM FILE_ATTRIBUTE_OFFLINE}
  851. FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = $00002000;
  852. {$EXTERNALSYM FILE_ATTRIBUTE_NOT_CONTENT_INDEXED}
  853. FILE_ATTRIBUTE_ENCRYPTED = $00004000;
  854. {$EXTERNALSYM FILE_ATTRIBUTE_ENCRYPTED}
  855. FILE_NOTIFY_CHANGE_FILE_NAME = $00000001;
  856. {$EXTERNALSYM FILE_NOTIFY_CHANGE_FILE_NAME}
  857. FILE_NOTIFY_CHANGE_DIR_NAME = $00000002;
  858. {$EXTERNALSYM FILE_NOTIFY_CHANGE_DIR_NAME}
  859. FILE_NOTIFY_CHANGE_ATTRIBUTES = $00000004;
  860. {$EXTERNALSYM FILE_NOTIFY_CHANGE_ATTRIBUTES}
  861. FILE_NOTIFY_CHANGE_SIZE = $00000008;
  862. {$EXTERNALSYM FILE_NOTIFY_CHANGE_SIZE}
  863. FILE_NOTIFY_CHANGE_LAST_WRITE = $00000010;
  864. {$EXTERNALSYM FILE_NOTIFY_CHANGE_LAST_WRITE}
  865. FILE_NOTIFY_CHANGE_LAST_ACCESS = $00000020;
  866. {$EXTERNALSYM FILE_NOTIFY_CHANGE_LAST_ACCESS}
  867. FILE_NOTIFY_CHANGE_CREATION = $00000040;
  868. {$EXTERNALSYM FILE_NOTIFY_CHANGE_CREATION}
  869. FILE_NOTIFY_CHANGE_SECURITY = $00000100;
  870. {$EXTERNALSYM FILE_NOTIFY_CHANGE_SECURITY}
  871. FILE_ACTION_ADDED = $00000001;
  872. {$EXTERNALSYM FILE_ACTION_ADDED}
  873. FILE_ACTION_REMOVED = $00000002;
  874. {$EXTERNALSYM FILE_ACTION_REMOVED}
  875. FILE_ACTION_MODIFIED = $00000003;
  876. {$EXTERNALSYM FILE_ACTION_MODIFIED}
  877. FILE_ACTION_RENAMED_OLD_NAME = $00000004;
  878. {$EXTERNALSYM FILE_ACTION_RENAMED_OLD_NAME}
  879. FILE_ACTION_RENAMED_NEW_NAME = $00000005;
  880. {$EXTERNALSYM FILE_ACTION_RENAMED_NEW_NAME}
  881. MAILSLOT_NO_MESSAGE = DWORD(-1);
  882. {$EXTERNALSYM MAILSLOT_NO_MESSAGE}
  883. MAILSLOT_WAIT_FOREVER = DWORD(-1);
  884. {$EXTERNALSYM MAILSLOT_WAIT_FOREVER}
  885. FILE_CASE_SENSITIVE_SEARCH = $00000001;
  886. {$EXTERNALSYM FILE_CASE_SENSITIVE_SEARCH}
  887. FILE_CASE_PRESERVED_NAMES = $00000002;
  888. {$EXTERNALSYM FILE_CASE_PRESERVED_NAMES}
  889. FILE_UNICODE_ON_DISK = $00000004;
  890. {$EXTERNALSYM FILE_UNICODE_ON_DISK}
  891. FILE_PERSISTENT_ACLS = $00000008;
  892. {$EXTERNALSYM FILE_PERSISTENT_ACLS}
  893. FILE_FILE_COMPRESSION = $00000010;
  894. {$EXTERNALSYM FILE_FILE_COMPRESSION}
  895. FILE_VOLUME_QUOTAS = $00000020;
  896. {$EXTERNALSYM FILE_VOLUME_QUOTAS}
  897. FILE_SUPPORTS_SPARSE_FILES = $00000040;
  898. {$EXTERNALSYM FILE_SUPPORTS_SPARSE_FILES}
  899. FILE_SUPPORTS_REPARSE_POINTS = $00000080;
  900. {$EXTERNALSYM FILE_SUPPORTS_REPARSE_POINTS}
  901. FILE_SUPPORTS_REMOTE_STORAGE = $00000100;
  902. {$EXTERNALSYM FILE_SUPPORTS_REMOTE_STORAGE}
  903. FILE_VOLUME_IS_COMPRESSED = $00008000;
  904. {$EXTERNALSYM FILE_VOLUME_IS_COMPRESSED}
  905. FILE_SUPPORTS_OBJECT_IDS = $00010000;
  906. {$EXTERNALSYM FILE_SUPPORTS_OBJECT_IDS}
  907. FILE_SUPPORTS_ENCRYPTION = $00020000;
  908. {$EXTERNALSYM FILE_SUPPORTS_ENCRYPTION}
  909. FILE_NAMED_STREAMS = $00040000;
  910. {$EXTERNALSYM FILE_NAMED_STREAMS}
  911. FILE_READ_ONLY_VOLUME = $00080000;
  912. {$EXTERNALSYM FILE_READ_ONLY_VOLUME}
  913. // line 4052
  914. //
  915. // The reparse GUID structure is used by all 3rd party layered drivers to
  916. // store data in a reparse point. For non-Microsoft tags, The GUID field
  917. // cannot be GUID_NULL.
  918. // The constraints on reparse tags are defined below.
  919. // Microsoft tags can also be used with this format of the reparse point buffer.
  920. //
  921. type
  922. TGenericReparseBuffer = record
  923. DataBuffer: array [0..0] of BYTE;
  924. end;
  925. PREPARSE_GUID_DATA_BUFFER = ^REPARSE_GUID_DATA_BUFFER;
  926. {$EXTERNALSYM PREPARSE_GUID_DATA_BUFFER}
  927. _REPARSE_GUID_DATA_BUFFER = record
  928. ReparseTag: DWORD;
  929. ReparseDataLength: WORD;
  930. Reserved: WORD;
  931. ReparseGuid: TGUID;
  932. GenericReparseBuffer: TGenericReparseBuffer;
  933. end;
  934. {$EXTERNALSYM _REPARSE_GUID_DATA_BUFFER}
  935. REPARSE_GUID_DATA_BUFFER = _REPARSE_GUID_DATA_BUFFER;
  936. {$EXTERNALSYM REPARSE_GUID_DATA_BUFFER}
  937. TReparseGuidDataBuffer = REPARSE_GUID_DATA_BUFFER;
  938. PReparseGuidDataBuffer = PREPARSE_GUID_DATA_BUFFER;
  939. const
  940. REPARSE_GUID_DATA_BUFFER_HEADER_SIZE = 24;
  941. {$EXTERNALSYM REPARSE_GUID_DATA_BUFFER_HEADER_SIZE}
  942. //
  943. // Maximum allowed size of the reparse data.
  944. //
  945. const
  946. MAXIMUM_REPARSE_DATA_BUFFER_SIZE = 16 * 1024;
  947. {$EXTERNALSYM MAXIMUM_REPARSE_DATA_BUFFER_SIZE}
  948. //
  949. // Predefined reparse tags.
  950. // These tags need to avoid conflicting with IO_REMOUNT defined in ntos\inc\io.h
  951. //
  952. IO_REPARSE_TAG_RESERVED_ZERO = (0);
  953. {$EXTERNALSYM IO_REPARSE_TAG_RESERVED_ZERO}
  954. IO_REPARSE_TAG_RESERVED_ONE = (1);
  955. {$EXTERNALSYM IO_REPARSE_TAG_RESERVED_ONE}
  956. //
  957. // The value of the following constant needs to satisfy the following conditions:
  958. // (1) Be at least as large as the largest of the reserved tags.
  959. // (2) Be strictly smaller than all the tags in use.
  960. //
  961. IO_REPARSE_TAG_RESERVED_RANGE = IO_REPARSE_TAG_RESERVED_ONE;
  962. {$EXTERNALSYM IO_REPARSE_TAG_RESERVED_RANGE}
  963. //
  964. // The reparse tags are a DWORD. The 32 bits are laid out as follows:
  965. //
  966. // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  967. // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  968. // +-+-+-+-+-----------------------+-------------------------------+
  969. // |M|R|N|R| Reserved bits | Reparse Tag Value |
  970. // +-+-+-+-+-----------------------+-------------------------------+
  971. //
  972. // M is the Microsoft bit. When set to 1, it denotes a tag owned by Microsoft.
  973. // All ISVs must use a tag with a 0 in this position.
  974. // Note: If a Microsoft tag is used by non-Microsoft software, the
  975. // behavior is not defined.
  976. //
  977. // R is reserved. Must be zero for non-Microsoft tags.
  978. //
  979. // N is name surrogate. When set to 1, the file represents another named
  980. // entity in the system.
  981. //
  982. // The M and N bits are OR-able.
  983. // The following macros check for the M and N bit values:
  984. //
  985. //
  986. // Macro to determine whether a reparse point tag corresponds to a tag
  987. // owned by Microsoft.
  988. //
  989. function IsReparseTagMicrosoft(Tag: ULONG): Boolean;
  990. {$EXTERNALSYM IsReparseTagMicrosoft}
  991. //
  992. // Macro to determine whether a reparse point tag corresponds to a file
  993. // that is to be displayed with the slow icon overlay.
  994. //
  995. function IsReparseTagHighLatency(Tag: ULONG): Boolean;
  996. {$EXTERNALSYM IsReparseTagHighLatency}
  997. //
  998. // Macro to determine whether a reparse point tag is a name surrogate
  999. //
  1000. function IsReparseTagNameSurrogate(Tag: ULONG): Boolean;
  1001. {$EXTERNALSYM IsReparseTagNameSurrogate}
  1002. const
  1003. IO_REPARSE_TAG_MOUNT_POINT = DWORD($A0000003);
  1004. {$EXTERNALSYM IO_REPARSE_TAG_MOUNT_POINT}
  1005. IO_REPARSE_TAG_HSM = DWORD($C0000004);
  1006. {$EXTERNALSYM IO_REPARSE_TAG_HSM}
  1007. IO_REPARSE_TAG_SIS = DWORD($80000007);
  1008. {$EXTERNALSYM IO_REPARSE_TAG_SIS}
  1009. IO_REPARSE_TAG_DFS = DWORD($8000000A);
  1010. {$EXTERNALSYM IO_REPARSE_TAG_DFS}
  1011. IO_REPARSE_TAG_FILTER_MANAGER = DWORD($8000000B);
  1012. {$EXTERNALSYM IO_REPARSE_TAG_FILTER_MANAGER}
  1013. IO_COMPLETION_MODIFY_STATE = $0002;
  1014. {$EXTERNALSYM IO_COMPLETION_MODIFY_STATE}
  1015. IO_COMPLETION_ALL_ACCESS = DWORD(STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or $3);
  1016. {$EXTERNALSYM IO_COMPLETION_ALL_ACCESS}
  1017. DUPLICATE_CLOSE_SOURCE = $00000001;
  1018. {$EXTERNALSYM DUPLICATE_CLOSE_SOURCE}
  1019. DUPLICATE_SAME_ACCESS = $00000002;
  1020. {$EXTERNALSYM DUPLICATE_SAME_ACCESS}
  1021. // line 4763
  1022. //
  1023. // File header format.
  1024. //
  1025. {$IFNDEF FPC}
  1026. type
  1027. PIMAGE_FILE_HEADER = ^IMAGE_FILE_HEADER;
  1028. {$EXTERNALSYM PIMAGE_FILE_HEADER}
  1029. _IMAGE_FILE_HEADER = record
  1030. Machine: WORD;
  1031. NumberOfSections: WORD;
  1032. TimeDateStamp: DWORD;
  1033. PointerToSymbolTable: DWORD;
  1034. NumberOfSymbols: DWORD;
  1035. SizeOfOptionalHeader: WORD;
  1036. Characteristics: WORD;
  1037. end;
  1038. {$EXTERNALSYM _IMAGE_FILE_HEADER}
  1039. IMAGE_FILE_HEADER = _IMAGE_FILE_HEADER;
  1040. {$EXTERNALSYM IMAGE_FILE_HEADER}
  1041. TImageFileHeader = IMAGE_FILE_HEADER;
  1042. PImageFileHeader = PIMAGE_FILE_HEADER;
  1043. {$ENDIF ~FPC}
  1044. const
  1045. IMAGE_SIZEOF_FILE_HEADER = 20;
  1046. {$EXTERNALSYM IMAGE_SIZEOF_FILE_HEADER}
  1047. IMAGE_FILE_RELOCS_STRIPPED = $0001; // Relocation info stripped from file.
  1048. {$EXTERNALSYM IMAGE_FILE_RELOCS_STRIPPED}
  1049. IMAGE_FILE_EXECUTABLE_IMAGE = $0002; // File is executable (i.e. no unresolved externel references).
  1050. {$EXTERNALSYM IMAGE_FILE_EXECUTABLE_IMAGE}
  1051. IMAGE_FILE_LINE_NUMS_STRIPPED = $0004; // Line nunbers stripped from file.
  1052. {$EXTERNALSYM IMAGE_FILE_LINE_NUMS_STRIPPED}
  1053. IMAGE_FILE_LOCAL_SYMS_STRIPPED = $0008; // Local symbols stripped from file.
  1054. {$EXTERNALSYM IMAGE_FILE_LOCAL_SYMS_STRIPPED}
  1055. IMAGE_FILE_AGGRESIVE_WS_TRIM = $0010; // Agressively trim working set
  1056. {$EXTERNALSYM IMAGE_FILE_AGGRESIVE_WS_TRIM}
  1057. IMAGE_FILE_LARGE_ADDRESS_AWARE = $0020; // App can handle >2gb addresses
  1058. {$EXTERNALSYM IMAGE_FILE_LARGE_ADDRESS_AWARE}
  1059. IMAGE_FILE_BYTES_REVERSED_LO = $0080; // Bytes of machine word are reversed.
  1060. {$EXTERNALSYM IMAGE_FILE_BYTES_REVERSED_LO}
  1061. IMAGE_FILE_32BIT_MACHINE = $0100; // 32 bit word machine.
  1062. {$EXTERNALSYM IMAGE_FILE_32BIT_MACHINE}
  1063. IMAGE_FILE_DEBUG_STRIPPED = $0200; // Debugging info stripped from file in .DBG file
  1064. {$EXTERNALSYM IMAGE_FILE_DEBUG_STRIPPED}
  1065. IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP = $0400; // If Image is on removable media, copy and run from the swap file.
  1066. {$EXTERNALSYM IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP}
  1067. IMA