winternl.h 75 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917
  1. /*
  2. * Internal NT APIs and data structures
  3. *
  4. * Copyright (C) the Wine project
  5. *
  6. * This library is free software; you can redistribute it and/or
  7. * modify it under the terms of the GNU Lesser General Public
  8. * License as published by the Free Software Foundation; either
  9. * version 2.1 of the License, or (at your option) any later version.
  10. *
  11. * This library is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14. * Lesser General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU Lesser General Public
  17. * License along with this library; if not, write to the Free Software
  18. * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  19. */
  20. #ifndef __WINE_WINTERNL_H
  21. #define __WINE_WINTERNL_H
  22. #include <windef.h>
  23. #ifdef __cplusplus
  24. extern "C" {
  25. #endif /* defined(__cplusplus) */
  26. /**********************************************************************
  27. * Fundamental types and data structures
  28. */
  29. typedef LONG NTSTATUS;
  30. typedef CONST char *PCSZ;
  31. typedef short CSHORT;
  32. typedef CSHORT *PCSHORT;
  33. typedef struct _STRING {
  34. USHORT Length;
  35. USHORT MaximumLength;
  36. PCHAR Buffer;
  37. } STRING, *PSTRING;
  38. typedef STRING ANSI_STRING;
  39. typedef PSTRING PANSI_STRING;
  40. typedef const STRING *PCANSI_STRING;
  41. typedef STRING OEM_STRING;
  42. typedef PSTRING POEM_STRING;
  43. typedef const STRING *PCOEM_STRING;
  44. typedef struct _UNICODE_STRING {
  45. USHORT Length; /* bytes */
  46. USHORT MaximumLength; /* bytes */
  47. PWSTR Buffer;
  48. } UNICODE_STRING, *PUNICODE_STRING;
  49. typedef const UNICODE_STRING *PCUNICODE_STRING;
  50. typedef struct _CLIENT_ID
  51. {
  52. HANDLE UniqueProcess;
  53. HANDLE UniqueThread;
  54. } CLIENT_ID, *PCLIENT_ID;
  55. typedef struct _CURDIR
  56. {
  57. UNICODE_STRING DosPath;
  58. PVOID Handle;
  59. } CURDIR, *PCURDIR;
  60. typedef struct RTL_DRIVE_LETTER_CURDIR
  61. {
  62. USHORT Flags;
  63. USHORT Length;
  64. ULONG TimeStamp;
  65. UNICODE_STRING DosPath;
  66. } RTL_DRIVE_LETTER_CURDIR, *PRTL_DRIVE_LETTER_CURDIR;
  67. typedef struct tagRTL_BITMAP {
  68. ULONG SizeOfBitMap; /* Number of bits in the bitmap */
  69. PULONG Buffer; /* Bitmap data, assumed sized to a DWORD boundary */
  70. } RTL_BITMAP, *PRTL_BITMAP;
  71. typedef const RTL_BITMAP *PCRTL_BITMAP;
  72. typedef struct tagRTL_BITMAP_RUN {
  73. ULONG StartingIndex; /* Bit position at which run starts */
  74. ULONG NumberOfBits; /* Size of the run in bits */
  75. } RTL_BITMAP_RUN, *PRTL_BITMAP_RUN;
  76. typedef const RTL_BITMAP_RUN *PCRTL_BITMAP_RUN;
  77. typedef struct _RTL_USER_PROCESS_PARAMETERS
  78. {
  79. ULONG AllocationSize;
  80. ULONG Size;
  81. ULONG Flags;
  82. ULONG DebugFlags;
  83. HANDLE ConsoleHandle;
  84. ULONG ConsoleFlags;
  85. HANDLE hStdInput;
  86. HANDLE hStdOutput;
  87. HANDLE hStdError;
  88. CURDIR CurrentDirectory;
  89. UNICODE_STRING DllPath;
  90. UNICODE_STRING ImagePathName;
  91. UNICODE_STRING CommandLine;
  92. PWSTR Environment;
  93. ULONG dwX;
  94. ULONG dwY;
  95. ULONG dwXSize;
  96. ULONG dwYSize;
  97. ULONG dwXCountChars;
  98. ULONG dwYCountChars;
  99. ULONG dwFillAttribute;
  100. ULONG dwFlags;
  101. ULONG wShowWindow;
  102. UNICODE_STRING WindowTitle;
  103. UNICODE_STRING Desktop;
  104. UNICODE_STRING ShellInfo;
  105. UNICODE_STRING RuntimeInfo;
  106. RTL_DRIVE_LETTER_CURDIR DLCurrentDirectory[0x20];
  107. } RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS;
  108. /* value for Flags field (FIXME: not the correct name) */
  109. #define PROCESS_PARAMS_FLAG_NORMALIZED 1
  110. typedef struct _PEB_LDR_DATA
  111. {
  112. ULONG Length;
  113. BOOLEAN Initialized;
  114. PVOID SsHandle;
  115. LIST_ENTRY InLoadOrderModuleList;
  116. LIST_ENTRY InMemoryOrderModuleList;
  117. LIST_ENTRY InInitializationOrderModuleList;
  118. } PEB_LDR_DATA, *PPEB_LDR_DATA;
  119. /***********************************************************************
  120. * PEB data structure
  121. */
  122. typedef struct _PEB
  123. {
  124. BOOLEAN InheritedAddressSpace; /* 00 */
  125. BOOLEAN ReadImageFileExecOptions; /* 01 */
  126. BOOLEAN BeingDebugged; /* 02 */
  127. BOOLEAN SpareBool; /* 03 */
  128. HANDLE Mutant; /* 04 */
  129. HMODULE ImageBaseAddress; /* 08 */
  130. PPEB_LDR_DATA LdrData; /* 0c */
  131. RTL_USER_PROCESS_PARAMETERS *ProcessParameters; /* 10 */
  132. PVOID SubSystemData; /* 14 */
  133. HANDLE ProcessHeap; /* 18 */
  134. PRTL_CRITICAL_SECTION FastPebLock; /* 1c */
  135. PVOID /*PPEBLOCKROUTINE*/ FastPebLockRoutine; /* 20 */
  136. PVOID /*PPEBLOCKROUTINE*/ FastPebUnlockRoutine; /* 24 */
  137. ULONG EnvironmentUpdateCount; /* 28 */
  138. PVOID KernelCallbackTable; /* 2c */
  139. PVOID EventLogSection; /* 30 */
  140. PVOID EventLog; /* 34 */
  141. PVOID /*PPEB_FREE_BLOCK*/ FreeList; /* 38 */
  142. ULONG TlsExpansionCounter; /* 3c */
  143. PRTL_BITMAP TlsBitmap; /* 40 */
  144. ULONG TlsBitmapBits[2]; /* 44 */
  145. PVOID ReadOnlySharedMemoryBase; /* 4c */
  146. PVOID ReadOnlySharedMemoryHeap; /* 50 */
  147. PVOID *ReadOnlyStaticServerData; /* 54 */
  148. PVOID AnsiCodePageData; /* 58 */
  149. PVOID OemCodePageData; /* 5c */
  150. PVOID UnicodeCaseTableData; /* 60 */
  151. ULONG NumberOfProcessors; /* 64 */
  152. ULONG NtGlobalFlag; /* 68 */
  153. BYTE Spare2[4]; /* 6c */
  154. LARGE_INTEGER CriticalSectionTimeout; /* 70 */
  155. ULONG HeapSegmentReserve; /* 78 */
  156. ULONG HeapSegmentCommit; /* 7c */
  157. ULONG HeapDeCommitTotalFreeThreshold; /* 80 */
  158. ULONG HeapDeCommitFreeBlockThreshold; /* 84 */
  159. ULONG NumberOfHeaps; /* 88 */
  160. ULONG MaximumNumberOfHeaps; /* 8c */
  161. PVOID *ProcessHeaps; /* 90 */
  162. PVOID GdiSharedHandleTable; /* 94 */
  163. PVOID ProcessStarterHelper; /* 98 */
  164. PVOID GdiDCAttributeList; /* 9c */
  165. PVOID LoaderLock; /* a0 */
  166. ULONG OSMajorVersion; /* a4 */
  167. ULONG OSMinorVersion; /* a8 */
  168. ULONG OSBuildNumber; /* ac */
  169. ULONG OSPlatformId; /* b0 */
  170. ULONG ImageSubSystem; /* b4 */
  171. ULONG ImageSubSystemMajorVersion; /* b8 */
  172. ULONG ImageSubSystemMinorVersion; /* bc */
  173. ULONG ImageProcessAffinityMask; /* c0 */
  174. ULONG GdiHandleBuffer[34]; /* c4 */
  175. ULONG PostProcessInitRoutine; /* 14c */
  176. ULONG TlsExpansionBitmap; /* 150 */
  177. ULONG TlsExpansionBitmapBits[32]; /* 154 */
  178. ULONG SessionId; /* 1d4 */
  179. } PEB, *PPEB;
  180. /***********************************************************************
  181. * TEB data structure
  182. */
  183. #if defined(_NTSYSTEM_) || defined(_KERNEL32_) /* hack, should go away */
  184. # define WINE_NO_TEB
  185. #endif
  186. #ifndef WINE_NO_TEB /* don't define TEB if included from thread.h */
  187. # ifndef WINE_TEB_DEFINED
  188. # define WINE_TEB_DEFINED
  189. typedef struct _TEB
  190. {
  191. NT_TIB Tib; /* 000 */
  192. PVOID EnvironmentPointer; /* 01c */
  193. CLIENT_ID ClientId; /* 020 */
  194. PVOID ActiveRpcHandle; /* 028 */
  195. PVOID ThreadLocalStoragePointer; /* 02c */
  196. PPEB Peb; /* 030 */
  197. ULONG LastErrorValue; /* 034 */
  198. BYTE __pad038[140]; /* 038 */
  199. ULONG CurrentLocale; /* 0c4 */
  200. BYTE __pad0c8[1752]; /* 0c8 */
  201. PVOID Reserved2[277]; /* 7a0 */
  202. ULONG LastStatusValue; /* bf4 */
  203. UNICODE_STRING StaticUnicodeString; /* bf8 used by advapi32 */
  204. WCHAR StaticUnicodeBuffer[261]; /* c00 used by advapi32 */
  205. PVOID DeallocationStack; /* e0c */
  206. PVOID TlsSlots[64]; /* e10 */
  207. LIST_ENTRY TlsLinks; /* f10 */
  208. PVOID Reserved4[26]; /* f18 */
  209. PVOID ReservedForOle; /* f80 Windows 2000 only */
  210. PVOID Reserved5[4]; /* f84 */
  211. PVOID TlsExpansionSlots; /* f94 */
  212. } TEB, *PTEB;
  213. # endif /* WINE_TEB_DEFINED */
  214. #endif /* WINE_NO_TEB */
  215. /***********************************************************************
  216. * Enums
  217. */
  218. typedef enum _FILE_INFORMATION_CLASS {
  219. FileDirectoryInformation = 1,
  220. FileFullDirectoryInformation,
  221. FileBothDirectoryInformation,
  222. FileBasicInformation,
  223. FileStandardInformation,
  224. FileInternalInformation,
  225. FileEaInformation,
  226. FileAccessInformation,
  227. FileNameInformation,
  228. FileRenameInformation,
  229. FileLinkInformation,
  230. FileNamesInformation,
  231. FileDispositionInformation,
  232. FilePositionInformation,
  233. FileFullEaInformation,
  234. FileModeInformation,
  235. FileAlignmentInformation,
  236. FileAllInformation,
  237. FileAllocationInformation,
  238. FileEndOfFileInformation,
  239. FileAlternateNameInformation,
  240. FileStreamInformation,
  241. FilePipeInformation,
  242. FilePipeLocalInformation,
  243. FilePipeRemoteInformation,
  244. FileMailslotQueryInformation,
  245. FileMailslotSetInformation,
  246. FileCompressionInformation,
  247. FileObjectIdInformation,
  248. FileCompletionInformation,
  249. FileMoveClusterInformation,
  250. FileQuotaInformation,
  251. FileReparsePointInformation,
  252. FileNetworkOpenInformation,
  253. FileAttributeTagInformation,
  254. FileTrackingInformation,
  255. FileMaximumInformation
  256. } FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;
  257. typedef struct _FILE_DIRECTORY_INFORMATION {
  258. ULONG NextEntryOffset;
  259. ULONG FileIndex;
  260. LARGE_INTEGER CreationTime;
  261. LARGE_INTEGER LastAccessTime;
  262. LARGE_INTEGER LastWriteTime;
  263. LARGE_INTEGER ChangeTime;
  264. LARGE_INTEGER EndOfFile;
  265. LARGE_INTEGER AllocationSize;
  266. ULONG FileAttributes;
  267. ULONG FileNameLength;
  268. WCHAR FileName[ANYSIZE_ARRAY];
  269. } FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION;
  270. typedef struct _FILE_FULL_DIRECTORY_INFORMATION {
  271. ULONG NextEntryOffset;
  272. ULONG FileIndex;
  273. LARGE_INTEGER CreationTime;
  274. LARGE_INTEGER LastAccessTime;
  275. LARGE_INTEGER LastWriteTime;
  276. LARGE_INTEGER ChangeTime;
  277. LARGE_INTEGER EndOfFile;
  278. LARGE_INTEGER AllocationSize;
  279. ULONG FileAttributes;
  280. ULONG FileNameLength;
  281. ULONG EaSize;
  282. WCHAR FileName[ANYSIZE_ARRAY];
  283. } FILE_FULL_DIRECTORY_INFORMATION, *PFILE_FULL_DIRECTORY_INFORMATION,
  284. FILE_FULL_DIR_INFORMATION, *PFILE_FULL_DIR_INFORMATION;
  285. typedef struct _FILE_BOTH_DIRECTORY_INFORMATION {
  286. ULONG NextEntryOffset;
  287. ULONG FileIndex;
  288. LARGE_INTEGER CreationTime;
  289. LARGE_INTEGER LastAccessTime;
  290. LARGE_INTEGER LastWriteTime;
  291. LARGE_INTEGER ChangeTime;
  292. LARGE_INTEGER EndOfFile;
  293. LARGE_INTEGER AllocationSize;
  294. ULONG FileAttributes;
  295. ULONG FileNameLength;
  296. ULONG EaSize;
  297. CHAR ShortNameLength;
  298. WCHAR ShortName[12];
  299. WCHAR FileName[ANYSIZE_ARRAY];
  300. } FILE_BOTH_DIRECTORY_INFORMATION, *PFILE_BOTH_DIRECTORY_INFORMATION,
  301. FILE_BOTH_DIR_INFORMATION, *PFILE_BOTH_DIR_INFORMATION;
  302. typedef struct _FILE_BASIC_INFORMATION {
  303. LARGE_INTEGER CreationTime;
  304. LARGE_INTEGER LastAccessTime;
  305. LARGE_INTEGER LastWriteTime;
  306. LARGE_INTEGER ChangeTime;
  307. ULONG FileAttributes;
  308. } FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION;
  309. typedef struct _FILE_STANDARD_INFORMATION {
  310. LARGE_INTEGER AllocationSize;
  311. LARGE_INTEGER EndOfFile;
  312. ULONG NumberOfLinks;
  313. BOOLEAN DeletePending;
  314. BOOLEAN Directory;
  315. } FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION;
  316. typedef struct _FILE_INTERNAL_INFORMATION {
  317. LARGE_INTEGER IndexNumber;
  318. } FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION;
  319. typedef struct _FILE_EA_INFORMATION {
  320. ULONG EaSize;
  321. } FILE_EA_INFORMATION, *PFILE_EA_INFORMATION;
  322. typedef struct _FILE_ACCESS_INFORMATION {
  323. ACCESS_MASK AccessFlags;
  324. } FILE_ACCESS_INFORMATION, *PFILE_ACCESS_INFORMATION;
  325. typedef struct _FILE_NAME_INFORMATION {
  326. ULONG FileNameLength;
  327. WCHAR FileName[1];
  328. } FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;
  329. typedef struct _FILE_RENAME_INFORMATION {
  330. BOOLEAN Replace;
  331. HANDLE RootDir;
  332. ULONG FileNameLength;
  333. WCHAR FileName[1];
  334. } FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION;
  335. typedef struct _FILE_NAMES_INFORMATION {
  336. ULONG NextEntryOffset;
  337. ULONG FileIndex;
  338. ULONG FileNameLength;
  339. WCHAR FileName[1];
  340. } FILE_NAMES_INFORMATION, *PFILE_NAMES_INFORMATION;
  341. typedef struct _FILE_DISPOSITION_INFORMATION {
  342. BOOLEAN DoDeleteFile;
  343. } FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION;
  344. typedef struct _FILE_POSITION_INFORMATION {
  345. LARGE_INTEGER CurrentByteOffset;
  346. } FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION;
  347. typedef struct _FILE_ALIGNMENT_INFORMATION {
  348. ULONG AlignmentRequirement;
  349. } FILE_ALIGNMENT_INFORMATION, *PFILE_ALIGNMENT_INFORMATION;
  350. typedef struct _FILE_ALLOCATION_INFORMATION {
  351. LARGE_INTEGER AllocationSize;
  352. } FILE_ALLOCATION_INFORMATION, *PFILE_ALLOCATION_INFORMATION;
  353. typedef struct _FILE_END_OF_FILE_INFORMATION {
  354. LARGE_INTEGER EndOfFile;
  355. } FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION;
  356. typedef struct _FILE_NETWORK_OPEN_INFORMATION {
  357. LARGE_INTEGER CreationTime;
  358. LARGE_INTEGER LastAccessTime;
  359. LARGE_INTEGER LastWriteTime;
  360. LARGE_INTEGER ChangeTime;
  361. LARGE_INTEGER AllocationSize;
  362. LARGE_INTEGER EndOfFile;
  363. ULONG FileAttributes;
  364. } FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;
  365. typedef struct _FILE_FULL_EA_INFORMATION {
  366. ULONG NextEntryOffset;
  367. UCHAR Flags;
  368. UCHAR EaNameLength;
  369. USHORT EaValueLength;
  370. CHAR EaName[1];
  371. } FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION;
  372. typedef struct _FILE_MODE_INFORMATION {
  373. ULONG Mode;
  374. } FILE_MODE_INFORMATION, *PFILE_MODE_INFORMATION;
  375. typedef struct _FILE_STREAM_INFORMATION
  376. {
  377. ULONG NextEntryOffset;
  378. ULONG StreamNameLength;
  379. LARGE_INTEGER StreamSize;
  380. LARGE_INTEGER StreamAllocationSize;
  381. WCHAR StreamName[1];
  382. } FILE_STREAM_INFORMATION, *PFILE_STREAM_INFORMATION;
  383. typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION
  384. {
  385. ULONG FileAttributes;
  386. ULONG ReparseTag;
  387. } FILE_ATTRIBUTE_TAG_INFORMATION, *PFILE_ATTRIBUTE_TAG_INFORMATION;
  388. typedef struct _FILE_ALL_INFORMATION
  389. {
  390. FILE_BASIC_INFORMATION BasicInformation;
  391. FILE_STANDARD_INFORMATION StandardInformation;
  392. FILE_INTERNAL_INFORMATION InternalInformation;
  393. FILE_EA_INFORMATION EaInformation;
  394. FILE_ACCESS_INFORMATION AccessInformation;
  395. FILE_POSITION_INFORMATION PositionInformation;
  396. FILE_MODE_INFORMATION ModeInformation;
  397. FILE_ALIGNMENT_INFORMATION AlignmentInformation;
  398. FILE_NAME_INFORMATION NameInformation;
  399. } FILE_ALL_INFORMATION, *PFILE_ALL_INFORMATION;
  400. typedef enum _FSINFOCLASS {
  401. FileFsVolumeInformation = 1,
  402. FileFsLabelInformation,
  403. FileFsSizeInformation,
  404. FileFsDeviceInformation,
  405. FileFsAttributeInformation,
  406. FileFsControlInformation,
  407. FileFsFullSizeInformation,
  408. FileFsObjectIdInformation,
  409. FileFsMaximumInformation
  410. } FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS;
  411. typedef enum _KEY_INFORMATION_CLASS {
  412. KeyBasicInformation,
  413. KeyNodeInformation,
  414. KeyFullInformation
  415. } KEY_INFORMATION_CLASS;
  416. typedef enum _KEY_VALUE_INFORMATION_CLASS {
  417. KeyValueBasicInformation,
  418. KeyValueFullInformation,
  419. KeyValuePartialInformation,
  420. KeyValueFullInformationAlign64,
  421. KeyValuePartialInformationAlign64
  422. } KEY_VALUE_INFORMATION_CLASS;
  423. typedef enum _OBJECT_INFORMATION_CLASS {
  424. ObjectBasicInformation,
  425. ObjectNameInformation,
  426. ObjectTypeInformation,
  427. ObjectAllInformation,
  428. ObjectDataInformation
  429. } OBJECT_INFORMATION_CLASS, *POBJECT_INFORMATION_CLASS;
  430. typedef enum _PROCESSINFOCLASS {
  431. ProcessBasicInformation = 0,
  432. ProcessQuotaLimits = 1,
  433. ProcessIoCounters = 2,
  434. ProcessVmCounters = 3,
  435. ProcessTimes = 4,
  436. ProcessBasePriority = 5,
  437. ProcessRaisePriority = 6,
  438. ProcessDebugPort = 7,
  439. ProcessExceptionPort = 8,
  440. ProcessAccessToken = 9,
  441. ProcessLdtInformation = 10,
  442. ProcessLdtSize = 11,
  443. ProcessDefaultHardErrorMode = 12,
  444. ProcessIoPortHandlers = 13,
  445. ProcessPooledUsageAndLimits = 14,
  446. ProcessWorkingSetWatch = 15,
  447. ProcessUserModeIOPL = 16,
  448. ProcessEnableAlignmentFaultFixup = 17,
  449. ProcessPriorityClass = 18,
  450. ProcessWx86Information = 19,
  451. ProcessHandleCount = 20,
  452. ProcessAffinityMask = 21,
  453. ProcessPriorityBoost = 22,
  454. ProcessDeviceMap = 23,
  455. ProcessSessionInformation = 24,
  456. ProcessForegroundInformation = 25,
  457. ProcessWow64Information = 26,
  458. MaxProcessInfoClass
  459. } PROCESSINFOCLASS;
  460. typedef enum _SECTION_INHERIT {
  461. ViewShare = 1,
  462. ViewUnmap = 2
  463. } SECTION_INHERIT;
  464. typedef enum _SYSTEM_INFORMATION_CLASS {
  465. SystemBasicInformation = 0,
  466. SystemCpuInformation = 1,
  467. SystemPerformanceInformation = 2,
  468. SystemTimeOfDayInformation = 3, /* was SystemTimeInformation */
  469. Unknown4,
  470. SystemProcessInformation = 5,
  471. Unknown6,
  472. Unknown7,
  473. SystemProcessorPerformanceInformation = 8,
  474. Unknown9,
  475. Unknown10,
  476. SystemDriverInformation,
  477. Unknown12,
  478. Unknown13,
  479. Unknown14,
  480. Unknown15,
  481. SystemHandleList,
  482. Unknown17,
  483. Unknown18,
  484. Unknown19,
  485. Unknown20,
  486. SystemCacheInformation,
  487. Unknown22,
  488. SystemInterruptInformation = 23,
  489. SystemDpcBehaviourInformation = 24,
  490. SystemFullMemoryInformation = 25,
  491. SystemNotImplemented6 = 25,
  492. SystemLoadImage = 26,
  493. SystemUnloadImage = 27,
  494. SystemTimeAdjustmentInformation = 28,
  495. SystemTimeAdjustment = 28,
  496. SystemSummaryMemoryInformation = 29,
  497. SystemNotImplemented7 = 29,
  498. SystemNextEventIdInformation = 30,
  499. SystemNotImplemented8 = 30,
  500. SystemEventIdsInformation = 31,
  501. SystemCrashDumpInformation = 32,
  502. SystemExceptionInformation = 33,
  503. SystemCrashDumpStateInformation = 34,
  504. SystemKernelDebuggerInformation = 35,
  505. SystemContextSwitchInformation = 36,
  506. SystemRegistryQuotaInformation = 37,
  507. SystemCurrentTimeZoneInformation = 44,
  508. SystemTimeZoneInformation = 44,
  509. SystemLookasideInformation = 45,
  510. SystemSetTimeSlipEvent = 46,
  511. SystemCreateSession = 47,
  512. SystemDeleteSession = 48,
  513. SystemInvalidInfoClass4 = 49,
  514. SystemRangeStartInformation = 50,
  515. SystemVerifierInformation = 51,
  516. SystemAddVerifier = 52,
  517. SystemSessionProcessesInformation = 53,
  518. SystemInformationClassMax
  519. } SYSTEM_INFORMATION_CLASS, *PSYSTEM_INFORMATION_CLASS;
  520. typedef enum _TIMER_TYPE {
  521. NotificationTimer,
  522. SynchronizationTimer
  523. } TIMER_TYPE;
  524. typedef enum _THREADINFOCLASS {
  525. ThreadBasicInformation,
  526. ThreadTimes,
  527. ThreadPriority,
  528. ThreadBasePriority,
  529. ThreadAffinityMask,
  530. ThreadImpersonationToken,
  531. ThreadDescriptorTableEntry,
  532. ThreadEnableAlignmentFaultFixup,
  533. ThreadEventPair_Reusable,
  534. ThreadQuerySetWin32StartAddress,
  535. ThreadZeroTlsCell,
  536. ThreadPerformanceCount,
  537. ThreadAmILastThread,
  538. ThreadIdealProcessor,
  539. ThreadPriorityBoost,
  540. ThreadSetTlsArrayAddress,
  541. ThreadIsIoPending,
  542. MaxThreadInfoClass
  543. } THREADINFOCLASS;
  544. typedef struct _THREAD_BASIC_INFORMATION
  545. {
  546. NTSTATUS ExitStatus;
  547. PVOID TebBaseAddress;
  548. CLIENT_ID ClientId;
  549. ULONG AffinityMask;
  550. LONG Priority;
  551. LONG BasePriority;
  552. } THREAD_BASIC_INFORMATION, *PTHREAD_BASIC_INFORMATION;
  553. typedef enum _WINSTATIONINFOCLASS {
  554. WinStationInformation = 8
  555. } WINSTATIONINFOCLASS;
  556. typedef enum _MEMORY_INFORMATION_CLASS {
  557. MemoryBasicInformation,
  558. MemoryWorkingSetList,
  559. MemorySectionName,
  560. MemoryBasicVlmInformation
  561. } MEMORY_INFORMATION_CLASS;
  562. typedef enum _MUTANT_INFORMATION_CLASS
  563. {
  564. MutantBasicInformation
  565. } MUTANT_INFORMATION_CLASS, *PMUTANT_INFORMATION_CLASS;
  566. typedef struct _MUTANT_BASIC_INFORMATION {
  567. LONG CurrentCount;
  568. BOOLEAN OwnedByCaller;
  569. BOOLEAN AbandonedState;
  570. } MUTANT_BASIC_INFORMATION, *PMUTANT_BASIC_INFORMATION;
  571. typedef enum _TIMER_INFORMATION_CLASS
  572. {
  573. TimerBasicInformation = 0
  574. } TIMER_INFORMATION_CLASS;
  575. typedef struct _TIMER_BASIC_INFORMATION
  576. {
  577. LARGE_INTEGER RemainingTime;
  578. BOOLEAN TimerState;
  579. } TIMER_BASIC_INFORMATION, *PTIMER_BASIC_INFORMATION;
  580. /* return type of RtlDetermineDosPathNameType_U (FIXME: not the correct names) */
  581. typedef enum
  582. {
  583. INVALID_PATH = 0,
  584. UNC_PATH, /* "//foo" */
  585. ABSOLUTE_DRIVE_PATH, /* "c:/foo" */
  586. RELATIVE_DRIVE_PATH, /* "c:foo" */
  587. ABSOLUTE_PATH, /* "/foo" */
  588. RELATIVE_PATH, /* "foo" */
  589. DEVICE_PATH, /* "//./foo" */
  590. UNC_DOT_PATH /* "//." */
  591. } DOS_PATHNAME_TYPE;
  592. /***********************************************************************
  593. * IA64 specific types and data structures
  594. */
  595. #ifdef __ia64__
  596. typedef struct _FRAME_POINTERS {
  597. ULONGLONG MemoryStackFp;
  598. ULONGLONG BackingStoreFp;
  599. } FRAME_POINTERS, *PFRAME_POINTERS;
  600. #define UNWIND_HISTORY_TABLE_SIZE 12
  601. typedef struct _RUNTIME_FUNCTION {
  602. ULONG BeginAddress;
  603. ULONG EndAddress;
  604. ULONG UnwindInfoAddress;
  605. } RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;
  606. typedef struct _UNWIND_HISTORY_TABLE_ENTRY {
  607. ULONG64 ImageBase;
  608. ULONG64 Gp;
  609. PRUNTIME_FUNCTION FunctionEntry;
  610. } UNWIND_HISTORY_TABLE_ENTRY, *PUNWIND_HISTORY_TABLE_ENTRY;
  611. typedef struct _UNWIND_HISTORY_TABLE {
  612. ULONG Count;
  613. UCHAR Search;
  614. ULONG64 LowAddress;
  615. ULONG64 HighAddress;
  616. UNWIND_HISTORY_TABLE_ENTRY Entry[UNWIND_HISTORY_TABLE_SIZE];
  617. } UNWIND_HISTORY_TABLE, *PUNWIND_HISTORY_TABLE;
  618. #endif /* defined(__ia64__) */
  619. /***********************************************************************
  620. * Types and data structures
  621. */
  622. /* This is used by NtQuerySystemInformation */
  623. /* FIXME: Isn't THREAD_INFO and THREADINFO the same structure? */
  624. typedef struct {
  625. FILETIME ftKernelTime;
  626. FILETIME ftUserTime;
  627. FILETIME ftCreateTime;
  628. DWORD dwTickCount;
  629. DWORD dwStartAddress;
  630. DWORD dwOwningPID;
  631. DWORD dwThreadID;
  632. DWORD dwCurrentPriority;
  633. DWORD dwBasePriority;
  634. DWORD dwContextSwitches;
  635. DWORD dwThreadState;
  636. DWORD dwWaitReason;
  637. } THREADINFO, *PTHREADINFO;
  638. /* FIXME: Isn't THREAD_INFO and THREADINFO the same structure? */
  639. typedef struct _THREAD_INFO{
  640. DWORD Unknown1[6];
  641. DWORD ThreadID;
  642. DWORD Unknown2[3];
  643. DWORD Status;
  644. DWORD WaitReason;
  645. DWORD Unknown3[4];
  646. } THREAD_INFO, PTHREAD_INFO;
  647. /***********************************************************************
  648. * Types and data structures
  649. */
  650. typedef struct _IO_STATUS_BLOCK {
  651. union {
  652. NTSTATUS Status;
  653. PVOID Pointer;
  654. } DUMMYUNIONNAME;
  655. ULONG_PTR Information;
  656. } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
  657. typedef void (WINAPI * PIO_APC_ROUTINE)(PVOID,PIO_STATUS_BLOCK,ULONG);
  658. typedef struct _KEY_BASIC_INFORMATION {
  659. LARGE_INTEGER LastWriteTime;
  660. ULONG TitleIndex;
  661. ULONG NameLength;
  662. WCHAR Name[1];
  663. } KEY_BASIC_INFORMATION, *PKEY_BASIC_INFORMATION;
  664. typedef struct _KEY_NODE_INFORMATION
  665. {
  666. LARGE_INTEGER LastWriteTime;
  667. ULONG TitleIndex;
  668. ULONG ClassOffset;
  669. ULONG ClassLength;
  670. ULONG NameLength;
  671. WCHAR Name[1];
  672. /* Class[1]; */
  673. } KEY_NODE_INFORMATION, *PKEY_NODE_INFORMATION;
  674. typedef struct _KEY_FULL_INFORMATION
  675. {
  676. LARGE_INTEGER LastWriteTime;
  677. ULONG TitleIndex;
  678. ULONG ClassOffset;
  679. ULONG ClassLength;
  680. ULONG SubKeys;
  681. ULONG MaxNameLen;
  682. ULONG MaxClassLen;
  683. ULONG Values;
  684. ULONG MaxValueNameLen;
  685. ULONG MaxValueDataLen;
  686. WCHAR Class[1];
  687. } KEY_FULL_INFORMATION, *PKEY_FULL_INFORMATION;
  688. typedef struct _KEY_VALUE_ENTRY
  689. {
  690. PUNICODE_STRING ValueName;
  691. ULONG DataLength;
  692. ULONG DataOffset;
  693. ULONG Type;
  694. } KEY_VALUE_ENTRY, *PKEY_VALUE_ENTRY;
  695. typedef struct _KEY_VALUE_BASIC_INFORMATION {
  696. ULONG TitleIndex;
  697. ULONG Type;
  698. ULONG NameLength;
  699. WCHAR Name[1];
  700. } KEY_VALUE_BASIC_INFORMATION, *PKEY_VALUE_BASIC_INFORMATION;
  701. typedef struct _KEY_VALUE_FULL_INFORMATION {
  702. ULONG TitleIndex;
  703. ULONG Type;
  704. ULONG DataOffset;
  705. ULONG DataLength;
  706. ULONG NameLength;
  707. WCHAR Name[1];
  708. } KEY_VALUE_FULL_INFORMATION, *PKEY_VALUE_FULL_INFORMATION;
  709. typedef struct _KEY_VALUE_PARTIAL_INFORMATION {
  710. ULONG TitleIndex;
  711. ULONG Type;
  712. ULONG DataLength;
  713. UCHAR Data[1];
  714. } KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION;
  715. typedef struct _OBJECT_ATTRIBUTES {
  716. ULONG Length;
  717. HANDLE RootDirectory;
  718. PUNICODE_STRING ObjectName;
  719. ULONG Attributes;
  720. PVOID SecurityDescriptor; /* type SECURITY_DESCRIPTOR */
  721. PVOID SecurityQualityOfService; /* type SECURITY_QUALITY_OF_SERVICE */
  722. } OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;
  723. typedef struct _OBJECT_DATA_INFORMATION {
  724. BOOLEAN InheritHandle;
  725. BOOLEAN ProtectFromClose;
  726. } OBJECT_DATA_INFORMATION, *POBJECT_DATA_INFORMATION;
  727. typedef struct _PROCESS_BASIC_INFORMATION {
  728. #ifdef __WINESRC__
  729. DWORD ExitStatus;
  730. DWORD PebBaseAddress;
  731. DWORD AffinityMask;
  732. DWORD BasePriority;
  733. ULONG UniqueProcessId;
  734. ULONG InheritedFromUniqueProcessId;
  735. #else
  736. PVOID Reserved1;
  737. PPEB PebBaseAddress;
  738. PVOID Reserved2[2];
  739. ULONG_PTR UniqueProcessId;
  740. PVOID Reserved3;
  741. #endif
  742. } PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION;
  743. typedef struct _PROCESS_INFO {
  744. DWORD Offset; /* 00 offset to next PROCESS_INFO ok*/
  745. DWORD ThreadCount; /* 04 number of ThreadInfo member ok */
  746. DWORD Unknown1[6];
  747. FILETIME CreationTime; /* 20 */
  748. DWORD Unknown2[5];
  749. PWCHAR ProcessName; /* 3c ok */
  750. DWORD BasePriority;
  751. DWORD ProcessID; /* 44 ok*/
  752. DWORD ParentProcessID;
  753. DWORD HandleCount;
  754. DWORD Unknown3[2]; /* 50 */
  755. ULONG PeakVirtualSize;
  756. ULONG VirtualSize;
  757. ULONG PageFaultCount;
  758. ULONG PeakWorkingSetSize;
  759. ULONG WorkingSetSize;
  760. ULONG QuotaPeakPagedPoolUsage;
  761. ULONG QuotaPagedPoolUsage;
  762. ULONG QuotaPeakNonPagedPoolUsage;
  763. ULONG QuotaNonPagedPoolUsage;
  764. ULONG PagefileUsage;
  765. ULONG PeakPagefileUsage;
  766. DWORD PrivateBytes;
  767. DWORD Unknown6[4];
  768. THREAD_INFO ati[ANYSIZE_ARRAY]; /* 94 size=0x40*/
  769. } PROCESS_INFO, PPROCESS_INFO;
  770. typedef struct _RTL_HEAP_DEFINITION {
  771. ULONG Length; /* = sizeof(RTL_HEAP_DEFINITION) */
  772. ULONG Unknown[11];
  773. } RTL_HEAP_DEFINITION, *PRTL_HEAP_DEFINITION;
  774. typedef struct _RTL_RWLOCK {
  775. RTL_CRITICAL_SECTION rtlCS;
  776. HANDLE hSharedReleaseSemaphore;
  777. UINT uSharedWaiters;
  778. HANDLE hExclusiveReleaseSemaphore;
  779. UINT uExclusiveWaiters;
  780. INT iNumberActive;
  781. HANDLE hOwningThreadId;
  782. DWORD dwTimeoutBoost;
  783. PVOID pDebugInfo;
  784. } RTL_RWLOCK, *LPRTL_RWLOCK;
  785. /* System Information Class 0x00 */
  786. typedef struct _SYSTEM_BASIC_INFORMATION {
  787. #ifdef __WINESRC__
  788. DWORD dwUnknown1;
  789. ULONG uKeMaximumIncrement;
  790. ULONG uPageSize;
  791. ULONG uMmNumberOfPhysicalPages;
  792. ULONG uMmLowestPhysicalPage;
  793. ULONG uMmHighestPhysicalPage;
  794. ULONG uAllocationGranularity;
  795. PVOID pLowestUserAddress;
  796. PVOID pMmHighestUserAddress;
  797. ULONG uKeActiveProcessors;
  798. BYTE bKeNumberProcessors;
  799. BYTE bUnknown2;
  800. WORD wUnknown3;
  801. #else
  802. BYTE Reserved1[24];
  803. PVOID Reserved2[4];
  804. CCHAR NumberOfProcessors;
  805. #endif
  806. } SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION;
  807. /* CPU Information Class 0x01 */
  808. typedef struct {
  809. WORD Architecture;
  810. WORD Level;
  811. WORD Revision; /* combination of CPU model and stepping */
  812. WORD Reserved; /* always zero */
  813. DWORD FeatureSet; /* see bit flags below */
  814. } SYSTEM_CPU_INFORMATION;
  815. /* definitions of bits in the Feature set for the x86 processors */
  816. #define CPU_FEATURE_VME 0x00000005 /* Virtual 86 Mode Extensions */
  817. #define CPU_FEATURE_TSC 0x00000002 /* Time Stamp Counter available */
  818. #define CPU_FEATURE_CMOV 0x00000008 /* Conditional Move instruction*/
  819. #define CPU_FEATURE_PGE 0x00000014 /* Page table Entry Global bit */
  820. #define CPU_FEATURE_PSE 0x00000024 /* Page Size Extension */
  821. #define CPU_FEATURE_MTRR 0x00000040 /* Memory Type Range Registers */
  822. #define CPU_FEATURE_CX8 0x00000080 /* Compare and eXchange 8 byte instr. */
  823. #define CPU_FEATURE_MMX 0x00000100 /* Multi Media eXtensions */
  824. #define CPU_FEATURE_X86 0x00000200 /* seems to be alway ON, on the '86 */
  825. #define CPU_FEATURE_PAT 0x00000400 /* Page Attribute Table */
  826. #define CPU_FEATURE_FXSR 0x00000800 /* FXSAVE and FXSTORE instructions */
  827. #define CPU_FEATURE_SEP 0x00001000 /* SYSENTER and SYSEXIT instructions */
  828. #define CPU_FEATURE_SSE 0x00002000 /* SSE extenstions (ext. MMX) */
  829. #define CPU_FEATURE_3DNOW 0x00008000 /* 3DNOW instructions available
  830. (FIXME: needs to be confirmed) */
  831. #define CPU_FEATURE_SSE2 0x00010000 /* SSE2 extensions (XMMI64) */
  832. #define CPU_FEATURE_DS 0x00020000 /* Debug Store */
  833. #define CPU_FEATURE_HTT 0x00040000 /* Hyper Threading Technology */
  834. /* System Information Class 0x15 */
  835. typedef struct {
  836. ULONG CurrentSize;
  837. ULONG PeakSize;
  838. ULONG PageFaultCount;
  839. ULONG MinimumWorkingSet;
  840. ULONG MaximumWorkingSet;
  841. ULONG unused[4];
  842. } SYSTEM_CACHE_INFORMATION;
  843. typedef struct _SYSTEM_CONFIGURATION_INFO {
  844. union {
  845. ULONG OemId;
  846. struct {
  847. WORD ProcessorArchitecture;
  848. WORD Reserved;
  849. } tag1;
  850. } tag2;
  851. ULONG PageSize;
  852. PVOID MinimumApplicationAddress;
  853. PVOID MaximumApplicationAddress;
  854. ULONG ActiveProcessorMask;
  855. ULONG NumberOfProcessors;
  856. ULONG ProcessorType;
  857. ULONG AllocationGranularity;
  858. WORD ProcessorLevel;
  859. WORD ProcessorRevision;
  860. } SYSTEM_CONFIGURATION_INFO, *PSYSTEM_CONFIGURATION_INFO;
  861. /* System Information Class 0x0b */
  862. typedef struct {
  863. PVOID pvAddress;
  864. DWORD dwUnknown1;
  865. DWORD dwUnknown2;
  866. DWORD dwEntryIndex;
  867. DWORD dwUnknown3;
  868. char szName[MAX_PATH + 1];
  869. } SYSTEM_DRIVER_INFORMATION;
  870. typedef struct _SYSTEM_EXCEPTION_INFORMATION {
  871. BYTE Reserved1[16];
  872. } SYSTEM_EXCEPTION_INFORMATION, *PSYSTEM_EXCEPTION_INFORMATION;
  873. typedef struct _SYSTEM_LOOKASIDE_INFORMATION {
  874. BYTE Reserved1[32];
  875. } SYSTEM_LOOKASIDE_INFORMATION, *PSYSTEM_LOOKASIDE_INFORMATION;
  876. typedef struct _SYSTEM_INTERRUPT_INFORMATION {
  877. BYTE Reserved1[24];
  878. } SYSTEM_INTERRUPT_INFORMATION, *PSYSTEM_INTERRUPT_INFORMATION;
  879. typedef struct _SYSTEM_KERNEL_DEBUGGER_INFORMATION {
  880. BOOLEAN DebuggerEnabled;
  881. BOOLEAN DebuggerNotPresent;
  882. } SYSTEM_KERNEL_DEBUGGER_INFORMATION, *PSYSTEM_KERNEL_DEBUGGER_INFORMATION;
  883. /* System Information Class 0x10 */
  884. typedef struct {
  885. USHORT dwPID;
  886. USHORT dwCreatorBackTraceIndex;
  887. BYTE bObjectType;
  888. BYTE bHandleAttributes;
  889. USHORT usHandleOffset;
  890. DWORD dwKeObject;
  891. ULONG ulGrantedAccess;
  892. } HANDLEINFO, *PHANDLEINFO; /* FIXME: SYSTEM_HANDLE_INFORMATION? */
  893. typedef struct _SYSTEM_PERFORMANCE_INFORMATION {
  894. BYTE Reserved1[312];
  895. } SYSTEM_PERFORMANCE_INFORMATION, *PSYSTEM_PERFORMANCE_INFORMATION;
  896. /* System Information Class 0x02 */
  897. typedef struct _SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION {
  898. #ifdef __WINESRC__
  899. LARGE_INTEGER liIdleTime;
  900. DWORD dwSpare[10];
  901. #else
  902. LARGE_INTEGER IdleTime;
  903. LARGE_INTEGER KernelTime;
  904. LARGE_INTEGER UserTime;
  905. LARGE_INTEGER Reserved1[2];
  906. ULONG Reserved2;
  907. #endif
  908. } SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION, *PSYSTEM_PROCESSOR_PERFORMANCE_INFORMATION;
  909. /* System Information Class 0x05 */
  910. typedef struct _SYSTEM_PROCESS_INFORMATION {
  911. #ifdef __WINESRC__
  912. DWORD dwOffset;
  913. DWORD dwThreadCount;
  914. DWORD dwUnknown1[6];
  915. FILETIME ftCreationTime;
  916. DWORD dwUnknown2[5];
  917. WCHAR *pszProcessName;
  918. DWORD dwBasePriority;
  919. DWORD dwProcessID;
  920. DWORD dwParentProcessID;
  921. DWORD dwHandleCount;
  922. DWORD dwUnknown3;
  923. DWORD dwUnknown4;
  924. DWORD dwVirtualBytesPeak;
  925. DWORD dwVirtualBytes;
  926. DWORD dwPageFaults;
  927. DWORD dwWorkingSetPeak;
  928. DWORD dwWorkingSet;
  929. DWORD dwUnknown5;
  930. DWORD dwPagedPool;
  931. DWORD dwUnknown6;
  932. DWORD dwNonPagedPool;
  933. DWORD dwPageFileBytesPeak;
  934. DWORD dwPrivateBytes;
  935. DWORD dwPageFileBytes;
  936. DWORD dwUnknown7[4];
  937. THREADINFO ti[1];
  938. #else
  939. ULONG NextEntryOffset;
  940. BYTE Reserved1[52];
  941. PVOID Reserved2[3];
  942. HANDLE UniqueProcessId;
  943. PVOID Reserved3;
  944. ULONG HandleCount;
  945. BYTE Reserved4[4];
  946. PVOID Reserved5[11];
  947. SIZE_T PeakPagefileUsage;
  948. SIZE_T PrivatePageCount;
  949. LARGE_INTEGER Reserved6[6];
  950. #endif
  951. } SYSTEM_PROCESS_INFORMATION, *PSYSTEM_PROCESS_INFORMATION;
  952. typedef struct _SYSTEM_REGISTRY_QUOTA_INFORMATION {
  953. ULONG RegistryQuotaAllowed;
  954. ULONG RegistryQuotaUsed;
  955. PVOID Reserved1;
  956. } SYSTEM_REGISTRY_QUOTA_INFORMATION, *PSYSTEM_REGISTRY_QUOTA_INFORMATION;
  957. typedef struct _SYSTEM_TIME_ADJUSTMENT {
  958. ULONG TimeAdjustment;
  959. BOOLEAN TimeAdjustmentDisabled;
  960. } SYSTEM_TIME_ADJUSTMENT, *PSYSTEM_TIME_ADJUSTMENT;
  961. /* System Information Class 0x03 */
  962. typedef struct _SYSTEM_TIMEOFDAY_INFORMATION {
  963. #ifdef __WINESRC__
  964. LARGE_INTEGER liKeBootTime;
  965. LARGE_INTEGER liKeSystemTime;
  966. LARGE_INTEGER liExpTimeZoneBias;
  967. ULONG uCurrentTimeZoneId;
  968. DWORD dwReserved;
  969. #else
  970. BYTE Reserved1[48];
  971. #endif
  972. } SYSTEM_TIMEOFDAY_INFORMATION, *PSYSTEM_TIMEOFDAY_INFORMATION; /* was SYSTEM_TIME_INFORMATION */
  973. typedef struct _TIME_FIELDS
  974. { CSHORT Year;
  975. CSHORT Month;
  976. CSHORT Day;
  977. CSHORT Hour;
  978. CSHORT Minute;
  979. CSHORT Second;
  980. CSHORT Milliseconds;
  981. CSHORT Weekday;
  982. } TIME_FIELDS, *PTIME_FIELDS;
  983. typedef struct _WINSTATIONINFORMATIONW {
  984. BYTE Reserved2[70];
  985. ULONG LogonId;
  986. BYTE Reserved3[1140];
  987. } WINSTATIONINFORMATIONW, *PWINSTATIONINFORMATIONW;
  988. typedef struct _VM_COUNTERS_ {
  989. SIZE_T PeakVirtualSize;
  990. SIZE_T VirtualSize;
  991. ULONG PageFaultCount;
  992. SIZE_T PeakWorkingSetSize;
  993. SIZE_T WorkingSetSize;
  994. SIZE_T QuotaPeakPagedPoolUsage;
  995. SIZE_T QuotaPagedPoolUsage;
  996. SIZE_T QuotaPeakNonPagedPoolUsage;
  997. SIZE_T QuotaNonPagedPoolUsage;
  998. SIZE_T PagefileUsage;
  999. SIZE_T PeakPagefileUsage;
  1000. } VM_COUNTERS, *PVM_COUNTERS;
  1001. typedef BOOLEAN (WINAPI * PWINSTATIONQUERYINFORMATIONW)(HANDLE,ULONG,WINSTATIONINFOCLASS,PVOID,ULONG,PULONG);
  1002. typedef struct _LDR_RESOURCE_INFO
  1003. {
  1004. ULONG Type;
  1005. ULONG Name;
  1006. ULONG Language;
  1007. } LDR_RESOURCE_INFO, *PLDR_RESOURCE_INFO;
  1008. /* debug buffer definitions */
  1009. typedef struct _DEBUG_BUFFER {
  1010. HANDLE SectionHandle;
  1011. PVOID SectionBase;
  1012. PVOID RemoteSectionBase;
  1013. ULONG SectionBaseDelta;
  1014. HANDLE EventPairHandle;
  1015. ULONG Unknown[2];
  1016. HANDLE RemoteThreadHandle;
  1017. ULONG InfoClassMask;
  1018. ULONG SizeOfInfo;
  1019. ULONG AllocatedSize;
  1020. ULONG SectionSize;
  1021. PVOID ModuleInformation;
  1022. PVOID BackTraceInformation;
  1023. PVOID HeapInformation;
  1024. PVOID LockInformation;
  1025. PVOID Reserved[8];
  1026. } DEBUG_BUFFER, *PDEBUG_BUFFER;
  1027. #define PDI_MODULES 0x01
  1028. #define PDI_BACKTRACE 0x02
  1029. #define PDI_HEAPS 0x04
  1030. #define PDI_HEAP_TAGS 0x08
  1031. #define PDI_HEAP_BLOCKS 0x10
  1032. #define PDI_LOCKS 0x20
  1033. typedef struct _DEBUG_MODULE_INFORMATION {
  1034. ULONG Reserved[2];
  1035. ULONG Base;
  1036. ULONG Size;
  1037. ULONG Flags;
  1038. USHORT Index;
  1039. USHORT Unknown;
  1040. USHORT LoadCount;
  1041. USHORT ModuleNameOffset;
  1042. CHAR ImageName[256];
  1043. } DEBUG_MODULE_INFORMATION, *PDEBUG_MODULE_INFORMATION;
  1044. typedef struct _DEBUG_HEAP_INFORMATION {
  1045. ULONG Base;
  1046. ULONG Flags;
  1047. USHORT Granularity;
  1048. USHORT Unknown;
  1049. ULONG Allocated;
  1050. ULONG Committed;
  1051. ULONG TagCount;
  1052. ULONG BlockCount;
  1053. ULONG Reserved[7];
  1054. PVOID Tags;
  1055. PVOID Blocks;
  1056. } DEBUG_HEAP_INFORMATION, *PDEBUG_HEAP_INFORMATION;
  1057. typedef struct _DEBUG_LOCK_INFORMATION {
  1058. PVOID Address;
  1059. USHORT Type;
  1060. USHORT CreatorBackTraceIndex;
  1061. ULONG OwnerThreadId;
  1062. ULONG ActiveCount;
  1063. ULONG ContentionCount;
  1064. ULONG EntryCount;
  1065. ULONG RecursionCount;
  1066. ULONG NumberOfSharedWaiters;
  1067. ULONG NumberOfExclusiveWaiters;
  1068. } DEBUG_LOCK_INFORMATION, *PDEBUG_LOCK_INFORMATION;
  1069. typedef struct _PORT_MESSAGE_HEADER {
  1070. USHORT DataSize;
  1071. USHORT MessageSize;
  1072. USHORT MessageType;
  1073. USHORT VirtualRangesOffset;
  1074. CLIENT_ID ClientId;
  1075. ULONG MessageId;
  1076. ULONG SectionSize;
  1077. } PORT_MESSAGE_HEADER, *PPORT_MESSAGE_HEADER, PORT_MESSAGE, *PPORT_MESSAGE;
  1078. /* FIXME: names probably not correct */
  1079. typedef struct _RTL_HANDLE
  1080. {
  1081. struct _RTL_HANDLE * Next;
  1082. } RTL_HANDLE;
  1083. /* FIXME: names probably not correct */
  1084. typedef struct _RTL_HANDLE_TABLE
  1085. {
  1086. ULONG MaxHandleCount; /* 0x00 */
  1087. ULONG HandleSize; /* 0x04 */
  1088. ULONG Unused[2]; /* 0x08-0x0c */
  1089. PVOID NextFree; /* 0x10 */
  1090. PVOID FirstHandle; /* 0x14 */
  1091. PVOID ReservedMemory; /* 0x18 */
  1092. PVOID MaxHandle; /* 0x1c */
  1093. } RTL_HANDLE_TABLE;
  1094. /***********************************************************************
  1095. * Defines
  1096. */
  1097. /* flags for NtCreateFile and NtOpenFile */
  1098. #define FILE_DIRECTORY_FILE 0x00000001
  1099. #define FILE_WRITE_THROUGH 0x00000002
  1100. #define FILE_SEQUENTIAL_ONLY 0x00000004
  1101. #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
  1102. #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
  1103. #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
  1104. #define FILE_NON_DIRECTORY_FILE 0x00000040
  1105. #define FILE_CREATE_TREE_CONNECTION 0x00000080
  1106. #define FILE_COMPLETE_IF_OPLOCKED 0x00000100
  1107. #define FILE_NO_EA_KNOWLEDGE 0x00000200
  1108. #define FILE_OPEN_FOR_RECOVERY 0x00000400
  1109. #define FILE_RANDOM_ACCESS 0x00000800
  1110. #define FILE_DELETE_ON_CLOSE 0x00001000
  1111. #define FILE_OPEN_BY_FILE_ID 0x00002000
  1112. #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000
  1113. #define FILE_NO_COMPRESSION 0x00008000
  1114. #define FILE_RESERVE_OPFILTER 0x00100000
  1115. #define FILE_TRANSACTED_MODE 0x00200000
  1116. #define FILE_OPEN_OFFLINE_FILE 0x00400000
  1117. #define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000
  1118. #define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7
  1119. #define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7
  1120. /* status for NtCreateFile or NtOpenFile */
  1121. #define FILE_SUPERSEDED 0
  1122. #define FILE_OPENED 1
  1123. #define FILE_CREATED 2
  1124. #define FILE_OVERWRITTEN 3
  1125. #define FILE_EXISTS 4
  1126. #define FILE_DOES_NOT_EXIST 5
  1127. /* disposition for NtCreateFile */
  1128. #define FILE_SUPERSEDE 0
  1129. #define FILE_OPEN 1
  1130. #define FILE_CREATE 2
  1131. #define FILE_OPEN_IF 3
  1132. #define FILE_OVERWRITE 4
  1133. #define FILE_OVERWRITE_IF 5
  1134. #define FILE_MAXIMUM_DISPOSITION 5
  1135. /* Characteristics of a File System */
  1136. #define FILE_REMOVABLE_MEDIA 0x00000001
  1137. #define FILE_READ_ONLY_DEVICE 0x00000002
  1138. #define FILE_FLOPPY_DISKETTE 0x00000004
  1139. #define FILE_WRITE_ONE_MEDIA 0x00000008
  1140. #define FILE_REMOTE_DEVICE 0x00000010
  1141. #define FILE_DEVICE_IS_MOUNTED 0x00000020
  1142. #define FILE_VIRTUAL_VOLUME 0x00000040
  1143. #define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080
  1144. #define FILE_DEVICE_SECURE_OPEN 0x00000100
  1145. #if (_WIN32_WINNT >= 0x0501)
  1146. #define INTERNAL_TS_ACTIVE_CONSOLE_ID ( *((volatile ULONG*)(0x7ffe02d8)) )
  1147. #endif /* (_WIN32_WINNT >= 0x0501) */
  1148. #define LOGONID_CURRENT ((ULONG)-1)
  1149. #define OBJ_INHERIT 0x00000002L
  1150. #define OBJ_PERMANENT 0x00000010L
  1151. #define OBJ_EXCLUSIVE 0x00000020L
  1152. #define OBJ_CASE_INSENSITIVE 0x00000040L
  1153. #define OBJ_OPENIF 0x00000080L
  1154. #define OBJ_OPENLINK 0x00000100L
  1155. #define OBJ_KERNEL_HANDLE 0x00000200L
  1156. #define OBJ_VALID_ATTRIBUTES 0x000003F2L
  1157. #define SERVERNAME_CURRENT ((HANDLE)NULL)
  1158. typedef void (CALLBACK *PNTAPCFUNC)(ULONG_PTR,ULONG_PTR,ULONG_PTR); /* FIXME: not the right name */
  1159. typedef void (CALLBACK *PRTL_THREAD_START_ROUTINE)(LPVOID); /* FIXME: not the right name */
  1160. /* DbgPrintEx default levels */
  1161. #define DPFLTR_ERROR_LEVEL 0
  1162. #define DPFLTR_WARNING_LEVEL 1
  1163. #define DPFLTR_TRACE_LEVEL 2
  1164. #define DPFLTR_INFO_LEVEL 3
  1165. #define DPFLTR_MASK 0x8000000
  1166. /* Well-known LUID values */
  1167. #define SE_MIN_WELL_KNOWN_PRIVILEGE 2L
  1168. #define SE_CREATE_TOKEN_PRIVILEGE 2L
  1169. #define SE_ASSIGNPRIMARYTOKEN_PRIVILEGE 3L
  1170. #define SE_LOCK_MEMORY_PRIVILEGE 4L
  1171. #define SE_INCREASE_QUOTA_PRIVILEGE 5L
  1172. #define SE_UNSOLICITED_INPUT_PRIVILEGE 6L /* obsolete */
  1173. #define SE_MACHINE_ACCOUNT_PRIVILEGE 6L
  1174. #define SE_TCB_PRIVILEGE 7L
  1175. #define SE_SECURITY_PRIVILEGE 8L
  1176. #define SE_TAKE_OWNERSHIP_PRIVILEGE 9L
  1177. #define SE_LOAD_DRIVER_PRIVILEGE 10L
  1178. #define SE_SYSTEM_PROFILE_PRIVILEGE 11L
  1179. #define SE_SYSTEMTIME_PRIVILEGE 12L
  1180. #define SE_PROF_SINGLE_PROCESS_PRIVILEGE 13L
  1181. #define SE_INC_BASE_PRIORITY_PRIVILEGE 14L
  1182. #define SE_CREATE_PAGEFILE_PRIVILEGE 15L
  1183. #define SE_CREATE_PERMANENT_PRIVILEGE 16L
  1184. #define SE_BACKUP_PRIVILEGE 17L
  1185. #define SE_RESTORE_PRIVILEGE 18L
  1186. #define SE_SHUTDOWN_PRIVILEGE 19L
  1187. #define SE_DEBUG_PRIVILEGE 20L
  1188. #define SE_AUDIT_PRIVILEGE 21L
  1189. #define SE_SYSTEM_ENVIRONMENT_PRIVILEGE 22L
  1190. #define SE_CHANGE_NOTIFY_PRIVILLEGE 23L
  1191. #define SE_REMOTE_SHUTDOWN_PRIVILEGE 24L
  1192. #define SE_UNDOCK_PRIVILEGE 25L
  1193. #define SE_SYNC_AGENT_PRIVILEGE 26L
  1194. #define SE_ENABLE_DELEGATION_PRIVILEGE 27L
  1195. #define SE_MANAGE_VOLUME_PRIVILEGE 28L
  1196. #define SE_IMPERSONATE_PRIVILEGE 29L
  1197. #define SE_CREATE_GLOBAL_PRIVILEGE 30L
  1198. #define SE_MAX_WELL_KNOWN_PRIVILEGE SE_CREATE_GLOBAL_PRIVILEGE
  1199. /***********************************************************************
  1200. * Function declarations
  1201. */
  1202. extern LPSTR _strlwr(LPSTR str); /* FIXME: Doesn't belong here */
  1203. extern LPSTR _strupr(LPSTR str); /* FIXME: Doesn't belong here */
  1204. #if defined(__i386__) && defined(__GNUC__)
  1205. static inline void WINAPI DbgBreakPoint(void) { __asm__ __volatile__("int3"); }
  1206. static inline void WINAPI DbgUserBreakPoint(void) { __asm__ __volatile__("int3"); }
  1207. #else /* __i386__ && __GNUC__ */
  1208. void WINAPI DbgBreakPoint(void);
  1209. void WINAPI DbgUserBreakPoint(void);
  1210. #endif /* __i386__ && __GNUC__ */
  1211. NTSTATUS WINAPIV DbgPrint(LPCSTR fmt, ...);
  1212. NTSTATUS WINAPIV DbgPrintEx(ULONG iComponentId, ULONG Level, LPCSTR fmt, ...);
  1213. NTSTATUS WINAPI LdrAccessResource(HMODULE,const IMAGE_RESOURCE_DATA_ENTRY*,void**,PULONG);
  1214. NTSTATUS WINAPI LdrFindResourceDirectory_U(HMODULE,const LDR_RESOURCE_INFO*,ULONG,const IMAGE_RESOURCE_DIRECTORY**);
  1215. NTSTATUS WINAPI LdrFindResource_U(HMODULE,const LDR_RESOURCE_INFO*,ULONG,const IMAGE_RESOURCE_DATA_ENTRY**);
  1216. NTSTATUS WINAPI LdrGetDllHandle(ULONG, ULONG, const UNICODE_STRING*, HMODULE*);
  1217. NTSTATUS WINAPI LdrGetProcedureAddress(HMODULE, const ANSI_STRING*, ULONG, void**);
  1218. void WINAPI LdrInitializeThunk(HANDLE,ULONG,ULONG,ULONG);
  1219. NTSTATUS WINAPI LdrLoadDll(LPCWSTR, DWORD, const UNICODE_STRING*, HMODULE*);
  1220. void WINAPI LdrShutdownProcess(void);
  1221. void WINAPI LdrShutdownThread(void);
  1222. NTSTATUS WINAPI NtAccessCheck(PSECURITY_DESCRIPTOR,HANDLE,ACCESS_MASK,PGENERIC_MAPPING,PPRIVILEGE_SET,PULONG,PULONG,NTSTATUS*);
  1223. NTSTATUS WINAPI NtAdjustGroupsToken(HANDLE,BOOLEAN,PTOKEN_GROUPS,ULONG,PTOKEN_GROUPS,PULONG);
  1224. NTSTATUS WINAPI NtAdjustPrivilegesToken(HANDLE,BOOLEAN,PTOKEN_PRIVILEGES,DWORD,PTOKEN_PRIVILEGES,PDWORD);
  1225. NTSTATUS WINAPI NtAlertThread(HANDLE ThreadHandle);
  1226. NTSTATUS WINAPI NtAllocateLocallyUniqueId(PLUID lpLuid);
  1227. NTSTATUS WINAPI NtAllocateVirtualMemory(HANDLE,PVOID*,ULONG,ULONG*,ULONG,ULONG);
  1228. NTSTATUS WINAPI NtCancelIoFile(HANDLE,PIO_STATUS_BLOCK);
  1229. NTSTATUS WINAPI NtCancelTimer(HANDLE, BOOLEAN*);
  1230. NTSTATUS WINAPI NtClearEvent(HANDLE);
  1231. NTSTATUS WINAPI NtClose(HANDLE);
  1232. NTSTATUS WINAPI NtCreateEvent(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *,BOOLEAN,BOOLEAN);
  1233. NTSTATUS WINAPI NtCreateFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,PLARGE_INTEGER,ULONG,ULONG,ULONG,ULONG,PVOID,ULONG);
  1234. NTSTATUS WINAPI NtCreateIoCompletion(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,ULONG);
  1235. NTSTATUS WINAPI NtCreateKey(PHKEY,ACCESS_MASK,const OBJECT_ATTRIBUTES*,ULONG,const UNICODE_STRING*,ULONG,PULONG);
  1236. NTSTATUS WINAPI NtCreateMutant(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,BOOLEAN);
  1237. NTSTATUS WINAPI NtCreateNamedPipeFile(PHANDLE,ULONG,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,PLARGE_INTEGER);
  1238. NTSTATUS WINAPI NtCreateSection(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const LARGE_INTEGER*,ULONG,ULONG,HANDLE);
  1239. NTSTATUS WINAPI NtCreateSemaphore(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,LONG,LONG);
  1240. NTSTATUS WINAPI NtCreateTimer(HANDLE*, ACCESS_MASK, const OBJECT_ATTRIBUTES*, TIMER_TYPE);
  1241. NTSTATUS WINAPI NtDelayExecution(BOOLEAN,const LARGE_INTEGER*);
  1242. NTSTATUS WINAPI NtDeleteFile(POBJECT_ATTRIBUTES);
  1243. NTSTATUS WINAPI NtDeleteKey(HKEY);
  1244. NTSTATUS WINAPI NtDeleteValueKey(HKEY,const UNICODE_STRING *);
  1245. NTSTATUS WINAPI NtDeviceIoControlFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,PVOID,ULONG,PVOID,ULONG);
  1246. NTSTATUS WINAPI NtDuplicateObject(HANDLE,HANDLE,HANDLE,PHANDLE,ACCESS_MASK,ULONG,ULONG);
  1247. NTSTATUS WINAPI NtDuplicateToken(HANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,SECURITY_IMPERSONATION_LEVEL,TOKEN_TYPE,PHANDLE);
  1248. NTSTATUS WINAPI NtEnumerateKey(HKEY,ULONG,KEY_INFORMATION_CLASS,void *,DWORD,DWORD *);
  1249. NTSTATUS WINAPI NtEnumerateValueKey(HKEY,ULONG,KEY_VALUE_INFORMATION_CLASS,PVOID,ULONG,PULONG);
  1250. NTSTATUS WINAPI NtFlushBuffersFile(HANDLE,IO_STATUS_BLOCK*);
  1251. NTSTATUS WINAPI NtFlushInstructionCache(HANDLE,LPCVOID,ULONG);
  1252. NTSTATUS WINAPI NtFlushKey(HKEY);
  1253. NTSTATUS WINAPI NtFlushVirtualMemory(HANDLE,LPCVOID*,ULONG*,ULONG);
  1254. NTSTATUS WINAPI NtFreeVirtualMemory(HANDLE,PVOID*,ULONG*,ULONG);
  1255. NTSTATUS WINAPI NtGetContextThread(HANDLE,CONTEXT*);
  1256. NTSTATUS WINAPI NtImpersonateAnonymousToken(HANDLE);
  1257. NTSTATUS WINAPI NtImpersonateClientOfPort(HANDLE,PPORT_MESSAGE);
  1258. NTSTATUS WINAPI NtImpersonateThread(HANDLE,HANDLE,PSECURITY_QUALITY_OF_SERVICE);
  1259. NTSTATUS WINAPI NtLoadDriver(const UNICODE_STRING *);
  1260. NTSTATUS WINAPI NtLoadKey(const OBJECT_ATTRIBUTES *,const OBJECT_ATTRIBUTES *);
  1261. NTSTATUS WINAPI NtLockFile(HANDLE,HANDLE,PIO_APC_ROUTINE,void*,PIO_STATUS_BLOCK,PLARGE_INTEGER,PLARGE_INTEGER,ULONG*,BOOLEAN,BOOLEAN);
  1262. NTSTATUS WINAPI NtLockVirtualMemory(HANDLE,PVOID*,ULONG*,ULONG);
  1263. NTSTATUS WINAPI NtMapViewOfSection(HANDLE,HANDLE,PVOID*,ULONG,ULONG,const LARGE_INTEGER*,ULONG*,SECTION_INHERIT,ULONG,ULONG);
  1264. NTSTATUS WINAPI NtNotifyChangeKey(HKEY,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,BOOLEAN,PVOID,ULONG,BOOLEAN);
  1265. NTSTATUS WINAPI NtOpenEvent(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *);
  1266. NTSTATUS WINAPI NtOpenFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,ULONG,ULONG);
  1267. NTSTATUS WINAPI NtOpenIoCompletion(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES);
  1268. NTSTATUS WINAPI NtOpenKey(PHKEY,ACCESS_MASK,const OBJECT_ATTRIBUTES *);
  1269. NTSTATUS WINAPI NtOpenMutant(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*);
  1270. NTSTATUS WINAPI NtOpenProcessToken(HANDLE,DWORD,HANDLE *);
  1271. NTSTATUS WINAPI NtOpenSection(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*);
  1272. NTSTATUS WINAPI NtOpenSemaphore(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*);
  1273. NTSTATUS WINAPI NtOpenThread(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const CLIENT_ID*);
  1274. NTSTATUS WINAPI NtOpenThreadToken(HANDLE,DWORD,BOOLEAN,HANDLE *);
  1275. NTSTATUS WINAPI NtOpenTimer(HANDLE*, ACCESS_MASK, const OBJECT_ATTRIBUTES*);
  1276. NTSTATUS WINAPI NtProtectVirtualMemory(HANDLE,PVOID*,ULONG*,ULONG,ULONG*);
  1277. NTSTATUS WINAPI NtPulseEvent(HANDLE,PULONG);
  1278. NTSTATUS WINAPI NtQueueApcThread(HANDLE,PNTAPCFUNC,ULONG_PTR,ULONG_PTR,ULONG_PTR);
  1279. NTSTATUS WINAPI NtQueryAttributesFile(const OBJECT_ATTRIBUTES*,FILE_BASIC_INFORMATION*);
  1280. NTSTATUS WINAPI NtQueryDefaultLocale(BOOLEAN,LCID*);
  1281. NTSTATUS WINAPI NtQueryDefaultUILanguage(LANGID*);
  1282. NTSTATUS WINAPI NtQueryDirectoryFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,PVOID,ULONG,FILE_INFORMATION_CLASS,BOOLEAN,PUNICODE_STRING,BOOLEAN);
  1283. NTSTATUS WINAPI NtQueryEaFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,BOOLEAN,PVOID,ULONG,PVOID,BOOLEAN);
  1284. NTSTATUS WINAPI NtQueryFullAttributesFile(const OBJECT_ATTRIBUTES*,FILE_NETWORK_OPEN_INFORMATION*);
  1285. NTSTATUS WINAPI NtQueryInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,LONG,FILE_INFORMATION_CLASS);
  1286. NTSTATUS WINAPI NtQueryInformationProcess(HANDLE,PROCESSINFOCLASS,PVOID,ULONG,PULONG);
  1287. NTSTATUS WINAPI NtQueryInformationThread(HANDLE,THREADINFOCLASS,PVOID,ULONG,PULONG);
  1288. NTSTATUS WINAPI NtQueryInformationToken(HANDLE,DWORD,LPVOID,DWORD,LPDWORD);
  1289. NTSTATUS WINAPI NtQueryInstallUILanguage(LANGID*);
  1290. NTSTATUS WINAPI NtQueryKey(HKEY,KEY_INFORMATION_CLASS,void *,DWORD,DWORD *);
  1291. NTSTATUS WINAPI NtQueryMultipleValueKey(HKEY,PVALENTW,ULONG,PVOID,ULONG,PULONG);
  1292. NTSTATUS WINAPI NtQueryObject(HANDLE, OBJECT_INFORMATION_CLASS, PVOID, ULONG, PULONG);
  1293. NTSTATUS WINAPI NtQueryPerformanceCounter(PLARGE_INTEGER, PLARGE_INTEGER);
  1294. NTSTATUS WINAPI NtQuerySecurityObject(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,ULONG,PULONG);
  1295. NTSTATUS WINAPI NtQuerySystemInformation(SYSTEM_INFORMATION_CLASS,PVOID,ULONG,PULONG);
  1296. NTSTATUS WINAPI NtQuerySystemTime(PLARGE_INTEGER);
  1297. NTSTATUS WINAPI NtQueryTimer(HANDLE,TIMER_INFORMATION_CLASS,PVOID,ULONG,PULONG);
  1298. NTSTATUS WINAPI NtQueryValueKey(HKEY,const UNICODE_STRING *,KEY_VALUE_INFORMATION_CLASS,void *,DWORD,DWORD *);
  1299. NTSTATUS WINAPI NtQueryVirtualMemory(HANDLE,LPCVOID,MEMORY_INFORMATION_CLASS,PVOID,ULONG,ULONG*);
  1300. NTSTATUS WINAPI NtQueryVolumeInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,FS_INFORMATION_CLASS);
  1301. void WINAPI NtRaiseException(PEXCEPTION_RECORD,PCONTEXT,BOOL);
  1302. NTSTATUS WINAPI NtReadFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,PVOID,ULONG,PLARGE_INTEGER,PULONG);
  1303. NTSTATUS WINAPI NtReadVirtualMemory(HANDLE,const void*,void*,SIZE_T,SIZE_T*);
  1304. NTSTATUS WINAPI NtReleaseMutant(HANDLE,PLONG);
  1305. NTSTATUS WINAPI NtReleaseSemaphore(HANDLE,ULONG,PULONG);
  1306. NTSTATUS WINAPI NtRemoveIoCompletion(HANDLE,PULONG,PULONG,PIO_STATUS_BLOCK,PLARGE_INTEGER);
  1307. NTSTATUS WINAPI NtReplaceKey(POBJECT_ATTRIBUTES,HKEY,POBJECT_ATTRIBUTES);
  1308. NTSTATUS WINAPI NtResetEvent(HANDLE,PULONG);
  1309. NTSTATUS WINAPI NtRestoreKey(HKEY,HANDLE,ULONG);
  1310. NTSTATUS WINAPI NtResumeThread(HANDLE,PULONG);
  1311. NTSTATUS WINAPI NtSaveKey(HKEY,HANDLE);
  1312. NTSTATUS WINAPI NtSetContextThread(HANDLE,const CONTEXT*);
  1313. NTSTATUS WINAPI NtSetDefaultLocale(BOOLEAN,LCID);
  1314. NTSTATUS WINAPI NtSetDefaultUILanguage(LANGID);
  1315. NTSTATUS WINAPI NtSetEaFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG);
  1316. NTSTATUS WINAPI NtSetEvent(HANDLE,PULONG);
  1317. NTSTATUS WINAPI NtSetInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,FILE_INFORMATION_CLASS);
  1318. NTSTATUS WINAPI NtSetInformationKey(HKEY,const int,PVOID,ULONG);
  1319. NTSTATUS WINAPI NtSetInformationObject(HANDLE, OBJECT_INFORMATION_CLASS, PVOID, ULONG);
  1320. NTSTATUS WINAPI NtSetInformationThread(HANDLE,THREADINFOCLASS,LPCVOID,ULONG);
  1321. NTSTATUS WINAPI NtSetInformationToken(HANDLE,TOKEN_INFORMATION_CLASS,PVOID,ULONG);
  1322. NTSTATUS WINAPI NtSetIoCompletion(HANDLE,ULONG,ULONG,NTSTATUS,ULONG);
  1323. NTSTATUS WINAPI NtSetSecurityObject(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR);
  1324. NTSTATUS WINAPI NtSetSystemTime(const LARGE_INTEGER*,LARGE_INTEGER*);
  1325. NTSTATUS WINAPI NtSetTimer(HANDLE, const LARGE_INTEGER*, PTIMERAPCROUTINE, PVOID, BOOLEAN, ULONG, BOOLEAN*);
  1326. NTSTATUS WINAPI NtSetValueKey(HKEY,const UNICODE_STRING *,ULONG,ULONG,const void *,ULONG);
  1327. NTSTATUS WINAPI NtSuspendThread(HANDLE,PULONG);
  1328. NTSTATUS WINAPI NtTerminateProcess(HANDLE,LONG);
  1329. NTSTATUS WINAPI NtTerminateThread(HANDLE,LONG);
  1330. NTSTATUS WINAPI NtUnloadDriver(const UNICODE_STRING *);
  1331. NTSTATUS WINAPI NtUnloadKey(HKEY);
  1332. NTSTATUS WINAPI NtUnlockFile(HANDLE,PIO_STATUS_BLOCK,PLARGE_INTEGER,PLARGE_INTEGER,PULONG);
  1333. NTSTATUS WINAPI NtUnlockVirtualMemory(HANDLE,PVOID*,ULONG*,ULONG);
  1334. NTSTATUS WINAPI NtUnmapViewOfSection(HANDLE,PVOID);
  1335. NTSTATUS WINAPI NtWaitForSingleObject(HANDLE,BOOLEAN,const LARGE_INTEGER*);
  1336. NTSTATUS WINAPI NtWaitForMultipleObjects(ULONG,const HANDLE*,BOOLEAN,BOOLEAN,const LARGE_INTEGER*);
  1337. NTSTATUS WINAPI NtWriteFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,const void*,ULONG,PLARGE_INTEGER,PULONG);
  1338. NTSTATUS WINAPI NtWriteVirtualMemory(HANDLE,void*,const void*,SIZE_T,SIZE_T*);
  1339. NTSTATUS WINAPI NtYieldExecution(void);
  1340. void WINAPI RtlAcquirePebLock(void);
  1341. BYTE WINAPI RtlAcquireResourceExclusive(LPRTL_RWLOCK,BYTE);
  1342. BYTE WINAPI RtlAcquireResourceShared(LPRTL_RWLOCK,BYTE);
  1343. NTSTATUS WINAPI RtlAddAce(PACL,DWORD,DWORD,PACE_HEADER,DWORD);
  1344. NTSTATUS WINAPI RtlAddAccessAllowedAce(PACL,DWORD,DWORD,PSID);
  1345. NTSTATUS WINAPI RtlAddAccessAllowedAceEx(PACL,DWORD,DWORD,DWORD,PSID);
  1346. NTSTATUS WINAPI RtlAddAccessDeniedAce(PACL,DWORD,DWORD,PSID);
  1347. NTSTATUS WINAPI RtlAddAccessDeniedAceEx(PACL,DWORD,DWORD,DWORD,PSID);
  1348. PVOID WINAPI RtlAddVectoredExceptionHandler(ULONG,PVECTORED_EXCEPTION_HANDLER);
  1349. DWORD WINAPI RtlAdjustPrivilege(DWORD,DWORD,DWORD,DWORD);
  1350. NTSTATUS WINAPI RtlAllocateAndInitializeSid(PSID_IDENTIFIER_AUTHORITY,BYTE,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,PSID *);
  1351. RTL_HANDLE * WINAPI RtlAllocateHandle(RTL_HANDLE_TABLE *,ULONG *);
  1352. PVOID WINAPI RtlAllocateHeap(HANDLE,ULONG,ULONG);
  1353. DWORD WINAPI RtlAnsiStringToUnicodeSize(const STRING *);
  1354. NTSTATUS WINAPI RtlAnsiStringToUnicodeString(PUNICODE_STRING,PCANSI_STRING,BOOLEAN);
  1355. NTSTATUS WINAPI RtlAppendAsciizToString(STRING *,LPCSTR);
  1356. NTSTATUS WINAPI RtlAppendStringToString(STRING *,const STRING *);
  1357. NTSTATUS WINAPI RtlAppendUnicodeStringToString(UNICODE_STRING *,const UNICODE_STRING *);
  1358. NTSTATUS WINAPI RtlAppendUnicodeToString(UNICODE_STRING *,LPCWSTR);
  1359. BOOLEAN WINAPI RtlAreAllAccessesGranted(ACCESS_MASK,ACCESS_MASK);
  1360. BOOLEAN WINAPI RtlAreAnyAccessesGranted(ACCESS_MASK,ACCESS_MASK);
  1361. BOOLEAN WINAPI RtlAreBitsSet(PCRTL_BITMAP,ULONG,ULONG);
  1362. BOOLEAN WINAPI RtlAreBitsClear(PCRTL_BITMAP,ULONG,ULONG);
  1363. NTSTATUS WINAPI RtlCharToInteger(PCSZ,ULONG,PULONG);
  1364. void WINAPI RtlClearAllBits(PRTL_BITMAP);
  1365. void WINAPI RtlClearBits(PRTL_BITMAP,ULONG,ULONG);
  1366. ULONG WINAPI RtlCompactHeap(HANDLE,ULONG);
  1367. LONG WINAPI RtlCompareString(const STRING*,const STRING*,BOOLEAN);
  1368. LONG WINAPI RtlCompareUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
  1369. DWORD WINAPI RtlComputeCrc32(DWORD,PBYTE,INT);
  1370. NTSTATUS WINAPI RtlConvertSidToUnicodeString(PUNICODE_STRING,PSID,BOOLEAN);
  1371. LONGLONG WINAPI RtlConvertLongToLargeInteger(LONG);
  1372. ULONGLONG WINAPI RtlConvertUlongToLargeInteger(ULONG);
  1373. void WINAPI RtlCopyLuid(PLUID,const LUID*);
  1374. void WINAPI RtlCopyLuidAndAttributesArray(ULONG,const LUID_AND_ATTRIBUTES*,PLUID_AND_ATTRIBUTES);
  1375. BOOLEAN WINAPI RtlCopySid(DWORD,PSID,PSID);
  1376. void WINAPI RtlCopyString(STRING*,const STRING*);
  1377. void WINAPI RtlCopyUnicodeString(UNICODE_STRING*,const UNICODE_STRING*);
  1378. NTSTATUS WINAPI RtlCreateAcl(PACL,DWORD,DWORD);
  1379. NTSTATUS WINAPI RtlCreateEnvironment(BOOLEAN, PWSTR*);
  1380. HANDLE WINAPI RtlCreateHeap(ULONG,PVOID,ULONG,ULONG,PVOID,PRTL_HEAP_DEFINITION);
  1381. NTSTATUS WINAPI RtlCreateProcessParameters(RTL_USER_PROCESS_PARAMETERS**,const UNICODE_STRING*,
  1382. const UNICODE_STRING*,const UNICODE_STRING*,
  1383. const UNICODE_STRING*,PWSTR,const UNICODE_STRING*,
  1384. const UNICODE_STRING*,const UNICODE_STRING*,
  1385. const UNICODE_STRING*);
  1386. NTSTATUS WINAPI RtlCreateSecurityDescriptor(PSECURITY_DESCRIPTOR,DWORD);
  1387. BOOLEAN WINAPI RtlCreateUnicodeString(PUNICODE_STRING,LPCWSTR);
  1388. BOOLEAN WINAPI RtlCreateUnicodeStringFromAsciiz(PUNICODE_STRING,LPCSTR);
  1389. NTSTATUS WINAPI RtlCreateUserThread(HANDLE,const SECURITY_DESCRIPTOR*,BOOLEAN,PVOID,SIZE_T,SIZE_T,PRTL_THREAD_START_ROUTINE,void*,HANDLE*,CLIENT_ID*);
  1390. NTSTATUS WINAPI RtlDeleteAce(PACL,DWORD);
  1391. NTSTATUS WINAPI RtlDeleteCriticalSection(RTL_CRITICAL_SECTION *);
  1392. void WINAPI RtlDeleteResource(LPRTL_RWLOCK);
  1393. DWORD WINAPI RtlDeleteSecurityObject(DWORD);
  1394. PRTL_USER_PROCESS_PARAMETERS WINAPI RtlDeNormalizeProcessParams(RTL_USER_PROCESS_PARAMETERS*);
  1395. NTSTATUS WINAPI RtlDestroyEnvironment(PWSTR);
  1396. NTSTATUS WINAPI RtlDestroyHandleTable(RTL_HANDLE_TABLE *);
  1397. HANDLE WINAPI RtlDestroyHeap(HANDLE);
  1398. void WINAPI RtlDestroyProcessParameters(RTL_USER_PROCESS_PARAMETERS*);
  1399. DOS_PATHNAME_TYPE WINAPI RtlDetermineDosPathNameType_U(PCWSTR);
  1400. BOOLEAN WINAPI RtlDoesFileExists_U(LPCWSTR);
  1401. BOOLEAN WINAPI RtlDosPathNameToNtPathName_U(PCWSTR,PUNICODE_STRING,PWSTR*,CURDIR*);
  1402. ULONG WINAPI RtlDosSearchPath_U(LPCWSTR, LPCWSTR, LPCWSTR, ULONG, LPWSTR, LPWSTR*);
  1403. WCHAR WINAPI RtlDowncaseUnicodeChar(WCHAR);
  1404. NTSTATUS WINAPI RtlDowncaseUnicodeString(UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
  1405. void WINAPI RtlDumpResource(LPRTL_RWLOCK);
  1406. NTSTATUS WINAPI RtlDuplicateUnicodeString(int,const UNICODE_STRING*,UNICODE_STRING*);
  1407. LONGLONG WINAPI RtlEnlargedIntegerMultiply(INT,INT);
  1408. ULONGLONG WINAPI RtlEnlargedUnsignedMultiply(UINT,UINT);
  1409. UINT WINAPI RtlEnlargedUnsignedDivide(ULONGLONG,UINT,UINT *);
  1410. NTSTATUS WINAPI RtlEnterCriticalSection(RTL_CRITICAL_SECTION *);
  1411. void WINAPI RtlEraseUnicodeString(UNICODE_STRING*);
  1412. NTSTATUS WINAPI RtlEqualComputerName(const UNICODE_STRING*,const UNICODE_STRING*);
  1413. NTSTATUS WINAPI RtlEqualDomainName(const UNICODE_STRING*,const UNICODE_STRING*);
  1414. BOOLEAN WINAPI RtlEqualLuid(const LUID*,const LUID*);
  1415. BOOL WINAPI RtlEqualPrefixSid(PSID,PSID);
  1416. BOOL WINAPI RtlEqualSid(PSID,PSID);
  1417. BOOLEAN WINAPI RtlEqualString(const STRING*,const STRING*,BOOLEAN);
  1418. BOOLEAN WINAPI RtlEqualUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
  1419. NTSTATUS WINAPI RtlExpandEnvironmentStrings_U(PWSTR, const UNICODE_STRING*, UNICODE_STRING*, ULONG*);
  1420. LONGLONG WINAPI RtlExtendedMagicDivide(LONGLONG,LONGLONG,INT);
  1421. LONGLONG WINAPI RtlExtendedIntegerMultiply(LONGLONG,INT);
  1422. LONGLONG WINAPI RtlExtendedLargeIntegerDivide(LONGLONG,INT,INT *);
  1423. NTSTATUS WINAPI RtlFindCharInUnicodeString(int,const UNICODE_STRING*,const UNICODE_STRING*,USHORT*);
  1424. ULONG WINAPI RtlFindClearBits(PCRTL_BITMAP,ULONG,ULONG);
  1425. ULONG WINAPI RtlFindClearBitsAndSet(PRTL_BITMAP,ULONG,ULONG);
  1426. ULONG WINAPI RtlFindClearRuns(PCRTL_BITMAP,PRTL_BITMAP_RUN,ULONG,BOOLEAN);
  1427. ULONG WINAPI RtlFindLastBackwardRunSet(PCRTL_BITMAP,ULONG,PULONG);
  1428. ULONG WINAPI RtlFindLastBackwardRunClear(PCRTL_BITMAP,ULONG,PULONG);
  1429. CCHAR WINAPI RtlFindLeastSignificantBit(ULONGLONG);
  1430. ULONG WINAPI RtlFindLongestRunSet(PCRTL_BITMAP,PULONG);
  1431. ULONG WINAPI RtlFindLongestRunClear(PCRTL_BITMAP,PULONG);
  1432. NTSTATUS WINAPI RtlFindMessage(HMODULE,ULONG,ULONG,ULONG,const MESSAGE_RESOURCE_ENTRY**);
  1433. CCHAR WINAPI RtlFindMostSignificantBit(ULONGLONG);
  1434. ULONG WINAPI RtlFindNextForwardRunSet(PCRTL_BITMAP,ULONG,PULONG);
  1435. ULONG WINAPI RtlFindNextForwardRunClear(PCRTL_BITMAP,ULONG,PULONG);
  1436. ULONG WINAPI RtlFindSetBits(PCRTL_BITMAP,ULONG,ULONG);
  1437. ULONG WINAPI RtlFindSetBitsAndClear(PRTL_BITMAP,ULONG,ULONG);
  1438. ULONG WINAPI RtlFindSetRuns(PCRTL_BITMAP,PRTL_BITMAP_RUN,ULONG,BOOLEAN);
  1439. BOOLEAN WINAPI RtlFirstFreeAce(PACL,PACE_HEADER *);
  1440. NTSTATUS WINAPI RtlFormatCurrentUserKeyPath(PUNICODE_STRING);
  1441. NTSTATUS WINAPI RtlFormatMessage(LPWSTR,UCHAR,BOOLEAN,BOOLEAN,BOOLEAN,va_list *,LPWSTR,ULONG);
  1442. void WINAPI RtlFreeAnsiString(PANSI_STRING);
  1443. BOOLEAN WINAPI RtlFreeHandle(RTL_HANDLE_TABLE *,RTL_HANDLE *);
  1444. BOOLEAN WINAPI RtlFreeHeap(HANDLE,ULONG,PVOID);
  1445. void WINAPI RtlFreeOemString(POEM_STRING);
  1446. DWORD WINAPI RtlFreeSid(PSID);
  1447. void WINAPI RtlFreeUnicodeString(PUNICODE_STRING);
  1448. NTSTATUS WINAPI RtlGetAce(PACL,DWORD,LPVOID *);
  1449. NTSTATUS WINAPI RtlGetControlSecurityDescriptor(PSECURITY_DESCRIPTOR, PSECURITY_DESCRIPTOR_CONTROL,LPDWORD);
  1450. NTSTATUS WINAPI RtlGetCurrentDirectory_U(ULONG, LPWSTR);
  1451. NTSTATUS WINAPI RtlGetDaclSecurityDescriptor(PSECURITY_DESCRIPTOR,PBOOLEAN,PACL *,PBOOLEAN);
  1452. ULONG WINAPI RtlGetFullPathName_U(PCWSTR,ULONG,PWSTR,PWSTR*);
  1453. NTSTATUS WINAPI RtlGetGroupSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID *,PBOOLEAN);
  1454. NTSTATUS WINAPI RtlGetLastNtStatus(void);
  1455. DWORD WINAPI RtlGetLastWin32Error(void);
  1456. DWORD WINAPI RtlGetLongestNtPathLength(void);
  1457. BOOLEAN WINAPI RtlGetNtProductType(LPDWORD);
  1458. NTSTATUS WINAPI RtlGetOwnerSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID *,PBOOLEAN);
  1459. ULONG WINAPI RtlGetProcessHeaps(ULONG,HANDLE*);
  1460. NTSTATUS WINAPI RtlGetSaclSecurityDescriptor(PSECURITY_DESCRIPTOR,PBOOLEAN,PACL *,PBOOLEAN);
  1461. NTSTATUS WINAPI RtlGetVersion(RTL_OSVERSIONINFOEXW*);
  1462. PSID_IDENTIFIER_AUTHORITY WINAPI RtlIdentifierAuthoritySid(PSID);
  1463. PVOID WINAPI RtlImageDirectoryEntryToData(HMODULE,BOOL,WORD,ULONG *);
  1464. PIMAGE_NT_HEADERS WINAPI RtlImageNtHeader(HMODULE);
  1465. PIMAGE_SECTION_HEADER WINAPI RtlImageRvaToSection(const IMAGE_NT_HEADERS *,HMODULE,DWORD);
  1466. PVOID WINAPI RtlImageRvaToVa(const IMAGE_NT_HEADERS *,HMODULE,DWORD,IMAGE_SECTION_HEADER **);
  1467. BOOL WINAPI RtlImpersonateSelf(SECURITY_IMPERSONATION_LEVEL);
  1468. void WINAPI RtlInitString(PSTRING,PCSZ);
  1469. void WINAPI RtlInitAnsiString(PANSI_STRING,PCSZ);
  1470. void WINAPI RtlInitUnicodeString(PUNICODE_STRING,PCWSTR);
  1471. NTSTATUS WINAPI RtlInitUnicodeStringEx(PUNICODE_STRING,PCWSTR);
  1472. NTSTATUS WINAPI RtlInitializeCriticalSection(RTL_CRITICAL_SECTION *);
  1473. NTSTATUS WINAPI RtlInitializeCriticalSectionAndSpinCount(RTL_CRITICAL_SECTION *,DWORD);
  1474. void WINAPI RtlInitializeBitMap(PRTL_BITMAP,PULONG,ULONG);
  1475. void WINAPI RtlInitializeHandleTable(ULONG,ULONG,RTL_HANDLE_TABLE *);
  1476. void WINAPI RtlInitializeResource(LPRTL_RWLOCK);
  1477. BOOL WINAPI RtlInitializeSid(PSID,PSID_IDENTIFIER_AUTHORITY,BYTE);
  1478. NTSTATUS WINAPI RtlInt64ToUnicodeString(ULONGLONG,ULONG,UNICODE_STRING *);
  1479. NTSTATUS WINAPI RtlIntegerToChar(ULONG,ULONG,ULONG,PCHAR);
  1480. NTSTATUS WINAPI RtlIntegerToUnicodeString(ULONG,ULONG,UNICODE_STRING *);
  1481. ULONG WINAPI RtlIsDosDeviceName_U(PCWSTR);
  1482. BOOLEAN WINAPI RtlIsNameLegalDOS8Dot3(const UNICODE_STRING*,POEM_STRING,PBOOLEAN);
  1483. DWORD WINAPI RtlIsTextUnicode(LPVOID,DWORD,DWORD *);
  1484. BOOLEAN WINAPI RtlIsValidHandle(const RTL_HANDLE_TABLE *, const RTL_HANDLE *);
  1485. BOOLEAN WINAPI RtlIsValidIndexHandle(const RTL_HANDLE_TABLE *, ULONG Index, RTL_HANDLE **);
  1486. LONGLONG WINAPI RtlLargeIntegerAdd(LONGLONG,LONGLONG);
  1487. LONGLONG WINAPI RtlLargeIntegerArithmeticShift(LONGLONG,INT);
  1488. ULONGLONG WINAPI RtlLargeIntegerDivide( ULONGLONG,ULONGLONG,ULONGLONG *);
  1489. LONGLONG WINAPI RtlLargeIntegerNegate(LONGLONG);
  1490. LONGLONG WINAPI RtlLargeIntegerShiftLeft(LONGLONG,INT);
  1491. LONGLONG WINAPI RtlLargeIntegerShiftRight(LONGLONG,INT);
  1492. LONGLONG WINAPI RtlLargeIntegerSubtract(LONGLONG,LONGLONG);
  1493. NTSTATUS WINAPI RtlLargeIntegerToChar(const ULONGLONG *,ULONG,ULONG,PCHAR);
  1494. NTSTATUS WINAPI RtlLeaveCriticalSection(RTL_CRITICAL_SECTION *);
  1495. DWORD WINAPI RtlLengthRequiredSid(DWORD);
  1496. ULONG WINAPI RtlLengthSecurityDescriptor(PSECURITY_DESCRIPTOR);
  1497. DWORD WINAPI RtlLengthSid(PSID);
  1498. NTSTATUS WINAPI RtlLocalTimeToSystemTime(const LARGE_INTEGER*,PLARGE_INTEGER);
  1499. BOOLEAN WINAPI RtlLockHeap(HANDLE);
  1500. NTSTATUS WINAPI RtlMakeSelfRelativeSD(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,LPDWORD);
  1501. void WINAPI RtlMapGenericMask(PACCESS_MASK,const GENERIC_MAPPING*);
  1502. NTSTATUS WINAPI RtlMultiByteToUnicodeN(LPWSTR,DWORD,LPDWORD,LPCSTR,DWORD);
  1503. NTSTATUS WINAPI RtlMultiByteToUnicodeSize(DWORD*,LPCSTR,UINT);
  1504. DWORD WINAPI RtlNewSecurityObject(DWORD,DWORD,DWORD,DWORD,DWORD,DWORD);
  1505. PRTL_USER_PROCESS_PARAMETERS WINAPI RtlNormalizeProcessParams(RTL_USER_PROCESS_PARAMETERS*);
  1506. ULONG WINAPI RtlNtStatusToDosError(NTSTATUS);
  1507. ULONG WINAPI RtlNtStatusToDosErrorNoTeb(NTSTATUS);
  1508. ULONG WINAPI RtlNumberOfSetBits(PCRTL_BITMAP);
  1509. ULONG WINAPI RtlNumberOfClearBits(PCRTL_BITMAP);
  1510. UINT WINAPI RtlOemStringToUnicodeSize(const STRING*);
  1511. NTSTATUS WINAPI RtlOemStringToUnicodeString(UNICODE_STRING*,const STRING*,BOOLEAN);
  1512. NTSTATUS WINAPI RtlOemToUnicodeN(LPWSTR,DWORD,LPDWORD,LPCSTR,DWORD);
  1513. DWORD WINAPI RtlOpenCurrentUser(ACCESS_MASK,PHKEY);
  1514. BOOLEAN WINAPI RtlPrefixString(const STRING*,const STRING*,BOOLEAN);
  1515. BOOLEAN WINAPI RtlPrefixUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
  1516. NTSTATUS WINAPI RtlQueryEnvironmentVariable_U(PWSTR,PUNICODE_STRING,PUNICODE_STRING);
  1517. NTSTATUS WINAPI RtlQueryInformationAcl(PACL,LPVOID,DWORD,ACL_INFORMATION_CLASS);
  1518. NTSTATUS WINAPI RtlQueryTimeZoneInformation(LPTIME_ZONE_INFORMATION);
  1519. void WINAPI RtlRaiseException(PEXCEPTION_RECORD);
  1520. void WINAPI RtlRaiseStatus(NTSTATUS);
  1521. ULONG WINAPI RtlRandom(PULONG);
  1522. PVOID WINAPI RtlReAllocateHeap(HANDLE,ULONG,PVOID,ULONG);
  1523. void WINAPI RtlReleasePebLock(void);
  1524. void WINAPI RtlReleaseResource(LPRTL_RWLOCK);
  1525. ULONG WINAPI RtlRemoveVectoredExceptionHandler(PVOID);
  1526. void WINAPI RtlRestoreLastWin32Error(DWORD);
  1527. void WINAPI RtlSecondsSince1970ToTime(DWORD,LARGE_INTEGER *);
  1528. void WINAPI RtlSecondsSince1980ToTime(DWORD,LARGE_INTEGER *);
  1529. NTSTATUS WINAPI RtlSelfRelativeToAbsoluteSD(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,
  1530. PDWORD,PACL,PDWORD,PACL,PDWORD,PSID,PDWORD,PSID,PDWORD);
  1531. void WINAPI RtlSetAllBits(PRTL_BITMAP);
  1532. void WINAPI RtlSetBits(PRTL_BITMAP,ULONG,ULONG);
  1533. ULONG WINAPI RtlSetCriticalSectionSpinCount(RTL_CRITICAL_SECTION*,ULONG);
  1534. NTSTATUS WINAPI RtlSetCurrentDirectory_U(const UNICODE_STRING*);
  1535. void WINAPI RtlSetCurrentEnvironment(PWSTR, PWSTR*);
  1536. NTSTATUS WINAPI RtlSetDaclSecurityDescriptor(PSECURITY_DESCRIPTOR,BOOLEAN,PACL,BOOLEAN);
  1537. NTSTATUS WINAPI RtlSetEnvironmentVariable(PWSTR*,PUNICODE_STRING,PUNICODE_STRING);
  1538. NTSTATUS WINAPI RtlSetOwnerSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID,BOOLEAN);
  1539. NTSTATUS WINAPI RtlSetGroupSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID,BOOLEAN);
  1540. void WINAPI RtlSetLastWin32Error(DWORD);
  1541. void WINAPI RtlSetLastWin32ErrorAndNtStatusFromNtStatus(NTSTATUS);
  1542. NTSTATUS WINAPI RtlSetSaclSecurityDescriptor(PSECURITY_DESCRIPTOR,BOOLEAN,PACL,BOOLEAN);
  1543. NTSTATUS WINAPI RtlSetTimeZoneInformation(const TIME_ZONE_INFORMATION*);
  1544. ULONG WINAPI RtlSizeHeap(HANDLE,ULONG,PVOID);
  1545. LPDWORD WINAPI RtlSubAuthoritySid(PSID,DWORD);
  1546. LPBYTE WINAPI RtlSubAuthorityCountSid(PSID);
  1547. NTSTATUS WINAPI RtlSystemTimeToLocalTime(const LARGE_INTEGER*,PLARGE_INTEGER);
  1548. void WINAPI RtlTimeToTimeFields(const LARGE_INTEGER*,PTIME_FIELDS);
  1549. BOOLEAN WINAPI RtlTimeFieldsToTime(PTIME_FIELDS,PLARGE_INTEGER);
  1550. void WINAPI RtlTimeToElapsedTimeFields(const LARGE_INTEGER *,PTIME_FIELDS);
  1551. BOOLEAN WINAPI RtlTimeToSecondsSince1970(const LARGE_INTEGER *,LPDWORD);
  1552. BOOLEAN WINAPI RtlTimeToSecondsSince1980(const LARGE_INTEGER *,LPDWORD);
  1553. BOOL WINAPI RtlTryEnterCriticalSection(RTL_CRITICAL_SECTION *);
  1554. ULONGLONG __cdecl RtlUlonglongByteSwap(ULONGLONG);
  1555. DWORD WINAPI RtlUnicodeStringToAnsiSize(const UNICODE_STRING*);
  1556. NTSTATUS WINAPI RtlUnicodeStringToAnsiString(PANSI_STRING,PCUNICODE_STRING,BOOLEAN);
  1557. NTSTATUS WINAPI RtlUnicodeStringToInteger(const UNICODE_STRING *,ULONG,ULONG *);
  1558. DWORD WINAPI RtlUnicodeStringToOemSize(const UNICODE_STRING*);
  1559. NTSTATUS WINAPI RtlUnicodeStringToOemString(POEM_STRING,PCUNICODE_STRING,BOOLEAN);
  1560. NTSTATUS WINAPI RtlUnicodeToMultiByteN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
  1561. NTSTATUS WINAPI RtlUnicodeToMultiByteSize(PULONG,PCWSTR,ULONG);
  1562. NTSTATUS WINAPI RtlUnicodeToOemN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
  1563. ULONG WINAPI RtlUniform(PULONG);
  1564. BOOLEAN WINAPI RtlUnlockHeap(HANDLE);
  1565. void WINAPI RtlUnwind(PVOID,PVOID,PEXCEPTION_RECORD,PVOID);
  1566. #ifdef __ia64__
  1567. void WINAPI RtlUnwind2(FRAME_POINTERS,PVOID,PEXCEPTION_RECORD,PVOID,PCONTEXT);
  1568. void WINAPI RtlUnwindEx(FRAME_POINTERS,PVOID,PEXCEPTION_RECORD,PVOID,PCONTEXT,PUNWIND_HISTORY_TABLE);
  1569. #endif
  1570. WCHAR WINAPI RtlUpcaseUnicodeChar(WCHAR);
  1571. NTSTATUS WINAPI RtlUpcaseUnicodeString(UNICODE_STRING*,const UNICODE_STRING *,BOOLEAN);
  1572. NTSTATUS WINAPI RtlUpcaseUnicodeStringToAnsiString(STRING*,const UNICODE_STRING*,BOOLEAN);
  1573. NTSTATUS WINAPI RtlUpcaseUnicodeStringToCountedOemString(STRING*,const UNICODE_STRING*,BOOLEAN);
  1574. NTSTATUS WINAPI RtlUpcaseUnicodeStringToOemString(STRING*,const UNICODE_STRING*,BOOLEAN);
  1575. NTSTATUS WINAPI RtlUpcaseUnicodeToMultiByteN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
  1576. NTSTATUS WINAPI RtlUpcaseUnicodeToOemN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
  1577. CHAR WINAPI RtlUpperChar(CHAR);
  1578. void WINAPI RtlUpperString(STRING *,const STRING *);
  1579. NTSTATUS WINAPI RtlValidSecurityDescriptor(PSECURITY_DESCRIPTOR);
  1580. BOOLEAN WINAPI RtlValidAcl(PACL);
  1581. BOOLEAN WINAPI RtlValidSid(PSID);
  1582. BOOLEAN WINAPI RtlValidateHeap(HANDLE,ULONG,LPCVOID);
  1583. NTSTATUS WINAPI RtlVerifyVersionInfo(const RTL_OSVERSIONINFOEXW*,DWORD,DWORDLONG);
  1584. NTSTATUS WINAPI RtlWalkHeap(HANDLE,PVOID);
  1585. NTSTATUS WINAPI RtlpWaitForCriticalSection(RTL_CRITICAL_SECTION *);
  1586. NTSTATUS WINAPI RtlpUnWaitCriticalSection(RTL_CRITICAL_SECTION *);
  1587. /* Wine internal functions */
  1588. extern NTSTATUS wine_nt_to_unix_file_name( const UNICODE_STRING *nameW, ANSI_STRING *unix_name_ret,
  1589. UINT disposition, BOOLEAN check_case );
  1590. /***********************************************************************
  1591. * Inline functions
  1592. */
  1593. #define InitializeObjectAttributes(p,n,a,r,s) \
  1594. do { \
  1595. (p)->Length = sizeof(OBJECT_ATTRIBUTES); \
  1596. (p)->RootDirectory = r; \
  1597. (p)->Attributes = a; \
  1598. (p)->ObjectName = n; \
  1599. (p)->SecurityDescriptor = s; \
  1600. (p)->SecurityQualityOfService = NULL; \
  1601. } while (0)
  1602. #define NtCurrentProcess() ((HANDLE)-1)
  1603. #define RtlFillMemory(Destination,Length,Fill) memset((Destination),(Fill),(Length))
  1604. #define RtlMoveMemory(Destination,Source,Length) memmove((Destination),(Source),(Length))
  1605. #define RtlStoreUlong(p,v) do { ULONG _v = (v); memcpy((p), &_v, sizeof(_v)); } while (0)
  1606. #define RtlStoreUlonglong(p,v) do { ULONGLONG _v = (v); memcpy((p), &_v, sizeof(_v)); } while (0)
  1607. #define RtlRetrieveUlong(p,s) memcpy((p), (s), sizeof(ULONG))
  1608. #define RtlRetrieveUlonglong(p,s) memcpy((p), (s), sizeof(ULONGLONG))
  1609. #define RtlZeroMemory(Destination,Length) memset((Destination),0,(Length))
  1610. inline static BOOLEAN RtlCheckBit(PCRTL_BITMAP lpBits, ULONG ulBit)
  1611. {
  1612. if (lpBits && ulBit < lpBits->SizeOfBitMap &&
  1613. lpBits->Buffer[ulBit >> 5] & (1 << (ulBit & 31)))
  1614. return TRUE;
  1615. return FALSE;
  1616. }
  1617. /* These are implemented as __fastcall, so we can't let Winelib apps link with them */
  1618. inline static USHORT RtlUshortByteSwap(USHORT s)
  1619. {
  1620. return (s >> 8) | (s << 8);
  1621. }
  1622. inline static ULONG RtlUlongByteSwap(ULONG i)
  1623. {
  1624. #if defined(__i386__) && defined(__GNUC__)
  1625. ULONG ret;
  1626. __asm__("bswap %0" : "=r" (ret) : "0" (i) );
  1627. return ret;
  1628. #else
  1629. return ((ULONG)RtlUshortByteSwap((USHORT)i) << 16) | RtlUshortByteSwap((USHORT)(i >> 16));
  1630. #endif
  1631. }
  1632. /*************************************************************************
  1633. * Loader functions and structures.
  1634. *
  1635. * Those are not part of standard Winternl.h
  1636. */
  1637. typedef struct _LDR_MODULE
  1638. {
  1639. LIST_ENTRY InLoadOrderModuleList;
  1640. LIST_ENTRY InMemoryOrderModuleList;
  1641. LIST_ENTRY InInitializationOrderModuleList;
  1642. void* BaseAddress;
  1643. void* EntryPoint;
  1644. ULONG SizeOfImage;
  1645. UNICODE_STRING FullDllName;
  1646. UNICODE_STRING BaseDllName;
  1647. ULONG Flags;
  1648. SHORT LoadCount;
  1649. SHORT TlsIndex;
  1650. HANDLE SectionHandle;
  1651. ULONG CheckSum;
  1652. ULONG TimeDateStamp;
  1653. } LDR_MODULE, *PLDR_MODULE;
  1654. /* those defines are (some of the) regular LDR_MODULE.Flags values */
  1655. #define LDR_IMAGE_IS_DLL 0x00000004
  1656. #define LDR_LOAD_IN_PROGRESS 0x00001000
  1657. #define LDR_UNLOAD_IN_PROGRESS 0x00002000
  1658. #define LDR_NO_DLL_CALLS 0x00040000
  1659. #define LDR_PROCESS_ATTACHED 0x00080000
  1660. #define LDR_MODULE_REBASED 0x00200000
  1661. /* these ones is Wine specific */
  1662. #define LDR_DONT_RESOLVE_REFS 0x40000000
  1663. #define LDR_WINE_INTERNAL 0x80000000
  1664. /* FIXME: to be checked */
  1665. #define MAXIMUM_FILENAME_LENGTH 256
  1666. typedef struct _SYSTEM_MODULE
  1667. {
  1668. ULONG Reserved1;
  1669. ULONG Reserved2;
  1670. PVOID ImageBaseAddress;
  1671. ULONG ImageSize;
  1672. ULONG Flags;
  1673. WORD Id;
  1674. WORD Rank;
  1675. WORD Unknown;
  1676. WORD NameOffset;
  1677. BYTE Name[MAXIMUM_FILENAME_LENGTH];
  1678. } SYSTEM_MODULE, *PSYSTEM_MODULE;
  1679. typedef struct _SYSTEM_MODULE_INFORMATION
  1680. {
  1681. ULONG ModulesCount;
  1682. SYSTEM_MODULE Modules[1]; /* FIXME: should be Modules[0] */
  1683. } SYSTEM_MODULE_INFORMATION, *PSYSTEM_MODULE_INFORMATION;
  1684. NTSTATUS WINAPI LdrDisableThreadCalloutsForDll(HMODULE);
  1685. NTSTATUS WINAPI LdrFindEntryForAddress(const void*, PLDR_MODULE*);
  1686. NTSTATUS WINAPI LdrLockLoaderLock(ULONG,ULONG*,ULONG*);
  1687. NTSTATUS WINAPI LdrQueryProcessModuleInformation(SYSTEM_MODULE_INFORMATION*, ULONG, ULONG*);
  1688. NTSTATUS WINAPI LdrUnloadDll(HMODULE);
  1689. NTSTATUS WINAPI LdrUnlockLoaderLock(ULONG,ULONG);
  1690. /* list manipulation macros */
  1691. #define InitializeListHead(le) (void)((le)->Flink = (le)->Blink = (le))
  1692. #define InsertHeadList(le,e) do { PLIST_ENTRY f = (le)->Flink; (e)->Flink = f; (e)->Blink = (le); f->Blink = (e); (le)->Flink = (e); } while (0)
  1693. #define InsertTailList(le,e) do { PLIST_ENTRY b = (le)->Blink; (e)->Flink = (le); (e)->Blink = b; b->Flink = (e); (le)->Blink = (e); } while (0)
  1694. #define IsListEmpty(le) ((le)->Flink == (le))
  1695. #define RemoveEntryList(e) do { PLIST_ENTRY f = (e)->Flink, b = (e)->Blink; f->Blink = b; b->Flink = f; (e)->Flink = (e)->Blink = NULL; } while (0)
  1696. static inline PLIST_ENTRY RemoveHeadList(PLIST_ENTRY le)
  1697. {
  1698. PLIST_ENTRY f, b, e;
  1699. e = le->Flink;
  1700. f = le->Flink->Flink;
  1701. b = le->Flink->Blink;
  1702. f->Blink = b;
  1703. b->Flink = f;
  1704. if (e != le) e->Flink = e->Blink = NULL;
  1705. return e;
  1706. }
  1707. static inline PLIST_ENTRY RemoveTailList(PLIST_ENTRY le)
  1708. {
  1709. PLIST_ENTRY f, b, e;
  1710. e = le->Blink;
  1711. f = le->Blink->Flink;
  1712. b = le->Blink->Blink;
  1713. f->Blink = b;
  1714. b->Flink = f;
  1715. if (e != le) e->Flink = e->Blink = NULL;
  1716. return e;
  1717. }
  1718. #ifdef __cplusplus
  1719. } /* extern "C" */
  1720. #endif /* defined(__cplusplus) */
  1721. #endif /* __WINE_WINTERNL_H */