blob: 023253787847c68ea90ab3045c84e270aaee2d6f [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
32/***********************************************************************
33 * PEB data structure
34 */
35typedef struct _PEB {
36 BYTE Reserved1[2];
37 BYTE BeingDebugged;
38 BYTE Reserved2[229];
39 PVOID Reserved3[59];
40 ULONG SessionId;
41} PEB, *PPEB;
42
43/***********************************************************************
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +000044 * TEB data structure
Patrik Stridvalleba96492002-09-10 00:33:34 +000045 */
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +000046#if 0
Patrik Stridvalleba96492002-09-10 00:33:34 +000047typedef struct _TEB {
48 BYTE Reserved1[1952];
49 PVOID Reserved2[412];
50 PVOID TlsSlots[64];
51 BYTE Reserved3[8];
52 PVOID Reserved4[26];
53 PVOID ReservedForOle; /* Windows 2000 only */
54 PVOID Reserved5[4];
55 PVOID TlsExpansionSlots;
56} TEB, *PTEB;
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +000057#endif
Patrik Stridvalleba96492002-09-10 00:33:34 +000058
59/**********************************************************************
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +000060 * Fundamental types and data structures
Patrik Stridvalleba96492002-09-10 00:33:34 +000061 */
62
63typedef LONG NTSTATUS;
64
65typedef CONST char *PCSZ;
66
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +000067typedef short CSHORT;
68typedef CSHORT *PCSHORT;
69
Patrik Stridvalleba96492002-09-10 00:33:34 +000070typedef struct _STRING {
71 USHORT Length;
72 USHORT MaximumLength;
73 PCHAR Buffer;
74} STRING, *PSTRING;
75
76typedef STRING ANSI_STRING;
77typedef PSTRING PANSI_STRING;
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +000078typedef const STRING *PCANSI_STRING;
Patrik Stridvalleba96492002-09-10 00:33:34 +000079
80typedef STRING OEM_STRING;
81typedef PSTRING POEM_STRING;
82typedef const STRING *PCOEM_STRING;
83
84typedef struct _UNICODE_STRING {
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +000085 USHORT Length; /* bytes */
86 USHORT MaximumLength; /* bytes */
Patrik Stridvalleba96492002-09-10 00:33:34 +000087 PWSTR Buffer;
88} UNICODE_STRING, *PUNICODE_STRING;
89
90typedef const UNICODE_STRING *PCUNICODE_STRING;
91
Alexandre Julliard088bcf92003-04-04 22:26:34 +000092typedef struct _CLIENT_ID
93{
94 HANDLE UniqueProcess;
95 HANDLE UniqueThread;
96} CLIENT_ID, *PCLIENT_ID;
97
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +000098/***********************************************************************
99 * Enums
100 */
Patrik Stridvalleba96492002-09-10 00:33:34 +0000101
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000102typedef enum _FILE_INFORMATION_CLASS {
103 FileDirectoryInformation = 1,
104 FileFullDirectoryInformation,
105 FileBothDirectoryInformation,
106 FileBasicInformation,
107 FileStandardInformation,
108 FileInternalInformation,
109 FileEaInformation,
110 FileAccessInformation,
111 FileNameInformation,
112 FileRenameInformation,
113 FileLinkInformation,
114 FileNamesInformation,
115 FileDispositionInformation,
116 FilePositionInformation,
117 FileFullEaInformation,
118 FileModeInformation,
119 FileAlignmentInformation,
120 FileAllInformation,
121 FileAllocationInformation,
122 FileEndOfFileInformation,
123 FileAlternateNameInformation,
124 FileStreamInformation,
125 FilePipeInformation,
126 FilePipeLocalInformation,
127 FilePipeRemoteInformation,
128 FileMailslotQueryInformation,
129 FileMailslotSetInformation,
130 FileCompressionInformation,
131 FileObjectIdInformation,
132 FileCompletionInformation,
133 FileMoveClusterInformation,
134 FileQuotaInformation,
135 FileReparsePointInformation,
136 FileNetworkOpenInformation,
137 FileAttributeTagInformation,
138 FileTrackingInformation,
139 FileMaximumInformation
140} FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;
Patrik Stridvalleba96492002-09-10 00:33:34 +0000141
Mike McCormack997e2352002-11-18 19:44:17 +0000142typedef struct _FILE_BASIC_INFORMATION {
143 LARGE_INTEGER CreationTime;
144 LARGE_INTEGER LastAccessTime;
145 LARGE_INTEGER LastWriteTime;
146 LARGE_INTEGER ChangeTime;
147 ULONG FileAttributes;
148} FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION;
149
150typedef struct _FILE_STANDARD_INFORMATION {
151 LARGE_INTEGER AllocationSize;
152 LARGE_INTEGER EndOfFile;
153 ULONG NumberOfLinks;
154 BOOLEAN DeletePending;
155 BOOLEAN Directory;
156} FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION;
157
158typedef struct _FILE_POSITION_INFORMATION {
159 LARGE_INTEGER CurrentByteOffset;
160} FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION;
161
162typedef struct _FILE_ALIGNMENT_INFORMATION {
163 ULONG AlignmentRequirement;
164} FILE_ALIGNMENT_INFORMATION, *PFILE_ALIGNMENT_INFORMATION;
165
166typedef struct _FILE_NETWORK_OPEN_INFORMATION {
167 LARGE_INTEGER CreationTime;
168 LARGE_INTEGER LastAccessTime;
169 LARGE_INTEGER LastWriteTime;
170 LARGE_INTEGER ChangeTime;
171 LARGE_INTEGER AllocationSize;
172 LARGE_INTEGER EndOfFile;
173 ULONG FileAttributes;
174} FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;
175
176typedef struct _FILE_FULL_EA_INFORMATION {
177 ULONG NextEntryOffset;
178 UCHAR Flags;
179 UCHAR EaNameLength;
180 USHORT EaValueLength;
181 CHAR EaName[1];
182} FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION;
183
184typedef struct _FILE_STREAM_INFORMATION
185{
186 ULONG NextEntryOffset;
187 ULONG StreamNameLength;
188 LARGE_INTEGER StreamSize;
189 LARGE_INTEGER StreamAllocationSize;
190 WCHAR StreamName[1];
191} FILE_STREAM_INFORMATION, *PFILE_STREAM_INFORMATION;
192
193struct _FILE_ATTRIBUTE_TAG_INFORMATION
194{
195 ULONG FileAttributes;
196 ULONG ReparseTag;
197} FILE_ATTRIBUTE_TAG_INFORMATION, *PFILE_ATTRIBUTE_TAG_INFORMATION;
198
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000199typedef enum _FSINFOCLASS {
200 FileFsVolumeInformation = 1,
201 FileFsLabelInformation,
202 FileFsSizeInformation,
203 FileFsDeviceInformation,
204 FileFsAttributeInformation,
205 FileFsControlInformation,
206 FileFsFullSizeInformation,
207 FileFsObjectIdInformation,
208 FileFsMaximumInformation
209} FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS;
Patrik Stridvalleba96492002-09-10 00:33:34 +0000210
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000211typedef enum _KEY_INFORMATION_CLASS {
212 KeyBasicInformation,
213 KeyNodeInformation,
214 KeyFullInformation
215} KEY_INFORMATION_CLASS;
216
217typedef enum _KEY_VALUE_INFORMATION_CLASS {
218 KeyValueBasicInformation,
219 KeyValueFullInformation,
220 KeyValuePartialInformation,
221 KeyValueFullInformationAlign64,
222 KeyValuePartialInformationAlign64
223} KEY_VALUE_INFORMATION_CLASS;
224
225typedef enum _OBJECT_INFORMATION_CLASS {
226 DunnoTheConstants1 /* FIXME */
227} OBJECT_INFORMATION_CLASS, *POBJECT_INFORMATION_CLASS;
228
229typedef enum _PROCESSINFOCLASS {
230 ProcessBasicInformation = 0,
231 ProcessQuotaLimits = 1,
232 ProcessIoCounters = 2,
233 ProcessVmCounters = 3,
234 ProcessTimes = 4,
235 ProcessBasePriority = 5,
236 ProcessRaisePriority = 6,
237 ProcessDebugPort = 7,
238 ProcessExceptionPort = 8,
239 ProcessAccessToken = 9,
240 ProcessLdtInformation = 10,
241 ProcessLdtSize = 11,
242 ProcessDefaultHardErrorMode = 12,
243 ProcessIoPortHandlers = 13,
244 ProcessPooledUsageAndLimits = 14,
245 ProcessWorkingSetWatch = 15,
246 ProcessUserModeIOPL = 16,
247 ProcessEnableAlignmentFaultFixup = 17,
248 ProcessPriorityClass = 18,
249 ProcessWx86Information = 19,
250 ProcessHandleCount = 20,
251 ProcessAffinityMask = 21,
252 ProcessPriorityBoost = 22,
253 ProcessDeviceMap = 23,
254 ProcessSessionInformation = 24,
255 ProcessForegroundInformation = 25,
256 ProcessWow64Information = 26,
257 MaxProcessInfoClass
258} PROCESSINFOCLASS;
259
260typedef enum _SECTION_INHERIT {
261 ViewShare = 1,
262 ViewUnmap = 2
263} SECTION_INHERIT;
264
265typedef enum SYSTEM_INFORMATION_CLASS {
266 SystemBasicInformation = 0,
267 Unknown1,
268 SystemPerformanceInformation = 2,
269 SystemTimeOfDayInformation = 3, /* was SystemTimeInformation */
270 Unknown4,
271 SystemProcessInformation = 5,
272 Unknown6,
273 Unknown7,
274 SystemProcessorPerformanceInformation = 8,
275 Unknown9,
276 Unknown10,
277 SystemDriverInformation,
278 Unknown12,
279 Unknown13,
280 Unknown14,
281 Unknown15,
282 SystemHandleList,
283 Unknown17,
284 Unknown18,
285 Unknown19,
286 Unknown20,
287 SystemCacheInformation,
288 Unknown22,
289 SystemInterruptInformation = 23,
290 SystemExceptionInformation = 33,
291 SystemRegistryQuotaInformation = 37,
292 SystemLookasideInformation = 45
293} SYSTEM_INFORMATION_CLASS, *PSYSTEM_INFORMATION_CLASS;
294
295typedef enum _TIMER_TYPE {
296 NotificationTimer,
297 SynchronizationTimer
298} TIMER_TYPE;
299
300typedef enum _THREADINFOCLASS {
301 ThreadBasicInformation,
302 ThreadTimes,
303 ThreadPriority,
304 ThreadBasePriority,
305 ThreadAffinityMask,
306 ThreadImpersonationToken,
307 ThreadDescriptorTableEntry,
308 ThreadEnableAlignmentFaultFixup,
309 ThreadEventPair_Reusable,
310 ThreadQuerySetWin32StartAddress,
311 ThreadZeroTlsCell,
312 ThreadPerformanceCount,
313 ThreadAmILastThread,
314 ThreadIdealProcessor,
315 ThreadPriorityBoost,
316 ThreadSetTlsArrayAddress,
317 ThreadIsIoPending,
318 MaxThreadInfoClass
319} THREADINFOCLASS;
320
321typedef enum _WINSTATIONINFOCLASS {
322 WinStationInformation = 8
323} WINSTATIONINFOCLASS;
Patrik Stridvalleba96492002-09-10 00:33:34 +0000324
Alexandre Julliard341b7dc2002-09-17 18:54:42 +0000325typedef enum
326{
327 MemoryBasicInformation = 0
328} MEMORY_INFORMATION_CLASS;
329
Alexandre Julliardaa94a5a2003-04-12 00:10:13 +0000330/* return type of RtlDetermineDosPathNameType_U (FIXME: not the correct names) */
331typedef enum
332{
333 INVALID_PATH = 0,
334 UNC_PATH, /* "//foo" */
335 ABSOLUTE_DRIVE_PATH, /* "c:/foo" */
336 RELATIVE_DRIVE_PATH, /* "c:foo" */
337 ABSOLUTE_PATH, /* "/foo" */
338 RELATIVE_PATH, /* "foo" */
339 DEVICE_PATH, /* "//./foo" */
340 UNC_DOT_PATH /* "//." */
341} DOS_PATHNAME_TYPE;
342
Patrik Stridvalleba96492002-09-10 00:33:34 +0000343/***********************************************************************
344 * IA64 specific types and data structures
345 */
346
347#ifdef __ia64__
348
349typedef struct _FRAME_POINTERS {
350 ULONGLONG MemoryStackFp;
351 ULONGLONG BackingStoreFp;
352} FRAME_POINTERS, *PFRAME_POINTERS;
353
354#define UNWIND_HISTORY_TABLE_SIZE 12
355
356typedef struct _RUNTIME_FUNCTION {
357 ULONG BeginAddress;
358 ULONG EndAddress;
359 ULONG UnwindInfoAddress;
360} RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;
361
362typedef struct _UNWIND_HISTORY_TABLE_ENTRY {
363 ULONG64 ImageBase;
364 ULONG64 Gp;
365 PRUNTIME_FUNCTION FunctionEntry;
366} UNWIND_HISTORY_TABLE_ENTRY, *PUNWIND_HISTORY_TABLE_ENTRY;
367
368typedef struct _UNWIND_HISTORY_TABLE {
369 ULONG Count;
370 UCHAR Search;
371 ULONG64 LowAddress;
372 ULONG64 HighAddress;
373 UNWIND_HISTORY_TABLE_ENTRY Entry[UNWIND_HISTORY_TABLE_SIZE];
374} UNWIND_HISTORY_TABLE, *PUNWIND_HISTORY_TABLE;
375
376#endif /* defined(__ia64__) */
377
378/***********************************************************************
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000379 * Types and data structures
Patrik Stridvalleba96492002-09-10 00:33:34 +0000380 */
381
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000382/* This is used by NtQuerySystemInformation */
383/* FIXME: Isn't THREAD_INFO and THREADINFO the same structure? */
384typedef struct {
385 FILETIME ftCreationTime;
386 DWORD dwUnknown1;
387 DWORD dwStartAddress;
388 DWORD dwOwningPID;
389 DWORD dwThreadID;
390 DWORD dwCurrentPriority;
391 DWORD dwBasePriority;
392 DWORD dwContextSwitches;
393 DWORD dwThreadState;
394 DWORD dwWaitReason;
395 DWORD dwUnknown2[5];
396} THREADINFO, *PTHREADINFO;
397
398/* FIXME: Isn't THREAD_INFO and THREADINFO the same structure? */
399typedef struct _THREAD_INFO{
400 DWORD Unknown1[6];
401 DWORD ThreadID;
402 DWORD Unknown2[3];
403 DWORD Status;
404 DWORD WaitReason;
405 DWORD Unknown3[4];
406} THREAD_INFO, PTHREAD_INFO;
407
408/***********************************************************************
409 * Types and data structures
410 */
411
412typedef struct _IO_STATUS_BLOCK {
413 union {
414 NTSTATUS Status;
415 PVOID Pointer;
416 } DUMMYUNIONNAME;
417
418 ULONG_PTR Information;
419} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
420
421typedef void (WINAPI * PIO_APC_ROUTINE)(PVOID,PIO_STATUS_BLOCK,ULONG);
422
423typedef struct _KEY_BASIC_INFORMATION {
424 LARGE_INTEGER LastWriteTime;
425 ULONG TitleIndex;
426 ULONG NameLength;
427 WCHAR Name[1];
428} KEY_BASIC_INFORMATION, *PKEY_BASIC_INFORMATION;
429
430typedef struct _KEY_NODE_INFORMATION
431{
432 LARGE_INTEGER LastWriteTime;
433 ULONG TitleIndex;
434 ULONG ClassOffset;
435 ULONG ClassLength;
436 ULONG NameLength;
437 WCHAR Name[1];
438 /* Class[1]; */
439} KEY_NODE_INFORMATION, *PKEY_NODE_INFORMATION;
440
441typedef struct _KEY_FULL_INFORMATION
442{
443 LARGE_INTEGER LastWriteTime;
444 ULONG TitleIndex;
445 ULONG ClassOffset;
446 ULONG ClassLength;
447 ULONG SubKeys;
448 ULONG MaxNameLen;
449 ULONG MaxClassLen;
450 ULONG Values;
451 ULONG MaxValueNameLen;
452 ULONG MaxValueDataLen;
453 WCHAR Class[1];
454} KEY_FULL_INFORMATION, *PKEY_FULL_INFORMATION;
455
456typedef struct _KEY_VALUE_ENTRY
457{
458 PUNICODE_STRING ValueName;
459 ULONG DataLength;
460 ULONG DataOffset;
461 ULONG Type;
462} KEY_VALUE_ENTRY, *PKEY_VALUE_ENTRY;
463
464typedef struct _KEY_VALUE_BASIC_INFORMATION {
465 ULONG TitleIndex;
466 ULONG Type;
467 ULONG NameLength;
468 WCHAR Name[1];
469} KEY_VALUE_BASIC_INFORMATION, *PKEY_VALUE_BASIC_INFORMATION;
470
471typedef struct _KEY_VALUE_FULL_INFORMATION {
472 ULONG TitleIndex;
473 ULONG Type;
474 ULONG DataOffset;
475 ULONG DataLength;
476 ULONG NameLength;
477 WCHAR Name[1];
478} KEY_VALUE_FULL_INFORMATION, *PKEY_VALUE_FULL_INFORMATION;
479
480typedef struct _KEY_VALUE_PARTIAL_INFORMATION {
481 ULONG TitleIndex;
482 ULONG Type;
483 ULONG DataLength;
484 UCHAR Data[1];
485} KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION;
486
487typedef struct _OBJECT_ATTRIBUTES {
488 ULONG Length;
489 HANDLE RootDirectory;
490 PUNICODE_STRING ObjectName;
491 ULONG Attributes;
492 PVOID SecurityDescriptor; /* type SECURITY_DESCRIPTOR */
493 PVOID SecurityQualityOfService; /* type SECURITY_QUALITY_OF_SERVICE */
494} OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;
495
Patrik Stridvalleba96492002-09-10 00:33:34 +0000496typedef struct _PROCESS_BASIC_INFORMATION {
Dimitrie O. Paun8b366812003-01-04 00:52:18 +0000497#ifdef __WINESRC__
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000498 DWORD ExitStatus;
499 DWORD PebBaseAddress;
500 DWORD AffinityMask;
501 DWORD BasePriority;
502 ULONG UniqueProcessId;
503 ULONG InheritedFromUniqueProcessId;
504#else
Patrik Stridvalleba96492002-09-10 00:33:34 +0000505 PVOID Reserved1;
506 PPEB PebBaseAddress;
507 PVOID Reserved2[2];
508 ULONG_PTR UniqueProcessId;
509 PVOID Reserved3;
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000510#endif
Patrik Stridvalleba96492002-09-10 00:33:34 +0000511} PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION;
512
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000513typedef struct _PROCESS_INFO {
514 DWORD Offset; /* 00 offset to next PROCESS_INFO ok*/
515 DWORD ThreadCount; /* 04 number of ThreadInfo member ok */
516 DWORD Unknown1[6];
517 FILETIME CreationTime; /* 20 */
518 DWORD Unknown2[5];
519 PWCHAR ProcessName; /* 3c ok */
520 DWORD BasePriority;
521 DWORD ProcessID; /* 44 ok*/
522 DWORD ParentProcessID;
523 DWORD HandleCount;
524 DWORD Unknown3[2]; /* 50 */
525 ULONG PeakVirtualSize;
526 ULONG VirtualSize;
527 ULONG PageFaultCount;
528 ULONG PeakWorkingSetSize;
529 ULONG WorkingSetSize;
530 ULONG QuotaPeakPagedPoolUsage;
531 ULONG QuotaPagedPoolUsage;
532 ULONG QuotaPeakNonPagedPoolUsage;
533 ULONG QuotaNonPagedPoolUsage;
534 ULONG PagefileUsage;
535 ULONG PeakPagefileUsage;
536 DWORD PrivateBytes;
537 DWORD Unknown6[4];
538 THREAD_INFO ati[ANYSIZE_ARRAY]; /* 94 size=0x40*/
539} PROCESS_INFO, PPROCESS_INFO;
Patrik Stridvalleba96492002-09-10 00:33:34 +0000540
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000541typedef struct _RTL_HEAP_DEFINITION {
542 ULONG Length; /* = sizeof(RTL_HEAP_DEFINITION) */
Patrik Stridvalleba96492002-09-10 00:33:34 +0000543
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000544 ULONG Unknown[11];
545} RTL_HEAP_DEFINITION, *PRTL_HEAP_DEFINITION;
Patrik Stridvalleba96492002-09-10 00:33:34 +0000546
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000547typedef struct tagRTL_BITMAP {
548 ULONG SizeOfBitMap; /* Number of bits in the bitmap */
549 LPBYTE BitMapBuffer; /* Bitmap data, assumed sized to a DWORD boundary */
550} RTL_BITMAP, *PRTL_BITMAP;
551
552typedef const RTL_BITMAP *PCRTL_BITMAP;
553
554typedef struct tagRTL_BITMAP_RUN {
555 ULONG StartOfRun; /* Bit position at which run starts - FIXME: Name? */
556 ULONG SizeOfRun; /* Size of the run in bits - FIXME: Name? */
557} RTL_BITMAP_RUN, *PRTL_BITMAP_RUN;
558
559typedef const RTL_BITMAP_RUN *PCRTL_BITMAP_RUN;
560
561typedef struct _RTL_RWLOCK {
562 RTL_CRITICAL_SECTION rtlCS;
563
564 HANDLE hSharedReleaseSemaphore;
565 UINT uSharedWaiters;
566
567 HANDLE hExclusiveReleaseSemaphore;
568 UINT uExclusiveWaiters;
569
570 INT iNumberActive;
571 HANDLE hOwningThreadId;
572 DWORD dwTimeoutBoost;
573 PVOID pDebugInfo;
574} RTL_RWLOCK, *LPRTL_RWLOCK;
575
576/* System Information Class 0x00 */
Patrik Stridvalleba96492002-09-10 00:33:34 +0000577typedef struct _SYSTEM_BASIC_INFORMATION {
Dimitrie O. Paun8b366812003-01-04 00:52:18 +0000578#ifdef __WINESRC__
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000579 DWORD dwUnknown1;
580 ULONG uKeMaximumIncrement;
581 ULONG uPageSize;
582 ULONG uMmNumberOfPhysicalPages;
583 ULONG uMmLowestPhysicalPage;
584 ULONG uMmHighestPhysicalPage;
585 ULONG uAllocationGranularity;
586 PVOID pLowestUserAddress;
587 PVOID pMmHighestUserAddress;
588 ULONG uKeActiveProcessors;
589 BYTE bKeNumberProcessors;
590 BYTE bUnknown2;
591 WORD wUnknown3;
592#else
Patrik Stridvalleba96492002-09-10 00:33:34 +0000593 BYTE Reserved1[24];
594 PVOID Reserved2[4];
595 CCHAR NumberOfProcessors;
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000596#endif
Patrik Stridvalleba96492002-09-10 00:33:34 +0000597} SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION;
598
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000599/* System Information Class 0x15 */
600typedef struct {
601 ULONG CurrentSize;
602 ULONG PeakSize;
603 ULONG PageFaultCount;
604 ULONG MinimumWorkingSet;
605 ULONG MaximumWorkingSet;
606 ULONG unused[4];
607} SYSTEM_CACHE_INFORMATION;
Patrik Stridvalleba96492002-09-10 00:33:34 +0000608
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000609typedef struct _SYSTEM_CONFIGURATION_INFO {
610 union {
611 ULONG OemId;
612 struct {
613 WORD ProcessorArchitecture;
614 WORD Reserved;
615 } tag1;
616 } tag2;
617 ULONG PageSize;
618 PVOID MinimumApplicationAddress;
619 PVOID MaximumApplicationAddress;
620 ULONG ActiveProcessorMask;
621 ULONG NumberOfProcessors;
622 ULONG ProcessorType;
623 ULONG AllocationGranularity;
624 WORD ProcessorLevel;
625 WORD ProcessorRevision;
626} SYSTEM_CONFIGURATION_INFO, *PSYSTEM_CONFIGURATION_INFO;
627
628/* System Information Class 0x0b */
629typedef struct {
630 PVOID pvAddress;
631 DWORD dwUnknown1;
632 DWORD dwUnknown2;
633 DWORD dwEntryIndex;
634 DWORD dwUnknown3;
635 char szName[MAX_PATH + 1];
636} SYSTEM_DRIVER_INFORMATION;
Patrik Stridvalleba96492002-09-10 00:33:34 +0000637
638typedef struct _SYSTEM_EXCEPTION_INFORMATION {
639 BYTE Reserved1[16];
640} SYSTEM_EXCEPTION_INFORMATION, *PSYSTEM_EXCEPTION_INFORMATION;
641
642typedef struct _SYSTEM_LOOKASIDE_INFORMATION {
643 BYTE Reserved1[32];
644} SYSTEM_LOOKASIDE_INFORMATION, *PSYSTEM_LOOKASIDE_INFORMATION;
645
646typedef struct _SYSTEM_INTERRUPT_INFORMATION {
647 BYTE Reserved1[24];
648} SYSTEM_INTERRUPT_INFORMATION, *PSYSTEM_INTERRUPT_INFORMATION;
649
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000650/* System Information Class 0x10 */
651typedef struct {
652 USHORT dwPID;
653 USHORT dwCreatorBackTraceIndex;
654 BYTE bObjectType;
655 BYTE bHandleAttributes;
656 USHORT usHandleOffset;
657 DWORD dwKeObject;
658 ULONG ulGrantedAccess;
659} HANDLEINFO, *PHANDLEINFO; /* FIXME: SYSTEM_HANDLE_INFORMATION? */
Patrik Stridvalleba96492002-09-10 00:33:34 +0000660
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000661typedef struct _SYSTEM_PERFORMANCE_INFORMATION {
662 BYTE Reserved1[312];
663} SYSTEM_PERFORMANCE_INFORMATION, *PSYSTEM_PERFORMANCE_INFORMATION;
Patrik Stridvalleba96492002-09-10 00:33:34 +0000664
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000665/* System Information Class 0x02 */
666typedef struct _SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION {
Dimitrie O. Paun8b366812003-01-04 00:52:18 +0000667#ifdef __WINESRC__
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000668 LARGE_INTEGER liIdleTime;
669 DWORD dwSpare[76];
670#else
671 LARGE_INTEGER IdleTime;
672 LARGE_INTEGER KernelTime;
673 LARGE_INTEGER UserTime;
674 LARGE_INTEGER Reserved1[2];
675 ULONG Reserved2;
Patrik Stridvalleba96492002-09-10 00:33:34 +0000676#endif
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000677} SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION, *PSYSTEM_PROCESSOR_PERFORMANCE_INFORMATION;
Patrik Stridvalleba96492002-09-10 00:33:34 +0000678
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000679/* System Information Class 0x05 */
680typedef struct _SYSTEM_PROCESS_INFORMATION {
Dimitrie O. Paun8b366812003-01-04 00:52:18 +0000681#ifdef __WINESRC__
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000682 DWORD dwOffset;
683 DWORD dwThreadCount;
684 DWORD dwUnknown1[6];
685 FILETIME ftCreationTime;
686 DWORD dwUnknown2[5];
687 WCHAR *pszProcessName;
688 DWORD dwBasePriority;
689 DWORD dwProcessID;
690 DWORD dwParentProcessID;
691 DWORD dwHandleCount;
692 DWORD dwUnknown3;
693 DWORD dwUnknown4;
694 DWORD dwVirtualBytesPeak;
695 DWORD dwVirtualBytes;
696 DWORD dwPageFaults;
697 DWORD dwWorkingSetPeak;
698 DWORD dwWorkingSet;
699 DWORD dwUnknown5;
700 DWORD dwPagedPool;
701 DWORD dwUnknown6;
702 DWORD dwNonPagedPool;
703 DWORD dwPageFileBytesPeak;
704 DWORD dwPrivateBytes;
705 DWORD dwPageFileBytes;
706 DWORD dwUnknown7[4];
707 THREADINFO ti[1];
708#else
709 ULONG NextEntryOffset;
710 BYTE Reserved1[52];
711 PVOID Reserved2[3];
712 HANDLE UniqueProcessId;
713 PVOID Reserved3;
714 ULONG HandleCount;
715 BYTE Reserved4[4];
716 PVOID Reserved5[11];
717 SIZE_T PeakPagefileUsage;
718 SIZE_T PrivatePageCount;
719 LARGE_INTEGER Reserved6[6];
720#endif
721} SYSTEM_PROCESS_INFORMATION, *PSYSTEM_PROCESS_INFORMATION;
Patrik Stridvalleba96492002-09-10 00:33:34 +0000722
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000723typedef struct _SYSTEM_REGISTRY_QUOTA_INFORMATION {
724 ULONG RegistryQuotaAllowed;
725 ULONG RegistryQuotaUsed;
726 PVOID Reserved1;
727} SYSTEM_REGISTRY_QUOTA_INFORMATION, *PSYSTEM_REGISTRY_QUOTA_INFORMATION;
Patrik Stridvalleba96492002-09-10 00:33:34 +0000728
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000729typedef struct _SYSTEM_TIME_ADJUSTMENT {
730 ULONG TimeAdjustment;
731 BOOLEAN TimeAdjustmentDisabled;
732} SYSTEM_TIME_ADJUSTMENT, *PSYSTEM_TIME_ADJUSTMENT;
733
734/* System Information Class 0x03 */
735typedef struct _SYSTEM_TIMEOFDAY_INFORMATION {
Dimitrie O. Paun8b366812003-01-04 00:52:18 +0000736#ifdef __WINESRC__
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000737 LARGE_INTEGER liKeBootTime;
738 LARGE_INTEGER liKeSystemTime;
739 LARGE_INTEGER liExpTimeZoneBias;
740 ULONG uCurrentTimeZoneId;
741 DWORD dwReserved;
742#else
743 BYTE Reserved1[48];
744#endif
745} SYSTEM_TIMEOFDAY_INFORMATION, *PSYSTEM_TIMEOFDAY_INFORMATION; /* was SYSTEM_TIME_INFORMATION */
746
747typedef struct _TIME_FIELDS
748{ CSHORT Year;
749 CSHORT Month;
750 CSHORT Day;
751 CSHORT Hour;
752 CSHORT Minute;
753 CSHORT Second;
754 CSHORT Milliseconds;
755 CSHORT Weekday;
756} TIME_FIELDS, *PTIME_FIELDS;
Patrik Stridvalleba96492002-09-10 00:33:34 +0000757
758typedef struct _WINSTATIONINFORMATIONW {
759 BYTE Reserved2[70];
760 ULONG LogonId;
761 BYTE Reserved3[1140];
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000762} WINSTATIONINFORMATIONW, *PWINSTATIONINFORMATIONW;
763
764typedef struct _VM_COUNTERS_ {
765 ULONG PeakVirtualSize;
766 ULONG VirtualSize;
767 ULONG PageFaultCount;
768 ULONG PeakWorkingSetSize;
769 ULONG WorkingSetSize;
770 ULONG QuotaPeakPagedPoolUsage;
771 ULONG QuotaPagedPoolUsage;
772 ULONG QuotaPeakNonPagedPoolUsage;
773 ULONG QuotaNonPagedPoolUsage;
774 ULONG PagefileUsage;
775 ULONG PeakPagefileUsage;
776} VM_COUNTERS, *PVM_COUNTERS;
Patrik Stridvalleba96492002-09-10 00:33:34 +0000777
778typedef BOOLEAN (WINAPI * PWINSTATIONQUERYINFORMATIONW)(HANDLE,ULONG,WINSTATIONINFOCLASS,PVOID,ULONG,PULONG);
779
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000780/***********************************************************************
781 * Defines
782 */
783
784/* flags for NtCreateFile and NtOpenFile */
785#define FILE_DIRECTORY_FLAG 0x00000001
786#define FILE_WRITE_THROUGH 0x00000002
787#define FILE_SEQUENTIAL_ONLY 0x00000004
788#define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
789#define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
790#define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
791#define FILE_NON_DIRECTORY_FILE 0x00000040
792#define FILE_CREATE_TREE_CONNECTION 0x00000080
793
794/* status for NtCreateFile or NtOpenFile */
795#define FILE_SUPERSEDED 0x00000000
796#define FILE_OPENED 0x00000001
797#define FILE_CREATED 0x00000002
798#define FILE_OVERWRITTEN 0x00000003
799#define FILE_EXISTS 0x00000004
800#define FILE_DOES_NOT_EXIST 0x00000005
801
802#if (_WIN32_WINNT >= 0x0501)
803#define INTERNAL_TS_ACTIVE_CONSOLE_ID ( *((volatile ULONG*)(0x7ffe02d8)) )
804#endif /* (_WIN32_WINNT >= 0x0501) */
805
806#define LOGONID_CURRENT ((ULONG)-1)
807
808#define OBJ_INHERIT 0x00000002L
809#define OBJ_PERMANENT 0x00000010L
810#define OBJ_EXCLUSIVE 0x00000020L
811#define OBJ_CASE_INSENSITIVE 0x00000040L
812#define OBJ_OPENIF 0x00000080L
813#define OBJ_OPENLINK 0x00000100L
814#define OBJ_KERNEL_HANDLE 0x00000200L
815#define OBJ_VALID_ATTRIBUTES 0x000003F2L
816
817#define SERVERNAME_CURRENT ((HANDLE)NULL)
818
Alexandre Julliard088bcf92003-04-04 22:26:34 +0000819typedef void (CALLBACK *PNTAPCFUNC)(ULONG_PTR,ULONG_PTR,ULONG_PTR); /* FIXME: not the right name */
820
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000821/***********************************************************************
822 * Function declarations
823 */
824
825extern LPSTR _strlwr(LPSTR str); /* FIXME: Doesn't belong here */
826extern LPSTR _strupr(LPSTR str); /* FIXME: Doesn't belong here */
827
828#if defined(__i386__) && defined(__GNUC__)
829static inline void WINAPI DbgBreakPoint(void) { __asm__ __volatile__("int3"); }
830static inline void WINAPI DbgUserBreakPoint(void) { __asm__ __volatile__("int3"); }
831#else /* __i386__ && __GNUC__ */
832void WINAPI DbgBreakPoint(void);
833void WINAPI DbgUserBreakPoint(void);
834#endif /* __i386__ && __GNUC__ */
835void WINAPIV DbgPrint(LPCSTR fmt, ...);
836
837NTSTATUS WINAPI NtAccessCheck(PSECURITY_DESCRIPTOR,HANDLE,ACCESS_MASK,PGENERIC_MAPPING,PPRIVILEGE_SET,PULONG,PULONG,PBOOLEAN);
838NTSTATUS WINAPI NtAdjustPrivilegesToken(HANDLE,BOOLEAN,PTOKEN_PRIVILEGES,DWORD,PTOKEN_PRIVILEGES,PDWORD);
Alexandre Julliard341b7dc2002-09-17 18:54:42 +0000839NTSTATUS WINAPI NtAllocateVirtualMemory(HANDLE,PVOID*,PVOID,ULONG*,ULONG,ULONG);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000840NTSTATUS WINAPI NtClearEvent(HANDLE);
841NTSTATUS WINAPI NtClose(HANDLE);
842NTSTATUS WINAPI NtCreateEvent(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *,BOOLEAN,BOOLEAN);
843NTSTATUS 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 +0000844NTSTATUS WINAPI NtCreateKey(PHKEY,ACCESS_MASK,const OBJECT_ATTRIBUTES*,ULONG,const UNICODE_STRING*,ULONG,PULONG);
Alexandre Julliard341b7dc2002-09-17 18:54:42 +0000845NTSTATUS WINAPI NtCreateSection(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const LARGE_INTEGER*,ULONG,ULONG,HANDLE);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000846NTSTATUS WINAPI NtCreateSemaphore(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,ULONG,ULONG);
Alexandre Julliard9b5c3f92002-10-25 19:14:29 +0000847NTSTATUS WINAPI NtDeleteKey(HKEY);
848NTSTATUS WINAPI NtDeleteValueKey(HKEY,const UNICODE_STRING *);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000849NTSTATUS WINAPI NtDeviceIoControlFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,PVOID,ULONG,PVOID,ULONG);
Alexandre Julliardac7b9d32002-09-16 19:32:50 +0000850NTSTATUS WINAPI NtDuplicateObject(HANDLE,HANDLE,HANDLE,PHANDLE,ACCESS_MASK,ULONG,ULONG);
Alexandre Julliard9b5c3f92002-10-25 19:14:29 +0000851NTSTATUS WINAPI NtEnumerateKey(HKEY,ULONG,KEY_INFORMATION_CLASS,void *,DWORD,DWORD *);
852NTSTATUS WINAPI NtEnumerateValueKey(HKEY,ULONG,KEY_VALUE_INFORMATION_CLASS,PVOID,ULONG,PULONG);
853NTSTATUS WINAPI NtFlushKey(HKEY);
Alexandre Julliard341b7dc2002-09-17 18:54:42 +0000854NTSTATUS WINAPI NtFlushVirtualMemory(HANDLE,LPCVOID*,ULONG*,ULONG);
855NTSTATUS WINAPI NtFreeVirtualMemory(HANDLE,PVOID*,ULONG*,ULONG);
Alexandre Julliard088bcf92003-04-04 22:26:34 +0000856NTSTATUS WINAPI NtGetContextThread(HANDLE,CONTEXT*);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000857NTSTATUS WINAPI NtLoadKey(const OBJECT_ATTRIBUTES *,const OBJECT_ATTRIBUTES *);
Alexandre Julliard341b7dc2002-09-17 18:54:42 +0000858NTSTATUS WINAPI NtLockVirtualMemory(HANDLE,PVOID*,ULONG*,ULONG);
859NTSTATUS WINAPI NtMapViewOfSection(HANDLE,HANDLE,PVOID*,ULONG,ULONG,const LARGE_INTEGER*,ULONG*,SECTION_INHERIT,ULONG,ULONG);
Alexandre Julliard9b5c3f92002-10-25 19:14:29 +0000860NTSTATUS WINAPI NtNotifyChangeKey(HKEY,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,BOOLEAN,PVOID,ULONG,BOOLEAN);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000861NTSTATUS WINAPI NtOpenEvent(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *);
862NTSTATUS WINAPI NtOpenFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,ULONG,ULONG);
Alexandre Julliard9b5c3f92002-10-25 19:14:29 +0000863NTSTATUS WINAPI NtOpenKey(PHKEY,ACCESS_MASK,const OBJECT_ATTRIBUTES *);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000864NTSTATUS WINAPI NtOpenProcessToken(HANDLE,DWORD,HANDLE *);
Alexandre Julliard341b7dc2002-09-17 18:54:42 +0000865NTSTATUS WINAPI NtOpenSection(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*);
Alexandre Julliard088bcf92003-04-04 22:26:34 +0000866NTSTATUS WINAPI NtOpenThread(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const CLIENT_ID*);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000867NTSTATUS WINAPI NtOpenThreadToken(HANDLE,DWORD,BOOLEAN,HANDLE *);
Alexandre Julliard341b7dc2002-09-17 18:54:42 +0000868NTSTATUS WINAPI NtProtectVirtualMemory(HANDLE,PVOID*,ULONG*,ULONG,ULONG*);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000869NTSTATUS WINAPI NtPulseEvent(HANDLE,PULONG);
Alexandre Julliard088bcf92003-04-04 22:26:34 +0000870NTSTATUS WINAPI NtQueueApcThread(HANDLE,PNTAPCFUNC,ULONG_PTR,ULONG_PTR,ULONG_PTR);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000871NTSTATUS WINAPI NtQueryInformationProcess(HANDLE,PROCESSINFOCLASS,PVOID,ULONG,PULONG);
872NTSTATUS WINAPI NtQueryInformationThread(HANDLE,THREADINFOCLASS,PVOID,ULONG,PULONG);
873NTSTATUS WINAPI NtQueryInformationToken(HANDLE,DWORD,LPVOID,DWORD,LPDWORD);
Alexandre Julliard9b5c3f92002-10-25 19:14:29 +0000874NTSTATUS WINAPI NtQueryKey(HKEY,KEY_INFORMATION_CLASS,void *,DWORD,DWORD *);
875NTSTATUS WINAPI NtQueryMultipleValueKey(HKEY,PVALENTW,ULONG,PVOID,ULONG,PULONG);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000876NTSTATUS WINAPI NtQuerySecurityObject(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,ULONG,PULONG);
877NTSTATUS WINAPI NtQuerySystemInformation(SYSTEM_INFORMATION_CLASS,PVOID,ULONG,PULONG);
878NTSTATUS WINAPI NtQuerySystemTime(PLARGE_INTEGER);
Alexandre Julliard9b5c3f92002-10-25 19:14:29 +0000879NTSTATUS WINAPI NtQueryValueKey(HKEY,const UNICODE_STRING *,KEY_VALUE_INFORMATION_CLASS,void *,DWORD,DWORD *);
Alexandre Julliard341b7dc2002-09-17 18:54:42 +0000880NTSTATUS WINAPI NtQueryVirtualMemory(HANDLE,LPCVOID,MEMORY_INFORMATION_CLASS,PVOID,ULONG,ULONG*);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000881void WINAPI NtRaiseException(PEXCEPTION_RECORD,PCONTEXT,BOOL);
882NTSTATUS WINAPI NtReadFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,PVOID,ULONG,PLARGE_INTEGER,PULONG);
883NTSTATUS WINAPI NtReleaseSemaphore(HANDLE,ULONG,PULONG);
Alexandre Julliard088bcf92003-04-04 22:26:34 +0000884NTSTATUS WINAPI NtReplaceKey(POBJECT_ATTRIBUTES,HKEY,POBJECT_ATTRIBUTES);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000885NTSTATUS WINAPI NtResetEvent(HANDLE,PULONG);
Alexandre Julliard9b5c3f92002-10-25 19:14:29 +0000886NTSTATUS WINAPI NtRestoreKey(HKEY,HANDLE,ULONG);
Alexandre Julliard088bcf92003-04-04 22:26:34 +0000887NTSTATUS WINAPI NtResumeThread(HANDLE,PULONG);
Alexandre Julliard9b5c3f92002-10-25 19:14:29 +0000888NTSTATUS WINAPI NtSaveKey(HKEY,HANDLE);
Alexandre Julliard088bcf92003-04-04 22:26:34 +0000889NTSTATUS WINAPI NtSetContextThread(HANDLE,const CONTEXT*);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000890NTSTATUS WINAPI NtSetEvent(HANDLE,PULONG);
Alexandre Julliard9b5c3f92002-10-25 19:14:29 +0000891NTSTATUS WINAPI NtSetInformationKey(HKEY,const int,PVOID,ULONG);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000892NTSTATUS WINAPI NtSetSecurityObject(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR);
György 'Nog' Jeney6f3015b2002-11-25 01:12:39 +0000893NTSTATUS WINAPI NtSetSystemTime(const LARGE_INTEGER*,LARGE_INTEGER*);
Alexandre Julliard9b5c3f92002-10-25 19:14:29 +0000894NTSTATUS WINAPI NtSetValueKey(HKEY,const UNICODE_STRING *,ULONG,ULONG,const void *,ULONG);
Alexandre Julliard088bcf92003-04-04 22:26:34 +0000895NTSTATUS WINAPI NtSuspendThread(HANDLE,PULONG);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000896NTSTATUS WINAPI NtTerminateProcess(HANDLE,LONG);
897NTSTATUS WINAPI NtTerminateThread(HANDLE,LONG);
Alexandre Julliard9b5c3f92002-10-25 19:14:29 +0000898NTSTATUS WINAPI NtUnloadKey(HKEY);
Alexandre Julliard341b7dc2002-09-17 18:54:42 +0000899NTSTATUS WINAPI NtUnlockVirtualMemory(HANDLE,PVOID*,ULONG*,ULONG);
900NTSTATUS WINAPI NtUnmapViewOfSection(HANDLE,PVOID);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000901NTSTATUS WINAPI NtWaitForSingleObject(HANDLE,BOOLEAN,PLARGE_INTEGER);
Alexandre Julliardfbef57c2003-03-31 01:37:04 +0000902NTSTATUS WINAPI NtWaitForMultipleObjects(ULONG,const HANDLE*,BOOLEAN,BOOLEAN,PLARGE_INTEGER);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000903
904void WINAPI RtlAcquirePebLock(void);
905BYTE WINAPI RtlAcquireResourceExclusive(LPRTL_RWLOCK,BYTE);
906BYTE WINAPI RtlAcquireResourceShared(LPRTL_RWLOCK,BYTE);
907NTSTATUS WINAPI RtlAddAce(PACL,DWORD,DWORD,PACE_HEADER,DWORD);
908BOOL WINAPI RtlAddAccessAllowedAce(PACL,DWORD,DWORD,PSID);
909BOOL WINAPI RtlAddAccessAllowedAceEx(PACL,DWORD,DWORD,DWORD,PSID);
910DWORD WINAPI RtlAdjustPrivilege(DWORD,DWORD,DWORD,DWORD);
911BOOLEAN WINAPI RtlAllocateAndInitializeSid(PSID_IDENTIFIER_AUTHORITY,BYTE,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,PSID *);
912PVOID WINAPI RtlAllocateHeap(HANDLE,ULONG,ULONG);
913DWORD WINAPI RtlAnsiStringToUnicodeSize(const STRING *);
914NTSTATUS WINAPI RtlAnsiStringToUnicodeString(PUNICODE_STRING,PCANSI_STRING,BOOLEAN);
915NTSTATUS WINAPI RtlAppendAsciizToString(STRING *,LPCSTR);
916NTSTATUS WINAPI RtlAppendStringToString(STRING *,const STRING *);
917NTSTATUS WINAPI RtlAppendUnicodeStringToString(UNICODE_STRING *,const UNICODE_STRING *);
918NTSTATUS WINAPI RtlAppendUnicodeToString(UNICODE_STRING *,LPCWSTR);
Thomas Mertes0ce48262003-04-08 00:55:36 +0000919BOOLEAN WINAPI RtlAreAllAccessesGranted(ACCESS_MASK,ACCESS_MASK);
920BOOLEAN WINAPI RtlAreAnyAccessesGranted(ACCESS_MASK,ACCESS_MASK);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000921BOOLEAN WINAPI RtlAreBitsSet(PCRTL_BITMAP,ULONG,ULONG);
922BOOLEAN WINAPI RtlAreBitsClear(PCRTL_BITMAP,ULONG,ULONG);
923
924NTSTATUS WINAPI RtlCharToInteger(PCSZ,ULONG,PULONG);
925void WINAPI RtlClearAllBits(PRTL_BITMAP);
926void WINAPI RtlClearBits(PRTL_BITMAP,ULONG,ULONG);
927ULONG WINAPI RtlCompactHeap(HANDLE,ULONG);
928LONG WINAPI RtlCompareString(const STRING*,const STRING*,BOOLEAN);
929LONG WINAPI RtlCompareUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
Jon Griffithsccf2f612003-03-18 20:12:07 +0000930DWORD WINAPI RtlComputeCrc32(DWORD,PBYTE,INT);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000931NTSTATUS WINAPI RtlConvertSidToUnicodeString(PUNICODE_STRING,PSID,BOOLEAN);
932LONGLONG WINAPI RtlConvertLongToLargeInteger(LONG);
933ULONGLONG WINAPI RtlConvertUlongToLargeInteger(ULONG);
Thomas Mertes0ce48262003-04-08 00:55:36 +0000934void WINAPI RtlCopyLuid(PLUID,const LUID*);
935void WINAPI RtlCopyLuidAndAttributesArray(ULONG,const LUID_AND_ATTRIBUTES*,PLUID_AND_ATTRIBUTES);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000936DWORD WINAPI RtlCopySid(DWORD,PSID,PSID);
937void WINAPI RtlCopyString(STRING*,const STRING*);
938void WINAPI RtlCopyUnicodeString(UNICODE_STRING*,const UNICODE_STRING*);
939NTSTATUS WINAPI RtlCreateAcl(PACL,DWORD,DWORD);
940DWORD WINAPI RtlCreateEnvironment(DWORD,DWORD);
941HANDLE WINAPI RtlCreateHeap(ULONG,PVOID,ULONG,ULONG,PVOID,PRTL_HEAP_DEFINITION);
942NTSTATUS WINAPI RtlCreateSecurityDescriptor(PSECURITY_DESCRIPTOR,DWORD);
943BOOLEAN WINAPI RtlCreateUnicodeString(PUNICODE_STRING,LPCWSTR);
944BOOLEAN WINAPI RtlCreateUnicodeStringFromAsciiz(PUNICODE_STRING,LPCSTR);
945
946NTSTATUS WINAPI RtlDeleteCriticalSection(RTL_CRITICAL_SECTION *);
947void WINAPI RtlDeleteResource(LPRTL_RWLOCK);
948DWORD WINAPI RtlDeleteSecurityObject(DWORD);
949DWORD WINAPI RtlDestroyEnvironment(DWORD);
950HANDLE WINAPI RtlDestroyHeap(HANDLE);
Alexandre Julliardaa94a5a2003-04-12 00:10:13 +0000951DOS_PATHNAME_TYPE WINAPI RtlDetermineDosPathNameType_U(PCWSTR);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000952BOOLEAN WINAPI RtlDosPathNameToNtPathName_U(LPWSTR,PUNICODE_STRING,DWORD,DWORD);
Jon Griffithsccf2f612003-03-18 20:12:07 +0000953WCHAR WINAPI RtlDowncaseUnicodeChar(WCHAR);
Thomas Mertesc83aa0d2003-03-22 00:20:58 +0000954NTSTATUS WINAPI RtlDowncaseUnicodeString(UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000955void WINAPI RtlDumpResource(LPRTL_RWLOCK);
956
957LONGLONG WINAPI RtlEnlargedIntegerMultiply(INT,INT);
958ULONGLONG WINAPI RtlEnlargedUnsignedMultiply(UINT,UINT);
959UINT WINAPI RtlEnlargedUnsignedDivide(ULONGLONG,UINT,UINT *);
960NTSTATUS WINAPI RtlEnterCriticalSection(RTL_CRITICAL_SECTION *);
961void WINAPI RtlEraseUnicodeString(UNICODE_STRING*);
Jon Griffithsccf2f612003-03-18 20:12:07 +0000962NTSTATUS WINAPI RtlEqualComputerName(const UNICODE_STRING*,const UNICODE_STRING*);
963NTSTATUS WINAPI RtlEqualDomainName(const UNICODE_STRING*,const UNICODE_STRING*);
Thomas Mertes0ce48262003-04-08 00:55:36 +0000964BOOLEAN WINAPI RtlEqualLuid(const LUID*,const LUID*);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000965BOOL WINAPI RtlEqualPrefixSid(PSID,PSID);
966BOOL WINAPI RtlEqualSid(PSID,PSID);
967BOOLEAN WINAPI RtlEqualString(const STRING*,const STRING*,BOOLEAN);
968BOOLEAN WINAPI RtlEqualUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
969LONGLONG WINAPI RtlExtendedMagicDivide(LONGLONG,LONGLONG,INT);
970LONGLONG WINAPI RtlExtendedIntegerMultiply(LONGLONG,INT);
971LONGLONG WINAPI RtlExtendedLargeIntegerDivide(LONGLONG,INT,INT *);
972
973ULONG WINAPI RtlFindClearBits(PCRTL_BITMAP,ULONG,ULONG);
974ULONG WINAPI RtlFindClearBitsAndSet(PRTL_BITMAP,ULONG,ULONG);
975ULONG WINAPI RtlFindClearRuns(PCRTL_BITMAP,PRTL_BITMAP_RUN,ULONG,BOOLEAN);
976ULONG WINAPI RtlFindLastBackwardRunSet(PCRTL_BITMAP,ULONG,PULONG);
977ULONG WINAPI RtlFindLastBackwardRunClear(PCRTL_BITMAP,ULONG,PULONG);
978CCHAR WINAPI RtlFindLeastSignificantBit(ULONGLONG);
979ULONG WINAPI RtlFindLongestRunSet(PCRTL_BITMAP,PULONG);
980ULONG WINAPI RtlFindLongestRunClear(PCRTL_BITMAP,PULONG);
981CCHAR WINAPI RtlFindMostSignificantBit(ULONGLONG);
982ULONG WINAPI RtlFindNextForwardRunSet(PCRTL_BITMAP,ULONG,PULONG);
983ULONG WINAPI RtlFindNextForwardRunClear(PCRTL_BITMAP,ULONG,PULONG);
984ULONG WINAPI RtlFindSetBits(PCRTL_BITMAP,ULONG,ULONG);
985ULONG WINAPI RtlFindSetBitsAndClear(PRTL_BITMAP,ULONG,ULONG);
986ULONG WINAPI RtlFindSetRuns(PCRTL_BITMAP,PRTL_BITMAP_RUN,ULONG,BOOLEAN);
987BOOLEAN WINAPI RtlFirstFreeAce(PACL,PACE_HEADER *);
988NTSTATUS WINAPI RtlFormatCurrentUserKeyPath(PUNICODE_STRING);
989void WINAPI RtlFreeAnsiString(PANSI_STRING);
990BOOLEAN WINAPI RtlFreeHeap(HANDLE,ULONG,PVOID);
991void WINAPI RtlFreeOemString(POEM_STRING);
992DWORD WINAPI RtlFreeSid(PSID);
993void WINAPI RtlFreeUnicodeString(PUNICODE_STRING);
994
995DWORD WINAPI RtlGetAce(PACL,DWORD,LPVOID *);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000996NTSTATUS WINAPI RtlGetControlSecurityDescriptor(PSECURITY_DESCRIPTOR, PSECURITY_DESCRIPTOR_CONTROL,LPDWORD);
Alexandre Julliardaa94a5a2003-04-12 00:10:13 +0000997NTSTATUS WINAPI RtlGetDaclSecurityDescriptor(PSECURITY_DESCRIPTOR,PBOOLEAN,PACL *,PBOOLEAN);
998ULONG WINAPI RtlGetFullPathName_U(PCWSTR,ULONG,PWSTR,PWSTR*);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000999NTSTATUS WINAPI RtlGetGroupSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID *,PBOOLEAN);
1000BOOLEAN WINAPI RtlGetNtProductType(LPDWORD);
1001NTSTATUS WINAPI RtlGetOwnerSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID *,PBOOLEAN);
1002ULONG WINAPI RtlGetProcessHeaps(ULONG,HANDLE*);
1003NTSTATUS WINAPI RtlGetSaclSecurityDescriptor(PSECURITY_DESCRIPTOR,PBOOLEAN,PACL *,PBOOLEAN);
1004
1005PSID_IDENTIFIER_AUTHORITY WINAPI RtlIdentifierAuthoritySid(PSID);
1006PVOID WINAPI RtlImageDirectoryEntryToData(HMODULE,BOOL,WORD,ULONG *);
1007PIMAGE_NT_HEADERS WINAPI RtlImageNtHeader(HMODULE);
1008PIMAGE_SECTION_HEADER WINAPI RtlImageRvaToSection(const IMAGE_NT_HEADERS *,HMODULE,DWORD);
1009PVOID WINAPI RtlImageRvaToVa(const IMAGE_NT_HEADERS *,HMODULE,DWORD,IMAGE_SECTION_HEADER **);
1010BOOL WINAPI RtlImpersonateSelf(SECURITY_IMPERSONATION_LEVEL);
1011void WINAPI RtlInitString(PSTRING,PCSZ);
1012void WINAPI RtlInitAnsiString(PANSI_STRING,PCSZ);
1013void WINAPI RtlInitUnicodeString(PUNICODE_STRING,PCWSTR);
1014NTSTATUS WINAPI RtlInitializeCriticalSection(RTL_CRITICAL_SECTION *);
1015NTSTATUS WINAPI RtlInitializeCriticalSectionAndSpinCount(RTL_CRITICAL_SECTION *,DWORD);
1016void WINAPI RtlInitializeBitMap(PRTL_BITMAP,LPBYTE,ULONG);
1017void WINAPI RtlInitializeResource(LPRTL_RWLOCK);
1018BOOL WINAPI RtlInitializeSid(PSID,PSID_IDENTIFIER_AUTHORITY,BYTE);
1019
Thomas Mertesf4757bb2003-02-19 03:39:46 +00001020NTSTATUS WINAPI RtlInt64ToUnicodeString(ULONGLONG,ULONG,UNICODE_STRING *);
1021NTSTATUS WINAPI RtlIntegerToChar(ULONG,ULONG,ULONG,PCHAR);
1022NTSTATUS WINAPI RtlIntegerToUnicodeString(ULONG,ULONG,UNICODE_STRING *);
Alexandre Julliardaa94a5a2003-04-12 00:10:13 +00001023ULONG WINAPI RtlIsDosDeviceName_U(PCWSTR);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +00001024BOOLEAN WINAPI RtlIsNameLegalDOS8Dot3(PUNICODE_STRING,POEM_STRING,PBOOLEAN);
1025DWORD WINAPI RtlIsTextUnicode(LPVOID,DWORD,DWORD *);
1026
1027LONGLONG WINAPI RtlLargeIntegerAdd(LONGLONG,LONGLONG);
1028LONGLONG WINAPI RtlLargeIntegerArithmeticShift(LONGLONG,INT);
1029ULONGLONG WINAPI RtlLargeIntegerDivide( ULONGLONG,ULONGLONG,ULONGLONG *);
1030LONGLONG WINAPI RtlLargeIntegerNegate(LONGLONG);
1031LONGLONG WINAPI RtlLargeIntegerShiftLeft(LONGLONG,INT);
1032LONGLONG WINAPI RtlLargeIntegerShiftRight(LONGLONG,INT);
1033LONGLONG WINAPI RtlLargeIntegerSubtract(LONGLONG,LONGLONG);
Thomas Mertesf4757bb2003-02-19 03:39:46 +00001034NTSTATUS WINAPI RtlLargeIntegerToChar(const ULONGLONG *,ULONG,ULONG,PCHAR);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +00001035NTSTATUS WINAPI RtlLeaveCriticalSection(RTL_CRITICAL_SECTION *);
1036DWORD WINAPI RtlLengthRequiredSid(DWORD);
1037ULONG WINAPI RtlLengthSecurityDescriptor(PSECURITY_DESCRIPTOR);
1038DWORD WINAPI RtlLengthSid(PSID);
György 'Nog' Jeney4d6ba252002-12-11 00:19:56 +00001039NTSTATUS WINAPI RtlLocalTimeToSystemTime(const LARGE_INTEGER*,PLARGE_INTEGER);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +00001040BOOLEAN WINAPI RtlLockHeap(HANDLE);
1041
1042NTSTATUS WINAPI RtlMakeSelfRelativeSD(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,LPDWORD);
Thomas Mertes0ce48262003-04-08 00:55:36 +00001043void WINAPI RtlMapGenericMask(PACCESS_MASK,const GENERIC_MAPPING*);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +00001044NTSTATUS WINAPI RtlMultiByteToUnicodeN(LPWSTR,DWORD,LPDWORD,LPCSTR,DWORD);
1045NTSTATUS WINAPI RtlMultiByteToUnicodeSize(DWORD*,LPCSTR,UINT);
1046
1047DWORD WINAPI RtlNewSecurityObject(DWORD,DWORD,DWORD,DWORD,DWORD,DWORD);
1048LPVOID WINAPI RtlNormalizeProcessParams(LPVOID);
1049ULONG WINAPI RtlNtStatusToDosError(NTSTATUS);
1050ULONG WINAPI RtlNumberOfSetBits(PCRTL_BITMAP);
1051ULONG WINAPI RtlNumberOfClearBits(PCRTL_BITMAP);
1052
1053UINT WINAPI RtlOemStringToUnicodeSize(const STRING*);
1054NTSTATUS WINAPI RtlOemStringToUnicodeString(UNICODE_STRING*,const STRING*,BOOLEAN);
1055NTSTATUS WINAPI RtlOemToUnicodeN(LPWSTR,DWORD,LPDWORD,LPCSTR,DWORD);
Alexandre Julliard9b5c3f92002-10-25 19:14:29 +00001056DWORD WINAPI RtlOpenCurrentUser(ACCESS_MASK,PHKEY);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +00001057
1058BOOLEAN WINAPI RtlPrefixString(const STRING*,const STRING*,BOOLEAN);
1059BOOLEAN WINAPI RtlPrefixUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
1060
1061DWORD WINAPI RtlQueryEnvironmentVariable_U(DWORD,PUNICODE_STRING,PUNICODE_STRING) ;
György 'Nog' Jeney6f3015b2002-11-25 01:12:39 +00001062NTSTATUS WINAPI RtlQueryTimeZoneInformation(LPTIME_ZONE_INFORMATION);
Thomas Mertes0ce48262003-04-08 00:55:36 +00001063
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +00001064void WINAPI RtlRaiseException(PEXCEPTION_RECORD);
1065void WINAPI RtlRaiseStatus(NTSTATUS);
Thomas Mertes0ce48262003-04-08 00:55:36 +00001066ULONG WINAPI RtlRandom(PULONG);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +00001067PVOID WINAPI RtlReAllocateHeap(HANDLE,ULONG,PVOID,ULONG);
1068void WINAPI RtlReleasePebLock(void);
1069void WINAPI RtlReleaseResource(LPRTL_RWLOCK);
1070
1071void WINAPI RtlSecondsSince1970ToTime(DWORD,LARGE_INTEGER *);
1072void WINAPI RtlSecondsSince1980ToTime(DWORD,LARGE_INTEGER *);
1073void WINAPI RtlSetAllBits(PRTL_BITMAP);
1074void WINAPI RtlSetBits(PRTL_BITMAP,ULONG,ULONG);
1075NTSTATUS WINAPI RtlSetDaclSecurityDescriptor(PSECURITY_DESCRIPTOR,BOOLEAN,PACL,BOOLEAN);
1076DWORD WINAPI RtlSetEnvironmentVariable(DWORD,PUNICODE_STRING,PUNICODE_STRING);
1077NTSTATUS WINAPI RtlSetOwnerSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID,BOOLEAN);
1078NTSTATUS WINAPI RtlSetGroupSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID,BOOLEAN);
1079NTSTATUS WINAPI RtlSetSaclSecurityDescriptor(PSECURITY_DESCRIPTOR,BOOLEAN,PACL,BOOLEAN);
György 'Nog' Jeney6f3015b2002-11-25 01:12:39 +00001080NTSTATUS WINAPI RtlSetTimeZoneInformation(const TIME_ZONE_INFORMATION*);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +00001081ULONG WINAPI RtlSizeHeap(HANDLE,ULONG,PVOID);
1082LPDWORD WINAPI RtlSubAuthoritySid(PSID,DWORD);
1083LPBYTE WINAPI RtlSubAuthorityCountSid(PSID);
György 'Nog' Jeney4d6ba252002-12-11 00:19:56 +00001084NTSTATUS WINAPI RtlSystemTimeToLocalTime(const LARGE_INTEGER*,PLARGE_INTEGER);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +00001085
György 'Nog' Jeney6f3015b2002-11-25 01:12:39 +00001086void WINAPI RtlTimeToTimeFields(const LARGE_INTEGER*,PTIME_FIELDS);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +00001087BOOLEAN WINAPI RtlTimeFieldsToTime(PTIME_FIELDS,PLARGE_INTEGER);
Alexandre Julliarda16ed902002-12-18 02:31:33 +00001088void WINAPI RtlTimeToElapsedTimeFields(const LARGE_INTEGER *,PTIME_FIELDS);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +00001089BOOLEAN WINAPI RtlTimeToSecondsSince1970(const LARGE_INTEGER *,PULONG);
1090BOOLEAN WINAPI RtlTimeToSecondsSince1980(const LARGE_INTEGER *,LPDWORD);
1091BOOL WINAPI RtlTryEnterCriticalSection(RTL_CRITICAL_SECTION *);
1092
Alexandre Julliard6da4c272003-03-19 00:09:57 +00001093ULONGLONG __cdecl RtlUlonglongByteSwap(ULONGLONG);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +00001094DWORD WINAPI RtlUnicodeStringToAnsiSize(const UNICODE_STRING*);
1095NTSTATUS WINAPI RtlUnicodeStringToAnsiString(PANSI_STRING,PCUNICODE_STRING,BOOLEAN);
Thomas Mertesf4757bb2003-02-19 03:39:46 +00001096NTSTATUS WINAPI RtlUnicodeStringToInteger(const UNICODE_STRING *,ULONG,ULONG *);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +00001097DWORD WINAPI RtlUnicodeStringToOemSize(const UNICODE_STRING*);
1098NTSTATUS WINAPI RtlUnicodeStringToOemString(POEM_STRING,PCUNICODE_STRING,BOOLEAN);
1099NTSTATUS WINAPI RtlUnicodeToMultiByteN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
1100NTSTATUS WINAPI RtlUnicodeToMultiByteSize(PULONG,PCWSTR,ULONG);
1101NTSTATUS WINAPI RtlUnicodeToOemN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
1102ULONG WINAPI RtlUniform(PULONG);
1103BOOLEAN WINAPI RtlUnlockHeap(HANDLE);
1104void WINAPI RtlUnwind(PVOID,PVOID,PEXCEPTION_RECORD,PVOID);
1105#ifdef __ia64__
1106void WINAPI RtlUnwind2(FRAME_POINTERS,PVOID,PEXCEPTION_RECORD,PVOID,PCONTEXT);
1107void WINAPI RtlUnwindEx(FRAME_POINTERS,PVOID,PEXCEPTION_RECORD,PVOID,PCONTEXT,PUNWIND_HISTORY_TABLE);
1108#endif
Thomas Mertesf4757bb2003-02-19 03:39:46 +00001109WCHAR WINAPI RtlUpcaseUnicodeChar(WCHAR);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +00001110NTSTATUS WINAPI RtlUpcaseUnicodeString(UNICODE_STRING*,const UNICODE_STRING *,BOOLEAN);
1111NTSTATUS WINAPI RtlUpcaseUnicodeStringToAnsiString(STRING*,const UNICODE_STRING*,BOOLEAN);
1112NTSTATUS WINAPI RtlUpcaseUnicodeStringToOemString(STRING*,const UNICODE_STRING*,BOOLEAN);
1113NTSTATUS WINAPI RtlUpcaseUnicodeToMultiByteN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
1114NTSTATUS WINAPI RtlUpcaseUnicodeToOemN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
Thomas Mertesf4757bb2003-02-19 03:39:46 +00001115CHAR WINAPI RtlUpperChar(CHAR);
1116void WINAPI RtlUpperString(STRING *,const STRING *);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +00001117
1118NTSTATUS WINAPI RtlValidSecurityDescriptor(PSECURITY_DESCRIPTOR);
1119BOOL WINAPI RtlValidSid(PSID);
Francois Gougetbba4bb12002-09-17 01:35:09 +00001120BOOLEAN WINAPI RtlValidateHeap(HANDLE,ULONG,LPCVOID);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +00001121
1122NTSTATUS WINAPI RtlWalkHeap(HANDLE,PVOID);
1123
1124NTSTATUS WINAPI RtlpWaitForCriticalSection(RTL_CRITICAL_SECTION *);
1125NTSTATUS WINAPI RtlpUnWaitCriticalSection(RTL_CRITICAL_SECTION *);
1126
1127/***********************************************************************
1128 * Inline functions
1129 */
1130
1131#define InitializeObjectAttributes(p,n,a,r,s) \
1132 do { \
1133 (p)->Length = sizeof(OBJECT_ATTRIBUTES); \
1134 (p)->RootDirectory = r; \
1135 (p)->Attributes = a; \
1136 (p)->ObjectName = n; \
1137 (p)->SecurityDescriptor = s; \
1138 (p)->SecurityQualityOfService = NULL; \
1139 } while (0)
1140
1141#define NtCurrentProcess() ((HANDLE)-1)
1142
1143#define RtlFillMemory(Destination,Length,Fill) memset((Destination),(Fill),(Length))
1144#define RtlMoveMemory(Destination,Source,Length) memmove((Destination),(Source),(Length))
1145#define RtlStoreUlong(p,v) do { ULONG _v = (v); memcpy((p), &_v, sizeof(_v)); } while (0)
1146#define RtlStoreUlonglong(p,v) do { ULONGLONG _v = (v); memcpy((p), &_v, sizeof(_v)); } while (0)
1147#define RtlRetrieveUlong(p,s) memcpy((p), (s), sizeof(ULONG))
1148#define RtlRetrieveUlonglong(p,s) memcpy((p), (s), sizeof(ULONGLONG))
1149#define RtlZeroMemory(Destination,Length) memset((Destination),0,(Length))
1150
1151inline static BOOLEAN RtlCheckBit(PCRTL_BITMAP lpBits, ULONG ulBit)
1152{
1153 if (lpBits && ulBit < lpBits->SizeOfBitMap &&
1154 lpBits->BitMapBuffer[ulBit >> 3] & (1 << (ulBit & 7)))
1155 return TRUE;
1156 return FALSE;
1157}
1158
1159#define RtlClearAllBits(p) \
1160 do { \
1161 PRTL_BITMAP _p = (p); \
1162 memset(_p->BitMapBuffer,0,((_p->SizeOfBitMap + 31) & 0xffffffe0) >> 3); \
1163 } while (0)
1164
1165#define RtlInitializeBitMap(p,b,s) \
1166 do { \
1167 PRTL_BITMAP _p = (p); \
1168 _p->SizeOfBitMap = (s); \
1169 _p->BitMapBuffer = (b); \
1170 } while (0)
1171
1172#define RtlSetAllBits(p) \
1173 do { \
1174 PRTL_BITMAP _p = (p); \
1175 memset(_p->BitMapBuffer,0xff,((_p->SizeOfBitMap + 31) & 0xffffffe0) >> 3); \
1176 } while (0)
1177
Alexandre Julliard6da4c272003-03-19 00:09:57 +00001178/* These are implemented as __fastcall, so we can't let Winelib apps link with them */
1179inline static USHORT RtlUshortByteSwap(USHORT s)
1180{
1181 return (s >> 8) | (s << 8);
1182}
1183inline static ULONG RtlUlongByteSwap(ULONG i)
1184{
1185#if defined(__i386__) && defined(__GNUC__)
1186 ULONG ret;
1187 __asm__("bswap %0" : "=r" (ret) : "0" (i) );
1188 return ret;
1189#else
1190 return ((ULONG)RtlUshortByteSwap(i) << 16) | RtlUshortByteSwap(i >> 16);
1191#endif
1192}
1193
Eric Pouech7d609642003-03-04 04:36:56 +00001194/*************************************************************************
1195 * Loader functions and structures.
1196 *
1197 * Those are not part of standard Winternl.h
1198 */
1199typedef struct _LDR_MODULE
1200{
1201 LIST_ENTRY InLoadOrderModuleList;
1202 LIST_ENTRY InMemoryOrderModuleList;
1203 LIST_ENTRY InInitializationOrderModuleList;
1204 void* BaseAddress;
Eric Pouech32872b12003-03-14 05:01:20 +00001205 void* EntryPoint;
Eric Pouech7d609642003-03-04 04:36:56 +00001206 ULONG SizeOfImage;
1207 UNICODE_STRING FullDllName;
1208 UNICODE_STRING BaseDllName;
1209 ULONG Flags;
1210 SHORT LoadCount;
1211 SHORT TlsIndex;
1212 HANDLE SectionHandle;
1213 ULONG CheckSum;
1214 ULONG TimeDateStamp;
1215} LDR_MODULE, *PLDR_MODULE;
1216
Eric Pouech19e050e2003-03-20 23:40:08 +00001217/* those defines are (some of the) regular LDR_MODULE.Flags values */
1218#define LDR_IMAGE_IS_DLL 0x00000004
1219#define LDR_LOAD_IN_PROGRESS 0x00001000
1220#define LDR_UNLOAD_IN_PROGRESS 0x00002000
1221#define LDR_NO_DLL_CALLS 0x00040000
1222#define LDR_PROCESS_ATTACHED 0x00080000
1223#define LDR_MODULE_REBASED 0x00200000
1224
1225/* these ones is Wine specific */
1226#define LDR_DONT_RESOLVE_REFS 0x40000000
1227#define LDR_WINE_INTERNAL 0x80000000
1228
Eric Pouech7d609642003-03-04 04:36:56 +00001229/* FIXME: to be checked */
1230#define MAXIMUM_FILENAME_LENGTH 256
1231
1232typedef struct _SYSTEM_MODULE
1233{
1234 ULONG Reserved1;
1235 ULONG Reserved2;
1236 PVOID ImageBaseAddress;
1237 ULONG ImageSize;
1238 ULONG Flags;
1239 WORD Id;
1240 WORD Rank;
1241 WORD Unknown;
1242 WORD NameOffset;
1243 BYTE Name[MAXIMUM_FILENAME_LENGTH];
1244} SYSTEM_MODULE, *PSYSTEM_MODULE;
1245
1246typedef struct _SYSTEM_MODULE_INFORMATION
1247{
1248 ULONG ModulesCount;
1249 SYSTEM_MODULE Modules[1]; /* FIXME: should be Modules[0] */
1250} SYSTEM_MODULE_INFORMATION, *PSYSTEM_MODULE_INFORMATION;
1251
1252typedef struct _LDR_RESOURCE_INFO
1253{
1254 ULONG Type;
1255 ULONG Name;
1256 ULONG Language;
1257} LDR_RESOURCE_INFO, *PLDR_RESOURCE_INFO;
1258
Alexandre Julliard500a2f92003-03-20 04:29:21 +00001259NTSTATUS WINAPI LdrAccessResource(HMODULE, PIMAGE_RESOURCE_DATA_ENTRY, void**, PULONG);
Eric Pouech7d609642003-03-04 04:36:56 +00001260NTSTATUS WINAPI LdrDisableThreadCalloutsForDll(HMODULE);
Eric Pouech84d1a8f2003-03-18 18:29:13 +00001261NTSTATUS WINAPI LdrFindEntryForAddress(const void*, PLDR_MODULE*);
Alexandre Julliard500a2f92003-03-20 04:29:21 +00001262NTSTATUS WINAPI LdrFindResourceDirectory_U(HMODULE,PLDR_RESOURCE_INFO, DWORD,
1263 PIMAGE_RESOURCE_DIRECTORY_ENTRY*);
1264NTSTATUS WINAPI LdrFindResource_U(HMODULE, PLDR_RESOURCE_INFO, ULONG,
1265 PIMAGE_RESOURCE_DATA_ENTRY*);
Eric Pouech7d609642003-03-04 04:36:56 +00001266NTSTATUS WINAPI LdrGetDllHandle(ULONG, ULONG, PUNICODE_STRING, HMODULE*);
1267NTSTATUS WINAPI LdrGetProcedureAddress(HMODULE, PANSI_STRING, ULONG, void**);
Eric Pouech32872b12003-03-14 05:01:20 +00001268NTSTATUS WINAPI LdrLoadDll(LPCWSTR, DWORD, PUNICODE_STRING, HMODULE*);
Alexandre Julliard500a2f92003-03-20 04:29:21 +00001269NTSTATUS WINAPI LdrLockLoaderLock(ULONG,ULONG*,ULONG*);
Eric Pouech051f8712003-03-21 00:34:36 +00001270NTSTATUS WINAPI LdrQueryProcessModuleInformation(SYSTEM_MODULE_INFORMATION*, ULONG, ULONG*);
Eric Pouech7d609642003-03-04 04:36:56 +00001271NTSTATUS WINAPI LdrShutdownProcess(void);
Alexandre Julliard500a2f92003-03-20 04:29:21 +00001272NTSTATUS WINAPI LdrShutdownThread(void);
Eric Pouech7d609642003-03-04 04:36:56 +00001273NTSTATUS WINAPI LdrUnloadDll(HMODULE);
Alexandre Julliard500a2f92003-03-20 04:29:21 +00001274NTSTATUS WINAPI LdrUnlockLoaderLock(ULONG,ULONG);
Eric Pouech7d609642003-03-04 04:36:56 +00001275
Patrik Stridvalleba96492002-09-10 00:33:34 +00001276#ifdef __cplusplus
1277} /* extern "C" */
1278#endif /* defined(__cplusplus) */
1279
1280#endif /* __WINE_WINTERNAL_H */