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