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 typedef CRITICAL_SECTION RTL_CRITICAL_SECTION;
61 typedef PCRITICAL_SECTION PRTL_CRITICAL_SECTION;
62 typedef LPCRITICAL_SECTION LPRTL_CRITICAL_SECTION;
64 #endif /* !__USE_W32API */
67 typedef struct _RTL_PROCESS_INFO
73 SECTION_IMAGE_INFORMATION ImageInfo;
74 } RTL_PROCESS_INFO, *PRTL_PROCESS_INFO;
76 typedef struct _RTL_RESOURCE
78 CRITICAL_SECTION Lock;
79 HANDLE SharedSemaphore;
81 HANDLE ExclusiveSemaphore;
82 ULONG ExclusiveWaiters;
85 ULONG TimeoutBoost; /* ?? */
86 PVOID DebugInfo; /* ?? */
87 } RTL_RESOURCE, *PRTL_RESOURCE;
89 typedef struct _RTL_HANDLE
91 struct _RTL_HANDLE *Next; /* pointer to next free handle */
92 } RTL_HANDLE, *PRTL_HANDLE;
94 typedef struct _RTL_HANDLE_TABLE
96 ULONG TableSize; /* maximum number of handles */
97 ULONG HandleSize; /* size of handle in bytes */
98 PRTL_HANDLE Handles; /* pointer to handle array */
99 PRTL_HANDLE Limit; /* limit of pointers */
100 PRTL_HANDLE FirstFree; /* pointer to first free handle */
101 PRTL_HANDLE LastUsed; /* pointer to last allocated handle */
102 } RTL_HANDLE_TABLE, *PRTL_HANDLE_TABLE;
105 #define HEAP_BASE (0xa0000000)
107 /* RtlQueryProcessDebugInformation */
108 #define PDI_MODULES 0x01 /* The loaded modules of the process */
109 #define PDI_BACKTRACE 0x02 /* The heap stack back traces */
110 #define PDI_HEAPS 0x04 /* The heaps of the process */
111 #define PDI_HEAP_TAGS 0x08 /* The heap tags */
112 #define PDI_HEAP_BLOCKS 0x10 /* The heap blocks */
113 #define PDI_LOCKS 0x20 /* The locks created by the process */
117 RtlDeleteCriticalSection (
118 PCRITICAL_SECTION CriticalSection
123 RtlEnterCriticalSection (
124 PCRITICAL_SECTION CriticalSection
129 RtlInitializeCriticalSection (
130 PCRITICAL_SECTION CriticalSection
135 RtlLeaveCriticalSection (
136 PCRITICAL_SECTION CriticalSection
141 RtlTryEnterCriticalSection (
142 PCRITICAL_SECTION CriticalSection
152 PDEBUG_BUFFER STDCALL
153 RtlCreateQueryDebugBuffer(IN ULONG Size,
154 IN BOOLEAN EventPair);
157 RtlDestroyQueryDebugBuffer(IN PDEBUG_BUFFER DebugBuffer);
161 RtlEqualComputerName (
162 IN PUNICODE_STRING ComputerName1,
163 IN PUNICODE_STRING ComputerName2
169 IN PUNICODE_STRING DomainName1,
170 IN PUNICODE_STRING DomainName2
175 RtlEraseUnicodeString (
176 IN PUNICODE_STRING String
181 RtlLargeIntegerToChar (
182 IN PLARGE_INTEGER Value,
193 RtlDetermineDosPathNameType_U (
199 RtlDoesFileExists_U (
205 RtlDosPathNameToNtPathName_U (
207 PUNICODE_STRING ntname,
225 RtlGetCurrentDirectory_U (
232 RtlGetFullPathName_U (
241 RtlGetLongestNtPathLength (
245 ULONG STDCALL RtlGetNtGlobalFlags(VOID);
247 BOOLEAN STDCALL RtlGetNtProductType(PNT_PRODUCT_TYPE ProductType);
258 RtlIsDosDeviceName_U (
264 RtlSetCurrentDirectory_U (
268 /* Environment functions */
283 RtlCreateEnvironment (
290 RtlDestroyEnvironment (
296 RtlExpandEnvironmentStrings_U (
298 PUNICODE_STRING Source,
299 PUNICODE_STRING Destination,
305 RtlQueryEnvironmentVariable_U (
307 PUNICODE_STRING Name,
308 PUNICODE_STRING Value
312 RtlQueryProcessDebugInformation(IN ULONG ProcessId,
313 IN ULONG DebugInfoClassMask,
314 IN OUT PDEBUG_BUFFER DebugBuffer);
318 RtlSetCurrentEnvironment (
319 PWSTR NewEnvironment,
320 PWSTR *OldEnvironment
325 RtlSetEnvironmentVariable (
327 PUNICODE_STRING Name,
328 PUNICODE_STRING Value
333 RtlCreateUserThread (
334 IN HANDLE ProcessHandle,
335 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
336 IN BOOLEAN CreateSuspended,
337 IN LONG StackZeroBits,
338 IN OUT PULONG StackReserve,
339 IN OUT PULONG StackCommit,
340 IN PTHREAD_START_ROUTINE StartAddress,
342 IN OUT PHANDLE ThreadHandle,
343 IN OUT PCLIENT_ID ClientId
346 NTSTATUS STDCALL RtlExitUserThread(NTSTATUS Status);
350 RtlFreeUserThreadStack (
351 IN HANDLE ProcessHandle,
352 IN HANDLE ThreadHandle
357 RtlCreateUserProcess (
358 IN PUNICODE_STRING ImageFileName,
360 IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters,
361 IN PSECURITY_DESCRIPTOR ProcessSecutityDescriptor OPTIONAL,
362 IN PSECURITY_DESCRIPTOR ThreadSecurityDescriptor OPTIONAL,
363 IN HANDLE ParentProcess OPTIONAL,
364 IN BOOLEAN CurrentDirectory,
365 IN HANDLE DebugPort OPTIONAL,
366 IN HANDLE ExceptionPort OPTIONAL,
367 OUT PRTL_PROCESS_INFO ProcessInfo
372 RtlCreateProcessParameters (
373 OUT PRTL_USER_PROCESS_PARAMETERS *ProcessParameters,
374 IN PUNICODE_STRING ImagePathName OPTIONAL,
375 IN PUNICODE_STRING DllPath OPTIONAL,
376 IN PUNICODE_STRING CurrentDirectory OPTIONAL,
377 IN PUNICODE_STRING CommandLine OPTIONAL,
378 IN PWSTR Environment OPTIONAL,
379 IN PUNICODE_STRING WindowTitle OPTIONAL,
380 IN PUNICODE_STRING DesktopInfo OPTIONAL,
381 IN PUNICODE_STRING ShellInfo OPTIONAL,
382 IN PUNICODE_STRING RuntimeInfo OPTIONAL
385 PRTL_USER_PROCESS_PARAMETERS
387 RtlDeNormalizeProcessParams (
388 IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
393 RtlDestroyProcessParameters (
394 IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
397 PRTL_USER_PROCESS_PARAMETERS
399 RtlNormalizeProcessParams (
400 IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
405 RtlLocalTimeToSystemTime (
406 PLARGE_INTEGER LocalTime,
407 PLARGE_INTEGER SystemTime
412 RtlSystemTimeToLocalTime (
413 PLARGE_INTEGER SystemTime,
414 PLARGE_INTEGER LocalTime
418 RtlTimeToElapsedTimeFields(IN PLARGE_INTEGER Time,
419 OUT PTIME_FIELDS TimeFields);
428 /* resource functions */
432 RtlAcquireResourceExclusive (
433 IN PRTL_RESOURCE Resource,
439 RtlAcquireResourceShared (
440 IN PRTL_RESOURCE Resource,
446 RtlConvertExclusiveToShared (
447 IN PRTL_RESOURCE Resource
452 RtlConvertSharedToExclusive (
453 IN PRTL_RESOURCE Resource
459 IN PRTL_RESOURCE Resource
465 IN PRTL_RESOURCE Resource
470 RtlInitializeResource (
471 IN PRTL_RESOURCE Resource
477 IN PRTL_RESOURCE Resource
480 /* handle table functions */
485 IN PRTL_HANDLE_TABLE HandleTable,
491 RtlDestroyHandleTable (
492 IN PRTL_HANDLE_TABLE HandleTable
498 IN PRTL_HANDLE_TABLE HandleTable,
499 IN PRTL_HANDLE Handle
504 RtlInitializeHandleTable (
507 IN PRTL_HANDLE_TABLE HandleTable
513 IN PRTL_HANDLE_TABLE HandleTable,
514 IN PRTL_HANDLE Handle
519 RtlIsValidIndexHandle (
520 IN PRTL_HANDLE_TABLE HandleTable,
521 IN OUT PRTL_HANDLE *Handle,
526 RtlAdjustPrivilege(IN ULONG Privilege,
528 IN BOOLEAN CurrentThread,
529 OUT PBOOLEAN Enabled);
534 IN SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
540 OUT HANDLE KeyHandle,
541 IN ACCESS_MASK DesiredAccess,
542 IN POBJECT_ATTRIBUTES ObjectAttributes,
544 OUT PULONG Disposition,
550 RtlpNtEnumerateSubKey (
552 OUT PUNICODE_STRING SubKeyName,
559 RtlpNtMakeTemporaryKey (
566 OUT HANDLE KeyHandle,
567 IN ACCESS_MASK DesiredAccess,
568 IN POBJECT_ATTRIBUTES ObjectAttributes,
574 RtlpNtQueryValueKey (
576 OUT PULONG Type OPTIONAL,
577 OUT PVOID Data OPTIONAL,
578 IN OUT PULONG DataLength OPTIONAL,
592 VOID NTAPI RtlRunDecodeUnicodeString
595 IN OUT PUNICODE_STRING uString
598 VOID NTAPI RtlRunEncodeUnicodeString
601 IN OUT PUNICODE_STRING uString
606 #ifndef __INTERLOCKED_DECLARED
607 #define __INTERLOCKED_DECLARED
611 InterlockedIncrement (
617 InterlockedDecrement (
623 InterlockedExchange (
630 InterlockedCompareExchange (
638 InterlockedExchangeAdd (
643 #endif /* __INTERLOCKED_DECLARED */
645 #endif /* __NTDRIVER__ */
649 #endif /* __cplusplus */
652 #endif /* __INCLUDE_NTDLL_RTL_H */