jwawintype.pas 46 KB

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