1 /* $Id: rtl.h,v 1.39 2003/05/31 11:07:00 ekohl Exp $
5 #ifndef __INCLUDE_NTDLL_RTL_H
6 #define __INCLUDE_NTDLL_RTL_H
8 #include <ntos/types.h>
10 #include <ddk/ntddk.h>
11 #include <ddk/ntifs.h>
15 #endif /* __cplusplus */
20 typedef struct _DEBUG_BUFFER
24 PVOID RemoteSectionBase
;
25 ULONG SectionBaseDelta
;
26 HANDLE EventPairHandle
;
28 HANDLE RemoteThreadHandle
;
33 PVOID ModuleInformation
;
34 PVOID BackTraceInformation
;
35 PVOID HeapInformation
;
36 PVOID LockInformation
;
38 } DEBUG_BUFFER
, *PDEBUG_BUFFER
;
40 typedef struct _CRITICAL_SECTION_DEBUG
{
42 WORD CreatorBackTraceIndex
;
43 struct _CRITICAL_SECTION
*CriticalSection
;
44 LIST_ENTRY ProcessLocksList
;
46 DWORD ContentionCount
;
48 PVOID OwnerBackTrace
[ 5 ];
49 } CRITICAL_SECTION_DEBUG
, *PCRITICAL_SECTION_DEBUG
;
51 typedef struct _CRITICAL_SECTION
{
52 PCRITICAL_SECTION_DEBUG DebugInfo
;
58 } CRITICAL_SECTION
, *PCRITICAL_SECTION
, *LPCRITICAL_SECTION
;
60 #endif /* !__USE_W32API */
63 typedef struct _RTL_PROCESS_INFO
69 SECTION_IMAGE_INFORMATION ImageInfo
;
70 } RTL_PROCESS_INFO
, *PRTL_PROCESS_INFO
;
72 typedef struct _RTL_RESOURCE
74 CRITICAL_SECTION Lock
;
75 HANDLE SharedSemaphore
;
77 HANDLE ExclusiveSemaphore
;
78 ULONG ExclusiveWaiters
;
81 ULONG TimeoutBoost
; /* ?? */
82 PVOID DebugInfo
; /* ?? */
83 } RTL_RESOURCE
, *PRTL_RESOURCE
;
85 typedef struct _RTL_HANDLE
87 struct _RTL_HANDLE
*Next
; /* pointer to next free handle */
88 } RTL_HANDLE
, *PRTL_HANDLE
;
90 typedef struct _RTL_HANDLE_TABLE
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
;
101 #define HEAP_BASE (0xa0000000)
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 */
113 RtlDeleteCriticalSection (
114 PCRITICAL_SECTION CriticalSection
119 RtlEnterCriticalSection (
120 PCRITICAL_SECTION CriticalSection
125 RtlInitializeCriticalSection (
126 PCRITICAL_SECTION CriticalSection
131 RtlLeaveCriticalSection (
132 PCRITICAL_SECTION CriticalSection
137 RtlTryEnterCriticalSection (
138 PCRITICAL_SECTION CriticalSection
148 PDEBUG_BUFFER STDCALL
149 RtlCreateQueryDebugBuffer(IN ULONG Size
,
150 IN BOOLEAN EventPair
);
153 RtlDestroyQueryDebugBuffer(IN PDEBUG_BUFFER DebugBuffer
);
157 RtlEqualComputerName (
158 IN PUNICODE_STRING ComputerName1
,
159 IN PUNICODE_STRING ComputerName2
165 IN PUNICODE_STRING DomainName1
,
166 IN PUNICODE_STRING DomainName2
171 RtlEraseUnicodeString (
172 IN PUNICODE_STRING String
177 RtlLargeIntegerToChar (
178 IN PLARGE_INTEGER Value
,
189 RtlDetermineDosPathNameType_U (
195 RtlDoesFileExists_U (
201 RtlDosPathNameToNtPathName_U (
203 PUNICODE_STRING ntname
,
221 RtlGetCurrentDirectory_U (
228 RtlGetFullPathName_U (
237 RtlGetLongestNtPathLength (
241 ULONG STDCALL
RtlGetNtGlobalFlags(VOID
);
243 BOOLEAN STDCALL
RtlGetNtProductType(PNT_PRODUCT_TYPE ProductType
);
254 RtlIsDosDeviceName_U (
260 RtlSetCurrentDirectory_U (
264 /* Environment functions */
279 RtlCreateEnvironment (
286 RtlDestroyEnvironment (
292 RtlExpandEnvironmentStrings_U (
294 PUNICODE_STRING Source
,
295 PUNICODE_STRING Destination
,
301 RtlQueryEnvironmentVariable_U (
303 PUNICODE_STRING Name
,
304 PUNICODE_STRING Value
308 RtlQueryProcessDebugInformation(IN ULONG ProcessId
,
309 IN ULONG DebugInfoClassMask
,
310 IN OUT PDEBUG_BUFFER DebugBuffer
);
314 RtlSetCurrentEnvironment (
315 PWSTR NewEnvironment
,
316 PWSTR
*OldEnvironment
321 RtlSetEnvironmentVariable (
323 PUNICODE_STRING Name
,
324 PUNICODE_STRING Value
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
,
338 IN OUT PHANDLE ThreadHandle
,
339 IN OUT PCLIENT_ID ClientId
342 NTSTATUS STDCALL
RtlExitUserThread(NTSTATUS Status
);
346 RtlFreeUserThreadStack (
347 IN HANDLE ProcessHandle
,
348 IN HANDLE ThreadHandle
353 RtlCreateUserProcess (
354 IN PUNICODE_STRING ImageFileName
,
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
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
381 PRTL_USER_PROCESS_PARAMETERS
383 RtlDeNormalizeProcessParams (
384 IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
389 RtlDestroyProcessParameters (
390 IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
393 PRTL_USER_PROCESS_PARAMETERS
395 RtlNormalizeProcessParams (
396 IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
401 RtlLocalTimeToSystemTime (
402 PLARGE_INTEGER LocalTime
,
403 PLARGE_INTEGER SystemTime
408 RtlSystemTimeToLocalTime (
409 PLARGE_INTEGER SystemTime
,
410 PLARGE_INTEGER LocalTime
414 RtlTimeToElapsedTimeFields(IN PLARGE_INTEGER Time
,
415 OUT PTIME_FIELDS TimeFields
);
424 /* resource functions */
428 RtlAcquireResourceExclusive (
429 IN PRTL_RESOURCE Resource
,
435 RtlAcquireResourceShared (
436 IN PRTL_RESOURCE Resource
,
442 RtlConvertExclusiveToShared (
443 IN PRTL_RESOURCE Resource
448 RtlConvertSharedToExclusive (
449 IN PRTL_RESOURCE Resource
455 IN PRTL_RESOURCE Resource
461 IN PRTL_RESOURCE Resource
466 RtlInitializeResource (
467 IN PRTL_RESOURCE Resource
473 IN PRTL_RESOURCE Resource
476 /* handle table functions */
481 IN PRTL_HANDLE_TABLE HandleTable
,
487 RtlDestroyHandleTable (
488 IN PRTL_HANDLE_TABLE HandleTable
494 IN PRTL_HANDLE_TABLE HandleTable
,
495 IN PRTL_HANDLE Handle
500 RtlInitializeHandleTable (
503 IN PRTL_HANDLE_TABLE HandleTable
509 IN PRTL_HANDLE_TABLE HandleTable
,
510 IN PRTL_HANDLE Handle
515 RtlIsValidIndexHandle (
516 IN PRTL_HANDLE_TABLE HandleTable
,
517 IN OUT PRTL_HANDLE
*Handle
,
522 RtlAdjustPrivilege(IN ULONG Privilege
,
524 IN BOOLEAN CurrentThread
,
525 OUT PBOOLEAN Enabled
);
530 IN SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
536 OUT HANDLE KeyHandle
,
537 IN ACCESS_MASK DesiredAccess
,
538 IN POBJECT_ATTRIBUTES ObjectAttributes
,
540 OUT PULONG Disposition
,
546 RtlpNtEnumerateSubKey (
548 OUT PUNICODE_STRING SubKeyName
,
555 RtlpNtMakeTemporaryKey (
562 OUT HANDLE KeyHandle
,
563 IN ACCESS_MASK DesiredAccess
,
564 IN POBJECT_ATTRIBUTES ObjectAttributes
,
570 RtlpNtQueryValueKey (
572 OUT PULONG Type OPTIONAL
,
573 OUT PVOID Data OPTIONAL
,
574 IN OUT PULONG DataLength OPTIONAL
,
588 VOID NTAPI RtlRunDecodeUnicodeString
591 IN OUT PUNICODE_STRING uString
594 VOID NTAPI RtlRunEncodeUnicodeString
597 IN OUT PUNICODE_STRING uString
602 #ifndef __INTERLOCKED_DECLARED
603 #define __INTERLOCKED_DECLARED
607 InterlockedIncrement (
613 InterlockedDecrement (
619 InterlockedExchange (
626 InterlockedCompareExchange (
634 InterlockedExchangeAdd (
639 #endif /* __INTERLOCKED_DECLARED */
641 #endif /* __NTDRIVER__ */
645 #endif /* __cplusplus */
648 #endif /* __INCLUDE_NTDLL_RTL_H */