f2ef70d74eb784aa1bc426fe8dd833227a6f7e36
[reactos.git] / reactos / include / ntos / rtl.h
1 /* $Id: rtl.h,v 1.30 2004/06/20 23:37:52 gdalsnes Exp $
2 *
3 */
4 #ifndef __DDK_RTL_H
5 #define __DDK_RTL_H
6
7 #if defined(__NTOSKRNL__) || defined(__NTDRIVER__) || defined(__NTHAL__) || defined(__NTDLL__) || defined (__NTAPP__)
8
9 #include <stddef.h>
10 #include <stdarg.h>
11
12 #endif /* __NTOSKRNL__ || __NTDRIVER__ || __NTHAL__ || __NTDLL__ || __NTAPP__ */
13
14 #include <pe.h>
15 #include <ole32/guiddef.h>
16
17 #ifndef __USE_W32API
18
19 /*
20 * PURPOSE: Flags for RtlQueryRegistryValues
21 */
22 #define RTL_QUERY_REGISTRY_SUBKEY (0x00000001)
23 #define RTL_QUERY_REGISTRY_TOPKEY (0x00000002)
24 #define RTL_QUERY_REGISTRY_REQUIRED (0x00000004)
25 #define RTL_QUERY_REGISTRY_NOVALUE (0x00000008)
26 #define RTL_QUERY_REGISTRY_NOEXPAND (0x00000010)
27 #define RTL_QUERY_REGISTRY_DIRECT (0x00000020)
28 #define RTL_QUERY_REGISTRY_DELETE (0x00000040)
29
30
31 /*
32 * PURPOSE: Flags used by RtlIsTextUnicode and IsTextUnicode
33 */
34 #define IS_TEXT_UNICODE_ASCII16 (0x00000001)
35 #define IS_TEXT_UNICODE_REVERSE_ASCII16 (0x00000010)
36 #define IS_TEXT_UNICODE_STATISTICS (0x00000002)
37 #define IS_TEXT_UNICODE_REVERSE_STATISTICS (0x00000020)
38 #define IS_TEXT_UNICODE_CONTROLS (0x00000004)
39 #define IS_TEXT_UNICODE_REVERSE_CONTROLS (0x00000040)
40 #define IS_TEXT_UNICODE_SIGNATURE (0x00000008)
41 #define IS_TEXT_UNICODE_REVERSE_SIGNATURE (0x00000080)
42 #define IS_TEXT_UNICODE_ILLEGAL_CHARS (0x00000100)
43 #define IS_TEXT_UNICODE_ODD_LENGTH (0x00000200)
44 #define IS_TEXT_UNICODE_NULL_BYTES (0x00001000)
45 #define IS_TEXT_UNICODE_UNICODE_MASK (0x0000000F)
46 #define IS_TEXT_UNICODE_REVERSE_MASK (0x000000F0)
47 #define IS_TEXT_UNICODE_NOT_UNICODE_MASK (0x00000F00)
48 #define IS_TEXT_UNICODE_NOT_ASCII_MASK (0x0000F000)
49
50 /*
51 * VOID
52 * InitializeObjectAttributes (
53 * POBJECT_ATTRIBUTES InitializedAttributes,
54 * PUNICODE_STRING ObjectName,
55 * ULONG Attributes,
56 * HANDLE RootDirectory,
57 * PSECURITY_DESCRIPTOR SecurityDescriptor
58 * );
59 *
60 * FUNCTION: Sets up a parameter of type OBJECT_ATTRIBUTES for a
61 * subsequent call to ZwCreateXXX or ZwOpenXXX
62 * ARGUMENTS:
63 * InitializedAttributes (OUT) = Caller supplied storage for the
64 * object attributes
65 * ObjectName = Full path name for object
66 * Attributes = Attributes for the object
67 * RootDirectory = Where the object should be placed or NULL
68 * SecurityDescriptor = Ignored
69 */
70 #define InitializeObjectAttributes(p,n,a,r,s) \
71 { \
72 (p)->Length = sizeof(OBJECT_ATTRIBUTES); \
73 (p)->ObjectName = n; \
74 (p)->Attributes = a; \
75 (p)->RootDirectory = r; \
76 (p)->SecurityDescriptor = s; \
77 (p)->SecurityQualityOfService = NULL; \
78 }
79
80
81 /*
82 * VOID
83 * InitializeListHead (
84 * PLIST_ENTRY ListHead
85 * );
86 *
87 * FUNCTION: Initializes a double linked list
88 * ARGUMENTS:
89 * ListHead = Caller supplied storage for the head of the list
90 */
91 #define InitializeListHead(ListHead) \
92 { \
93 (ListHead)->Flink = (ListHead); \
94 (ListHead)->Blink = (ListHead); \
95 }
96
97
98 /*
99 * VOID
100 * InsertHeadList (
101 * PLIST_ENTRY ListHead,
102 * PLIST_ENTRY Entry
103 * );
104 *
105 * FUNCTION: Inserts an entry in a double linked list
106 * ARGUMENTS:
107 * ListHead = Head of the list
108 * Entry = Entry to insert
109 */
110 #define InsertHeadList(ListHead, ListEntry) \
111 { \
112 PLIST_ENTRY OldFlink; \
113 OldFlink = (ListHead)->Flink; \
114 (ListEntry)->Flink = OldFlink; \
115 (ListEntry)->Blink = (ListHead); \
116 OldFlink->Blink = (ListEntry); \
117 (ListHead)->Flink = (ListEntry); \
118 assert((ListEntry) != NULL); \
119 assert((ListEntry)->Blink!=NULL); \
120 assert((ListEntry)->Blink->Flink == (ListEntry)); \
121 assert((ListEntry)->Flink != NULL); \
122 assert((ListEntry)->Flink->Blink == (ListEntry)); \
123 }
124
125
126 /*
127 * VOID
128 * InsertTailList (
129 * PLIST_ENTRY ListHead,
130 * PLIST_ENTRY Entry
131 * );
132 *
133 * FUNCTION:
134 * Inserts an entry in a double linked list
135 *
136 * ARGUMENTS:
137 * ListHead = Head of the list
138 * Entry = Entry to insert
139 */
140 #define InsertTailList(ListHead, ListEntry) \
141 { \
142 PLIST_ENTRY OldBlink; \
143 OldBlink = (ListHead)->Blink; \
144 (ListEntry)->Flink = (ListHead); \
145 (ListEntry)->Blink = OldBlink; \
146 OldBlink->Flink = (ListEntry); \
147 (ListHead)->Blink = (ListEntry); \
148 assert((ListEntry) != NULL); \
149 assert((ListEntry)->Blink != NULL); \
150 assert((ListEntry)->Blink->Flink == (ListEntry)); \
151 assert((ListEntry)->Flink != NULL); \
152 assert((ListEntry)->Flink->Blink == (ListEntry)); \
153 }
154
155 /*
156 * BOOLEAN
157 * IsListEmpty (
158 * PLIST_ENTRY ListHead
159 * );
160 *
161 * FUNCTION:
162 * Checks if a double linked list is empty
163 *
164 * ARGUMENTS:
165 * ListHead = Head of the list
166 */
167 #define IsListEmpty(ListHead) \
168 ((ListHead)->Flink == (ListHead))
169
170
171 /*
172 * PSINGLE_LIST_ENTRY
173 * PopEntryList (
174 * PSINGLE_LIST_ENTRY ListHead
175 * );
176 *
177 * FUNCTION:
178 * Removes an entry from the head of a single linked list
179 *
180 * ARGUMENTS:
181 * ListHead = Head of the list
182 *
183 * RETURNS:
184 * The removed entry
185 */
186 /*
187 #define PopEntryList(ListHead) \
188 (ListHead)->Next; \
189 { \
190 PSINGLE_LIST_ENTRY FirstEntry; \
191 FirstEntry = (ListHead)->Next; \
192 if (FirstEntry != NULL) \
193 { \
194 (ListHead)->Next = FirstEntry->Next; \
195 } \
196 }
197 */
198 static inline PSINGLE_LIST_ENTRY
199 PopEntryList(PSINGLE_LIST_ENTRY ListHead)
200 {
201 PSINGLE_LIST_ENTRY ListEntry;
202
203 ListEntry = ListHead->Next;
204 if (ListEntry!=NULL)
205 {
206 ListHead->Next = ListEntry->Next;
207 }
208
209 return(ListEntry);
210 }
211
212 #define RtlCopyMemory(Destination,Source,Length) \
213 memcpy((Destination),(Source),(Length))
214
215 static
216 inline
217 VOID
218 PushEntryList (
219 PSINGLE_LIST_ENTRY ListHead,
220 PSINGLE_LIST_ENTRY Entry
221 )
222 {
223 Entry->Next = ListHead->Next;
224 ListHead->Next = Entry;
225 }
226
227 /*
228 *VOID
229 *RemoveEntryList (
230 * PLIST_ENTRY Entry
231 * );
232 *
233 * FUNCTION:
234 * Removes an entry from a double linked list
235 *
236 * ARGUMENTS:
237 * ListEntry = Entry to remove
238 */
239 #define RemoveEntryList(ListEntry) \
240 { \
241 PLIST_ENTRY OldFlink; \
242 PLIST_ENTRY OldBlink; \
243 assert((ListEntry) != NULL); \
244 assert((ListEntry)->Blink!=NULL); \
245 assert((ListEntry)->Blink->Flink == (ListEntry)); \
246 assert((ListEntry)->Flink != NULL); \
247 assert((ListEntry)->Flink->Blink == (ListEntry)); \
248 OldFlink = (ListEntry)->Flink; \
249 OldBlink = (ListEntry)->Blink; \
250 OldFlink->Blink = OldBlink; \
251 OldBlink->Flink = OldFlink; \
252 (ListEntry)->Flink = NULL; \
253 (ListEntry)->Blink = NULL; \
254 }
255
256
257 /*
258 * PLIST_ENTRY
259 * RemoveHeadList (
260 * PLIST_ENTRY ListHead
261 * );
262 *
263 * FUNCTION:
264 * Removes the head entry from a double linked list
265 *
266 * ARGUMENTS:
267 * ListHead = Head of the list
268 *
269 * RETURNS:
270 * The removed entry
271 */
272 /*
273 #define RemoveHeadList(ListHead) \
274 (ListHead)->Flink; \
275 {RemoveEntryList((ListHead)->Flink)}
276 */
277 /*
278 PLIST_ENTRY
279 RemoveHeadList (
280 PLIST_ENTRY ListHead
281 );
282 */
283
284 static
285 inline
286 PLIST_ENTRY
287 RemoveHeadList (
288 PLIST_ENTRY ListHead
289 )
290 {
291 PLIST_ENTRY Old;
292 PLIST_ENTRY OldFlink;
293 PLIST_ENTRY OldBlink;
294
295 Old = ListHead->Flink;
296
297 OldFlink = ListHead->Flink->Flink;
298 OldBlink = ListHead->Flink->Blink;
299 OldFlink->Blink = OldBlink;
300 OldBlink->Flink = OldFlink;
301 if (Old != ListHead)
302 {
303 Old->Flink = NULL;
304 Old->Blink = NULL;
305 }
306
307 return(Old);
308 }
309
310
311 /*
312 * PLIST_ENTRY
313 * RemoveTailList (
314 * PLIST_ENTRY ListHead
315 * );
316 *
317 * FUNCTION:
318 * Removes the tail entry from a double linked list
319 *
320 * ARGUMENTS:
321 * ListHead = Head of the list
322 *
323 * RETURNS:
324 * The removed entry
325 */
326 /*
327 #define RemoveTailList(ListHead) \
328 (ListHead)->Blink; \
329 {RemoveEntryList((ListHead)->Blink)}
330 */
331 /*
332 PLIST_ENTRY
333 RemoveTailList (
334 PLIST_ENTRY ListHead
335 );
336 */
337
338 static
339 inline
340 PLIST_ENTRY
341 RemoveTailList (
342 PLIST_ENTRY ListHead
343 )
344 {
345 PLIST_ENTRY Old;
346 PLIST_ENTRY OldFlink;
347 PLIST_ENTRY OldBlink;
348
349 Old = ListHead->Blink;
350
351 OldFlink = ListHead->Blink->Flink;
352 OldBlink = ListHead->Blink->Blink;
353 OldFlink->Blink = OldBlink;
354 OldBlink->Flink = OldFlink;
355 if (Old != ListHead)
356 {
357 Old->Flink = NULL;
358 Old->Blink = NULL;
359 }
360
361 return(Old);
362 }
363
364
365 /*
366 * FIFO versions are slower but ensures that entries with equal SortField value
367 * are placed in FIFO order (assuming that entries are removed from Head).
368 */
369
370 #define InsertAscendingListFIFO(ListHead, Type, ListEntryField, NewEntry, SortField)\
371 {\
372 PLIST_ENTRY current;\
373 \
374 current = (ListHead)->Flink;\
375 while (current != (ListHead))\
376 {\
377 if (CONTAINING_RECORD(current, Type, ListEntryField)->SortField >\
378 (NewEntry)->SortField)\
379 {\
380 break;\
381 }\
382 current = current->Flink;\
383 }\
384 \
385 InsertTailList(current, &((NewEntry)->ListEntryField));\
386 }
387
388
389 #define InsertDescendingListFIFO(ListHead, Type, ListEntryField, NewEntry, SortField)\
390 {\
391 PLIST_ENTRY current;\
392 \
393 current = (ListHead)->Flink;\
394 while (current != (ListHead))\
395 {\
396 if (CONTAINING_RECORD(current, Type, ListEntryField)->SortField <\
397 (NewEntry)->SortField)\
398 {\
399 break;\
400 }\
401 current = current->Flink;\
402 }\
403 \
404 InsertTailList(current, &((NewEntry)->ListEntryField));\
405 }
406
407
408 #define InsertAscendingList(ListHead, Type, ListEntryField, NewEntry, SortField)\
409 {\
410 PLIST_ENTRY current;\
411 \
412 current = (ListHead)->Flink;\
413 while (current != (ListHead))\
414 {\
415 if (CONTAINING_RECORD(current, Type, ListEntryField)->SortField >=\
416 (NewEntry)->SortField)\
417 {\
418 break;\
419 }\
420 current = current->Flink;\
421 }\
422 \
423 InsertTailList(current, &((NewEntry)->ListEntryField));\
424 }
425
426
427 #define InsertDescendingList(ListHead, Type, ListEntryField, NewEntry, SortField)\
428 {\
429 PLIST_ENTRY current;\
430 \
431 current = (ListHead)->Flink;\
432 while (current != (ListHead))\
433 {\
434 if (CONTAINING_RECORD(current, Type, ListEntryField)->SortField <=\
435 (NewEntry)->SortField)\
436 {\
437 break;\
438 }\
439 current = current->Flink;\
440 }\
441 \
442 InsertTailList(current, &((NewEntry)->ListEntryField));\
443 }
444
445
446 /*
447 * BOOLEAN
448 * IsXstEntry (
449 * PLIST_ENTRY ListHead,
450 * PLIST_ENTRY Entry
451 * );
452 */
453 #define IsFirstEntry(ListHead, Entry) ((ListHead)->Flink == Entry)
454
455 #define IsLastEntry(ListHead, Entry) ((ListHead)->Blink == Entry)
456
457
458 NTSTATUS
459 STDCALL
460 RtlAppendUnicodeToString (
461 PUNICODE_STRING Destination,
462 PWSTR Source
463 );
464
465 ULONG
466 STDCALL
467 RtlCompareMemory (
468 PVOID Source1,
469 PVOID Source2,
470 ULONG Length
471 );
472
473 BOOLEAN
474 STDCALL
475 RtlEqualUnicodeString (
476 PUNICODE_STRING String1,
477 PUNICODE_STRING String2,
478 BOOLEAN CaseInSensitive
479 );
480
481 VOID
482 STDCALL
483 RtlGetCallersAddress (
484 PVOID * CallersAddress
485 );
486
487 NTSTATUS
488 STDCALL
489 RtlQueryRegistryValues (
490 IN ULONG RelativeTo,
491 IN PCWSTR Path,
492 IN PRTL_QUERY_REGISTRY_TABLE QueryTable,
493 IN PVOID Context,
494 IN PVOID Environment
495 );
496
497 NTSTATUS
498 STDCALL
499 RtlWriteRegistryValue (
500 ULONG RelativeTo,
501 PCWSTR Path,
502 PCWSTR ValueName,
503 ULONG ValueType,
504 PVOID ValueData,
505 ULONG ValueLength
506 );
507
508 NTSTATUS STDCALL
509 RtlDeleteRegistryValue(IN ULONG RelativeTo,
510 IN PCWSTR Path,
511 IN PCWSTR ValueName);
512
513 VOID STDCALL
514 RtlMoveMemory (PVOID Destination, CONST VOID* Source, ULONG Length);
515
516 BOOLEAN STDCALL
517 RtlEqualLuid(IN PLUID Luid1,
518 IN PLUID Luid2);
519
520 VOID
521 STDCALL
522 RtlFillMemory (
523 PVOID Destination,
524 ULONG Length,
525 UCHAR Fill
526 );
527
528 VOID STDCALL
529 RtlZeroMemory (PVOID Destination, ULONG Length);
530
531 #else /* __USE_W32API */
532
533 #include <ddk/ntifs.h>
534
535 #endif /* __USE_W32API */
536
537
538 /*
539 * PURPOSE: Used with RtlCheckRegistryKey, RtlCreateRegistryKey,
540 * RtlDeleteRegistryKey
541 */
542 #define RTL_REGISTRY_ABSOLUTE 0
543 #define RTL_REGISTRY_SERVICES 1
544 #define RTL_REGISTRY_CONTROL 2
545 #define RTL_REGISTRY_WINDOWS_NT 3
546 #define RTL_REGISTRY_DEVICEMAP 4
547 #define RTL_REGISTRY_USER 5
548 #define RTL_REGISTRY_ENUM 6 /* ReactOS specific: Used internally in kernel only */
549 #define RTL_REGISTRY_MAXIMUM 7
550
551 #define RTL_REGISTRY_HANDLE 0x40000000
552 #define RTL_REGISTRY_OPTIONAL 0x80000000
553
554
555 #define SHORT_SIZE (sizeof(USHORT))
556 #define SHORT_MASK (SHORT_SIZE-1)
557 #define LONG_SIZE (sizeof(ULONG))
558 #define LONG_MASK (LONG_SIZE-1)
559 #define LOWBYTE_MASK 0x00FF
560
561 #define FIRSTBYTE(Value) ((Value) & LOWBYTE_MASK)
562 #define SECONDBYTE(Value) (((Value) >> 8) & LOWBYTE_MASK)
563 #define THIRDBYTE(Value) (((Value) >> 16) & LOWBYTE_MASK)
564 #define FOURTHBYTE(Value) (((Value) >> 24) & LOWBYTE_MASK)
565
566 /* FIXME: reverse byte-order on big-endian machines (e.g. MIPS) */
567 #define SHORT_LEAST_SIGNIFICANT_BIT 0
568 #define SHORT_MOST_SIGNIFICANT_BIT 1
569
570 #define LONG_LEAST_SIGNIFICANT_BIT 0
571 #define LONG_3RD_MOST_SIGNIFICANT_BIT 1
572 #define LONG_2RD_MOST_SIGNIFICANT_BIT 2
573 #define LONG_MOST_SIGNIFICANT_BIT 3
574
575
576 #define NLS_ANSI_CODE_PAGE NlsAnsiCodePage
577 #define NLS_LEAD_BYTE_INFO NlsLeadByteInfo
578 #define NLS_MB_CODE_PAGE_TAG NlsMbCodePageTag
579 #define NLS_MB_OEM_CODE_PAGE_TAG NlsMbOemCodePageTag
580 #define NLS_OEM_LEAD_BYTE_INFO NlsOemLeadByteInfo
581
582 #if defined(__NTOSKRNL__) || defined(__NTDLL__)
583 extern USHORT EXPORTED NlsAnsiCodePage;
584 extern PUSHORT EXPORTED NlsLeadByteInfo;
585 extern BOOLEAN EXPORTED NlsMbCodePageTag;
586 extern BOOLEAN EXPORTED NlsMbOemCodePageTag;
587 extern PUSHORT EXPORTED NlsOemLeadByteInfo;
588 #else
589 extern USHORT IMPORTED NlsAnsiCodePage;
590 extern PUSHORT IMPORTED NlsLeadByteInfo;
591 extern BOOLEAN IMPORTED NlsMbCodePageTag;
592 extern BOOLEAN IMPORTED NlsMbOemCodePageTag;
593 extern PUSHORT IMPORTED NlsOemLeadByteInfo;
594 #endif /* __NTOSKRNL__ || __NTDLL__ */
595
596 /*
597 VOID
598 PushEntryList (
599 PSINGLE_LIST_ENTRY ListHead,
600 PSINGLE_LIST_ENTRY Entry
601 );
602 */
603 /*
604 #define PushEntryList(ListHead,Entry) \
605 (Entry)->Next = (ListHead)->Next; \
606 (ListHead)->Next = (Entry)
607 */
608
609
610 NTSTATUS STDCALL
611 RtlAbsoluteToSelfRelativeSD (PSECURITY_DESCRIPTOR AbsSD,
612 PSECURITY_DESCRIPTOR RelSD,
613 PULONG BufferLength);
614
615 NTSTATUS STDCALL
616 RtlAddAccessAllowedAce (PACL Acl,
617 ULONG Revision,
618 ACCESS_MASK AccessMask,
619 PSID Sid);
620
621 NTSTATUS STDCALL
622 RtlAddAccessDeniedAce (PACL Acl,
623 ULONG Revision,
624 ACCESS_MASK AccessMask,
625 PSID Sid);
626
627 NTSTATUS STDCALL
628 RtlAddAce (PACL Acl,
629 ULONG Revision,
630 ULONG StartingIndex,
631 PACE AceList,
632 ULONG AceListLength);
633
634 NTSTATUS STDCALL
635 RtlAddAtomToAtomTable (IN PRTL_ATOM_TABLE AtomTable,
636 IN PWSTR AtomName,
637 OUT PRTL_ATOM Atom);
638
639 NTSTATUS STDCALL
640 RtlAddAuditAccessAce (PACL Acl,
641 ULONG Revision,
642 ACCESS_MASK AccessMask,
643 PSID Sid,
644 BOOLEAN Success,
645 BOOLEAN Failure);
646
647 NTSTATUS STDCALL
648 RtlAddRange (IN OUT PRTL_RANGE_LIST RangeList,
649 IN ULONGLONG Start,
650 IN ULONGLONG End,
651 IN UCHAR Attributes,
652 IN ULONG Flags, /* RTL_RANGE_LIST_ADD_... flags */
653 IN PVOID UserData OPTIONAL,
654 IN PVOID Owner OPTIONAL);
655
656 NTSTATUS STDCALL
657 RtlAllocateAndInitializeSid (IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority,
658 IN UCHAR SubAuthorityCount,
659 IN ULONG SubAuthority0,
660 IN ULONG SubAuthority1,
661 IN ULONG SubAuthority2,
662 IN ULONG SubAuthority3,
663 IN ULONG SubAuthority4,
664 IN ULONG SubAuthority5,
665 IN ULONG SubAuthority6,
666 IN ULONG SubAuthority7,
667 OUT PSID *Sid);
668
669 PVOID STDCALL
670 RtlAllocateHeap (
671 HANDLE Heap,
672 ULONG Flags,
673 ULONG Size
674 );
675
676 WCHAR STDCALL
677 RtlAnsiCharToUnicodeChar (IN CHAR AnsiChar);
678
679 ULONG
680 STDCALL
681 RtlAnsiStringToUnicodeSize (
682 PANSI_STRING AnsiString
683 );
684
685 NTSTATUS
686 STDCALL
687 RtlAnsiStringToUnicodeString (
688 PUNICODE_STRING DestinationString,
689 PANSI_STRING SourceString,
690 BOOLEAN AllocateDestinationString
691 );
692
693 NTSTATUS
694 STDCALL
695 RtlAppendAsciizToString(
696 PSTRING Destination,
697 PCSZ Source
698 );
699
700 NTSTATUS
701 STDCALL
702 RtlAppendStringToString (
703 PSTRING Destination,
704 PSTRING Source
705 );
706
707 NTSTATUS
708 STDCALL
709 RtlAppendUnicodeStringToString (
710 PUNICODE_STRING Destination,
711 PUNICODE_STRING Source
712 );
713
714 BOOLEAN STDCALL
715 RtlAreAllAccessesGranted (ACCESS_MASK GrantedAccess,
716 ACCESS_MASK DesiredAccess);
717
718 BOOLEAN STDCALL
719 RtlAreAnyAccessesGranted (ACCESS_MASK GrantedAccess,
720 ACCESS_MASK DesiredAccess);
721
722 BOOLEAN
723 STDCALL
724 RtlAreBitsClear (
725 PRTL_BITMAP BitMapHeader,
726 ULONG StartingIndex,
727 ULONG Length
728 );
729
730 BOOLEAN
731 STDCALL
732 RtlAreBitsSet (
733 PRTL_BITMAP BitMapHeader,
734 ULONG StartingIndex,
735 ULONG Length
736 );
737
738 VOID
739 STDCALL
740 RtlAssert (
741 PVOID FailedAssertion,
742 PVOID FileName,
743 ULONG LineNumber,
744 PCHAR Message
745 );
746
747 NTSTATUS
748 STDCALL
749 RtlCharToInteger (
750 PCSZ String,
751 ULONG Base,
752 PULONG Value
753 );
754
755 NTSTATUS
756 STDCALL
757 RtlCheckRegistryKey (
758 ULONG RelativeTo,
759 PWSTR Path
760 );
761
762 VOID
763 STDCALL
764 RtlClearAllBits (
765 IN PRTL_BITMAP BitMapHeader
766 );
767
768 VOID
769 STDCALL
770 RtlClearBits (
771 IN PRTL_BITMAP BitMapHeader,
772 IN ULONG StartingIndex,
773 IN ULONG NumberToClear
774 );
775
776 DWORD
777 STDCALL
778 RtlCompactHeap (
779 HANDLE hheap,
780 DWORD flags
781 );
782
783 LONG
784 STDCALL
785 RtlCompareString (
786 PSTRING String1,
787 PSTRING String2,
788 BOOLEAN CaseInsensitive
789 );
790
791 LONG
792 STDCALL
793 RtlCompareUnicodeString (
794 PUNICODE_STRING String1,
795 PUNICODE_STRING String2,
796 BOOLEAN CaseInsensitive
797 );
798
799 NTSTATUS STDCALL
800 RtlCompressBuffer(IN USHORT CompressionFormatAndEngine,
801 IN PUCHAR UncompressedBuffer,
802 IN ULONG UncompressedBufferSize,
803 OUT PUCHAR CompressedBuffer,
804 IN ULONG CompressedBufferSize,
805 IN ULONG UncompressedChunkSize,
806 OUT PULONG FinalCompressedSize,
807 IN PVOID WorkSpace);
808
809 NTSTATUS STDCALL
810 RtlCompressChunks(IN PUCHAR UncompressedBuffer,
811 IN ULONG UncompressedBufferSize,
812 OUT PUCHAR CompressedBuffer,
813 IN ULONG CompressedBufferSize,
814 IN OUT PCOMPRESSED_DATA_INFO CompressedDataInfo,
815 IN ULONG CompressedDataInfoLength,
816 IN PVOID WorkSpace);
817
818 LARGE_INTEGER STDCALL
819 RtlConvertLongToLargeInteger (IN LONG SignedInteger);
820
821 NTSTATUS STDCALL
822 RtlConvertSidToUnicodeString (IN OUT PUNICODE_STRING String,
823 IN PSID Sid,
824 IN BOOLEAN AllocateString);
825
826 LARGE_INTEGER STDCALL
827 RtlConvertUlongToLargeInteger (IN ULONG UnsignedInteger);
828
829 #if 0
830 VOID
831 RtlCopyBytes (
832 PVOID Destination,
833 CONST VOID * Source,
834 ULONG Length
835 );
836
837 VOID
838 RtlCopyMemory (
839 VOID * Destination,
840 CONST VOID * Source,
841 ULONG Length
842 );
843 #endif
844
845 #define RtlCopyBytes RtlCopyMemory
846
847 VOID STDCALL
848 RtlCopyLuid(IN PLUID LuidDest,
849 IN PLUID LuidSrc);
850
851 VOID STDCALL
852 RtlCopyLuidAndAttributesArray(ULONG Count,
853 PLUID_AND_ATTRIBUTES Src,
854 PLUID_AND_ATTRIBUTES Dest);
855
856 NTSTATUS STDCALL
857 RtlCopyRangeList (OUT PRTL_RANGE_LIST CopyRangeList,
858 IN PRTL_RANGE_LIST RangeList);
859
860 NTSTATUS STDCALL
861 RtlCopySid(ULONG BufferLength,
862 PSID Dest,
863 PSID Src);
864
865 NTSTATUS STDCALL
866 RtlCopySidAndAttributesArray(ULONG Count,
867 PSID_AND_ATTRIBUTES Src,
868 ULONG SidAreaSize,
869 PSID_AND_ATTRIBUTES Dest,
870 PVOID SidArea,
871 PVOID* RemainingSidArea,
872 PULONG RemainingSidAreaSize);
873
874 VOID STDCALL
875 RtlCopyString(PSTRING DestinationString,
876 PSTRING SourceString);
877
878 VOID STDCALL
879 RtlCopyUnicodeString(PUNICODE_STRING DestinationString,
880 PUNICODE_STRING SourceString);
881
882 NTSTATUS STDCALL
883 RtlCreateAcl (PACL Acl,
884 ULONG AclSize,
885 ULONG AclRevision);
886
887 NTSTATUS STDCALL
888 RtlCreateAtomTable(IN ULONG TableSize,
889 IN OUT PRTL_ATOM_TABLE *AtomTable);
890
891 HANDLE
892 STDCALL
893 RtlCreateHeap (
894 ULONG Flags,
895 PVOID BaseAddress,
896 ULONG SizeToReserve, /* dwMaximumSize */
897 ULONG SizeToCommit, /* dwInitialSize */
898 PVOID Unknown,
899 PRTL_HEAP_DEFINITION Definition
900 );
901
902 NTSTATUS STDCALL
903 RtlCreateRegistryKey (ULONG RelativeTo,
904 PWSTR Path);
905
906 NTSTATUS STDCALL
907 RtlCreateSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor,
908 ULONG Revision);
909
910 BOOLEAN STDCALL
911 RtlCreateUnicodeString (OUT PUNICODE_STRING Destination,
912 IN PWSTR Source);
913
914 BOOLEAN STDCALL
915 RtlCreateUnicodeStringFromAsciiz (OUT PUNICODE_STRING Destination,
916 IN PCSZ Source);
917
918 NTSTATUS
919 STDCALL
920 RtlCustomCPToUnicodeN (
921 IN PCPTABLEINFO CustomCP,
922 PWCHAR UnicodeString,
923 ULONG UnicodeSize,
924 PULONG ResultSize,
925 PCHAR CustomString,
926 ULONG CustomSize
927 );
928
929 NTSTATUS STDCALL
930 RtlDecompressBuffer(IN USHORT CompressionFormat,
931 OUT PUCHAR UncompressedBuffer,
932 IN ULONG UncompressedBufferSize,
933 IN PUCHAR CompressedBuffer,
934 IN ULONG CompressedBufferSize,
935 OUT PULONG FinalUncompressedSize);
936
937 NTSTATUS STDCALL
938 RtlDecompressChunks(OUT PUCHAR UncompressedBuffer,
939 IN ULONG UncompressedBufferSize,
940 IN PUCHAR CompressedBuffer,
941 IN ULONG CompressedBufferSize,
942 IN PUCHAR CompressedTail,
943 IN ULONG CompressedTailSize,
944 IN PCOMPRESSED_DATA_INFO CompressedDataInfo);
945
946 NTSTATUS STDCALL
947 RtlDecompressFragment(IN USHORT CompressionFormat,
948 OUT PUCHAR UncompressedFragment,
949 IN ULONG UncompressedFragmentSize,
950 IN PUCHAR CompressedBuffer,
951 IN ULONG CompressedBufferSize,
952 IN ULONG FragmentOffset,
953 OUT PULONG FinalUncompressedSize,
954 IN PVOID WorkSpace);
955
956 NTSTATUS STDCALL
957 RtlDeleteAce (PACL Acl,
958 ULONG AceIndex);
959
960 NTSTATUS STDCALL
961 RtlDeleteAtomFromAtomTable (IN PRTL_ATOM_TABLE AtomTable,
962 IN RTL_ATOM Atom);
963
964 NTSTATUS STDCALL
965 RtlDeleteOwnersRanges (IN OUT PRTL_RANGE_LIST RangeList,
966 IN PVOID Owner);
967
968 NTSTATUS STDCALL
969 RtlDeleteRange (IN OUT PRTL_RANGE_LIST RangeList,
970 IN ULONGLONG Start,
971 IN ULONGLONG End,
972 IN PVOID Owner);
973
974 NTSTATUS STDCALL
975 RtlDescribeChunk(IN USHORT CompressionFormat,
976 IN OUT PUCHAR *CompressedBuffer,
977 IN PUCHAR EndOfCompressedBufferPlus1,
978 OUT PUCHAR *ChunkBuffer,
979 OUT PULONG ChunkSize);
980
981 NTSTATUS STDCALL
982 RtlDestroyAtomTable (IN PRTL_ATOM_TABLE AtomTable);
983
984 BOOL STDCALL
985 RtlDestroyHeap (HANDLE hheap);
986
987 NTSTATUS
988 STDCALL
989 RtlDowncaseUnicodeString (
990 IN OUT PUNICODE_STRING DestinationString,
991 IN PUNICODE_STRING SourceString,
992 IN BOOLEAN AllocateDestinationString
993 );
994
995 NTSTATUS
996 STDCALL
997 RtlEmptyAtomTable (
998 IN PRTL_ATOM_TABLE AtomTable,
999 IN BOOLEAN DeletePinned
1000 );
1001
1002 LARGE_INTEGER
1003 STDCALL
1004 RtlEnlargedIntegerMultiply (
1005 LONG Multiplicand,
1006 LONG Multiplier
1007 );
1008
1009 ULONG
1010 STDCALL
1011 RtlEnlargedUnsignedDivide (
1012 ULARGE_INTEGER Dividend,
1013 ULONG Divisor,
1014 PULONG Remainder
1015 );
1016
1017 LARGE_INTEGER
1018 STDCALL
1019 RtlEnlargedUnsignedMultiply (
1020 ULONG Multiplicand,
1021 ULONG Multiplier
1022 );
1023
1024 BOOLEAN STDCALL
1025 RtlEqualPrefixSid (PSID Sid1,
1026 PSID Sid2);
1027
1028 BOOLEAN STDCALL
1029 RtlEqualSid (PSID Sid1,
1030 PSID Sid2);
1031
1032 BOOLEAN
1033 STDCALL
1034 RtlEqualString (
1035 PSTRING String1,
1036 PSTRING String2,
1037 BOOLEAN CaseInSensitive
1038 );
1039
1040 LARGE_INTEGER
1041 STDCALL
1042 RtlExtendedIntegerMultiply (
1043 LARGE_INTEGER Multiplicand,
1044 LONG Multiplier
1045 );
1046
1047 LARGE_INTEGER
1048 STDCALL
1049 RtlExtendedLargeIntegerDivide (
1050 LARGE_INTEGER Dividend,
1051 ULONG Divisor,
1052 PULONG Remainder
1053 );
1054
1055 LARGE_INTEGER
1056 STDCALL
1057 RtlExtendedMagicDivide (
1058 LARGE_INTEGER Dividend,
1059 LARGE_INTEGER MagicDivisor,
1060 CCHAR ShiftCount
1061 );
1062
1063 VOID
1064 STDCALL
1065 RtlFillMemoryUlong (
1066 PVOID Destination,
1067 ULONG Length,
1068 ULONG Fill
1069 );
1070
1071 ULONG
1072 STDCALL
1073 RtlFindClearBits (
1074 PRTL_BITMAP BitMapHeader,
1075 ULONG NumberToFind,
1076 ULONG HintIndex
1077 );
1078
1079 ULONG
1080 STDCALL
1081 RtlFindClearBitsAndSet (
1082 PRTL_BITMAP BitMapHeader,
1083 ULONG NumberToFind,
1084 ULONG HintIndex
1085 );
1086
1087 ULONG
1088 STDCALL
1089 RtlFindFirstRunClear (
1090 PRTL_BITMAP BitMapHeader,
1091 PULONG StartingIndex
1092 );
1093
1094 ULONG
1095 STDCALL
1096 RtlFindFirstRunSet (
1097 PRTL_BITMAP BitMapHeader,
1098 PULONG StartingIndex
1099 );
1100
1101 CCHAR STDCALL
1102 RtlFindLeastSignificantBit (IN ULONGLONG Set);
1103
1104 ULONG
1105 STDCALL
1106 RtlFindLongestRunClear (
1107 PRTL_BITMAP BitMapHeader,
1108 PULONG StartingIndex
1109 );
1110
1111 ULONG
1112 STDCALL
1113 RtlFindLongestRunSet (
1114 PRTL_BITMAP BitMapHeader,
1115 PULONG StartingIndex
1116 );
1117
1118 NTSTATUS
1119 STDCALL
1120 RtlFindMessage (
1121 IN PVOID BaseAddress,
1122 IN ULONG Type,
1123 IN ULONG Language,
1124 IN ULONG MessageId,
1125 OUT PRTL_MESSAGE_RESOURCE_ENTRY *MessageResourceEntry
1126 );
1127
1128 CCHAR STDCALL
1129 RtlFindMostSignificantBit (IN ULONGLONG Set);
1130
1131 NTSTATUS STDCALL
1132 RtlFindRange (IN PRTL_RANGE_LIST RangeList,
1133 IN ULONGLONG Minimum,
1134 IN ULONGLONG Maximum,
1135 IN ULONG Length,
1136 IN ULONG Alignment,
1137 IN ULONG Flags,
1138 IN UCHAR AttributeAvailableMask,
1139 IN PVOID Context OPTIONAL,
1140 IN PRTL_CONFLICT_RANGE_CALLBACK Callback OPTIONAL,
1141 OUT PULONGLONG Start);
1142
1143 ULONG
1144 STDCALL
1145 RtlFindSetBits (
1146 PRTL_BITMAP BitMapHeader,
1147 ULONG NumberToFind,
1148 ULONG HintIndex
1149 );
1150
1151 ULONG
1152 STDCALL
1153 RtlFindSetBitsAndClear (
1154 PRTL_BITMAP BitMapHeader,
1155 ULONG NumberToFind,
1156 ULONG HintIndex
1157 );
1158
1159 BOOLEAN STDCALL
1160 RtlFirstFreeAce (PACL Acl,
1161 PACE* Ace);
1162
1163 NTSTATUS STDCALL
1164 RtlFormatCurrentUserKeyPath (IN OUT PUNICODE_STRING KeyPath);
1165
1166 VOID STDCALL
1167 RtlFreeAnsiString (IN PANSI_STRING AnsiString);
1168
1169 BOOLEAN
1170 STDCALL
1171 RtlFreeHeap (
1172 HANDLE Heap,
1173 ULONG Flags,
1174 PVOID Address
1175 );
1176
1177 VOID STDCALL
1178 RtlFreeOemString (IN POEM_STRING OemString);
1179
1180 VOID STDCALL
1181 RtlFreeRangeList (IN PRTL_RANGE_LIST RangeList);
1182
1183 PVOID STDCALL
1184 RtlFreeSid (PSID Sid);
1185
1186 VOID STDCALL
1187 RtlFreeUnicodeString (IN PUNICODE_STRING UnicodeString);
1188
1189 VOID STDCALL
1190 RtlGenerate8dot3Name (IN PUNICODE_STRING Name,
1191 IN BOOLEAN AllowExtendedCharacters,
1192 IN OUT PGENERATE_NAME_CONTEXT Context,
1193 OUT PUNICODE_STRING Name8dot3);
1194
1195 NTSTATUS STDCALL
1196 RtlGetAce (PACL Acl,
1197 ULONG AceIndex,
1198 PACE *Ace);
1199
1200 NTSTATUS STDCALL
1201 RtlGetCompressionWorkSpaceSize (IN USHORT CompressionFormatAndEngine,
1202 OUT PULONG CompressBufferAndWorkSpaceSize,
1203 OUT PULONG CompressFragmentWorkSpaceSize);
1204
1205 NTSTATUS STDCALL
1206 RtlGetControlSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor,
1207 PSECURITY_DESCRIPTOR_CONTROL Control,
1208 PULONG Revision);
1209
1210 NTSTATUS STDCALL
1211 RtlGetDaclSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor,
1212 PBOOLEAN DaclPresent,
1213 PACL* Dacl,
1214 PBOOLEAN DaclDefaulted);
1215
1216 VOID STDCALL
1217 RtlGetDefaultCodePage (OUT PUSHORT AnsiCodePage,
1218 OUT PUSHORT OemCodePage);
1219
1220 NTSTATUS STDCALL
1221 RtlGetFirstRange (IN PRTL_RANGE_LIST RangeList,
1222 OUT PRTL_RANGE_LIST_ITERATOR Iterator,
1223 OUT PRTL_RANGE *Range);
1224
1225 NTSTATUS STDCALL
1226 RtlGetGroupSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor,
1227 PSID* Group,
1228 PBOOLEAN GroupDefaulted);
1229
1230 NTSTATUS STDCALL
1231 RtlGetNextRange (IN OUT PRTL_RANGE_LIST_ITERATOR Iterator,
1232 OUT PRTL_RANGE *Range,
1233 IN BOOLEAN MoveForwards);
1234
1235 NTSTATUS STDCALL
1236 RtlGetOwnerSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor,
1237 PSID* Owner,
1238 PBOOLEAN OwnerDefaulted);
1239
1240 NTSTATUS STDCALL
1241 RtlGetSaclSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor,
1242 PBOOLEAN SaclPresent,
1243 PACL* Sacl,
1244 PBOOLEAN SaclDefaulted);
1245
1246 NTSTATUS STDCALL
1247 RtlGUIDFromString (IN PUNICODE_STRING GuidString,
1248 OUT GUID* Guid);
1249
1250 PSID_IDENTIFIER_AUTHORITY STDCALL
1251 RtlIdentifierAuthoritySid (PSID Sid);
1252
1253 PVOID
1254 STDCALL
1255 RtlImageDirectoryEntryToData (
1256 PVOID BaseAddress,
1257 BOOLEAN bFlag,
1258 ULONG Directory,
1259 PULONG Size
1260 );
1261
1262 PIMAGE_NT_HEADERS
1263 STDCALL
1264 RtlImageNtHeader (
1265 IN PVOID BaseAddress
1266 );
1267
1268 PIMAGE_SECTION_HEADER
1269 STDCALL
1270 RtlImageRvaToSection (
1271 PIMAGE_NT_HEADERS NtHeader,
1272 PVOID BaseAddress,
1273 ULONG Rva
1274 );
1275
1276 ULONG
1277 STDCALL
1278 RtlImageRvaToVa (
1279 PIMAGE_NT_HEADERS NtHeader,
1280 PVOID BaseAddress,
1281 ULONG Rva,
1282 PIMAGE_SECTION_HEADER *SectionHeader
1283 );
1284
1285 VOID
1286 STDCALL
1287 RtlInitAnsiString (
1288 PANSI_STRING DestinationString,
1289 PCSZ SourceString
1290 );
1291
1292 VOID
1293 STDCALL
1294 RtlInitCodePageTable (
1295 IN PUSHORT TableBase,
1296 OUT PCPTABLEINFO CodePageTable
1297 );
1298
1299 NTSTATUS STDCALL
1300 RtlInitializeSid (PSID Sid,
1301 PSID_IDENTIFIER_AUTHORITY IdentifierAuthority,
1302 UCHAR SubAuthorityCount);
1303
1304 VOID
1305 STDCALL
1306 RtlInitNlsTables (
1307 IN PUSHORT AnsiTableBase,
1308 IN PUSHORT OemTableBase,
1309 IN PUSHORT CaseTableBase,
1310 OUT PNLSTABLEINFO NlsTable
1311 );
1312
1313 VOID
1314 STDCALL
1315 RtlInitString (
1316 PSTRING DestinationString,
1317 PCSZ SourceString
1318 );
1319
1320 VOID
1321 STDCALL
1322 RtlInitUnicodeString (
1323 PUNICODE_STRING DestinationString,
1324 PCWSTR SourceString
1325 );
1326
1327 VOID
1328 STDCALL
1329 RtlInitializeBitMap (
1330 IN OUT PRTL_BITMAP BitMapHeader,
1331 IN PULONG BitMapBuffer,
1332 IN ULONG SizeOfBitMap
1333 );
1334
1335 NTSTATUS
1336 STDCALL
1337 RtlInitializeContext (
1338 IN HANDLE ProcessHandle,
1339 IN PCONTEXT Context,
1340 IN PVOID Parameter,
1341 IN PTHREAD_START_ROUTINE StartAddress,
1342 IN OUT PUSER_STACK UserStack
1343 );
1344
1345 VOID
1346 STDCALL
1347 RtlInitializeGenericTable (
1348 IN OUT PRTL_GENERIC_TABLE Table,
1349 IN PVOID CompareRoutine,
1350 IN PVOID AllocateRoutine,
1351 IN PVOID FreeRoutine,
1352 IN ULONG UserParameter
1353 );
1354
1355 VOID STDCALL
1356 RtlInitializeRangeList (IN OUT PRTL_RANGE_LIST RangeList);
1357
1358 PVOID
1359 STDCALL
1360 RtlInsertElementGenericTable (
1361 IN OUT PRTL_GENERIC_TABLE Table,
1362 IN PVOID Element,
1363 IN ULONG ElementSize,
1364 IN ULONG Unknown4
1365 );
1366
1367 NTSTATUS
1368 STDCALL
1369 RtlIntegerToChar (
1370 IN ULONG Value,
1371 IN ULONG Base,
1372 IN ULONG Length,
1373 IN OUT PCHAR String
1374 );
1375
1376 NTSTATUS
1377 STDCALL
1378 RtlIntegerToUnicodeString (
1379 IN ULONG Value,
1380 IN ULONG Base,
1381 IN OUT PUNICODE_STRING String
1382 );
1383
1384 NTSTATUS STDCALL
1385 RtlInvertRangeList (OUT PRTL_RANGE_LIST InvertedRangeList,
1386 IN PRTL_RANGE_LIST RangeList);
1387
1388 BOOLEAN STDCALL
1389 RtlIsGenericTableEmpty (IN PRTL_GENERIC_TABLE Table);
1390
1391 BOOLEAN STDCALL
1392 RtlIsNameLegalDOS8Dot3 (IN PUNICODE_STRING UnicodeName,
1393 IN PANSI_STRING AnsiName,
1394 OUT PBOOLEAN SpacesFound);
1395
1396 NTSTATUS STDCALL
1397 RtlIsRangeAvailable (IN PRTL_RANGE_LIST RangeList,
1398 IN ULONGLONG Start,
1399 IN ULONGLONG End,
1400 IN ULONG Flags,
1401 IN UCHAR AttributeAvailableMask,
1402 IN PVOID Context OPTIONAL,
1403 IN PRTL_CONFLICT_RANGE_CALLBACK Callback OPTIONAL,
1404 OUT PBOOLEAN Available);
1405
1406 ULONG
1407 STDCALL
1408 RtlIsTextUnicode (
1409 PVOID Buffer,
1410 ULONG Length,
1411 ULONG *Flags
1412 );
1413
1414 LARGE_INTEGER
1415 STDCALL
1416 RtlLargeIntegerAdd (
1417 LARGE_INTEGER Addend1,
1418 LARGE_INTEGER Addend2
1419 );
1420
1421 /*
1422 * VOID
1423 * RtlLargeIntegerAnd (
1424 * PLARGE_INTEGER Result,
1425 * LARGE_INTEGER Source,
1426 * LARGE_INTEGER Mask
1427 * );
1428 */
1429 #define RtlLargeIntegerAnd(Result, Source, Mask) \
1430 { \
1431 Result.HighPart = Source.HighPart & Mask.HighPart; \
1432 Result.LowPart = Source.LowPart & Mask.LowPart; \
1433 }
1434
1435 LARGE_INTEGER
1436 STDCALL
1437 RtlLargeIntegerArithmeticShift (
1438 LARGE_INTEGER LargeInteger,
1439 CCHAR ShiftCount
1440 );
1441
1442 LARGE_INTEGER
1443 STDCALL
1444 RtlLargeIntegerDivide (
1445 LARGE_INTEGER Dividend,
1446 LARGE_INTEGER Divisor,
1447 PLARGE_INTEGER Remainder
1448 );
1449
1450 /*
1451 * BOOLEAN
1452 * RtlLargeIntegerEqualTo (
1453 * LARGE_INTEGER Operand1,
1454 * LARGE_INTEGER Operand2
1455 * );
1456 */
1457 #define RtlLargeIntegerEqualTo(X,Y) \
1458 (!(((X).LowPart ^ (Y).LowPart) | ((X).HighPart ^ (Y).HighPart)))
1459
1460 /*
1461 * BOOLEAN
1462 * RtlLargeIntegerEqualToZero (
1463 * LARGE_INTEGER Operand
1464 * );
1465 */
1466 #define RtlLargeIntegerEqualToZero(X) \
1467 (!((X).LowPart | (X).HighPart))
1468
1469 /*
1470 * BOOLEAN
1471 * RtlLargeIntegerGreaterThan (
1472 * LARGE_INTEGER Operand1,
1473 * LARGE_INTEGER Operand2
1474 * );
1475 */
1476 #define RtlLargeIntegerGreaterThan(X,Y) \
1477 ((((X).HighPart == (Y).HighPart) && ((X).LowPart > (Y).LowPart)) || \
1478 ((X).HighPart > (Y).HighPart))
1479
1480 /*
1481 * BOOLEAN
1482 * RtlLargeIntegerGreaterThanOrEqualTo (
1483 * LARGE_INTEGER Operand1,
1484 * LARGE_INTEGER Operand2
1485 * );
1486 */
1487 #define RtlLargeIntegerGreaterThanOrEqualTo(X,Y) \
1488 ((((X).HighPart == (Y).HighPart) && ((X).LowPart >= (Y).LowPart)) || \
1489 ((X).HighPart > (Y).HighPart))
1490
1491 /*
1492 * BOOLEAN
1493 * RtlLargeIntegerGreaterThanOrEqualToZero (
1494 * LARGE_INTEGER Operand1
1495 * );
1496 */
1497 #define RtlLargeIntegerGreaterOrEqualToZero(X) \
1498 ((X).HighPart >= 0)
1499
1500 /*
1501 * BOOLEAN
1502 * RtlLargeIntegerGreaterThanZero (
1503 * LARGE_INTEGER Operand1
1504 * );
1505 */
1506 #define RtlLargeIntegerGreaterThanZero(X) \
1507 ((((X).HighPart == 0) && ((X).LowPart > 0)) || \
1508 ((X).HighPart > 0 ))
1509
1510 /*
1511 * BOOLEAN
1512 * RtlLargeIntegerLessThan (
1513 * LARGE_INTEGER Operand1,
1514 * LARGE_INTEGER Operand2
1515 * );
1516 */
1517 #define RtlLargeIntegerLessThan(X,Y) \
1518 ((((X).HighPart == (Y).HighPart) && ((X).LowPart < (Y).LowPart)) || \
1519 ((X).HighPart < (Y).HighPart))
1520
1521 /*
1522 * BOOLEAN
1523 * RtlLargeIntegerLessThanOrEqualTo (
1524 * LARGE_INTEGER Operand1,
1525 * LARGE_INTEGER Operand2
1526 * );
1527 */
1528 #define RtlLargeIntegerLessThanOrEqualTo(X,Y) \
1529 ((((X).HighPart == (Y).HighPart) && ((X).LowPart <= (Y).LowPart)) || \
1530 ((X).HighPart < (Y).HighPart))
1531
1532 /*
1533 * BOOLEAN
1534 * RtlLargeIntegerLessThanOrEqualToZero (
1535 * LARGE_INTEGER Operand
1536 * );
1537 */
1538 #define RtlLargeIntegerLessOrEqualToZero(X) \
1539 (((X).HighPart < 0) || !((X).LowPart | (X).HighPart))
1540
1541 /*
1542 * BOOLEAN
1543 * RtlLargeIntegerLessThanZero (
1544 * LARGE_INTEGER Operand
1545 * );
1546 */
1547 #define RtlLargeIntegerLessThanZero(X) \
1548 (((X).HighPart < 0))
1549
1550 LARGE_INTEGER
1551 STDCALL
1552 RtlLargeIntegerNegate (
1553 LARGE_INTEGER Subtrahend
1554 );
1555
1556 /*
1557 * BOOLEAN
1558 * RtlLargeIntegerNotEqualTo (
1559 * LARGE_INTEGER Operand1,
1560 * LARGE_INTEGER Operand2
1561 * );
1562 */
1563 #define RtlLargeIntegerNotEqualTo(X,Y) \
1564 ((((X).LowPart ^ (Y).LowPart) | ((X).HighPart ^ (Y).HighPart)))
1565
1566 /*
1567 * BOOLEAN
1568 * RtlLargeIntegerNotEqualToZero (
1569 * LARGE_INTEGER Operand
1570 * );
1571 */
1572 #define RtlLargeIntegerNotEqualToZero(X) \
1573 (((X).LowPart | (X).HighPart))
1574
1575 LARGE_INTEGER
1576 STDCALL
1577 RtlLargeIntegerShiftLeft (
1578 LARGE_INTEGER LargeInteger,
1579 CCHAR ShiftCount
1580 );
1581
1582 LARGE_INTEGER
1583 STDCALL
1584 RtlLargeIntegerShiftRight (
1585 LARGE_INTEGER LargeInteger,
1586 CCHAR ShiftCount
1587 );
1588
1589 LARGE_INTEGER
1590 STDCALL
1591 RtlLargeIntegerSubtract (
1592 LARGE_INTEGER Minuend,
1593 LARGE_INTEGER Subtrahend
1594 );
1595
1596 ULONG STDCALL
1597 RtlLengthRequiredSid (UCHAR SubAuthorityCount);
1598
1599 ULONG STDCALL
1600 RtlLengthSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor);
1601
1602 ULONG STDCALL
1603 RtlLengthSid (PSID Sid);
1604
1605 BOOL
1606 STDCALL
1607 RtlLockHeap (
1608 HANDLE hheap
1609 );
1610
1611 NTSTATUS STDCALL
1612 RtlLookupAtomInAtomTable (IN PRTL_ATOM_TABLE AtomTable,
1613 IN PWSTR AtomName,
1614 OUT PRTL_ATOM Atom);
1615
1616 NTSTATUS STDCALL
1617 RtlMakeSelfRelativeSD (PSECURITY_DESCRIPTOR AbsSD,
1618 PSECURITY_DESCRIPTOR RelSD,
1619 PULONG BufferLength);
1620
1621 VOID STDCALL
1622 RtlMapGenericMask (PACCESS_MASK AccessMask,
1623 PGENERIC_MAPPING GenericMapping);
1624
1625 NTSTATUS STDCALL
1626 RtlMergeRangeLists (OUT PRTL_RANGE_LIST MergedRangeList,
1627 IN PRTL_RANGE_LIST RangeList1,
1628 IN PRTL_RANGE_LIST RangeList2,
1629 IN ULONG Flags);
1630
1631 NTSTATUS
1632 STDCALL
1633 RtlMultiByteToUnicodeN (
1634 PWCHAR UnicodeString,
1635 ULONG UnicodeSize,
1636 PULONG ResultSize,
1637 const PCHAR MbString,
1638 ULONG MbSize
1639 );
1640
1641 NTSTATUS
1642 STDCALL
1643 RtlMultiByteToUnicodeSize (
1644 PULONG UnicodeSize,
1645 PCHAR MbString,
1646 ULONG MbSize
1647 );
1648
1649 DWORD
1650 STDCALL
1651 RtlNtStatusToDosError (
1652 NTSTATUS StatusCode
1653 );
1654
1655 DWORD
1656 STDCALL
1657 RtlNtStatusToDosErrorNoTeb (
1658 NTSTATUS StatusCode
1659 );
1660
1661 int
1662 STDCALL
1663 RtlNtStatusToPsxErrno (
1664 NTSTATUS StatusCode
1665 );
1666
1667 ULONG
1668 STDCALL
1669 RtlNumberGenericTableElements (
1670 IN PRTL_GENERIC_TABLE Table
1671 );
1672
1673 ULONG
1674 STDCALL
1675 RtlNumberOfClearBits (
1676 PRTL_BITMAP BitMapHeader
1677 );
1678
1679 ULONG
1680 STDCALL
1681 RtlNumberOfSetBits (
1682 PRTL_BITMAP BitMapHeader
1683 );
1684
1685 ULONG
1686 STDCALL
1687 RtlOemStringToUnicodeSize (
1688 POEM_STRING AnsiString
1689 );
1690
1691 NTSTATUS
1692 STDCALL
1693 RtlOemStringToUnicodeString (
1694 PUNICODE_STRING DestinationString,
1695 POEM_STRING SourceString,
1696 BOOLEAN AllocateDestinationString
1697 );
1698
1699 NTSTATUS
1700 STDCALL
1701 RtlOemToUnicodeN (
1702 PWCHAR UnicodeString,
1703 ULONG UnicodeSize,
1704 PULONG ResultSize,
1705 PCHAR OemString,
1706 ULONG OemSize
1707 );
1708
1709 NTSTATUS STDCALL
1710 RtlPinAtomInAtomTable (
1711 IN PRTL_ATOM_TABLE AtomTable,
1712 IN RTL_ATOM Atom
1713 );
1714
1715 BOOLEAN
1716 STDCALL
1717 RtlPrefixString (
1718 PANSI_STRING String1,
1719 PANSI_STRING String2,
1720 BOOLEAN CaseInsensitive
1721 );
1722
1723 BOOLEAN
1724 STDCALL
1725 RtlPrefixUnicodeString (
1726 PUNICODE_STRING String1,
1727 PUNICODE_STRING String2,
1728 BOOLEAN CaseInsensitive
1729 );
1730
1731 NTSTATUS
1732 STDCALL
1733 RtlQueryAtomInAtomTable (
1734 IN PRTL_ATOM_TABLE AtomTable,
1735 IN RTL_ATOM Atom,
1736 IN OUT PULONG RefCount OPTIONAL,
1737 IN OUT PULONG PinCount OPTIONAL,
1738 IN OUT PWSTR AtomName OPTIONAL,
1739 IN OUT PULONG NameLength OPTIONAL
1740 );
1741
1742 NTSTATUS STDCALL
1743 RtlQueryInformationAcl (PACL Acl,
1744 PVOID Information,
1745 ULONG InformationLength,
1746 ACL_INFORMATION_CLASS InformationClass);
1747
1748 NTSTATUS STDCALL
1749 RtlQueryTimeZoneInformation (IN OUT PTIME_ZONE_INFORMATION TimeZoneInformation);
1750
1751 VOID STDCALL
1752 RtlRaiseException (IN PEXCEPTION_RECORD ExceptionRecord);
1753
1754 ULONG STDCALL
1755 RtlRandom (PULONG Seed);
1756
1757 LPVOID
1758 STDCALL
1759 RtlReAllocateHeap (
1760 HANDLE hheap,
1761 DWORD flags,
1762 LPVOID ptr,
1763 DWORD size
1764 );
1765
1766 NTSTATUS
1767 STDCALL
1768 RtlReserveChunk (
1769 IN USHORT CompressionFormat,
1770 IN OUT PUCHAR *CompressedBuffer,
1771 IN PUCHAR EndOfCompressedBufferPlus1,
1772 OUT PUCHAR *ChunkBuffer,
1773 IN ULONG ChunkSize
1774 );
1775
1776 VOID STDCALL
1777 RtlResetRtlTranslations (IN PNLSTABLEINFO NlsTable);
1778
1779 /*
1780 * VOID
1781 * RtlRetrieveUlong (
1782 * PULONG DestinationAddress,
1783 * PULONG SourceAddress
1784 * );
1785 */
1786 #define RtlRetrieveUlong(DestAddress,SrcAddress) \
1787 if ((ULONG)(SrcAddress) & LONG_MASK) \
1788 { \
1789 ((PUCHAR)(DestAddress))[0]=((PUCHAR)(SrcAddress))[0]; \
1790 ((PUCHAR)(DestAddress))[1]=((PUCHAR)(SrcAddress))[1]; \
1791 ((PUCHAR)(DestAddress))[2]=((PUCHAR)(SrcAddress))[2]; \
1792 ((PUCHAR)(DestAddress))[3]=((PUCHAR)(SrcAddress))[3]; \
1793 } \
1794 else \
1795 { \
1796 *((PULONG)(DestAddress))=*((PULONG)(SrcAddress)); \
1797 }
1798
1799 /*
1800 * VOID
1801 * RtlRetrieveUshort (
1802 * PUSHORT DestinationAddress,
1803 * PUSHORT SourceAddress
1804 * );
1805 */
1806 #define RtlRetrieveUshort(DestAddress,SrcAddress) \
1807 if ((ULONG)(SrcAddress) & SHORT_MASK) \
1808 { \
1809 ((PUCHAR)(DestAddress))[0]=((PUCHAR)(SrcAddress))[0]; \
1810 ((PUCHAR)(DestAddress))[1]=((PUCHAR)(SrcAddress))[1]; \
1811 } \
1812 else \
1813 { \
1814 *((PUSHORT)(DestAddress))=*((PUSHORT)(SrcAddress)); \
1815 }
1816
1817 VOID STDCALL
1818 RtlSecondsSince1970ToTime (ULONG SecondsSince1970,
1819 PLARGE_INTEGER Time);
1820
1821 VOID STDCALL
1822 RtlSecondsSince1980ToTime (ULONG SecondsSince1980,
1823 PLARGE_INTEGER Time);
1824
1825 NTSTATUS STDCALL
1826 RtlSelfRelativeToAbsoluteSD (PSECURITY_DESCRIPTOR RelSD,
1827 PSECURITY_DESCRIPTOR AbsSD,
1828 PULONG AbsSDSize,
1829 PACL Dacl,
1830 PULONG DaclSize,
1831 PACL Sacl,
1832 PULONG SaclSize,
1833 PSID Owner,
1834 PULONG OwnerSize,
1835 PSID Group,
1836 PULONG GroupSize);
1837
1838 VOID STDCALL
1839 RtlSetAllBits (IN PRTL_BITMAP BitMapHeader);
1840
1841 VOID
1842 STDCALL
1843 RtlSetBits (
1844 PRTL_BITMAP BitMapHeader,
1845 ULONG StartingIndex,
1846 ULONG NumberToSet
1847 );
1848
1849 NTSTATUS STDCALL
1850 RtlSetDaclSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor,
1851 BOOLEAN DaclPresent,
1852 PACL Dacl,
1853 BOOLEAN DaclDefaulted);
1854
1855 NTSTATUS STDCALL
1856 RtlSetGroupSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor,
1857 PSID Group,
1858 BOOLEAN GroupDefaulted);
1859
1860 NTSTATUS STDCALL
1861 RtlSetOwnerSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor,
1862 PSID Owner,
1863 BOOLEAN OwnerDefaulted);
1864
1865 NTSTATUS STDCALL
1866 RtlSetSaclSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor,
1867 BOOLEAN SaclPresent,
1868 PACL Sacl,
1869 BOOLEAN SaclDefaulted);
1870
1871 NTSTATUS STDCALL
1872 RtlSetInformationAcl (PACL Acl,
1873 PVOID Information,
1874 ULONG InformationLength,
1875 ACL_INFORMATION_CLASS InformationClass);
1876
1877 NTSTATUS STDCALL
1878 RtlSetTimeZoneInformation (IN OUT PTIME_ZONE_INFORMATION TimeZoneInformation);
1879
1880 DWORD
1881 STDCALL
1882 RtlSizeHeap (
1883 HANDLE hheap,
1884 DWORD flags,
1885 PVOID pmem
1886 );
1887
1888 /*
1889 * VOID
1890 * RtlStoreUlong (
1891 * PULONG Address,
1892 * ULONG Value
1893 * );
1894 */
1895 #define RtlStoreUlong(Address,Value) \
1896 if ((ULONG)(Address) & LONG_MASK) \
1897 { \
1898 ((PUCHAR)(Address))[LONG_LEAST_SIGNIFICANT_BIT]=(UCHAR)(FIRSTBYTE(Value)); \
1899 ((PUCHAR)(Address))[LONG_3RD_MOST_SIGNIFICANT_BIT]=(UCHAR)(FIRSTBYTE(Value)); \
1900 ((PUCHAR)(Address))[LONG_2ND_MOST_SIGNIFICANT_BIT]=(UCHAR)(THIRDBYTE(Value)); \
1901 ((PUCHAR)(Address))[LONG_MOST_SIGNIFICANT_BIT]=(UCHAR)(FOURTHBYTE(Value)); \
1902 } \
1903 else \
1904 { \
1905 *((PULONG)(Address))=(ULONG)(Value); \
1906 }
1907
1908 /*
1909 * VOID
1910 * RtlStoreUshort (
1911 * PUSHORT Address,
1912 * USHORT Value
1913 * );
1914 */
1915 #define RtlStoreUshort(Address,Value) \
1916 if ((ULONG)(Address) & SHORT_MASK) \
1917 { \
1918 ((PUCHAR)(Address))[SHORT_LEAST_SIGNIFICANT_BIT]=(UCHAR)(FIRSTBYTE(Value)); \
1919 ((PUCHAR)(Address))[SHORT_MOST_SIGNIFICANT_BIT]=(UCHAR)(SECONDBYTE(Value)); \
1920 } \
1921 else \
1922 { \
1923 *((PUSHORT)(Address))=(USHORT)(Value); \
1924 }
1925
1926 NTSTATUS STDCALL
1927 RtlStringFromGUID (IN REFGUID Guid,
1928 OUT PUNICODE_STRING GuidString);
1929
1930 PULONG STDCALL
1931 RtlSubAuthoritySid (PSID Sid,
1932 ULONG SubAuthority);
1933
1934 PULONG STDCALL
1935 RtlSubAuthoritySid (PSID Sid,
1936 ULONG SubAuthority);
1937
1938 PUCHAR STDCALL
1939 RtlSubAuthorityCountSid (PSID Sid);
1940
1941 PRTL_SPLAY_LINKS STDCALL
1942 RtlSubtreePredecessor (IN PRTL_SPLAY_LINKS Links);
1943
1944 PRTL_SPLAY_LINKS STDCALL
1945 RtlSubtreeSuccessor (IN PRTL_SPLAY_LINKS Links);
1946
1947 BOOLEAN STDCALL
1948 RtlTimeFieldsToTime (PTIME_FIELDS TimeFields,
1949 PLARGE_INTEGER Time);
1950
1951 BOOLEAN
1952 STDCALL
1953 RtlTimeToSecondsSince1970 (
1954 PLARGE_INTEGER Time,
1955 PULONG SecondsSince1970
1956 );
1957
1958 BOOLEAN
1959 STDCALL
1960 RtlTimeToSecondsSince1980 (
1961 PLARGE_INTEGER Time,
1962 PULONG SecondsSince1980
1963 );
1964
1965 VOID
1966 STDCALL
1967 RtlTimeToTimeFields (
1968 PLARGE_INTEGER Time,
1969 PTIME_FIELDS TimeFields
1970 );
1971
1972 ULONG FASTCALL
1973 RtlUlongByteSwap (IN ULONG Source);
1974
1975 ULONGLONG FASTCALL
1976 RtlUlonglongByteSwap (IN ULONGLONG Source);
1977
1978 ULONG
1979 STDCALL
1980 RtlUnicodeStringToAnsiSize (
1981 IN PUNICODE_STRING UnicodeString
1982 );
1983
1984 NTSTATUS
1985 STDCALL
1986 RtlUnicodeStringToAnsiString (
1987 IN OUT PANSI_STRING DestinationString,
1988 IN PUNICODE_STRING SourceString,
1989 IN BOOLEAN AllocateDestinationString
1990 );
1991
1992 NTSTATUS
1993 STDCALL
1994 RtlUnicodeStringToInteger (
1995 IN PUNICODE_STRING String,
1996 IN ULONG Base,
1997 OUT PULONG Value
1998 );
1999
2000 ULONG
2001 STDCALL
2002 RtlUnicodeStringToOemSize (
2003 IN PUNICODE_STRING UnicodeString
2004 );
2005
2006 NTSTATUS
2007 STDCALL
2008 RtlUnicodeStringToCountedOemString (
2009 IN OUT POEM_STRING DestinationString,
2010 IN PUNICODE_STRING SourceString,
2011 IN BOOLEAN AllocateDestinationString
2012 );
2013
2014 NTSTATUS
2015 STDCALL
2016 RtlUnicodeStringToOemString (
2017 IN OUT POEM_STRING DestinationString,
2018 IN PUNICODE_STRING SourceString,
2019 IN BOOLEAN AllocateDestinationString
2020 );
2021
2022 NTSTATUS
2023 STDCALL
2024 RtlUnicodeToCustomCPN (
2025 IN PCPTABLEINFO CustomCP,
2026 PCHAR MbString,
2027 ULONG MbSize,
2028 PULONG ResultSize,
2029 PWCHAR UnicodeString,
2030 ULONG UnicodeSize
2031 );
2032
2033 NTSTATUS
2034 STDCALL
2035 RtlUnicodeToMultiByteN (
2036 PCHAR MbString,
2037 ULONG MbSize,
2038 PULONG ResultSize,
2039 PWCHAR UnicodeString,
2040 ULONG UnicodeSize
2041 );
2042
2043 NTSTATUS
2044 STDCALL
2045 RtlUnicodeToMultiByteSize (
2046 PULONG MbSize,
2047 PWCHAR UnicodeString,
2048 ULONG UnicodeSize
2049 );
2050
2051 NTSTATUS
2052 STDCALL
2053 RtlUnicodeToOemN (
2054 PCHAR OemString,
2055 ULONG OemSize,
2056 PULONG ResultSize,
2057 PWCHAR UnicodeString,
2058 ULONG UnicodeSize
2059 );
2060
2061 ULONG STDCALL
2062 RtlUniform (PULONG Seed);
2063
2064 BOOL
2065 STDCALL
2066 RtlUnlockHeap (
2067 HANDLE hheap
2068 );
2069
2070 VOID
2071 STDCALL
2072 RtlUnwind (
2073 PEXCEPTION_REGISTRATION RegistrationFrame,
2074 PVOID ReturnAddress,
2075 PEXCEPTION_RECORD ExceptionRecord,
2076 DWORD EaxValue
2077 );
2078
2079 WCHAR
2080 STDCALL
2081 RtlUpcaseUnicodeChar (
2082 WCHAR Source
2083 );
2084
2085 NTSTATUS
2086 STDCALL
2087 RtlUpcaseUnicodeString (
2088 IN OUT PUNICODE_STRING DestinationString,
2089 IN PCUNICODE_STRING SourceString,
2090 IN BOOLEAN AllocateDestinationString
2091 );
2092
2093 NTSTATUS
2094 STDCALL
2095 RtlUpcaseUnicodeStringToAnsiString (
2096 IN OUT PANSI_STRING DestinationString,
2097 IN PUNICODE_STRING SourceString,
2098 IN BOOLEAN AllocateDestinationString
2099 );
2100
2101 NTSTATUS
2102 STDCALL
2103 RtlUpcaseUnicodeStringToCountedOemString (
2104 IN OUT POEM_STRING DestinationString,
2105 IN PUNICODE_STRING SourceString,
2106 IN BOOLEAN AllocateDestinationString
2107 );
2108
2109 NTSTATUS
2110 STDCALL
2111 RtlUpcaseUnicodeStringToOemString (
2112 IN OUT POEM_STRING DestinationString,
2113 IN PUNICODE_STRING SourceString,
2114 IN BOOLEAN AllocateDestinationString
2115 );
2116
2117 NTSTATUS
2118 STDCALL
2119 RtlUpcaseUnicodeToCustomCPN (
2120 IN PCPTABLEINFO CustomCP,
2121 PCHAR MbString,
2122 ULONG MbSize,
2123 PULONG ResultSize,
2124 PWCHAR UnicodeString,
2125 ULONG UnicodeSize
2126 );
2127
2128 NTSTATUS
2129 STDCALL
2130 RtlUpcaseUnicodeToMultiByteN (
2131 PCHAR MbString,
2132 ULONG MbSize,
2133 PULONG ResultSize,
2134 PWCHAR UnicodeString,
2135 ULONG UnicodeSize
2136 );
2137
2138 NTSTATUS
2139 STDCALL
2140 RtlUpcaseUnicodeToOemN (
2141 PCHAR OemString,
2142 ULONG OemSize,
2143 PULONG ResultSize,
2144 PWCHAR UnicodeString,
2145 ULONG UnicodeSize
2146 );
2147
2148 CHAR STDCALL
2149 RtlUpperChar (CHAR Source);
2150
2151 VOID STDCALL
2152 RtlUpperString (PSTRING DestinationString,
2153 PSTRING SourceString);
2154
2155 USHORT FASTCALL
2156 RtlUshortByteSwap (IN USHORT Source);
2157
2158 BOOLEAN STDCALL
2159 RtlValidAcl (PACL Acl);
2160
2161 BOOL
2162 STDCALL
2163 RtlValidateHeap (
2164 HANDLE hheap,
2165 DWORD flags,
2166 PVOID pmem
2167 );
2168
2169 BOOLEAN STDCALL
2170 RtlValidSecurityDescriptor (IN PSECURITY_DESCRIPTOR SecurityDescriptor);
2171
2172 BOOLEAN STDCALL
2173 RtlValidSid (IN PSID Sid);
2174
2175 ULONG
2176 STDCALL
2177 RtlxAnsiStringToUnicodeSize (
2178 IN PANSI_STRING AnsiString
2179 );
2180
2181 ULONG
2182 STDCALL
2183 RtlxOemStringToUnicodeSize (
2184 IN POEM_STRING OemString
2185 );
2186
2187 ULONG
2188 STDCALL
2189 RtlxUnicodeStringToAnsiSize (
2190 IN PUNICODE_STRING UnicodeString
2191 );
2192
2193 ULONG
2194 STDCALL
2195 RtlxUnicodeStringToOemSize (
2196 IN PUNICODE_STRING UnicodeString
2197 );
2198
2199 NTSTATUS
2200 FASTCALL
2201 RtlpOemStringToCountedUnicodeString(
2202 IN OUT PUNICODE_STRING UniDest,
2203 IN POEM_STRING OemSource,
2204 IN BOOLEAN AllocateDestinationString,
2205 IN POOL_TYPE PoolType);
2206
2207 NTSTATUS
2208 FASTCALL
2209 RtlpUpcaseUnicodeString(
2210 IN OUT PUNICODE_STRING UniDest,
2211 IN PCUNICODE_STRING UniSource,
2212 IN BOOLEAN AllocateDestinationString,
2213 IN POOL_TYPE PoolType);
2214
2215 NTSTATUS
2216 FASTCALL
2217 RtlpUpcaseUnicodeStringToAnsiString(
2218 IN OUT PANSI_STRING AnsiDest,
2219 IN PUNICODE_STRING UniSource,
2220 IN BOOLEAN AllocateDestinationString,
2221 IN POOL_TYPE PoolType);
2222
2223 NTSTATUS
2224 FASTCALL
2225 RtlpUpcaseUnicodeStringToCountedOemString(
2226 IN OUT POEM_STRING OemDest,
2227 IN PUNICODE_STRING UniSource,
2228 IN BOOLEAN AllocateDestinationString,
2229 IN POOL_TYPE PoolType);
2230
2231 NTSTATUS
2232 FASTCALL
2233 RtlpUpcaseUnicodeStringToOemString (
2234 IN OUT POEM_STRING OemDest,
2235 IN PUNICODE_STRING UniSource,
2236 IN BOOLEAN AllocateDestinationString,
2237 IN POOL_TYPE PoolType);
2238
2239 NTSTATUS
2240 FASTCALL
2241 RtlpDowncaseUnicodeString(
2242 IN OUT PUNICODE_STRING UniDest,
2243 IN PUNICODE_STRING UniSource,
2244 IN BOOLEAN AllocateDestinationString,
2245 IN POOL_TYPE PoolType);
2246
2247 NTSTATUS
2248 FASTCALL
2249 RtlpAnsiStringToUnicodeString(
2250 IN OUT PUNICODE_STRING DestinationString,
2251 IN PANSI_STRING SourceString,
2252 IN BOOLEAN AllocateDestinationString,
2253 IN POOL_TYPE PoolType);
2254
2255 NTSTATUS
2256 FASTCALL
2257 RtlpUnicodeStringToAnsiString(
2258 IN OUT PANSI_STRING AnsiDest,
2259 IN PUNICODE_STRING UniSource,
2260 IN BOOLEAN AllocateDestinationString,
2261 IN POOL_TYPE PoolType);
2262
2263 NTSTATUS
2264 FASTCALL
2265 RtlpOemStringToUnicodeString(
2266 IN OUT PUNICODE_STRING UniDest,
2267 IN POEM_STRING OemSource,
2268 IN BOOLEAN AllocateDestinationString,
2269 IN POOL_TYPE PoolType);
2270
2271 NTSTATUS
2272 FASTCALL
2273 RtlpUnicodeStringToOemString(
2274 IN OUT POEM_STRING OemDest,
2275 IN PUNICODE_STRING UniSource,
2276 IN BOOLEAN AllocateDestinationString,
2277 IN POOL_TYPE PoolType);
2278
2279 BOOLEAN
2280 FASTCALL
2281 RtlpCreateUnicodeString(
2282 IN OUT PUNICODE_STRING UniDest,
2283 IN PWSTR Source,
2284 IN POOL_TYPE PoolType);
2285
2286 NTSTATUS
2287 FASTCALL
2288 RtlpUnicodeStringToCountedOemString(
2289 IN OUT POEM_STRING OemDest,
2290 IN PUNICODE_STRING UniSource,
2291 IN BOOLEAN AllocateDestinationString,
2292 IN POOL_TYPE PoolType);
2293
2294 NTSTATUS STDCALL
2295 RtlpDuplicateUnicodeString(
2296 INT AddNull,
2297 IN PUNICODE_STRING SourceString,
2298 PUNICODE_STRING DestinationString,
2299 POOL_TYPE PoolType);
2300
2301 /* Register io functions */
2302
2303 UCHAR
2304 STDCALL
2305 READ_REGISTER_UCHAR (
2306 PUCHAR Register
2307 );
2308
2309 USHORT
2310 STDCALL
2311 READ_REGISTER_USHORT (
2312 PUSHORT Register
2313 );
2314
2315 ULONG
2316 STDCALL
2317 READ_REGISTER_ULONG (
2318 PULONG Register
2319 );
2320
2321 VOID
2322 STDCALL
2323 READ_REGISTER_BUFFER_UCHAR (
2324 PUCHAR Register,
2325 PUCHAR Buffer,
2326 ULONG Count
2327 );
2328
2329 VOID
2330 STDCALL
2331 READ_REGISTER_BUFFER_USHORT (
2332 PUSHORT Register,
2333 PUSHORT Buffer,
2334 ULONG Count
2335 );
2336
2337 VOID
2338 STDCALL
2339 READ_REGISTER_BUFFER_ULONG (
2340 PULONG Register,
2341 PULONG Buffer,
2342 ULONG Count
2343 );
2344
2345 VOID
2346 STDCALL
2347 WRITE_REGISTER_UCHAR (
2348 PUCHAR Register,
2349 UCHAR Value
2350 );
2351
2352 VOID
2353 STDCALL
2354 WRITE_REGISTER_USHORT (
2355 PUSHORT Register,
2356 USHORT Value
2357 );
2358
2359 VOID
2360 STDCALL
2361 WRITE_REGISTER_ULONG (
2362 PULONG Register,
2363 ULONG Value
2364 );
2365
2366 VOID
2367 STDCALL
2368 WRITE_REGISTER_BUFFER_UCHAR (
2369 PUCHAR Register,
2370 PUCHAR Buffer,
2371 ULONG Count
2372 );
2373
2374 VOID
2375 STDCALL
2376 WRITE_REGISTER_BUFFER_USHORT (
2377 PUSHORT Register,
2378 PUSHORT Buffer,
2379 ULONG Count
2380 );
2381
2382 VOID
2383 STDCALL
2384 WRITE_REGISTER_BUFFER_ULONG (
2385 PULONG Register,
2386 PULONG Buffer,
2387 ULONG Count
2388 );
2389
2390
2391 /* functions exported from NTOSKRNL.EXE which are considered RTL */
2392
2393 #if defined(__NTOSKRNL__) || defined(__NTDRIVER__) || defined(__NTHAL__) || defined(__NTDLL__) || defined(__NTAPP__)
2394
2395 char *_itoa (int value, char *string, int radix);
2396 wchar_t *_itow (int value, wchar_t *string, int radix);
2397 int _snprintf(char * buf, size_t cnt, const char *fmt, ...);
2398 int _snwprintf(wchar_t *buf, size_t cnt, const wchar_t *fmt, ...);
2399 int _stricmp(const char *s1, const char *s2);
2400 char * _strlwr(char *x);
2401 int _strnicmp(const char *s1, const char *s2, size_t n);
2402 char * _strnset(char* szToFill, int szFill, size_t sizeMaxFill);
2403 char * _strrev(char *s);
2404 char * _strset(char* szToFill, int szFill);
2405 char * _strupr(char *x);
2406 int _vsnprintf(char *buf, size_t cnt, const char *fmt, va_list args);
2407 int _wcsicmp (const wchar_t* cs, const wchar_t* ct);
2408 wchar_t * _wcslwr (wchar_t *x);
2409 int _wcsnicmp (const wchar_t * cs,const wchar_t * ct,size_t count);
2410 wchar_t* _wcsnset (wchar_t* wsToFill, wchar_t wcFill, size_t sizeMaxFill);
2411 wchar_t * _wcsrev(wchar_t *s);
2412 wchar_t *_wcsupr(wchar_t *x);
2413
2414 int atoi(const char *str);
2415 long atol(const char *str);
2416 int isdigit(int c);
2417 int islower(int c);
2418 int isprint(int c);
2419 int isspace(int c);
2420 int isupper(int c);
2421 int isxdigit(int c);
2422 size_t mbstowcs (wchar_t *wcstr, const char *mbstr, size_t count);
2423 int mbtowc (wchar_t *wchar, const char *mbchar, size_t count);
2424 void * memchr(const void *s, int c, size_t n);
2425 void * memcpy(void *to, const void *from, size_t count);
2426 void * memmove(void *dest,const void *src, size_t count);
2427 void * memset(void *src, int val, size_t count);
2428
2429 #if 0
2430 qsort
2431 #endif
2432
2433 int rand(void);
2434 int sprintf(char * buf, const char *fmt, ...);
2435 void srand(unsigned seed);
2436 char * strcat(char *s, const char *append);
2437 char * strchr(const char *s, int c);
2438 int strcmp(const char *s1, const char *s2);
2439 char * strcpy(char *to, const char *from);
2440 size_t strlen(const char *str);
2441 char * strncat(char *dst, const char *src, size_t n);
2442 int strncmp(const char *s1, const char *s2, size_t n);
2443 char *strncpy(char *dst, const char *src, size_t n);
2444 char *strrchr(const char *s, int c);
2445 size_t strspn(const char *s1, const char *s2);
2446 char *strstr(const char *s, const char *find);
2447 int swprintf(wchar_t *buf, const wchar_t *fmt, ...);
2448 int tolower(int c);
2449 int toupper(int c);
2450 wchar_t towlower(wchar_t c);
2451 wchar_t towupper(wchar_t c);
2452 int vsprintf(char *buf, const char *fmt, va_list args);
2453 wchar_t * wcscat(wchar_t *dest, const wchar_t *src);
2454 wchar_t * wcschr(const wchar_t *str, wchar_t ch);
2455 int wcscmp(const wchar_t *cs, const wchar_t *ct);
2456 wchar_t* wcscpy(wchar_t* str1, const wchar_t* str2);
2457 size_t wcscspn(const wchar_t *str,const wchar_t *reject);
2458 size_t wcslen(const wchar_t *s);
2459 wchar_t * wcsncat(wchar_t *dest, const wchar_t *src, size_t count);
2460 int wcsncmp(const wchar_t *cs, const wchar_t *ct, size_t count);
2461 wchar_t * wcsncpy(wchar_t *dest, const wchar_t *src, size_t count);
2462 wchar_t * wcsrchr(const wchar_t *str, wchar_t ch);
2463 size_t wcsspn(const wchar_t *str,const wchar_t *accept);
2464 wchar_t *wcsstr(const wchar_t *s,const wchar_t *b);
2465 size_t wcstombs (char *mbstr, const wchar_t *wcstr, size_t count);
2466 int wctomb (char *mbchar, wchar_t wchar);
2467
2468 #endif /* __NTOSKRNL__ || __NTDRIVER__ || __NTHAL__ || __NTDLL__ || __NTAPP__ */
2469
2470 #endif /* __DDK_RTL_H */