ec760a2f8ecae0a547cb5c48a1ef154583b6d869
[reactos.git] / reactos / include / ntdll / rtl.h
1 /* $Id: rtl.h,v 1.49 2004/10/04 21:38:48 ion 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 #define HEAP_BASE (0xA0000000)
177
178 /* RtlQueryProcessDebugInformation */
179 #define PDI_MODULES 0x01 /* The loaded modules of the process */
180 #define PDI_BACKTRACE 0x02 /* The heap stack back traces */
181 #define PDI_HEAPS 0x04 /* The heaps of the process */
182 #define PDI_HEAP_TAGS 0x08 /* The heap tags */
183 #define PDI_HEAP_BLOCKS 0x10 /* The heap blocks */
184 #define PDI_LOCKS 0x20 /* The locks created by the process */
185
186
187 NTSTATUS STDCALL
188 RtlAddAccessAllowedAceEx (IN OUT PACL Acl,
189 IN ULONG Revision,
190 IN ULONG Flags,
191 IN ACCESS_MASK AccessMask,
192 IN PSID Sid);
193
194 NTSTATUS STDCALL
195 RtlAddAccessDeniedAceEx (IN OUT PACL Acl,
196 IN ULONG Revision,
197 IN ULONG Flags,
198 IN ACCESS_MASK AccessMask,
199 IN PSID Sid);
200
201 NTSTATUS STDCALL
202 RtlAddAuditAccessAceEx(IN OUT PACL Acl,
203 IN ULONG Revision,
204 IN ULONG Flags,
205 IN ACCESS_MASK AccessMask,
206 IN PSID Sid,
207 IN BOOLEAN Success,
208 IN BOOLEAN Failure);
209
210 VOID STDCALL
211 RtlDeleteCriticalSection (PCRITICAL_SECTION CriticalSection);
212
213 WCHAR STDCALL
214 RtlDowncaseUnicodeChar(IN WCHAR Source);
215
216 VOID STDCALL
217 RtlEnterCriticalSection (PCRITICAL_SECTION CriticalSection);
218
219 NTSTATUS STDCALL
220 RtlInitializeCriticalSection (PCRITICAL_SECTION CriticalSection);
221
222 NTSTATUS STDCALL
223 RtlInitializeCriticalSectionAndSpinCount (PCRITICAL_SECTION CriticalSection,
224 ULONG SpinCount);
225
226 NTSTATUS STDCALL
227 RtlInt64ToUnicodeString (IN ULONGLONG Value,
228 IN ULONG Base,
229 PUNICODE_STRING String);
230
231 VOID STDCALL
232 RtlLeaveCriticalSection (PCRITICAL_SECTION CriticalSection);
233
234 BOOLEAN STDCALL
235 RtlTryEnterCriticalSection (PCRITICAL_SECTION CriticalSection);
236
237 DWORD STDCALL
238 RtlCompactHeap (
239 HANDLE heap,
240 DWORD flags
241 );
242
243 ULONG STDCALL
244 RtlComputeCrc32 (IN ULONG Initial,
245 IN PUCHAR Data,
246 IN ULONG Length);
247
248 PDEBUG_BUFFER STDCALL
249 RtlCreateQueryDebugBuffer(IN ULONG Size,
250 IN BOOLEAN EventPair);
251
252 NTSTATUS STDCALL
253 RtlDestroyQueryDebugBuffer(IN PDEBUG_BUFFER DebugBuffer);
254
255 BOOLEAN STDCALL
256 RtlEqualComputerName (
257 IN PUNICODE_STRING ComputerName1,
258 IN PUNICODE_STRING ComputerName2
259 );
260
261 BOOLEAN STDCALL
262 RtlEqualDomainName (
263 IN PUNICODE_STRING DomainName1,
264 IN PUNICODE_STRING DomainName2
265 );
266
267 VOID STDCALL
268 RtlEraseUnicodeString (
269 IN PUNICODE_STRING String
270 );
271
272 NTSTATUS STDCALL
273 RtlLargeIntegerToChar (
274 IN PLARGE_INTEGER Value,
275 IN ULONG Base,
276 IN ULONG Length,
277 IN OUT PCHAR String
278 );
279
280
281 /* Path functions */
282
283 ULONG
284 STDCALL
285 RtlDetermineDosPathNameType_U (
286 PWSTR Path
287 );
288
289 BOOLEAN
290 STDCALL
291 RtlDoesFileExists_U (
292 PWSTR FileName
293 );
294
295 BOOLEAN
296 STDCALL
297 RtlDosPathNameToNtPathName_U (
298 PWSTR dosname,
299 PUNICODE_STRING ntname,
300 PWSTR *shortname,
301 PCURDIR nah
302 );
303
304 ULONG
305 STDCALL
306 RtlDosSearchPath_U (
307 WCHAR *sp,
308 WCHAR *name,
309 WCHAR *ext,
310 ULONG buf_sz,
311 WCHAR *buffer,
312 WCHAR **shortname
313 );
314
315 ULONG
316 STDCALL
317 RtlGetCurrentDirectory_U (
318 ULONG MaximumLength,
319 PWSTR Buffer
320 );
321
322 ULONG
323 STDCALL
324 RtlGetFullPathName_U (
325 WCHAR *dosname,
326 ULONG size,
327 WCHAR *buf,
328 WCHAR **shortname
329 );
330
331 ULONG
332 STDCALL
333 RtlGetLongestNtPathLength (
334 VOID
335 );
336
337 ULONG STDCALL
338 RtlGetNtGlobalFlags (VOID);
339
340 BOOLEAN STDCALL
341 RtlGetNtProductType (PNT_PRODUCT_TYPE ProductType);
342
343 ULONG
344 STDCALL
345 RtlGetProcessHeaps (
346 ULONG HeapCount,
347 HANDLE *HeapArray
348 );
349
350 ULONG
351 STDCALL
352 RtlIsDosDeviceName_U (
353 PWSTR DeviceName
354 );
355
356 NTSTATUS
357 STDCALL
358 RtlSetCurrentDirectory_U (
359 PUNICODE_STRING name
360 );
361
362 /* Environment functions */
363 VOID
364 STDCALL
365 RtlAcquirePebLock (
366 VOID
367 );
368
369 VOID
370 STDCALL
371 RtlReleasePebLock (
372 VOID
373 );
374
375 NTSTATUS
376 STDCALL
377 RtlCreateEnvironment (
378 BOOLEAN Inherit,
379 PWSTR *Environment
380 );
381
382 VOID
383 STDCALL
384 RtlDestroyEnvironment (
385 PWSTR Environment
386 );
387
388 NTSTATUS
389 STDCALL
390 RtlExpandEnvironmentStrings_U (
391 PWSTR Environment,
392 PUNICODE_STRING Source,
393 PUNICODE_STRING Destination,
394 PULONG Length
395 );
396
397 NTSTATUS
398 STDCALL
399 RtlQueryEnvironmentVariable_U (
400 PWSTR Environment,
401 PUNICODE_STRING Name,
402 PUNICODE_STRING Value
403 );
404
405 NTSTATUS STDCALL
406 RtlQueryProcessDebugInformation(IN ULONG ProcessId,
407 IN ULONG DebugInfoClassMask,
408 IN OUT PDEBUG_BUFFER DebugBuffer);
409
410 VOID
411 STDCALL
412 RtlSetCurrentEnvironment (
413 PWSTR NewEnvironment,
414 PWSTR *OldEnvironment
415 );
416
417 NTSTATUS
418 STDCALL
419 RtlSetEnvironmentVariable (
420 PWSTR *Environment,
421 PUNICODE_STRING Name,
422 PUNICODE_STRING Value
423 );
424
425 NTSTATUS
426 STDCALL
427 RtlCreateUserThread (
428 IN HANDLE ProcessHandle,
429 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
430 IN BOOLEAN CreateSuspended,
431 IN LONG StackZeroBits,
432 IN OUT PULONG StackReserve,
433 IN OUT PULONG StackCommit,
434 IN PTHREAD_START_ROUTINE StartAddress,
435 IN PVOID Parameter,
436 IN OUT PHANDLE ThreadHandle,
437 IN OUT PCLIENT_ID ClientId
438 );
439
440 NTSTATUS STDCALL
441 RtlExitUserThread (NTSTATUS Status);
442
443 NTSTATUS
444 STDCALL
445 RtlFreeUserThreadStack (
446 IN HANDLE ProcessHandle,
447 IN HANDLE ThreadHandle
448 );
449
450 NTSTATUS
451 STDCALL
452 RtlCreateUserProcess (
453 IN PUNICODE_STRING ImageFileName,
454 IN ULONG Attributes,
455 IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters,
456 IN PSECURITY_DESCRIPTOR ProcessSecutityDescriptor OPTIONAL,
457 IN PSECURITY_DESCRIPTOR ThreadSecurityDescriptor OPTIONAL,
458 IN HANDLE ParentProcess OPTIONAL,
459 IN BOOLEAN CurrentDirectory,
460 IN HANDLE DebugPort OPTIONAL,
461 IN HANDLE ExceptionPort OPTIONAL,
462 OUT PRTL_PROCESS_INFO ProcessInfo
463 );
464
465 NTSTATUS
466 STDCALL
467 RtlCreateProcessParameters (
468 OUT PRTL_USER_PROCESS_PARAMETERS *ProcessParameters,
469 IN PUNICODE_STRING ImagePathName OPTIONAL,
470 IN PUNICODE_STRING DllPath OPTIONAL,
471 IN PUNICODE_STRING CurrentDirectory OPTIONAL,
472 IN PUNICODE_STRING CommandLine OPTIONAL,
473 IN PWSTR Environment OPTIONAL,
474 IN PUNICODE_STRING WindowTitle OPTIONAL,
475 IN PUNICODE_STRING DesktopInfo OPTIONAL,
476 IN PUNICODE_STRING ShellInfo OPTIONAL,
477 IN PUNICODE_STRING RuntimeInfo OPTIONAL
478 );
479
480 PRTL_USER_PROCESS_PARAMETERS
481 STDCALL
482 RtlDeNormalizeProcessParams (
483 IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
484 );
485
486 NTSTATUS
487 STDCALL
488 RtlDestroyProcessParameters (
489 IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
490 );
491
492 PRTL_USER_PROCESS_PARAMETERS
493 STDCALL
494 RtlNormalizeProcessParams (
495 IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
496 );
497
498 NTSTATUS
499 STDCALL
500 RtlLocalTimeToSystemTime (
501 PLARGE_INTEGER LocalTime,
502 PLARGE_INTEGER SystemTime
503 );
504
505 NTSTATUS
506 STDCALL
507 RtlSystemTimeToLocalTime (
508 PLARGE_INTEGER SystemTime,
509 PLARGE_INTEGER LocalTime
510 );
511
512 VOID STDCALL
513 RtlTimeToElapsedTimeFields(IN PLARGE_INTEGER Time,
514 OUT PTIME_FIELDS TimeFields);
515
516 VOID
517 STDCALL
518 RtlRaiseStatus (
519 IN NTSTATUS Status
520 );
521
522
523 /* resource functions */
524
525 BOOLEAN
526 STDCALL
527 RtlAcquireResourceExclusive (
528 IN PRTL_RESOURCE Resource,
529 IN BOOLEAN Wait
530 );
531
532 BOOLEAN
533 STDCALL
534 RtlAcquireResourceShared (
535 IN PRTL_RESOURCE Resource,
536 IN BOOLEAN Wait
537 );
538
539 VOID
540 STDCALL
541 RtlConvertExclusiveToShared (
542 IN PRTL_RESOURCE Resource
543 );
544
545 VOID
546 STDCALL
547 RtlConvertSharedToExclusive (
548 IN PRTL_RESOURCE Resource
549 );
550
551 VOID
552 STDCALL
553 RtlDeleteResource (
554 IN PRTL_RESOURCE Resource
555 );
556
557 VOID
558 STDCALL
559 RtlDumpResource (
560 IN PRTL_RESOURCE Resource
561 );
562
563 VOID
564 STDCALL
565 RtlInitializeResource (
566 IN PRTL_RESOURCE Resource
567 );
568
569 VOID
570 STDCALL
571 RtlReleaseResource (
572 IN PRTL_RESOURCE Resource
573 );
574
575 /* handle table functions */
576
577 PRTL_HANDLE
578 STDCALL
579 RtlAllocateHandle (
580 IN PRTL_HANDLE_TABLE HandleTable,
581 IN OUT PULONG Index
582 );
583
584 VOID
585 STDCALL
586 RtlDestroyHandleTable (
587 IN PRTL_HANDLE_TABLE HandleTable
588 );
589
590 BOOLEAN
591 STDCALL
592 RtlFreeHandle (
593 IN PRTL_HANDLE_TABLE HandleTable,
594 IN PRTL_HANDLE Handle
595 );
596
597 VOID
598 STDCALL
599 RtlInitializeHandleTable (
600 IN ULONG TableSize,
601 IN ULONG HandleSize,
602 IN PRTL_HANDLE_TABLE HandleTable
603 );
604
605 BOOLEAN
606 STDCALL
607 RtlIsValidHandle (
608 IN PRTL_HANDLE_TABLE HandleTable,
609 IN PRTL_HANDLE Handle
610 );
611
612 BOOLEAN
613 STDCALL
614 RtlIsValidIndexHandle (
615 IN PRTL_HANDLE_TABLE HandleTable,
616 IN OUT PRTL_HANDLE *Handle,
617 IN ULONG Index
618 );
619
620 NTSTATUS STDCALL
621 RtlAdjustPrivilege(IN ULONG Privilege,
622 IN BOOLEAN Enable,
623 IN BOOLEAN CurrentThread,
624 OUT PBOOLEAN Enabled);
625
626 NTSTATUS
627 STDCALL
628 RtlImpersonateSelf (
629 IN SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
630 );
631
632 NTSTATUS
633 STDCALL
634 RtlpNtCreateKey (
635 OUT HANDLE KeyHandle,
636 IN ACCESS_MASK DesiredAccess,
637 IN POBJECT_ATTRIBUTES ObjectAttributes,
638 IN ULONG Unused1,
639 OUT PULONG Disposition,
640 IN ULONG Unused2
641 );
642
643 NTSTATUS
644 STDCALL
645 RtlpNtEnumerateSubKey (
646 IN HANDLE KeyHandle,
647 OUT PUNICODE_STRING SubKeyName,
648 IN ULONG Index,
649 IN ULONG Unused
650 );
651
652 NTSTATUS
653 STDCALL
654 RtlpNtMakeTemporaryKey (
655 IN HANDLE KeyHandle
656 );
657
658 NTSTATUS
659 STDCALL
660 RtlpNtOpenKey (
661 OUT HANDLE KeyHandle,
662 IN ACCESS_MASK DesiredAccess,
663 IN POBJECT_ATTRIBUTES ObjectAttributes,
664 IN ULONG Unused
665 );
666
667 NTSTATUS
668 STDCALL
669 RtlpNtQueryValueKey (
670 IN HANDLE KeyHandle,
671 OUT PULONG Type OPTIONAL,
672 OUT PVOID Data OPTIONAL,
673 IN OUT PULONG DataLength OPTIONAL,
674 IN ULONG Unused
675 );
676
677 NTSTATUS
678 STDCALL
679 RtlpNtSetValueKey (
680 IN HANDLE KeyHandle,
681 IN ULONG Type,
682 IN PVOID Data,
683 IN ULONG DataLength
684 );
685
686
687 VOID STDCALL
688 RtlRunDecodeUnicodeString (IN UCHAR Hash,
689 IN OUT PUNICODE_STRING String);
690
691 VOID STDCALL
692 RtlRunEncodeUnicodeString (IN OUT PUCHAR Hash,
693 IN OUT PUNICODE_STRING String);
694
695 /* Timer Queue functions */
696
697 #ifdef __USE_W32API
698 #include <winnt.h>
699 #else /* __USE_W32API */
700 typedef VOID (CALLBACK *WAITORTIMERCALLBACKFUNC) (PVOID, BOOLEAN );
701 #endif /* __USE_W32API */
702
703 NTSTATUS
704 STDCALL
705 RtlCreateTimer(HANDLE TimerQueue,PHANDLE phNewTimer, WAITORTIMERCALLBACKFUNC Callback,PVOID Parameter,DWORD DueTime,DWORD Period,ULONG Flags);
706
707 NTSTATUS
708 STDCALL
709 RtlCreateTimerQueue(PHANDLE TimerQueue);
710
711 NTSTATUS
712 STDCALL
713 RtlDeleteTimer(HANDLE TimerQueue,HANDLE Timer,HANDLE CompletionEvent);
714
715 NTSTATUS
716 STDCALL
717 RtlUpdateTimer(HANDLE TimerQueue,HANDLE Timer,ULONG DueTime,ULONG Period);
718
719 NTSTATUS
720 STDCALL
721 RtlDeleteTimerQueueEx(HANDLE TimerQueue,HANDLE CompletionEvent);
722
723 NTSTATUS
724 STDCALL
725 RtlDeleteTimerQueue(HANDLE TimerQueue);
726
727
728 #ifndef __NTDRIVER__
729
730 #ifndef __INTERLOCKED_DECLARED
731 #define __INTERLOCKED_DECLARED
732
733 LONG
734 STDCALL
735 InterlockedIncrement (
736 PLONG Addend
737 );
738
739 LONG
740 STDCALL
741 InterlockedDecrement (
742 PLONG lpAddend
743 );
744
745 LONG
746 STDCALL
747 InterlockedExchange (
748 PLONG Target,
749 LONG Value
750 );
751
752 PVOID
753 STDCALL
754 InterlockedCompareExchange (
755 PVOID *Destination,
756 PVOID Exchange,
757 PVOID Comperand
758 );
759
760 LONG
761 STDCALL
762 InterlockedExchangeAdd (
763 PLONG Addend,
764 LONG Increment
765 );
766
767 #endif /* __INTERLOCKED_DECLARED */
768
769 #endif /* __NTDRIVER__ */
770
771 #ifdef __cplusplus
772 }
773 #endif /* __cplusplus */
774
775
776 #endif /* __INCLUDE_NTDLL_RTL_H */
777
778 /* EOF */