5 #ifndef __INCLUDE_NTDLL_RTL_H
6 #define __INCLUDE_NTDLL_RTL_H
13 #endif /* __cplusplus */
15 typedef struct _DEBUG_BUFFER
19 PVOID RemoteSectionBase;
20 ULONG SectionBaseDelta;
21 HANDLE EventPairHandle;
23 HANDLE RemoteThreadHandle;
28 PVOID ModuleInformation;
29 PVOID BackTraceInformation;
30 PVOID HeapInformation;
31 PVOID LockInformation;
33 } DEBUG_BUFFER, *PDEBUG_BUFFER;
35 typedef struct _CRITICAL_SECTION_DEBUG {
37 WORD CreatorBackTraceIndex;
38 struct _CRITICAL_SECTION *CriticalSection;
39 LIST_ENTRY ProcessLocksList;
41 DWORD ContentionCount;
43 PVOID OwnerBackTrace[ 5 ];
44 } CRITICAL_SECTION_DEBUG, *PCRITICAL_SECTION_DEBUG;
46 typedef struct _CRITICAL_SECTION {
47 PCRITICAL_SECTION_DEBUG DebugInfo;
53 } CRITICAL_SECTION, *PCRITICAL_SECTION, *LPCRITICAL_SECTION;
55 typedef struct _RTL_PROCESS_INFO
61 SECTION_IMAGE_INFORMATION ImageInfo;
62 } RTL_PROCESS_INFO, *PRTL_PROCESS_INFO;
64 typedef struct _RTL_RESOURCE
66 CRITICAL_SECTION Lock;
67 HANDLE SharedSemaphore;
69 HANDLE ExclusiveSemaphore;
70 ULONG ExclusiveWaiters;
73 ULONG TimeoutBoost; /* ?? */
74 PVOID DebugInfo; /* ?? */
75 } RTL_RESOURCE, *PRTL_RESOURCE;
77 typedef struct _RTL_HANDLE
79 struct _RTL_HANDLE *Next; /* pointer to next free handle */
80 } RTL_HANDLE, *PRTL_HANDLE;
82 typedef struct _RTL_HANDLE_TABLE
84 ULONG TableSize; /* maximum number of handles */
85 ULONG HandleSize; /* size of handle in bytes */
86 PRTL_HANDLE Handles; /* pointer to handle array */
87 PRTL_HANDLE Limit; /* limit of pointers */
88 PRTL_HANDLE FirstFree; /* pointer to first free handle */
89 PRTL_HANDLE LastUsed; /* pointer to last allocated handle */
90 } RTL_HANDLE_TABLE, *PRTL_HANDLE_TABLE;
93 #define HEAP_BASE (0xa0000000)
95 /* RtlQueryProcessDebugInformation */
96 #define PDI_MODULES 0x01 /* The loaded modules of the process */
97 #define PDI_BACKTRACE 0x02 /* The heap stack back traces */
98 #define PDI_HEAPS 0x04 /* The heaps of the process */
99 #define PDI_HEAP_TAGS 0x08 /* The heap tags */
100 #define PDI_HEAP_BLOCKS 0x10 /* The heap blocks */
101 #define PDI_LOCKS 0x20 /* The locks created by the process */
105 RtlDeleteCriticalSection (
106 PCRITICAL_SECTION CriticalSection
111 RtlEnterCriticalSection (
112 PCRITICAL_SECTION CriticalSection
117 RtlInitializeCriticalSection (
118 PCRITICAL_SECTION CriticalSection
123 RtlLeaveCriticalSection (
124 PCRITICAL_SECTION CriticalSection
129 RtlTryEnterCriticalSection (
130 PCRITICAL_SECTION CriticalSection
140 PDEBUG_BUFFER STDCALL
141 RtlCreateQueryDebugBuffer(IN ULONG Size,
142 IN BOOLEAN EventPair);
145 RtlDestroyQueryDebugBuffer(IN PDEBUG_BUFFER DebugBuffer);
149 RtlEqualComputerName (
150 IN PUNICODE_STRING ComputerName1,
151 IN PUNICODE_STRING ComputerName2
157 IN PUNICODE_STRING DomainName1,
158 IN PUNICODE_STRING DomainName2
163 RtlEraseUnicodeString (
164 IN PUNICODE_STRING String
169 RtlLargeIntegerToChar (
170 IN PLARGE_INTEGER Value,
181 RtlDetermineDosPathNameType_U (
187 RtlDoesFileExists_U (
193 RtlDosPathNameToNtPathName_U (
195 PUNICODE_STRING ntname,
213 RtlGetCurrentDirectory_U (
220 RtlGetFullPathName_U (
229 RtlGetLongestNtPathLength (
233 ULONG STDCALL RtlGetNtGlobalFlags(VOID);
235 BOOLEAN STDCALL RtlGetNtProductType(PNT_PRODUCT_TYPE ProductType);
246 RtlIsDosDeviceName_U (
252 RtlSetCurrentDirectory_U (
256 /* Environment functions */
271 RtlCreateEnvironment (
278 RtlDestroyEnvironment (
284 RtlExpandEnvironmentStrings_U (
286 PUNICODE_STRING Source,
287 PUNICODE_STRING Destination,
293 RtlQueryEnvironmentVariable_U (
295 PUNICODE_STRING Name,
296 PUNICODE_STRING Value
300 RtlQueryProcessDebugInformation(IN ULONG ProcessId,
301 IN ULONG DebugInfoClassMask,
302 IN OUT PDEBUG_BUFFER DebugBuffer);
306 RtlSetCurrentEnvironment (
307 PWSTR NewEnvironment,
308 PWSTR *OldEnvironment
313 RtlSetEnvironmentVariable (
315 PUNICODE_STRING Name,
316 PUNICODE_STRING Value
321 RtlCreateUserThread (
322 IN HANDLE ProcessHandle,
323 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
324 IN BOOLEAN CreateSuspended,
325 IN LONG StackZeroBits,
326 IN OUT PULONG StackReserve,
327 IN OUT PULONG StackCommit,
328 IN PTHREAD_START_ROUTINE StartAddress,
330 IN OUT PHANDLE ThreadHandle,
331 IN OUT PCLIENT_ID ClientId
336 RtlFreeUserThreadStack (
337 IN HANDLE ProcessHandle,
338 IN HANDLE ThreadHandle
343 RtlCreateUserProcess (
344 IN PUNICODE_STRING ImageFileName,
346 IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters,
347 IN PSECURITY_DESCRIPTOR ProcessSecutityDescriptor OPTIONAL,
348 IN PSECURITY_DESCRIPTOR ThreadSecurityDescriptor OPTIONAL,
349 IN HANDLE ParentProcess OPTIONAL,
350 IN BOOLEAN CurrentDirectory,
351 IN HANDLE DebugPort OPTIONAL,
352 IN HANDLE ExceptionPort OPTIONAL,
353 OUT PRTL_PROCESS_INFO ProcessInfo
358 RtlCreateProcessParameters (
359 OUT PRTL_USER_PROCESS_PARAMETERS *ProcessParameters,
360 IN PUNICODE_STRING ImagePathName OPTIONAL,
361 IN PUNICODE_STRING DllPath OPTIONAL,
362 IN PUNICODE_STRING CurrentDirectory OPTIONAL,
363 IN PUNICODE_STRING CommandLine OPTIONAL,
364 IN PWSTR Environment OPTIONAL,
365 IN PUNICODE_STRING WindowTitle OPTIONAL,
366 IN PUNICODE_STRING DesktopInfo OPTIONAL,
367 IN PUNICODE_STRING ShellInfo OPTIONAL,
368 IN PUNICODE_STRING RuntimeInfo OPTIONAL
371 PRTL_USER_PROCESS_PARAMETERS
373 RtlDeNormalizeProcessParams (
374 IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
379 RtlDestroyProcessParameters (
380 IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
383 PRTL_USER_PROCESS_PARAMETERS
385 RtlNormalizeProcessParams (
386 IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
391 RtlLocalTimeToSystemTime (
392 PLARGE_INTEGER LocalTime,
393 PLARGE_INTEGER SystemTime
398 RtlSystemTimeToLocalTime (
399 PLARGE_INTEGER SystemTime,
400 PLARGE_INTEGER LocalTime
404 RtlTimeToElapsedTimeFields(IN PLARGE_INTEGER Time,
405 OUT PTIME_FIELDS TimeFields);
414 /* resource functions */
418 RtlAcquireResourceExclusive (
419 IN PRTL_RESOURCE Resource,
425 RtlAcquireResourceShared (
426 IN PRTL_RESOURCE Resource,
432 RtlConvertExclusiveToShared (
433 IN PRTL_RESOURCE Resource
438 RtlConvertSharedToExclusive (
439 IN PRTL_RESOURCE Resource
445 IN PRTL_RESOURCE Resource
451 IN PRTL_RESOURCE Resource
456 RtlInitializeResource (
457 IN PRTL_RESOURCE Resource
463 IN PRTL_RESOURCE Resource
466 /* handle table functions */
471 IN PRTL_HANDLE_TABLE HandleTable,
477 RtlDestroyHandleTable (
478 IN PRTL_HANDLE_TABLE HandleTable
484 IN PRTL_HANDLE_TABLE HandleTable,
485 IN PRTL_HANDLE Handle
490 RtlInitializeHandleTable (
493 IN PRTL_HANDLE_TABLE HandleTable
499 IN PRTL_HANDLE_TABLE HandleTable,
500 IN PRTL_HANDLE Handle
505 RtlIsValidIndexHandle (
506 IN PRTL_HANDLE_TABLE HandleTable,
507 IN OUT PRTL_HANDLE *Handle,
514 IN SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
520 OUT HANDLE KeyHandle,
521 IN ACCESS_MASK DesiredAccess,
522 IN POBJECT_ATTRIBUTES ObjectAttributes,
524 OUT PULONG Disposition,
530 RtlpNtEnumerateSubKey (
532 OUT PUNICODE_STRING SubKeyName,
539 RtlpNtMakeTemporaryKey (
546 OUT HANDLE KeyHandle,
547 IN ACCESS_MASK DesiredAccess,
548 IN POBJECT_ATTRIBUTES ObjectAttributes,
554 RtlpNtQueryValueKey (
556 OUT PULONG Type OPTIONAL,
557 OUT PVOID Data OPTIONAL,
558 IN OUT PULONG DataLength OPTIONAL,
574 InterlockedIncrement (
580 InterlockedDecrement (
586 InterlockedExchange (
593 InterlockedCompareExchange (
601 InterlockedExchangeAdd (
607 #endif /* __NTDRIVER__ */
611 #endif /* __cplusplus */
614 #endif /* __INCLUDE_NTDLL_RTL_H */