blob: 4cac308450436e3402aaa2411e3ef6a695c3eada [file] [log] [blame]
Patrik Stridvalleba96492002-09-10 00:33:34 +00001/*
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
21#ifndef __WINE_WINTERNAL_H
22#define __WINE_WINTERNAL_H
23
24#include "windef.h"
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +000025#include "winnt.h"
26#include "winreg.h"
Patrik Stridvalleba96492002-09-10 00:33:34 +000027
28#ifdef __cplusplus
29extern "C" {
30#endif /* defined(__cplusplus) */
31
Patrik Stridvalleba96492002-09-10 00:33:34 +000032
33/***********************************************************************
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +000034 * TEB data structure
Patrik Stridvalleba96492002-09-10 00:33:34 +000035 */
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +000036#if 0
Patrik Stridvalleba96492002-09-10 00:33:34 +000037typedef struct _TEB {
38 BYTE Reserved1[1952];
39 PVOID Reserved2[412];
40 PVOID TlsSlots[64];
41 BYTE Reserved3[8];
42 PVOID Reserved4[26];
43 PVOID ReservedForOle; /* Windows 2000 only */
44 PVOID Reserved5[4];
45 PVOID TlsExpansionSlots;
46} TEB, *PTEB;
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +000047#endif
Patrik Stridvalleba96492002-09-10 00:33:34 +000048
49/**********************************************************************
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +000050 * Fundamental types and data structures
Patrik Stridvalleba96492002-09-10 00:33:34 +000051 */
52
53typedef LONG NTSTATUS;
54
55typedef CONST char *PCSZ;
56
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +000057typedef short CSHORT;
58typedef CSHORT *PCSHORT;
59
Patrik Stridvalleba96492002-09-10 00:33:34 +000060typedef struct _STRING {
61 USHORT Length;
62 USHORT MaximumLength;
63 PCHAR Buffer;
64} STRING, *PSTRING;
65
66typedef STRING ANSI_STRING;
67typedef PSTRING PANSI_STRING;
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +000068typedef const STRING *PCANSI_STRING;
Patrik Stridvalleba96492002-09-10 00:33:34 +000069
70typedef STRING OEM_STRING;
71typedef PSTRING POEM_STRING;
72typedef const STRING *PCOEM_STRING;
73
74typedef struct _UNICODE_STRING {
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +000075 USHORT Length; /* bytes */
76 USHORT MaximumLength; /* bytes */
Patrik Stridvalleba96492002-09-10 00:33:34 +000077 PWSTR Buffer;
78} UNICODE_STRING, *PUNICODE_STRING;
79
80typedef const UNICODE_STRING *PCUNICODE_STRING;
81
Alexandre Julliard088bcf92003-04-04 22:26:34 +000082typedef struct _CLIENT_ID
83{
84 HANDLE UniqueProcess;
85 HANDLE UniqueThread;
86} CLIENT_ID, *PCLIENT_ID;
87
Eric Pouech35d5d062003-05-15 04:20:42 +000088typedef struct _CURDIR
89{
90 UNICODE_STRING DosPath;
91 PVOID Handle;
92} CURDIR, *PCURDIR;
93
Alexandre Julliard6bc50912003-05-22 03:44:01 +000094typedef struct RTL_DRIVE_LETTER_CURDIR
95{
96 USHORT Flags;
97 USHORT Length;
98 ULONG TimeStamp;
99 UNICODE_STRING DosPath;
100} RTL_DRIVE_LETTER_CURDIR, *PRTL_DRIVE_LETTER_CURDIR;
101
102typedef struct _RTL_USER_PROCESS_PARAMETERS
103{
104 ULONG AllocationSize;
105 ULONG Size;
106 ULONG Flags;
107 ULONG DebugFlags;
108 HANDLE hConsole;
109 ULONG ProcessGroup;
110 HANDLE hStdInput;
111 HANDLE hStdOutput;
112 HANDLE hStdError;
113 UNICODE_STRING CurrentDirectoryName;
114 HANDLE CurrentDirectoryHandle;
115 UNICODE_STRING DllPath;
116 UNICODE_STRING ImagePathName;
117 UNICODE_STRING CommandLine;
118 PWSTR Environment;
119 ULONG dwX;
120 ULONG dwY;
121 ULONG dwXSize;
122 ULONG dwYSize;
123 ULONG dwXCountChars;
124 ULONG dwYCountChars;
125 ULONG dwFillAttribute;
126 ULONG dwFlags;
127 ULONG wShowWindow;
128 UNICODE_STRING WindowTitle;
129 UNICODE_STRING DesktopInfo;
130 UNICODE_STRING ShellInfo;
131 UNICODE_STRING RuntimeInfo;
132 RTL_DRIVE_LETTER_CURDIR DLCurrentDirectory[0x20];
133} RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS;
134
135
136/***********************************************************************
137 * PEB data structure
138 */
139typedef struct _PEB
140{
141 BYTE Reserved1[2]; /* 00 */
142 BYTE BeingDebugged; /* 02 */
143 BYTE Reserved2[5]; /* 03 */
144 HMODULE ImageBaseAddress; /* 08 */
145 PVOID __pad_0c; /* 0c */
146 RTL_USER_PROCESS_PARAMETERS *ProcessParameters; /* 10 */
147 PVOID __pad_14; /* 14 */
148 HANDLE ProcessHeap; /* 18 */
149 BYTE __pad_1c[204]; /* 1c */
150 PVOID Reserved3[59]; /* e8 */
151 ULONG SessionId; /* 1d4 */
152} PEB, *PPEB;
153
154
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000155/***********************************************************************
156 * Enums
157 */
Patrik Stridvalleba96492002-09-10 00:33:34 +0000158
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000159typedef enum _FILE_INFORMATION_CLASS {
160 FileDirectoryInformation = 1,
161 FileFullDirectoryInformation,
162 FileBothDirectoryInformation,
163 FileBasicInformation,
164 FileStandardInformation,
165 FileInternalInformation,
166 FileEaInformation,
167 FileAccessInformation,
168 FileNameInformation,
169 FileRenameInformation,
170 FileLinkInformation,
171 FileNamesInformation,
172 FileDispositionInformation,
173 FilePositionInformation,
174 FileFullEaInformation,
175 FileModeInformation,
176 FileAlignmentInformation,
177 FileAllInformation,
178 FileAllocationInformation,
179 FileEndOfFileInformation,
180 FileAlternateNameInformation,
181 FileStreamInformation,
182 FilePipeInformation,
183 FilePipeLocalInformation,
184 FilePipeRemoteInformation,
185 FileMailslotQueryInformation,
186 FileMailslotSetInformation,
187 FileCompressionInformation,
188 FileObjectIdInformation,
189 FileCompletionInformation,
190 FileMoveClusterInformation,
191 FileQuotaInformation,
192 FileReparsePointInformation,
193 FileNetworkOpenInformation,
194 FileAttributeTagInformation,
195 FileTrackingInformation,
196 FileMaximumInformation
197} FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;
Patrik Stridvalleba96492002-09-10 00:33:34 +0000198
Mike McCormack997e2352002-11-18 19:44:17 +0000199typedef struct _FILE_BASIC_INFORMATION {
200 LARGE_INTEGER CreationTime;
201 LARGE_INTEGER LastAccessTime;
202 LARGE_INTEGER LastWriteTime;
203 LARGE_INTEGER ChangeTime;
204 ULONG FileAttributes;
205} FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION;
206
207typedef struct _FILE_STANDARD_INFORMATION {
208 LARGE_INTEGER AllocationSize;
209 LARGE_INTEGER EndOfFile;
210 ULONG NumberOfLinks;
211 BOOLEAN DeletePending;
212 BOOLEAN Directory;
213} FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION;
214
215typedef struct _FILE_POSITION_INFORMATION {
216 LARGE_INTEGER CurrentByteOffset;
217} FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION;
218
219typedef struct _FILE_ALIGNMENT_INFORMATION {
220 ULONG AlignmentRequirement;
221} FILE_ALIGNMENT_INFORMATION, *PFILE_ALIGNMENT_INFORMATION;
222
223typedef struct _FILE_NETWORK_OPEN_INFORMATION {
224 LARGE_INTEGER CreationTime;
225 LARGE_INTEGER LastAccessTime;
226 LARGE_INTEGER LastWriteTime;
227 LARGE_INTEGER ChangeTime;
228 LARGE_INTEGER AllocationSize;
229 LARGE_INTEGER EndOfFile;
230 ULONG FileAttributes;
231} FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;
232
233typedef struct _FILE_FULL_EA_INFORMATION {
234 ULONG NextEntryOffset;
235 UCHAR Flags;
236 UCHAR EaNameLength;
237 USHORT EaValueLength;
238 CHAR EaName[1];
239} FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION;
240
241typedef struct _FILE_STREAM_INFORMATION
242{
243 ULONG NextEntryOffset;
244 ULONG StreamNameLength;
245 LARGE_INTEGER StreamSize;
246 LARGE_INTEGER StreamAllocationSize;
247 WCHAR StreamName[1];
248} FILE_STREAM_INFORMATION, *PFILE_STREAM_INFORMATION;
249
250struct _FILE_ATTRIBUTE_TAG_INFORMATION
251{
252 ULONG FileAttributes;
253 ULONG ReparseTag;
254} FILE_ATTRIBUTE_TAG_INFORMATION, *PFILE_ATTRIBUTE_TAG_INFORMATION;
255
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000256typedef enum _FSINFOCLASS {
257 FileFsVolumeInformation = 1,
258 FileFsLabelInformation,
259 FileFsSizeInformation,
260 FileFsDeviceInformation,
261 FileFsAttributeInformation,
262 FileFsControlInformation,
263 FileFsFullSizeInformation,
264 FileFsObjectIdInformation,
265 FileFsMaximumInformation
266} FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS;
Patrik Stridvalleba96492002-09-10 00:33:34 +0000267
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000268typedef enum _KEY_INFORMATION_CLASS {
269 KeyBasicInformation,
270 KeyNodeInformation,
271 KeyFullInformation
272} KEY_INFORMATION_CLASS;
273
274typedef enum _KEY_VALUE_INFORMATION_CLASS {
275 KeyValueBasicInformation,
276 KeyValueFullInformation,
277 KeyValuePartialInformation,
278 KeyValueFullInformationAlign64,
279 KeyValuePartialInformationAlign64
280} KEY_VALUE_INFORMATION_CLASS;
281
282typedef enum _OBJECT_INFORMATION_CLASS {
Eric Pouechb3504382003-05-20 19:20:42 +0000283 ObjectBasicInformation,
284 ObjectNameInformation,
285 ObjectTypeInformation,
286 ObjectAllInformation,
287 ObjectDataInformation
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000288} OBJECT_INFORMATION_CLASS, *POBJECT_INFORMATION_CLASS;
289
290typedef enum _PROCESSINFOCLASS {
291 ProcessBasicInformation = 0,
292 ProcessQuotaLimits = 1,
293 ProcessIoCounters = 2,
294 ProcessVmCounters = 3,
295 ProcessTimes = 4,
296 ProcessBasePriority = 5,
297 ProcessRaisePriority = 6,
298 ProcessDebugPort = 7,
299 ProcessExceptionPort = 8,
300 ProcessAccessToken = 9,
301 ProcessLdtInformation = 10,
302 ProcessLdtSize = 11,
303 ProcessDefaultHardErrorMode = 12,
304 ProcessIoPortHandlers = 13,
305 ProcessPooledUsageAndLimits = 14,
306 ProcessWorkingSetWatch = 15,
307 ProcessUserModeIOPL = 16,
308 ProcessEnableAlignmentFaultFixup = 17,
309 ProcessPriorityClass = 18,
310 ProcessWx86Information = 19,
311 ProcessHandleCount = 20,
312 ProcessAffinityMask = 21,
313 ProcessPriorityBoost = 22,
314 ProcessDeviceMap = 23,
315 ProcessSessionInformation = 24,
316 ProcessForegroundInformation = 25,
317 ProcessWow64Information = 26,
318 MaxProcessInfoClass
319} PROCESSINFOCLASS;
320
321typedef enum _SECTION_INHERIT {
322 ViewShare = 1,
323 ViewUnmap = 2
324} SECTION_INHERIT;
325
326typedef enum SYSTEM_INFORMATION_CLASS {
327 SystemBasicInformation = 0,
328 Unknown1,
329 SystemPerformanceInformation = 2,
330 SystemTimeOfDayInformation = 3, /* was SystemTimeInformation */
331 Unknown4,
332 SystemProcessInformation = 5,
333 Unknown6,
334 Unknown7,
335 SystemProcessorPerformanceInformation = 8,
336 Unknown9,
337 Unknown10,
338 SystemDriverInformation,
339 Unknown12,
340 Unknown13,
341 Unknown14,
342 Unknown15,
343 SystemHandleList,
344 Unknown17,
345 Unknown18,
346 Unknown19,
347 Unknown20,
348 SystemCacheInformation,
349 Unknown22,
350 SystemInterruptInformation = 23,
351 SystemExceptionInformation = 33,
352 SystemRegistryQuotaInformation = 37,
353 SystemLookasideInformation = 45
354} SYSTEM_INFORMATION_CLASS, *PSYSTEM_INFORMATION_CLASS;
355
356typedef enum _TIMER_TYPE {
357 NotificationTimer,
358 SynchronizationTimer
359} TIMER_TYPE;
360
361typedef enum _THREADINFOCLASS {
362 ThreadBasicInformation,
363 ThreadTimes,
364 ThreadPriority,
365 ThreadBasePriority,
366 ThreadAffinityMask,
367 ThreadImpersonationToken,
368 ThreadDescriptorTableEntry,
369 ThreadEnableAlignmentFaultFixup,
370 ThreadEventPair_Reusable,
371 ThreadQuerySetWin32StartAddress,
372 ThreadZeroTlsCell,
373 ThreadPerformanceCount,
374 ThreadAmILastThread,
375 ThreadIdealProcessor,
376 ThreadPriorityBoost,
377 ThreadSetTlsArrayAddress,
378 ThreadIsIoPending,
379 MaxThreadInfoClass
380} THREADINFOCLASS;
381
382typedef enum _WINSTATIONINFOCLASS {
383 WinStationInformation = 8
384} WINSTATIONINFOCLASS;
Patrik Stridvalleba96492002-09-10 00:33:34 +0000385
Alexandre Julliard341b7dc2002-09-17 18:54:42 +0000386typedef enum
387{
388 MemoryBasicInformation = 0
389} MEMORY_INFORMATION_CLASS;
390
Alexandre Julliardaa94a5a2003-04-12 00:10:13 +0000391/* return type of RtlDetermineDosPathNameType_U (FIXME: not the correct names) */
392typedef enum
393{
394 INVALID_PATH = 0,
395 UNC_PATH, /* "//foo" */
396 ABSOLUTE_DRIVE_PATH, /* "c:/foo" */
397 RELATIVE_DRIVE_PATH, /* "c:foo" */
398 ABSOLUTE_PATH, /* "/foo" */
399 RELATIVE_PATH, /* "foo" */
400 DEVICE_PATH, /* "//./foo" */
401 UNC_DOT_PATH /* "//." */
402} DOS_PATHNAME_TYPE;
403
Patrik Stridvalleba96492002-09-10 00:33:34 +0000404/***********************************************************************
405 * IA64 specific types and data structures
406 */
407
408#ifdef __ia64__
409
410typedef struct _FRAME_POINTERS {
411 ULONGLONG MemoryStackFp;
412 ULONGLONG BackingStoreFp;
413} FRAME_POINTERS, *PFRAME_POINTERS;
414
415#define UNWIND_HISTORY_TABLE_SIZE 12
416
417typedef struct _RUNTIME_FUNCTION {
418 ULONG BeginAddress;
419 ULONG EndAddress;
420 ULONG UnwindInfoAddress;
421} RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;
422
423typedef struct _UNWIND_HISTORY_TABLE_ENTRY {
424 ULONG64 ImageBase;
425 ULONG64 Gp;
426 PRUNTIME_FUNCTION FunctionEntry;
427} UNWIND_HISTORY_TABLE_ENTRY, *PUNWIND_HISTORY_TABLE_ENTRY;
428
429typedef struct _UNWIND_HISTORY_TABLE {
430 ULONG Count;
431 UCHAR Search;
432 ULONG64 LowAddress;
433 ULONG64 HighAddress;
434 UNWIND_HISTORY_TABLE_ENTRY Entry[UNWIND_HISTORY_TABLE_SIZE];
435} UNWIND_HISTORY_TABLE, *PUNWIND_HISTORY_TABLE;
436
437#endif /* defined(__ia64__) */
438
439/***********************************************************************
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000440 * Types and data structures
Patrik Stridvalleba96492002-09-10 00:33:34 +0000441 */
442
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000443/* This is used by NtQuerySystemInformation */
444/* FIXME: Isn't THREAD_INFO and THREADINFO the same structure? */
445typedef struct {
446 FILETIME ftCreationTime;
447 DWORD dwUnknown1;
448 DWORD dwStartAddress;
449 DWORD dwOwningPID;
450 DWORD dwThreadID;
451 DWORD dwCurrentPriority;
452 DWORD dwBasePriority;
453 DWORD dwContextSwitches;
454 DWORD dwThreadState;
455 DWORD dwWaitReason;
456 DWORD dwUnknown2[5];
457} THREADINFO, *PTHREADINFO;
458
459/* FIXME: Isn't THREAD_INFO and THREADINFO the same structure? */
460typedef struct _THREAD_INFO{
461 DWORD Unknown1[6];
462 DWORD ThreadID;
463 DWORD Unknown2[3];
464 DWORD Status;
465 DWORD WaitReason;
466 DWORD Unknown3[4];
467} THREAD_INFO, PTHREAD_INFO;
468
469/***********************************************************************
470 * Types and data structures
471 */
472
473typedef struct _IO_STATUS_BLOCK {
474 union {
475 NTSTATUS Status;
476 PVOID Pointer;
477 } DUMMYUNIONNAME;
478
479 ULONG_PTR Information;
480} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
481
482typedef void (WINAPI * PIO_APC_ROUTINE)(PVOID,PIO_STATUS_BLOCK,ULONG);
483
484typedef struct _KEY_BASIC_INFORMATION {
485 LARGE_INTEGER LastWriteTime;
486 ULONG TitleIndex;
487 ULONG NameLength;
488 WCHAR Name[1];
489} KEY_BASIC_INFORMATION, *PKEY_BASIC_INFORMATION;
490
491typedef struct _KEY_NODE_INFORMATION
492{
493 LARGE_INTEGER LastWriteTime;
494 ULONG TitleIndex;
495 ULONG ClassOffset;
496 ULONG ClassLength;
497 ULONG NameLength;
498 WCHAR Name[1];
499 /* Class[1]; */
500} KEY_NODE_INFORMATION, *PKEY_NODE_INFORMATION;
501
502typedef struct _KEY_FULL_INFORMATION
503{
504 LARGE_INTEGER LastWriteTime;
505 ULONG TitleIndex;
506 ULONG ClassOffset;
507 ULONG ClassLength;
508 ULONG SubKeys;
509 ULONG MaxNameLen;
510 ULONG MaxClassLen;
511 ULONG Values;
512 ULONG MaxValueNameLen;
513 ULONG MaxValueDataLen;
514 WCHAR Class[1];
515} KEY_FULL_INFORMATION, *PKEY_FULL_INFORMATION;
516
517typedef struct _KEY_VALUE_ENTRY
518{
519 PUNICODE_STRING ValueName;
520 ULONG DataLength;
521 ULONG DataOffset;
522 ULONG Type;
523} KEY_VALUE_ENTRY, *PKEY_VALUE_ENTRY;
524
525typedef struct _KEY_VALUE_BASIC_INFORMATION {
526 ULONG TitleIndex;
527 ULONG Type;
528 ULONG NameLength;
529 WCHAR Name[1];
530} KEY_VALUE_BASIC_INFORMATION, *PKEY_VALUE_BASIC_INFORMATION;
531
532typedef struct _KEY_VALUE_FULL_INFORMATION {
533 ULONG TitleIndex;
534 ULONG Type;
535 ULONG DataOffset;
536 ULONG DataLength;
537 ULONG NameLength;
538 WCHAR Name[1];
539} KEY_VALUE_FULL_INFORMATION, *PKEY_VALUE_FULL_INFORMATION;
540
541typedef struct _KEY_VALUE_PARTIAL_INFORMATION {
542 ULONG TitleIndex;
543 ULONG Type;
544 ULONG DataLength;
545 UCHAR Data[1];
546} KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION;
547
548typedef struct _OBJECT_ATTRIBUTES {
549 ULONG Length;
550 HANDLE RootDirectory;
551 PUNICODE_STRING ObjectName;
552 ULONG Attributes;
553 PVOID SecurityDescriptor; /* type SECURITY_DESCRIPTOR */
554 PVOID SecurityQualityOfService; /* type SECURITY_QUALITY_OF_SERVICE */
555} OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;
556
Eric Pouechb3504382003-05-20 19:20:42 +0000557typedef struct _OBJECT_DATA_INFORMATION {
558 BOOLEAN InheritHandle;
559 BOOLEAN ProtectFromClose;
560} OBJECT_DATA_INFORMATION, *POBJECT_DATA_INFORMATION;
561
Patrik Stridvalleba96492002-09-10 00:33:34 +0000562typedef struct _PROCESS_BASIC_INFORMATION {
Dimitrie O. Paun8b366812003-01-04 00:52:18 +0000563#ifdef __WINESRC__
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000564 DWORD ExitStatus;
565 DWORD PebBaseAddress;
566 DWORD AffinityMask;
567 DWORD BasePriority;
568 ULONG UniqueProcessId;
569 ULONG InheritedFromUniqueProcessId;
570#else
Patrik Stridvalleba96492002-09-10 00:33:34 +0000571 PVOID Reserved1;
572 PPEB PebBaseAddress;
573 PVOID Reserved2[2];
574 ULONG_PTR UniqueProcessId;
575 PVOID Reserved3;
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000576#endif
Patrik Stridvalleba96492002-09-10 00:33:34 +0000577} PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION;
578
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000579typedef struct _PROCESS_INFO {
580 DWORD Offset; /* 00 offset to next PROCESS_INFO ok*/
581 DWORD ThreadCount; /* 04 number of ThreadInfo member ok */
582 DWORD Unknown1[6];
583 FILETIME CreationTime; /* 20 */
584 DWORD Unknown2[5];
585 PWCHAR ProcessName; /* 3c ok */
586 DWORD BasePriority;
587 DWORD ProcessID; /* 44 ok*/
588 DWORD ParentProcessID;
589 DWORD HandleCount;
590 DWORD Unknown3[2]; /* 50 */
591 ULONG PeakVirtualSize;
592 ULONG VirtualSize;
593 ULONG PageFaultCount;
594 ULONG PeakWorkingSetSize;
595 ULONG WorkingSetSize;
596 ULONG QuotaPeakPagedPoolUsage;
597 ULONG QuotaPagedPoolUsage;
598 ULONG QuotaPeakNonPagedPoolUsage;
599 ULONG QuotaNonPagedPoolUsage;
600 ULONG PagefileUsage;
601 ULONG PeakPagefileUsage;
602 DWORD PrivateBytes;
603 DWORD Unknown6[4];
604 THREAD_INFO ati[ANYSIZE_ARRAY]; /* 94 size=0x40*/
605} PROCESS_INFO, PPROCESS_INFO;
Patrik Stridvalleba96492002-09-10 00:33:34 +0000606
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000607typedef struct _RTL_HEAP_DEFINITION {
608 ULONG Length; /* = sizeof(RTL_HEAP_DEFINITION) */
Patrik Stridvalleba96492002-09-10 00:33:34 +0000609
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000610 ULONG Unknown[11];
611} RTL_HEAP_DEFINITION, *PRTL_HEAP_DEFINITION;
Patrik Stridvalleba96492002-09-10 00:33:34 +0000612
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000613typedef struct tagRTL_BITMAP {
614 ULONG SizeOfBitMap; /* Number of bits in the bitmap */
615 LPBYTE BitMapBuffer; /* Bitmap data, assumed sized to a DWORD boundary */
616} RTL_BITMAP, *PRTL_BITMAP;
617
618typedef const RTL_BITMAP *PCRTL_BITMAP;
619
620typedef struct tagRTL_BITMAP_RUN {
621 ULONG StartOfRun; /* Bit position at which run starts - FIXME: Name? */
622 ULONG SizeOfRun; /* Size of the run in bits - FIXME: Name? */
623} RTL_BITMAP_RUN, *PRTL_BITMAP_RUN;
624
625typedef const RTL_BITMAP_RUN *PCRTL_BITMAP_RUN;
626
627typedef struct _RTL_RWLOCK {
628 RTL_CRITICAL_SECTION rtlCS;
629
630 HANDLE hSharedReleaseSemaphore;
631 UINT uSharedWaiters;
632
633 HANDLE hExclusiveReleaseSemaphore;
634 UINT uExclusiveWaiters;
635
636 INT iNumberActive;
637 HANDLE hOwningThreadId;
638 DWORD dwTimeoutBoost;
639 PVOID pDebugInfo;
640} RTL_RWLOCK, *LPRTL_RWLOCK;
641
642/* System Information Class 0x00 */
Patrik Stridvalleba96492002-09-10 00:33:34 +0000643typedef struct _SYSTEM_BASIC_INFORMATION {
Dimitrie O. Paun8b366812003-01-04 00:52:18 +0000644#ifdef __WINESRC__
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000645 DWORD dwUnknown1;
646 ULONG uKeMaximumIncrement;
647 ULONG uPageSize;
648 ULONG uMmNumberOfPhysicalPages;
649 ULONG uMmLowestPhysicalPage;
650 ULONG uMmHighestPhysicalPage;
651 ULONG uAllocationGranularity;
652 PVOID pLowestUserAddress;
653 PVOID pMmHighestUserAddress;
654 ULONG uKeActiveProcessors;
655 BYTE bKeNumberProcessors;
656 BYTE bUnknown2;
657 WORD wUnknown3;
658#else
Patrik Stridvalleba96492002-09-10 00:33:34 +0000659 BYTE Reserved1[24];
660 PVOID Reserved2[4];
661 CCHAR NumberOfProcessors;
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000662#endif
Patrik Stridvalleba96492002-09-10 00:33:34 +0000663} SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION;
664
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000665/* System Information Class 0x15 */
666typedef struct {
667 ULONG CurrentSize;
668 ULONG PeakSize;
669 ULONG PageFaultCount;
670 ULONG MinimumWorkingSet;
671 ULONG MaximumWorkingSet;
672 ULONG unused[4];
673} SYSTEM_CACHE_INFORMATION;
Patrik Stridvalleba96492002-09-10 00:33:34 +0000674
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000675typedef struct _SYSTEM_CONFIGURATION_INFO {
676 union {
677 ULONG OemId;
678 struct {
679 WORD ProcessorArchitecture;
680 WORD Reserved;
681 } tag1;
682 } tag2;
683 ULONG PageSize;
684 PVOID MinimumApplicationAddress;
685 PVOID MaximumApplicationAddress;
686 ULONG ActiveProcessorMask;
687 ULONG NumberOfProcessors;
688 ULONG ProcessorType;
689 ULONG AllocationGranularity;
690 WORD ProcessorLevel;
691 WORD ProcessorRevision;
692} SYSTEM_CONFIGURATION_INFO, *PSYSTEM_CONFIGURATION_INFO;
693
694/* System Information Class 0x0b */
695typedef struct {
696 PVOID pvAddress;
697 DWORD dwUnknown1;
698 DWORD dwUnknown2;
699 DWORD dwEntryIndex;
700 DWORD dwUnknown3;
701 char szName[MAX_PATH + 1];
702} SYSTEM_DRIVER_INFORMATION;
Patrik Stridvalleba96492002-09-10 00:33:34 +0000703
704typedef struct _SYSTEM_EXCEPTION_INFORMATION {
705 BYTE Reserved1[16];
706} SYSTEM_EXCEPTION_INFORMATION, *PSYSTEM_EXCEPTION_INFORMATION;
707
708typedef struct _SYSTEM_LOOKASIDE_INFORMATION {
709 BYTE Reserved1[32];
710} SYSTEM_LOOKASIDE_INFORMATION, *PSYSTEM_LOOKASIDE_INFORMATION;
711
712typedef struct _SYSTEM_INTERRUPT_INFORMATION {
713 BYTE Reserved1[24];
714} SYSTEM_INTERRUPT_INFORMATION, *PSYSTEM_INTERRUPT_INFORMATION;
715
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000716/* System Information Class 0x10 */
717typedef struct {
718 USHORT dwPID;
719 USHORT dwCreatorBackTraceIndex;
720 BYTE bObjectType;
721 BYTE bHandleAttributes;
722 USHORT usHandleOffset;
723 DWORD dwKeObject;
724 ULONG ulGrantedAccess;
725} HANDLEINFO, *PHANDLEINFO; /* FIXME: SYSTEM_HANDLE_INFORMATION? */
Patrik Stridvalleba96492002-09-10 00:33:34 +0000726
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000727typedef struct _SYSTEM_PERFORMANCE_INFORMATION {
728 BYTE Reserved1[312];
729} SYSTEM_PERFORMANCE_INFORMATION, *PSYSTEM_PERFORMANCE_INFORMATION;
Patrik Stridvalleba96492002-09-10 00:33:34 +0000730
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000731/* System Information Class 0x02 */
732typedef struct _SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION {
Dimitrie O. Paun8b366812003-01-04 00:52:18 +0000733#ifdef __WINESRC__
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000734 LARGE_INTEGER liIdleTime;
735 DWORD dwSpare[76];
736#else
737 LARGE_INTEGER IdleTime;
738 LARGE_INTEGER KernelTime;
739 LARGE_INTEGER UserTime;
740 LARGE_INTEGER Reserved1[2];
741 ULONG Reserved2;
Patrik Stridvalleba96492002-09-10 00:33:34 +0000742#endif
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000743} SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION, *PSYSTEM_PROCESSOR_PERFORMANCE_INFORMATION;
Patrik Stridvalleba96492002-09-10 00:33:34 +0000744
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000745/* System Information Class 0x05 */
746typedef struct _SYSTEM_PROCESS_INFORMATION {
Dimitrie O. Paun8b366812003-01-04 00:52:18 +0000747#ifdef __WINESRC__
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000748 DWORD dwOffset;
749 DWORD dwThreadCount;
750 DWORD dwUnknown1[6];
751 FILETIME ftCreationTime;
752 DWORD dwUnknown2[5];
753 WCHAR *pszProcessName;
754 DWORD dwBasePriority;
755 DWORD dwProcessID;
756 DWORD dwParentProcessID;
757 DWORD dwHandleCount;
758 DWORD dwUnknown3;
759 DWORD dwUnknown4;
760 DWORD dwVirtualBytesPeak;
761 DWORD dwVirtualBytes;
762 DWORD dwPageFaults;
763 DWORD dwWorkingSetPeak;
764 DWORD dwWorkingSet;
765 DWORD dwUnknown5;
766 DWORD dwPagedPool;
767 DWORD dwUnknown6;
768 DWORD dwNonPagedPool;
769 DWORD dwPageFileBytesPeak;
770 DWORD dwPrivateBytes;
771 DWORD dwPageFileBytes;
772 DWORD dwUnknown7[4];
773 THREADINFO ti[1];
774#else
775 ULONG NextEntryOffset;
776 BYTE Reserved1[52];
777 PVOID Reserved2[3];
778 HANDLE UniqueProcessId;
779 PVOID Reserved3;
780 ULONG HandleCount;
781 BYTE Reserved4[4];
782 PVOID Reserved5[11];
783 SIZE_T PeakPagefileUsage;
784 SIZE_T PrivatePageCount;
785 LARGE_INTEGER Reserved6[6];
786#endif
787} SYSTEM_PROCESS_INFORMATION, *PSYSTEM_PROCESS_INFORMATION;
Patrik Stridvalleba96492002-09-10 00:33:34 +0000788
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000789typedef struct _SYSTEM_REGISTRY_QUOTA_INFORMATION {
790 ULONG RegistryQuotaAllowed;
791 ULONG RegistryQuotaUsed;
792 PVOID Reserved1;
793} SYSTEM_REGISTRY_QUOTA_INFORMATION, *PSYSTEM_REGISTRY_QUOTA_INFORMATION;
Patrik Stridvalleba96492002-09-10 00:33:34 +0000794
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000795typedef struct _SYSTEM_TIME_ADJUSTMENT {
796 ULONG TimeAdjustment;
797 BOOLEAN TimeAdjustmentDisabled;
798} SYSTEM_TIME_ADJUSTMENT, *PSYSTEM_TIME_ADJUSTMENT;
799
800/* System Information Class 0x03 */
801typedef struct _SYSTEM_TIMEOFDAY_INFORMATION {
Dimitrie O. Paun8b366812003-01-04 00:52:18 +0000802#ifdef __WINESRC__
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000803 LARGE_INTEGER liKeBootTime;
804 LARGE_INTEGER liKeSystemTime;
805 LARGE_INTEGER liExpTimeZoneBias;
806 ULONG uCurrentTimeZoneId;
807 DWORD dwReserved;
808#else
809 BYTE Reserved1[48];
810#endif
811} SYSTEM_TIMEOFDAY_INFORMATION, *PSYSTEM_TIMEOFDAY_INFORMATION; /* was SYSTEM_TIME_INFORMATION */
812
813typedef struct _TIME_FIELDS
814{ CSHORT Year;
815 CSHORT Month;
816 CSHORT Day;
817 CSHORT Hour;
818 CSHORT Minute;
819 CSHORT Second;
820 CSHORT Milliseconds;
821 CSHORT Weekday;
822} TIME_FIELDS, *PTIME_FIELDS;
Patrik Stridvalleba96492002-09-10 00:33:34 +0000823
824typedef struct _WINSTATIONINFORMATIONW {
825 BYTE Reserved2[70];
826 ULONG LogonId;
827 BYTE Reserved3[1140];
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000828} WINSTATIONINFORMATIONW, *PWINSTATIONINFORMATIONW;
829
830typedef struct _VM_COUNTERS_ {
831 ULONG PeakVirtualSize;
832 ULONG VirtualSize;
833 ULONG PageFaultCount;
834 ULONG PeakWorkingSetSize;
835 ULONG WorkingSetSize;
836 ULONG QuotaPeakPagedPoolUsage;
837 ULONG QuotaPagedPoolUsage;
838 ULONG QuotaPeakNonPagedPoolUsage;
839 ULONG QuotaNonPagedPoolUsage;
840 ULONG PagefileUsage;
841 ULONG PeakPagefileUsage;
842} VM_COUNTERS, *PVM_COUNTERS;
Patrik Stridvalleba96492002-09-10 00:33:34 +0000843
844typedef BOOLEAN (WINAPI * PWINSTATIONQUERYINFORMATIONW)(HANDLE,ULONG,WINSTATIONINFOCLASS,PVOID,ULONG,PULONG);
845
Alexandre Julliard86666c52003-04-29 23:00:48 +0000846typedef struct _LDR_RESOURCE_INFO
847{
848 ULONG Type;
849 ULONG Name;
850 ULONG Language;
851} LDR_RESOURCE_INFO, *PLDR_RESOURCE_INFO;
852
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000853/***********************************************************************
854 * Defines
855 */
856
857/* flags for NtCreateFile and NtOpenFile */
858#define FILE_DIRECTORY_FLAG 0x00000001
859#define FILE_WRITE_THROUGH 0x00000002
860#define FILE_SEQUENTIAL_ONLY 0x00000004
861#define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
862#define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
863#define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
864#define FILE_NON_DIRECTORY_FILE 0x00000040
865#define FILE_CREATE_TREE_CONNECTION 0x00000080
866
867/* status for NtCreateFile or NtOpenFile */
868#define FILE_SUPERSEDED 0x00000000
869#define FILE_OPENED 0x00000001
870#define FILE_CREATED 0x00000002
871#define FILE_OVERWRITTEN 0x00000003
872#define FILE_EXISTS 0x00000004
873#define FILE_DOES_NOT_EXIST 0x00000005
874
875#if (_WIN32_WINNT >= 0x0501)
876#define INTERNAL_TS_ACTIVE_CONSOLE_ID ( *((volatile ULONG*)(0x7ffe02d8)) )
877#endif /* (_WIN32_WINNT >= 0x0501) */
878
879#define LOGONID_CURRENT ((ULONG)-1)
880
881#define OBJ_INHERIT 0x00000002L
882#define OBJ_PERMANENT 0x00000010L
883#define OBJ_EXCLUSIVE 0x00000020L
884#define OBJ_CASE_INSENSITIVE 0x00000040L
885#define OBJ_OPENIF 0x00000080L
886#define OBJ_OPENLINK 0x00000100L
887#define OBJ_KERNEL_HANDLE 0x00000200L
888#define OBJ_VALID_ATTRIBUTES 0x000003F2L
889
890#define SERVERNAME_CURRENT ((HANDLE)NULL)
891
Alexandre Julliard088bcf92003-04-04 22:26:34 +0000892typedef void (CALLBACK *PNTAPCFUNC)(ULONG_PTR,ULONG_PTR,ULONG_PTR); /* FIXME: not the right name */
893
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000894/***********************************************************************
895 * Function declarations
896 */
897
898extern LPSTR _strlwr(LPSTR str); /* FIXME: Doesn't belong here */
899extern LPSTR _strupr(LPSTR str); /* FIXME: Doesn't belong here */
900
901#if defined(__i386__) && defined(__GNUC__)
902static inline void WINAPI DbgBreakPoint(void) { __asm__ __volatile__("int3"); }
903static inline void WINAPI DbgUserBreakPoint(void) { __asm__ __volatile__("int3"); }
904#else /* __i386__ && __GNUC__ */
905void WINAPI DbgBreakPoint(void);
906void WINAPI DbgUserBreakPoint(void);
907#endif /* __i386__ && __GNUC__ */
908void WINAPIV DbgPrint(LPCSTR fmt, ...);
909
Alexandre Julliard86666c52003-04-29 23:00:48 +0000910NTSTATUS WINAPI LdrAccessResource(HMODULE,const IMAGE_RESOURCE_DATA_ENTRY*,void**,PULONG);
Alexandre Julliardce4d1112003-05-07 03:21:26 +0000911NTSTATUS WINAPI LdrFindResourceDirectory_U(HMODULE,const LDR_RESOURCE_INFO*,ULONG,const IMAGE_RESOURCE_DIRECTORY**);
Alexandre Julliard86666c52003-04-29 23:00:48 +0000912NTSTATUS WINAPI LdrFindResource_U(HMODULE,const LDR_RESOURCE_INFO*,ULONG,const IMAGE_RESOURCE_DATA_ENTRY**);
Alexandre Julliardd9bab572003-05-08 04:13:26 +0000913void WINAPI LdrShutdownProcess(void);
914void WINAPI LdrShutdownThread(void);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000915NTSTATUS WINAPI NtAccessCheck(PSECURITY_DESCRIPTOR,HANDLE,ACCESS_MASK,PGENERIC_MAPPING,PPRIVILEGE_SET,PULONG,PULONG,PBOOLEAN);
916NTSTATUS WINAPI NtAdjustPrivilegesToken(HANDLE,BOOLEAN,PTOKEN_PRIVILEGES,DWORD,PTOKEN_PRIVILEGES,PDWORD);
Alexandre Julliard341b7dc2002-09-17 18:54:42 +0000917NTSTATUS WINAPI NtAllocateVirtualMemory(HANDLE,PVOID*,PVOID,ULONG*,ULONG,ULONG);
Eric Pouech4c591d42003-05-20 04:00:42 +0000918NTSTATUS WINAPI NtCancelTimer(HANDLE, BOOLEAN*);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000919NTSTATUS WINAPI NtClearEvent(HANDLE);
920NTSTATUS WINAPI NtClose(HANDLE);
921NTSTATUS WINAPI NtCreateEvent(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *,BOOLEAN,BOOLEAN);
922NTSTATUS WINAPI NtCreateFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,PLARGE_INTEGER,ULONG,ULONG,ULONG,ULONG,PVOID,ULONG);
Alexandre Julliard9b5c3f92002-10-25 19:14:29 +0000923NTSTATUS WINAPI NtCreateKey(PHKEY,ACCESS_MASK,const OBJECT_ATTRIBUTES*,ULONG,const UNICODE_STRING*,ULONG,PULONG);
Alexandre Julliard341b7dc2002-09-17 18:54:42 +0000924NTSTATUS WINAPI NtCreateSection(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const LARGE_INTEGER*,ULONG,ULONG,HANDLE);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000925NTSTATUS WINAPI NtCreateSemaphore(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,ULONG,ULONG);
Eric Pouech4c591d42003-05-20 04:00:42 +0000926NTSTATUS WINAPI NtCreateTimer(HANDLE*, ACCESS_MASK, const OBJECT_ATTRIBUTES*, TIMER_TYPE);
Alexandre Julliard9b5c3f92002-10-25 19:14:29 +0000927NTSTATUS WINAPI NtDeleteKey(HKEY);
928NTSTATUS WINAPI NtDeleteValueKey(HKEY,const UNICODE_STRING *);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000929NTSTATUS WINAPI NtDeviceIoControlFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,PVOID,ULONG,PVOID,ULONG);
Alexandre Julliardac7b9d32002-09-16 19:32:50 +0000930NTSTATUS WINAPI NtDuplicateObject(HANDLE,HANDLE,HANDLE,PHANDLE,ACCESS_MASK,ULONG,ULONG);
Alexandre Julliard9b5c3f92002-10-25 19:14:29 +0000931NTSTATUS WINAPI NtEnumerateKey(HKEY,ULONG,KEY_INFORMATION_CLASS,void *,DWORD,DWORD *);
932NTSTATUS WINAPI NtEnumerateValueKey(HKEY,ULONG,KEY_VALUE_INFORMATION_CLASS,PVOID,ULONG,PULONG);
Eric Pouechb6338872003-04-22 04:04:17 +0000933NTSTATUS WINAPI NtFlushBuffersFile(HANDLE,IO_STATUS_BLOCK*);
Alexandre Julliard9b5c3f92002-10-25 19:14:29 +0000934NTSTATUS WINAPI NtFlushKey(HKEY);
Alexandre Julliard341b7dc2002-09-17 18:54:42 +0000935NTSTATUS WINAPI NtFlushVirtualMemory(HANDLE,LPCVOID*,ULONG*,ULONG);
936NTSTATUS WINAPI NtFreeVirtualMemory(HANDLE,PVOID*,ULONG*,ULONG);
Alexandre Julliard088bcf92003-04-04 22:26:34 +0000937NTSTATUS WINAPI NtGetContextThread(HANDLE,CONTEXT*);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000938NTSTATUS WINAPI NtLoadKey(const OBJECT_ATTRIBUTES *,const OBJECT_ATTRIBUTES *);
Alexandre Julliard341b7dc2002-09-17 18:54:42 +0000939NTSTATUS WINAPI NtLockVirtualMemory(HANDLE,PVOID*,ULONG*,ULONG);
940NTSTATUS WINAPI NtMapViewOfSection(HANDLE,HANDLE,PVOID*,ULONG,ULONG,const LARGE_INTEGER*,ULONG*,SECTION_INHERIT,ULONG,ULONG);
Alexandre Julliard9b5c3f92002-10-25 19:14:29 +0000941NTSTATUS WINAPI NtNotifyChangeKey(HKEY,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,BOOLEAN,PVOID,ULONG,BOOLEAN);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000942NTSTATUS WINAPI NtOpenEvent(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *);
943NTSTATUS WINAPI NtOpenFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,ULONG,ULONG);
Alexandre Julliard9b5c3f92002-10-25 19:14:29 +0000944NTSTATUS WINAPI NtOpenKey(PHKEY,ACCESS_MASK,const OBJECT_ATTRIBUTES *);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000945NTSTATUS WINAPI NtOpenProcessToken(HANDLE,DWORD,HANDLE *);
Alexandre Julliard341b7dc2002-09-17 18:54:42 +0000946NTSTATUS WINAPI NtOpenSection(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*);
Alexandre Julliard088bcf92003-04-04 22:26:34 +0000947NTSTATUS WINAPI NtOpenThread(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const CLIENT_ID*);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000948NTSTATUS WINAPI NtOpenThreadToken(HANDLE,DWORD,BOOLEAN,HANDLE *);
Eric Pouech4c591d42003-05-20 04:00:42 +0000949NTSTATUS WINAPI NtOpenTimer(HANDLE*, ACCESS_MASK, const OBJECT_ATTRIBUTES*);
Alexandre Julliard341b7dc2002-09-17 18:54:42 +0000950NTSTATUS WINAPI NtProtectVirtualMemory(HANDLE,PVOID*,ULONG*,ULONG,ULONG*);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000951NTSTATUS WINAPI NtPulseEvent(HANDLE,PULONG);
Alexandre Julliard088bcf92003-04-04 22:26:34 +0000952NTSTATUS WINAPI NtQueueApcThread(HANDLE,PNTAPCFUNC,ULONG_PTR,ULONG_PTR,ULONG_PTR);
Alexandre Julliard86666c52003-04-29 23:00:48 +0000953NTSTATUS WINAPI NtQueryDefaultLocale(BOOLEAN,LCID*);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000954NTSTATUS WINAPI NtQueryInformationProcess(HANDLE,PROCESSINFOCLASS,PVOID,ULONG,PULONG);
955NTSTATUS WINAPI NtQueryInformationThread(HANDLE,THREADINFOCLASS,PVOID,ULONG,PULONG);
956NTSTATUS WINAPI NtQueryInformationToken(HANDLE,DWORD,LPVOID,DWORD,LPDWORD);
Alexandre Julliard9b5c3f92002-10-25 19:14:29 +0000957NTSTATUS WINAPI NtQueryKey(HKEY,KEY_INFORMATION_CLASS,void *,DWORD,DWORD *);
958NTSTATUS WINAPI NtQueryMultipleValueKey(HKEY,PVALENTW,ULONG,PVOID,ULONG,PULONG);
Eric Pouechb3504382003-05-20 19:20:42 +0000959NTSTATUS WINAPI NtQueryObject(HANDLE, OBJECT_INFORMATION_CLASS, PVOID, ULONG, PULONG);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000960NTSTATUS WINAPI NtQuerySecurityObject(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,ULONG,PULONG);
961NTSTATUS WINAPI NtQuerySystemInformation(SYSTEM_INFORMATION_CLASS,PVOID,ULONG,PULONG);
962NTSTATUS WINAPI NtQuerySystemTime(PLARGE_INTEGER);
Alexandre Julliard9b5c3f92002-10-25 19:14:29 +0000963NTSTATUS WINAPI NtQueryValueKey(HKEY,const UNICODE_STRING *,KEY_VALUE_INFORMATION_CLASS,void *,DWORD,DWORD *);
Alexandre Julliard341b7dc2002-09-17 18:54:42 +0000964NTSTATUS WINAPI NtQueryVirtualMemory(HANDLE,LPCVOID,MEMORY_INFORMATION_CLASS,PVOID,ULONG,ULONG*);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000965void WINAPI NtRaiseException(PEXCEPTION_RECORD,PCONTEXT,BOOL);
966NTSTATUS WINAPI NtReadFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,PVOID,ULONG,PLARGE_INTEGER,PULONG);
967NTSTATUS WINAPI NtReleaseSemaphore(HANDLE,ULONG,PULONG);
Alexandre Julliard088bcf92003-04-04 22:26:34 +0000968NTSTATUS WINAPI NtReplaceKey(POBJECT_ATTRIBUTES,HKEY,POBJECT_ATTRIBUTES);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000969NTSTATUS WINAPI NtResetEvent(HANDLE,PULONG);
Alexandre Julliard9b5c3f92002-10-25 19:14:29 +0000970NTSTATUS WINAPI NtRestoreKey(HKEY,HANDLE,ULONG);
Alexandre Julliard088bcf92003-04-04 22:26:34 +0000971NTSTATUS WINAPI NtResumeThread(HANDLE,PULONG);
Alexandre Julliard9b5c3f92002-10-25 19:14:29 +0000972NTSTATUS WINAPI NtSaveKey(HKEY,HANDLE);
Alexandre Julliard088bcf92003-04-04 22:26:34 +0000973NTSTATUS WINAPI NtSetContextThread(HANDLE,const CONTEXT*);
Alexandre Julliard86666c52003-04-29 23:00:48 +0000974NTSTATUS WINAPI NtSetDefaultLocale(BOOLEAN,LCID);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000975NTSTATUS WINAPI NtSetEvent(HANDLE,PULONG);
Alexandre Julliard9b5c3f92002-10-25 19:14:29 +0000976NTSTATUS WINAPI NtSetInformationKey(HKEY,const int,PVOID,ULONG);
Eric Pouechb3504382003-05-20 19:20:42 +0000977NTSTATUS WINAPI NtSetInformationObject(HANDLE, OBJECT_INFORMATION_CLASS, PVOID, ULONG);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000978NTSTATUS WINAPI NtSetSecurityObject(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR);
György 'Nog' Jeney6f3015b2002-11-25 01:12:39 +0000979NTSTATUS WINAPI NtSetSystemTime(const LARGE_INTEGER*,LARGE_INTEGER*);
Eric Pouech4c591d42003-05-20 04:00:42 +0000980NTSTATUS WINAPI NtSetTimer(HANDLE, const LARGE_INTEGER*, PTIMERAPCROUTINE, PVOID, BOOLEAN, ULONG, BOOLEAN*);
Alexandre Julliard9b5c3f92002-10-25 19:14:29 +0000981NTSTATUS WINAPI NtSetValueKey(HKEY,const UNICODE_STRING *,ULONG,ULONG,const void *,ULONG);
Alexandre Julliard088bcf92003-04-04 22:26:34 +0000982NTSTATUS WINAPI NtSuspendThread(HANDLE,PULONG);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000983NTSTATUS WINAPI NtTerminateProcess(HANDLE,LONG);
984NTSTATUS WINAPI NtTerminateThread(HANDLE,LONG);
Alexandre Julliard9b5c3f92002-10-25 19:14:29 +0000985NTSTATUS WINAPI NtUnloadKey(HKEY);
Alexandre Julliard341b7dc2002-09-17 18:54:42 +0000986NTSTATUS WINAPI NtUnlockVirtualMemory(HANDLE,PVOID*,ULONG*,ULONG);
987NTSTATUS WINAPI NtUnmapViewOfSection(HANDLE,PVOID);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000988NTSTATUS WINAPI NtWaitForSingleObject(HANDLE,BOOLEAN,PLARGE_INTEGER);
Alexandre Julliardfbef57c2003-03-31 01:37:04 +0000989NTSTATUS WINAPI NtWaitForMultipleObjects(ULONG,const HANDLE*,BOOLEAN,BOOLEAN,PLARGE_INTEGER);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000990
991void WINAPI RtlAcquirePebLock(void);
992BYTE WINAPI RtlAcquireResourceExclusive(LPRTL_RWLOCK,BYTE);
993BYTE WINAPI RtlAcquireResourceShared(LPRTL_RWLOCK,BYTE);
994NTSTATUS WINAPI RtlAddAce(PACL,DWORD,DWORD,PACE_HEADER,DWORD);
Robert Shearmanf0025e22003-05-01 00:29:26 +0000995NTSTATUS WINAPI RtlAddAccessAllowedAce(PACL,DWORD,DWORD,PSID);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000996BOOL WINAPI RtlAddAccessAllowedAceEx(PACL,DWORD,DWORD,DWORD,PSID);
Robert Shearmanf0025e22003-05-01 00:29:26 +0000997NTSTATUS WINAPI RtlAddAccessDeniedAce(PACL,DWORD,DWORD,PSID);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000998DWORD WINAPI RtlAdjustPrivilege(DWORD,DWORD,DWORD,DWORD);
999BOOLEAN WINAPI RtlAllocateAndInitializeSid(PSID_IDENTIFIER_AUTHORITY,BYTE,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,PSID *);
1000PVOID WINAPI RtlAllocateHeap(HANDLE,ULONG,ULONG);
1001DWORD WINAPI RtlAnsiStringToUnicodeSize(const STRING *);
1002NTSTATUS WINAPI RtlAnsiStringToUnicodeString(PUNICODE_STRING,PCANSI_STRING,BOOLEAN);
1003NTSTATUS WINAPI RtlAppendAsciizToString(STRING *,LPCSTR);
1004NTSTATUS WINAPI RtlAppendStringToString(STRING *,const STRING *);
1005NTSTATUS WINAPI RtlAppendUnicodeStringToString(UNICODE_STRING *,const UNICODE_STRING *);
1006NTSTATUS WINAPI RtlAppendUnicodeToString(UNICODE_STRING *,LPCWSTR);
Thomas Mertes0ce48262003-04-08 00:55:36 +00001007BOOLEAN WINAPI RtlAreAllAccessesGranted(ACCESS_MASK,ACCESS_MASK);
1008BOOLEAN WINAPI RtlAreAnyAccessesGranted(ACCESS_MASK,ACCESS_MASK);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +00001009BOOLEAN WINAPI RtlAreBitsSet(PCRTL_BITMAP,ULONG,ULONG);
1010BOOLEAN WINAPI RtlAreBitsClear(PCRTL_BITMAP,ULONG,ULONG);
1011
1012NTSTATUS WINAPI RtlCharToInteger(PCSZ,ULONG,PULONG);
1013void WINAPI RtlClearAllBits(PRTL_BITMAP);
1014void WINAPI RtlClearBits(PRTL_BITMAP,ULONG,ULONG);
1015ULONG WINAPI RtlCompactHeap(HANDLE,ULONG);
1016LONG WINAPI RtlCompareString(const STRING*,const STRING*,BOOLEAN);
1017LONG WINAPI RtlCompareUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
Jon Griffithsccf2f612003-03-18 20:12:07 +00001018DWORD WINAPI RtlComputeCrc32(DWORD,PBYTE,INT);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +00001019NTSTATUS WINAPI RtlConvertSidToUnicodeString(PUNICODE_STRING,PSID,BOOLEAN);
1020LONGLONG WINAPI RtlConvertLongToLargeInteger(LONG);
1021ULONGLONG WINAPI RtlConvertUlongToLargeInteger(ULONG);
Thomas Mertes0ce48262003-04-08 00:55:36 +00001022void WINAPI RtlCopyLuid(PLUID,const LUID*);
1023void WINAPI RtlCopyLuidAndAttributesArray(ULONG,const LUID_AND_ATTRIBUTES*,PLUID_AND_ATTRIBUTES);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +00001024DWORD WINAPI RtlCopySid(DWORD,PSID,PSID);
1025void WINAPI RtlCopyString(STRING*,const STRING*);
1026void WINAPI RtlCopyUnicodeString(UNICODE_STRING*,const UNICODE_STRING*);
1027NTSTATUS WINAPI RtlCreateAcl(PACL,DWORD,DWORD);
Eric Pouech2d758c62003-05-08 03:47:00 +00001028NTSTATUS WINAPI RtlCreateEnvironment(BOOLEAN, PWSTR*);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +00001029HANDLE WINAPI RtlCreateHeap(ULONG,PVOID,ULONG,ULONG,PVOID,PRTL_HEAP_DEFINITION);
1030NTSTATUS WINAPI RtlCreateSecurityDescriptor(PSECURITY_DESCRIPTOR,DWORD);
1031BOOLEAN WINAPI RtlCreateUnicodeString(PUNICODE_STRING,LPCWSTR);
1032BOOLEAN WINAPI RtlCreateUnicodeStringFromAsciiz(PUNICODE_STRING,LPCSTR);
1033
1034NTSTATUS WINAPI RtlDeleteCriticalSection(RTL_CRITICAL_SECTION *);
1035void WINAPI RtlDeleteResource(LPRTL_RWLOCK);
1036DWORD WINAPI RtlDeleteSecurityObject(DWORD);
Eric Pouech2d758c62003-05-08 03:47:00 +00001037NTSTATUS WINAPI RtlDestroyEnvironment(PWSTR);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +00001038HANDLE WINAPI RtlDestroyHeap(HANDLE);
Alexandre Julliardaa94a5a2003-04-12 00:10:13 +00001039DOS_PATHNAME_TYPE WINAPI RtlDetermineDosPathNameType_U(PCWSTR);
Eric Pouech2e5cdf92003-06-16 01:24:30 +00001040BOOLEAN WINAPI RtlDoesFileExists_U(LPCWSTR);
Eric Pouech35d5d062003-05-15 04:20:42 +00001041BOOLEAN WINAPI RtlDosPathNameToNtPathName_U(LPWSTR,PUNICODE_STRING,PWSTR*,CURDIR*);
Eric Pouech2e5cdf92003-06-16 01:24:30 +00001042ULONG WINAPI RtlDosSearchPath_U(LPCWSTR, LPCWSTR, LPCWSTR, ULONG, LPWSTR, LPWSTR*);
Jon Griffithsccf2f612003-03-18 20:12:07 +00001043WCHAR WINAPI RtlDowncaseUnicodeChar(WCHAR);
Thomas Mertesc83aa0d2003-03-22 00:20:58 +00001044NTSTATUS WINAPI RtlDowncaseUnicodeString(UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +00001045void WINAPI RtlDumpResource(LPRTL_RWLOCK);
Thomas Mertesd628d122003-05-06 18:27:40 +00001046NTSTATUS WINAPI RtlDuplicateUnicodeString(int,const UNICODE_STRING*,UNICODE_STRING*);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +00001047
1048LONGLONG WINAPI RtlEnlargedIntegerMultiply(INT,INT);
1049ULONGLONG WINAPI RtlEnlargedUnsignedMultiply(UINT,UINT);
1050UINT WINAPI RtlEnlargedUnsignedDivide(ULONGLONG,UINT,UINT *);
1051NTSTATUS WINAPI RtlEnterCriticalSection(RTL_CRITICAL_SECTION *);
1052void WINAPI RtlEraseUnicodeString(UNICODE_STRING*);
Jon Griffithsccf2f612003-03-18 20:12:07 +00001053NTSTATUS WINAPI RtlEqualComputerName(const UNICODE_STRING*,const UNICODE_STRING*);
1054NTSTATUS WINAPI RtlEqualDomainName(const UNICODE_STRING*,const UNICODE_STRING*);
Thomas Mertes0ce48262003-04-08 00:55:36 +00001055BOOLEAN WINAPI RtlEqualLuid(const LUID*,const LUID*);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +00001056BOOL WINAPI RtlEqualPrefixSid(PSID,PSID);
1057BOOL WINAPI RtlEqualSid(PSID,PSID);
1058BOOLEAN WINAPI RtlEqualString(const STRING*,const STRING*,BOOLEAN);
1059BOOLEAN WINAPI RtlEqualUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
Eric Pouechb124fa92003-05-13 04:45:50 +00001060NTSTATUS WINAPI RtlExpandEnvironmentStrings_U(PWSTR, const UNICODE_STRING*, UNICODE_STRING*, ULONG*);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +00001061LONGLONG WINAPI RtlExtendedMagicDivide(LONGLONG,LONGLONG,INT);
1062LONGLONG WINAPI RtlExtendedIntegerMultiply(LONGLONG,INT);
1063LONGLONG WINAPI RtlExtendedLargeIntegerDivide(LONGLONG,INT,INT *);
1064
Thomas Mertesd628d122003-05-06 18:27:40 +00001065NTSTATUS WINAPI RtlFindCharInUnicodeString(int,const UNICODE_STRING*,const UNICODE_STRING*,USHORT*);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +00001066ULONG WINAPI RtlFindClearBits(PCRTL_BITMAP,ULONG,ULONG);
1067ULONG WINAPI RtlFindClearBitsAndSet(PRTL_BITMAP,ULONG,ULONG);
1068ULONG WINAPI RtlFindClearRuns(PCRTL_BITMAP,PRTL_BITMAP_RUN,ULONG,BOOLEAN);
1069ULONG WINAPI RtlFindLastBackwardRunSet(PCRTL_BITMAP,ULONG,PULONG);
1070ULONG WINAPI RtlFindLastBackwardRunClear(PCRTL_BITMAP,ULONG,PULONG);
1071CCHAR WINAPI RtlFindLeastSignificantBit(ULONGLONG);
1072ULONG WINAPI RtlFindLongestRunSet(PCRTL_BITMAP,PULONG);
1073ULONG WINAPI RtlFindLongestRunClear(PCRTL_BITMAP,PULONG);
Alexandre Julliard86666c52003-04-29 23:00:48 +00001074NTSTATUS WINAPI RtlFindMessage(HMODULE,ULONG,ULONG,ULONG,const MESSAGE_RESOURCE_ENTRY**);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +00001075CCHAR WINAPI RtlFindMostSignificantBit(ULONGLONG);
1076ULONG WINAPI RtlFindNextForwardRunSet(PCRTL_BITMAP,ULONG,PULONG);
1077ULONG WINAPI RtlFindNextForwardRunClear(PCRTL_BITMAP,ULONG,PULONG);
1078ULONG WINAPI RtlFindSetBits(PCRTL_BITMAP,ULONG,ULONG);
1079ULONG WINAPI RtlFindSetBitsAndClear(PRTL_BITMAP,ULONG,ULONG);
1080ULONG WINAPI RtlFindSetRuns(PCRTL_BITMAP,PRTL_BITMAP_RUN,ULONG,BOOLEAN);
1081BOOLEAN WINAPI RtlFirstFreeAce(PACL,PACE_HEADER *);
1082NTSTATUS WINAPI RtlFormatCurrentUserKeyPath(PUNICODE_STRING);
1083void WINAPI RtlFreeAnsiString(PANSI_STRING);
1084BOOLEAN WINAPI RtlFreeHeap(HANDLE,ULONG,PVOID);
1085void WINAPI RtlFreeOemString(POEM_STRING);
1086DWORD WINAPI RtlFreeSid(PSID);
1087void WINAPI RtlFreeUnicodeString(PUNICODE_STRING);
1088
1089DWORD WINAPI RtlGetAce(PACL,DWORD,LPVOID *);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +00001090NTSTATUS WINAPI RtlGetControlSecurityDescriptor(PSECURITY_DESCRIPTOR, PSECURITY_DESCRIPTOR_CONTROL,LPDWORD);
Eric Pouech35d5d062003-05-15 04:20:42 +00001091NTSTATUS WINAPI RtlGetCurrentDirectory_U(ULONG, LPWSTR);
Alexandre Julliardaa94a5a2003-04-12 00:10:13 +00001092NTSTATUS WINAPI RtlGetDaclSecurityDescriptor(PSECURITY_DESCRIPTOR,PBOOLEAN,PACL *,PBOOLEAN);
1093ULONG WINAPI RtlGetFullPathName_U(PCWSTR,ULONG,PWSTR,PWSTR*);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +00001094NTSTATUS WINAPI RtlGetGroupSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID *,PBOOLEAN);
Eric Pouech35d5d062003-05-15 04:20:42 +00001095DWORD WINAPI RtlGetLongestNtPathLength(void);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +00001096BOOLEAN WINAPI RtlGetNtProductType(LPDWORD);
1097NTSTATUS WINAPI RtlGetOwnerSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID *,PBOOLEAN);
1098ULONG WINAPI RtlGetProcessHeaps(ULONG,HANDLE*);
1099NTSTATUS WINAPI RtlGetSaclSecurityDescriptor(PSECURITY_DESCRIPTOR,PBOOLEAN,PACL *,PBOOLEAN);
1100
1101PSID_IDENTIFIER_AUTHORITY WINAPI RtlIdentifierAuthoritySid(PSID);
1102PVOID WINAPI RtlImageDirectoryEntryToData(HMODULE,BOOL,WORD,ULONG *);
1103PIMAGE_NT_HEADERS WINAPI RtlImageNtHeader(HMODULE);
1104PIMAGE_SECTION_HEADER WINAPI RtlImageRvaToSection(const IMAGE_NT_HEADERS *,HMODULE,DWORD);
1105PVOID WINAPI RtlImageRvaToVa(const IMAGE_NT_HEADERS *,HMODULE,DWORD,IMAGE_SECTION_HEADER **);
1106BOOL WINAPI RtlImpersonateSelf(SECURITY_IMPERSONATION_LEVEL);
1107void WINAPI RtlInitString(PSTRING,PCSZ);
1108void WINAPI RtlInitAnsiString(PANSI_STRING,PCSZ);
1109void WINAPI RtlInitUnicodeString(PUNICODE_STRING,PCWSTR);
Thomas Mertesd628d122003-05-06 18:27:40 +00001110NTSTATUS WINAPI RtlInitUnicodeStringEx(PUNICODE_STRING,PCWSTR);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +00001111NTSTATUS WINAPI RtlInitializeCriticalSection(RTL_CRITICAL_SECTION *);
1112NTSTATUS WINAPI RtlInitializeCriticalSectionAndSpinCount(RTL_CRITICAL_SECTION *,DWORD);
1113void WINAPI RtlInitializeBitMap(PRTL_BITMAP,LPBYTE,ULONG);
1114void WINAPI RtlInitializeResource(LPRTL_RWLOCK);
1115BOOL WINAPI RtlInitializeSid(PSID,PSID_IDENTIFIER_AUTHORITY,BYTE);
1116
Thomas Mertesf4757bb2003-02-19 03:39:46 +00001117NTSTATUS WINAPI RtlInt64ToUnicodeString(ULONGLONG,ULONG,UNICODE_STRING *);
1118NTSTATUS WINAPI RtlIntegerToChar(ULONG,ULONG,ULONG,PCHAR);
1119NTSTATUS WINAPI RtlIntegerToUnicodeString(ULONG,ULONG,UNICODE_STRING *);
Alexandre Julliardaa94a5a2003-04-12 00:10:13 +00001120ULONG WINAPI RtlIsDosDeviceName_U(PCWSTR);
Alexandre Julliardd6da1f32003-04-16 23:15:29 +00001121BOOLEAN WINAPI RtlIsNameLegalDOS8Dot3(const UNICODE_STRING*,POEM_STRING,PBOOLEAN);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +00001122DWORD WINAPI RtlIsTextUnicode(LPVOID,DWORD,DWORD *);
1123
1124LONGLONG WINAPI RtlLargeIntegerAdd(LONGLONG,LONGLONG);
1125LONGLONG WINAPI RtlLargeIntegerArithmeticShift(LONGLONG,INT);
1126ULONGLONG WINAPI RtlLargeIntegerDivide( ULONGLONG,ULONGLONG,ULONGLONG *);
1127LONGLONG WINAPI RtlLargeIntegerNegate(LONGLONG);
1128LONGLONG WINAPI RtlLargeIntegerShiftLeft(LONGLONG,INT);
1129LONGLONG WINAPI RtlLargeIntegerShiftRight(LONGLONG,INT);
1130LONGLONG WINAPI RtlLargeIntegerSubtract(LONGLONG,LONGLONG);
Thomas Mertesf4757bb2003-02-19 03:39:46 +00001131NTSTATUS WINAPI RtlLargeIntegerToChar(const ULONGLONG *,ULONG,ULONG,PCHAR);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +00001132NTSTATUS WINAPI RtlLeaveCriticalSection(RTL_CRITICAL_SECTION *);
1133DWORD WINAPI RtlLengthRequiredSid(DWORD);
1134ULONG WINAPI RtlLengthSecurityDescriptor(PSECURITY_DESCRIPTOR);
1135DWORD WINAPI RtlLengthSid(PSID);
György 'Nog' Jeney4d6ba252002-12-11 00:19:56 +00001136NTSTATUS WINAPI RtlLocalTimeToSystemTime(const LARGE_INTEGER*,PLARGE_INTEGER);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +00001137BOOLEAN WINAPI RtlLockHeap(HANDLE);
1138
1139NTSTATUS WINAPI RtlMakeSelfRelativeSD(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,LPDWORD);
Thomas Mertes0ce48262003-04-08 00:55:36 +00001140void WINAPI RtlMapGenericMask(PACCESS_MASK,const GENERIC_MAPPING*);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +00001141NTSTATUS WINAPI RtlMultiByteToUnicodeN(LPWSTR,DWORD,LPDWORD,LPCSTR,DWORD);
1142NTSTATUS WINAPI RtlMultiByteToUnicodeSize(DWORD*,LPCSTR,UINT);
1143
1144DWORD WINAPI RtlNewSecurityObject(DWORD,DWORD,DWORD,DWORD,DWORD,DWORD);
1145LPVOID WINAPI RtlNormalizeProcessParams(LPVOID);
1146ULONG WINAPI RtlNtStatusToDosError(NTSTATUS);
1147ULONG WINAPI RtlNumberOfSetBits(PCRTL_BITMAP);
1148ULONG WINAPI RtlNumberOfClearBits(PCRTL_BITMAP);
1149
1150UINT WINAPI RtlOemStringToUnicodeSize(const STRING*);
1151NTSTATUS WINAPI RtlOemStringToUnicodeString(UNICODE_STRING*,const STRING*,BOOLEAN);
1152NTSTATUS WINAPI RtlOemToUnicodeN(LPWSTR,DWORD,LPDWORD,LPCSTR,DWORD);
Alexandre Julliard9b5c3f92002-10-25 19:14:29 +00001153DWORD WINAPI RtlOpenCurrentUser(ACCESS_MASK,PHKEY);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +00001154
1155BOOLEAN WINAPI RtlPrefixString(const STRING*,const STRING*,BOOLEAN);
1156BOOLEAN WINAPI RtlPrefixUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
1157
Eric Pouech2d758c62003-05-08 03:47:00 +00001158NTSTATUS WINAPI RtlQueryEnvironmentVariable_U(PWSTR,PUNICODE_STRING,PUNICODE_STRING);
György 'Nog' Jeney6f3015b2002-11-25 01:12:39 +00001159NTSTATUS WINAPI RtlQueryTimeZoneInformation(LPTIME_ZONE_INFORMATION);
Thomas Mertes0ce48262003-04-08 00:55:36 +00001160
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +00001161void WINAPI RtlRaiseException(PEXCEPTION_RECORD);
1162void WINAPI RtlRaiseStatus(NTSTATUS);
Thomas Mertes0ce48262003-04-08 00:55:36 +00001163ULONG WINAPI RtlRandom(PULONG);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +00001164PVOID WINAPI RtlReAllocateHeap(HANDLE,ULONG,PVOID,ULONG);
1165void WINAPI RtlReleasePebLock(void);
1166void WINAPI RtlReleaseResource(LPRTL_RWLOCK);
1167
1168void WINAPI RtlSecondsSince1970ToTime(DWORD,LARGE_INTEGER *);
1169void WINAPI RtlSecondsSince1980ToTime(DWORD,LARGE_INTEGER *);
1170void WINAPI RtlSetAllBits(PRTL_BITMAP);
1171void WINAPI RtlSetBits(PRTL_BITMAP,ULONG,ULONG);
Eric Pouech35d5d062003-05-15 04:20:42 +00001172NTSTATUS WINAPI RtlSetCurrentDirectory_U(const UNICODE_STRING*);
Eric Pouech2d758c62003-05-08 03:47:00 +00001173void WINAPI RtlSetCurrentEnvironment(PWSTR, PWSTR*);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +00001174NTSTATUS WINAPI RtlSetDaclSecurityDescriptor(PSECURITY_DESCRIPTOR,BOOLEAN,PACL,BOOLEAN);
Eric Pouech2d758c62003-05-08 03:47:00 +00001175NTSTATUS WINAPI RtlSetEnvironmentVariable(PWSTR*,PUNICODE_STRING,PUNICODE_STRING);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +00001176NTSTATUS WINAPI RtlSetOwnerSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID,BOOLEAN);
1177NTSTATUS WINAPI RtlSetGroupSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID,BOOLEAN);
1178NTSTATUS WINAPI RtlSetSaclSecurityDescriptor(PSECURITY_DESCRIPTOR,BOOLEAN,PACL,BOOLEAN);
György 'Nog' Jeney6f3015b2002-11-25 01:12:39 +00001179NTSTATUS WINAPI RtlSetTimeZoneInformation(const TIME_ZONE_INFORMATION*);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +00001180ULONG WINAPI RtlSizeHeap(HANDLE,ULONG,PVOID);
1181LPDWORD WINAPI RtlSubAuthoritySid(PSID,DWORD);
1182LPBYTE WINAPI RtlSubAuthorityCountSid(PSID);
György 'Nog' Jeney4d6ba252002-12-11 00:19:56 +00001183NTSTATUS WINAPI RtlSystemTimeToLocalTime(const LARGE_INTEGER*,PLARGE_INTEGER);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +00001184
György 'Nog' Jeney6f3015b2002-11-25 01:12:39 +00001185void WINAPI RtlTimeToTimeFields(const LARGE_INTEGER*,PTIME_FIELDS);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +00001186BOOLEAN WINAPI RtlTimeFieldsToTime(PTIME_FIELDS,PLARGE_INTEGER);
Alexandre Julliarda16ed902002-12-18 02:31:33 +00001187void WINAPI RtlTimeToElapsedTimeFields(const LARGE_INTEGER *,PTIME_FIELDS);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +00001188BOOLEAN WINAPI RtlTimeToSecondsSince1970(const LARGE_INTEGER *,PULONG);
1189BOOLEAN WINAPI RtlTimeToSecondsSince1980(const LARGE_INTEGER *,LPDWORD);
1190BOOL WINAPI RtlTryEnterCriticalSection(RTL_CRITICAL_SECTION *);
1191
Alexandre Julliard6da4c272003-03-19 00:09:57 +00001192ULONGLONG __cdecl RtlUlonglongByteSwap(ULONGLONG);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +00001193DWORD WINAPI RtlUnicodeStringToAnsiSize(const UNICODE_STRING*);
1194NTSTATUS WINAPI RtlUnicodeStringToAnsiString(PANSI_STRING,PCUNICODE_STRING,BOOLEAN);
Thomas Mertesf4757bb2003-02-19 03:39:46 +00001195NTSTATUS WINAPI RtlUnicodeStringToInteger(const UNICODE_STRING *,ULONG,ULONG *);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +00001196DWORD WINAPI RtlUnicodeStringToOemSize(const UNICODE_STRING*);
1197NTSTATUS WINAPI RtlUnicodeStringToOemString(POEM_STRING,PCUNICODE_STRING,BOOLEAN);
1198NTSTATUS WINAPI RtlUnicodeToMultiByteN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
1199NTSTATUS WINAPI RtlUnicodeToMultiByteSize(PULONG,PCWSTR,ULONG);
1200NTSTATUS WINAPI RtlUnicodeToOemN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
1201ULONG WINAPI RtlUniform(PULONG);
1202BOOLEAN WINAPI RtlUnlockHeap(HANDLE);
1203void WINAPI RtlUnwind(PVOID,PVOID,PEXCEPTION_RECORD,PVOID);
1204#ifdef __ia64__
1205void WINAPI RtlUnwind2(FRAME_POINTERS,PVOID,PEXCEPTION_RECORD,PVOID,PCONTEXT);
1206void WINAPI RtlUnwindEx(FRAME_POINTERS,PVOID,PEXCEPTION_RECORD,PVOID,PCONTEXT,PUNWIND_HISTORY_TABLE);
1207#endif
Thomas Mertesf4757bb2003-02-19 03:39:46 +00001208WCHAR WINAPI RtlUpcaseUnicodeChar(WCHAR);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +00001209NTSTATUS WINAPI RtlUpcaseUnicodeString(UNICODE_STRING*,const UNICODE_STRING *,BOOLEAN);
1210NTSTATUS WINAPI RtlUpcaseUnicodeStringToAnsiString(STRING*,const UNICODE_STRING*,BOOLEAN);
Alexandre Julliardd6da1f32003-04-16 23:15:29 +00001211NTSTATUS WINAPI RtlUpcaseUnicodeStringToCountedOemString(STRING*,const UNICODE_STRING*,BOOLEAN);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +00001212NTSTATUS WINAPI RtlUpcaseUnicodeStringToOemString(STRING*,const UNICODE_STRING*,BOOLEAN);
1213NTSTATUS WINAPI RtlUpcaseUnicodeToMultiByteN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
1214NTSTATUS WINAPI RtlUpcaseUnicodeToOemN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
Thomas Mertesf4757bb2003-02-19 03:39:46 +00001215CHAR WINAPI RtlUpperChar(CHAR);
1216void WINAPI RtlUpperString(STRING *,const STRING *);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +00001217
1218NTSTATUS WINAPI RtlValidSecurityDescriptor(PSECURITY_DESCRIPTOR);
Robert Shearmanf0025e22003-05-01 00:29:26 +00001219BOOLEAN WINAPI RtlValidAcl(PACL);
1220BOOLEAN WINAPI RtlValidSid(PSID);
Francois Gougetbba4bb12002-09-17 01:35:09 +00001221BOOLEAN WINAPI RtlValidateHeap(HANDLE,ULONG,LPCVOID);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +00001222
1223NTSTATUS WINAPI RtlWalkHeap(HANDLE,PVOID);
1224
1225NTSTATUS WINAPI RtlpWaitForCriticalSection(RTL_CRITICAL_SECTION *);
1226NTSTATUS WINAPI RtlpUnWaitCriticalSection(RTL_CRITICAL_SECTION *);
1227
1228/***********************************************************************
1229 * Inline functions
1230 */
1231
1232#define InitializeObjectAttributes(p,n,a,r,s) \
1233 do { \
1234 (p)->Length = sizeof(OBJECT_ATTRIBUTES); \
1235 (p)->RootDirectory = r; \
1236 (p)->Attributes = a; \
1237 (p)->ObjectName = n; \
1238 (p)->SecurityDescriptor = s; \
1239 (p)->SecurityQualityOfService = NULL; \
1240 } while (0)
1241
1242#define NtCurrentProcess() ((HANDLE)-1)
1243
1244#define RtlFillMemory(Destination,Length,Fill) memset((Destination),(Fill),(Length))
1245#define RtlMoveMemory(Destination,Source,Length) memmove((Destination),(Source),(Length))
1246#define RtlStoreUlong(p,v) do { ULONG _v = (v); memcpy((p), &_v, sizeof(_v)); } while (0)
1247#define RtlStoreUlonglong(p,v) do { ULONGLONG _v = (v); memcpy((p), &_v, sizeof(_v)); } while (0)
1248#define RtlRetrieveUlong(p,s) memcpy((p), (s), sizeof(ULONG))
1249#define RtlRetrieveUlonglong(p,s) memcpy((p), (s), sizeof(ULONGLONG))
1250#define RtlZeroMemory(Destination,Length) memset((Destination),0,(Length))
1251
1252inline static BOOLEAN RtlCheckBit(PCRTL_BITMAP lpBits, ULONG ulBit)
1253{
1254 if (lpBits && ulBit < lpBits->SizeOfBitMap &&
1255 lpBits->BitMapBuffer[ulBit >> 3] & (1 << (ulBit & 7)))
1256 return TRUE;
1257 return FALSE;
1258}
1259
1260#define RtlClearAllBits(p) \
1261 do { \
1262 PRTL_BITMAP _p = (p); \
1263 memset(_p->BitMapBuffer,0,((_p->SizeOfBitMap + 31) & 0xffffffe0) >> 3); \
1264 } while (0)
1265
1266#define RtlInitializeBitMap(p,b,s) \
1267 do { \
1268 PRTL_BITMAP _p = (p); \
1269 _p->SizeOfBitMap = (s); \
1270 _p->BitMapBuffer = (b); \
1271 } while (0)
1272
1273#define RtlSetAllBits(p) \
1274 do { \
1275 PRTL_BITMAP _p = (p); \
1276 memset(_p->BitMapBuffer,0xff,((_p->SizeOfBitMap + 31) & 0xffffffe0) >> 3); \
1277 } while (0)
1278
Alexandre Julliard6da4c272003-03-19 00:09:57 +00001279/* These are implemented as __fastcall, so we can't let Winelib apps link with them */
1280inline static USHORT RtlUshortByteSwap(USHORT s)
1281{
1282 return (s >> 8) | (s << 8);
1283}
1284inline static ULONG RtlUlongByteSwap(ULONG i)
1285{
1286#if defined(__i386__) && defined(__GNUC__)
1287 ULONG ret;
1288 __asm__("bswap %0" : "=r" (ret) : "0" (i) );
1289 return ret;
1290#else
1291 return ((ULONG)RtlUshortByteSwap(i) << 16) | RtlUshortByteSwap(i >> 16);
1292#endif
1293}
1294
Eric Pouech7d609642003-03-04 04:36:56 +00001295/*************************************************************************
1296 * Loader functions and structures.
1297 *
1298 * Those are not part of standard Winternl.h
1299 */
1300typedef struct _LDR_MODULE
1301{
1302 LIST_ENTRY InLoadOrderModuleList;
1303 LIST_ENTRY InMemoryOrderModuleList;
1304 LIST_ENTRY InInitializationOrderModuleList;
1305 void* BaseAddress;
Eric Pouech32872b12003-03-14 05:01:20 +00001306 void* EntryPoint;
Eric Pouech7d609642003-03-04 04:36:56 +00001307 ULONG SizeOfImage;
1308 UNICODE_STRING FullDllName;
1309 UNICODE_STRING BaseDllName;
1310 ULONG Flags;
1311 SHORT LoadCount;
1312 SHORT TlsIndex;
1313 HANDLE SectionHandle;
1314 ULONG CheckSum;
1315 ULONG TimeDateStamp;
1316} LDR_MODULE, *PLDR_MODULE;
1317
Eric Pouech19e050e2003-03-20 23:40:08 +00001318/* those defines are (some of the) regular LDR_MODULE.Flags values */
1319#define LDR_IMAGE_IS_DLL 0x00000004
1320#define LDR_LOAD_IN_PROGRESS 0x00001000
1321#define LDR_UNLOAD_IN_PROGRESS 0x00002000
1322#define LDR_NO_DLL_CALLS 0x00040000
1323#define LDR_PROCESS_ATTACHED 0x00080000
1324#define LDR_MODULE_REBASED 0x00200000
1325
1326/* these ones is Wine specific */
1327#define LDR_DONT_RESOLVE_REFS 0x40000000
1328#define LDR_WINE_INTERNAL 0x80000000
1329
Eric Pouech7d609642003-03-04 04:36:56 +00001330/* FIXME: to be checked */
1331#define MAXIMUM_FILENAME_LENGTH 256
1332
1333typedef struct _SYSTEM_MODULE
1334{
1335 ULONG Reserved1;
1336 ULONG Reserved2;
1337 PVOID ImageBaseAddress;
1338 ULONG ImageSize;
1339 ULONG Flags;
1340 WORD Id;
1341 WORD Rank;
1342 WORD Unknown;
1343 WORD NameOffset;
1344 BYTE Name[MAXIMUM_FILENAME_LENGTH];
1345} SYSTEM_MODULE, *PSYSTEM_MODULE;
1346
1347typedef struct _SYSTEM_MODULE_INFORMATION
1348{
1349 ULONG ModulesCount;
1350 SYSTEM_MODULE Modules[1]; /* FIXME: should be Modules[0] */
1351} SYSTEM_MODULE_INFORMATION, *PSYSTEM_MODULE_INFORMATION;
1352
Eric Pouech7d609642003-03-04 04:36:56 +00001353NTSTATUS WINAPI LdrDisableThreadCalloutsForDll(HMODULE);
Eric Pouech84d1a8f2003-03-18 18:29:13 +00001354NTSTATUS WINAPI LdrFindEntryForAddress(const void*, PLDR_MODULE*);
Eric Pouech7d609642003-03-04 04:36:56 +00001355NTSTATUS WINAPI LdrGetDllHandle(ULONG, ULONG, PUNICODE_STRING, HMODULE*);
1356NTSTATUS WINAPI LdrGetProcedureAddress(HMODULE, PANSI_STRING, ULONG, void**);
Eric Pouech32872b12003-03-14 05:01:20 +00001357NTSTATUS WINAPI LdrLoadDll(LPCWSTR, DWORD, PUNICODE_STRING, HMODULE*);
Alexandre Julliard500a2f92003-03-20 04:29:21 +00001358NTSTATUS WINAPI LdrLockLoaderLock(ULONG,ULONG*,ULONG*);
Eric Pouech051f8712003-03-21 00:34:36 +00001359NTSTATUS WINAPI LdrQueryProcessModuleInformation(SYSTEM_MODULE_INFORMATION*, ULONG, ULONG*);
Eric Pouech7d609642003-03-04 04:36:56 +00001360NTSTATUS WINAPI LdrUnloadDll(HMODULE);
Alexandre Julliard500a2f92003-03-20 04:29:21 +00001361NTSTATUS WINAPI LdrUnlockLoaderLock(ULONG,ULONG);
Eric Pouech7d609642003-03-04 04:36:56 +00001362
Patrik Stridvalleba96492002-09-10 00:33:34 +00001363#ifdef __cplusplus
1364} /* extern "C" */
1365#endif /* defined(__cplusplus) */
1366
1367#endif /* __WINE_WINTERNAL_H */