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