1e8265232236829caa838882d5ecc887e0b007e7
[reactos.git] / reactos / include / ntdll / rtl.h
1 /* $Id: rtl.h,v 1.39 2003/05/31 11:07:00 ekohl Exp $
2 *
3 */
4
5 #ifndef __INCLUDE_NTDLL_RTL_H
6 #define __INCLUDE_NTDLL_RTL_H
7
8 #include <ntos/types.h>
9 #include <napi/teb.h>
10 #include <ddk/ntddk.h>
11 #include <ddk/ntifs.h>
12
13 #ifdef __cplusplus
14 extern "C" {
15 #endif /* __cplusplus */
16
17
18 #ifndef __USE_W32API
19
20 typedef struct _DEBUG_BUFFER
21 {
22 HANDLE SectionHandle;
23 PVOID SectionBase;
24 PVOID RemoteSectionBase;
25 ULONG SectionBaseDelta;
26 HANDLE EventPairHandle;
27 ULONG Unknown[2];
28 HANDLE RemoteThreadHandle;
29 ULONG InfoClassMask;
30 ULONG SizeOfInfo;
31 ULONG AllocatedSize;
32 ULONG SectionSize;
33 PVOID ModuleInformation;
34 PVOID BackTraceInformation;
35 PVOID HeapInformation;
36 PVOID LockInformation;
37 PVOID Reserved[8];
38 } DEBUG_BUFFER, *PDEBUG_BUFFER;
39
40 typedef struct _CRITICAL_SECTION_DEBUG {
41 WORD Type;
42 WORD CreatorBackTraceIndex;
43 struct _CRITICAL_SECTION *CriticalSection;
44 LIST_ENTRY ProcessLocksList;
45 DWORD EntryCount;
46 DWORD ContentionCount;
47 DWORD Depth;
48 PVOID OwnerBackTrace[ 5 ];
49 } CRITICAL_SECTION_DEBUG, *PCRITICAL_SECTION_DEBUG;
50
51 typedef struct _CRITICAL_SECTION {
52 PCRITICAL_SECTION_DEBUG DebugInfo;
53 LONG LockCount;
54 LONG RecursionCount;
55 HANDLE OwningThread;
56 HANDLE LockSemaphore;
57 DWORD Reserved;
58 } CRITICAL_SECTION, *PCRITICAL_SECTION, *LPCRITICAL_SECTION;
59
60 #endif /* !__USE_W32API */
61
62
63 typedef struct _RTL_PROCESS_INFO
64 {
65 ULONG Size;
66 HANDLE ProcessHandle;
67 HANDLE ThreadHandle;
68 CLIENT_ID ClientId;
69 SECTION_IMAGE_INFORMATION ImageInfo;
70 } RTL_PROCESS_INFO, *PRTL_PROCESS_INFO;
71
72 typedef struct _RTL_RESOURCE
73 {
74 CRITICAL_SECTION Lock;
75 HANDLE SharedSemaphore;
76 ULONG SharedWaiters;
77 HANDLE ExclusiveSemaphore;
78 ULONG ExclusiveWaiters;
79 LONG NumberActive;
80 HANDLE OwningThread;
81 ULONG TimeoutBoost; /* ?? */
82 PVOID DebugInfo; /* ?? */
83 } RTL_RESOURCE, *PRTL_RESOURCE;
84
85 typedef struct _RTL_HANDLE
86 {
87 struct _RTL_HANDLE *Next; /* pointer to next free handle */
88 } RTL_HANDLE, *PRTL_HANDLE;
89
90 typedef struct _RTL_HANDLE_TABLE
91 {
92 ULONG TableSize; /* maximum number of handles */
93 ULONG HandleSize; /* size of handle in bytes */
94 PRTL_HANDLE Handles; /* pointer to handle array */
95 PRTL_HANDLE Limit; /* limit of pointers */
96 PRTL_HANDLE FirstFree; /* pointer to first free handle */
97 PRTL_HANDLE LastUsed; /* pointer to last allocated handle */
98 } RTL_HANDLE_TABLE, *PRTL_HANDLE_TABLE;
99
100
101 #define HEAP_BASE (0xa0000000)
102
103 /* RtlQueryProcessDebugInformation */
104 #define PDI_MODULES 0x01 /* The loaded modules of the process */
105 #define PDI_BACKTRACE 0x02 /* The heap stack back traces */
106 #define PDI_HEAPS 0x04 /* The heaps of the process */
107 #define PDI_HEAP_TAGS 0x08 /* The heap tags */
108 #define PDI_HEAP_BLOCKS 0x10 /* The heap blocks */
109 #define PDI_LOCKS 0x20 /* The locks created by the process */
110
111 VOID
112 STDCALL
113 RtlDeleteCriticalSection (
114 PCRITICAL_SECTION CriticalSection
115 );
116
117 VOID
118 STDCALL
119 RtlEnterCriticalSection (
120 PCRITICAL_SECTION CriticalSection
121 );
122
123 NTSTATUS
124 STDCALL
125 RtlInitializeCriticalSection (
126 PCRITICAL_SECTION CriticalSection
127 );
128
129 VOID
130 STDCALL
131 RtlLeaveCriticalSection (
132 PCRITICAL_SECTION CriticalSection
133 );
134
135 BOOLEAN
136 STDCALL
137 RtlTryEnterCriticalSection (
138 PCRITICAL_SECTION CriticalSection
139 );
140
141 DWORD
142 STDCALL
143 RtlCompactHeap (
144 HANDLE heap,
145 DWORD flags
146 );
147
148 PDEBUG_BUFFER STDCALL
149 RtlCreateQueryDebugBuffer(IN ULONG Size,
150 IN BOOLEAN EventPair);
151
152 NTSTATUS STDCALL
153 RtlDestroyQueryDebugBuffer(IN PDEBUG_BUFFER DebugBuffer);
154
155 BOOLEAN
156 STDCALL
157 RtlEqualComputerName (
158 IN PUNICODE_STRING ComputerName1,
159 IN PUNICODE_STRING ComputerName2
160 );
161
162 BOOLEAN
163 STDCALL
164 RtlEqualDomainName (
165 IN PUNICODE_STRING DomainName1,
166 IN PUNICODE_STRING DomainName2
167 );
168
169 VOID
170 STDCALL
171 RtlEraseUnicodeString (
172 IN PUNICODE_STRING String
173 );
174
175 NTSTATUS
176 STDCALL
177 RtlLargeIntegerToChar (
178 IN PLARGE_INTEGER Value,
179 IN ULONG Base,
180 IN ULONG Length,
181 IN OUT PCHAR String
182 );
183
184
185 /* Path functions */
186
187 ULONG
188 STDCALL
189 RtlDetermineDosPathNameType_U (
190 PWSTR Path
191 );
192
193 BOOLEAN
194 STDCALL
195 RtlDoesFileExists_U (
196 PWSTR FileName
197 );
198
199 BOOLEAN
200 STDCALL
201 RtlDosPathNameToNtPathName_U (
202 PWSTR dosname,
203 PUNICODE_STRING ntname,
204 PWSTR *shortname,
205 PCURDIR nah
206 );
207
208 ULONG
209 STDCALL
210 RtlDosSearchPath_U (
211 WCHAR *sp,
212 WCHAR *name,
213 WCHAR *ext,
214 ULONG buf_sz,
215 WCHAR *buffer,
216 WCHAR **shortname
217 );
218
219 ULONG
220 STDCALL
221 RtlGetCurrentDirectory_U (
222 ULONG MaximumLength,
223 PWSTR Buffer
224 );
225
226 ULONG
227 STDCALL
228 RtlGetFullPathName_U (
229 WCHAR *dosname,
230 ULONG size,
231 WCHAR *buf,
232 WCHAR **shortname
233 );
234
235 ULONG
236 STDCALL
237 RtlGetLongestNtPathLength (
238 VOID
239 );
240
241 ULONG STDCALL RtlGetNtGlobalFlags(VOID);
242
243 BOOLEAN STDCALL RtlGetNtProductType(PNT_PRODUCT_TYPE ProductType);
244
245 ULONG
246 STDCALL
247 RtlGetProcessHeaps (
248 ULONG HeapCount,
249 HANDLE *HeapArray
250 );
251
252 ULONG
253 STDCALL
254 RtlIsDosDeviceName_U (
255 PWSTR DeviceName
256 );
257
258 NTSTATUS
259 STDCALL
260 RtlSetCurrentDirectory_U (
261 PUNICODE_STRING name
262 );
263
264 /* Environment functions */
265 VOID
266 STDCALL
267 RtlAcquirePebLock (
268 VOID
269 );
270
271 VOID
272 STDCALL
273 RtlReleasePebLock (
274 VOID
275 );
276
277 NTSTATUS
278 STDCALL
279 RtlCreateEnvironment (
280 BOOLEAN Inherit,
281 PWSTR *Environment
282 );
283
284 VOID
285 STDCALL
286 RtlDestroyEnvironment (
287 PWSTR Environment
288 );
289
290 NTSTATUS
291 STDCALL
292 RtlExpandEnvironmentStrings_U (
293 PWSTR Environment,
294 PUNICODE_STRING Source,
295 PUNICODE_STRING Destination,
296 PULONG Length
297 );
298
299 NTSTATUS
300 STDCALL
301 RtlQueryEnvironmentVariable_U (
302 PWSTR Environment,
303 PUNICODE_STRING Name,
304 PUNICODE_STRING Value
305 );
306
307 NTSTATUS STDCALL
308 RtlQueryProcessDebugInformation(IN ULONG ProcessId,
309 IN ULONG DebugInfoClassMask,
310 IN OUT PDEBUG_BUFFER DebugBuffer);
311
312 VOID
313 STDCALL
314 RtlSetCurrentEnvironment (
315 PWSTR NewEnvironment,
316 PWSTR *OldEnvironment
317 );
318
319 NTSTATUS
320 STDCALL
321 RtlSetEnvironmentVariable (
322 PWSTR *Environment,
323 PUNICODE_STRING Name,
324 PUNICODE_STRING Value
325 );
326
327 NTSTATUS
328 STDCALL
329 RtlCreateUserThread (
330 IN HANDLE ProcessHandle,
331 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
332 IN BOOLEAN CreateSuspended,
333 IN LONG StackZeroBits,
334 IN OUT PULONG StackReserve,
335 IN OUT PULONG StackCommit,
336 IN PTHREAD_START_ROUTINE StartAddress,
337 IN PVOID Parameter,
338 IN OUT PHANDLE ThreadHandle,
339 IN OUT PCLIENT_ID ClientId
340 );
341
342 NTSTATUS STDCALL RtlExitUserThread(NTSTATUS Status);
343
344 NTSTATUS
345 STDCALL
346 RtlFreeUserThreadStack (
347 IN HANDLE ProcessHandle,
348 IN HANDLE ThreadHandle
349 );
350
351 NTSTATUS
352 STDCALL
353 RtlCreateUserProcess (
354 IN PUNICODE_STRING ImageFileName,
355 IN ULONG Attributes,
356 IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters,
357 IN PSECURITY_DESCRIPTOR ProcessSecutityDescriptor OPTIONAL,
358 IN PSECURITY_DESCRIPTOR ThreadSecurityDescriptor OPTIONAL,
359 IN HANDLE ParentProcess OPTIONAL,
360 IN BOOLEAN CurrentDirectory,
361 IN HANDLE DebugPort OPTIONAL,
362 IN HANDLE ExceptionPort OPTIONAL,
363 OUT PRTL_PROCESS_INFO ProcessInfo
364 );
365
366 NTSTATUS
367 STDCALL
368 RtlCreateProcessParameters (
369 OUT PRTL_USER_PROCESS_PARAMETERS *ProcessParameters,
370 IN PUNICODE_STRING ImagePathName OPTIONAL,
371 IN PUNICODE_STRING DllPath OPTIONAL,
372 IN PUNICODE_STRING CurrentDirectory OPTIONAL,
373 IN PUNICODE_STRING CommandLine OPTIONAL,
374 IN PWSTR Environment OPTIONAL,
375 IN PUNICODE_STRING WindowTitle OPTIONAL,
376 IN PUNICODE_STRING DesktopInfo OPTIONAL,
377 IN PUNICODE_STRING ShellInfo OPTIONAL,
378 IN PUNICODE_STRING RuntimeInfo OPTIONAL
379 );
380
381 PRTL_USER_PROCESS_PARAMETERS
382 STDCALL
383 RtlDeNormalizeProcessParams (
384 IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
385 );
386
387 NTSTATUS
388 STDCALL
389 RtlDestroyProcessParameters (
390 IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
391 );
392
393 PRTL_USER_PROCESS_PARAMETERS
394 STDCALL
395 RtlNormalizeProcessParams (
396 IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
397 );
398
399 NTSTATUS
400 STDCALL
401 RtlLocalTimeToSystemTime (
402 PLARGE_INTEGER LocalTime,
403 PLARGE_INTEGER SystemTime
404 );
405
406 NTSTATUS
407 STDCALL
408 RtlSystemTimeToLocalTime (
409 PLARGE_INTEGER SystemTime,
410 PLARGE_INTEGER LocalTime
411 );
412
413 VOID STDCALL
414 RtlTimeToElapsedTimeFields(IN PLARGE_INTEGER Time,
415 OUT PTIME_FIELDS TimeFields);
416
417 VOID
418 STDCALL
419 RtlRaiseStatus (
420 IN NTSTATUS Status
421 );
422
423
424 /* resource functions */
425
426 BOOLEAN
427 STDCALL
428 RtlAcquireResourceExclusive (
429 IN PRTL_RESOURCE Resource,
430 IN BOOLEAN Wait
431 );
432
433 BOOLEAN
434 STDCALL
435 RtlAcquireResourceShared (
436 IN PRTL_RESOURCE Resource,
437 IN BOOLEAN Wait
438 );
439
440 VOID
441 STDCALL
442 RtlConvertExclusiveToShared (
443 IN PRTL_RESOURCE Resource
444 );
445
446 VOID
447 STDCALL
448 RtlConvertSharedToExclusive (
449 IN PRTL_RESOURCE Resource
450 );
451
452 VOID
453 STDCALL
454 RtlDeleteResource (
455 IN PRTL_RESOURCE Resource
456 );
457
458 VOID
459 STDCALL
460 RtlDumpResource (
461 IN PRTL_RESOURCE Resource
462 );
463
464 VOID
465 STDCALL
466 RtlInitializeResource (
467 IN PRTL_RESOURCE Resource
468 );
469
470 VOID
471 STDCALL
472 RtlReleaseResource (
473 IN PRTL_RESOURCE Resource
474 );
475
476 /* handle table functions */
477
478 PRTL_HANDLE
479 STDCALL
480 RtlAllocateHandle (
481 IN PRTL_HANDLE_TABLE HandleTable,
482 IN OUT PULONG Index
483 );
484
485 VOID
486 STDCALL
487 RtlDestroyHandleTable (
488 IN PRTL_HANDLE_TABLE HandleTable
489 );
490
491 BOOLEAN
492 STDCALL
493 RtlFreeHandle (
494 IN PRTL_HANDLE_TABLE HandleTable,
495 IN PRTL_HANDLE Handle
496 );
497
498 VOID
499 STDCALL
500 RtlInitializeHandleTable (
501 IN ULONG TableSize,
502 IN ULONG HandleSize,
503 IN PRTL_HANDLE_TABLE HandleTable
504 );
505
506 BOOLEAN
507 STDCALL
508 RtlIsValidHandle (
509 IN PRTL_HANDLE_TABLE HandleTable,
510 IN PRTL_HANDLE Handle
511 );
512
513 BOOLEAN
514 STDCALL
515 RtlIsValidIndexHandle (
516 IN PRTL_HANDLE_TABLE HandleTable,
517 IN OUT PRTL_HANDLE *Handle,
518 IN ULONG Index
519 );
520
521 NTSTATUS STDCALL
522 RtlAdjustPrivilege(IN ULONG Privilege,
523 IN BOOLEAN Enable,
524 IN BOOLEAN CurrentThread,
525 OUT PBOOLEAN Enabled);
526
527 NTSTATUS
528 STDCALL
529 RtlImpersonateSelf (
530 IN SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
531 );
532
533 NTSTATUS
534 STDCALL
535 RtlpNtCreateKey (
536 OUT HANDLE KeyHandle,
537 IN ACCESS_MASK DesiredAccess,
538 IN POBJECT_ATTRIBUTES ObjectAttributes,
539 IN ULONG Unused1,
540 OUT PULONG Disposition,
541 IN ULONG Unused2
542 );
543
544 NTSTATUS
545 STDCALL
546 RtlpNtEnumerateSubKey (
547 IN HANDLE KeyHandle,
548 OUT PUNICODE_STRING SubKeyName,
549 IN ULONG Index,
550 IN ULONG Unused
551 );
552
553 NTSTATUS
554 STDCALL
555 RtlpNtMakeTemporaryKey (
556 IN HANDLE KeyHandle
557 );
558
559 NTSTATUS
560 STDCALL
561 RtlpNtOpenKey (
562 OUT HANDLE KeyHandle,
563 IN ACCESS_MASK DesiredAccess,
564 IN POBJECT_ATTRIBUTES ObjectAttributes,
565 IN ULONG Unused
566 );
567
568 NTSTATUS
569 STDCALL
570 RtlpNtQueryValueKey (
571 IN HANDLE KeyHandle,
572 OUT PULONG Type OPTIONAL,
573 OUT PVOID Data OPTIONAL,
574 IN OUT PULONG DataLength OPTIONAL,
575 IN ULONG Unused
576 );
577
578 NTSTATUS
579 STDCALL
580 RtlpNtSetValueKey (
581 IN HANDLE KeyHandle,
582 IN ULONG Type,
583 IN PVOID Data,
584 IN ULONG DataLength
585 );
586
587
588 VOID NTAPI RtlRunDecodeUnicodeString
589 (
590 IN UCHAR hash,
591 IN OUT PUNICODE_STRING uString
592 );
593
594 VOID NTAPI RtlRunEncodeUnicodeString
595 (
596 IN OUT PUCHAR hash,
597 IN OUT PUNICODE_STRING uString
598 );
599
600 #ifndef __NTDRIVER__
601
602 #ifndef __INTERLOCKED_DECLARED
603 #define __INTERLOCKED_DECLARED
604
605 LONG
606 STDCALL
607 InterlockedIncrement (
608 PLONG Addend
609 );
610
611 LONG
612 STDCALL
613 InterlockedDecrement (
614 PLONG lpAddend
615 );
616
617 LONG
618 STDCALL
619 InterlockedExchange (
620 PLONG Target,
621 LONG Value
622 );
623
624 PVOID
625 STDCALL
626 InterlockedCompareExchange (
627 PVOID *Destination,
628 PVOID Exchange,
629 PVOID Comperand
630 );
631
632 LONG
633 STDCALL
634 InterlockedExchangeAdd (
635 PLONG Addend,
636 LONG Increment
637 );
638
639 #endif /* __INTERLOCKED_DECLARED */
640
641 #endif /* __NTDRIVER__ */
642
643 #ifdef __cplusplus
644 }
645 #endif /* __cplusplus */
646
647
648 #endif /* __INCLUDE_NTDLL_RTL_H */
649
650 /* EOF */