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
344 RtlFreeUserThreadStack (
345 IN HANDLE ProcessHandle,
346 IN HANDLE ThreadHandle
351 RtlCreateUserProcess (
352 IN PUNICODE_STRING ImageFileName,
354 IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters,
355 IN PSECURITY_DESCRIPTOR ProcessSecutityDescriptor OPTIONAL,
356 IN PSECURITY_DESCRIPTOR ThreadSecurityDescriptor OPTIONAL,
357 IN HANDLE ParentProcess OPTIONAL,
358 IN BOOLEAN CurrentDirectory,
359 IN HANDLE DebugPort OPTIONAL,
360 IN HANDLE ExceptionPort OPTIONAL,
361 OUT PRTL_PROCESS_INFO ProcessInfo
366 RtlCreateProcessParameters (
367 OUT PRTL_USER_PROCESS_PARAMETERS *ProcessParameters,
368 IN PUNICODE_STRING ImagePathName OPTIONAL,
369 IN PUNICODE_STRING DllPath OPTIONAL,
370 IN PUNICODE_STRING CurrentDirectory OPTIONAL,
371 IN PUNICODE_STRING CommandLine OPTIONAL,
372 IN PWSTR Environment OPTIONAL,
373 IN PUNICODE_STRING WindowTitle OPTIONAL,
374 IN PUNICODE_STRING DesktopInfo OPTIONAL,
375 IN PUNICODE_STRING ShellInfo OPTIONAL,
376 IN PUNICODE_STRING RuntimeInfo OPTIONAL
379 PRTL_USER_PROCESS_PARAMETERS
381 RtlDeNormalizeProcessParams (
382 IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
387 RtlDestroyProcessParameters (
388 IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
391 PRTL_USER_PROCESS_PARAMETERS
393 RtlNormalizeProcessParams (
394 IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
399 RtlLocalTimeToSystemTime (
400 PLARGE_INTEGER LocalTime,
401 PLARGE_INTEGER SystemTime
406 RtlSystemTimeToLocalTime (
407 PLARGE_INTEGER SystemTime,
408 PLARGE_INTEGER LocalTime
412 RtlTimeToElapsedTimeFields(IN PLARGE_INTEGER Time,
413 OUT PTIME_FIELDS TimeFields);
422 /* resource functions */
426 RtlAcquireResourceExclusive (
427 IN PRTL_RESOURCE Resource,
433 RtlAcquireResourceShared (
434 IN PRTL_RESOURCE Resource,
440 RtlConvertExclusiveToShared (
441 IN PRTL_RESOURCE Resource
446 RtlConvertSharedToExclusive (
447 IN PRTL_RESOURCE Resource
453 IN PRTL_RESOURCE Resource
459 IN PRTL_RESOURCE Resource
464 RtlInitializeResource (
465 IN PRTL_RESOURCE Resource
471 IN PRTL_RESOURCE Resource
474 /* handle table functions */
479 IN PRTL_HANDLE_TABLE HandleTable,
485 RtlDestroyHandleTable (
486 IN PRTL_HANDLE_TABLE HandleTable
492 IN PRTL_HANDLE_TABLE HandleTable,
493 IN PRTL_HANDLE Handle
498 RtlInitializeHandleTable (
501 IN PRTL_HANDLE_TABLE HandleTable
507 IN PRTL_HANDLE_TABLE HandleTable,
508 IN PRTL_HANDLE Handle
513 RtlIsValidIndexHandle (
514 IN PRTL_HANDLE_TABLE HandleTable,
515 IN OUT PRTL_HANDLE *Handle,
522 IN SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
528 OUT HANDLE KeyHandle,
529 IN ACCESS_MASK DesiredAccess,
530 IN POBJECT_ATTRIBUTES ObjectAttributes,
532 OUT PULONG Disposition,
538 RtlpNtEnumerateSubKey (
540 OUT PUNICODE_STRING SubKeyName,
547 RtlpNtMakeTemporaryKey (
554 OUT HANDLE KeyHandle,
555 IN ACCESS_MASK DesiredAccess,
556 IN POBJECT_ATTRIBUTES ObjectAttributes,
562 RtlpNtQueryValueKey (
564 OUT PULONG Type OPTIONAL,
565 OUT PVOID Data OPTIONAL,
566 IN OUT PULONG DataLength OPTIONAL,
581 #ifndef __INTERLOCKED_DECLARED
582 #define __INTERLOCKED_DECLARED
586 InterlockedIncrement (
592 InterlockedDecrement (
598 InterlockedExchange (
605 InterlockedCompareExchange (
613 InterlockedExchangeAdd (
618 #endif /* __INTERLOCKED_DECLARED */
620 #endif /* __NTDRIVER__ */
624 #endif /* __cplusplus */
627 #endif /* __INCLUDE_NTDLL_RTL_H */