jwawintype.pas 45 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813
  1. {******************************************************************************}
  2. { }
  3. { Windows Base Types API interface Unit for Object Pascal }
  4. { }
  5. { Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft }
  6. { Corporation. All Rights Reserved. }
  7. { }
  8. { The original file is: basetsd.h, released August 2001. The original Pascal }
  9. { code is: WinType.pas, released December 2000. The initial developer of the }
  10. { Pascal code is Marcel van Brakel (brakelm att chello dott nl). }
  11. { }
  12. { Portions created by Marcel van Brakel are Copyright (C) 1999-2001 }
  13. { Marcel van Brakel. All Rights Reserved. }
  14. { }
  15. { Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI) }
  16. { }
  17. { You may retrieve the latest version of this file at the Project JEDI }
  18. { APILIB home page, located at http://jedi-apilib.sourceforge.net }
  19. { }
  20. { The contents of this file are used with permission, subject to the Mozilla }
  21. { Public License Version 1.1 (the "License"); you may not use this file except }
  22. { in compliance with the License. You may obtain a copy of the License at }
  23. { http://www.mozilla.org/MPL/MPL-1.1.html }
  24. { }
  25. { Software distributed under the License is distributed on an "AS IS" basis, }
  26. { WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
  27. { the specific language governing rights and limitations under the License. }
  28. { }
  29. { Alternatively, the contents of this file may be used under the terms of the }
  30. { GNU Lesser General Public License (the "LGPL License"), in which case the }
  31. { provisions of the LGPL License are applicable instead of those above. }
  32. { If you wish to allow use of your version of this file only under the terms }
  33. { of the LGPL License and not to allow others to use your version of this file }
  34. { under the MPL, indicate your decision by deleting the provisions above and }
  35. { replace them with the notice and other provisions required by the LGPL }
  36. { License. If you do not delete the provisions above, a recipient may use }
  37. { your version of this file under either the MPL or the LGPL License. }
  38. { }
  39. { For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
  40. { }
  41. {******************************************************************************}
  42. unit JwaWinType;
  43. {$WEAKPACKAGEUNIT}
  44. {$HPPEMIT ''}
  45. {$HPPEMIT '#include "BaseTsd.h"'}
  46. {$HPPEMIT '#include "BaseTyps.h"'}
  47. {$HPPEMIT '#include "NtDef.h"'}
  48. {$HPPEMIT '#include "WinDef.h"'}
  49. {$HPPEMIT ''}
  50. {$HPPEMIT 'typedef LPVOID *LPLPVOID'}
  51. {$HPPEMIT 'typedef GUID TGUID'}
  52. {$HPPEMIT 'typedef GUID *LPGUID'}
  53. {$HPPEMIT 'typedef GUID CLSID'}
  54. {$HPPEMIT 'typedef HMODULE *PHMODULE'}
  55. {$HPPEMIT ''}
  56. {$I jediapilib.inc}
  57. interface
  58. uses
  59. {$IFDEF USE_DELPHI_TYPES}
  60. Windows,
  61. {$ENDIF USE_DELPHI_TYPES}
  62. SysUtils; // TODO
  63. type
  64. EJwaError = class(Exception);
  65. EJwaLoadLibraryError = class(EJwaError);
  66. EJwaGetProcAddressError = class(EJwaError);
  67. procedure GetProcedureAddress(var P: Pointer; const ModuleName, ProcName: string);
  68. // ntdef.h
  69. type
  70. //typedef double DOUBLE;
  71. PQuad = ^TQuad;
  72. _QUAD = record // QUAD is for those times we want
  73. DoNotUseThisField: Double; // an 8 byte aligned 8 byte long structure
  74. end; // which is NOT really a floating point
  75. {$EXTERNALSYM _QUAD} // number. Use DOUBLE if you want an FP number.
  76. QUAD = _QUAD;
  77. {$EXTERNALSYM QUAD}
  78. TQuad = _QUAD;
  79. //
  80. // Unsigned Basics
  81. //
  82. UCHAR = {$IFDEF USE_DELPHI_TYPES} Windows.UCHAR {$ELSE} Byte {$ENDIF};
  83. {$EXTERNALSYM UCHAR}
  84. USHORT = Word;
  85. {$EXTERNALSYM USHORT}
  86. ULONG = {$IFDEF USE_DELPHI_TYPES} Windows.ULONG {$ELSE} Cardinal {$ENDIF};
  87. {$EXTERNALSYM ULONG}
  88. UQUAD = QUAD;
  89. {$EXTERNALSYM UQUAD}
  90. //
  91. // __int64 is only supported by 2.0 and later midl.
  92. // __midl is set by the 2.0 midl and not by 1.0 midl.
  93. //
  94. type
  95. LONGLONG = {$IFDEF USE_DELPHI_TYPES} Windows.LONGLONG {$ELSE} Int64 {$ENDIF};
  96. {$EXTERNALSYM LONGLONG}
  97. ULONGLONG = Int64;
  98. {$EXTERNALSYM ULONGLONG}
  99. const
  100. MAXLONGLONG = $7fffffffffffffff;
  101. {$EXTERNALSYM MAXLONGLONG}
  102. type
  103. PLONGLONG = ^LONGLONG;
  104. {$EXTERNALSYM PLONGLONG}
  105. PULONGLONG = ^ULONGLONG;
  106. {$EXTERNALSYM PULONGLONG}
  107. BOOL = {$IFDEF USE_DELPHI_TYPES} Windows.BOOL {$ELSE} LongBool {$ENDIF};
  108. {$EXTERNALSYM BOOL}
  109. DWORD = {$IFDEF USE_DELPHI_TYPES} Windows.DWORD {$ELSE} Longword {$ENDIF};
  110. {$EXTERNALSYM DWORD}
  111. const
  112. ANYSIZE_ARRAY = 1;
  113. {$EXTERNALSYM ANYSIZE_ARRAY}
  114. MAX_NATURAL_ALIGNMENT = SizeOf(ULONG);
  115. {$EXTERNALSYM MAX_NATURAL_ALIGNMENT}
  116. //
  117. // Void
  118. //
  119. type
  120. PVOID = Pointer;
  121. {$EXTERNALSYM PVOID}
  122. PPVOID = ^PVOID;
  123. {$EXTERNALSYM PPVOID}
  124. PVOID64 = Pointer;
  125. {$EXTERNALSYM PVOID64}
  126. //
  127. // Basics
  128. //
  129. SHORT = {$IFDEF USE_DELPHI_TYPES} Windows.SHORT {$ELSE} Smallint {$ENDIF};
  130. {$EXTERNALSYM SHORT}
  131. LONG = Longint;
  132. {$EXTERNALSYM LONG}
  133. //
  134. // UNICODE (Wide Character) types
  135. //
  136. WCHAR = {$IFDEF USE_DELPHI_TYPES} Windows.WCHAR {$ELSE} WideChar {$ENDIF};
  137. {$EXTERNALSYM WCHAR}
  138. PWCHAR = {$IFDEF USE_DELPHI_TYPES} Windows.PWChar {$ELSE} PWideChar {$ENDIF};
  139. {$EXTERNALSYM PWCHAR}
  140. LPWCH = ^WCHAR;
  141. {$EXTERNALSYM LPWCH}
  142. PWCH = ^WCHAR;
  143. {$EXTERNALSYM PWCH}
  144. LPCWCH = ^WCHAR;
  145. {$EXTERNALSYM LPCWCH}
  146. PCWCH = ^WCHAR;
  147. {$EXTERNALSYM PCWCH}
  148. NWPSTR = ^WCHAR;
  149. {$EXTERNALSYM NWPSTR}
  150. LPWSTR = {$IFDEF USE_DELPHI_TYPES} Windows.LPWSTR {$ELSE} PWideChar {$ENDIF};
  151. {$EXTERNALSYM LPWSTR}
  152. LPCWSTR = {$IFDEF USE_DELPHI_TYPES} Windows.LPCWSTR {$ELSE} PWideChar {$ENDIF};
  153. {$EXTERNALSYM LPCWSTR}
  154. PWSTR = {$IFDEF USE_DELPHI_TYPES} Windows.LPWSTR {$ELSE} PWideChar {$ENDIF};
  155. {$EXTERNALSYM PWSTR}
  156. LPUWSTR = {$IFDEF USE_DELPHI_TYPES} Windows.LPWSTR {$ELSE} PWideChar {$ENDIF};
  157. {$EXTERNALSYM LPUWSTR}
  158. PUWSTR = {$IFDEF USE_DELPHI_TYPES} Windows.LPWSTR {$ELSE} PWideChar {$ENDIF};
  159. {$EXTERNALSYM PUWSTR}
  160. LCPUWSTR = {$IFDEF USE_DELPHI_TYPES} Windows.LPWSTR {$ELSE} PWideChar {$ENDIF};
  161. {$EXTERNALSYM LCPUWSTR}
  162. PCUWSTR = {$IFDEF USE_DELPHI_TYPES} Windows.LPWSTR {$ELSE} PWideChar {$ENDIF};
  163. {$EXTERNALSYM PCUWSTR}
  164. //
  165. // ANSI (Multi-byte Character) types
  166. //
  167. LPCH = ^Char;
  168. {$EXTERNALSYM LPCH}
  169. PCH = ^Char;
  170. {$EXTERNALSYM PCH}
  171. LPCCH = ^Char;
  172. {$EXTERNALSYM LPCCH}
  173. PCCH = ^Char;
  174. {$EXTERNALSYM PCCH}
  175. NPSTR = ^Char;
  176. {$EXTERNALSYM NPSTR}
  177. LPSTR = {$IFDEF USE_DELPHI_TYPES} Windows.LPSTR {$ELSE} PAnsiChar {$ENDIF};
  178. {$EXTERNALSYM LPSTR}
  179. PSTR = PChar;
  180. {$EXTERNALSYM PSTR}
  181. LPCSTR = {$IFDEF USE_DELPHI_TYPES} Windows.LPCSTR {$ELSE} PAnsiChar {$ENDIF};
  182. {$EXTERNALSYM LPCSTR}
  183. PCSTR = PChar;
  184. {$EXTERNALSYM PCSTR}
  185. // (rom) moved down to have LPSTR etc always declared
  186. type
  187. LPLPSTR = ^LPSTR;
  188. {$NODEFINE LPLPSTR}
  189. LPLPCSTR = ^LPCSTR;
  190. {$NODEFINE LPLPCSTR}
  191. LPLPCWSTR = ^LPCWSTR;
  192. {$NODEFINE LPLPCWSTR}
  193. LPLPWSTR = ^LPWSTR;
  194. {$NODEFINE LPLPWSTR}
  195. PPTSTR = ^PTSTR;
  196. PPChar = ^PChar;
  197. PPWideChar = ^PWideChar;
  198. PPointer = ^Pointer;
  199. GUID = TGUID;
  200. {$NODEFINE GUID}
  201. LPGUID = ^GUID;
  202. {$NODEFINE LPGUID}
  203. CLSID = TGUID;
  204. {$NODEFINE CLSID}
  205. //
  206. // Neutral ANSI/UNICODE types and macros
  207. //
  208. {$IFDEF UNICODE}
  209. TCHAR = WCHAR;
  210. {$EXTERNALSYM TCHAR}
  211. PTCHAR = PWideChar;
  212. {$EXTERNALSYM PTCHAR}
  213. TUCHAR = WCHAR;
  214. {$EXTERNALSYM TUCHAR}
  215. PTUCHAR = ^TUCHAR;
  216. {$EXTERNALSYM PTUCHAR}
  217. LPCTCH = LPWSTR;
  218. LPTCH = LPWSTR;
  219. {$EXTERNALSYM LPTCH}
  220. PTCH = LPWSTR;
  221. {$EXTERNALSYM PTCH}
  222. PTSTR = LPWSTR;
  223. {$EXTERNALSYM PTSTR}
  224. LPTSTR = {$IFDEF USE_DELPHI_TYPES} Windows.LPWSTR {$ELSE} LPWSTR {$ENDIF};
  225. {$EXTERNALSYM LPTSTR}
  226. PCTSTR = LPTSTR;
  227. {$EXTERNALSYM PCTSTR}
  228. LPCTSTR = LPTSTR;
  229. {$EXTERNALSYM LPCTSTR}
  230. PCUTSTR = PTUCHAR;
  231. {$EXTERNALSYM PCUTSTR}
  232. LPCUTSTR = PTUCHAR;
  233. {$EXTERNALSYM LPCUTSTR}
  234. PUTSTR = PTUCHAR;
  235. {$EXTERNALSYM PUTSTR}
  236. LPUTSTR = PTUCHAR;
  237. {$EXTERNALSYM LPUTSTR}
  238. __TEXT = WideString;
  239. {$EXTERNALSYM __TEXT}
  240. {$ELSE}
  241. TCHAR = Char;
  242. {$EXTERNALSYM TCHAR}
  243. PTCHAR = PChar;
  244. {$EXTERNALSYM PTCHAR}
  245. TUCHAR = Byte;
  246. {$EXTERNALSYM TUCHAR}
  247. PTUCHAR = ^TUCHAR;
  248. {$EXTERNALSYM PTUCHAR}
  249. LPCTCH = LPSTR;
  250. LPTCH = LPSTR;
  251. {$EXTERNALSYM LPTCH}
  252. PTCH = LPSTR;
  253. {$EXTERNALSYM PTCH}
  254. PTSTR = LPSTR;
  255. {$EXTERNALSYM PTSTR}
  256. LPTSTR = LPSTR;
  257. {$EXTERNALSYM LPTSTR}
  258. PCTSTR = LPCSTR;
  259. {$EXTERNALSYM PCTSTR}
  260. LPCTSTR = LPCSTR;
  261. {$EXTERNALSYM LPCTSTR}
  262. PCUTSTR = PTUCHAR;
  263. {$EXTERNALSYM PCUTSTR}
  264. LPCUTSTR = PTUCHAR;
  265. {$EXTERNALSYM LPCUTSTR}
  266. PUTSTR = PTUCHAR;
  267. {$EXTERNALSYM PUTSTR}
  268. LPUTSTR = PTUCHAR;
  269. {$EXTERNALSYM LPUTSTR}
  270. __TEXT = AnsiString;
  271. {$EXTERNALSYM __TEXT}
  272. {$ENDIF UNICODE}
  273. TEXT = __TEXT;
  274. {$EXTERNALSYM TEXT}
  275. //
  276. // Pointer to Basics
  277. //
  278. PSHORT = ^SHORT;
  279. {$EXTERNALSYM PSHORT}
  280. PLONG = ^LONG;
  281. {$EXTERNALSYM PLONG}
  282. //
  283. // Pointer to Unsigned Basics
  284. //
  285. PUCHAR = {$IFDEF USE_DELPHI_TYPES} Windows.PUCHAR {$ELSE} ^Byte {$ENDIF};
  286. {$EXTERNALSYM PUCHAR}
  287. PUSHORT = ^USHORT;
  288. {$EXTERNALSYM PUSHORT}
  289. PULONG = {$IFDEF USE_DELPHI_TYPES} Windows.PULONG {$ELSE} ^ULONG {$ENDIF};
  290. {$EXTERNALSYM PULONG}
  291. PUQUAD = ^UQUAD;
  292. {$EXTERNALSYM PUQUAD}
  293. //
  294. // Signed characters
  295. //
  296. SCHAR = Shortint;
  297. {$EXTERNALSYM SCHAR}
  298. PSCHAR = ^SCHAR;
  299. {$EXTERNALSYM PSCHAR}
  300. //
  301. // Handle to an Object
  302. //
  303. HANDLE = {$IFDEF USE_DELPHI_TYPES} Windows.THandle {$ELSE} Longword {$ENDIF};
  304. {$EXTERNALSYM HANDLE}
  305. PHANDLE = {$IFDEF USE_DELPHI_TYPES} Windows.PHandle {$ELSE} ^HANDLE {$ENDIF};
  306. {$EXTERNALSYM PHANDLE}
  307. THandle = {$IFDEF USE_DELPHI_TYPES} Windows.THandle {$ELSE} HANDLE {$ENDIF};
  308. //
  309. // Flag (bit) fields
  310. //
  311. FCHAR = UCHAR;
  312. {$EXTERNALSYM FCHAR}
  313. FSHORT = USHORT;
  314. {$EXTERNALSYM FSHORT}
  315. FLONG = ULONG;
  316. {$EXTERNALSYM FLONG}
  317. // Component Object Model defines, and macros
  318. HRESULT = System.HRESULT; // LONG;
  319. {$EXTERNALSYM HRESULT}
  320. //
  321. // Low order two bits of a handle are ignored by the system and available
  322. // for use by application code as tag bits. The remaining bits are opaque
  323. // and used to store a serial number and table index.
  324. //
  325. const
  326. OBJ_HANDLE_TAGBITS = $00000003;
  327. {$EXTERNALSYM OBJ_HANDLE_TAGBITS}
  328. //
  329. // Cardinal Data Types [0 - 2**N-2)
  330. //
  331. type
  332. CCHAR = Char;
  333. {$EXTERNALSYM CCHAR}
  334. CSHORT = Shortint;
  335. {$EXTERNALSYM CSHORT}
  336. CLONG = ULONG;
  337. {$EXTERNALSYM CLONG}
  338. PCCHAR = ^CCHAR;
  339. {$EXTERNALSYM PCCHAR}
  340. PCSHORT = ^CSHORT;
  341. {$EXTERNALSYM PCSHORT}
  342. PCLONG = ^CLONG;
  343. {$EXTERNALSYM PCLONG}
  344. //
  345. // NLS basics (Locale and Language Ids)
  346. //
  347. LCID = {$IFDEF USE_DELPHI_TYPES} Windows.LCID {$ELSE} DWORD {$ENDIF};
  348. {$EXTERNALSYM LCID}
  349. PLCID = ^LCID;
  350. {$EXTERNALSYM PLCID}
  351. LANGID = {$IFDEF USE_DELPHI_TYPES} Windows.LANGID {$ELSE} Word {$ENDIF};
  352. {$EXTERNALSYM LANGID}
  353. PLANGID = ^LANGID; // TODO Not in original header (used in MSI)
  354. //
  355. // Logical Data Type - These are 32-bit logical values.
  356. //
  357. LOGICAL = ULONG;
  358. {$EXTERNALSYM LOGICAL}
  359. PLOGICAL = ^ULONG;
  360. {$EXTERNALSYM PLOGICAL}
  361. //
  362. // NTSTATUS
  363. //
  364. NTSTATUS = LONG;
  365. {$EXTERNALSYM NTSTATUS}
  366. PNTSTATUS = ^NTSTATUS;
  367. {$EXTERNALSYM PNTSTATUS}
  368. TNTStatus = NTSTATUS;
  369. //
  370. // Status values are 32 bit values layed out as follows:
  371. //
  372. // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  373. // 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
  374. // +---+-+-------------------------+-------------------------------+
  375. // |Sev|C| Facility | Code |
  376. // +---+-+-------------------------+-------------------------------+
  377. //
  378. // where
  379. //
  380. // Sev - is the severity code
  381. //
  382. // 00 - Success
  383. // 01 - Informational
  384. // 10 - Warning
  385. // 11 - Error
  386. //
  387. // C - is the Customer code flag
  388. //
  389. // Facility - is the facility code
  390. //
  391. // Code - is the facility's status code
  392. //
  393. //
  394. // Generic test for success on any status value (non-negative numbers
  395. // indicate success).
  396. //
  397. function NT_SUCCESS(Status: NTSTATUS): BOOL;
  398. {$EXTERNALSYM NT_SUCCESS}
  399. //
  400. // Generic test for information on any status value.
  401. //
  402. function NT_INFORMATION(Status: NTSTATUS): BOOL;
  403. {$EXTERNALSYM NT_INFORMATION}
  404. //
  405. // Generic test for warning on any status value.
  406. //
  407. function NT_WARNING(Status: NTSTATUS): BOOL;
  408. {$EXTERNALSYM NT_WARNING}
  409. //
  410. // Generic test for error on any status value.
  411. //
  412. function NT_ERROR(Status: NTSTATUS): BOOL;
  413. {$EXTERNALSYM NT_ERROR}
  414. const
  415. APPLICATION_ERROR_MASK = $20000000;
  416. {$EXTERNALSYM APPLICATION_ERROR_MASK}
  417. ERROR_SEVERITY_SUCCESS = $00000000;
  418. {$EXTERNALSYM ERROR_SEVERITY_SUCCESS}
  419. ERROR_SEVERITY_INFORMATIONAL = $40000000;
  420. {$EXTERNALSYM ERROR_SEVERITY_INFORMATIONAL}
  421. ERROR_SEVERITY_WARNING = DWORD($80000000);
  422. {$EXTERNALSYM ERROR_SEVERITY_WARNING}
  423. ERROR_SEVERITY_ERROR = DWORD($C0000000);
  424. {$EXTERNALSYM ERROR_SEVERITY_ERROR}
  425. //
  426. // Large (64-bit) integer types and operations
  427. //
  428. type
  429. LPLARGE_INTEGER = ^LARGE_INTEGER;
  430. {$EXTERNALSYM LPLARGE_INTEGER}
  431. {$IFDEF USE_DELPHI_TYPES}
  432. _LARGE_INTEGER = Windows._LARGE_INTEGER;
  433. LARGE_INTEGER = Windows.LARGE_INTEGER;
  434. TLargeInteger = Windows.TLargeInteger;
  435. {$ELSE}
  436. _LARGE_INTEGER = record
  437. case Integer of
  438. 0: (
  439. LowPart: DWORD;
  440. HighPart: LONG);
  441. 1: (
  442. QuadPart: LONGLONG);
  443. end;
  444. {$EXTERNALSYM _LARGE_INTEGER}
  445. LARGE_INTEGER = _LARGE_INTEGER;
  446. {$EXTERNALSYM LARGE_INTEGER}
  447. TLargeInteger = LARGE_INTEGER;
  448. {$ENDIF USE_DELPHI_TYPES}
  449. PLARGE_INTEGER = ^LARGE_INTEGER;
  450. {$EXTERNALSYM PLARGE_INTEGER}
  451. PLargeInteger = LPLARGE_INTEGER;
  452. LPULARGE_INTEGER = ^ULARGE_INTEGER;
  453. {$EXTERNALSYM LPULARGE_INTEGER}
  454. {$IFDEF USE_DELPHI_TYPES}
  455. ULARGE_INTEGER = Windows.ULARGE_INTEGER;
  456. TULargeInteger = Windows.TULargeInteger;
  457. PULargeInteger = Windows.PULargeInteger;
  458. {$ELSE}
  459. ULARGE_INTEGER = record
  460. case Integer of
  461. 0: (
  462. LowPart: DWORD;
  463. HighPart: DWORD);
  464. 1: (
  465. QuadPart: LONGLONG);
  466. end;
  467. {$EXTERNALSYM ULARGE_INTEGER}
  468. TULargeInteger = ULARGE_INTEGER;
  469. PULargeInteger = LPULARGE_INTEGER;
  470. {$ENDIF USE_DELPHI_TYPES}
  471. PULARGE_INTEGER = ^ULARGE_INTEGER;
  472. {$EXTERNALSYM PULARGE_INTEGER}
  473. TIME = LARGE_INTEGER;
  474. {$EXTERNALSYM TIME}
  475. _TIME = _LARGE_INTEGER;
  476. {$EXTERNALSYM _TIME}
  477. PTIME = PLARGE_INTEGER;
  478. {$EXTERNALSYM PTIME}
  479. //
  480. // _M_IX86 included so that EM CONTEXT structure compiles with
  481. // x86 programs. *** TBD should this be for all architectures?
  482. //
  483. //
  484. // 16 byte aligned type for 128 bit floats
  485. //
  486. //
  487. // For we define a 128 bit structure and use __declspec(align(16)) pragma to
  488. // align to 128 bits.
  489. //
  490. type
  491. PFloat128 = ^TFloat128;
  492. _FLOAT128 = record
  493. LowPart: Int64;
  494. HighPart: Int64;
  495. end;
  496. {$EXTERNALSYM _FLOAT128}
  497. FLOAT128 = _FLOAT128;
  498. {$EXTERNALSYM FLOAT128}
  499. TFloat128 = FLOAT128;
  500. // Update Sequence Number
  501. USN = LONGLONG;
  502. {$EXTERNALSYM USN}
  503. //
  504. // Locally Unique Identifier
  505. //
  506. type
  507. PLuid = ^LUID;
  508. _LUID = record
  509. LowPart: DWORD;
  510. HighPart: LONG;
  511. end;
  512. {$EXTERNALSYM _LUID}
  513. LUID = _LUID;
  514. {$EXTERNALSYM LUID}
  515. TLuid = LUID;
  516. DWORDLONG = ULONGLONG;
  517. {$EXTERNALSYM DWORDLONG}
  518. PDWORDLONG = ^DWORDLONG;
  519. {$EXTERNALSYM PDWORDLONG}
  520. //
  521. // Physical address.
  522. //
  523. PHYSICAL_ADDRESS = LARGE_INTEGER;
  524. {$EXTERNALSYM PHYSICAL_ADDRESS}
  525. PPHYSICAL_ADDRESS = ^LARGE_INTEGER;
  526. {$EXTERNALSYM PPHYSICAL_ADDRESS}
  527. //
  528. // Define operations to logically shift an int64 by 0..31 bits and to multiply
  529. // 32-bits by 32-bits to form a 64-bit product.
  530. //
  531. //
  532. // The x86 C compiler understands inline assembler. Therefore, inline functions
  533. // that employ inline assembler are used for shifts of 0..31. The multiplies
  534. // rely on the compiler recognizing the cast of the multiplicand to int64 to
  535. // generate the optimal code inline.
  536. //
  537. function Int32x32To64(a, b: LONG): LONGLONG;
  538. {$EXTERNALSYM Int32x32To64}
  539. function UInt32x32To64(a, b: DWORD): ULONGLONG;
  540. {$EXTERNALSYM UInt32x32To64}
  541. function Int64ShllMod32(Value: ULONGLONG; ShiftCount: DWORD): ULONGLONG;
  542. {$EXTERNALSYM Int64ShllMod32}
  543. function Int64ShraMod32(Value: LONGLONG; ShiftCount: DWORD): LONGLONG;
  544. {$EXTERNALSYM Int64ShraMod32}
  545. function Int64ShrlMod32(Value: ULONGLONG; ShiftCount: DWORD): ULONGLONG;
  546. {$EXTERNALSYM Int64ShrlMod32}
  547. //
  548. // Event type
  549. //
  550. type
  551. _EVENT_TYPE = (NotificationEvent, SynchronizationEvent);
  552. {$EXTERNALSYM _EVENT_TYPE}
  553. EVENT_TYPE = _EVENT_TYPE;
  554. {$EXTERNALSYM EVENT_TYPE}
  555. TEventType = _EVENT_TYPE;
  556. //
  557. // Timer type
  558. //
  559. _TIMER_TYPE = (NotificationTimer, SynchronizationTimer);
  560. {$EXTERNALSYM _TIMER_TYPE}
  561. TIMER_TYPE = _TIMER_TYPE;
  562. {$EXTERNALSYM TIMER_TYPE}
  563. //
  564. // Wait type
  565. //
  566. _WAIT_TYPE = (WaitAll, WaitAny);
  567. {$EXTERNALSYM _WAIT_TYPE}
  568. WAIT_TYPE = _WAIT_TYPE;
  569. {$EXTERNALSYM WAIT_TYPE}
  570. //
  571. // Pointer to an Asciiz string
  572. //
  573. PSZ = ^CHAR;
  574. {$EXTERNALSYM PSZ}
  575. PCSZ = ^CHAR;
  576. {$EXTERNALSYM PCSZ}
  577. //
  578. // Counted String
  579. //
  580. PString = ^TString;
  581. _STRING = record
  582. Length: USHORT;
  583. MaximumLength: USHORT;
  584. Buffer: PCHAR;
  585. end;
  586. {$EXTERNALSYM _STRING}
  587. TString = _STRING;
  588. ANSI_STRING = _STRING;
  589. {$EXTERNALSYM ANSI_STRING}
  590. PANSI_STRING = PSTRING;
  591. {$EXTERNALSYM PANSI_STRING}
  592. OEM_STRING = _STRING;
  593. {$EXTERNALSYM OEM_STRING}
  594. POEM_STRING = PSTRING;
  595. {$EXTERNALSYM POEM_STRING}
  596. //
  597. // CONSTCounted String
  598. //
  599. PCString = ^CSTRING;
  600. _CSTRING = record
  601. Length: USHORT;
  602. MaximumLength: USHORT;
  603. Buffer: PCHAR;
  604. end;
  605. {$EXTERNALSYM _CSTRING}
  606. CSTRING = _CSTRING;
  607. {$EXTERNALSYM CSTRING}
  608. TCString = CSTRING;
  609. const
  610. ANSI_NULL = CHAR(0);
  611. {$EXTERNALSYM ANSI_NULL}
  612. UNICODE_NULL = WCHAR(0);
  613. {$EXTERNALSYM UNICODE_NULL}
  614. UNICODE_STRING_MAX_BYTES = WORD(65534);
  615. {$EXTERNALSYM UNICODE_STRING_MAX_BYTES}
  616. UNICODE_STRING_MAX_CHARS = 32767;
  617. {$EXTERNALSYM UNICODE_STRING_MAX_CHARS}
  618. type
  619. CANSI_STRING = _STRING;
  620. {$EXTERNALSYM CANSI_STRING}
  621. PCANSI_STRING = PSTRING;
  622. {$EXTERNALSYM PCANSI_STRING}
  623. //
  624. // Unicode strings are counted 16-bit character strings. If they are
  625. // NULL terminated, Length does not include trailing NULL.
  626. //
  627. type
  628. PUNICODE_STRING = ^UNICODE_STRING;
  629. {$EXTERNALSYM PUNICODE_STRING}
  630. _UNICODE_STRING = record
  631. Length: USHORT;
  632. MaximumLength: USHORT;
  633. Buffer: PWSTR;
  634. end;
  635. {$EXTERNALSYM _UNICODE_STRING}
  636. UNICODE_STRING = _UNICODE_STRING;
  637. {$EXTERNALSYM UNICODE_STRING}
  638. PCUNICODE_STRING = ^UNICODE_STRING;
  639. {$EXTERNALSYM PCUNICODE_STRING}
  640. TUnicodeString = UNICODE_STRING;
  641. PUnicodeString = PUNICODE_STRING;
  642. //
  643. // Boolean
  644. //
  645. type
  646. //typedef UCHAR BOOLEAN;
  647. PBOOLEAN = ^ByteBool;
  648. {$EXTERNALSYM PBOOLEAN}
  649. //
  650. // Doubly linked list structure. Can be used as either a list head, or
  651. // as link words.
  652. //
  653. type
  654. PLIST_ENTRY = ^LIST_ENTRY;
  655. {$EXTERNALSYM PLIST_ENTRY}
  656. {$IFDEF USE_DELPHI_TYPES}
  657. _LIST_ENTRY = Windows._LIST_ENTRY;
  658. LIST_ENTRY = Windows.LIST_ENTRY;
  659. TListEntry = Windows.TListEntry;
  660. PListEntry = Windows.PListEntry;
  661. {$ELSE}
  662. _LIST_ENTRY = record
  663. Flink: PLIST_ENTRY;
  664. Blink: PLIST_ENTRY;
  665. end;
  666. {$EXTERNALSYM _LIST_ENTRY}
  667. LIST_ENTRY = _LIST_ENTRY;
  668. {$EXTERNALSYM LIST_ENTRY}
  669. TListEntry = LIST_ENTRY;
  670. PListEntry = PLIST_ENTRY;
  671. {$ENDIF USE_DELPHI_TYPES}
  672. PRLIST_ENTRY = ^LIST_ENTRY;
  673. {$EXTERNALSYM PLIST_ENTRY}
  674. //
  675. // Singly linked list structure. Can be used as either a list head, or
  676. // as link words.
  677. //
  678. PSINGLE_LIST_ENTRY = ^SINGLE_LIST_ENTRY;
  679. {$EXTERNALSYM PSINGLE_LIST_ENTRY}
  680. _SINGLE_LIST_ENTRY = record
  681. Next: PSINGLE_LIST_ENTRY;
  682. end;
  683. {$EXTERNALSYM _SINGLE_LIST_ENTRY}
  684. SINGLE_LIST_ENTRY = _SINGLE_LIST_ENTRY;
  685. {$EXTERNALSYM SINGLE_LIST_ENTRY}
  686. TSingleListEntry = SINGLE_LIST_ENTRY;
  687. PSingleListEntry = PSINGLE_LIST_ENTRY;
  688. //
  689. // These are needed for portable debugger support.
  690. //
  691. PLIST_ENTRY32 = ^LIST_ENTRY32;
  692. {$EXTERNALSYM PLIST_ENTRY32}
  693. {$EXTERNALSYM PLIST_ENTRY32}
  694. LIST_ENTRY32 = record
  695. Flink: DWORD;
  696. Blink: DWORD;
  697. end;
  698. {$EXTERNALSYM LIST_ENTRY32}
  699. TListEntry32 = LIST_ENTRY32;
  700. PListEntry32 = PLIST_ENTRY32;
  701. PLIST_ENTRY64 = ^LIST_ENTRY64;
  702. {$EXTERNALSYM PLIST_ENTRY64}
  703. LIST_ENTRY64 = record
  704. Flink: ULONGLONG;
  705. Blink: ULONGLONG;
  706. end;
  707. {$EXTERNALSYM LIST_ENTRY64}
  708. TListEntry64 = LIST_ENTRY64;
  709. PListEntry64 = PLIST_ENTRY64;
  710. procedure ListEntry32To64(l32: PLIST_ENTRY32; l64: PLIST_ENTRY64);
  711. {$EXTERNALSYM ListEntry32To64}
  712. procedure ListEntry64To32(l64: PLIST_ENTRY64; l32: PLIST_ENTRY32);
  713. {$EXTERNALSYM ListEntry64To32}
  714. //
  715. // These macros are used to walk lists on a target system
  716. //
  717. {
  718. #define CONTAINING_RECORD32(address, type, field) ( \
  719. (ULONG_PTR)(address) - \
  720. (ULONG_PTR)(&((type *)0)->field))
  721. #define CONTAINING_RECORD64(address, type, field) ( \
  722. (ULONGLONG)(address) - \
  723. (ULONGLONG)(&((type *)0)->field))
  724. }
  725. type
  726. PString32 = ^STRING32;
  727. _STRING32 = record
  728. Length: USHORT;
  729. MaximumLength: USHORT;
  730. Buffer: ULONG;
  731. end;
  732. {$EXTERNALSYM _STRING32}
  733. STRING32 = _STRING32;
  734. {$EXTERNALSYM STRING32}
  735. TString32 = STRING32;
  736. UNICODE_STRING32 = STRING32;
  737. {$EXTERNALSYM UNICODE_STRING32}
  738. PUNICODE_STRING32 = ^UNICODE_STRING32;
  739. {$EXTERNALSYM PUNICODE_STRING32}
  740. ANSI_STRING32 = STRING32;
  741. {$EXTERNALSYM ANSI_STRING32}
  742. PANSI_STRING32 = ^ANSI_STRING32;
  743. {$EXTERNALSYM PANSI_STRING32}
  744. PString64 = ^STRING64;
  745. _STRING64 = record
  746. Length: USHORT;
  747. MaximumLength: USHORT;
  748. Buffer: ULONGLONG;
  749. end;
  750. {$EXTERNALSYM _STRING64}
  751. STRING64 = _STRING64;
  752. {$EXTERNALSYM STRING64}
  753. TString64 = STRING64;
  754. UNICODE_STRING64 = STRING64;
  755. {$EXTERNALSYM UNICODE_STRING64}
  756. PUNICODE_STRING64 = ^UNICODE_STRING64;
  757. {$EXTERNALSYM PUNICODE_STRING64}
  758. ANSI_STRING64 = STRING64;
  759. {$EXTERNALSYM ANSI_STRING64}
  760. PANSI_STRING64 = ^ANSI_STRING64;
  761. {$EXTERNALSYM PANSI_STRING64}
  762. //
  763. // Valid values for the Attributes field
  764. //
  765. const
  766. OBJ_INHERIT = $00000002;
  767. {$EXTERNALSYM OBJ_INHERIT}
  768. OBJ_PERMANENT = $00000010;
  769. {$EXTERNALSYM OBJ_PERMANENT}
  770. OBJ_EXCLUSIVE = $00000020;
  771. {$EXTERNALSYM OBJ_EXCLUSIVE}
  772. OBJ_CASE_INSENSITIVE = $00000040;
  773. {$EXTERNALSYM OBJ_CASE_INSENSITIVE}
  774. OBJ_OPENIF = $00000080;
  775. {$EXTERNALSYM OBJ_OPENIF}
  776. OBJ_OPENLINK = $00000100;
  777. {$EXTERNALSYM OBJ_OPENLINK}
  778. OBJ_KERNEL_HANDLE = $00000200;
  779. {$EXTERNALSYM OBJ_KERNEL_HANDLE}
  780. OBJ_VALID_ATTRIBUTES = $000003F2;
  781. {$EXTERNALSYM OBJ_VALID_ATTRIBUTES}
  782. //
  783. // Object Attributes structure
  784. //
  785. type
  786. POBJECT_ATTRIBUTES = ^OBJECT_ATTRIBUTES;
  787. {$EXTERNALSYM POBJECT_ATTRIBUTES}
  788. _OBJECT_ATTRIBUTES = record
  789. Length: ULONG;
  790. RootDirectory: HANDLE;
  791. ObjectName: PUNICODE_STRING;
  792. Attributes: ULONG;
  793. SecurityDescriptor: PVOID; // Points to type SECURITY_DESCRIPTOR
  794. SecurityQualityOfService: PVOID; // Points to type SECURITY_QUALITY_OF_SERVICE
  795. end;
  796. {$EXTERNALSYM _OBJECT_ATTRIBUTES}
  797. OBJECT_ATTRIBUTES = _OBJECT_ATTRIBUTES;
  798. {$EXTERNALSYM OBJECT_ATTRIBUTES}
  799. TObjectAttributes = OBJECT_ATTRIBUTES;
  800. PObjectAttributes = POBJECT_ATTRIBUTES;
  801. procedure InitializeObjectAttributes(p: POBJECT_ATTRIBUTES; n: PUNICODE_STRING;
  802. a: ULONG; r: HANDLE; s: PVOID{PSECURITY_DESCRIPTOR});
  803. {$EXTERNALSYM InitializeObjectAttributes}
  804. //
  805. // Constants
  806. //
  807. const
  808. //#define FALSE 0
  809. //#define TRUE 1
  810. NULL = 0;
  811. {$EXTERNALSYM NULL}
  812. NULL64 = 0;
  813. {$EXTERNALSYM NULL64}
  814. //#include <guiddef.h>
  815. type
  816. PObjectId = ^OBJECTID;
  817. _OBJECTID = record // size is 20
  818. Lineage: GUID;
  819. Uniquifier: ULONG;
  820. end;
  821. {$EXTERNALSYM _OBJECTID}
  822. OBJECTID = _OBJECTID;
  823. {$EXTERNALSYM OBJECTID}
  824. TObjectId = OBJECTID;
  825. const
  826. MINCHAR = $80;
  827. {$EXTERNALSYM MINCHAR}
  828. MAXCHAR = $7f;
  829. {$EXTERNALSYM MAXCHAR}
  830. MINSHORT = $8000;
  831. {$EXTERNALSYM MINSHORT}
  832. MAXSHORT = $7fff;
  833. {$EXTERNALSYM MAXSHORT}
  834. MINLONG = DWORD($80000000);
  835. {$EXTERNALSYM MINLONG}
  836. MAXLONG = $7fffffff;
  837. {$EXTERNALSYM MAXLONG}
  838. MAXUCHAR = $ff;
  839. {$EXTERNALSYM MAXUCHAR}
  840. MAXUSHORT = $ffff;
  841. {$EXTERNALSYM MAXUSHORT}
  842. MAXULONG = DWORD($ffffffff);
  843. {$EXTERNALSYM MAXULONG}
  844. //
  845. // Useful Helper Macros
  846. //
  847. //
  848. // Determine if an argument is present by testing the value of the pointer
  849. // to the argument value.
  850. //
  851. function ARGUMENT_PRESENT(ArgumentPointer: Pointer): BOOL;
  852. {$EXTERNALSYM ARGUMENT_PRESENT}
  853. //
  854. // Exception handler routine definition.
  855. //
  856. // struct _CONTEXT;
  857. // struct _EXCEPTION_RECORD;
  858. //type
  859. // PEXCEPTION_ROUTINE = function(ExceptionRecord: LP_EXCEPTION_RECORD;
  860. // EstablisherFrame: PVOID; ContextRecord: LPCONTEXT;
  861. // DispatcherContext: PVOID): EXCEPTION_DISPOSITION; stdcall;
  862. // {$EXTERNALSYM PEXCEPTION_ROUTINE}
  863. //
  864. // Interrupt Request Level (IRQL)
  865. //
  866. type
  867. KIRQL = UCHAR;
  868. {$EXTERNALSYM KIRQL}
  869. PKIRQL = ^KIRQL;
  870. {$EXTERNALSYM PKIRQL}
  871. //
  872. // Product types
  873. //
  874. _NT_PRODUCT_TYPE = (Filler0, NtProductWinNt, NtProductLanManNt, NtProductServer);
  875. {$EXTERNALSYM _NT_PRODUCT_TYPE}
  876. NT_PRODUCT_TYPE = _NT_PRODUCT_TYPE;
  877. {$EXTERNALSYM NT_PRODUCT_TYPE}
  878. PNT_PRODUCT_TYPE = ^NT_PRODUCT_TYPE;
  879. TNtProductType = _NT_PRODUCT_TYPE;
  880. //
  881. // the bit mask, SharedUserData->SuiteMask, is a ULONG
  882. // so there can be a maximum of 32 entries
  883. // in this enum.
  884. //
  885. type
  886. _SUITE_TYPE = (
  887. SmallBusiness,
  888. Enterprise,
  889. BackOffice,
  890. CommunicationServer,
  891. TerminalServer,
  892. SmallBusinessRestricted,
  893. EmbeddedNT,
  894. DataCenter,
  895. SingleUserTS,
  896. MaxSuiteType);
  897. {$EXTERNALSYM _SUITE_TYPE}
  898. SUITE_TYPE = _SUITE_TYPE;
  899. {$EXTERNALSYM SUITE_TYPE}
  900. TSuiteType = SUITE_TYPE;
  901. const
  902. VER_SERVER_NT = DWORD($80000000);
  903. {$EXTERNALSYM VER_SERVER_NT}
  904. VER_WORKSTATION_NT = $40000000;
  905. {$EXTERNALSYM VER_WORKSTATION_NT}
  906. VER_SUITE_SMALLBUSINESS = $00000001;
  907. {$EXTERNALSYM VER_SUITE_SMALLBUSINESS}
  908. VER_SUITE_ENTERPRISE = $00000002;
  909. {$EXTERNALSYM VER_SUITE_ENTERPRISE}
  910. VER_SUITE_BACKOFFICE = $00000004;
  911. {$EXTERNALSYM VER_SUITE_BACKOFFICE}
  912. VER_SUITE_COMMUNICATIONS = $00000008;
  913. {$EXTERNALSYM VER_SUITE_COMMUNICATIONS}
  914. VER_SUITE_TERMINAL = $00000010;
  915. {$EXTERNALSYM VER_SUITE_TERMINAL}
  916. VER_SUITE_SMALLBUSINESS_RESTRICTED = $00000020;
  917. {$EXTERNALSYM VER_SUITE_SMALLBUSINESS_RESTRICTED}
  918. VER_SUITE_EMBEDDEDNT = $00000040;
  919. {$EXTERNALSYM VER_SUITE_EMBEDDEDNT}
  920. VER_SUITE_DATACENTER = $00000080;
  921. {$EXTERNALSYM VER_SUITE_DATACENTER}
  922. VER_SUITE_SINGLEUSERTS = $00000100;
  923. {$EXTERNALSYM VER_SUITE_SINGLEUSERTS}
  924. VER_SUITE_PERSONAL = $00000200;
  925. {$EXTERNALSYM VER_SUITE_PERSONAL}
  926. VER_SUITE_BLADE = $00000400;
  927. {$EXTERNALSYM VER_SUITE_BLADE}
  928. // ntdef.h
  929. type
  930. error_status_t = Longword;
  931. {$EXTERNALSYM error_status_t}
  932. wchar_t = Word;
  933. {$EXTERNALSYM wchar_t}
  934. //
  935. // The following types are guaranteed to be signed and 32 bits wide.
  936. //
  937. type
  938. INT_PTR = Integer;
  939. {$EXTERNALSYM INT_PTR}
  940. PINT_PTR = ^INT_PTR;
  941. {$EXTERNALSYM PINT_PTR}
  942. UINT_PTR = Longword;
  943. {$EXTERNALSYM UINT_PTR}
  944. PUINT_PTR = ^UINT_PTR;
  945. {$EXTERNALSYM PUINT_PTR}
  946. LONG_PTR = Longint;
  947. {$EXTERNALSYM LONG_PTR}
  948. PLONG_PTR = ^LONG_PTR;
  949. {$EXTERNALSYM PLONG_PTR}
  950. ULONG_PTR = Longword;
  951. {$EXTERNALSYM ULONG_PTR}
  952. PULONG_PTR = ^ULONG_PTR;
  953. {$EXTERNALSYM PULONG_PTR}
  954. LONG32 = Integer;
  955. {$EXTERNALSYM LONG32}
  956. PLONG32 = ^LONG32;
  957. {$EXTERNALSYM PLONG32}
  958. INT32 = Integer;
  959. {$EXTERNALSYM INT32}
  960. PINT32 = ^INT32;
  961. {$EXTERNALSYM PINT32}
  962. //
  963. // The following types are guaranteed to be unsigned and 32 bits wide.
  964. //
  965. ULONG32 = Longword;
  966. {$EXTERNALSYM ULONG32}
  967. PULONG32 = ^ULONG32;
  968. {$EXTERNALSYM PULONG32}
  969. DWORD32 = Longword;
  970. {$EXTERNALSYM DWORD32}
  971. PDWORD32 = ^DWORD32;
  972. {$EXTERNALSYM PDWORD32}
  973. UINT32 = Longword;
  974. {$EXTERNALSYM UINT32}
  975. PUINT32 = ^UINT32;
  976. {$EXTERNALSYM PUINT32}
  977. const
  978. MAX_PATH = 260;
  979. {$EXTERNALSYM MAX_PATH}
  980. type
  981. //unsigned char BYTE;
  982. //unsigned short WORD;
  983. FLOAT = Single;
  984. {$EXTERNALSYM FLOAT}
  985. PFLOAT = ^FLOAT;
  986. {$EXTERNALSYM PFLOAT}
  987. PBOOL = {$IFDEF USE_DELPHI_TYPES} Windows.PBOOL {$ELSE} ^BOOL {$ENDIF};
  988. {$EXTERNALSYM PBOOL}
  989. LPBOOL = {$IFDEF USE_DELPHI_TYPES} Windows.PBOOL {$ELSE} ^BOOL {$ENDIF};
  990. {$EXTERNALSYM LPBOOL}
  991. PBYTE = {$IFDEF USE_DELPHI_TYPES} Windows.PBYTE {$ELSE} ^Byte {$ENDIF};
  992. {$EXTERNALSYM PBYTE}
  993. LPBYTE = {$IFDEF USE_DELPHI_TYPES} Windows.PBYTE {$ELSE} ^Byte {$ENDIF};
  994. {$EXTERNALSYM LPBYTE}
  995. PINT = {$IFDEF USE_DELPHI_TYPES} Windows.PINT {$ELSE} ^INT {$ENDIF};
  996. {$EXTERNALSYM PINT}
  997. PUINT = {$IFDEF USE_DELPHI_TYPES} Windows.PUINT {$ELSE} ^UINT {$ENDIF};
  998. {$EXTERNALSYM PUINT}
  999. LPUINT = {$IFDEF USE_DELPHI_TYPES} Windows.PUINT {$ELSE} ^UINT {$ENDIF};
  1000. {$EXTERNALSYM LPUINT}
  1001. LPINT = {$IFDEF USE_DELPHI_TYPES} Windows.PINT {$ELSE} ^INT {$ENDIF};
  1002. {$EXTERNALSYM LPINT}
  1003. PWORD = {$IFDEF USE_DELPHI_TYPES} Windows.PWORD {$ELSE} ^WORD {$ENDIF};
  1004. {$EXTERNALSYM PWORD}
  1005. LPWORD = {$IFDEF USE_DELPHI_TYPES} Windows.PWORD {$ELSE} ^WORD {$ENDIF};
  1006. {$EXTERNALSYM LPWORD}
  1007. LPLONG = ^LONG;
  1008. {$EXTERNALSYM LPLONG}
  1009. PDWORD = {$IFDEF USE_DELPHI_TYPES} Windows.PDWORD {$ELSE} ^DWORD {$ENDIF};
  1010. {$EXTERNALSYM PDWORD}
  1011. LPDWORD = {$IFDEF USE_DELPHI_TYPES} Windows.LPDWORD {$ELSE} ^DWORD {$ENDIF};
  1012. {$EXTERNALSYM LPDWORD}
  1013. LPVOID = Pointer;
  1014. {$EXTERNALSYM LPVOID}
  1015. LPCVOID = Pointer;
  1016. {$EXTERNALSYM LPCVOID}
  1017. LPLPVOID = ^LPVOID;
  1018. {$NODEFINE LPVOID}
  1019. INT = Integer;
  1020. {$EXTERNALSYM INT}
  1021. UINT = {$IFDEF USE_DELPHI_TYPES} Windows.UINT {$ELSE} Longword {$ENDIF};
  1022. {$EXTERNALSYM UINT}
  1023. // Types use for passing & returning polymorphic values
  1024. WPARAM = {$IFDEF USE_DELPHI_TYPES} Windows.WPARAM {$ELSE} UINT_PTR {$ENDIF};
  1025. {$EXTERNALSYM WPARAM}
  1026. LPARAM = {$IFDEF USE_DELPHI_TYPES} Windows.LPARAM {$ELSE} LONG_PTR {$ENDIF};
  1027. {$EXTERNALSYM LPARAM}
  1028. LRESULT = {$IFDEF USE_DELPHI_TYPES} Windows.LRESULT {$ELSE} LONG_PTR {$ENDIF};
  1029. {$EXTERNALSYM LRESULT}
  1030. function MAKEWORD(a, b: BYTE): WORD;
  1031. {$EXTERNALSYM MAKEWORD}
  1032. function MAKELONG(a, b: WORD): DWORD;
  1033. {$EXTERNALSYM MAKELONG}
  1034. function LOWORD(L: DWORD): WORD;
  1035. {$EXTERNALSYM LOWORD}
  1036. function HIWORD(L: DWORD): WORD;
  1037. {$EXTERNALSYM HIWORD}
  1038. function LOBYTE(W: WORD): BYTE;
  1039. {$EXTERNALSYM LOBYTE}
  1040. function HIBYTE(W: WORD): BYTE;
  1041. {$EXTERNALSYM HIBYTE}
  1042. type
  1043. HWND = {$IFDEF USE_DELPHI_TYPES} Windows.HWND {$ELSE} HANDLE {$ENDIF};
  1044. {$EXTERNALSYM HWND}
  1045. LPHWND = ^HWND;
  1046. {$EXTERNALSYM LPHWND}
  1047. HHOOK = {$IFDEF USE_DELPHI_TYPES} Windows.HHOOK {$ELSE} HANDLE {$ENDIF};
  1048. {$EXTERNALSYM HHOOK}
  1049. LPHHOOK = ^HHOOK;
  1050. {$EXTERNALSYM LPHHOOK}
  1051. HEVENT = HANDLE;
  1052. {$EXTERNALSYM HEVENT}
  1053. ATOM = {$IFDEF USE_DELPHI_TYPES} Windows.ATOM {$ELSE} WORD {$ENDIF};
  1054. {$EXTERNALSYM ATOM}
  1055. SPHANDLE = ^HANDLE;
  1056. {$EXTERNALSYM SPHANDLE}
  1057. LPHANDLE = ^HANDLE;
  1058. {$EXTERNALSYM LPHANDLE}
  1059. HGLOBAL = {$IFDEF USE_DELPHI_TYPES} Windows.HGLOBAL {$ELSE} HANDLE {$ENDIF};
  1060. {$EXTERNALSYM HGLOBAL}
  1061. HLOCAL = {$IFDEF USE_DELPHI_TYPES} Windows.HLOCAL {$ELSE} HANDLE {$ENDIF};
  1062. {$EXTERNALSYM HLOCAL}
  1063. GLOBALHANDLE = HANDLE;
  1064. {$EXTERNALSYM GLOBALHANDLE}
  1065. //LOCALHANDLE = HANDLE; // todo clashes with WinBase.LocalHandle function
  1066. //{$EXTERNALSYM LOCALHANDLE}
  1067. FARPROC = {$IFDEF USE_DELPHI_TYPES} Windows.FARPROC {$ELSE} function: Integer; stdcall {$ENDIF};
  1068. {$EXTERNALSYM FARPROC}
  1069. NEARPROC = function: Integer; stdcall;
  1070. {$EXTERNALSYM NEARPROC}
  1071. PROC = function: Integer; stdcall;
  1072. {$EXTERNALSYM PROC}
  1073. HGDIOBJ = {$IFDEF USE_DELPHI_TYPES} Windows.HGDIOBJ {$ELSE} HANDLE {$ENDIF};
  1074. {$EXTERNALSYM HGDIOBJ}
  1075. HKEY = {$IFDEF USE_DELPHI_TYPES} Windows.HKEY {$ELSE} HANDLE {$ENDIF};
  1076. {$EXTERNALSYM HKEY}
  1077. PHKEY = {$IFDEF USE_DELPHI_TYPES} Windows.PHKEY {$ELSE} ^HKEY {$ENDIF};
  1078. {$EXTERNALSYM PHKEY}
  1079. HACCEL = {$IFDEF USE_DELPHI_TYPES} Windows.HACCEL {$ELSE} HANDLE {$ENDIF};
  1080. {$EXTERNALSYM HACCEL}
  1081. HBITMAP = {$IFDEF USE_DELPHI_TYPES} Windows.HBITMAP {$ELSE} HANDLE {$ENDIF};
  1082. {$EXTERNALSYM HBITMAP}
  1083. HBRUSH = {$IFDEF USE_DELPHI_TYPES} Windows.HBRUSH {$ELSE} HANDLE {$ENDIF};
  1084. {$EXTERNALSYM HBRUSH}
  1085. HCOLORSPACE = {$IFDEF USE_DELPHI_TYPES} Windows.HCOLORSPACE {$ELSE} HANDLE {$ENDIF};
  1086. {$EXTERNALSYM HCOLORSPACE}
  1087. HDC = {$IFDEF USE_DELPHI_TYPES} Windows.HDC {$ELSE} HANDLE {$ENDIF};
  1088. {$EXTERNALSYM HDC}
  1089. HGLRC = {$IFDEF USE_DELPHI_TYPES} Windows.HGLRC {$ELSE} HANDLE {$ENDIF};
  1090. {$EXTERNALSYM HGLRC}
  1091. HDESK = {$IFDEF USE_DELPHI_TYPES} Windows.HDESK {$ELSE} HANDLE {$ENDIF};
  1092. {$EXTERNALSYM HDESK}
  1093. HENHMETAFILE = {$IFDEF USE_DELPHI_TYPES} Windows.HENHMETAFILE {$ELSE} HANDLE {$ENDIF};
  1094. {$EXTERNALSYM HENHMETAFILE}
  1095. HFONT = {$IFDEF USE_DELPHI_TYPES} Windows.HFONT {$ELSE} HANDLE {$ENDIF};
  1096. {$EXTERNALSYM HFONT}
  1097. HICON = {$IFDEF USE_DELPHI_TYPES} Windows.HICON {$ELSE} HANDLE {$ENDIF};
  1098. {$EXTERNALSYM HICON}
  1099. HMENU = {$IFDEF USE_DELPHI_TYPES} Windows.HMENU {$ELSE} HANDLE {$ENDIF};
  1100. {$EXTERNALSYM HMENU}
  1101. HMETAFILE = {$IFDEF USE_DELPHI_TYPES} Windows.HMETAFILE {$ELSE} HANDLE {$ENDIF};
  1102. {$EXTERNALSYM HMETAFILE}
  1103. HINSTANCE = {$IFDEF USE_DELPHI_TYPES} Windows.HINST {$ELSE} HANDLE {$ENDIF};
  1104. {$EXTERNALSYM HINSTANCE}
  1105. HMODULE = {$IFDEF USE_DELPHI_TYPES} Windows.HMODULE {$ELSE} HINSTANCE {$ENDIF};
  1106. {$EXTERNALSYM HMODULE}
  1107. HPALETTE = {$IFDEF USE_DELPHI_TYPES} Windows.HPALETTE {$ELSE} HANDLE {$ENDIF};
  1108. {$EXTERNALSYM HPALETTE}
  1109. HPEN = {$IFDEF USE_DELPHI_TYPES} Windows.HPEN {$ELSE} HANDLE {$ENDIF};
  1110. {$EXTERNALSYM HPEN}
  1111. HRGN = {$IFDEF USE_DELPHI_TYPES} Windows.HRGN {$ELSE} HANDLE {$ENDIF};
  1112. {$EXTERNALSYM HRGN}
  1113. HRSRC = {$IFDEF USE_DELPHI_TYPES} Windows.HRSRC {$ELSE} HANDLE {$ENDIF};
  1114. {$EXTERNALSYM HRSRC}
  1115. HSTR = {$IFDEF USE_DELPHI_TYPES} Windows.HSTR {$ELSE} HANDLE {$ENDIF};
  1116. {$EXTERNALSYM HSTR}
  1117. HTASK = {$IFDEF USE_DELPHI_TYPES} Windows.HTASK {$ELSE} HANDLE {$ENDIF};
  1118. {$EXTERNALSYM HTASK}
  1119. HWINSTA = {$IFDEF USE_DELPHI_TYPES} Windows.HWINSTA {$ELSE} HANDLE {$ENDIF};
  1120. {$EXTERNALSYM HWINSTA}
  1121. HKL = {$IFDEF USE_DELPHI_TYPES} Windows.HKL {$ELSE} HANDLE {$ENDIF};
  1122. {$EXTERNALSYM HKL}
  1123. PHKL = {$IFDEF USE_DELPHI_TYPES} ^HKL {$ELSE} ^HANDLE {$ENDIF};
  1124. {$EXTERNALSYM PHKL}
  1125. HMONITOR = HANDLE;
  1126. {$EXTERNALSYM HMONITOR}
  1127. HWINEVENTHOOK = HANDLE;
  1128. {$EXTERNALSYM HWINEVENTHOOK}
  1129. HUMPD = HANDLE;
  1130. {$EXTERNALSYM HUMPD}
  1131. HFILE = {$IFDEF USE_DELPHI_TYPES} Windows.HFILE {$ELSE} Longword {$ENDIF};
  1132. {$EXTERNALSYM HFILE}
  1133. HCURSOR = {$IFDEF USE_DELPHI_TYPES} Windows.HCURSOR {$ELSE} HICON {$ENDIF};
  1134. {$EXTERNALSYM HCURSOR}
  1135. COLORREF = {$IFDEF USE_DELPHI_TYPES} Windows.COLORREF {$ELSE} DWORD {$ENDIF};
  1136. {$EXTERNALSYM COLORREF}
  1137. LPCOLORREF = ^COLORREF;
  1138. {$EXTERNALSYM LPCOLORREF}
  1139. PHMODULE = ^HMODULE;
  1140. {$NODEFINE PHMODULE}
  1141. const
  1142. HFILE_ERROR = HFILE(-1);
  1143. {$EXTERNALSYM HFILE_ERROR}
  1144. type
  1145. LPRECT = ^RECT;
  1146. {$EXTERNALSYM LPRECT}
  1147. tagRECT = record
  1148. left: LONG;
  1149. top: LONG;
  1150. right: LONG;
  1151. bottom: LONG;
  1152. end;
  1153. {$EXTERNALSYM tagRECT}
  1154. RECT = {$IFDEF USE_DELPHI_TYPES} Windows.TRect {$ELSE} tagRECT {$ENDIF};
  1155. {$EXTERNALSYM RECT}
  1156. NPRECT = ^RECT;
  1157. {$EXTERNALSYM NPRECT}
  1158. LPCRECT = ^RECT;
  1159. {$EXTERNALSYM LPCRECT}
  1160. TRect = {$IFDEF USE_DELPHI_TYPES} Windows.TRect {$ELSE} RECT {$ENDIF};
  1161. PRect = {$IFDEF USE_DELPHI_TYPES} Windows.PRect {$ELSE} LPRECT {$ENDIF};
  1162. LPRECTL = ^RECTL;
  1163. {$EXTERNALSYM LPRECTL}
  1164. _RECTL = record
  1165. left: LONG;
  1166. top: LONG;
  1167. right: LONG;
  1168. bottom: LONG;
  1169. end;
  1170. {$EXTERNALSYM _RECTL}
  1171. RECTL = _RECTL;
  1172. {$EXTERNALSYM RECTL}
  1173. LPCRECTL = ^_RECTL;
  1174. {$EXTERNALSYM LPCRECTL}
  1175. TRectl = RECTL;
  1176. PRectl = LPRECTL;
  1177. LPPOINT = ^POINT;
  1178. {$EXTERNALSYM LPPOINT}
  1179. tagPOINT = record
  1180. x: LONG;
  1181. y: LONG;
  1182. end;
  1183. {$EXTERNALSYM tagPOINT}
  1184. NPPOINT = ^tagPoint;
  1185. {$EXTERNALSYM NPPOINT}
  1186. POINT = tagPOINT;
  1187. {$EXTERNALSYM tagPOINT}
  1188. TPoint = {$IFDEF USE_DELPHI_TYPES} Windows.TPoint {$ELSE} POINT {$ENDIF};
  1189. PPoint = {$IFDEF USE_DELPHI_TYPES} Windows.PPoint {$ELSE} LPPOINT {$ENDIF};
  1190. PPointl = ^POINTL;
  1191. _POINTL = record
  1192. x: LONG;
  1193. y: LONG;
  1194. end;
  1195. {$EXTERNALSYM _POINTL}
  1196. POINTL = _POINTL;
  1197. {$EXTERNALSYM POINTL}
  1198. TPointl = POINTL;
  1199. LPSIZE = ^TSize;
  1200. {$EXTERNALSYM LPSIZE}
  1201. {$IFDEF USE_DELPHI_TYPES}
  1202. TSize = Windows.TSize;
  1203. PSize = Windows.PSize;
  1204. {$ELSE}
  1205. tagSIZE = record
  1206. cx: LONG;
  1207. cy: LONG;
  1208. end;
  1209. {$EXTERNALSYM tagSIZE}
  1210. TSize = tagSIZE;
  1211. PSize = LPSIZE;
  1212. {$ENDIF USE_DELPHI_TYPES}
  1213. SIZE = TSize;
  1214. {$EXTERNALSYM SIZE}
  1215. SIZEL = TSize;
  1216. {$EXTERNALSYM SIZEL}
  1217. PSIZEL = PSize;
  1218. {$EXTERNALSYM PSIZEL}
  1219. LPSIZEL = PSize;
  1220. {$EXTERNALSYM LPSIZEL}
  1221. LPPOINTS = ^POINTS;
  1222. {$EXTERNALSYM LPPOINTS}
  1223. tagPOINTS = record
  1224. x: SHORT;
  1225. y: SHORT;
  1226. end;
  1227. {$EXTERNALSYM tagPOINTS}
  1228. POINTS = tagPOINTS;
  1229. {$EXTERNALSYM POINTS}
  1230. TPoints = POINTS;
  1231. PPoints = LPPOINTS;
  1232. //
  1233. // File System time stamps are represented with the following structure:
  1234. //
  1235. _FILETIME = record
  1236. dwLowDateTime: DWORD;
  1237. dwHighDateTime: DWORD;
  1238. end;
  1239. {$EXTERNALSYM _FILETIME}
  1240. FILETIME = _FILETIME;
  1241. {$EXTERNALSYM FILETIME}
  1242. PFILETIME = ^FILETIME;
  1243. {$EXTERNALSYM PFILETIME}
  1244. LPFILETIME = PFILETIME;
  1245. {$EXTERNALSYM LPFILETIME}
  1246. TFileTime = FILETIME;
  1247. // mode selections for the device mode function
  1248. const
  1249. DM_UPDATE = 1;
  1250. {$EXTERNALSYM DM_UPDATE}
  1251. DM_COPY = 2;
  1252. {$EXTERNALSYM DM_COPY}
  1253. DM_PROMPT = 4;
  1254. {$EXTERNALSYM DM_PROMPT}
  1255. DM_MODIFY = 8;
  1256. {$EXTERNALSYM DM_MODIFY}
  1257. DM_IN_BUFFER = DM_MODIFY;
  1258. {$EXTERNALSYM DM_IN_BUFFER}
  1259. DM_IN_PROMPT = DM_PROMPT;
  1260. {$EXTERNALSYM DM_IN_PROMPT}
  1261. DM_OUT_BUFFER = DM_COPY;
  1262. {$EXTERNALSYM DM_OUT_BUFFER}
  1263. DM_OUT_DEFAULT = DM_UPDATE;
  1264. {$EXTERNALSYM DM_OUT_DEFAULT}
  1265. // device capabilities indices
  1266. DC_FIELDS = 1;
  1267. {$EXTERNALSYM DC_FIELDS}
  1268. DC_PAPERS = 2;
  1269. {$EXTERNALSYM DC_PAPERS}
  1270. DC_PAPERSIZE = 3;
  1271. {$EXTERNALSYM DC_PAPERSIZE}
  1272. DC_MINEXTENT = 4;
  1273. {$EXTERNALSYM DC_MINEXTENT}
  1274. DC_MAXEXTENT = 5;
  1275. {$EXTERNALSYM DC_MAXEXTENT}
  1276. DC_BINS = 6;
  1277. {$EXTERNALSYM DC_BINS}
  1278. DC_DUPLEX = 7;
  1279. {$EXTERNALSYM DC_DUPLEX}
  1280. DC_SIZE = 8;
  1281. {$EXTERNALSYM DC_SIZE}
  1282. DC_EXTRA = 9;
  1283. {$EXTERNALSYM DC_EXTRA}
  1284. DC_VERSION = 10;
  1285. {$EXTERNALSYM DC_VERSION}
  1286. DC_DRIVER = 11;
  1287. {$EXTERNALSYM DC_DRIVER}
  1288. DC_BINNAMES = 12;
  1289. {$EXTERNALSYM DC_BINNAMES}
  1290. DC_ENUMRESOLUTIONS = 13;
  1291. {$EXTERNALSYM DC_ENUMRESOLUTIONS}
  1292. DC_FILEDEPENDENCIES = 14;
  1293. {$EXTERNALSYM DC_FILEDEPENDENCIES}
  1294. DC_TRUETYPE = 15;
  1295. {$EXTERNALSYM DC_TRUETYPE}
  1296. DC_PAPERNAMES = 16;
  1297. {$EXTERNALSYM DC_PAPERNAMES}
  1298. DC_ORIENTATION = 17;
  1299. {$EXTERNALSYM DC_ORIENTATION}
  1300. DC_COPIES = 18;
  1301. {$EXTERNALSYM DC_COPIES}
  1302. //
  1303. // HALF_PTR is half the size of a pointer it intended for use with
  1304. // within strcuture which contain a pointer and two small fields.
  1305. // UHALF_PTR is the unsigned variation.
  1306. //
  1307. const
  1308. ADDRESS_TAG_BIT = DWORD($80000000);
  1309. {$EXTERNALSYM ADDRESS_TAG_BIT}
  1310. type
  1311. UHALF_PTR = Byte;
  1312. {$EXTERNALSYM UHALF_PTR}
  1313. PUHALF_PTR = ^UHALF_PTR;
  1314. {$EXTERNALSYM PUHALF_PTR}
  1315. HALF_PTR = Shortint;
  1316. {$EXTERNALSYM HALF_PTR}
  1317. PHALF_PTR = ^HALF_PTR;
  1318. {$EXTERNALSYM PHALF_PTR}
  1319. SHANDLE_PTR = Longint;
  1320. {$EXTERNALSYM SHANDLE_PTR}
  1321. HANDLE_PTR = Longint;
  1322. {$EXTERNALSYM HANDLE_PTR}
  1323. //
  1324. // SIZE_T used for counts or ranges which need to span the range of
  1325. // of a pointer. SSIZE_T is the signed variation.
  1326. //
  1327. SIZE_T = ULONG_PTR;
  1328. {$EXTERNALSYM SIZE_T}
  1329. PSIZE_T = ^SIZE_T;
  1330. {$EXTERNALSYM PSIZE_T}
  1331. SSIZE_T = LONG_PTR;
  1332. {$EXTERNALSYM SSIZE_T}
  1333. PSSIZE_T = ^SSIZE_T;
  1334. {$EXTERNALSYM PSSIZE_T}
  1335. //
  1336. // Add Windows flavor DWORD_PTR types
  1337. //
  1338. DWORD_PTR = ULONG_PTR;
  1339. {$EXTERNALSYM DWORD_PTR}
  1340. PDWORD_PTR = ^DWORD_PTR;
  1341. {$EXTERNALSYM PDWORD_PTR}
  1342. //
  1343. // The following types are guaranteed to be signed and 64 bits wide.
  1344. //
  1345. LONG64 = Int64;
  1346. {$EXTERNALSYM LONG64}
  1347. PLONG64 = ^LONG64;
  1348. {$EXTERNALSYM PLONG64}
  1349. PINT64 = ^Int64;
  1350. {$EXTERNALSYM PINT64}
  1351. //
  1352. // The following types are guaranteed to be unsigned and 64 bits wide.
  1353. //
  1354. ULONG64 = Int64;
  1355. {$EXTERNALSYM ULONG64}
  1356. PULONG64 = ^ULONG64;
  1357. {$EXTERNALSYM PULONG64}
  1358. DWORD64 = Int64;
  1359. {$EXTERNALSYM DWORD64}
  1360. PDWORD64 = ^DWORD64;
  1361. {$EXTERNALSYM PDWORD64}
  1362. UINT64 = Int64;
  1363. {$EXTERNALSYM UINT64}
  1364. PUINT64 = ^UINT64;
  1365. {$EXTERNALSYM PUINT64}
  1366. const
  1367. MAXUINT_PTR = not UINT_PTR(0);
  1368. {$EXTERNALSYM MAXUINT_PTR}
  1369. MAXINT_PTR = INT_PTR((MAXUINT_PTR shr 1));
  1370. {$EXTERNALSYM MAXINT_PTR}
  1371. MININT_PTR = not MAXINT_PTR;
  1372. {$EXTERNALSYM MININT_PTR}
  1373. MAXULONG_PTR = not ULONG_PTR(0);
  1374. {$EXTERNALSYM MAXULONG_PTR}
  1375. MAXLONG_PTR = LONG_PTR(MAXULONG_PTR shr 1);
  1376. {$EXTERNALSYM MAXLONG_PTR}
  1377. MINLONG_PTR = not MAXLONG_PTR;
  1378. {$EXTERNALSYM MINLONG_PTR}
  1379. MAXUHALF_PTR = UHALF_PTR( not 0);
  1380. {$EXTERNALSYM MAXUHALF_PTR}
  1381. MAXHALF_PTR = HALF_PTR(MAXUHALF_PTR shr 1);
  1382. {$EXTERNALSYM MAXHALF_PTR}
  1383. MINHALF_PTR = not MAXHALF_PTR;
  1384. {$EXTERNALSYM MINHALF_PTR}
  1385. // basetsd
  1386. type
  1387. INT8 = Shortint;
  1388. {$EXTERNALSYM INT8}
  1389. PINT8 = ^INT8;
  1390. {$EXTERNALSYM PINT8}
  1391. INT16 = Smallint;
  1392. {$EXTERNALSYM INT16}
  1393. PINT16 = ^INT16;
  1394. {$EXTERNALSYM PINT16}
  1395. UINT8 = Byte;
  1396. {$EXTERNALSYM UINT8}
  1397. PUINT8 = ^UINT8;
  1398. {$EXTERNALSYM PUINT8}
  1399. UINT16 = Word;
  1400. {$EXTERNALSYM UINT16}
  1401. PUINT16 = ^UINT16;
  1402. {$EXTERNALSYM PUINT16}
  1403. //
  1404. // Thread affinity.
  1405. //
  1406. KAFFINITY = ULONG_PTR;
  1407. {$EXTERNALSYM KAFFINITY}
  1408. PKAFFINITY = ^KAFFINITY;
  1409. {$EXTERNALSYM PKAFFINITY}
  1410. // (rom) missing types
  1411. LPCASTR = ^AnsiChar;
  1412. LPASTR = ^AnsiChar;
  1413. PCASTR = ^AnsiChar;
  1414. PASTR = ^AnsiChar;
  1415. PPCWSTR = ^LPCWSTR;
  1416. PPCASTR = ^LPCASTR;
  1417. PPCSTR = ^LPCTSTR;
  1418. PPWSTR = ^LPWSTR;
  1419. PPASTR = ^LPASTR;
  1420. PPSTR = ^LPTSTR;
  1421. PPTCHAR = ^PTCHAR;
  1422. LPLPCTSTR = ^LPCTSTR;
  1423. implementation
  1424. uses
  1425. JwaWinNT;
  1426. {$IFNDEF USE_DELPHI_TYPES}
  1427. const
  1428. kernel32 = 'kernel32.dll';
  1429. {$ENDIF !USE_DELPHI_TYPES}
  1430. function Int32x32To64(a, b: LONG): LONGLONG;
  1431. begin
  1432. Result := a * b;
  1433. end;
  1434. function UInt32x32To64(a, b: DWORD): ULONGLONG;
  1435. begin
  1436. Result := a * b;
  1437. end;
  1438. function Int64ShllMod32(Value: ULONGLONG; ShiftCount: DWORD): ULONGLONG;
  1439. asm
  1440. MOV ECX, ShiftCount
  1441. MOV EAX, DWORD PTR [Value]
  1442. MOV EDX, DWORD PTR [Value + 4]
  1443. SHLD EDX, EAX, CL
  1444. SHL EAX, CL
  1445. end;
  1446. function Int64ShraMod32(Value: LONGLONG; ShiftCount: DWORD): LONGLONG;
  1447. asm
  1448. MOV ECX, ShiftCount
  1449. MOV EAX, DWORD PTR [Value]
  1450. MOV EDX, DWORD PTR [Value + 4]
  1451. SHRD EAX, EDX, CL
  1452. SAR EDX, CL
  1453. end;
  1454. function Int64ShrlMod32(Value: ULONGLONG; ShiftCount: DWORD): ULONGLONG;
  1455. asm
  1456. MOV ECX, ShiftCount
  1457. MOV EAX, DWORD PTR [Value]
  1458. MOV EDX, DWORD PTR [Value + 4]
  1459. SHRD EAX, EDX, CL
  1460. SHR EDX, CL
  1461. end;
  1462. procedure ListEntry32To64(l32: PLIST_ENTRY32; l64: PLIST_ENTRY64);
  1463. begin
  1464. l64^.Flink := l32^.Flink;
  1465. l64^.Blink := l32^.Blink;
  1466. end;
  1467. procedure ListEntry64To32(l64: PLIST_ENTRY64; l32: PLIST_ENTRY32);
  1468. begin
  1469. l32^.Flink := ULONG(l64^.Flink);
  1470. l32^.Blink := ULONG(l64^.Blink);
  1471. end;
  1472. function NT_SUCCESS(Status: NTSTATUS): BOOL;
  1473. begin
  1474. Result := Status >= 0;
  1475. end;
  1476. function NT_INFORMATION(Status: NTSTATUS): BOOL;
  1477. begin
  1478. Result := (ULONG(Status) shr 30) = 1;
  1479. end;
  1480. function NT_WARNING(Status: NTSTATUS): BOOL;
  1481. begin
  1482. Result := (ULONG(Status) shr 30) = 2;
  1483. end;
  1484. function NT_ERROR(Status: NTSTATUS): BOOL;
  1485. begin
  1486. Result := (ULONG(Status) shr 30) = 3;
  1487. end;
  1488. procedure InitializeObjectAttributes(p: POBJECT_ATTRIBUTES; n: PUNICODE_STRING;
  1489. a: ULONG; r: HANDLE; s: PVOID{PSECURITY_DESCRIPTOR});
  1490. begin
  1491. p^.Length := SizeOf(OBJECT_ATTRIBUTES);
  1492. p^.RootDirectory := r;
  1493. p^.Attributes := a;
  1494. p^.ObjectName := n;
  1495. p^.SecurityDescriptor := s;
  1496. p^.SecurityQualityOfService := nil;
  1497. end;
  1498. function ARGUMENT_PRESENT(ArgumentPointer: Pointer): BOOL;
  1499. begin
  1500. Result := ArgumentPointer <> nil;
  1501. end;
  1502. function MAKEWORD(a, b: BYTE): WORD;
  1503. begin
  1504. Result := (b shl 8) or a;
  1505. end;
  1506. function MAKELONG(a, b: WORD): DWORD;
  1507. begin
  1508. Result := (b shl 16) or a;
  1509. end;
  1510. function LOWORD(L: DWORD): WORD;
  1511. begin
  1512. Result := L and $0000FFFF;
  1513. end;
  1514. function HIWORD(L: DWORD): WORD;
  1515. begin
  1516. Result := L shr 16;
  1517. end;
  1518. function LOBYTE(W: WORD): BYTE;
  1519. begin
  1520. Result := W and $FF;
  1521. end;
  1522. function HIBYTE(W: WORD): BYTE;
  1523. begin
  1524. Result := W shr 8;
  1525. end;
  1526. function GetModuleHandle(lpModuleName: LPCSTR): HMODULE; stdcall; external kernel32 name 'GetModuleHandleA';
  1527. function LoadLibrary(lpLibFileName: LPCSTR): HMODULE; stdcall; external kernel32 name 'LoadLibraryA';
  1528. function GetProcAddress(hModule: HMODULE; lpProcName: LPCSTR): FARPROC; stdcall; external kernel32 name 'GetProcAddress';
  1529. resourcestring
  1530. RsELibraryNotFound = 'Library not found: %s';
  1531. RsEFunctionNotFound = 'Function not found: %s.%s';
  1532. procedure GetProcedureAddress(var P: Pointer; const ModuleName, ProcName: string);
  1533. var
  1534. ModuleHandle: HMODULE;
  1535. begin
  1536. if not Assigned(P) then
  1537. begin
  1538. ModuleHandle := GetModuleHandle(PChar(ModuleName));
  1539. if ModuleHandle = 0 then
  1540. begin
  1541. ModuleHandle := LoadLibrary(PChar(ModuleName));
  1542. if ModuleHandle = 0 then
  1543. raise EJwaLoadLibraryError.CreateResFmt(@RsELibraryNotFound, [ModuleName]);
  1544. end;
  1545. P := Pointer(GetProcAddress(ModuleHandle, PChar(ProcName)));
  1546. if not Assigned(P) then
  1547. raise EJwaGetProcAddressError.CreateResFmt(@RsEFunctionNotFound, [ModuleName, ProcName]);
  1548. end;
  1549. end;
  1550. end.