blob: 3568a36bc62cb1271593ac3a23af70dadd4549b8 [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
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +000092/***********************************************************************
93 * Enums
94 */
Patrik Stridvalleba96492002-09-10 00:33:34 +000095
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +000096typedef enum _FILE_INFORMATION_CLASS {
97 FileDirectoryInformation = 1,
98 FileFullDirectoryInformation,
99 FileBothDirectoryInformation,
100 FileBasicInformation,
101 FileStandardInformation,
102 FileInternalInformation,
103 FileEaInformation,
104 FileAccessInformation,
105 FileNameInformation,
106 FileRenameInformation,
107 FileLinkInformation,
108 FileNamesInformation,
109 FileDispositionInformation,
110 FilePositionInformation,
111 FileFullEaInformation,
112 FileModeInformation,
113 FileAlignmentInformation,
114 FileAllInformation,
115 FileAllocationInformation,
116 FileEndOfFileInformation,
117 FileAlternateNameInformation,
118 FileStreamInformation,
119 FilePipeInformation,
120 FilePipeLocalInformation,
121 FilePipeRemoteInformation,
122 FileMailslotQueryInformation,
123 FileMailslotSetInformation,
124 FileCompressionInformation,
125 FileObjectIdInformation,
126 FileCompletionInformation,
127 FileMoveClusterInformation,
128 FileQuotaInformation,
129 FileReparsePointInformation,
130 FileNetworkOpenInformation,
131 FileAttributeTagInformation,
132 FileTrackingInformation,
133 FileMaximumInformation
134} FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;
Patrik Stridvalleba96492002-09-10 00:33:34 +0000135
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000136typedef enum _FSINFOCLASS {
137 FileFsVolumeInformation = 1,
138 FileFsLabelInformation,
139 FileFsSizeInformation,
140 FileFsDeviceInformation,
141 FileFsAttributeInformation,
142 FileFsControlInformation,
143 FileFsFullSizeInformation,
144 FileFsObjectIdInformation,
145 FileFsMaximumInformation
146} FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS;
Patrik Stridvalleba96492002-09-10 00:33:34 +0000147
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000148typedef enum _KEY_INFORMATION_CLASS {
149 KeyBasicInformation,
150 KeyNodeInformation,
151 KeyFullInformation
152} KEY_INFORMATION_CLASS;
153
154typedef enum _KEY_VALUE_INFORMATION_CLASS {
155 KeyValueBasicInformation,
156 KeyValueFullInformation,
157 KeyValuePartialInformation,
158 KeyValueFullInformationAlign64,
159 KeyValuePartialInformationAlign64
160} KEY_VALUE_INFORMATION_CLASS;
161
162typedef enum _OBJECT_INFORMATION_CLASS {
163 DunnoTheConstants1 /* FIXME */
164} OBJECT_INFORMATION_CLASS, *POBJECT_INFORMATION_CLASS;
165
166typedef enum _PROCESSINFOCLASS {
167 ProcessBasicInformation = 0,
168 ProcessQuotaLimits = 1,
169 ProcessIoCounters = 2,
170 ProcessVmCounters = 3,
171 ProcessTimes = 4,
172 ProcessBasePriority = 5,
173 ProcessRaisePriority = 6,
174 ProcessDebugPort = 7,
175 ProcessExceptionPort = 8,
176 ProcessAccessToken = 9,
177 ProcessLdtInformation = 10,
178 ProcessLdtSize = 11,
179 ProcessDefaultHardErrorMode = 12,
180 ProcessIoPortHandlers = 13,
181 ProcessPooledUsageAndLimits = 14,
182 ProcessWorkingSetWatch = 15,
183 ProcessUserModeIOPL = 16,
184 ProcessEnableAlignmentFaultFixup = 17,
185 ProcessPriorityClass = 18,
186 ProcessWx86Information = 19,
187 ProcessHandleCount = 20,
188 ProcessAffinityMask = 21,
189 ProcessPriorityBoost = 22,
190 ProcessDeviceMap = 23,
191 ProcessSessionInformation = 24,
192 ProcessForegroundInformation = 25,
193 ProcessWow64Information = 26,
194 MaxProcessInfoClass
195} PROCESSINFOCLASS;
196
197typedef enum _SECTION_INHERIT {
198 ViewShare = 1,
199 ViewUnmap = 2
200} SECTION_INHERIT;
201
202typedef enum SYSTEM_INFORMATION_CLASS {
203 SystemBasicInformation = 0,
204 Unknown1,
205 SystemPerformanceInformation = 2,
206 SystemTimeOfDayInformation = 3, /* was SystemTimeInformation */
207 Unknown4,
208 SystemProcessInformation = 5,
209 Unknown6,
210 Unknown7,
211 SystemProcessorPerformanceInformation = 8,
212 Unknown9,
213 Unknown10,
214 SystemDriverInformation,
215 Unknown12,
216 Unknown13,
217 Unknown14,
218 Unknown15,
219 SystemHandleList,
220 Unknown17,
221 Unknown18,
222 Unknown19,
223 Unknown20,
224 SystemCacheInformation,
225 Unknown22,
226 SystemInterruptInformation = 23,
227 SystemExceptionInformation = 33,
228 SystemRegistryQuotaInformation = 37,
229 SystemLookasideInformation = 45
230} SYSTEM_INFORMATION_CLASS, *PSYSTEM_INFORMATION_CLASS;
231
232typedef enum _TIMER_TYPE {
233 NotificationTimer,
234 SynchronizationTimer
235} TIMER_TYPE;
236
237typedef enum _THREADINFOCLASS {
238 ThreadBasicInformation,
239 ThreadTimes,
240 ThreadPriority,
241 ThreadBasePriority,
242 ThreadAffinityMask,
243 ThreadImpersonationToken,
244 ThreadDescriptorTableEntry,
245 ThreadEnableAlignmentFaultFixup,
246 ThreadEventPair_Reusable,
247 ThreadQuerySetWin32StartAddress,
248 ThreadZeroTlsCell,
249 ThreadPerformanceCount,
250 ThreadAmILastThread,
251 ThreadIdealProcessor,
252 ThreadPriorityBoost,
253 ThreadSetTlsArrayAddress,
254 ThreadIsIoPending,
255 MaxThreadInfoClass
256} THREADINFOCLASS;
257
258typedef enum _WINSTATIONINFOCLASS {
259 WinStationInformation = 8
260} WINSTATIONINFOCLASS;
Patrik Stridvalleba96492002-09-10 00:33:34 +0000261
262/***********************************************************************
263 * IA64 specific types and data structures
264 */
265
266#ifdef __ia64__
267
268typedef struct _FRAME_POINTERS {
269 ULONGLONG MemoryStackFp;
270 ULONGLONG BackingStoreFp;
271} FRAME_POINTERS, *PFRAME_POINTERS;
272
273#define UNWIND_HISTORY_TABLE_SIZE 12
274
275typedef struct _RUNTIME_FUNCTION {
276 ULONG BeginAddress;
277 ULONG EndAddress;
278 ULONG UnwindInfoAddress;
279} RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;
280
281typedef struct _UNWIND_HISTORY_TABLE_ENTRY {
282 ULONG64 ImageBase;
283 ULONG64 Gp;
284 PRUNTIME_FUNCTION FunctionEntry;
285} UNWIND_HISTORY_TABLE_ENTRY, *PUNWIND_HISTORY_TABLE_ENTRY;
286
287typedef struct _UNWIND_HISTORY_TABLE {
288 ULONG Count;
289 UCHAR Search;
290 ULONG64 LowAddress;
291 ULONG64 HighAddress;
292 UNWIND_HISTORY_TABLE_ENTRY Entry[UNWIND_HISTORY_TABLE_SIZE];
293} UNWIND_HISTORY_TABLE, *PUNWIND_HISTORY_TABLE;
294
295#endif /* defined(__ia64__) */
296
297/***********************************************************************
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000298 * Types and data structures
Patrik Stridvalleba96492002-09-10 00:33:34 +0000299 */
300
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000301/* This is used by NtQuerySystemInformation */
302/* FIXME: Isn't THREAD_INFO and THREADINFO the same structure? */
303typedef struct {
304 FILETIME ftCreationTime;
305 DWORD dwUnknown1;
306 DWORD dwStartAddress;
307 DWORD dwOwningPID;
308 DWORD dwThreadID;
309 DWORD dwCurrentPriority;
310 DWORD dwBasePriority;
311 DWORD dwContextSwitches;
312 DWORD dwThreadState;
313 DWORD dwWaitReason;
314 DWORD dwUnknown2[5];
315} THREADINFO, *PTHREADINFO;
316
317/* FIXME: Isn't THREAD_INFO and THREADINFO the same structure? */
318typedef struct _THREAD_INFO{
319 DWORD Unknown1[6];
320 DWORD ThreadID;
321 DWORD Unknown2[3];
322 DWORD Status;
323 DWORD WaitReason;
324 DWORD Unknown3[4];
325} THREAD_INFO, PTHREAD_INFO;
326
327/***********************************************************************
328 * Types and data structures
329 */
330
331typedef struct _IO_STATUS_BLOCK {
332 union {
333 NTSTATUS Status;
334 PVOID Pointer;
335 } DUMMYUNIONNAME;
336
337 ULONG_PTR Information;
338} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
339
340typedef void (WINAPI * PIO_APC_ROUTINE)(PVOID,PIO_STATUS_BLOCK,ULONG);
341
342typedef struct _KEY_BASIC_INFORMATION {
343 LARGE_INTEGER LastWriteTime;
344 ULONG TitleIndex;
345 ULONG NameLength;
346 WCHAR Name[1];
347} KEY_BASIC_INFORMATION, *PKEY_BASIC_INFORMATION;
348
349typedef struct _KEY_NODE_INFORMATION
350{
351 LARGE_INTEGER LastWriteTime;
352 ULONG TitleIndex;
353 ULONG ClassOffset;
354 ULONG ClassLength;
355 ULONG NameLength;
356 WCHAR Name[1];
357 /* Class[1]; */
358} KEY_NODE_INFORMATION, *PKEY_NODE_INFORMATION;
359
360typedef struct _KEY_FULL_INFORMATION
361{
362 LARGE_INTEGER LastWriteTime;
363 ULONG TitleIndex;
364 ULONG ClassOffset;
365 ULONG ClassLength;
366 ULONG SubKeys;
367 ULONG MaxNameLen;
368 ULONG MaxClassLen;
369 ULONG Values;
370 ULONG MaxValueNameLen;
371 ULONG MaxValueDataLen;
372 WCHAR Class[1];
373} KEY_FULL_INFORMATION, *PKEY_FULL_INFORMATION;
374
375typedef struct _KEY_VALUE_ENTRY
376{
377 PUNICODE_STRING ValueName;
378 ULONG DataLength;
379 ULONG DataOffset;
380 ULONG Type;
381} KEY_VALUE_ENTRY, *PKEY_VALUE_ENTRY;
382
383typedef struct _KEY_VALUE_BASIC_INFORMATION {
384 ULONG TitleIndex;
385 ULONG Type;
386 ULONG NameLength;
387 WCHAR Name[1];
388} KEY_VALUE_BASIC_INFORMATION, *PKEY_VALUE_BASIC_INFORMATION;
389
390typedef struct _KEY_VALUE_FULL_INFORMATION {
391 ULONG TitleIndex;
392 ULONG Type;
393 ULONG DataOffset;
394 ULONG DataLength;
395 ULONG NameLength;
396 WCHAR Name[1];
397} KEY_VALUE_FULL_INFORMATION, *PKEY_VALUE_FULL_INFORMATION;
398
399typedef struct _KEY_VALUE_PARTIAL_INFORMATION {
400 ULONG TitleIndex;
401 ULONG Type;
402 ULONG DataLength;
403 UCHAR Data[1];
404} KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION;
405
406typedef struct _OBJECT_ATTRIBUTES {
407 ULONG Length;
408 HANDLE RootDirectory;
409 PUNICODE_STRING ObjectName;
410 ULONG Attributes;
411 PVOID SecurityDescriptor; /* type SECURITY_DESCRIPTOR */
412 PVOID SecurityQualityOfService; /* type SECURITY_QUALITY_OF_SERVICE */
413} OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;
414
Patrik Stridvalleba96492002-09-10 00:33:34 +0000415typedef struct _PROCESS_BASIC_INFORMATION {
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000416#ifdef __WINE__
417 DWORD ExitStatus;
418 DWORD PebBaseAddress;
419 DWORD AffinityMask;
420 DWORD BasePriority;
421 ULONG UniqueProcessId;
422 ULONG InheritedFromUniqueProcessId;
423#else
Patrik Stridvalleba96492002-09-10 00:33:34 +0000424 PVOID Reserved1;
425 PPEB PebBaseAddress;
426 PVOID Reserved2[2];
427 ULONG_PTR UniqueProcessId;
428 PVOID Reserved3;
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000429#endif
Patrik Stridvalleba96492002-09-10 00:33:34 +0000430} PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION;
431
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000432typedef struct _PROCESS_INFO {
433 DWORD Offset; /* 00 offset to next PROCESS_INFO ok*/
434 DWORD ThreadCount; /* 04 number of ThreadInfo member ok */
435 DWORD Unknown1[6];
436 FILETIME CreationTime; /* 20 */
437 DWORD Unknown2[5];
438 PWCHAR ProcessName; /* 3c ok */
439 DWORD BasePriority;
440 DWORD ProcessID; /* 44 ok*/
441 DWORD ParentProcessID;
442 DWORD HandleCount;
443 DWORD Unknown3[2]; /* 50 */
444 ULONG PeakVirtualSize;
445 ULONG VirtualSize;
446 ULONG PageFaultCount;
447 ULONG PeakWorkingSetSize;
448 ULONG WorkingSetSize;
449 ULONG QuotaPeakPagedPoolUsage;
450 ULONG QuotaPagedPoolUsage;
451 ULONG QuotaPeakNonPagedPoolUsage;
452 ULONG QuotaNonPagedPoolUsage;
453 ULONG PagefileUsage;
454 ULONG PeakPagefileUsage;
455 DWORD PrivateBytes;
456 DWORD Unknown6[4];
457 THREAD_INFO ati[ANYSIZE_ARRAY]; /* 94 size=0x40*/
458} PROCESS_INFO, PPROCESS_INFO;
Patrik Stridvalleba96492002-09-10 00:33:34 +0000459
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000460typedef struct _RTL_HEAP_DEFINITION {
461 ULONG Length; /* = sizeof(RTL_HEAP_DEFINITION) */
Patrik Stridvalleba96492002-09-10 00:33:34 +0000462
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000463 ULONG Unknown[11];
464} RTL_HEAP_DEFINITION, *PRTL_HEAP_DEFINITION;
Patrik Stridvalleba96492002-09-10 00:33:34 +0000465
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000466typedef struct tagRTL_BITMAP {
467 ULONG SizeOfBitMap; /* Number of bits in the bitmap */
468 LPBYTE BitMapBuffer; /* Bitmap data, assumed sized to a DWORD boundary */
469} RTL_BITMAP, *PRTL_BITMAP;
470
471typedef const RTL_BITMAP *PCRTL_BITMAP;
472
473typedef struct tagRTL_BITMAP_RUN {
474 ULONG StartOfRun; /* Bit position at which run starts - FIXME: Name? */
475 ULONG SizeOfRun; /* Size of the run in bits - FIXME: Name? */
476} RTL_BITMAP_RUN, *PRTL_BITMAP_RUN;
477
478typedef const RTL_BITMAP_RUN *PCRTL_BITMAP_RUN;
479
480typedef struct _RTL_RWLOCK {
481 RTL_CRITICAL_SECTION rtlCS;
482
483 HANDLE hSharedReleaseSemaphore;
484 UINT uSharedWaiters;
485
486 HANDLE hExclusiveReleaseSemaphore;
487 UINT uExclusiveWaiters;
488
489 INT iNumberActive;
490 HANDLE hOwningThreadId;
491 DWORD dwTimeoutBoost;
492 PVOID pDebugInfo;
493} RTL_RWLOCK, *LPRTL_RWLOCK;
494
495/* System Information Class 0x00 */
Patrik Stridvalleba96492002-09-10 00:33:34 +0000496typedef struct _SYSTEM_BASIC_INFORMATION {
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000497#ifdef __WINE__
498 DWORD dwUnknown1;
499 ULONG uKeMaximumIncrement;
500 ULONG uPageSize;
501 ULONG uMmNumberOfPhysicalPages;
502 ULONG uMmLowestPhysicalPage;
503 ULONG uMmHighestPhysicalPage;
504 ULONG uAllocationGranularity;
505 PVOID pLowestUserAddress;
506 PVOID pMmHighestUserAddress;
507 ULONG uKeActiveProcessors;
508 BYTE bKeNumberProcessors;
509 BYTE bUnknown2;
510 WORD wUnknown3;
511#else
Patrik Stridvalleba96492002-09-10 00:33:34 +0000512 BYTE Reserved1[24];
513 PVOID Reserved2[4];
514 CCHAR NumberOfProcessors;
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000515#endif
Patrik Stridvalleba96492002-09-10 00:33:34 +0000516} SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION;
517
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000518/* System Information Class 0x15 */
519typedef struct {
520 ULONG CurrentSize;
521 ULONG PeakSize;
522 ULONG PageFaultCount;
523 ULONG MinimumWorkingSet;
524 ULONG MaximumWorkingSet;
525 ULONG unused[4];
526} SYSTEM_CACHE_INFORMATION;
Patrik Stridvalleba96492002-09-10 00:33:34 +0000527
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000528typedef struct _SYSTEM_CONFIGURATION_INFO {
529 union {
530 ULONG OemId;
531 struct {
532 WORD ProcessorArchitecture;
533 WORD Reserved;
534 } tag1;
535 } tag2;
536 ULONG PageSize;
537 PVOID MinimumApplicationAddress;
538 PVOID MaximumApplicationAddress;
539 ULONG ActiveProcessorMask;
540 ULONG NumberOfProcessors;
541 ULONG ProcessorType;
542 ULONG AllocationGranularity;
543 WORD ProcessorLevel;
544 WORD ProcessorRevision;
545} SYSTEM_CONFIGURATION_INFO, *PSYSTEM_CONFIGURATION_INFO;
546
547/* System Information Class 0x0b */
548typedef struct {
549 PVOID pvAddress;
550 DWORD dwUnknown1;
551 DWORD dwUnknown2;
552 DWORD dwEntryIndex;
553 DWORD dwUnknown3;
554 char szName[MAX_PATH + 1];
555} SYSTEM_DRIVER_INFORMATION;
Patrik Stridvalleba96492002-09-10 00:33:34 +0000556
557typedef struct _SYSTEM_EXCEPTION_INFORMATION {
558 BYTE Reserved1[16];
559} SYSTEM_EXCEPTION_INFORMATION, *PSYSTEM_EXCEPTION_INFORMATION;
560
561typedef struct _SYSTEM_LOOKASIDE_INFORMATION {
562 BYTE Reserved1[32];
563} SYSTEM_LOOKASIDE_INFORMATION, *PSYSTEM_LOOKASIDE_INFORMATION;
564
565typedef struct _SYSTEM_INTERRUPT_INFORMATION {
566 BYTE Reserved1[24];
567} SYSTEM_INTERRUPT_INFORMATION, *PSYSTEM_INTERRUPT_INFORMATION;
568
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000569/* System Information Class 0x10 */
570typedef struct {
571 USHORT dwPID;
572 USHORT dwCreatorBackTraceIndex;
573 BYTE bObjectType;
574 BYTE bHandleAttributes;
575 USHORT usHandleOffset;
576 DWORD dwKeObject;
577 ULONG ulGrantedAccess;
578} HANDLEINFO, *PHANDLEINFO; /* FIXME: SYSTEM_HANDLE_INFORMATION? */
Patrik Stridvalleba96492002-09-10 00:33:34 +0000579
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000580typedef struct _SYSTEM_PERFORMANCE_INFORMATION {
581 BYTE Reserved1[312];
582} SYSTEM_PERFORMANCE_INFORMATION, *PSYSTEM_PERFORMANCE_INFORMATION;
Patrik Stridvalleba96492002-09-10 00:33:34 +0000583
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000584/* System Information Class 0x02 */
585typedef struct _SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION {
586#ifdef __WINE__
587 LARGE_INTEGER liIdleTime;
588 DWORD dwSpare[76];
589#else
590 LARGE_INTEGER IdleTime;
591 LARGE_INTEGER KernelTime;
592 LARGE_INTEGER UserTime;
593 LARGE_INTEGER Reserved1[2];
594 ULONG Reserved2;
Patrik Stridvalleba96492002-09-10 00:33:34 +0000595#endif
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000596} SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION, *PSYSTEM_PROCESSOR_PERFORMANCE_INFORMATION;
Patrik Stridvalleba96492002-09-10 00:33:34 +0000597
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000598/* System Information Class 0x05 */
599typedef struct _SYSTEM_PROCESS_INFORMATION {
600#ifdef __WINE__
601 DWORD dwOffset;
602 DWORD dwThreadCount;
603 DWORD dwUnknown1[6];
604 FILETIME ftCreationTime;
605 DWORD dwUnknown2[5];
606 WCHAR *pszProcessName;
607 DWORD dwBasePriority;
608 DWORD dwProcessID;
609 DWORD dwParentProcessID;
610 DWORD dwHandleCount;
611 DWORD dwUnknown3;
612 DWORD dwUnknown4;
613 DWORD dwVirtualBytesPeak;
614 DWORD dwVirtualBytes;
615 DWORD dwPageFaults;
616 DWORD dwWorkingSetPeak;
617 DWORD dwWorkingSet;
618 DWORD dwUnknown5;
619 DWORD dwPagedPool;
620 DWORD dwUnknown6;
621 DWORD dwNonPagedPool;
622 DWORD dwPageFileBytesPeak;
623 DWORD dwPrivateBytes;
624 DWORD dwPageFileBytes;
625 DWORD dwUnknown7[4];
626 THREADINFO ti[1];
627#else
628 ULONG NextEntryOffset;
629 BYTE Reserved1[52];
630 PVOID Reserved2[3];
631 HANDLE UniqueProcessId;
632 PVOID Reserved3;
633 ULONG HandleCount;
634 BYTE Reserved4[4];
635 PVOID Reserved5[11];
636 SIZE_T PeakPagefileUsage;
637 SIZE_T PrivatePageCount;
638 LARGE_INTEGER Reserved6[6];
639#endif
640} SYSTEM_PROCESS_INFORMATION, *PSYSTEM_PROCESS_INFORMATION;
Patrik Stridvalleba96492002-09-10 00:33:34 +0000641
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000642typedef struct _SYSTEM_REGISTRY_QUOTA_INFORMATION {
643 ULONG RegistryQuotaAllowed;
644 ULONG RegistryQuotaUsed;
645 PVOID Reserved1;
646} SYSTEM_REGISTRY_QUOTA_INFORMATION, *PSYSTEM_REGISTRY_QUOTA_INFORMATION;
Patrik Stridvalleba96492002-09-10 00:33:34 +0000647
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000648typedef struct _SYSTEM_TIME_ADJUSTMENT {
649 ULONG TimeAdjustment;
650 BOOLEAN TimeAdjustmentDisabled;
651} SYSTEM_TIME_ADJUSTMENT, *PSYSTEM_TIME_ADJUSTMENT;
652
653/* System Information Class 0x03 */
654typedef struct _SYSTEM_TIMEOFDAY_INFORMATION {
655#ifdef __WINE__
656 LARGE_INTEGER liKeBootTime;
657 LARGE_INTEGER liKeSystemTime;
658 LARGE_INTEGER liExpTimeZoneBias;
659 ULONG uCurrentTimeZoneId;
660 DWORD dwReserved;
661#else
662 BYTE Reserved1[48];
663#endif
664} SYSTEM_TIMEOFDAY_INFORMATION, *PSYSTEM_TIMEOFDAY_INFORMATION; /* was SYSTEM_TIME_INFORMATION */
665
666typedef struct _TIME_FIELDS
667{ CSHORT Year;
668 CSHORT Month;
669 CSHORT Day;
670 CSHORT Hour;
671 CSHORT Minute;
672 CSHORT Second;
673 CSHORT Milliseconds;
674 CSHORT Weekday;
675} TIME_FIELDS, *PTIME_FIELDS;
Patrik Stridvalleba96492002-09-10 00:33:34 +0000676
677typedef struct _WINSTATIONINFORMATIONW {
678 BYTE Reserved2[70];
679 ULONG LogonId;
680 BYTE Reserved3[1140];
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000681} WINSTATIONINFORMATIONW, *PWINSTATIONINFORMATIONW;
682
683typedef struct _VM_COUNTERS_ {
684 ULONG PeakVirtualSize;
685 ULONG VirtualSize;
686 ULONG PageFaultCount;
687 ULONG PeakWorkingSetSize;
688 ULONG WorkingSetSize;
689 ULONG QuotaPeakPagedPoolUsage;
690 ULONG QuotaPagedPoolUsage;
691 ULONG QuotaPeakNonPagedPoolUsage;
692 ULONG QuotaNonPagedPoolUsage;
693 ULONG PagefileUsage;
694 ULONG PeakPagefileUsage;
695} VM_COUNTERS, *PVM_COUNTERS;
Patrik Stridvalleba96492002-09-10 00:33:34 +0000696
697typedef BOOLEAN (WINAPI * PWINSTATIONQUERYINFORMATIONW)(HANDLE,ULONG,WINSTATIONINFOCLASS,PVOID,ULONG,PULONG);
698
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000699/***********************************************************************
700 * Defines
701 */
702
703/* flags for NtCreateFile and NtOpenFile */
704#define FILE_DIRECTORY_FLAG 0x00000001
705#define FILE_WRITE_THROUGH 0x00000002
706#define FILE_SEQUENTIAL_ONLY 0x00000004
707#define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
708#define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
709#define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
710#define FILE_NON_DIRECTORY_FILE 0x00000040
711#define FILE_CREATE_TREE_CONNECTION 0x00000080
712
713/* status for NtCreateFile or NtOpenFile */
714#define FILE_SUPERSEDED 0x00000000
715#define FILE_OPENED 0x00000001
716#define FILE_CREATED 0x00000002
717#define FILE_OVERWRITTEN 0x00000003
718#define FILE_EXISTS 0x00000004
719#define FILE_DOES_NOT_EXIST 0x00000005
720
721#if (_WIN32_WINNT >= 0x0501)
722#define INTERNAL_TS_ACTIVE_CONSOLE_ID ( *((volatile ULONG*)(0x7ffe02d8)) )
723#endif /* (_WIN32_WINNT >= 0x0501) */
724
725#define LOGONID_CURRENT ((ULONG)-1)
726
727#define OBJ_INHERIT 0x00000002L
728#define OBJ_PERMANENT 0x00000010L
729#define OBJ_EXCLUSIVE 0x00000020L
730#define OBJ_CASE_INSENSITIVE 0x00000040L
731#define OBJ_OPENIF 0x00000080L
732#define OBJ_OPENLINK 0x00000100L
733#define OBJ_KERNEL_HANDLE 0x00000200L
734#define OBJ_VALID_ATTRIBUTES 0x000003F2L
735
736#define SERVERNAME_CURRENT ((HANDLE)NULL)
737
738/***********************************************************************
739 * Function declarations
740 */
741
742extern LPSTR _strlwr(LPSTR str); /* FIXME: Doesn't belong here */
743extern LPSTR _strupr(LPSTR str); /* FIXME: Doesn't belong here */
744
745#if defined(__i386__) && defined(__GNUC__)
746static inline void WINAPI DbgBreakPoint(void) { __asm__ __volatile__("int3"); }
747static inline void WINAPI DbgUserBreakPoint(void) { __asm__ __volatile__("int3"); }
748#else /* __i386__ && __GNUC__ */
749void WINAPI DbgBreakPoint(void);
750void WINAPI DbgUserBreakPoint(void);
751#endif /* __i386__ && __GNUC__ */
752void WINAPIV DbgPrint(LPCSTR fmt, ...);
753
754NTSTATUS WINAPI NtAccessCheck(PSECURITY_DESCRIPTOR,HANDLE,ACCESS_MASK,PGENERIC_MAPPING,PPRIVILEGE_SET,PULONG,PULONG,PBOOLEAN);
755NTSTATUS WINAPI NtAdjustPrivilegesToken(HANDLE,BOOLEAN,PTOKEN_PRIVILEGES,DWORD,PTOKEN_PRIVILEGES,PDWORD);
756NTSTATUS WINAPI NtClearEvent(HANDLE);
757NTSTATUS WINAPI NtClose(HANDLE);
758NTSTATUS WINAPI NtCreateEvent(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *,BOOLEAN,BOOLEAN);
759NTSTATUS WINAPI NtCreateFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,PLARGE_INTEGER,ULONG,ULONG,ULONG,ULONG,PVOID,ULONG);
760NTSTATUS WINAPI NtCreateKey(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,ULONG,const UNICODE_STRING*,ULONG,PULONG);
761NTSTATUS WINAPI NtCreateSemaphore(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,ULONG,ULONG);
762NTSTATUS WINAPI NtDeleteKey(HANDLE);
763NTSTATUS WINAPI NtDeleteValueKey(HANDLE,const UNICODE_STRING *);
764NTSTATUS WINAPI NtDeviceIoControlFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,PVOID,ULONG,PVOID,ULONG);
Alexandre Julliardac7b9d32002-09-16 19:32:50 +0000765NTSTATUS WINAPI NtDuplicateObject(HANDLE,HANDLE,HANDLE,PHANDLE,ACCESS_MASK,ULONG,ULONG);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000766NTSTATUS WINAPI NtEnumerateKey(HANDLE,ULONG,KEY_INFORMATION_CLASS,void *,DWORD,DWORD *);
767NTSTATUS WINAPI NtEnumerateValueKey(HANDLE,ULONG,KEY_VALUE_INFORMATION_CLASS,PVOID,ULONG,PULONG);
768NTSTATUS WINAPI NtFlushKey(HANDLE);
769NTSTATUS WINAPI NtLoadKey(const OBJECT_ATTRIBUTES *,const OBJECT_ATTRIBUTES *);
770NTSTATUS WINAPI NtNotifyChangeKey(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,BOOLEAN,PVOID,ULONG,BOOLEAN);
771NTSTATUS WINAPI NtOpenEvent(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *);
772NTSTATUS WINAPI NtOpenFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,ULONG,ULONG);
773NTSTATUS WINAPI NtOpenKey(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *);
774NTSTATUS WINAPI NtOpenProcessToken(HANDLE,DWORD,HANDLE *);
775NTSTATUS WINAPI NtOpenThreadToken(HANDLE,DWORD,BOOLEAN,HANDLE *);
776NTSTATUS WINAPI NtPulseEvent(HANDLE,PULONG);
777NTSTATUS WINAPI NtQueryInformationProcess(HANDLE,PROCESSINFOCLASS,PVOID,ULONG,PULONG);
778NTSTATUS WINAPI NtQueryInformationThread(HANDLE,THREADINFOCLASS,PVOID,ULONG,PULONG);
779NTSTATUS WINAPI NtQueryInformationToken(HANDLE,DWORD,LPVOID,DWORD,LPDWORD);
780NTSTATUS WINAPI NtQueryKey(HANDLE,KEY_INFORMATION_CLASS,void *,DWORD,DWORD *);
781NTSTATUS WINAPI NtQueryMultipleValueKey(HANDLE,PVALENTW,ULONG,PVOID,ULONG,PULONG);
782NTSTATUS WINAPI NtQuerySecurityObject(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,ULONG,PULONG);
783NTSTATUS WINAPI NtQuerySystemInformation(SYSTEM_INFORMATION_CLASS,PVOID,ULONG,PULONG);
784NTSTATUS WINAPI NtQuerySystemTime(PLARGE_INTEGER);
785NTSTATUS WINAPI NtQueryValueKey(HANDLE,const UNICODE_STRING *,KEY_VALUE_INFORMATION_CLASS,void *,DWORD,DWORD *);
786void WINAPI NtRaiseException(PEXCEPTION_RECORD,PCONTEXT,BOOL);
787NTSTATUS WINAPI NtReadFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,PVOID,ULONG,PLARGE_INTEGER,PULONG);
788NTSTATUS WINAPI NtReleaseSemaphore(HANDLE,ULONG,PULONG);
789NTSTATUS WINAPI NtResetEvent(HANDLE,PULONG);
790NTSTATUS WINAPI NtRestoreKey(HANDLE,HANDLE,ULONG);
791NTSTATUS WINAPI NtReplaceKey(POBJECT_ATTRIBUTES,HANDLE,POBJECT_ATTRIBUTES);
792NTSTATUS WINAPI NtSaveKey(HANDLE,HANDLE);
793NTSTATUS WINAPI NtSetEvent(HANDLE,PULONG);
794NTSTATUS WINAPI NtSetInformationKey(HANDLE,const int,PVOID,ULONG);
795NTSTATUS WINAPI NtSetSecurityObject(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR);
796NTSTATUS WINAPI NtSetValueKey(HANDLE,const UNICODE_STRING *,ULONG,ULONG,const void *,ULONG);
797NTSTATUS WINAPI NtTerminateProcess(HANDLE,LONG);
798NTSTATUS WINAPI NtTerminateThread(HANDLE,LONG);
799NTSTATUS WINAPI NtUnloadKey(HANDLE);
800NTSTATUS WINAPI NtWaitForSingleObject(HANDLE,BOOLEAN,PLARGE_INTEGER);
801
802void WINAPI RtlAcquirePebLock(void);
803BYTE WINAPI RtlAcquireResourceExclusive(LPRTL_RWLOCK,BYTE);
804BYTE WINAPI RtlAcquireResourceShared(LPRTL_RWLOCK,BYTE);
805NTSTATUS WINAPI RtlAddAce(PACL,DWORD,DWORD,PACE_HEADER,DWORD);
806BOOL WINAPI RtlAddAccessAllowedAce(PACL,DWORD,DWORD,PSID);
807BOOL WINAPI RtlAddAccessAllowedAceEx(PACL,DWORD,DWORD,DWORD,PSID);
808DWORD WINAPI RtlAdjustPrivilege(DWORD,DWORD,DWORD,DWORD);
809BOOLEAN WINAPI RtlAllocateAndInitializeSid(PSID_IDENTIFIER_AUTHORITY,BYTE,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,PSID *);
810PVOID WINAPI RtlAllocateHeap(HANDLE,ULONG,ULONG);
811DWORD WINAPI RtlAnsiStringToUnicodeSize(const STRING *);
812NTSTATUS WINAPI RtlAnsiStringToUnicodeString(PUNICODE_STRING,PCANSI_STRING,BOOLEAN);
813NTSTATUS WINAPI RtlAppendAsciizToString(STRING *,LPCSTR);
814NTSTATUS WINAPI RtlAppendStringToString(STRING *,const STRING *);
815NTSTATUS WINAPI RtlAppendUnicodeStringToString(UNICODE_STRING *,const UNICODE_STRING *);
816NTSTATUS WINAPI RtlAppendUnicodeToString(UNICODE_STRING *,LPCWSTR);
817BOOLEAN WINAPI RtlAreBitsSet(PCRTL_BITMAP,ULONG,ULONG);
818BOOLEAN WINAPI RtlAreBitsClear(PCRTL_BITMAP,ULONG,ULONG);
819
820NTSTATUS WINAPI RtlCharToInteger(PCSZ,ULONG,PULONG);
821void WINAPI RtlClearAllBits(PRTL_BITMAP);
822void WINAPI RtlClearBits(PRTL_BITMAP,ULONG,ULONG);
823ULONG WINAPI RtlCompactHeap(HANDLE,ULONG);
824LONG WINAPI RtlCompareString(const STRING*,const STRING*,BOOLEAN);
825LONG WINAPI RtlCompareUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
826NTSTATUS WINAPI RtlConvertSidToUnicodeString(PUNICODE_STRING,PSID,BOOLEAN);
827LONGLONG WINAPI RtlConvertLongToLargeInteger(LONG);
828ULONGLONG WINAPI RtlConvertUlongToLargeInteger(ULONG);
829DWORD WINAPI RtlCopySid(DWORD,PSID,PSID);
830void WINAPI RtlCopyString(STRING*,const STRING*);
831void WINAPI RtlCopyUnicodeString(UNICODE_STRING*,const UNICODE_STRING*);
832NTSTATUS WINAPI RtlCreateAcl(PACL,DWORD,DWORD);
833DWORD WINAPI RtlCreateEnvironment(DWORD,DWORD);
834HANDLE WINAPI RtlCreateHeap(ULONG,PVOID,ULONG,ULONG,PVOID,PRTL_HEAP_DEFINITION);
835NTSTATUS WINAPI RtlCreateSecurityDescriptor(PSECURITY_DESCRIPTOR,DWORD);
836BOOLEAN WINAPI RtlCreateUnicodeString(PUNICODE_STRING,LPCWSTR);
837BOOLEAN WINAPI RtlCreateUnicodeStringFromAsciiz(PUNICODE_STRING,LPCSTR);
838
839NTSTATUS WINAPI RtlDeleteCriticalSection(RTL_CRITICAL_SECTION *);
840void WINAPI RtlDeleteResource(LPRTL_RWLOCK);
841DWORD WINAPI RtlDeleteSecurityObject(DWORD);
842DWORD WINAPI RtlDestroyEnvironment(DWORD);
843HANDLE WINAPI RtlDestroyHeap(HANDLE);
844BOOLEAN WINAPI RtlDosPathNameToNtPathName_U(LPWSTR,PUNICODE_STRING,DWORD,DWORD);
845void WINAPI RtlDumpResource(LPRTL_RWLOCK);
846
847LONGLONG WINAPI RtlEnlargedIntegerMultiply(INT,INT);
848ULONGLONG WINAPI RtlEnlargedUnsignedMultiply(UINT,UINT);
849UINT WINAPI RtlEnlargedUnsignedDivide(ULONGLONG,UINT,UINT *);
850NTSTATUS WINAPI RtlEnterCriticalSection(RTL_CRITICAL_SECTION *);
851void WINAPI RtlEraseUnicodeString(UNICODE_STRING*);
852BOOL WINAPI RtlEqualPrefixSid(PSID,PSID);
853BOOL WINAPI RtlEqualSid(PSID,PSID);
854BOOLEAN WINAPI RtlEqualString(const STRING*,const STRING*,BOOLEAN);
855BOOLEAN WINAPI RtlEqualUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
856LONGLONG WINAPI RtlExtendedMagicDivide(LONGLONG,LONGLONG,INT);
857LONGLONG WINAPI RtlExtendedIntegerMultiply(LONGLONG,INT);
858LONGLONG WINAPI RtlExtendedLargeIntegerDivide(LONGLONG,INT,INT *);
859
860ULONG WINAPI RtlFindClearBits(PCRTL_BITMAP,ULONG,ULONG);
861ULONG WINAPI RtlFindClearBitsAndSet(PRTL_BITMAP,ULONG,ULONG);
862ULONG WINAPI RtlFindClearRuns(PCRTL_BITMAP,PRTL_BITMAP_RUN,ULONG,BOOLEAN);
863ULONG WINAPI RtlFindLastBackwardRunSet(PCRTL_BITMAP,ULONG,PULONG);
864ULONG WINAPI RtlFindLastBackwardRunClear(PCRTL_BITMAP,ULONG,PULONG);
865CCHAR WINAPI RtlFindLeastSignificantBit(ULONGLONG);
866ULONG WINAPI RtlFindLongestRunSet(PCRTL_BITMAP,PULONG);
867ULONG WINAPI RtlFindLongestRunClear(PCRTL_BITMAP,PULONG);
868CCHAR WINAPI RtlFindMostSignificantBit(ULONGLONG);
869ULONG WINAPI RtlFindNextForwardRunSet(PCRTL_BITMAP,ULONG,PULONG);
870ULONG WINAPI RtlFindNextForwardRunClear(PCRTL_BITMAP,ULONG,PULONG);
871ULONG WINAPI RtlFindSetBits(PCRTL_BITMAP,ULONG,ULONG);
872ULONG WINAPI RtlFindSetBitsAndClear(PRTL_BITMAP,ULONG,ULONG);
873ULONG WINAPI RtlFindSetRuns(PCRTL_BITMAP,PRTL_BITMAP_RUN,ULONG,BOOLEAN);
874BOOLEAN WINAPI RtlFirstFreeAce(PACL,PACE_HEADER *);
875NTSTATUS WINAPI RtlFormatCurrentUserKeyPath(PUNICODE_STRING);
876void WINAPI RtlFreeAnsiString(PANSI_STRING);
877BOOLEAN WINAPI RtlFreeHeap(HANDLE,ULONG,PVOID);
878void WINAPI RtlFreeOemString(POEM_STRING);
879DWORD WINAPI RtlFreeSid(PSID);
880void WINAPI RtlFreeUnicodeString(PUNICODE_STRING);
881
882DWORD WINAPI RtlGetAce(PACL,DWORD,LPVOID *);
883NTSTATUS WINAPI RtlGetDaclSecurityDescriptor(PSECURITY_DESCRIPTOR,PBOOLEAN,PACL *,PBOOLEAN);
884NTSTATUS WINAPI RtlGetControlSecurityDescriptor(PSECURITY_DESCRIPTOR, PSECURITY_DESCRIPTOR_CONTROL,LPDWORD);
885NTSTATUS WINAPI RtlGetGroupSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID *,PBOOLEAN);
886BOOLEAN WINAPI RtlGetNtProductType(LPDWORD);
887NTSTATUS WINAPI RtlGetOwnerSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID *,PBOOLEAN);
888ULONG WINAPI RtlGetProcessHeaps(ULONG,HANDLE*);
889NTSTATUS WINAPI RtlGetSaclSecurityDescriptor(PSECURITY_DESCRIPTOR,PBOOLEAN,PACL *,PBOOLEAN);
890
891PSID_IDENTIFIER_AUTHORITY WINAPI RtlIdentifierAuthoritySid(PSID);
892PVOID WINAPI RtlImageDirectoryEntryToData(HMODULE,BOOL,WORD,ULONG *);
893PIMAGE_NT_HEADERS WINAPI RtlImageNtHeader(HMODULE);
894PIMAGE_SECTION_HEADER WINAPI RtlImageRvaToSection(const IMAGE_NT_HEADERS *,HMODULE,DWORD);
895PVOID WINAPI RtlImageRvaToVa(const IMAGE_NT_HEADERS *,HMODULE,DWORD,IMAGE_SECTION_HEADER **);
896BOOL WINAPI RtlImpersonateSelf(SECURITY_IMPERSONATION_LEVEL);
897void WINAPI RtlInitString(PSTRING,PCSZ);
898void WINAPI RtlInitAnsiString(PANSI_STRING,PCSZ);
899void WINAPI RtlInitUnicodeString(PUNICODE_STRING,PCWSTR);
900NTSTATUS WINAPI RtlInitializeCriticalSection(RTL_CRITICAL_SECTION *);
901NTSTATUS WINAPI RtlInitializeCriticalSectionAndSpinCount(RTL_CRITICAL_SECTION *,DWORD);
902void WINAPI RtlInitializeBitMap(PRTL_BITMAP,LPBYTE,ULONG);
903void WINAPI RtlInitializeResource(LPRTL_RWLOCK);
904BOOL WINAPI RtlInitializeSid(PSID,PSID_IDENTIFIER_AUTHORITY,BYTE);
905
906DWORD WINAPI RtlIntegerToChar(DWORD,DWORD,DWORD,DWORD);
907BOOLEAN WINAPI RtlIsNameLegalDOS8Dot3(PUNICODE_STRING,POEM_STRING,PBOOLEAN);
908DWORD WINAPI RtlIsTextUnicode(LPVOID,DWORD,DWORD *);
909
910LONGLONG WINAPI RtlLargeIntegerAdd(LONGLONG,LONGLONG);
911LONGLONG WINAPI RtlLargeIntegerArithmeticShift(LONGLONG,INT);
912ULONGLONG WINAPI RtlLargeIntegerDivide( ULONGLONG,ULONGLONG,ULONGLONG *);
913LONGLONG WINAPI RtlLargeIntegerNegate(LONGLONG);
914LONGLONG WINAPI RtlLargeIntegerShiftLeft(LONGLONG,INT);
915LONGLONG WINAPI RtlLargeIntegerShiftRight(LONGLONG,INT);
916LONGLONG WINAPI RtlLargeIntegerSubtract(LONGLONG,LONGLONG);
917NTSTATUS WINAPI RtlLeaveCriticalSection(RTL_CRITICAL_SECTION *);
918DWORD WINAPI RtlLengthRequiredSid(DWORD);
919ULONG WINAPI RtlLengthSecurityDescriptor(PSECURITY_DESCRIPTOR);
920DWORD WINAPI RtlLengthSid(PSID);
921NTSTATUS WINAPI RtlLocalTimeToSystemTime(PLARGE_INTEGER,PLARGE_INTEGER);
922BOOLEAN WINAPI RtlLockHeap(HANDLE);
923
924NTSTATUS WINAPI RtlMakeSelfRelativeSD(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,LPDWORD);
925NTSTATUS WINAPI RtlMultiByteToUnicodeN(LPWSTR,DWORD,LPDWORD,LPCSTR,DWORD);
926NTSTATUS WINAPI RtlMultiByteToUnicodeSize(DWORD*,LPCSTR,UINT);
927
928DWORD WINAPI RtlNewSecurityObject(DWORD,DWORD,DWORD,DWORD,DWORD,DWORD);
929LPVOID WINAPI RtlNormalizeProcessParams(LPVOID);
930ULONG WINAPI RtlNtStatusToDosError(NTSTATUS);
931ULONG WINAPI RtlNumberOfSetBits(PCRTL_BITMAP);
932ULONG WINAPI RtlNumberOfClearBits(PCRTL_BITMAP);
933
934UINT WINAPI RtlOemStringToUnicodeSize(const STRING*);
935NTSTATUS WINAPI RtlOemStringToUnicodeString(UNICODE_STRING*,const STRING*,BOOLEAN);
936NTSTATUS WINAPI RtlOemToUnicodeN(LPWSTR,DWORD,LPDWORD,LPCSTR,DWORD);
937DWORD WINAPI RtlOpenCurrentUser(ACCESS_MASK,PHANDLE);
938
939BOOLEAN WINAPI RtlPrefixString(const STRING*,const STRING*,BOOLEAN);
940BOOLEAN WINAPI RtlPrefixUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
941
942DWORD WINAPI RtlQueryEnvironmentVariable_U(DWORD,PUNICODE_STRING,PUNICODE_STRING) ;
943
944void WINAPI RtlRaiseException(PEXCEPTION_RECORD);
945void WINAPI RtlRaiseStatus(NTSTATUS);
946PVOID WINAPI RtlReAllocateHeap(HANDLE,ULONG,PVOID,ULONG);
947void WINAPI RtlReleasePebLock(void);
948void WINAPI RtlReleaseResource(LPRTL_RWLOCK);
949
950void WINAPI RtlSecondsSince1970ToTime(DWORD,LARGE_INTEGER *);
951void WINAPI RtlSecondsSince1980ToTime(DWORD,LARGE_INTEGER *);
952void WINAPI RtlSetAllBits(PRTL_BITMAP);
953void WINAPI RtlSetBits(PRTL_BITMAP,ULONG,ULONG);
954NTSTATUS WINAPI RtlSetDaclSecurityDescriptor(PSECURITY_DESCRIPTOR,BOOLEAN,PACL,BOOLEAN);
955DWORD WINAPI RtlSetEnvironmentVariable(DWORD,PUNICODE_STRING,PUNICODE_STRING);
956NTSTATUS WINAPI RtlSetOwnerSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID,BOOLEAN);
957NTSTATUS WINAPI RtlSetGroupSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID,BOOLEAN);
958NTSTATUS WINAPI RtlSetSaclSecurityDescriptor(PSECURITY_DESCRIPTOR,BOOLEAN,PACL,BOOLEAN);
959ULONG WINAPI RtlSizeHeap(HANDLE,ULONG,PVOID);
960LPDWORD WINAPI RtlSubAuthoritySid(PSID,DWORD);
961LPBYTE WINAPI RtlSubAuthorityCountSid(PSID);
962void WINAPI RtlSystemTimeToLocalTime(PLARGE_INTEGER,PLARGE_INTEGER);
963
964void WINAPI RtlTimeToTimeFields(PLARGE_INTEGER,PTIME_FIELDS);
965BOOLEAN WINAPI RtlTimeFieldsToTime(PTIME_FIELDS,PLARGE_INTEGER);
966void WINAPI RtlTimeToElapsedTimeFields(PLARGE_INTEGER,PTIME_FIELDS);
967BOOLEAN WINAPI RtlTimeToSecondsSince1970(const LARGE_INTEGER *,PULONG);
968BOOLEAN WINAPI RtlTimeToSecondsSince1980(const LARGE_INTEGER *,LPDWORD);
969BOOL WINAPI RtlTryEnterCriticalSection(RTL_CRITICAL_SECTION *);
970
971DWORD WINAPI RtlUnicodeStringToAnsiSize(const UNICODE_STRING*);
972NTSTATUS WINAPI RtlUnicodeStringToAnsiString(PANSI_STRING,PCUNICODE_STRING,BOOLEAN);
973DWORD WINAPI RtlUnicodeStringToOemSize(const UNICODE_STRING*);
974NTSTATUS WINAPI RtlUnicodeStringToOemString(POEM_STRING,PCUNICODE_STRING,BOOLEAN);
975NTSTATUS WINAPI RtlUnicodeToMultiByteN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
976NTSTATUS WINAPI RtlUnicodeToMultiByteSize(PULONG,PCWSTR,ULONG);
977NTSTATUS WINAPI RtlUnicodeToOemN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
978ULONG WINAPI RtlUniform(PULONG);
979BOOLEAN WINAPI RtlUnlockHeap(HANDLE);
980void WINAPI RtlUnwind(PVOID,PVOID,PEXCEPTION_RECORD,PVOID);
981#ifdef __ia64__
982void WINAPI RtlUnwind2(FRAME_POINTERS,PVOID,PEXCEPTION_RECORD,PVOID,PCONTEXT);
983void WINAPI RtlUnwindEx(FRAME_POINTERS,PVOID,PEXCEPTION_RECORD,PVOID,PCONTEXT,PUNWIND_HISTORY_TABLE);
984#endif
985NTSTATUS WINAPI RtlUpcaseUnicodeString(UNICODE_STRING*,const UNICODE_STRING *,BOOLEAN);
986NTSTATUS WINAPI RtlUpcaseUnicodeStringToAnsiString(STRING*,const UNICODE_STRING*,BOOLEAN);
987NTSTATUS WINAPI RtlUpcaseUnicodeStringToOemString(STRING*,const UNICODE_STRING*,BOOLEAN);
988NTSTATUS WINAPI RtlUpcaseUnicodeToMultiByteN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
989NTSTATUS WINAPI RtlUpcaseUnicodeToOemN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
990
991NTSTATUS WINAPI RtlValidSecurityDescriptor(PSECURITY_DESCRIPTOR);
992BOOL WINAPI RtlValidSid(PSID);
Francois Gougetbba4bb12002-09-17 01:35:09 +0000993BOOLEAN WINAPI RtlValidateHeap(HANDLE,ULONG,LPCVOID);
Patrik Stridvall9c1de6d2002-09-12 22:07:02 +0000994
995NTSTATUS WINAPI RtlWalkHeap(HANDLE,PVOID);
996
997NTSTATUS WINAPI RtlpWaitForCriticalSection(RTL_CRITICAL_SECTION *);
998NTSTATUS WINAPI RtlpUnWaitCriticalSection(RTL_CRITICAL_SECTION *);
999
1000/***********************************************************************
1001 * Inline functions
1002 */
1003
1004#define InitializeObjectAttributes(p,n,a,r,s) \
1005 do { \
1006 (p)->Length = sizeof(OBJECT_ATTRIBUTES); \
1007 (p)->RootDirectory = r; \
1008 (p)->Attributes = a; \
1009 (p)->ObjectName = n; \
1010 (p)->SecurityDescriptor = s; \
1011 (p)->SecurityQualityOfService = NULL; \
1012 } while (0)
1013
1014#define NtCurrentProcess() ((HANDLE)-1)
1015
1016#define RtlFillMemory(Destination,Length,Fill) memset((Destination),(Fill),(Length))
1017#define RtlMoveMemory(Destination,Source,Length) memmove((Destination),(Source),(Length))
1018#define RtlStoreUlong(p,v) do { ULONG _v = (v); memcpy((p), &_v, sizeof(_v)); } while (0)
1019#define RtlStoreUlonglong(p,v) do { ULONGLONG _v = (v); memcpy((p), &_v, sizeof(_v)); } while (0)
1020#define RtlRetrieveUlong(p,s) memcpy((p), (s), sizeof(ULONG))
1021#define RtlRetrieveUlonglong(p,s) memcpy((p), (s), sizeof(ULONGLONG))
1022#define RtlZeroMemory(Destination,Length) memset((Destination),0,(Length))
1023
1024inline static BOOLEAN RtlCheckBit(PCRTL_BITMAP lpBits, ULONG ulBit)
1025{
1026 if (lpBits && ulBit < lpBits->SizeOfBitMap &&
1027 lpBits->BitMapBuffer[ulBit >> 3] & (1 << (ulBit & 7)))
1028 return TRUE;
1029 return FALSE;
1030}
1031
1032#define RtlClearAllBits(p) \
1033 do { \
1034 PRTL_BITMAP _p = (p); \
1035 memset(_p->BitMapBuffer,0,((_p->SizeOfBitMap + 31) & 0xffffffe0) >> 3); \
1036 } while (0)
1037
1038#define RtlInitializeBitMap(p,b,s) \
1039 do { \
1040 PRTL_BITMAP _p = (p); \
1041 _p->SizeOfBitMap = (s); \
1042 _p->BitMapBuffer = (b); \
1043 } while (0)
1044
1045#define RtlSetAllBits(p) \
1046 do { \
1047 PRTL_BITMAP _p = (p); \
1048 memset(_p->BitMapBuffer,0xff,((_p->SizeOfBitMap + 31) & 0xffffffe0) >> 3); \
1049 } while (0)
1050
Patrik Stridvalleba96492002-09-10 00:33:34 +00001051#ifdef __cplusplus
1052} /* extern "C" */
1053#endif /* defined(__cplusplus) */
1054
1055#endif /* __WINE_WINTERNAL_H */