uLib  User mode C/C++ extended API library for Win32 programmers.
NtFunc.h
Go to the documentation of this file.
1 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2 // Project: uLib - User mode utility library.
3 // Module: Dynalinks to NtDll functions, and user mode APIs based on them.
4 // Author: Copyright (c) Love Nystrom
5 // License: NNOSL (BSD descendant, see NNOSL.txt in the base directory).
6 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
7 
8 #ifndef __NtFunc_h_incl__
9 #define __NtFunc_h_incl__
10 
11 #ifndef NO_NDK_FILES
12 
13 #include <uLib/NtTypes.h>
14 
16 #ifndef INOUT // Supplements to classic annotations
17  #define INOUT
18  #define OPTIN
19  #define OPTOUT
20  #define OPTIO
21 #endif
22 
25 
55 
56 //==---------------------------------------------------------------------------
59 //==---------------------------------------------------------------------------
61 
71 
72 bool InitNtFunc();
73 
74 // OBJECT_ATTRIBUTES -> ndk/umtypes.h
75 // OBJ_INHERIT et c. -> ndk/obtypes.h
76 // InitializeObjectAttributes macro -> ndk/obtypes.h
77 // RTL_CONSTANT_OBJECT_ATTRIBUTES -> ndk/rtltypes.h
78 
81 
83  OUT POBJECT_ATTRIBUTES pObjAttr,
84  IN HANDLE BaseObj,
85  IN PUNICODE_STRING ObjName,
86  IN ULONG Attrib,
87  OPTIN PSECURITY_DESCRIPTOR SecurityDesc,
88  OPTIN PSECURITY_QUALITY_OF_SERVICE SecurityQoS
89  );
90 
92 
93 typedef struct _PACKED_OBJ_ATTRIBUTES
94 {
95  OBJECT_ATTRIBUTES oa;
96  UNICODE_STRING uName;
97  WCHAR NameBuf[1];
98 }
99 *PPACKED_OBJ_ATTRIBUTES, PACKED_OBJ_ATTRIBUTES; // (Backwards due to doxygen)
100 
104 
106  HANDLE BaseObj, PCWSTR ObjName, ULONG Attributes,
107  PSECURITY_DESCRIPTOR SecurityDesc,
108  PSECURITY_QUALITY_OF_SERVICE SecurityQoS
109  );
110 
112 //==---------------------------------------------------------------------------
115 //==---------------------------------------------------------------------------
117 
118 PPEB GetPEBAddress( HANDLE hProcess );
119 bool GetProcPEB( HANDLE hProcess, OUT PPEB pPeb );
120 
128 
129 bool GetProcPathname( DWORD procId, OUT TSTR PathName, UINT ccPathName );
130 
135 
136 bool CopyProcUStringBuf(
137  HANDLE hProc, PUNICODE_STRING pProcStr, OUT WSTR wzBuf, UINT ccBuf
138  );
139 
146 
147 UINT GetProcDllData( HANDLE hProcess, WCSTR DllName, OUT PLDR_MODULE pModule, bool Localize );
148 
150 
151 void FreeLdrModBuffers( PLDR_MODULE pMod );
152 
153 // "Light-weight" module enumeration. (Alternative to ToolHelp32)
154 
161 
162 typedef bool (__stdcall *PFnEnumModuleAction)(
163  HANDLE hProcess,
164  const PLDR_MODULE pModule,
165  PVOID Context
166  );
167 
171 
172 UINT EnumProcModules( HANDLE hProcess, PFnEnumModuleAction Action, PVOID Context );
173 
176 //==---------------------------------------------------------------------------
177 // Dynalinks for NTDLL Functions
178 //==---------------------------------------------------------------------------
179 
180 // Use declaration macros so the naming scheme can be easily changed.
181 // The current scheme is "_NtSomeFunction" (a leading underscore).
182 
183 #define NTFUNC(Name) NTSTATUS (NTAPI *_##Name)
184 #define NTFUNCT(Type,Name) Type (NTAPI *_##Name)
185 #define NTFUNCC(Type,Name) Type (__cdecl *_##Name)
186 
187 // INIT_NTFUNC is used in NtFunc.cpp, but we keep it here for proximity reasons.
188 // Note: Use LITERAL as left-cast macro, rather than (FARPROC&), for C compatibility.
189 // A common C++ trick is: (FARPROC&)_SomeFuncPtr = GetProcAddress( hMod, "SomeFunc" );
190 // but in C it is: (FARPROC)_SomeFuncPtr = GetProcAddress( hMod, "SomeFunc" );
191 // which C++ won't accept.. Ergo, LITERAL() to the rescue, accepted by both.
192 
193 #define INIT_NTFUNC(Name) \
194  LITERAL( FARPROC, _##Name )= GetProcAddress( hNtDll, #Name ); \
195  if (!_##Name) { \
196  TRACE( DP_WARNING, _F("API missing: %s\n"), #Name ); \
197  missApi = true; \
198  }
199 
200 // Use an _INIT_FP_ construct, so we can have a single set of fnptr declarations.
201 // Also, the normal case that uLib user's see will have them 'extern'.
202 
203 #if _INIT_FP_ // INTERNAL
204  #define _FP_ = NULL
205  #define _NTFN_EXTERN
206 #else
207  #define _FP_
208  #define _NTFN_EXTERN extern
209 #endif
210 
212 //== Memo: Win7 sp1 x64 -------------------------------------------------------
213 
214 //[uLib] WARNING: [InitNtFunc] API missing: NtW32Call
215 //[uLib] WARNING: [InitNtFunc] API missing: DbgBreakPointWithStatus
216 //[uLib] WARNING: [InitNtFunc] API missing: LdrVerifyMappedImageMatchesChecksum
217 //[uLib] WARNING: [InitNtFunc] API missing: LdrRelocateImage
218 //[uLib] WARNING: [InitNtFunc] API missing: LdrProcessRelocationBlockLongLong
219 //[uLib] WARNING: [InitNtFunc] API missing: RtlDispatchException
220 //[uLib] WARNING: [InitNtFunc] API missing: RtlDebugCreateHeap
221 //[uLib] WARNING: [InitNtFunc] API missing: RtlExtendHeap
222 //[uLib] WARNING: [InitNtFunc] API missing: RtlUsageHeap
223 //[uLib] WARNING: [InitNtFunc] API missing: RtlCreateSecurityDescriptorRelative
224 //[uLib] WARNING: [InitNtFunc] API missing: RtlIntegerToUnicode
225 //[uLib] WARNING: [InitNtFunc] API missing: RtlIsDosDeviceName_Ustr
226 //[uLib] WARNING: [InitNtFunc] API missing: RtlFindFirstRunClear
227 //[uLib] WARNING: [InitNtFunc] API missing: RtlFindNextForwardRunSet
228 //[uLib] WARNING: [InitNtFunc] API missing: RtlSetBit
229 //[uLib] WARNING: [InitNtFunc] API missing: InterlockedPushListSList
230 //[uLib] WARNING: [InitNtFunc] API missing: RtlInitializeRangeList
231 //[uLib] WARNING: [InitNtFunc] API missing: RtlFreeRangeList
232 //[uLib] WARNING: [InitNtFunc] API missing: RtlAddRange
233 //[uLib] WARNING: [InitNtFunc] API missing: DbgLoadImageSymbols
234 //[uLib] WARNING: [InitNtFunc] API missing: DbgUnLoadImageSymbols
235 //[uLib] WARNING: [InitNtFunc] API missing: DbgCommandString
236 //[uLib] WARNING: [InitNtFunc] API missing: LdrRelocateImageWithBias
237 //[uLib] WARNING: [InitNtFunc] API missing: RtlGetDefaultCodePage
238 //[uLib] WARNING: [InitNtFunc] API missing: RtlLookupFirstMatchingElementGenericTableAvl
239 
240 //=============================================================================
243 //=============================================================================
245 
246 _NTFN_EXTERN NTFUNC( NtQueryInformationProcess )(
247  IN HANDLE ProcessHandle,
248  IN PROCESSINFOCLASS ProcessInformationClass,
249  OUT PVOID ProcessInformation,
250  IN ULONG ProcessInformationLength,
251  OPTOUT PULONG ReturnLength
252  )_FP_;
253 
254 _NTFN_EXTERN NTFUNC( NtQueryInformationThread )(
255  IN HANDLE ThreadHandle,
256  IN THREADINFOCLASS ThreadInformationClass,
257  OUT PVOID ThreadInformation,
258  IN ULONG ThreadInformationLength,
259  OPTOUT PULONG ReturnLength
260  )_FP_;
261 
262 _NTFN_EXTERN NTFUNC( NtQueryInformationJobObject )(
263  IN HANDLE JobHandle,
264  IN JOBOBJECTINFOCLASS JobInformationClass,
265  OUT PVOID JobInformation,
266  IN ULONG JobInformationLength,
267  OUT PULONG ReturnLength
268  )_FP_;
269 
270 // Process --------------------------------------------------------------------
271 
272 _NTFN_EXTERN NTFUNC( NtCreateProcess )(
273  OUT PHANDLE ProcessHandle,
274  IN ACCESS_MASK DesiredAccess,
275  OPTIN POBJECT_ATTRIBUTES ObjectAttributes,
276  IN HANDLE ParentProcess,
277  IN BOOLEAN InheritObjectTable,
278  OPTIN HANDLE SectionHandle,
279  OPTIN HANDLE DebugPort,
280  OPTIN HANDLE ExceptionPort
281  )_FP_;
282 
283 _NTFN_EXTERN NTFUNC( NtCreateProcessEx )(
284  OUT PHANDLE ProcessHandle,
285  IN ACCESS_MASK DesiredAccess,
286  OPTIN POBJECT_ATTRIBUTES ObjectAttributes,
287  IN HANDLE ParentProcess,
288  IN ULONG Flags,
289  OPTIN HANDLE SectionHandle,
290  OPTIN HANDLE DebugPort,
291  OPTIN HANDLE ExceptionPort,
292  IN BOOLEAN InJob
293  )_FP_;
294 
295 _NTFN_EXTERN NTFUNC( NtOpenProcess )(
296  OUT PHANDLE ProcessHandle,
297  IN ACCESS_MASK DesiredAccess,
298  IN POBJECT_ATTRIBUTES ObjectAttributes,
299  OPTIN PCLIENT_ID ClientId
300  )_FP_;
301 
302 // Thread ---------------------------------------------------------------------
303 
304 _NTFN_EXTERN NTFUNC( NtCreateThread )(
305  OUT PHANDLE ThreadHandle,
306  IN ACCESS_MASK DesiredAccess,
307  OPTIN POBJECT_ATTRIBUTES ObjectAttributes,
308  IN HANDLE ProcessHandle,
309  OUT PCLIENT_ID ClientId,
310  IN PCONTEXT ThreadContext,
311  IN PINITIAL_TEB UserStack,
312  IN BOOLEAN CreateSuspended
313  )_FP_;
314 
315 _NTFN_EXTERN NTFUNC( NtOpenThread )(
316  OUT PHANDLE ThreadHandle,
317  IN ACCESS_MASK DesiredAccess,
318  IN POBJECT_ATTRIBUTES ObjectAttributes,
319  IN PCLIENT_ID ClientId
320  )_FP_;
321 
322 _NTFN_EXTERN NTFUNC( NtAlertThread )( IN HANDLE ThreadHandle )_FP_;
323 
324 _NTFN_EXTERN NTFUNC( NtAlertResumeThread )(
325  IN HANDLE ThreadHandle,
326  OPTOUT PULONG SuspendCount
327  )_FP_;
328 
329 _NTFN_EXTERN NTFUNCT( PTEB, NtCurrentTeb )( void )_FP_;
330 
331 _NTFN_EXTERN NTFUNC( NtImpersonateThread )(
332  IN HANDLE ThreadHandle,
333  IN HANDLE ThreadToImpersonate,
334  IN PSECURITY_QUALITY_OF_SERVICE SecurityQualityOfService
335  )_FP_;
336 
337 // Job ------------------------------------------------------------------------
338 
339 _NTFN_EXTERN NTFUNC( NtCreateJobObject )(
340  OUT PHANDLE JobHandle,
341  IN ACCESS_MASK DesiredAccess,
342  IN POBJECT_ATTRIBUTES ObjectAttributes
343  )_FP_;
344 
345 _NTFN_EXTERN NTFUNC( NtOpenJobObject )(
346  OUT PHANDLE JobHandle,
347  IN ACCESS_MASK DesiredAccess,
348  IN POBJECT_ATTRIBUTES ObjectAttributes
349  )_FP_;
350 
351 _NTFN_EXTERN NTFUNC( NtCreateJobSet )(
352  IN ULONG NumJob,
353  IN PJOB_SET_ARRAY UserJobSet,
354  IN ULONG Flags
355  )_FP_;
356 
357 _NTFN_EXTERN NTFUNC( NtAssignProcessToJobObject )(
358  IN HANDLE JobHandle,
359  IN HANDLE ProcessHandle
360  )_FP_;
361 
362 _NTFN_EXTERN NTFUNC( NtIsProcessInJob )(
363  IN HANDLE ProcessHandle,
364  OPTIN HANDLE JobHandle
365  )_FP_;
366 
367 // Misc
368 
369 _NTFN_EXTERN NTFUNC( NtApphelpCacheControl )(
370  IN APPHELPCACHESERVICECLASS Service,
371  OPTIN PAPPHELP_CACHE_SERVICE_LOOKUP ServiceData
372  )_FP_;
373 
375 //=============================================================================
378 //=============================================================================
380 
381 _NTFN_EXTERN NTFUNC( NtClose )( IN HANDLE Handle )_FP_;
382 
383 _NTFN_EXTERN NTFUNC( NtDuplicateObject )(
384  IN HANDLE SourceProcessHandle,
385  IN HANDLE SourceHandle,
386  IN HANDLE TargetProcessHandle,
387  OUT PHANDLE TargetHandle,
388  IN ACCESS_MASK DesiredAccess,
389  IN ULONG HandleAttributes,
390  IN ULONG Options
391  )_FP_;
392 
393 _NTFN_EXTERN NTFUNC( NtMakePermanentObject )( IN HANDLE Object )_FP_;
394 _NTFN_EXTERN NTFUNC( NtMakeTemporaryObject )( IN HANDLE Handle )_FP_;
395 
396 _NTFN_EXTERN NTFUNC( NtQueryObject )(
397  OPTIN HANDLE Handle,
398  IN OBJECT_INFORMATION_CLASS ObjectInformationClass,
399  OUT PVOID ObjectInformation,
400  IN ULONG ObjectInformationLength,
401  OPTOUT PULONG ReturnLength
402  )_FP_;
403 
404 _NTFN_EXTERN NTFUNC( NtSetInformationObject )(
405  IN HANDLE ObjectHandle,
406  IN OBJECT_INFORMATION_CLASS ObjectInformationClass,
407  IN PVOID ObjectInformation,
408  IN ULONG Length
409  )_FP_;
410 
411 // Security -------------------------------------------------------------------
412 
413 _NTFN_EXTERN NTFUNC( NtQuerySecurityObject )(
414  IN HANDLE Handle,
415  IN SECURITY_INFORMATION SecurityInformation,
416  OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
417  IN ULONG Length,
418  OUT PULONG LengthNeeded
419  )_FP_;
420 
421 _NTFN_EXTERN NTFUNC( NtSetSecurityObject )(
422  IN HANDLE Handle,
423  IN SECURITY_INFORMATION SecurityInformation,
424  IN PSECURITY_DESCRIPTOR SecurityDescriptor
425  )_FP_;
426 
427 // Wait -----------------------------------------------------------------------
428 
429 _NTFN_EXTERN NTFUNC( NtWaitForSingleObject )(
430  IN HANDLE Object,
431  IN BOOLEAN Alertable,
432  IN PLARGE_INTEGER Timeout OPTIONAL
433  )_FP_;
434 
435 _NTFN_EXTERN NTFUNC( NtSignalAndWaitForSingleObject )(
436  IN HANDLE SignalObject,
437  IN HANDLE WaitObject,
438  IN BOOLEAN Alertable,
439  IN PLARGE_INTEGER Time
440  )_FP_;
441 
442 _NTFN_EXTERN NTFUNC( NtWaitForMultipleObjects )(
443  IN ULONG Count,
444  IN HANDLE Object[],
445  IN WAIT_TYPE WaitType,
446  IN BOOLEAN Alertable,
447  IN PLARGE_INTEGER Time
448  )_FP_;
449 
450 _NTFN_EXTERN NTFUNC( NtWaitForMultipleObjects32 )(
451  IN ULONG ObjectCount,
452  IN PLONG Handles,
453  IN WAIT_TYPE WaitType,
454  IN BOOLEAN Alertable,
455  IN PLARGE_INTEGER TimeOut OPTIONAL
456  )_FP_;
457 
458 // Directory ------------------------------------------------------------------
459 
460 _NTFN_EXTERN NTFUNC( NtCreateDirectoryObject )(
461  OUT PHANDLE DirectoryHandle,
462  IN ACCESS_MASK DesiredAccess,
463  IN POBJECT_ATTRIBUTES ObjectAttributes
464  )_FP_;
465 
466 _NTFN_EXTERN NTFUNC( NtOpenDirectoryObject )(
467  OUT PHANDLE FileHandle,
468  IN ACCESS_MASK DesiredAccess,
469  IN POBJECT_ATTRIBUTES ObjectAttributes
470  )_FP_;
471 
472 _NTFN_EXTERN NTFUNC( NtQueryDirectoryObject )(
473  IN HANDLE DirectoryHandle,
474  OUT PVOID Buffer,
475  IN ULONG BufferLength,
476  IN BOOLEAN ReturnSingleEntry,
477  IN BOOLEAN RestartScan,
478  INOUT PULONG Context,
479  OPTOUT PULONG ReturnLength
480  )_FP_;
481 
482 // SymLink --------------------------------------------------------------------
483 
484 _NTFN_EXTERN NTFUNC( NtCreateSymbolicLinkObject )(
485  OUT PHANDLE SymbolicLinkHandle,
486  IN ACCESS_MASK DesiredAccess,
487  IN POBJECT_ATTRIBUTES ObjectAttributes,
488  IN PUNICODE_STRING Name
489  )_FP_;
490 
491 _NTFN_EXTERN NTFUNC( NtOpenSymbolicLinkObject )(
492  OUT PHANDLE SymbolicLinkHandle,
493  IN ACCESS_MASK DesiredAccess,
494  IN POBJECT_ATTRIBUTES ObjectAttributes
495  )_FP_;
496 
497 _NTFN_EXTERN NTFUNC( NtQuerySymbolicLinkObject )(
498  IN HANDLE SymLinkObjHandle,
499  OUT PUNICODE_STRING LinkTarget,
500  OPTOUT PULONG DataWritten
501  )_FP_;
502 
503 // Audit ----------------------------------------------------------------------
504 
505 _NTFN_EXTERN NTFUNC( NtCloseObjectAuditAlarm )(
506  IN PUNICODE_STRING SubsystemName,
507  IN PVOID HandleId OPTIONAL,
508  IN BOOLEAN GenerateOnClose
509  )_FP_;
510 
511 _NTFN_EXTERN NTFUNC( NtDeleteObjectAuditAlarm )(
512  IN PUNICODE_STRING SubsystemName,
513  IN PVOID HandleId OPTIONAL,
514  IN BOOLEAN GenerateOnClose
515  )_FP_;
516 
518 //=============================================================================
521 //=============================================================================
523 
524 // SystemInfo
525 
526 _NTFN_EXTERN NTFUNC( NtQuerySystemInformation )(
527  IN SYSTEM_INFORMATION_CLASS SystemInformationClass,
528  OUT PVOID SystemInformation,
529  IN ULONG InformationLength,
530  OPTOUT PULONG ResultLength
531  )_FP_;
532 
533 _NTFN_EXTERN NTFUNC( NtSetSystemInformation )(
534  IN SYSTEM_INFORMATION_CLASS SystemInformationClass,
535  IN PVOID SystemInformation,
536  IN ULONG SystemInformationLength
537  )_FP_;
538 
539 // Environment ----------------------------------------------------------------
540 
541 _NTFN_EXTERN NTFUNC( NtEnumerateSystemEnvironmentValuesEx )(
542  IN ULONG InformationClass,
543  IN PVOID Buffer,
544  IN ULONG BufferLength
545  )_FP_;
546 
547 _NTFN_EXTERN NTFUNC( NtQuerySystemEnvironmentValue )(
548  IN PUNICODE_STRING Name,
549  OUT PWSTR Value,
550  IN ULONG Length,
551  OPTOUT PULONG ReturnLength
552  )_FP_;
553 
554 _NTFN_EXTERN NTFUNC( NtQuerySystemEnvironmentValueEx )(
555  IN PUNICODE_STRING VariableName,
556  IN LPGUID VendorGuid,
557  IN PVOID Value,
558  INOUT PULONG ReturnLength,
559  INOUT PULONG Attributes
560  )_FP_;
561 
562 _NTFN_EXTERN NTFUNC( NtSetSystemEnvironmentValue )(
563  IN PUNICODE_STRING VariableName,
564  IN PUNICODE_STRING Value
565  )_FP_;
566 
567 _NTFN_EXTERN NTFUNC( NtSetSystemEnvironmentValueEx )(
568  IN PUNICODE_STRING VariableName,
569  IN LPGUID VendorGuid,
570  IN PVOID Value,
571  INOUT PULONG ReturnLength,
572  INOUT PULONG Attributes
573  )_FP_;
574 
575 // Language/Locale ------------------------------------------------------------
576 
577 _NTFN_EXTERN NTFUNC( NtQueryDefaultUILanguage )( OUT LANGID* LanguageId )_FP_;
578 _NTFN_EXTERN NTFUNC( NtQueryInstallUILanguage )( OUT LANGID* LanguageId )_FP_;
579 _NTFN_EXTERN NTFUNC( NtSetDefaultUILanguage )( IN LANGID LanguageId )_FP_;
580 
581 _NTFN_EXTERN NTFUNC( NtQueryDefaultLocale )(
582  IN BOOLEAN UserProfile,
583  OUT PLCID DefaultLocaleId
584  )_FP_;
585 
586 _NTFN_EXTERN NTFUNC( NtSetDefaultLocale )(
587  IN BOOLEAN UserProfile,
588  IN LCID DefaultLocaleId
589  )_FP_;
590 
591 // Atom -----------------------------------------------------------------------
592 
593 _NTFN_EXTERN NTFUNC( NtAddAtom )(
594  IN PWSTR AtomName,
595  IN ULONG AtomNameLength,
596  INOUT PRTL_ATOM Atom
597  )_FP_;
598 
599 _NTFN_EXTERN NTFUNC( NtDeleteAtom )( IN RTL_ATOM Atom )_FP_;
600 
601 _NTFN_EXTERN NTFUNC( NtFindAtom )(
602  IN PWSTR AtomName,
603  IN ULONG AtomNameLength,
604  OPTOUT PRTL_ATOM Atom
605  )_FP_;
606 
607 _NTFN_EXTERN NTFUNC( NtQueryInformationAtom )(
608  IN RTL_ATOM Atom,
609  IN ATOM_INFORMATION_CLASS AtomInformationClass,
610  OUT PVOID AtomInformation,
611  IN ULONG AtomInformationLength,
612  OPTOUT PULONG ReturnLength
613  )_FP_;
614 
615 // Timer ----------------------------------------------------------------------
616 
617 _NTFN_EXTERN NTFUNC( NtCreateTimer )(
618  OUT PHANDLE TimerHandle,
619  IN ACCESS_MASK DesiredAccess,
620  OPTIN POBJECT_ATTRIBUTES ObjectAttributes,
621  IN TIMER_TYPE TimerType
622  )_FP_;
623 
624 _NTFN_EXTERN NTFUNC( NtOpenTimer )(
625  OUT PHANDLE TimerHandle,
626  IN ACCESS_MASK DesiredAccess,
627  IN POBJECT_ATTRIBUTES ObjectAttributes
628  )_FP_;
629 
630 _NTFN_EXTERN NTFUNC( NtQueryTimer )(
631  IN HANDLE TimerHandle,
632  IN TIMER_INFORMATION_CLASS TimerInformationClass,
633  OUT PVOID TimerInformation,
634  IN ULONG Length,
635  OUT PULONG ResultLength
636  )_FP_;
637 
638 _NTFN_EXTERN NTFUNC( NtSetTimer )(
639  IN HANDLE TimerHandle,
640  IN PLARGE_INTEGER DueTime,
641  IN PTIMER_APC_ROUTINE TimerApcRoutine,
642  IN PVOID TimerContext,
643  IN BOOLEAN WakeTimer,
644  OPTIN LONG Period,
645  OPTOUT PBOOLEAN PreviousState
646  )_FP_;
647 
648 _NTFN_EXTERN NTFUNC( NtCancelTimer )(
649  IN HANDLE TimerHandle,
650  OPTOUT PBOOLEAN CurrentState
651  )_FP_;
652 
653 // Event ----------------------------------------------------------------------
654 
655 _NTFN_EXTERN NTFUNC( NtCreateEvent )(
656  OUT PHANDLE EventHandle,
657  IN ACCESS_MASK DesiredAccess,
658  OPTIN POBJECT_ATTRIBUTES ObjectAttributes,
659  IN EVENT_TYPE EventType,
660  IN BOOLEAN InitialState
661  )_FP_;
662 
663 _NTFN_EXTERN NTFUNC( NtOpenEvent )(
664  OUT PHANDLE EventHandle,
665  IN ACCESS_MASK DesiredAccess,
666  IN POBJECT_ATTRIBUTES ObjectAttributes
667  )_FP_;
668 
669 _NTFN_EXTERN NTFUNC( NtQueryEvent )(
670  IN HANDLE EventHandle,
671  IN EVENT_INFORMATION_CLASS EventInformationClass,
672  OUT PVOID EventInformation,
673  IN ULONG EventInformationLength,
674  OUT PULONG ReturnLength
675  )_FP_;
676 
677 _NTFN_EXTERN NTFUNC( NtSetEvent )(
678  IN HANDLE EventHandle,
679  OPTOUT PLONG PreviousState
680  )_FP_;
681 
682 _NTFN_EXTERN NTFUNC( NtResetEvent )(
683  IN HANDLE EventHandle,
684  OPTOUT PLONG NumberOfWaitingThreads
685  )_FP_;
686 
687 _NTFN_EXTERN NTFUNC( NtClearEvent )( IN HANDLE EventHandle )_FP_;
688 
689 _NTFN_EXTERN NTFUNC( NtPulseEvent )(
690  IN HANDLE EventHandle,
691  OPTIN PLONG PulseCount
692  )_FP_;
693 
694 // KeyedEvent -----------------------------------------------------------------
695 
696 _NTFN_EXTERN NTFUNC( NtCreateKeyedEvent )(
697  OUT PHANDLE OutHandle,
698  IN ACCESS_MASK AccessMask,
699  IN POBJECT_ATTRIBUTES ObjectAttributes,
700  IN ULONG Flags
701  )_FP_;
702 
703 _NTFN_EXTERN NTFUNC( NtOpenKeyedEvent )(
704  OUT PHANDLE OutHandle,
705  IN ACCESS_MASK AccessMask,
706  IN POBJECT_ATTRIBUTES ObjectAttributes
707  )_FP_;
708 
709 _NTFN_EXTERN NTFUNC( NtWaitForKeyedEvent )(
710  OPTIN HANDLE EventHandle,
711  IN PVOID Key, // NOTE: Must be evenly aligned
712  IN BOOLEAN Alertable,
713  OPTIN PLARGE_INTEGER Timeout
714  )_FP_;
715 
716 _NTFN_EXTERN NTFUNC( NtReleaseKeyedEvent )(
717  OPTIN HANDLE EventHandle,
718  IN PVOID Key, // NOTE: Must be evenly aligned
719  IN BOOLEAN Alertable,
720  OPTIN PLARGE_INTEGER Timeout
721  )_FP_;
722 
723 // EventPair ------------------------------------------------------------------
724 
725 _NTFN_EXTERN NTFUNC( NtCreateEventPair )(
726  OUT PHANDLE EventPairHandle,
727  IN ACCESS_MASK DesiredAccess,
728  IN POBJECT_ATTRIBUTES ObjectAttributes
729  )_FP_;
730 
731 _NTFN_EXTERN NTFUNC( NtOpenEventPair )(
732  OUT PHANDLE EventPairHandle,
733  IN ACCESS_MASK DesiredAccess,
734  IN POBJECT_ATTRIBUTES ObjectAttributes
735  )_FP_;
736 
737 _NTFN_EXTERN NTFUNC( NtSetHighEventPair )( IN HANDLE EventPair )_FP_;
738 _NTFN_EXTERN NTFUNC( NtSetLowEventPair )( IN HANDLE EventPair )_FP_;
739 
740 _NTFN_EXTERN NTFUNC( NtSetHighWaitLowEventPair )( IN HANDLE EventPair )_FP_;
741 _NTFN_EXTERN NTFUNC( NtSetLowWaitHighEventPair )( IN HANDLE EventPair )_FP_;
742 
743 _NTFN_EXTERN NTFUNC( NtWaitHighEventPair )( IN HANDLE EventPairHandle )_FP_;
744 _NTFN_EXTERN NTFUNC( NtWaitLowEventPair )( IN HANDLE EventPairHandle )_FP_;
745 
746 // Mutant ---------------------------------------------------------------------
747 
748 _NTFN_EXTERN NTFUNC( NtCreateMutant )(
749  OUT PHANDLE MutantHandle,
750  IN ACCESS_MASK DesiredAccess,
751  IN POBJECT_ATTRIBUTES ObjectAttributes,
752  IN BOOLEAN InitialOwner
753  )_FP_;
754 
755 _NTFN_EXTERN NTFUNC( NtOpenMutant )(
756  OUT PHANDLE MutantHandle,
757  IN ACCESS_MASK DesiredAccess,
758  IN POBJECT_ATTRIBUTES ObjectAttributes
759  )_FP_;
760 
761 _NTFN_EXTERN NTFUNC( NtQueryMutant )(
762  IN HANDLE MutantHandle,
763  IN MUTANT_INFORMATION_CLASS MutantInformationClass,
764  OUT PVOID MutantInformation,
765  IN ULONG Length,
766  OUT PULONG ResultLength
767  )_FP_;
768 
769 _NTFN_EXTERN NTFUNC( NtReleaseMutant )(
770  IN HANDLE MutantHandle,
771  OPTIN PLONG ReleaseCount
772  )_FP_;
773 
774 // Semaphore ------------------------------------------------------------------
775 
776 _NTFN_EXTERN NTFUNC( NtCreateSemaphore )(
777  OUT PHANDLE SemaphoreHandle,
778  IN ACCESS_MASK DesiredAccess,
779  OPTIN POBJECT_ATTRIBUTES ObjectAttributes,
780  IN LONG InitialCount,
781  IN LONG MaximumCount
782  )_FP_;
783 
784 _NTFN_EXTERN NTFUNC( NtOpenSemaphore )(
785  OUT PHANDLE SemaphoreHandle,
786  IN ACCESS_MASK DesiredAcces,
787  IN POBJECT_ATTRIBUTES ObjectAttributes
788  )_FP_;
789 
790 _NTFN_EXTERN NTFUNC( NtQuerySemaphore )(
791  IN HANDLE SemaphoreHandle,
792  IN SEMAPHORE_INFORMATION_CLASS SemaphoreInformationClass,
793  OUT PVOID SemaphoreInformation,
794  IN ULONG Length,
795  OUT PULONG ReturnLength
796  )_FP_;
797 
798 _NTFN_EXTERN NTFUNC( NtReleaseSemaphore )(
799  IN HANDLE SemaphoreHandle,
800  IN LONG ReleaseCount,
801  OPTOUT PLONG PreviousCount
802  )_FP_;
803 
804 // Misc Executive -------------------------------------------------------------
805 
806 _NTFN_EXTERN NTFUNC( NtDisplayString )(
807  IN PUNICODE_STRING DisplayString
808  )_FP_;
809 
810 _NTFN_EXTERN NTFUNC( NtRaiseHardError )(
811  IN NTSTATUS ErrorStatus,
812  IN ULONG NumberOfParameters,
813  IN ULONG UnicodeStringParameterMask,
814  IN PULONG_PTR Parameters,
815  IN ULONG ValidResponseOptions,
816  OUT PULONG Response
817  )_FP_;
818 
819 _NTFN_EXTERN NTFUNC( NtSetDefaultHardErrorPort )( IN HANDLE PortHandle )_FP_;
820 _NTFN_EXTERN NTFUNC( NtShutdownSystem )( IN SHUTDOWN_ACTION Action )_FP_;
821 _NTFN_EXTERN NTFUNC( NtSetEventBoostPriority )( IN HANDLE EventHandle )_FP_;
822 _NTFN_EXTERN NTFUNC( NtSetUuidSeed )( IN PUCHAR UuidSeed )_FP_;
823 
824 _NTFN_EXTERN NTFUNC( NtTraceEvent )(
825  IN ULONG TraceHandle,
826  IN ULONG Flags,
827  IN ULONG TraceHeaderLength,
828  IN PEVENT_TRACE_HEADER TraceHeader
829  )_FP_;
830 
832 //=============================================================================
835 //=============================================================================
837 
838 _NTFN_EXTERN NTFUNCT( ULONG, NtGetCurrentProcessorNumber )( VOID )_FP_;
839 
840 // ExecutionControl -----------------------------------------------------------
841 
842 _NTFN_EXTERN NTFUNC( NtYieldExecution )( VOID )_FP_;
843 
844 _NTFN_EXTERN NTFUNC( NtDelayExecution )(
845  IN BOOLEAN Alertable,
846  IN LARGE_INTEGER* Interval
847  )_FP_;
848 
849 _NTFN_EXTERN NTFUNC( NtRaiseException )(
850  IN PEXCEPTION_RECORD ExceptionRecord,
851  IN PCONTEXT Context,
852  IN BOOLEAN SearchFrames
853  )_FP_;
854 
855 _NTFN_EXTERN NTFUNC( NtContinue )(
856  IN PCONTEXT Context,
857  IN BOOLEAN TestAlert
858  )_FP_;
859 
860 _NTFN_EXTERN NTFUNC( NtW32Call )( // Not in Win7 x64 NTDLL.
861  IN ULONG RoutineIndex,
862  IN PVOID Argument,
863  IN ULONG ArgumentLength,
864  OPTOUT PVOID* Result,
865  OPTOUT PULONG ResultLength
866  )_FP_;
867 
868 // KernelTime -----------------------------------------------------------------
869 
870 _NTFN_EXTERN NTFUNCT( ULONG, NtGetTickCount )( VOID )_FP_;
871 
872 _NTFN_EXTERN NTFUNC( NtQuerySystemTime )(
873  OUT PLARGE_INTEGER CurrentTime
874  )_FP_;
875 
876 _NTFN_EXTERN NTFUNC( NtSetSystemTime )(
877  IN PLARGE_INTEGER SystemTime,
878  OPTIN PLARGE_INTEGER NewSystemTime
879  )_FP_;
880 
881 _NTFN_EXTERN NTFUNC( NtQueryPerformanceCounter )(
882  OUT PLARGE_INTEGER Counter,
883  OPTOUT PLARGE_INTEGER Frequency
884  )_FP_;
885 
886 _NTFN_EXTERN NTFUNC( NtQueryTimerResolution )(
887  OUT PULONG MinimumResolution,
888  OUT PULONG MaximumResolution,
889  OUT PULONG ActualResolution
890  )_FP_;
891 
892 _NTFN_EXTERN NTFUNC( NtSetTimerResolution )(
893  IN ULONG RequestedResolution,
894  IN BOOLEAN SetOrUnset,
895  OUT PULONG ActualResolution
896  )_FP_;
897 
898 // ThreadContext --------------------------------------------------------------
899 
900 _NTFN_EXTERN NTFUNC( NtGetContextThread )(
901  IN HANDLE ThreadHandle,
902  OUT PCONTEXT Context
903  )_FP_;
904 
905 _NTFN_EXTERN NTFUNC( NtSetContextThread )(
906  IN HANDLE ThreadHandle,
907  IN PCONTEXT Context
908  )_FP_;
909 
910 // Profiling ------------------------------------------------------------------
911 
912 _NTFN_EXTERN NTFUNC( NtCreateProfile )(
913  OUT PHANDLE ProfileHandle,
914  IN HANDLE ProcessHandle,
915  IN PVOID ImageBase,
916  IN SIZE_T ImageSize,
917  IN ULONG Granularity,
918  OUT PVOID Buffer,
919  IN ULONG ProfilingSize,
920  IN KPROFILE_SOURCE Source,
921  IN KAFFINITY ProcessorMask
922  )_FP_;
923 
924 #if 0 // temp hack
925 typedef struct _GROUP_AFFINITY {
926  KAFFINITY Mask;
927  WORD Group;
928  WORD Reserved[3];
929 } GROUP_AFFINITY, *PGROUP_AFFINITY;
930 #endif
931 
932 _NTFN_EXTERN NTFUNC( NtCreateProfileEx )(
933  OUT PHANDLE ProfileHandle,
934  IN HANDLE ProcessHandle,
935  IN PVOID ImageBase,
936  IN SIZE_T ImageSize,
937  IN ULONG Granularity,
938  OUT PVOID Buffer,
939  IN ULONG ProfilingSize,
940  IN KPROFILE_SOURCE Source,
941  IN USHORT GroupCount,
942  IN PGROUP_AFFINITY Affinity
943  )_FP_;
944 
945 _NTFN_EXTERN NTFUNC( NtStartProfile )( IN HANDLE ProfileHandle )_FP_;
946 _NTFN_EXTERN NTFUNC( NtStopProfile )( IN HANDLE ProfileHandle )_FP_;
947 
948 _NTFN_EXTERN NTFUNC( NtQueryIntervalProfile )(
949  IN KPROFILE_SOURCE ProfileSource,
950  OUT PULONG Interval
951  )_FP_;
952 
953 _NTFN_EXTERN NTFUNC( NtSetIntervalProfile )(
954  IN ULONG Interval,
955  IN KPROFILE_SOURCE ClockSource
956  )_FP_;
957 
958 // APC ------------------------------------------------------------------------
959 
960 _NTFN_EXTERN NTFUNC( NtQueueApcThread )(
961  IN HANDLE ThreadHandle,
962  IN PKNORMAL_ROUTINE ApcRoutine,
963  OPTIN PVOID NormalContext,
964  OPTIN PVOID SystemArgument1,
965  OPTIN PVOID SystemArgument2
966  )_FP_;
967 
968 _NTFN_EXTERN NTFUNC( NtTestAlert )( VOID )_FP_;
969 
970 _NTFN_EXTERN NTFUNC( NtCallbackReturn )( // Careful with that axe, Eugene!
971  OPTIN PVOID Result,
972  IN ULONG ResultLength,
973  IN NTSTATUS Status
974  )_FP_;
975 
976 // Banana Benders & Raisin Wrinklers ------------------------------------------
977 
978 _NTFN_EXTERN NTFUNC( NtSetLdtEntries )(
979  IN ULONG Selector1,
980  IN LDT_ENTRY LdtEntry1,
981  IN ULONG Selector2,
982  IN LDT_ENTRY LdtEntry2
983  )_FP_;
984 
985 _NTFN_EXTERN NTFUNC( NtVdmControl )(
986  IN ULONG ControlCode,
987  IN PVOID ControlData
988  )_FP_;
989 
991 //=============================================================================
994 //=============================================================================
996 
997 _NTFN_EXTERN NTFUNC( NtQueryDebugFilterState )(
998  ULONG ComponentId,
999  ULONG Level
1000  )_FP_;
1001 
1002 //_NTFN_EXTERN NTFUNCT( ULONG, NtQueryDebugFilterLevel )( // PONDER: TODO?
1003 // ULONG ComponentId
1004 // )_FP_;
1005 
1006 _NTFN_EXTERN NTFUNC( NtSetDebugFilterState )(
1007  ULONG ComponentId,
1008  ULONG Level,
1009  BOOLEAN State
1010  )_FP_;
1011 
1012 _NTFN_EXTERN NTFUNC( NtSystemDebugControl )(
1013  SYSDBG_COMMAND ControlCode,
1014  PVOID InputBuffer,
1015  ULONG InputBufferLength,
1016  PVOID OutputBuffer,
1017  ULONG OutputBufferLength,
1018  PULONG ReturnLength
1019  )_FP_;
1020 
1022 //=============================================================================
1025 //=============================================================================
1027 
1028 _NTFN_EXTERN NTFUNC( NtDebugActiveProcess )(
1029  IN HANDLE Process,
1030  IN HANDLE DebugObject
1031  )_FP_;
1032 
1033 _NTFN_EXTERN NTFUNC( NtRemoveProcessDebug )(
1034  IN HANDLE Process,
1035  IN HANDLE DebugObject
1036  )_FP_;
1037 
1038 _NTFN_EXTERN NTFUNC( NtCreateDebugObject )(
1039  OUT PHANDLE DebugHandle,
1040  IN ACCESS_MASK DesiredAccess,
1041  IN POBJECT_ATTRIBUTES ObjectAttributes,
1042  IN ULONG Flags
1043  )_FP_;
1044 
1045 _NTFN_EXTERN NTFUNC( NtDebugContinue )(
1046  IN HANDLE DebugObject,
1047  IN PCLIENT_ID AppClientId,
1048  IN NTSTATUS ContinueStatus
1049  )_FP_;
1050 
1051 _NTFN_EXTERN NTFUNC( NtWaitForDebugEvent )(
1052  IN HANDLE DebugObject,
1053  IN BOOLEAN Alertable,
1054  OPTIN PLARGE_INTEGER Timeout,
1055  OUT PDBGUI_WAIT_STATE_CHANGE StateChange
1056  )_FP_;
1057 
1058 _NTFN_EXTERN NTFUNC( NtSetInformationDebugObject )(
1059  IN HANDLE DebugObject,
1060  IN DEBUGOBJECTINFOCLASS InformationClass,
1061  IN PVOID Information,
1062  IN ULONG InformationLength,
1063  OPTOUT PULONG ReturnLength
1064  )_FP_;
1065 
1066 // <- User-Mode NT Library Functions ------------------------------------------
1067 
1068 _NTFN_EXTERN NTFUNC( DbgUiConnectToDbg )( VOID )_FP_;
1069 
1070 _NTFN_EXTERN NTFUNC( DbgUiDebugActiveProcess )(
1071  IN HANDLE Process
1072  )_FP_;
1073 
1074 _NTFN_EXTERN NTFUNC( DbgUiStopDebugging )(
1075  IN HANDLE Process
1076  )_FP_;
1077 
1078 _NTFN_EXTERN NTFUNCT( VOID, DbgBreakPointWithStatus )( IN ULONG Status )_FP_;
1079 
1080 _NTFN_EXTERN NTFUNC( DbgUiContinue )(
1081  IN PCLIENT_ID ClientId,
1082  IN NTSTATUS ContinueStatus
1083  )_FP_;
1084 
1085 _NTFN_EXTERN NTFUNC( DbgUiWaitStateChange )(
1086  IN PDBGUI_WAIT_STATE_CHANGE DbgUiWaitStateCange,
1087  IN PLARGE_INTEGER TimeOut
1088  )_FP_;
1089 
1090 _NTFN_EXTERN NTFUNC( DbgUiConvertStateChangeStructure )(
1091  IN PDBGUI_WAIT_STATE_CHANGE WaitStateChange,
1092  IN PVOID DebugEvent
1093  )_FP_;
1094 
1095 _NTFN_EXTERN NTFUNCT( VOID, DbgUiRemoteBreakin )( VOID )_FP_;
1096 
1097 _NTFN_EXTERN NTFUNC( DbgUiIssueRemoteBreakin )( IN HANDLE Process )_FP_;
1098 
1099 _NTFN_EXTERN NTFUNCT( HANDLE, DbgUiGetThreadDebugObject )( VOID )_FP_;
1100 
1102 //=============================================================================
1105 //=============================================================================
1107 
1108 // File
1109 
1110 _NTFN_EXTERN NTFUNC( NtCreateFile )(
1111  OUT PHANDLE FileHandle,
1112  IN ACCESS_MASK DesiredAccess,
1113  IN POBJECT_ATTRIBUTES ObjectAttributes,
1114  OUT PIO_STATUS_BLOCK IoStatusBlock,
1115  OPTIN PLARGE_INTEGER AllocationSize,
1116  IN ULONG FileAttributes,
1117  IN ULONG ShareAccess,
1118  IN ULONG CreateDisposition,
1119  IN ULONG CreateOptions,
1120  IN PVOID EaBuffer,
1121  IN ULONG EaLength
1122  )_FP_;
1123 
1124 _NTFN_EXTERN NTFUNC( NtOpenFile )(
1125  OUT PHANDLE FileHandle,
1126  IN ACCESS_MASK DesiredAccess,
1127  IN POBJECT_ATTRIBUTES ObjectAttributes,
1128  OUT PIO_STATUS_BLOCK IoStatusBlock,
1129  IN ULONG ShareAccess,
1130  IN ULONG OpenOptions
1131  )_FP_;
1132 
1133 _NTFN_EXTERN NTFUNC( NtDeleteFile )(
1134  IN POBJECT_ATTRIBUTES ObjectAttributes
1135  )_FP_;
1136 
1137 _NTFN_EXTERN NTFUNC( NtLockFile )(
1138  IN HANDLE FileHandle,
1139  OPTIN HANDLE Event,
1140  OPTIN PIO_APC_ROUTINE ApcRoutine,
1141  OPTIN PVOID ApcContext,
1142  OUT PIO_STATUS_BLOCK IoStatusBlock,
1143  IN PLARGE_INTEGER ByteOffset,
1144  IN PLARGE_INTEGER Length,
1145  IN ULONG Key,
1146  IN BOOLEAN FailImmediatedly,
1147  IN BOOLEAN ExclusiveLock
1148  )_FP_;
1149 
1150 _NTFN_EXTERN NTFUNC( NtUnlockFile )(
1151  IN HANDLE FileHandle,
1152  OUT PIO_STATUS_BLOCK IoStatusBlock,
1153  IN PLARGE_INTEGER ByteOffset,
1154  IN PLARGE_INTEGER Length,
1155  IN ULONG Key
1156  )_FP_;
1157 
1158 _NTFN_EXTERN NTFUNC( NtReadFile )(
1159  IN HANDLE FileHandle,
1160  OPTIN HANDLE Event,
1161  OPTIN PIO_APC_ROUTINE ApcRoutine,
1162  OPTIN PVOID ApcContext,
1163  OUT PIO_STATUS_BLOCK IoStatusBlock,
1164  OUT PVOID Buffer, //_Out_writes_bytes_(Length)
1165  IN ULONG Length,
1166  OPTIN PLARGE_INTEGER ByteOffset,
1167  OPTIN PULONG Key
1168  )_FP_;
1169 
1170 _NTFN_EXTERN NTFUNC( NtReadFileScatter )(
1171  IN HANDLE FileHandle,
1172  OPTIN HANDLE Event,
1173  OPTIN PIO_APC_ROUTINE UserApcRoutine,
1174  OPTIN PVOID UserApcContext,
1175  OUT PIO_STATUS_BLOCK UserIoStatusBlock,
1176  IN FILE_SEGMENT_ELEMENT BufferDescription[],
1177  IN ULONG BufferLength,
1178  IN PLARGE_INTEGER ByteOffset,
1179  OPTIN PULONG Key
1180  )_FP_;
1181 
1182 _NTFN_EXTERN NTFUNC( NtWriteFile )(
1183  IN HANDLE FileHandle,
1184  OPTIN HANDLE Event,
1185  OPTIN PIO_APC_ROUTINE ApcRoutine,
1186  OPTIN PVOID ApcContext,
1187  OUT PIO_STATUS_BLOCK IoStatusBlock,
1188  IN PVOID Buffer, //_In_reads_bytes_(Length)
1189  IN ULONG Length,
1190  OPTIN PLARGE_INTEGER ByteOffset,
1191  OPTIN PULONG Key
1192  )_FP_;
1193 
1194 _NTFN_EXTERN NTFUNC( NtWriteFileGather )(
1195  IN HANDLE FileHandle,
1196  OPTIN HANDLE Event,
1197  OPTIN PIO_APC_ROUTINE ApcRoutine,
1198  OPTIN PVOID ApcContext,
1199  OUT PIO_STATUS_BLOCK IoStatusBlock,
1200  IN FILE_SEGMENT_ELEMENT BufferDescription[],
1201  IN ULONG BufferLength,
1202  IN PLARGE_INTEGER ByteOffset,
1203  OPTIN PULONG Key
1204  )_FP_;
1205 
1206 _NTFN_EXTERN NTFUNC( NtCancelIoFile )(
1207  IN HANDLE FileHandle,
1208  OUT PIO_STATUS_BLOCK IoStatusBlock
1209  )_FP_;
1210 
1211 _NTFN_EXTERN NTFUNC( NtFlushBuffersFile )(
1212  IN HANDLE FileHandle,
1213  OUT PIO_STATUS_BLOCK IoStatusBlock
1214  )_FP_;
1215 
1216 _NTFN_EXTERN NTFUNC( NtFlushWriteBuffer )( VOID )_FP_; // NOP on x86
1217 
1218 _NTFN_EXTERN NTFUNC( NtQueryInformationFile )(
1219  IN HANDLE FileHandle,
1220  OUT PIO_STATUS_BLOCK IoStatusBlock,
1221  OUT PVOID FileInformation,
1222  IN ULONG Length,
1223  IN FILE_INFORMATION_CLASS FileInformationClass
1224  )_FP_;
1225 
1226 _NTFN_EXTERN NTFUNC( NtSetInformationFile )(
1227  IN HANDLE FileHandle,
1228  OUT PIO_STATUS_BLOCK IoStatusBlock,
1229  IN PVOID FileInformation, //_In_reads_bytes_(Length)
1230  IN ULONG Length,
1231  IN FILE_INFORMATION_CLASS FileInformationClass
1232  )_FP_;
1233 
1234 _NTFN_EXTERN NTFUNC( NtQueryEaFile )(
1235  IN HANDLE FileHandle,
1236  OUT PIO_STATUS_BLOCK IoStatusBlock,
1237  OUT PVOID Buffer,
1238  IN ULONG Length,
1239  IN BOOLEAN ReturnSingleEntry,
1240  OPTIN PVOID EaList,
1241  IN ULONG EaListLength,
1242  OPTIN PULONG EaIndex,
1243  IN BOOLEAN RestartScan
1244  )_FP_;
1245 
1246 _NTFN_EXTERN NTFUNC( NtSetEaFile )(
1247  IN HANDLE FileHandle,
1248  OUT PIO_STATUS_BLOCK IoStatusBlock,
1249  IN PVOID EaBuffer,
1250  IN ULONG EaBufferSize
1251  )_FP_;
1252 
1253 _NTFN_EXTERN NTFUNC( NtQueryAttributesFile )(
1254  IN POBJECT_ATTRIBUTES ObjectAttributes,
1255  OUT PFILE_BASIC_INFORMATION FileInformation
1256  )_FP_;
1257 
1258 _NTFN_EXTERN NTFUNC( NtQueryFullAttributesFile )(
1259  IN POBJECT_ATTRIBUTES ObjectAttributes,
1260  OUT PFILE_NETWORK_OPEN_INFORMATION FileInformation
1261  )_FP_;
1262 
1263 // Mailslot -------------------------------------------------------------------
1264 
1265 _NTFN_EXTERN NTFUNC( NtCreateMailslotFile )(
1266  OUT PHANDLE MailSlotFileHandle,
1267  IN ACCESS_MASK DesiredAccess,
1268  IN POBJECT_ATTRIBUTES ObjectAttributes,
1269  OUT PIO_STATUS_BLOCK IoStatusBlock,
1270  IN ULONG FileAttributes,
1271  IN ULONG ShareAccess,
1272  IN ULONG MaxMessageSize,
1273  IN PLARGE_INTEGER TimeOut
1274  )_FP_;
1275 
1276 // Pipe -----------------------------------------------------------------------
1277 
1278 _NTFN_EXTERN NTFUNC( NtCreateNamedPipeFile )(
1279  OUT PHANDLE NamedPipeFileHandle,
1280  IN ACCESS_MASK DesiredAccess,
1281  IN POBJECT_ATTRIBUTES ObjectAttributes,
1282  OUT PIO_STATUS_BLOCK IoStatusBlock,
1283  IN ULONG ShareAccess,
1284  IN ULONG CreateDisposition,
1285  IN ULONG CreateOptions,
1286  IN ULONG WriteModeMessage,
1287  IN ULONG ReadModeMessage,
1288  IN ULONG NonBlocking,
1289  IN ULONG MaxInstances,
1290  IN ULONG InBufferSize,
1291  IN ULONG OutBufferSize,
1292  IN PLARGE_INTEGER DefaultTimeOut
1293  )_FP_;
1294 
1295 // Directory/Volume -----------------------------------------------------------
1296 
1297 _NTFN_EXTERN NTFUNC( NtQueryDirectoryFile )(
1298  IN HANDLE DirectoryFileHandle,
1299  OPTIN HANDLE Event,
1300  OPTIN PIO_APC_ROUTINE ApcRoutine,
1301  OPTIN PVOID ApcContext,
1302  OUT PIO_STATUS_BLOCK IoStatusBlock,
1303  OUT PVOID FileInformation,
1304  IN ULONG Length,
1305  IN FILE_INFORMATION_CLASS FileInformationClass,
1306  IN BOOLEAN ReturnSingleEntry,
1307  OPTIN PUNICODE_STRING FileNamePattern,
1308  IN BOOLEAN RestartScan
1309  )_FP_;
1310 
1311 _NTFN_EXTERN NTFUNC( NtNotifyChangeDirectoryFile )(
1312  IN HANDLE DirectoryFileHandle,
1313  OPTIN HANDLE Event,
1314  OPTIN PIO_APC_ROUTINE ApcRoutine,
1315  OPTIN PVOID ApcContext,
1316  OUT PIO_STATUS_BLOCK IoStatusBlock,
1317  OUT PVOID Buffer,
1318  IN ULONG BufferSize,
1319  IN ULONG CompletionFilter,
1320  IN BOOLEAN WatchTree
1321  )_FP_;
1322 
1323 _NTFN_EXTERN NTFUNC( NtQueryVolumeInformationFile )(
1324  IN HANDLE FileHandle, // File, Directory, Storage device, or Volume.
1325  OUT PIO_STATUS_BLOCK IoStatusBlock,
1326  OUT PVOID FsInformation,
1327  IN ULONG Length,
1328  IN FS_INFORMATION_CLASS FsInformationClass
1329  )_FP_;
1330 
1331 _NTFN_EXTERN NTFUNC( NtSetVolumeInformationFile )(
1332  IN HANDLE FileHandle, // File, Directory, Storage device, or Volume.
1333  OUT PIO_STATUS_BLOCK IoStatusBlock,
1334  IN PVOID FsInformation,
1335  IN ULONG Length,
1336  IN FS_INFORMATION_CLASS FsInformationClass
1337  )_FP_;
1338 
1339 _NTFN_EXTERN NTFUNC( NtQueryQuotaInformationFile )(
1340  IN HANDLE VolumeFileHandle,
1341  OUT PIO_STATUS_BLOCK IoStatusBlock,
1342  OUT PVOID Buffer,
1343  IN ULONG Length,
1344  IN BOOLEAN ReturnSingleEntry,
1345  IN PVOID SidList,
1346  IN ULONG SidListLength,
1347  IN PSID StartSid,
1348  IN BOOLEAN RestartScan
1349  )_FP_;
1350 
1351 _NTFN_EXTERN NTFUNC( NtSetQuotaInformationFile )(
1352  HANDLE VolumeFileHandle,
1353  PIO_STATUS_BLOCK IoStatusBlock,
1354  PVOID Buffer,
1355  ULONG BufferLength
1356  )_FP_;
1357 
1358 // I/O Completion -------------------------------------------------------------
1359 
1360 _NTFN_EXTERN NTFUNC( NtCreateIoCompletion )(
1361  OUT PHANDLE IoCompletionHandle,
1362  IN ACCESS_MASK DesiredAccess,
1363  OPTIN POBJECT_ATTRIBUTES ObjectAttributes,
1364  IN ULONG NumberOfConcurrentThreads
1365  )_FP_;
1366 
1367 _NTFN_EXTERN NTFUNC( NtOpenIoCompletion )(
1368  OUT PHANDLE CompetionPort,
1369  IN ACCESS_MASK DesiredAccess,
1370  IN POBJECT_ATTRIBUTES ObjectAttributes
1371  )_FP_;
1372 
1373 _NTFN_EXTERN NTFUNC( NtQueryIoCompletion )(
1374  IN HANDLE IoCompletionHandle,
1375  IN IO_COMPLETION_INFORMATION_CLASS IoCompletionInformationClass,
1376  OUT PVOID IoCompletionInformation,
1377  IN ULONG IoCompletionInformationLength,
1378  OUT OPTIONAL PULONG ResultLength
1379  )_FP_;
1380 
1381 _NTFN_EXTERN NTFUNC( NtSetIoCompletion )(
1382  IN HANDLE IoCompletionPortHandle,
1383  IN PVOID CompletionKey,
1384  IN PVOID CompletionContext,
1385  IN NTSTATUS CompletionStatus,
1386  IN ULONG CompletionInformation
1387  )_FP_;
1388 
1389 _NTFN_EXTERN NTFUNC( NtRemoveIoCompletion )(
1390  IN HANDLE IoCompletionHandle,
1391  OUT PVOID* CompletionKey,
1392  OUT PVOID* CompletionContext,
1393  OUT PIO_STATUS_BLOCK IoStatusBlock,
1394  OPTIN PLARGE_INTEGER Timeout
1395  )_FP_;
1396 
1397 // I/O Control ----------------------------------------------------------------
1398 
1399 _NTFN_EXTERN NTFUNC( NtDeviceIoControlFile )(
1400  IN HANDLE FileHandle,
1401  OPTIN HANDLE Event,
1402  OPTIN PIO_APC_ROUTINE ApcRoutine,
1403  OPTIN PVOID ApcContext,
1404  OUT PIO_STATUS_BLOCK IoStatusBlock,
1405  IN ULONG IoControlCode,
1406  IN PVOID InputBuffer,
1407  IN ULONG InputBufferLength,
1408  IN PVOID OutputBuffer,
1409  IN ULONG OutputBufferLength
1410  )_FP_;
1411 
1412 _NTFN_EXTERN NTFUNC( NtFsControlFile )(
1413  IN HANDLE FileHandle,
1414  OPTIN HANDLE Event,
1415  OPTIN PIO_APC_ROUTINE ApcRoutine,
1416  OPTIN PVOID ApcContext,
1417  OUT PIO_STATUS_BLOCK IoStatusBlock,
1418  IN ULONG FsControlCode,
1419  IN PVOID InputBuffer,
1420  IN ULONG InputBufferLength,
1421  IN PVOID OutputBuffer,
1422  IN ULONG OutputBufferLength
1423  )_FP_;
1424 
1425 // Driver ---------------------------------------------------------------------
1426 
1427 _NTFN_EXTERN NTFUNC( NtLoadDriver )(
1428  IN PUNICODE_STRING DriverServiceName
1429  )_FP_;
1430 
1431 _NTFN_EXTERN NTFUNC( NtUnloadDriver )(
1432  IN PUNICODE_STRING DriverServiceName
1433  )_FP_;
1434 
1435 // DriverEntry (assumed to be UEFI) -------------------------------------------
1436 // Note: These APIs return STATUS_NOT_IMPLEMENTED on a non-EFI machine.
1437 // However, I have no UEFI machine to verify this assumption.
1438 
1439 _NTFN_EXTERN NTFUNC( NtAddDriverEntry )(
1440  IN PEFI_DRIVER_ENTRY BootEntry,
1441  IN ULONG Id
1442  )_FP_;
1443 
1444 _NTFN_EXTERN NTFUNC( NtDeleteDriverEntry )(
1445  IN ULONG Id
1446  )_FP_;
1447 
1448 _NTFN_EXTERN NTFUNC( NtModifyDriverEntry )(
1449  IN PEFI_DRIVER_ENTRY DriverEntry
1450  )_FP_;
1451 
1452 _NTFN_EXTERN NTFUNC( NtEnumerateDriverEntries )(
1453  IN PVOID Buffer,
1454  IN PULONG BufferLength
1455  )_FP_;
1456 
1457 _NTFN_EXTERN NTFUNC( NtQueryDriverEntryOrder )(
1458  IN PULONG Ids,
1459  IN PULONG Count
1460  )_FP_;
1461 
1462 _NTFN_EXTERN NTFUNC( NtSetDriverEntryOrder )(
1463  IN PULONG Ids,
1464  IN PULONG Count
1465  )_FP_;
1466 
1467 // Boot (assumed to be EFI) ---------------------------------------------------
1468 
1469 _NTFN_EXTERN NTFUNC( NtQueryBootOptions )(
1470  IN PBOOT_OPTIONS BootOptions,
1471  IN PULONG BootOptionsLength
1472  )_FP_;
1473 
1474 _NTFN_EXTERN NTFUNC( NtSetBootOptions )(
1475  IN PBOOT_OPTIONS BootOptions,
1476  IN ULONG FieldsToChange
1477  )_FP_;
1478 
1479 _NTFN_EXTERN NTFUNC( NtAddBootEntry )(
1480  IN PBOOT_ENTRY BootEntry,
1481  IN ULONG Id
1482  )_FP_;
1483 
1484 _NTFN_EXTERN NTFUNC( NtDeleteBootEntry )(
1485  IN ULONG Id
1486  )_FP_;
1487 
1488 _NTFN_EXTERN NTFUNC( NtModifyBootEntry )(
1489  IN PBOOT_ENTRY BootEntry
1490  )_FP_;
1491 
1492 _NTFN_EXTERN NTFUNC( NtEnumerateBootEntries )(
1493  IN PVOID Buffer,
1494  IN PULONG BufferLength
1495  )_FP_;
1496 
1497 _NTFN_EXTERN NTFUNC( NtQueryBootEntryOrder )(
1498  IN PULONG Ids,
1499  IN PULONG Count
1500  )_FP_;
1501 
1502 _NTFN_EXTERN NTFUNC( NtSetBootEntryOrder )(
1503  IN PULONG Ids,
1504  IN PULONG Count
1505  )_FP_;
1506 
1507 // Misc (assumed to be EFI) ---------------------------------------------------
1508 
1509 _NTFN_EXTERN NTFUNC( NtTranslateFilePath )(
1510  IN PFILE_PATH InputFilePath,
1511  IN ULONG OutputType,
1512  OUT PFILE_PATH OutputFilePath,
1513  INOUT PULONG OutputFilePathLength
1514  )_FP_;
1515 
1517 //=============================================================================
1520 //=============================================================================
1522 
1523 // Resource Functions
1524 
1525 _NTFN_EXTERN NTFUNC( LdrFindResource_U )(
1526  IN PVOID BaseAddress,
1527  IN PLDR_RESOURCE_INFO ResourceInfo,
1528  IN ULONG Level,
1529  OUT PIMAGE_RESOURCE_DATA_ENTRY *ResourceDataEntry
1530  )_FP_;
1531 
1532 _NTFN_EXTERN NTFUNC( LdrFindResourceDirectory_U )(
1533  IN PVOID BaseAddress,
1534  IN PLDR_RESOURCE_INFO ResourceInfo,
1535  IN ULONG Level,
1536  OUT PIMAGE_RESOURCE_DIRECTORY *ResourceDirectory
1537  )_FP_;
1538 
1539 _NTFN_EXTERN NTFUNC( LdrEnumResources )(
1540  IN PVOID BaseAddress,
1541  IN PLDR_RESOURCE_INFO ResourceInfo,
1542  IN ULONG Level,
1543  INOUT ULONG* ResourceCount,
1544  OUT LDR_ENUM_RESOURCE_INFO* Resources
1545  )_FP_;
1546 
1547 _NTFN_EXTERN NTFUNC( LdrAccessResource )(
1548  IN PVOID BaseAddress,
1549  IN PIMAGE_RESOURCE_DATA_ENTRY ResourceDataEntry,
1550  OPTOUT PVOID *Resource,
1551  OPTOUT PULONG Size
1552  )_FP_;
1553 
1554 _NTFN_EXTERN NTFUNC( LdrLoadAlternateResourceModule )(
1555  IN PVOID Module,
1556  IN PWSTR Buffer
1557  )_FP_;
1558 
1559 _NTFN_EXTERN NTFUNCT( BOOLEAN, LdrUnloadAlternateResourceModule )(
1560  IN PVOID BaseAddress
1561  )_FP_;
1562 
1563 // Misc. Functions ------------------------------------------------------------
1564 
1565 _NTFN_EXTERN NTFUNC( LdrEnumerateLoadedModules )(
1566  IN BOOLEAN ReservedFlag,
1567  IN PLDR_ENUM_CALLBACK EnumProc,
1568  IN PVOID Context
1569  )_FP_;
1570 
1571 _NTFN_EXTERN NTFUNC( LdrGetProcedureAddress )(
1572  IN PVOID BaseAddress,
1573  IN PANSI_STRING Name,
1574  IN ULONG Ordinal,
1575  OUT PVOID* ProcedureAddress
1576  )_FP_;
1577 
1578 _NTFN_EXTERN NTFUNC( LdrLockLoaderLock )(
1579  IN ULONG Flags,
1580  OPTOUT PULONG Disposition,
1581  OPTOUT PULONG Cookie
1582  )_FP_;
1583 
1584 _NTFN_EXTERN NTFUNC( LdrUnlockLoaderLock )(
1585  IN ULONG Flags,
1586  OPTIN ULONG Cookie
1587  )_FP_;
1588 
1589 _NTFN_EXTERN NTFUNCT( BOOLEAN, LdrVerifyMappedImageMatchesChecksum )(
1590  IN PVOID BaseAddress,
1591  IN SIZE_T NumberOfBytes,
1592  IN ULONG FileLength
1593  )_FP_;
1594 
1595 _NTFN_EXTERN NTFUNCT( ULONG, LdrRelocateImage )(
1596  IN PVOID NewBase,
1597  IN PCCH LoaderName,
1598  IN ULONG Success,
1599  IN ULONG Conflict,
1600  IN ULONG Invalid
1601  )_FP_;
1602 
1603 _NTFN_EXTERN NTFUNCT( PIMAGE_BASE_RELOCATION, LdrProcessRelocationBlockLongLong )(
1604  IN ULONG_PTR Address,
1605  IN ULONG Count,
1606  IN PUSHORT TypeOffset,
1607  IN LONGLONG Delta
1608  )_FP_;
1609 
1610 // <- User-Mode NT Library Functions ------------------------------------------
1611 
1612 _NTFN_EXTERN NTFUNC( LdrDisableThreadCalloutsForDll )(
1613  IN PVOID BaseAddress
1614  )_FP_;
1615 
1616 _NTFN_EXTERN NTFUNC( LdrLoadDll )(
1617  OPTIN PWSTR SearchPath,
1618  OPTIN PULONG LoadFlags,
1619  IN PUNICODE_STRING Name,
1620  OPTOUT PVOID* BaseAddress
1621  )_FP_;
1622 
1623 _NTFN_EXTERN NTFUNC( LdrUnloadDll )( IN PVOID BaseAddress )_FP_;
1624 
1625 _NTFN_EXTERN NTFUNC( LdrAddRefDll )(
1626  IN ULONG Flags,
1627  IN PVOID BaseAddress
1628  )_FP_;
1629 
1630 _NTFN_EXTERN NTFUNC( LdrGetDllHandle )(
1631  OPTIN PWSTR DllPath,
1632  IN PULONG DllCharacteristics,
1633  IN PUNICODE_STRING DllName,
1634  OUT HANDLE* DllHandle
1635  )_FP_;
1636 
1637 _NTFN_EXTERN NTFUNC( LdrGetDllHandleEx )(
1638  IN ULONG Flags,
1639  OPTIN PWSTR DllPath,
1640  OPTIN PULONG DllCharacteristics,
1641  IN PUNICODE_STRING DllName,
1642  OPTOUT HANDLE* DllHandle
1643  )_FP_;
1644 
1645 _NTFN_EXTERN NTFUNC( LdrFindEntryForAddress )(
1646  IN PVOID Address,
1647  OUT PLDR_DATA_TABLE_ENTRY* Module
1648  )_FP_;
1649 
1650 _NTFN_EXTERN NTFUNC( LdrQueryImageFileExecutionOptions )(
1651  IN PUNICODE_STRING SubKey,
1652  IN PCWSTR ValueName,
1653  IN ULONG ValueSize,
1654  OUT PVOID Buffer,
1655  IN ULONG BufferSize,
1656  OPTOUT PULONG RetunedLength
1657  )_FP_;
1658 
1659 _NTFN_EXTERN NTFUNC( LdrQueryProcessModuleInformation )(
1660  OPTIN PRTL_PROCESS_MODULES ModuleInformation,
1661  OPTIN ULONG Size,
1662  OUT PULONG ReturnedSize
1663  )_FP_;
1664 
1665 _NTFN_EXTERN NTFUNC( LdrQueryImageFileKeyOption )(
1666  IN HANDLE KeyHandle,
1667  IN PCWSTR ValueName,
1668  IN ULONG Type,
1669  OUT PVOID Buffer,
1670  IN ULONG BufferSize,
1671  OPTOUT PULONG ReturnedLength
1672  )_FP_;
1673 
1674 _NTFN_EXTERN NTFUNC( LdrOpenImageFileOptionsKey )(
1675  IN PUNICODE_STRING SubKey,
1676  IN BOOLEAN Wow64,
1677  OUT PHANDLE NewKeyHandle
1678  )_FP_;
1679 
1680 _NTFN_EXTERN NTFUNCT( VOID, LdrSetDllManifestProber )(
1681  IN PLDR_MANIFEST_PROBER_ROUTINE Routine
1682  )_FP_;
1683 
1684 _NTFN_EXTERN NTFUNC( LdrShutdownProcess )( VOID )_FP_;
1685 _NTFN_EXTERN NTFUNC( LdrShutdownThread )( VOID )_FP_;
1686 
1687 typedef VOID (NTAPI *PLDR_CALLBACK)( PVOID CallbackContext, PCHAR Name );
1688 
1689 _NTFN_EXTERN NTFUNC( LdrVerifyImageMatchesChecksum )(
1690  IN HANDLE FileHandle,
1691  IN PLDR_CALLBACK Callback,
1692  IN PVOID CallbackContext,
1693  OUT PUSHORT ImageCharacterstics
1694  )_FP_;
1695 
1696 _NTFN_EXTERN NTFUNCT( PIMAGE_BASE_RELOCATION, LdrProcessRelocationBlock )(
1697  IN ULONG_PTR Address,
1698  IN ULONG Count,
1699  IN PUSHORT TypeOffset,
1700  IN LONG_PTR Delta
1701  )_FP_;
1702 
1703 _NTFN_EXTERN NTFUNCT( VOID, LdrInitializeThunk )(
1704  ULONG Unknown1, ULONG Unknown2,
1705  ULONG Unknown3, ULONG Unknown4
1706  )_FP_;
1707 
1709 //=============================================================================
1712 //=============================================================================
1714 
1715 // PhysicalPages
1716 
1717 _NTFN_EXTERN NTFUNC( NtAllocateUserPhysicalPages )(
1718  IN HANDLE ProcessHandle,
1719  INOUT PULONG_PTR NumberOfPages,
1720  INOUT PULONG_PTR UserPfnArray
1721  )_FP_;
1722 
1723 _NTFN_EXTERN NTFUNC( NtFreeUserPhysicalPages )(
1724  IN HANDLE ProcessHandle,
1725  INOUT PULONG_PTR NumberOfPages,
1726  INOUT PULONG_PTR UserPfnArray
1727  )_FP_;
1728 
1729 _NTFN_EXTERN NTFUNC( NtMapUserPhysicalPages )(
1730  IN PVOID VirtualAddresses,
1731  IN ULONG_PTR NumberOfPages,
1732  INOUT PULONG_PTR UserPfnArray
1733  )_FP_;
1734 
1735 _NTFN_EXTERN NTFUNC( NtMapUserPhysicalPagesScatter )(
1736  IN PVOID* VirtualAddresses,
1737  IN ULONG_PTR NumberOfPages,
1738  INOUT PULONG_PTR UserPfnArray
1739  )_FP_;
1740 
1741 // VirtualMemory --------------------------------------------------------------
1742 
1743 _NTFN_EXTERN NTFUNC( NtAllocateVirtualMemory )(
1744  IN HANDLE ProcessHandle,
1745  INOUT PVOID *BaseAddress,
1746  IN ULONG_PTR ZeroBits,
1747  INOUT PSIZE_T RegionSize,
1748  IN ULONG AllocationType,
1749  IN ULONG Protect
1750  )_FP_;
1751 
1752 _NTFN_EXTERN NTFUNC( NtFreeVirtualMemory )(
1753  IN HANDLE ProcessHandle,
1754  INOUT PVOID* BaseAddress,
1755  INOUT PSIZE_T RegionSize,
1756  IN ULONG FreeType
1757  )_FP_;
1758 
1759 _NTFN_EXTERN NTFUNC( NtQueryVirtualMemory )(
1760  IN HANDLE ProcessHandle,
1761  IN PVOID Address,
1762  IN MEMORY_INFORMATION_CLASS VirtualMemoryInformationClass,
1763  OUT PVOID VirtualMemoryInformation,
1764  IN SIZE_T Length,
1765  OPTOUT PSIZE_T ResultLength
1766  )_FP_;
1767 
1768 _NTFN_EXTERN NTFUNC( NtReadVirtualMemory )(
1769  IN HANDLE ProcessHandle,
1770  IN PVOID BaseAddress,
1771  OUT PVOID Buffer,
1772  IN SIZE_T NumberOfBytesToRead,
1773  OPTOUT PSIZE_T NumberOfBytesRead
1774  )_FP_;
1775 
1776 _NTFN_EXTERN NTFUNC( NtWriteVirtualMemory )(
1777  IN HANDLE ProcessHandle,
1778  IN PVOID BaseAddress,
1779  IN PVOID Buffer,
1780  IN SIZE_T NumberOfBytesToWrite,
1781  OPTOUT PSIZE_T NumberOfBytesWritten
1782  )_FP_;
1783 
1785 
1786 _NTFN_EXTERN NTFUNC( NtLockVirtualMemory )(
1787  IN HANDLE ProcessHandle,
1788  INOUT PVOID *BaseAddress,
1789  INOUT PSIZE_T NumberOfBytesToLock,
1790  IN ULONG LockType
1791  )_FP_;
1792 
1793 _NTFN_EXTERN NTFUNC( NtUnlockVirtualMemory )(
1794  IN HANDLE ProcessHandle,
1795  INOUT PVOID *BaseAddress,
1796  INOUT PSIZE_T NumberOfBytesToUnlock,
1797  IN ULONG LockType
1798  )_FP_;
1799 
1800 _NTFN_EXTERN NTFUNC( NtFlushVirtualMemory )(
1801  IN HANDLE ProcessHandle,
1802  INOUT PVOID *BaseAddress,
1803  INOUT PSIZE_T RegionSize,
1804  OUT PIO_STATUS_BLOCK IoStatus
1805  )_FP_;
1806 
1807 _NTFN_EXTERN NTFUNC( NtProtectVirtualMemory )(
1808  IN HANDLE ProcessHandle,
1809  INOUT PVOID *BaseAddress,
1810  INOUT SIZE_T *NumberOfBytesToProtect,
1811  IN ULONG NewAccessProtection,
1812  OUT PULONG OldAccessProtection
1813  )_FP_;
1814 
1815 // Section --------------------------------------------------------------------
1816 
1817 _NTFN_EXTERN NTFUNC( NtCreateSection )(
1818  OUT PHANDLE SectionHandle,
1819  IN ACCESS_MASK DesiredAccess,
1820  OPTIN POBJECT_ATTRIBUTES ObjectAttributes,
1821  OPTIN PLARGE_INTEGER MaximumSize,
1822  IN ULONG SectionPageProtection,
1823  IN ULONG AllocationAttributes,
1824  OPTIN HANDLE FileHandle
1825  )_FP_;
1826 
1827 _NTFN_EXTERN NTFUNC( NtOpenSection )(
1828  OUT PHANDLE SectionHandle,
1829  IN ACCESS_MASK DesiredAccess,
1830  IN POBJECT_ATTRIBUTES ObjectAttributes
1831  )_FP_;
1832 
1833 _NTFN_EXTERN NTFUNC( NtQuerySection )(
1834  IN HANDLE SectionHandle,
1835  IN SECTION_INFORMATION_CLASS SectionInformationClass,
1836  OUT PVOID SectionInformation,
1837  IN SIZE_T Length,
1838  OUT PSIZE_T ResultLength
1839  )_FP_;
1840 
1841 _NTFN_EXTERN NTFUNC( NtExtendSection )(
1842  IN HANDLE SectionHandle,
1843  IN PLARGE_INTEGER NewMaximumSize
1844  )_FP_;
1845 
1846 _NTFN_EXTERN NTFUNC( NtMapViewOfSection )(
1847  IN HANDLE SectionHandle,
1848  IN HANDLE ProcessHandle,
1849  INOUT PVOID *BaseAddress,
1850  IN ULONG_PTR ZeroBits,
1851  IN SIZE_T CommitSize,
1852  INOUT PLARGE_INTEGER SectionOffset OPTIONAL,
1853  INOUT PSIZE_T ViewSize,
1854  IN SECTION_INHERIT InheritDisposition,
1855  IN ULONG AllocationType,
1856  IN ULONG AccessProtection
1857  )_FP_;
1858 
1859 _NTFN_EXTERN NTFUNC( NtUnmapViewOfSection )(
1860  IN HANDLE ProcessHandle,
1861  IN PVOID BaseAddress
1862  )_FP_;
1863 
1864 // WriteWatch -----------------------------------------------------------------
1865 
1866 _NTFN_EXTERN NTFUNC( NtGetWriteWatch )(
1867  IN HANDLE ProcessHandle,
1868  IN ULONG Flags,
1869  IN PVOID BaseAddress,
1870  IN SIZE_T RegionSize,
1871  IN PVOID *UserAddressArray,
1872  OUT PULONG_PTR EntriesInUserAddressArray,
1873  OUT PULONG Granularity
1874  )_FP_;
1875 
1876 _NTFN_EXTERN NTFUNC( NtResetWriteWatch )(
1877  IN HANDLE ProcessHandle,
1878  IN PVOID BaseAddress,
1879  IN SIZE_T RegionSize
1880  )_FP_;
1881 
1882 // Misc
1883 
1884 _NTFN_EXTERN NTFUNC( NtCreatePagingFile )(
1885  IN PUNICODE_STRING FileName,
1886  IN PLARGE_INTEGER InitialSize,
1887  IN PLARGE_INTEGER MaxiumSize,
1888  IN ULONG Reserved
1889  )_FP_;
1890 
1891 _NTFN_EXTERN NTFUNC( NtAreMappedFilesTheSame )(
1892  IN PVOID File1MappedAsAnImage,
1893  IN PVOID File2MappedAsFile
1894  )_FP_;
1895 
1896 _NTFN_EXTERN NTFUNC( NtFlushInstructionCache )(
1897  IN HANDLE ProcessHandle,
1898  IN PVOID BaseAddress,
1899  IN SIZE_T NumberOfBytesToFlush
1900  )_FP_;
1901 
1903 //=============================================================================
1906 //=============================================================================
1908 
1909 // Token
1910 
1911 _NTFN_EXTERN NTFUNC( NtOpenProcessToken )(
1912  IN HANDLE ProcessHandle,
1913  IN ACCESS_MASK DesiredAccess,
1914  OUT PHANDLE TokenHandle
1915  )_FP_;
1916 
1917 _NTFN_EXTERN NTFUNC( NtOpenProcessTokenEx )(
1918  IN HANDLE ProcessHandle,
1919  IN ACCESS_MASK DesiredAccess,
1920  IN ULONG HandleAttributes,
1921  OUT PHANDLE TokenHandle
1922  )_FP_;
1923 
1924 _NTFN_EXTERN NTFUNC( NtOpenThreadToken )(
1925  IN HANDLE ThreadHandle,
1926  IN ACCESS_MASK DesiredAccess,
1927  IN BOOLEAN OpenAsSelf,
1928  OUT PHANDLE TokenHandle
1929  )_FP_;
1930 
1931 _NTFN_EXTERN NTFUNC( NtOpenThreadTokenEx )(
1932  IN HANDLE ThreadHandle,
1933  IN ACCESS_MASK DesiredAccess,
1934  IN BOOLEAN OpenAsSelf,
1935  IN ULONG HandleAttributes,
1936  OUT PHANDLE TokenHandle
1937  )_FP_;
1938 
1939 _NTFN_EXTERN NTFUNC( NtCreateToken )(
1940  OUT PHANDLE TokenHandle,
1941  IN ACCESS_MASK DesiredAccess,
1942  IN POBJECT_ATTRIBUTES ObjectAttributes,
1943  IN TOKEN_TYPE TokenType,
1944  IN PLUID AuthenticationId,
1945  IN PLARGE_INTEGER ExpirationTime,
1946  IN PTOKEN_USER TokenUser,
1947  IN PTOKEN_GROUPS TokenGroups,
1948  IN PTOKEN_PRIVILEGES TokenPrivileges,
1949  IN PTOKEN_OWNER TokenOwner,
1950  IN PTOKEN_PRIMARY_GROUP TokenPrimaryGroup,
1951  IN PTOKEN_DEFAULT_DACL TokenDefaultDacl,
1952  IN PTOKEN_SOURCE TokenSource
1953  )_FP_;
1954 
1955 _NTFN_EXTERN NTFUNC( NtDuplicateToken )(
1956  IN HANDLE ExistingTokenHandle,
1957  IN ACCESS_MASK DesiredAccess,
1958  OPTIN POBJECT_ATTRIBUTES ObjectAttributes,
1959  IN BOOLEAN EffectiveOnly,
1960  IN TOKEN_TYPE TokenType,
1961  OUT PHANDLE NewTokenHandle
1962  )_FP_;
1963 
1964 _NTFN_EXTERN NTFUNC( NtCompareTokens )(
1965  IN HANDLE FirstTokenHandle,
1966  IN HANDLE SecondTokenHandle,
1967  OUT PBOOLEAN Equal
1968  )_FP_;
1969 
1970 _NTFN_EXTERN NTFUNC( NtPrivilegeCheck )(
1971  IN HANDLE ClientToken,
1972  INOUT PPRIVILEGE_SET RequiredPrivileges,
1973  OUT PBOOLEAN Result
1974  )_FP_;
1975 
1976 _NTFN_EXTERN NTFUNC( NtAdjustPrivilegesToken )(
1977  IN HANDLE TokenHandle,
1978  IN BOOLEAN DisableAllPrivileges,
1979  OPTIN PTOKEN_PRIVILEGES NewState,
1980  IN ULONG BufferLength,
1981  OPTOUT PTOKEN_PRIVILEGES PreviousState,
1982  OPTOUT PULONG ReturnLength
1983  )_FP_;
1984 
1985 _NTFN_EXTERN NTFUNC( NtAdjustGroupsToken )(
1986  IN HANDLE TokenHandle,
1987  IN BOOLEAN ResetToDefault,
1988  OPTIN PTOKEN_GROUPS NewState,
1989  OPTIN ULONG BufferLength,
1990  OPTOUT PTOKEN_GROUPS PreviousState,
1991  OUT PULONG ReturnLength
1992  )_FP_;
1993 
1994 _NTFN_EXTERN NTFUNC( NtQueryInformationToken )(
1995  IN HANDLE TokenHandle,
1996  IN TOKEN_INFORMATION_CLASS TokenInformationClass,
1997  OPTOUT PVOID TokenInformation,
1998  IN ULONG TokenInformationLength,
1999  OUT PULONG ReturnLength
2000  )_FP_;
2001 
2002 _NTFN_EXTERN NTFUNC( NtSetInformationToken )(
2003  IN HANDLE TokenHandle,
2004  IN TOKEN_INFORMATION_CLASS TokenInformationClass,
2005  IN PVOID TokenInformation,
2006  IN ULONG TokenInformationLength
2007  )_FP_;
2008 
2009 _NTFN_EXTERN NTFUNC( NtImpersonateAnonymousToken )(
2010  IN HANDLE Thread
2011  )_FP_;
2012 
2013 // LUID / UUID ----------------------------------------------------------------
2014 
2015 _NTFN_EXTERN NTFUNC( NtAllocateLocallyUniqueId )(
2016  OUT LUID *LocallyUniqueId
2017  )_FP_;
2018 
2019 _NTFN_EXTERN NTFUNC( NtAllocateUuids )(
2020  OUT PULARGE_INTEGER Time,
2021  OUT PULONG Range,
2022  OUT PULONG Sequence,
2023  OUT PUCHAR Seed
2024  )_FP_;
2025 
2026 // AccessCheck ----------------------------------------------------------------
2027 
2028 _NTFN_EXTERN NTFUNC( NtAccessCheck )(
2029  IN PSECURITY_DESCRIPTOR SecurityDescriptor,
2030  IN HANDLE ClientToken,
2031  IN ACCESS_MASK DesiredAccess,
2032  IN PGENERIC_MAPPING GenericMapping,
2033  OUT PPRIVILEGE_SET PrivilegeSet,
2034  OUT PULONG ReturnLength,
2035  OUT PACCESS_MASK GrantedAccess,
2036  OUT PNTSTATUS AccessStatus
2037  )_FP_;
2038 
2039 _NTFN_EXTERN NTFUNC( NtAccessCheckByType )(
2040  IN PSECURITY_DESCRIPTOR SecurityDescriptor,
2041  IN PSID PrincipalSelfSid,
2042  IN HANDLE ClientToken,
2043  IN ACCESS_MASK DesiredAccess,
2044  IN POBJECT_TYPE_LIST ObjectTypeList,
2045  IN ULONG ObjectTypeLength,
2046  IN PGENERIC_MAPPING GenericMapping,
2047  IN PPRIVILEGE_SET PrivilegeSet,
2048  INOUT PULONG PrivilegeSetLength,
2049  OUT PACCESS_MASK GrantedAccess,
2050  OUT PNTSTATUS AccessStatus
2051  )_FP_;
2052 
2053 _NTFN_EXTERN NTFUNC( NtAccessCheckByTypeResultList )(
2054  IN PSECURITY_DESCRIPTOR SecurityDescriptor,
2055  IN PSID PrincipalSelfSid,
2056  IN HANDLE ClientToken,
2057  IN ACCESS_MASK DesiredAccess,
2058  IN POBJECT_TYPE_LIST ObjectTypeList,
2059  IN ULONG ObjectTypeLength,
2060  IN PGENERIC_MAPPING GenericMapping,
2061  IN PPRIVILEGE_SET PrivilegeSet,
2062  INOUT PULONG PrivilegeSetLength,
2063  OUT PACCESS_MASK GrantedAccess,
2064  OUT PNTSTATUS AccessStatus
2065  )_FP_;
2066 
2067 _NTFN_EXTERN NTFUNC( NtAccessCheckAndAuditAlarm )(
2068  IN PUNICODE_STRING SubsystemName,
2069  OPTIN PVOID HandleId,
2070  IN PUNICODE_STRING ObjectTypeName,
2071  IN PUNICODE_STRING ObjectName,
2072  IN PSECURITY_DESCRIPTOR SecurityDescriptor,
2073  IN ACCESS_MASK DesiredAccess,
2074  IN PGENERIC_MAPPING GenericMapping,
2075  IN BOOLEAN ObjectCreation,
2076  OUT PACCESS_MASK GrantedAccess,
2077  OUT PNTSTATUS AccessStatus,
2078  OUT PBOOLEAN GenerateOnClose
2079  )_FP_;
2080 
2081 // AuditAlarm -----------------------------------------------------------------
2082 
2083 _NTFN_EXTERN NTFUNC( NtOpenObjectAuditAlarm )(
2084  IN PUNICODE_STRING SubsystemName,
2085  OPTIN PVOID HandleId,
2086  IN PUNICODE_STRING ObjectTypeName,
2087  IN PUNICODE_STRING ObjectName,
2088  OPTIN PSECURITY_DESCRIPTOR SecurityDescriptor,
2089  IN HANDLE ClientToken,
2090  IN ACCESS_MASK DesiredAccess,
2091  IN ACCESS_MASK GrantedAccess,
2092  OPTIN PPRIVILEGE_SET Privileges,
2093  IN BOOLEAN ObjectCreation,
2094  IN BOOLEAN AccessGranted,
2095  OUT PBOOLEAN GenerateOnClose
2096  )_FP_;
2097 
2098 _NTFN_EXTERN NTFUNC( NtPrivilegedServiceAuditAlarm )(
2099  IN PUNICODE_STRING SubsystemName,
2100  IN PUNICODE_STRING ServiceName,
2101  IN HANDLE ClientToken,
2102  IN PPRIVILEGE_SET Privileges,
2103  IN BOOLEAN AccessGranted
2104  )_FP_;
2105 
2106 _NTFN_EXTERN NTFUNC( NtPrivilegeObjectAuditAlarm )(
2107  IN PUNICODE_STRING SubsystemName,
2108  OPTIN PVOID HandleId,
2109  IN HANDLE ClientToken,
2110  IN ACCESS_MASK DesiredAccess,
2111  IN PPRIVILEGE_SET Privileges,
2112  IN BOOLEAN AccessGranted
2113  )_FP_;
2114 
2116 //=============================================================================
2121 //=============================================================================
2123 
2124 #ifndef NtCurrentPeb
2125  #define NtCurrentPeb() (NtCurrentTeb()->ProcessEnvironmentBlock)
2126  #define RtlGetProcessHeap() (NtCurrentPeb()->ProcessHeap)
2127 #endif
2128 
2129 // Exception and Error Functions ----------------------------------------------
2130 
2131 _NTFN_EXTERN NTFUNCT( PVOID, RtlAddVectoredExceptionHandler )(
2132  IN ULONG FirstHandler,
2133  IN PVECTORED_EXCEPTION_HANDLER VectoredHandler
2134  )_FP_;
2135 
2136 _NTFN_EXTERN NTFUNCT( VOID, RtlAssert )(
2137  IN PVOID FailedAssertion,
2138  IN PVOID FileName,
2139  IN ULONG LineNumber,
2140  OPTIN PCHAR Message //_In_opt_z_
2141  )_FP_;
2142 
2143 _NTFN_EXTERN NTFUNCT( VOID, RtlSetUnhandledExceptionFilter )(
2144  IN PRTLP_UNHANDLED_EXCEPTION_FILTER TopLevelExceptionFilter
2145  )_FP_;
2146 
2147 _NTFN_EXTERN NTFUNCT( LONG, RtlUnhandledExceptionFilter )(
2148  IN struct _EXCEPTION_POINTERS* ExceptionInfo
2149  )_FP_;
2150 
2151 _NTFN_EXTERN NTFUNCT( PVOID, RtlEncodePointer )(
2152  IN PVOID Pointer
2153  )_FP_;
2154 
2155 _NTFN_EXTERN NTFUNCT( PVOID, RtlDecodePointer )(
2156  IN PVOID Pointer
2157  )_FP_;
2158 
2159 _NTFN_EXTERN NTFUNCT( PVOID, RtlEncodeSystemPointer )(
2160  IN PVOID Pointer
2161  )_FP_;
2162 
2163 _NTFN_EXTERN NTFUNCT( PVOID, RtlDecodeSystemPointer )(
2164  IN PVOID Pointer
2165  )_FP_;
2166 
2167 _NTFN_EXTERN NTFUNC( RtlGetLastNtStatus )( VOID )_FP_;
2168 
2169 _NTFN_EXTERN NTFUNCT( ULONG, RtlGetLastWin32Error )( VOID )_FP_;
2170 
2171 _NTFN_EXTERN NTFUNCT( VOID, RtlSetLastWin32Error )(
2172  IN ULONG LastError
2173  )_FP_;
2174 
2175 _NTFN_EXTERN NTFUNCT( VOID, RtlSetLastWin32ErrorAndNtStatusFromNtStatus )(
2176  IN NTSTATUS Status
2177  )_FP_;
2178 
2179 _NTFN_EXTERN NTFUNC( RtlSetThreadErrorMode )(
2180  IN ULONG NewMode,
2181  OPTOUT PULONG OldMode
2182  )_FP_;
2183 
2184 _NTFN_EXTERN NTFUNCT( ULONG, RtlGetThreadErrorMode )( VOID )_FP_;
2185 
2186 _NTFN_EXTERN NTFUNCT( VOID, RtlCaptureContext )(
2187  OUT PCONTEXT ContextRecord
2188  )_FP_;
2189 
2190 _NTFN_EXTERN NTFUNCT( BOOLEAN, RtlDispatchException )(
2191  IN PEXCEPTION_RECORD ExceptionRecord,
2192  IN PCONTEXT Context
2193  )_FP_;
2194 
2195 _NTFN_EXTERN NTFUNCT( ULONG, RtlNtStatusToDosError )(
2196  IN NTSTATUS Status
2197  )_FP_;
2198 
2199 _NTFN_EXTERN NTFUNCT( ULONG, RtlNtStatusToDosErrorNoTeb )(
2200  IN NTSTATUS Status
2201  )_FP_;
2202 
2203 _NTFN_EXTERN NTFUNC( RtlMapSecurityErrorToNtStatus )(
2204  IN ULONG SecurityError
2205  )_FP_;
2206 
2207 _NTFN_EXTERN NTFUNCT( VOID, RtlRaiseException )(
2208  IN PEXCEPTION_RECORD ExceptionRecord
2209  )_FP_;
2210 
2211 //DECLSPEC_NORETURN
2212 _NTFN_EXTERN NTFUNCT( VOID, RtlRaiseStatus )(
2213  IN NTSTATUS Status
2214  )_FP_;
2215 
2216 _NTFN_EXTERN NTFUNCT( VOID, RtlUnwind )(
2217  OPTIN PVOID TargetFrame,
2218  OPTIN PVOID TargetIp,
2219  OPTIN PEXCEPTION_RECORD ExceptionRecord,
2220  IN PVOID ReturnValue
2221  )_FP_;
2222 
2223 // Tracing Functions ----------------------------------------------------------
2224 
2225 #define RTL_STACK_WALKING_MODE_FRAMES_TO_SKIP_SHIFT 8
2226 
2227 _NTFN_EXTERN NTFUNCT( ULONG, RtlWalkFrameChain )(
2228  OUT PVOID *Callers, //_Out_writes_(Count - (Flags >> RTL_STACK_WALKING_MODE_FRAMES_TO_SKIP_SHIFT))
2229  IN ULONG Count,
2230  IN ULONG Flags
2231  )_FP_;
2232 
2233 _NTFN_EXTERN NTFUNCT( USHORT, RtlLogStackBackTrace )( VOID )_FP_;
2234 
2235 // Heap Functions -------------------------------------------------------------
2236 
2237 _NTFN_EXTERN NTFUNCT( PVOID, RtlAllocateHeap )(
2238  IN PVOID HeapHandle,
2239  OPTIN ULONG Flags,
2240  IN SIZE_T Size
2241  )_FP_;
2242 
2243 _NTFN_EXTERN NTFUNCT( PVOID, RtlCreateHeap )(
2244  IN ULONG Flags,
2245  OPTIN PVOID BaseAddress,
2246  OPTIN SIZE_T SizeToReserve,
2247  OPTIN SIZE_T SizeToCommit,
2248  OPTIN PVOID Lock,
2249  OPTIN PRTL_HEAP_PARAMETERS Parameters
2250  )_FP_;
2251 
2252 _NTFN_EXTERN NTFUNCT( ULONG, RtlCreateTagHeap )(
2253  IN HANDLE HeapHandle,
2254  IN ULONG Flags,
2255  IN PWSTR TagName,
2256  IN PWSTR TagSubName
2257  )_FP_;
2258 
2259 _NTFN_EXTERN NTFUNCT( ULONG, RtlCompactHeap )(
2260  IN HANDLE Heap,
2261  IN ULONG Flags
2262  )_FP_;
2263 
2264 _NTFN_EXTERN NTFUNCT( PVOID, RtlDebugCreateHeap )(
2265  IN ULONG Flags,
2266  OPTIN PVOID BaseAddress,
2267  OPTIN SIZE_T SizeToReserve,
2268  OPTIN SIZE_T SizeToCommit,
2269  OPTIN PVOID Lock,
2270  OPTIN PRTL_HEAP_PARAMETERS Parameters
2271  )_FP_;
2272 
2273 _NTFN_EXTERN NTFUNCT( HANDLE, RtlDestroyHeap )(
2274  IN HANDLE Heap //_Post_invalid_
2275  )_FP_;
2276 
2277 _NTFN_EXTERN NTFUNCT( ULONG, RtlExtendHeap )(
2278  IN HANDLE Heap,
2279  IN ULONG Flags,
2280  IN PVOID P,
2281  IN SIZE_T Size
2282  )_FP_;
2283 
2284 _NTFN_EXTERN NTFUNCT( BOOLEAN, RtlFreeHeap )(
2285  IN HANDLE HeapHandle,
2286  OPTIN ULONG Flags,
2287  IN PVOID P
2288  )_FP_;
2289 
2290 _NTFN_EXTERN NTFUNCT( ULONG, RtlGetProcessHeaps )(
2291  IN ULONG HeapCount,
2292  OUT HANDLE *HeapArray //_Out_cap_(HeapCount)
2293  )_FP_;
2294 
2295 _NTFN_EXTERN NTFUNCT( BOOLEAN, RtlGetUserInfoHeap )(
2296  IN PVOID HeapHandle,
2297  IN ULONG Flags,
2298  IN PVOID BaseAddress,
2299  OPTIO PVOID *UserValue,
2300  OPTOUT PULONG UserFlags
2301  )_FP_;
2302 
2303 _NTFN_EXTERN NTFUNCT( PVOID, RtlProtectHeap )(
2304  IN PVOID HeapHandle,
2305  IN BOOLEAN Protect
2306  )_FP_;
2307 
2308 _NTFN_EXTERN NTFUNC( RtlQueryHeapInformation )(
2309  IN PVOID HeapHandle,
2310  IN HEAP_INFORMATION_CLASS HeapInformationClass,
2311  OUT PVOID HeapInformation,
2312  IN SIZE_T HeapInformationLength,
2313  OPTOUT PSIZE_T ReturnLength //_When_(HeapInformationClass==HeapCompatibilityInformation, _On_failure_(_Out_opt_))
2314  )_FP_;
2315 
2316 _NTFN_EXTERN NTFUNCT( PWSTR, RtlQueryTagHeap )(
2317  IN PVOID HeapHandle,
2318  IN ULONG Flags,
2319  IN USHORT TagIndex,
2320  IN BOOLEAN ResetCounters,
2321  OUT PRTL_HEAP_TAG_INFO HeapTagInfo
2322  )_FP_;
2323 
2324 _NTFN_EXTERN NTFUNCT( PVOID, RtlReAllocateHeap )(
2325  IN HANDLE Heap,
2326  OPTIN ULONG Flags,
2327  IN PVOID Ptr, //_Post_invalid_
2328  IN SIZE_T Size
2329  )_FP_;
2330 
2331 _NTFN_EXTERN NTFUNC( RtlSetHeapInformation )(
2332  IN PVOID HeapHandle,
2333  IN HEAP_INFORMATION_CLASS HeapInformationClass,
2334  IN PVOID HeapInformation, //_When_(HeapInformationClass==HeapCompatibilityInformation,IN )
2335  IN SIZE_T HeapInformationLength
2336  )_FP_;
2337 
2338 _NTFN_EXTERN NTFUNCT( BOOLEAN, RtlLockHeap )(
2339  IN HANDLE Heap
2340  )_FP_;
2341 
2342 _NTFN_EXTERN NTFUNC( RtlMultipleAllocateHeap )(
2343  IN HANDLE HeapHandle,
2344  IN ULONG Flags,
2345  IN SIZE_T Size,
2346  IN ULONG Count,
2347  OUT PVOID * Array //_Out_cap_(Count) _Deref_post_bytecap_(Size)
2348  )_FP_;
2349 
2350 _NTFN_EXTERN NTFUNC( RtlMultipleFreeHeap )(
2351  IN HANDLE HeapHandle,
2352  IN ULONG Flags,
2353  IN ULONG Count,
2354  IN PVOID* Array //_In_count_(Count) /* _Deref_ _Post_invalid_ */
2355  )_FP_;
2356 
2357 _NTFN_EXTERN NTFUNC( RtlUsageHeap )(
2358  IN HANDLE Heap,
2359  IN ULONG Flags,
2360  OUT PRTL_HEAP_USAGE Usage
2361  )_FP_;
2362 
2363 _NTFN_EXTERN NTFUNCT( BOOLEAN, RtlUnlockHeap )(
2364  IN HANDLE Heap
2365  )_FP_;
2366 
2367 _NTFN_EXTERN NTFUNCT( BOOLEAN, RtlSetUserValueHeap )(
2368  IN PVOID HeapHandle,
2369  IN ULONG Flags,
2370  IN PVOID BaseAddress,
2371  IN PVOID UserValue
2372  )_FP_;
2373 
2374 _NTFN_EXTERN NTFUNCT( BOOLEAN, RtlSetUserFlagsHeap )(
2375  IN PVOID HeapHandle,
2376  IN ULONG Flags,
2377  IN PVOID BaseAddress,
2378  IN ULONG UserFlagsReset,
2379  IN ULONG UserFlagsSet
2380  )_FP_;
2381 
2382 _NTFN_EXTERN NTFUNCT( BOOLEAN, RtlValidateHeap )(
2383  IN HANDLE Heap,
2384  IN ULONG Flags,
2385  OPTIN PVOID P
2386  )_FP_;
2387 
2388 _NTFN_EXTERN NTFUNC( RtlWalkHeap )(
2389  IN HANDLE HeapHandle,
2390  IN PVOID HeapEntry
2391  )_FP_;
2392 
2393 _NTFN_EXTERN NTFUNCT( SIZE_T, RtlSizeHeap )(
2394  IN PVOID HeapHandle,
2395  IN ULONG Flags,
2396  IN PVOID MemoryPointer
2397  )_FP_;
2398 
2399 // Security Functions ---------------------------------------------------------
2400 
2401 _NTFN_EXTERN NTFUNC( RtlAbsoluteToSelfRelativeSD )(
2402  IN PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor,
2403  OUT PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor,
2404  INOUT PULONG BufferLength
2405  )_FP_;
2406 
2407 _NTFN_EXTERN NTFUNC( RtlAddAccessAllowedAce )(
2408  INOUT PACL Acl,
2409  IN ULONG Revision,
2410  IN ACCESS_MASK AccessMask,
2411  IN PSID Sid
2412  )_FP_;
2413 
2414 _NTFN_EXTERN NTFUNC( RtlAddAccessAllowedAceEx )(
2415  INOUT PACL pAcl,
2416  IN ULONG dwAceRevision,
2417  IN ULONG AceFlags,
2418  IN ACCESS_MASK AccessMask,
2419  IN PSID pSid
2420  )_FP_;
2421 
2422 _NTFN_EXTERN NTFUNC( RtlAddAccessAllowedObjectAce )(
2423  IN OUT PACL pAcl,
2424  IN ULONG dwAceRevision,
2425  IN ULONG AceFlags,
2426  IN ACCESS_MASK AccessMask,
2427  IN OPTIONAL GUID *ObjectTypeGuid,
2428  IN OPTIONAL GUID *InheritedObjectTypeGuid,
2429  IN PSID pSid
2430  )_FP_;
2431 
2432 _NTFN_EXTERN NTFUNC( RtlAddAccessDeniedAce )(
2433  IN OUT PACL Acl,
2434  IN ULONG Revision,
2435  IN ACCESS_MASK AccessMask,
2436  IN PSID Sid
2437  )_FP_;
2438 
2439 _NTFN_EXTERN NTFUNC( RtlAddAccessDeniedAceEx )(
2440  INOUT PACL Acl,
2441  IN ULONG Revision,
2442  IN ULONG Flags,
2443  IN ACCESS_MASK AccessMask,
2444  IN PSID Sid
2445  )_FP_;
2446 
2447 _NTFN_EXTERN NTFUNC( RtlAddAccessDeniedObjectAce )(
2448  INOUT PACL pAcl,
2449  IN ULONG dwAceRevision,
2450  IN ULONG AceFlags,
2451  IN ACCESS_MASK AccessMask,
2452  OPTIN GUID *ObjectTypeGuid,
2453  OPTIN GUID *InheritedObjectTypeGuid,
2454  IN PSID pSid
2455  )_FP_;
2456 
2457 _NTFN_EXTERN NTFUNC( RtlAddAce )(
2458  INOUT PACL Acl,
2459  IN ULONG AceRevision,
2460  IN ULONG StartingAceIndex,
2461  IN PVOID AceList, //_In_reads_bytes_(AceListLength)
2462  IN ULONG AceListLength
2463  )_FP_;
2464 
2465 _NTFN_EXTERN NTFUNC( RtlAddAuditAccessAce )(
2466  INOUT PACL Acl,
2467  IN ULONG Revision,
2468  IN ACCESS_MASK AccessMask,
2469  IN PSID Sid,
2470  IN BOOLEAN Success,
2471  IN BOOLEAN Failure
2472  )_FP_;
2473 
2474 _NTFN_EXTERN NTFUNC( RtlAcquirePrivilege )(
2475  IN PULONG Privilege,
2476  IN ULONG NumPriv,
2477  IN ULONG Flags,
2478  OUT PVOID *ReturnedState
2479  )_FP_;
2480 
2481 _NTFN_EXTERN NTFUNC( RtlAddAuditAccessAceEx )(
2482  IN OUT PACL Acl,
2483  IN ULONG Revision,
2484  IN ULONG Flags,
2485  IN ACCESS_MASK AccessMask,
2486  IN PSID Sid,
2487  IN BOOLEAN Success,
2488  IN BOOLEAN Failure
2489  )_FP_;
2490 
2491 _NTFN_EXTERN NTFUNC( RtlAddAuditAccessObjectAce )(
2492  INOUT PACL Acl,
2493  IN ULONG Revision,
2494  IN ULONG Flags,
2495  IN ACCESS_MASK AccessMask,
2496  OPTIN GUID *ObjectTypeGuid,
2497  OPTIN GUID *InheritedObjectTypeGuid,
2498  IN PSID Sid,
2499  IN BOOLEAN Success,
2500  IN BOOLEAN Failure
2501  )_FP_;
2502 
2503 _NTFN_EXTERN NTFUNC( RtlAddMandatoryAce )(
2504  INOUT PACL Acl,
2505  IN ULONG Revision,
2506  IN ULONG Flags,
2507  IN ULONG MandatoryFlags,
2508  IN UCHAR AceType,
2509  IN PSID LabelSid
2510  )_FP_;
2511 
2512 _NTFN_EXTERN NTFUNC( RtlAdjustPrivilege )(
2513  IN ULONG Privilege,
2514  IN BOOLEAN NewValue,
2515  IN BOOLEAN ForThread,
2516  OUT PBOOLEAN OldValue
2517  )_FP_;
2518 
2519 _NTFN_EXTERN NTFUNC( RtlAllocateAndInitializeSid )(
2520  IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority,
2521  IN UCHAR SubAuthorityCount,
2522  IN ULONG SubAuthority0,
2523  IN ULONG SubAuthority1,
2524  IN ULONG SubAuthority2,
2525  IN ULONG SubAuthority3,
2526  IN ULONG SubAuthority4,
2527  IN ULONG SubAuthority5,
2528  IN ULONG SubAuthority6,
2529  IN ULONG SubAuthority7,
2530  OUT PSID *Sid
2531  )_FP_;
2532 
2533 _NTFN_EXTERN NTFUNCT( BOOLEAN, RtlAreAllAccessesGranted )(
2534  ACCESS_MASK GrantedAccess,
2535  ACCESS_MASK DesiredAccess
2536  )_FP_;
2537 
2538 _NTFN_EXTERN NTFUNCT( BOOLEAN, RtlAreAnyAccessesGranted )(
2539  ACCESS_MASK GrantedAccess,
2540  ACCESS_MASK DesiredAccess
2541  )_FP_;
2542 
2543 _NTFN_EXTERN NTFUNCT( VOID, RtlCopyLuid )(
2544  OUT PLUID DestinationLuid,
2545  IN PLUID SourceLuid
2546  )_FP_;
2547 
2548 _NTFN_EXTERN NTFUNCT( VOID, RtlCopyLuidAndAttributesArray )(
2549  ULONG Count,
2550  PLUID_AND_ATTRIBUTES Src,
2551  PLUID_AND_ATTRIBUTES Dest
2552  )_FP_;
2553 
2554 _NTFN_EXTERN NTFUNC( RtlCopySidAndAttributesArray )(
2555  ULONG Count,
2556  PSID_AND_ATTRIBUTES Src,
2557  ULONG SidAreaSize,
2558  PSID_AND_ATTRIBUTES Dest,
2559  PVOID SidArea,
2560  PVOID* RemainingSidArea,
2561  PULONG RemainingSidAreaSize
2562  )_FP_;
2563 
2564 _NTFN_EXTERN NTFUNC( RtlConvertSidToUnicodeString )(
2565  INOUT PUNICODE_STRING UnicodeString,
2566  IN PSID Sid,
2567  IN BOOLEAN AllocateDestinationString
2568  )_FP_;
2569 
2570 _NTFN_EXTERN NTFUNC( RtlCopySid )(
2571  IN ULONG DestinationSidLength,
2572  OUT PSID DestinationSid, //_Out_writes_bytes_(DestinationSidLength)
2573  IN PSID SourceSid
2574  )_FP_;
2575 
2576 _NTFN_EXTERN NTFUNC( RtlCreateAcl )(
2577  PACL Acl,
2578  ULONG AclSize,
2579  ULONG AclRevision
2580  )_FP_;
2581 
2582 _NTFN_EXTERN NTFUNC( RtlCreateSecurityDescriptor )(
2583  OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
2584  IN ULONG Revision
2585  )_FP_;
2586 
2587 _NTFN_EXTERN NTFUNC( RtlCreateSecurityDescriptorRelative )(
2588  OUT PISECURITY_DESCRIPTOR_RELATIVE SecurityDescriptor,
2589  IN ULONG Revision
2590  )_FP_;
2591 
2592 _NTFN_EXTERN NTFUNC( RtlCopySecurityDescriptor )(
2593  IN PSECURITY_DESCRIPTOR pSourceSecurityDescriptor,
2594  OUT PSECURITY_DESCRIPTOR *pDestinationSecurityDescriptor
2595  )_FP_;
2596 
2597 _NTFN_EXTERN NTFUNC( RtlDeleteAce )(
2598  PACL Acl,
2599  ULONG AceIndex
2600  )_FP_;
2601 
2602 _NTFN_EXTERN NTFUNCT( BOOLEAN, RtlEqualPrefixSid )(
2603  PSID Sid1,
2604  PSID Sid2
2605  )_FP_;
2606 
2607 _NTFN_EXTERN NTFUNCT( BOOLEAN, RtlEqualSid )(
2608  IN PSID Sid1,
2609  IN PSID Sid2
2610  )_FP_;
2611 
2612 _NTFN_EXTERN NTFUNCT( BOOLEAN, RtlFirstFreeAce )(
2613  PACL Acl,
2614  PACE* Ace
2615  )_FP_;
2616 
2617 _NTFN_EXTERN NTFUNCT( PVOID, RtlFreeSid )(
2618  IN PSID Sid //_Post_invalid_
2619  )_FP_;
2620 
2621 _NTFN_EXTERN NTFUNC( RtlGetAce )(
2622  PACL Acl,
2623  ULONG AceIndex,
2624  PVOID *Ace
2625  )_FP_;
2626 
2627 _NTFN_EXTERN NTFUNC( RtlGetControlSecurityDescriptor )(
2628  IN PSECURITY_DESCRIPTOR SecurityDescriptor,
2629  OUT PSECURITY_DESCRIPTOR_CONTROL Control,
2630  OUT PULONG Revision
2631  )_FP_;
2632 
2633 _NTFN_EXTERN NTFUNC( RtlGetDaclSecurityDescriptor )(
2634  IN PSECURITY_DESCRIPTOR SecurityDescriptor,
2635  OUT PBOOLEAN DaclPresent,
2636  OUT PACL *Dacl,
2637  OUT PBOOLEAN DaclDefaulted
2638  )_FP_;
2639 
2640 _NTFN_EXTERN NTFUNC( RtlGetSaclSecurityDescriptor )(
2641  IN PSECURITY_DESCRIPTOR SecurityDescriptor,
2642  OUT PBOOLEAN SaclPresent,
2643  OUT PACL* Sacl,
2644  OUT PBOOLEAN SaclDefaulted
2645  )_FP_;
2646 
2647 _NTFN_EXTERN NTFUNC( RtlGetGroupSecurityDescriptor )(
2648  IN PSECURITY_DESCRIPTOR SecurityDescriptor,
2649  OUT PSID *Group,
2650  OUT PBOOLEAN GroupDefaulted
2651  )_FP_;
2652 
2653 _NTFN_EXTERN NTFUNC( RtlGetOwnerSecurityDescriptor )(
2654  IN PSECURITY_DESCRIPTOR SecurityDescriptor,
2655  OUT PSID *Owner,
2656  OUT PBOOLEAN OwnerDefaulted
2657  )_FP_;
2658 
2659 _NTFN_EXTERN NTFUNCT( BOOLEAN, RtlGetSecurityDescriptorRMControl )(
2660  IN PSECURITY_DESCRIPTOR SecurityDescriptor,
2661  OUT PUCHAR RMControl
2662  )_FP_;
2663 
2664 _NTFN_EXTERN NTFUNCT( PSID_IDENTIFIER_AUTHORITY, RtlIdentifierAuthoritySid )(
2665  PSID Sid
2666  )_FP_;
2667 
2668 _NTFN_EXTERN NTFUNC( RtlImpersonateSelf )(
2669  IN SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
2670  )_FP_;
2671 
2672 _NTFN_EXTERN NTFUNC( RtlInitializeSid )(
2673  OUT PSID Sid,
2674  IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority,
2675  IN UCHAR SubAuthorityCount
2676  )_FP_;
2677 
2678 _NTFN_EXTERN NTFUNCT( ULONG, RtlLengthRequiredSid )(
2679  IN ULONG SubAuthorityCount
2680  )_FP_;
2681 
2682 _NTFN_EXTERN NTFUNCT( ULONG, RtlLengthSecurityDescriptor )(
2683  IN PSECURITY_DESCRIPTOR SecurityDescriptor
2684  )_FP_;
2685 
2686 _NTFN_EXTERN NTFUNCT( ULONG, RtlLengthSid )(
2687  IN PSID Sid
2688  )_FP_;
2689 
2690 _NTFN_EXTERN NTFUNC( RtlMakeSelfRelativeSD )(
2691  IN PSECURITY_DESCRIPTOR AbsoluteSD,
2692  OUT PSECURITY_DESCRIPTOR SelfRelativeSD,
2693  INOUT PULONG BufferLength
2694  )_FP_;
2695 
2696 _NTFN_EXTERN NTFUNCT( VOID, RtlMapGenericMask )(
2697  PACCESS_MASK AccessMask,
2698  PGENERIC_MAPPING GenericMapping
2699  )_FP_;
2700 
2701 _NTFN_EXTERN NTFUNC( RtlQueryInformationAcl )(
2702  PACL Acl,
2703  PVOID Information,
2704  ULONG InformationLength,
2705  ACL_INFORMATION_CLASS InformationClass
2706  )_FP_;
2707 
2708 _NTFN_EXTERN NTFUNCT( VOID, RtlReleasePrivilege )(
2709  IN PVOID ReturnedState
2710  )_FP_;
2711 
2712 _NTFN_EXTERN NTFUNC( RtlSelfRelativeToAbsoluteSD )(
2713  IN PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor,
2714  OUT PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor,
2715  INOUT PULONG AbsoluteSecurityDescriptorSize,
2716  OUT PACL Dacl,
2717  INOUT PULONG DaclSize,
2718  OUT PACL Sacl,
2719  INOUT PULONG SaclSize,
2720  OUT PSID Owner,
2721  INOUT PULONG OwnerSize,
2722  OUT PSID PrimaryGroup,
2723  INOUT PULONG PrimaryGroupSize
2724  )_FP_;
2725 
2726 _NTFN_EXTERN NTFUNC( RtlSelfRelativeToAbsoluteSD2 )(
2727  IN OUT PSECURITY_DESCRIPTOR SelfRelativeSD,
2728  OUT PULONG BufferSize
2729  )_FP_;
2730 
2731 _NTFN_EXTERN NTFUNC( RtlSetAttributesSecurityDescriptor )(
2732  INOUT PSECURITY_DESCRIPTOR SecurityDescriptor,
2733  IN SECURITY_DESCRIPTOR_CONTROL Control,
2734  OUT PULONG Revision
2735  )_FP_;
2736 
2737 _NTFN_EXTERN NTFUNC( RtlSetControlSecurityDescriptor )(
2738  IN PSECURITY_DESCRIPTOR SecurityDescriptor,
2739  IN SECURITY_DESCRIPTOR_CONTROL ControlBitsOfInterest,
2740  IN SECURITY_DESCRIPTOR_CONTROL ControlBitsToSet
2741  )_FP_;
2742 
2743 _NTFN_EXTERN NTFUNC( RtlSetDaclSecurityDescriptor )(
2744  INOUT PSECURITY_DESCRIPTOR SecurityDescriptor,
2745  IN BOOLEAN DaclPresent,
2746  OPTIN PACL Dacl,
2747  OPTIN BOOLEAN DaclDefaulted
2748  )_FP_;
2749 
2750 _NTFN_EXTERN NTFUNC( RtlSetGroupSecurityDescriptor )(
2751  INOUT PSECURITY_DESCRIPTOR SecurityDescriptor,
2752  OPTIN PSID Group,
2753  OPTIN BOOLEAN GroupDefaulted
2754  )_FP_;
2755 
2756 _NTFN_EXTERN NTFUNC( RtlSetInformationAcl )(
2757  PACL Acl,
2758  PVOID Information,
2759  ULONG InformationLength,
2760  ACL_INFORMATION_CLASS InformationClass
2761  )_FP_;
2762 
2763 _NTFN_EXTERN NTFUNC( RtlSetOwnerSecurityDescriptor )(
2764  INOUT PSECURITY_DESCRIPTOR SecurityDescriptor,
2765  OPTIN PSID Owner,
2766  OPTIN BOOLEAN OwnerDefaulted
2767  )_FP_;
2768 
2769 _NTFN_EXTERN NTFUNC( RtlSetSaclSecurityDescriptor )(
2770  INOUT PSECURITY_DESCRIPTOR SecurityDescriptor,
2771  IN BOOLEAN SaclPresent,
2772  IN PACL Sacl,
2773  IN BOOLEAN SaclDefaulted
2774  )_FP_;
2775 
2776 _NTFN_EXTERN NTFUNCT( VOID, RtlSetSecurityDescriptorRMControl )(
2777  INOUT PSECURITY_DESCRIPTOR SecurityDescriptor,
2778  IN PUCHAR RMControl
2779  )_FP_;
2780 
2781 _NTFN_EXTERN NTFUNCT( PUCHAR, RtlSubAuthorityCountSid )(
2782  IN PSID Sid
2783  )_FP_;
2784 
2785 _NTFN_EXTERN NTFUNCT( PULONG, RtlSubAuthoritySid )(
2786  IN PSID Sid,
2787  IN ULONG SubAuthority
2788  )_FP_;
2789 
2790 _NTFN_EXTERN NTFUNCT( BOOLEAN, RtlValidRelativeSecurityDescriptor )(
2791  IN PSECURITY_DESCRIPTOR SecurityDescriptorInput,
2792  IN ULONG SecurityDescriptorLength,
2793  IN SECURITY_INFORMATION RequiredInformation
2794  )_FP_;
2795 
2796 _NTFN_EXTERN NTFUNCT( BOOLEAN, RtlValidSecurityDescriptor )(
2797  IN PSECURITY_DESCRIPTOR SecurityDescriptor
2798  )_FP_;
2799 
2800 _NTFN_EXTERN NTFUNCT( BOOLEAN, RtlValidSid )(
2801  IN PSID Sid
2802  )_FP_;
2803 
2804 _NTFN_EXTERN NTFUNCT( BOOLEAN, RtlValidAcl )(
2805  PACL Acl
2806  )_FP_;
2807 
2808 _NTFN_EXTERN NTFUNC( RtlDeleteSecurityObject )(
2809  IN PSECURITY_DESCRIPTOR *ObjectDescriptor
2810  )_FP_;
2811 
2812 _NTFN_EXTERN NTFUNC( RtlNewSecurityObject )(
2813  IN PSECURITY_DESCRIPTOR ParentDescriptor,
2814  IN PSECURITY_DESCRIPTOR CreatorDescriptor,
2815  OUT PSECURITY_DESCRIPTOR *NewDescriptor,
2816  IN BOOLEAN IsDirectoryObject,
2817  IN HANDLE Token,
2818  IN PGENERIC_MAPPING GenericMapping
2819  )_FP_;
2820 
2821 _NTFN_EXTERN NTFUNC( RtlQuerySecurityObject )(
2822  IN PSECURITY_DESCRIPTOR ObjectDescriptor,
2823  IN SECURITY_INFORMATION SecurityInformation,
2824  OUT PSECURITY_DESCRIPTOR ResultantDescriptor,
2825  IN ULONG DescriptorLength,
2826  OUT PULONG ReturnLength
2827  )_FP_;
2828 
2829 _NTFN_EXTERN NTFUNC( RtlSetSecurityObject )(
2830  IN SECURITY_INFORMATION SecurityInformation,
2831  IN PSECURITY_DESCRIPTOR ModificationDescriptor,
2832  OUT PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor,
2833  IN PGENERIC_MAPPING GenericMapping,
2834  IN HANDLE Token
2835  )_FP_;
2836 
2837 // Single-Character Functions -------------------------------------------------
2838 
2839 _NTFN_EXTERN NTFUNC( RtlLargeIntegerToChar )(
2840  IN PLARGE_INTEGER Value,
2841  IN ULONG Base,
2842  IN ULONG Length,
2843  OUT PCHAR String
2844  )_FP_;
2845 
2846 _NTFN_EXTERN NTFUNCT( CHAR, RtlUpperChar )(
2847  CHAR Source
2848  )_FP_;
2849 
2850 _NTFN_EXTERN NTFUNCT( WCHAR, RtlUpcaseUnicodeChar )(
2851  WCHAR Source
2852  )_FP_;
2853 
2854 _NTFN_EXTERN NTFUNCT( WCHAR, RtlDowncaseUnicodeChar )(
2855  IN WCHAR Source
2856  )_FP_;
2857 
2858 _NTFN_EXTERN NTFUNC( RtlIntegerToChar )(
2859  IN ULONG Value,
2860  IN ULONG Base,
2861  IN ULONG Length,
2862  OUT PCHAR String
2863  )_FP_;
2864 
2865 _NTFN_EXTERN NTFUNC( RtlIntegerToUnicode )(
2866  IN ULONG Value,
2867  OPTIN ULONG Base,
2868  OPTIN ULONG Length,
2869  INOUT LPWSTR String
2870  )_FP_;
2871 
2872 _NTFN_EXTERN NTFUNC( RtlIntegerToUnicodeString )(
2873  IN ULONG Value,
2874  OPTIN ULONG Base,
2875  INOUT PUNICODE_STRING String
2876  )_FP_;
2877 
2878 _NTFN_EXTERN NTFUNC( RtlCharToInteger )(
2879  PCSZ String,
2880  ULONG Base,
2881  PULONG Value
2882  )_FP_;
2883 
2884 // Byte Swap Functions --------------------------------------------------------
2885 
2886 #ifndef RtlUshortByteSwap
2887 #if 0
2888  unsigned short __cdecl _byteswap_ushort(unsigned short);
2889  unsigned long __cdecl _byteswap_ulong (unsigned long);
2890  unsigned __int64 __cdecl _byteswap_uint64(unsigned __int64);
2891  #ifdef _MSC_VER
2892  #pragma intrinsic(_byteswap_ushort)
2893  #pragma intrinsic(_byteswap_ulong)
2894  #pragma intrinsic(_byteswap_uint64)
2895  #endif // _MSC_VER
2896 #endif
2897 #define RtlUshortByteSwap(_x) _byteswap_ushort((USHORT)(_x))
2898 #define RtlUlongByteSwap(_x) _byteswap_ulong((_x))
2899 #define RtlUlonglongByteSwap(_x) _byteswap_uint64((_x))
2900 #endif//ndef RtlUshortByteSwap
2901 
2902 // Unicode->Ansi String Functions ---------------------------------------------
2903 
2904 _NTFN_EXTERN NTFUNCT( ULONG, RtlxUnicodeStringToAnsiSize )(
2905  IN PCUNICODE_STRING UnicodeString
2906  )_FP_;
2907 
2908 #define RtlUnicodeStringToAnsiSize( S )( \
2909  NLS_MB_CODE_PAGE_TAG ? \
2910  RtlxUnicodeStringToAnsiSize( S ) : \
2911  ((S)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \
2912  )
2913 
2914 _NTFN_EXTERN NTFUNC( RtlUnicodeStringToAnsiString )(
2915  PANSI_STRING DestinationString,
2916  PCUNICODE_STRING SourceString,
2917  BOOLEAN AllocateDestinationString
2918  )_FP_;
2919 
2920 // Unicode->OEM String Functions ----------------------------------------------
2921 
2922 _NTFN_EXTERN NTFUNC( RtlUpcaseUnicodeStringToOemString )(
2923  POEM_STRING DestinationString,
2924  PCUNICODE_STRING SourceString,
2925  BOOLEAN AllocateDestinationString
2926  )_FP_;
2927 
2928 _NTFN_EXTERN NTFUNC( RtlUpcaseUnicodeStringToCountedOemString )(
2929  OUT POEM_STRING DestinationString, //_When_(AllocateDestinationString, OUT _At_(DestinationString->Buffer, __drv_allocatesMem(Mem))) _When_(!AllocateDestinationString, IN OUT)
2930  IN PCUNICODE_STRING SourceString,
2931  IN BOOLEAN AllocateDestinationString
2932  )_FP_;
2933 
2934 _NTFN_EXTERN NTFUNC( RtlUnicodeStringToOemString )(
2935  POEM_STRING DestinationString,
2936  PCUNICODE_STRING SourceString,
2937  BOOLEAN AllocateDestinationString
2938  )_FP_;
2939 
2940 _NTFN_EXTERN NTFUNC( RtlUpcaseUnicodeToOemN )(
2941  PCHAR OemString,
2942  ULONG OemSize,
2943  PULONG ResultSize,
2944  PCWCH UnicodeString,
2945  ULONG UnicodeSize
2946  )_FP_;
2947 
2948 _NTFN_EXTERN NTFUNCT( ULONG, RtlxUnicodeStringToOemSize )(
2949  IN PCUNICODE_STRING UnicodeString
2950  )_FP_;
2951 
2952 #ifndef RtlUnicodeStringToOemSize
2953 #define RtlUnicodeStringToOemSize( S ) ( \
2954  NLS_MB_OEM_CODE_PAGE_TAG ? \
2955  RtlxUnicodeStringToOemSize( S ) : \
2956  ((S)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \
2957  )
2958 
2959 #define RtlUnicodeStringToCountedOemSize( S ) ( \
2960  (ULONG)(RtlUnicodeStringToOemSize( S ) - sizeof(ANSI_NULL)) \
2961  )
2962 #endif//ndef RtlUnicodeStringToOemSize
2963 
2964 _NTFN_EXTERN NTFUNC( RtlUnicodeToOemN )(
2965  PCHAR OemString,
2966  ULONG OemSize,
2967  PULONG ResultSize,
2968  PCWCH UnicodeString,
2969  ULONG UnicodeSize
2970  )_FP_;
2971 
2972 // Unicode->MultiByte String Functions ----------------------------------------
2973 
2974 _NTFN_EXTERN NTFUNC( RtlUnicodeToMultiByteN )(
2975  PCHAR MbString,
2976  ULONG MbSize,
2977  PULONG ResultSize,
2978  PCWCH UnicodeString,
2979  ULONG UnicodeSize
2980  )_FP_;
2981 
2982 _NTFN_EXTERN NTFUNC( RtlUpcaseUnicodeToMultiByteN )(
2983  PCHAR MbString,
2984  ULONG MbSize,
2985  PULONG ResultSize,
2986  PCWCH UnicodeString,
2987  ULONG UnicodeSize
2988  )_FP_;
2989 
2990 _NTFN_EXTERN NTFUNC( RtlUnicodeToMultiByteSize )(
2991  PULONG MbSize,
2992  PCWCH UnicodeString,
2993  ULONG UnicodeSize
2994  )_FP_;
2995 
2996 _NTFN_EXTERN NTFUNCT( ULONG, RtlxOemStringToUnicodeSize )(
2997  IN PCOEM_STRING OemString
2998  )_FP_;
2999 
3000 // OEM to Unicode Functions ---------------------------------------------------
3001 
3002 _NTFN_EXTERN NTFUNC( RtlOemStringToUnicodeString )(
3003  PUNICODE_STRING DestinationString,
3004  PCOEM_STRING SourceString,
3005  BOOLEAN AllocateDestinationString
3006  )_FP_;
3007 
3008 _NTFN_EXTERN NTFUNC( RtlOemToUnicodeN )(
3009  OUT PWCH UnicodeString,
3010  IN ULONG MaxBytesInUnicodeString,
3011  OPTOUT PULONG BytesInUnicodeString,
3012  IN PCCH OemString,
3013  IN ULONG BytesInOemString
3014  )_FP_;
3015 
3016 #ifndef RtlOemStringToUnicodeSize
3017 #define RtlOemStringToUnicodeSize( S ) ( \
3018  NLS_MB_OEM_CODE_PAGE_TAG ? \
3019  RtlxOemStringToUnicodeSize( S ) : \
3020  ((S)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \
3021  )
3022 
3023 #define RtlOemStringToCountedUnicodeSize( S ) ( \
3024  (ULONG)(RtlOemStringToUnicodeSize( S ) - sizeof(UNICODE_NULL)) \
3025  )
3026 #endif//ndef RtlOemStringToUnicodeSize
3027 
3028 // Ansi->Unicode String Functions ---------------------------------------------
3029 
3030 _NTFN_EXTERN NTFUNCT( WCHAR, RtlAnsiCharToUnicodeChar )(
3031  INOUT PUCHAR *SourceCharacter
3032  )_FP_;
3033 
3034 _NTFN_EXTERN NTFUNC( RtlAnsiStringToUnicodeString )(
3035  PUNICODE_STRING DestinationString,
3036  PCANSI_STRING SourceString,
3037  BOOLEAN AllocateDestinationString
3038  )_FP_;
3039 
3040 _NTFN_EXTERN NTFUNCT( ULONG, RtlxAnsiStringToUnicodeSize )(
3041  PCANSI_STRING AnsiString
3042  )_FP_;
3043 
3044 #ifndef RtlAnsiStringToUnicodeSize
3045 #define RtlAnsiStringToUnicodeSize( S ) ( \
3046  NLS_MB_CODE_PAGE_TAG ? \
3047  RtlxAnsiStringToUnicodeSize( S ) : \
3048  ((S)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \
3049  )
3050 #endif
3051 
3052 _NTFN_EXTERN NTFUNCT( BOOLEAN, RtlCreateUnicodeStringFromAsciiz )(
3053  OUT PUNICODE_STRING Destination,
3054  IN PCSZ Source
3055  )_FP_;
3056 
3057 // Unicode String Functions ---------------------------------------------------
3058 
3059 _NTFN_EXTERN NTFUNC( RtlAppendUnicodeToString )(
3060  PUNICODE_STRING Destination,
3061  PCWSTR Source
3062  )_FP_;
3063 
3064 _NTFN_EXTERN NTFUNC( RtlAppendUnicodeStringToString )(
3065  PUNICODE_STRING Destination,
3066  PCUNICODE_STRING Source
3067  )_FP_;
3068 
3069 _NTFN_EXTERN NTFUNCT( LONG, RtlCompareUnicodeString )(
3070  PCUNICODE_STRING String1,
3071  PCUNICODE_STRING String2,
3072  BOOLEAN CaseInsensitive
3073  )_FP_;
3074 
3075 _NTFN_EXTERN NTFUNCT( VOID, RtlCopyUnicodeString )(
3076  PUNICODE_STRING DestinationString,
3077  PCUNICODE_STRING SourceString
3078  )_FP_;
3079 
3080 _NTFN_EXTERN NTFUNCT( BOOLEAN, RtlCreateUnicodeString )(
3081  PUNICODE_STRING DestinationString,
3082  PCWSTR SourceString
3083  )_FP_;
3084 
3085 _NTFN_EXTERN NTFUNC( RtlDowncaseUnicodeString )(
3086  INOUT PUNICODE_STRING UniDest,
3087  IN PCUNICODE_STRING UniSource,
3088  IN BOOLEAN AllocateDestinationString
3089  )_FP_;
3090 
3091 _NTFN_EXTERN NTFUNC( RtlDuplicateUnicodeString )(
3092  IN ULONG Flags,
3093  IN PCUNICODE_STRING SourceString,
3094  OUT PUNICODE_STRING DestinationString
3095  )_FP_;
3096 
3097 // Memory Functions -----------------------------------------------------------
3098 
3099 _NTFN_EXTERN NTFUNCT( VOID, RtlFillMemoryUlong )(
3100  IN PVOID Destination,
3101  IN SIZE_T Length,
3102  IN ULONG Fill
3103  )_FP_;
3104 
3105 _NTFN_EXTERN NTFUNCT( VOID, RtlFillMemoryUlonglong )(
3106  OUT PVOID Destination,
3107  IN SIZE_T Length,
3108  IN ULONGLONG Pattern
3109  )_FP_;
3110 
3111 _NTFN_EXTERN NTFUNC( RtlCopyMappedMemory )(
3112  OUT PVOID Destination, //_Out_writes_bytes_all_(Size)
3113  IN const VOID* Source, //_In_reads_bytes_(Size)
3114  IN SIZE_T Size
3115  )_FP_;
3116 
3117 _NTFN_EXTERN NTFUNCT( SIZE_T, RtlCompareMemoryUlong )(
3118  IN PVOID Source,
3119  IN SIZE_T Length,
3120  IN ULONG Pattern
3121  )_FP_;
3122 
3123 #ifndef RtlEqualMemory
3124 #define RtlEqualMemory( Destination, Source, Length ) \
3125  (!memcmp( Destination, Source, Length ))
3126 #endif
3127 
3128 #ifndef RtlCopyBytes
3129 #define RtlCopyBytes RtlCopyMemory
3130 #define RtlFillBytes RtlFillMemory
3131 #define RtlZeroBytes RtlZeroMemory
3132 #endif
3133 
3134 // More Unicode String Functions ----------------------------------------------
3135 
3136 _NTFN_EXTERN NTFUNCT( BOOLEAN, RtlEqualUnicodeString )(
3137  PCUNICODE_STRING String1,
3138  PCUNICODE_STRING String2,
3139  BOOLEAN CaseInsensitive
3140  )_FP_;
3141 
3142 _NTFN_EXTERN NTFUNC( RtlFindCharInUnicodeString )(
3143  IN ULONG Flags,
3144  IN PCUNICODE_STRING SearchString,
3145  IN PCUNICODE_STRING MatchString,
3146  OUT PUSHORT Position
3147  )_FP_;
3148 
3149 _NTFN_EXTERN NTFUNCT( VOID, RtlFreeUnicodeString )(
3150  INOUT PUNICODE_STRING UnicodeString
3151  )_FP_;
3152 
3153 _NTFN_EXTERN NTFUNCT( VOID, RtlEraseUnicodeString )(
3154  INOUT PUNICODE_STRING String
3155  )_FP_;
3156 
3157 _NTFN_EXTERN NTFUNC( RtlHashUnicodeString )(
3158  IN CONST UNICODE_STRING *String,
3159  IN BOOLEAN CaseInSensitive,
3160  IN ULONG HashAlgorithm,
3161  OUT PULONG HashValue
3162  )_FP_;
3163 
3164 _NTFN_EXTERN NTFUNCT( VOID, RtlInitUnicodeString )(
3165  OUT PUNICODE_STRING DestinationString,
3166  IN PCWSTR SourceString
3167  )_FP_;
3168 
3169 _NTFN_EXTERN NTFUNC( RtlInitUnicodeStringEx )(
3170  OUT PUNICODE_STRING DestinationString,
3171  IN PCWSTR SourceString
3172  )_FP_;
3173 
3174 _NTFN_EXTERN NTFUNCT( BOOLEAN, RtlIsTextUnicode )(
3175  IN CONST VOID* Buffer,
3176  IN INT Size,
3177  OPTIO INT* Flags
3178  )_FP_;
3179 
3180 _NTFN_EXTERN NTFUNCT( BOOLEAN, RtlPrefixString )(
3181  IN const STRING *String1,
3182  IN const STRING *String2,
3183  IN BOOLEAN CaseInsensitive
3184  )_FP_;
3185 
3186 _NTFN_EXTERN NTFUNCT( BOOLEAN, RtlPrefixUnicodeString )(
3187  IN PCUNICODE_STRING String1,
3188  IN PCUNICODE_STRING String2,
3189  IN BOOLEAN CaseInsensitive
3190  )_FP_;
3191 
3192 _NTFN_EXTERN NTFUNC( RtlUpcaseUnicodeString )(
3193  OUT PUNICODE_STRING DestinationString,
3194  IN PCUNICODE_STRING SourceString,
3195  IN BOOLEAN AllocateDestinationString
3196  )_FP_;
3197 
3198 _NTFN_EXTERN NTFUNC( RtlUnicodeStringToInteger )(
3199  IN PCUNICODE_STRING String,
3200  OPTIN ULONG Base,
3201  OUT PULONG Value
3202  )_FP_;
3203 
3204 _NTFN_EXTERN NTFUNC( RtlValidateUnicodeString )(
3205  IN ULONG Flags,
3206  IN PCUNICODE_STRING String
3207  )_FP_;
3208 
3209 // More String Functions ------------------------------------------------------
3210 
3211 _NTFN_EXTERN NTFUNCT( VOID, RtlUpperString )(
3212  INOUT PSTRING DestinationString,
3213  IN const STRING *SourceString
3214  )_FP_;
3215 
3216 _NTFN_EXTERN NTFUNCT( LONG, RtlCompareString )(
3217  IN const STRING *String1,
3218  IN const STRING *String2,
3219  IN BOOLEAN CaseInSensitive
3220  )_FP_;
3221 
3222 _NTFN_EXTERN NTFUNCT( VOID, RtlCopyString )(
3223  OUT PSTRING DestinationString,
3224  OPTIN const STRING *SourceString
3225  )_FP_;
3226 
3227 _NTFN_EXTERN NTFUNCT( BOOLEAN, RtlEqualString )(
3228  IN const STRING *String1,
3229  IN const STRING *String2,
3230  IN BOOLEAN CaseInSensitive
3231  )_FP_;
3232 
3233 _NTFN_EXTERN NTFUNC( RtlAppendStringToString )(
3234  INOUT PSTRING Destination,
3235  IN const STRING *Source
3236  )_FP_;
3237 
3238 // Ansi String Functions ------------------------------------------------------
3239 
3240 _NTFN_EXTERN NTFUNCT( VOID, RtlFreeAnsiString )(
3241  INOUT PANSI_STRING AnsiString
3242  )_FP_;
3243 
3244 _NTFN_EXTERN NTFUNCT( VOID, RtlInitAnsiString )(
3245  OUT PANSI_STRING DestinationString,
3246  IN PCSZ SourceString
3247  )_FP_;
3248 
3249 _NTFN_EXTERN NTFUNC( RtlInitAnsiStringEx )(
3250  OUT PANSI_STRING DestinationString,
3251  IN PCSZ SourceString
3252  )_FP_;
3253 
3254 // OEM String Functions -------------------------------------------------------
3255 
3256 _NTFN_EXTERN NTFUNCT( VOID, RtlFreeOemString )(
3257  INOUT POEM_STRING OemString
3258  )_FP_;
3259 
3260 // MultiByte->Unicode String Functions ----------------------------------------
3261 
3262 _NTFN_EXTERN NTFUNC( RtlMultiByteToUnicodeN )(
3263  OUT PWCH UnicodeString,
3264  IN ULONG MaxBytesInUnicodeString,
3265  OPTOUT PULONG BytesInUnicodeString,
3266  IN const CHAR *MultiByteString,
3267  IN ULONG BytesInMultiByteString
3268  )_FP_;
3269 
3270 _NTFN_EXTERN NTFUNC( RtlMultiByteToUnicodeSize )(
3271  OUT PULONG BytesInUnicodeString,
3272  IN const CHAR *MultiByteString,
3273  IN ULONG BytesInMultiByteString
3274  )_FP_;
3275 
3276 // Atom Functions -------------------------------------------------------------
3277 
3278 _NTFN_EXTERN NTFUNC( RtlAddAtomToAtomTable )(
3279  IN PRTL_ATOM_TABLE AtomTable,
3280  IN PWSTR AtomName,
3281  OUT PRTL_ATOM Atom
3282  )_FP_;
3283 
3284 _NTFN_EXTERN NTFUNC( RtlCreateAtomTable )(
3285  IN ULONG TableSize,
3286  INOUT PRTL_ATOM_TABLE *AtomTable
3287  )_FP_;
3288 
3289 _NTFN_EXTERN NTFUNC( RtlDeleteAtomFromAtomTable )(
3290  IN PRTL_ATOM_TABLE AtomTable,
3291  IN RTL_ATOM Atom
3292  )_FP_;
3293 
3294 _NTFN_EXTERN NTFUNC( RtlDestroyAtomTable )(
3295  IN PRTL_ATOM_TABLE AtomTable
3296  )_FP_;
3297 
3298 _NTFN_EXTERN NTFUNC( RtlQueryAtomInAtomTable )(
3299  IN PRTL_ATOM_TABLE AtomTable,
3300  IN RTL_ATOM Atom,
3301  OPTOUT PULONG RefCount,
3302  OPTOUT PULONG PinCount,
3303  OUT PWSTR AtomName,
3304  OPTIO PULONG NameLength
3305  )_FP_;
3306 
3307 _NTFN_EXTERN NTFUNC( RtlPinAtomInAtomTable )(
3308  IN PRTL_ATOM_TABLE AtomTable,
3309  IN RTL_ATOM Atom
3310  )_FP_;
3311 
3312 _NTFN_EXTERN NTFUNC( RtlLookupAtomInAtomTable )(
3313  IN PRTL_ATOM_TABLE AtomTable,
3314  IN PWSTR AtomName,
3315  OUT PRTL_ATOM Atom
3316  )_FP_;
3317 
3318 // Process Management Functions -----------------------------------------------
3319 
3320 _NTFN_EXTERN NTFUNCT( PPEB, RtlGetCurrentPeb )( VOID )_FP_;
3321 
3322 _NTFN_EXTERN NTFUNCT( VOID, RtlAcquirePebLock )( VOID )_FP_;
3323 _NTFN_EXTERN NTFUNCT( VOID, RtlReleasePebLock )( VOID )_FP_;
3324 
3325 _NTFN_EXTERN NTFUNC( RtlCreateProcessParameters )(
3326  OUT PRTL_USER_PROCESS_PARAMETERS *ProcessParameters,
3327  IN PUNICODE_STRING ImagePathName,
3328  OPTIN PUNICODE_STRING DllPath,
3329  OPTIN PUNICODE_STRING CurrentDirectory,
3330  OPTIN PUNICODE_STRING CommandLine,
3331  OPTIN PWSTR Environment,
3332  OPTIN PUNICODE_STRING WindowTitle,
3333  OPTIN PUNICODE_STRING DesktopInfo,
3334  OPTIN PUNICODE_STRING ShellInfo,
3335  OPTIN PUNICODE_STRING RuntimeInfo
3336  )_FP_;
3337 
3338 _NTFN_EXTERN NTFUNC( RtlCreateUserProcess )(
3339  IN PUNICODE_STRING ImageFileName,
3340  IN ULONG Attributes,
3341  IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters,
3342  OPTIN PSECURITY_DESCRIPTOR ProcessSecutityDescriptor,
3343  OPTIN PSECURITY_DESCRIPTOR ThreadSecurityDescriptor,
3344  OPTIN HANDLE ParentProcess,
3345  IN BOOLEAN CurrentDirectory,
3346  OPTIN HANDLE DebugPort,
3347  OPTIN HANDLE ExceptionPort,
3348  OUT PRTL_USER_PROCESS_INFORMATION ProcessInfo
3349  )_FP_;
3350 
3355 
3356 #if (NTDDI_VERSION >= NTDDI_WIN7)
3357 _NTFN_EXTERN NTFUNC( RtlCreateUserThread )(
3358  IN PVOID ThreadContext,
3359  OUT HANDLE *OutThreadHandle,
3360  PVOID Reserved1, //_Reserved_
3361  PVOID Reserved2, //_Reserved_
3362  PVOID Reserved3, //_Reserved_
3363  PVOID Reserved4, //_Reserved_
3364  PVOID Reserved5, //_Reserved_
3365  PVOID Reserved6, //_Reserved_
3366  PVOID Reserved7, //_Reserved_
3367  PVOID Reserved8 //_Reserved_
3368  )_FP_;
3369 #else
3370 _NTFN_EXTERN NTFUNC( RtlCreateUserThread )(
3371  IN HANDLE ProcessHandle,
3372  OPTIN PSECURITY_DESCRIPTOR SecurityDescriptor,
3373  IN BOOLEAN CreateSuspended,
3374  IN ULONG StackZeroBits,
3375  IN SIZE_T StackReserve,
3376  IN SIZE_T StackCommit,
3377  IN PTHREAD_START_ROUTINE StartAddress,
3378  IN PVOID Parameter,
3379  OPTOUT PHANDLE ThreadHandle,
3380  OPTOUT PCLIENT_ID ClientId
3381  )_FP_;
3382 #endif
3383 
3384 _NTFN_EXTERN NTFUNCT( PRTL_USER_PROCESS_PARAMETERS, RtlDeNormalizeProcessParams )(
3385  IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
3386  )_FP_;
3387 
3388 _NTFN_EXTERN NTFUNC( RtlDestroyProcessParameters )(
3389  IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
3390  )_FP_;
3391 
3392 _NTFN_EXTERN NTFUNCT( VOID, RtlExitUserThread )(
3393  IN NTSTATUS Status
3394  )_FP_;
3395 
3396 _NTFN_EXTERN NTFUNCT( VOID, RtlInitializeContext )(
3397  IN HANDLE ProcessHandle,
3398  OUT PCONTEXT ThreadContext,
3399  OPTIN PVOID ThreadStartParam,
3400  IN PTHREAD_START_ROUTINE ThreadStartAddress,
3401  IN PINITIAL_TEB InitialTeb
3402  )_FP_;
3403 
3404 #ifdef _M_AMD64
3405 typedef struct _WOW64_CONTEXT *PWOW64_CONTEXT;
3406 
3407 _NTFN_EXTERN NTFUNC( RtlWow64GetThreadContext )(
3408  IN HANDLE ThreadHandle,
3409  INOUT PWOW64_CONTEXT ThreadContext
3410  )_FP_;
3411 
3412 _NTFN_EXTERN NTFUNC( RtlWow64SetThreadContext )(
3413  IN HANDLE ThreadHandle,
3414  IN PWOW64_CONTEXT ThreadContext
3415  )_FP_;
3416 #endif
3417 
3418 _NTFN_EXTERN NTFUNCT( BOOLEAN, RtlIsThreadWithinLoaderCallout )( VOID )_FP_;
3419 
3420 _NTFN_EXTERN NTFUNCT( PRTL_USER_PROCESS_PARAMETERS, RtlNormalizeProcessParams )(
3421  IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
3422  )_FP_;
3423 
3424 _NTFN_EXTERN NTFUNC( RtlRemoteCall )(
3425  IN HANDLE Process,
3426  IN HANDLE Thread,
3427  IN PVOID CallSite,
3428  IN ULONG ArgumentCount,
3429  IN PULONG Arguments,
3430  IN BOOLEAN PassContext,
3431  IN BOOLEAN AlreadySuspended
3432  )_FP_;
3433 
3434 _NTFN_EXTERN NTFUNCC( NTSTATUS, RtlSetProcessIsCritical )( // __cdecl
3435  IN BOOLEAN NewValue,
3436  OPTOUT PBOOLEAN OldValue,
3437  IN BOOLEAN NeedBreaks
3438  )_FP_;
3439 
3440 _NTFN_EXTERN NTFUNCC( NTSTATUS, RtlSetThreadIsCritical )( // __cdecl
3441  IN BOOLEAN NewValue,
3442  OPTOUT PBOOLEAN OldValue,
3443  IN BOOLEAN NeedBreaks
3444  )_FP_;
3445 
3446 _NTFN_EXTERN NTFUNCT( ULONG, RtlGetCurrentProcessorNumber )( VOID )_FP_;
3447 
3448 // Thread Pool Functions ------------------------------------------------------
3449 
3450 _NTFN_EXTERN NTFUNC( RtlSetThreadPoolStartFunc )(
3451  IN PRTL_START_POOL_THREAD StartPoolThread,
3452  IN PRTL_EXIT_POOL_THREAD ExitPoolThread
3453  )_FP_;
3454 
3455 _NTFN_EXTERN NTFUNC( RtlDeregisterWaitEx )(
3456  IN HANDLE hWaitHandle,
3457  OPTIN HANDLE hCompletionEvent
3458  )_FP_;
3459 
3460 _NTFN_EXTERN NTFUNC( RtlDeregisterWait )(
3461  IN HANDLE hWaitHandle
3462  )_FP_;
3463 
3464 _NTFN_EXTERN NTFUNC( RtlQueueWorkItem )(
3465  IN WORKERCALLBACKFUNC Function,
3466  OPTIN PVOID Context,
3467  IN ULONG Flags
3468  )_FP_;
3469 
3470 _NTFN_EXTERN NTFUNC( RtlSetIoCompletionCallback )(
3471  IN HANDLE FileHandle,
3472  IN PIO_APC_ROUTINE Callback,
3473  IN ULONG Flags
3474  )_FP_;
3475 
3476 _NTFN_EXTERN NTFUNC( RtlRegisterWait )(
3477  IN PHANDLE phNewWaitObject,
3478  IN HANDLE hObject,
3479  IN WAITORTIMERCALLBACKFUNC Callback,
3480  IN PVOID pvContext,
3481  IN ULONG ulMilliseconds,
3482  IN ULONG ulFlags
3483  )_FP_;
3484 
3485 // Environment/Path Functions -------------------------------------------------
3486 
3487 _NTFN_EXTERN NTFUNC( RtlCreateEnvironment )(
3488  IN BOOLEAN Clone,
3489  OUT PWSTR *Environment
3490  )_FP_;
3491 
3492 _NTFN_EXTERN NTFUNC( RtlComputePrivatizedDllName_U )(
3493  IN PUNICODE_STRING DllName,
3494  OUT PUNICODE_STRING RealName,
3495  OUT PUNICODE_STRING LocalName
3496  )_FP_;
3497 
3498 _NTFN_EXTERN NTFUNCT( VOID, RtlDestroyEnvironment )(
3499  IN PWSTR Environment
3500  )_FP_;
3501 
3502 _NTFN_EXTERN NTFUNCT( BOOLEAN, RtlDoesFileExists_U )(
3503  IN PCWSTR FileName
3504  )_FP_;
3505 
3506 _NTFN_EXTERN NTFUNCT( RTL_PATH_TYPE, RtlDetermineDosPathNameType_U )(
3507  IN PCWSTR Path
3508  )_FP_;
3509 
3510 _NTFN_EXTERN NTFUNCT( ULONG, RtlDosSearchPath_U )(
3511  IN PCWSTR Path,
3512  IN PCWSTR FileName,
3513  IN PCWSTR Extension,
3514  IN ULONG BufferSize,
3515  OUT PWSTR Buffer,
3516  OUT PWSTR *PartName
3517  )_FP_;
3518 
3519 _NTFN_EXTERN NTFUNC( RtlDosSearchPath_Ustr )(
3520  IN ULONG Flags,
3521  IN PUNICODE_STRING PathString,
3522  IN PUNICODE_STRING FileNameString,
3523  IN PUNICODE_STRING ExtensionString,
3524  IN PUNICODE_STRING CallerBuffer,
3525  OPTIO PUNICODE_STRING DynamicString,
3526  OPTOUT PUNICODE_STRING* FullNameOut,
3527  OPTOUT PSIZE_T FilePartSize,
3528  OPTOUT PSIZE_T LengthNeeded
3529  )_FP_;
3530 
3531 _NTFN_EXTERN NTFUNCT( BOOLEAN, RtlDosPathNameToNtPathName_U )(
3532  OPTIN PCWSTR DosPathName,
3533  OUT PUNICODE_STRING NtPathName,
3534  OPTOUT PCWSTR *NtFileNamePart,
3535  OPTOUT PRTL_RELATIVE_NAME_U DirectoryInfo
3536  )_FP_;
3537 
3538 _NTFN_EXTERN NTFUNCT( BOOLEAN, RtlDosPathNameToRelativeNtPathName_U )(
3539  IN PCWSTR DosName,
3540  OUT PUNICODE_STRING NtName,
3541  OUT PCWSTR *PartName,
3542  OUT PRTL_RELATIVE_NAME_U RelativeName
3543  )_FP_;
3544 
3545 _NTFN_EXTERN NTFUNC( RtlExpandEnvironmentStrings_U )(
3546  IN PWSTR Environment, //_In_z_
3547  IN PUNICODE_STRING Source,
3548  INOUT PUNICODE_STRING Destination,
3549  OUT PULONG Length
3550  )_FP_;
3551 
3552 _NTFN_EXTERN NTFUNCT( ULONG, RtlGetCurrentDirectory_U )(
3553  IN ULONG MaximumLength,
3554  OUT PWSTR Buffer //_Out_bytecap_(MaximumLength)
3555  )_FP_;
3556 
3557 _NTFN_EXTERN NTFUNCT( ULONG, RtlGetFullPathName_U )(
3558  IN PCWSTR FileName,
3559  IN ULONG Size,
3560  OUT PWSTR Buffer, //_Out_z_bytecap_(Size)
3561  OPTOUT PWSTR *ShortName
3562  )_FP_;
3563 
3564 #if (NTDDI_VERSION >= NTDDI_WIN7)
3565 _NTFN_EXTERN NTFUNC( RtlGetFullPathName_UEx )(
3566  IN PWSTR FileName,
3567  IN ULONG BufferLength,
3568  OUT PWSTR Buffer,
3569  OPTOUT PWSTR *FilePart,
3570  OPTOUT RTL_PATH_TYPE *InputPathType
3571  )_FP_;
3572 #endif
3573 
3574 _NTFN_EXTERN NTFUNC( RtlGetFullPathName_UstrEx )(
3575  IN PUNICODE_STRING FileName,
3576  OPTIN PUNICODE_STRING StaticString,
3577  OPTIN PUNICODE_STRING DynamicString,
3578  OPTOUT PUNICODE_STRING *StringUsed,
3579  OPTOUT PSIZE_T FilePartSize,
3580  OPTOUT PBOOLEAN NameInvalid,
3581  OUT RTL_PATH_TYPE* PathType,
3582  OPTOUT PSIZE_T LengthNeeded
3583  )_FP_;
3584 
3585 _NTFN_EXTERN NTFUNC( RtlGetLengthWithoutTrailingPathSeperators )(
3586  IN ULONG Flags, //_Reserved_
3587  IN PCUNICODE_STRING PathString,
3588  OUT PULONG Length
3589  )_FP_;
3590 
3591 _NTFN_EXTERN NTFUNCT( ULONG, RtlGetLongestNtPathLength )( VOID )_FP_;
3592 
3593 _NTFN_EXTERN NTFUNCT( ULONG, RtlIsDosDeviceName_U )(
3594  IN PCWSTR Name
3595  )_FP_;
3596 
3597 _NTFN_EXTERN NTFUNCT( ULONG, RtlIsDosDeviceName_Ustr )(
3598  IN PCUNICODE_STRING Name
3599  )_FP_;
3600 
3601 _NTFN_EXTERN NTFUNCT( BOOLEAN, RtlIsNameLegalDOS8Dot3 )(
3602  IN PCUNICODE_STRING Name,
3603  IN OUT OPTIONAL POEM_STRING OemName,
3604  OUT OPTIONAL PBOOLEAN NameContainsSpaces
3605  )_FP_;
3606 
3607 _NTFN_EXTERN NTFUNC( RtlQueryEnvironmentVariable_U )(
3608  IN OPTIONAL PWSTR Environment,
3609  IN PUNICODE_STRING Name,
3610  OUT PUNICODE_STRING Value
3611  )_FP_;
3612 
3613 _NTFN_EXTERN NTFUNCT( VOID, RtlReleaseRelativeName )(
3614  IN PRTL_RELATIVE_NAME_U RelativeName
3615  )_FP_;
3616 
3617 _NTFN_EXTERN NTFUNC( RtlSetCurrentDirectory_U )(
3618  IN PUNICODE_STRING name
3619  )_FP_;
3620 
3621 _NTFN_EXTERN NTFUNC( RtlSetEnvironmentVariable )(
3622  IN PWSTR *Environment,
3623  IN PUNICODE_STRING Name,
3624  IN PUNICODE_STRING Value
3625  )_FP_;
3626 
3627 // Critical Section/Resource Functions ----------------------------------------
3628 
3629 _NTFN_EXTERN NTFUNC( RtlDeleteCriticalSection )(
3630  IN PRTL_CRITICAL_SECTION CriticalSection
3631  )_FP_;
3632 
3633 _NTFN_EXTERN NTFUNC( RtlEnterCriticalSection )(
3634  IN PRTL_CRITICAL_SECTION CriticalSection
3635  )_FP_;
3636 
3637 _NTFN_EXTERN NTFUNC( RtlInitializeCriticalSection )(
3638  IN PRTL_CRITICAL_SECTION CriticalSection
3639  )_FP_;
3640 
3641 _NTFN_EXTERN NTFUNC( RtlInitializeCriticalSectionAndSpinCount )(
3642  IN PRTL_CRITICAL_SECTION CriticalSection,
3643  IN ULONG SpinCount
3644  )_FP_;
3645 
3646 _NTFN_EXTERN NTFUNC( RtlLeaveCriticalSection )(
3647  IN PRTL_CRITICAL_SECTION CriticalSection
3648  )_FP_;
3649 
3650 _NTFN_EXTERN NTFUNCT( BOOLEAN, RtlTryEnterCriticalSection )(
3651  IN PRTL_CRITICAL_SECTION CriticalSection
3652  )_FP_;
3653 
3654 _NTFN_EXTERN NTFUNCT( VOID, RtlpUnWaitCriticalSection )(
3655  IN PRTL_CRITICAL_SECTION CriticalSection
3656  )_FP_;
3657 
3658 _NTFN_EXTERN NTFUNC( RtlpWaitForCriticalSection )(
3659  IN PRTL_CRITICAL_SECTION CriticalSection
3660  )_FP_;
3661 
3662 _NTFN_EXTERN NTFUNCT( BOOLEAN, RtlAcquireResourceExclusive )(
3663  IN PRTL_RESOURCE Resource,
3664  IN BOOLEAN Wait
3665  )_FP_;
3666 
3667 _NTFN_EXTERN NTFUNCT( BOOLEAN, RtlAcquireResourceShared )(
3668  IN PRTL_RESOURCE Resource,
3669  IN BOOLEAN Wait
3670  )_FP_;
3671 
3672 _NTFN_EXTERN NTFUNCT( VOID, RtlConvertExclusiveToShared )(
3673  IN PRTL_RESOURCE Resource
3674  )_FP_;
3675 
3676 _NTFN_EXTERN NTFUNCT( VOID, RtlConvertSharedToExclusive )(
3677  IN PRTL_RESOURCE Resource
3678  )_FP_;
3679 
3680 _NTFN_EXTERN NTFUNCT( VOID, RtlDeleteResource )(
3681  IN PRTL_RESOURCE Resource
3682  )_FP_;
3683 
3684 _NTFN_EXTERN NTFUNCT( VOID, RtlDumpResource )(
3685  IN PRTL_RESOURCE Resource
3686  )_FP_;
3687 
3688 _NTFN_EXTERN NTFUNCT( VOID, RtlInitializeResource )(
3689  IN PRTL_RESOURCE Resource
3690  )_FP_;
3691 
3692 _NTFN_EXTERN NTFUNCT( VOID, RtlReleaseResource )(
3693  IN PRTL_RESOURCE Resource
3694  )_FP_;
3695 
3696 // Compression Functions ------------------------------------------------------
3697 
3698 _NTFN_EXTERN NTFUNC( RtlCompressBuffer )(
3699  IN USHORT CompressionFormatAndEngine,
3700  IN PUCHAR UncompressedBuffer,
3701  IN ULONG UncompressedBufferSize,
3702  OUT PUCHAR CompressedBuffer,
3703  IN ULONG CompressedBufferSize,
3704  IN ULONG UncompressedChunkSize,
3705  OUT PULONG FinalCompressedSize,
3706  IN PVOID WorkSpace
3707  )_FP_;
3708 
3709 _NTFN_EXTERN NTFUNC( RtlDecompressBuffer )(
3710  IN USHORT CompressionFormat,
3711  OUT PUCHAR UncompressedBuffer,
3712  IN ULONG UncompressedBufferSize,
3713  IN PUCHAR CompressedBuffer,
3714  IN ULONG CompressedBufferSize,
3715  OUT PULONG FinalUncompressedSize
3716  )_FP_;
3717 
3718 _NTFN_EXTERN NTFUNC( RtlGetCompressionWorkSpaceSize )(
3719  IN USHORT CompressionFormatAndEngine,
3720  OUT PULONG CompressBufferWorkSpaceSize,
3721  OUT PULONG CompressFragmentWorkSpaceSize
3722  )_FP_;
3723 
3724 // Frame Functions ------------------------------------------------------------
3725 
3726 _NTFN_EXTERN NTFUNCT( VOID, RtlPopFrame )(
3727  IN PTEB_ACTIVE_FRAME Frame
3728  )_FP_;
3729 
3730 _NTFN_EXTERN NTFUNCT( VOID, RtlPushFrame )(
3731  IN PTEB_ACTIVE_FRAME Frame
3732  )_FP_;
3733 
3734 _NTFN_EXTERN NTFUNCT( PTEB_ACTIVE_FRAME, RtlGetFrame )( VOID )_FP_;
3735 
3736 // Debug Info Functions -------------------------------------------------------
3737 
3738 _NTFN_EXTERN NTFUNCT( PRTL_DEBUG_INFORMATION, RtlCreateQueryDebugBuffer )(
3739  IN ULONG Size,
3740  IN BOOLEAN EventPair
3741  )_FP_;
3742 
3743 _NTFN_EXTERN NTFUNC( RtlDestroyQueryDebugBuffer )(
3744  IN PRTL_DEBUG_INFORMATION DebugBuffer
3745  )_FP_;
3746 
3747 _NTFN_EXTERN NTFUNC( RtlQueryProcessDebugInformation )(
3748  IN ULONG ProcessId,
3749  IN ULONG DebugInfoClassMask,
3750  INOUT PRTL_DEBUG_INFORMATION DebugBuffer
3751  )_FP_;
3752 
3753 // Bitmap Functions -----------------------------------------------------------
3754 
3755 _NTFN_EXTERN NTFUNCT( BOOLEAN, RtlAreBitsClear )(
3756  IN PRTL_BITMAP BitMapHeader,
3757  IN ULONG StartingIndex,
3758  IN ULONG Length
3759  )_FP_;
3760 
3761 _NTFN_EXTERN NTFUNCT( BOOLEAN, RtlAreBitsSet )(
3762  IN PRTL_BITMAP BitMapHeader,
3763  IN ULONG StartingIndex,
3764  IN ULONG Length
3765  )_FP_;
3766 
3767 _NTFN_EXTERN NTFUNCT( VOID, RtlClearAllBits )(
3768  IN PRTL_BITMAP BitMapHeader
3769  )_FP_;
3770 
3771 _NTFN_EXTERN NTFUNCT( VOID, RtlClearBits )(
3772  IN PRTL_BITMAP BitMapHeader,
3773  IN ULONG StartingIndex, //_In_range_(0, BitMapHeader->SizeOfBitMap - NumberToClear)
3774  IN ULONG NumberToClear //_In_range_(0, BitMapHeader->SizeOfBitMap - StartingIndex)
3775  )_FP_;
3776 
3777 _NTFN_EXTERN NTFUNCT( ULONG, RtlFindClearBits )(
3778  IN PRTL_BITMAP BitMapHeader,
3779  IN ULONG NumberToFind,
3780  IN ULONG HintIndex
3781  )_FP_;
3782 
3783 _NTFN_EXTERN NTFUNCT( ULONG, RtlFindClearBitsAndSet )(
3784  IN PRTL_BITMAP BitMapHeader,
3785  IN ULONG NumberToFind,
3786  IN ULONG HintIndex
3787  )_FP_;
3788 
3789 _NTFN_EXTERN NTFUNCT( ULONG, RtlFindFirstRunClear )(
3790  IN PRTL_BITMAP BitMapHeader,
3791  OUT PULONG StartingIndex
3792  )_FP_;
3793 
3794 _NTFN_EXTERN NTFUNCT( ULONG, RtlFindClearRuns )(
3795  IN PRTL_BITMAP BitMapHeader,
3796  OUT PRTL_BITMAP_RUN RunArray, //_Out_writes_to_(SizeOfRunArray, return)
3797  IN ULONG SizeOfRunArray, //_In_range_(>, 0)
3798  IN BOOLEAN LocateLongestRuns
3799  )_FP_;
3800 
3801 _NTFN_EXTERN NTFUNCT( ULONG, RtlFindLastBackwardRunClear )(
3802  IN PRTL_BITMAP BitMapHeader,
3803  IN ULONG FromIndex,
3804  OUT PULONG StartingRunIndex
3805  )_FP_;
3806 
3807 _NTFN_EXTERN NTFUNCT( CCHAR, RtlFindLeastSignificantBit )(
3808  IN ULONGLONG Value
3809  )_FP_;
3810 
3811 _NTFN_EXTERN NTFUNCT( CCHAR, RtlFindMostSignificantBit )(
3812  IN ULONGLONG Value
3813  )_FP_;
3814 
3815 _NTFN_EXTERN NTFUNCT( ULONG, RtlFindNextForwardRunClear )(
3816  IN PRTL_BITMAP BitMapHeader,
3817  IN ULONG FromIndex,
3818  OUT PULONG StartingRunIndex
3819  )_FP_;
3820 
3821 _NTFN_EXTERN NTFUNCT( ULONG, RtlFindNextForwardRunSet )(
3822  IN PRTL_BITMAP BitMapHeader,
3823  IN ULONG FromIndex,
3824  OUT PULONG StartingRunIndex
3825  )_FP_;
3826 
3827 _NTFN_EXTERN NTFUNCT( ULONG, RtlFindSetBits )(
3828  IN PRTL_BITMAP BitMapHeader,
3829  IN ULONG NumberToFind,
3830  IN ULONG HintIndex
3831  )_FP_;
3832 
3833 _NTFN_EXTERN NTFUNCT( ULONG, RtlFindSetBitsAndClear )(
3834  IN PRTL_BITMAP BitMapHeader,
3835  IN ULONG NumberToFind,
3836  IN ULONG HintIndex
3837  )_FP_;
3838 
3839 _NTFN_EXTERN NTFUNCT( VOID, RtlInitializeBitMap )(
3840  OUT PRTL_BITMAP BitMapHeader,
3841  OPTIN PULONG BitMapBuffer, //__drv_aliasesMem
3842  OPTIN ULONG SizeOfBitMap
3843  )_FP_;
3844 
3845 _NTFN_EXTERN NTFUNCT( ULONG, RtlNumberOfClearBits )(
3846  IN PRTL_BITMAP BitMapHeader
3847  )_FP_;
3848 
3849 _NTFN_EXTERN NTFUNCT( ULONG, RtlNumberOfSetBits )(
3850  IN PRTL_BITMAP BitMapHeader
3851  )_FP_;
3852 
3853 _NTFN_EXTERN NTFUNCT( VOID, RtlSetBit )(
3854  IN PRTL_BITMAP BitMapHeader,
3855  IN ULONG BitNumber //_In_range_(<, BitMapHeader->SizeOfBitMap)
3856  )_FP_;
3857 
3858 _NTFN_EXTERN NTFUNCT( VOID, RtlSetBits )(
3859  IN PRTL_BITMAP BitMapHeader,
3860  IN ULONG StartingIndex, //_In_range_(0, BitMapHeader->SizeOfBitMap - NumberToSet)
3861  IN ULONG NumberToSet //_In_range_(0, BitMapHeader->SizeOfBitMap - StartingIndex)
3862  )_FP_;
3863 
3864 _NTFN_EXTERN NTFUNCT( VOID, RtlSetAllBits )(
3865  IN PRTL_BITMAP BitMapHeader
3866  )_FP_;
3867 
3868 _NTFN_EXTERN NTFUNCT( BOOLEAN, RtlTestBit )(
3869  IN PRTL_BITMAP BitMapHeader,
3870  IN ULONG BitNumber //_In_range_(<, BitMapHeader->SizeOfBitMap)
3871  )_FP_;
3872 
3873 // Timer Functions ------------------------------------------------------------
3874 
3875 _NTFN_EXTERN NTFUNC( RtlCreateTimer )(
3876  IN HANDLE TimerQueue,
3877  IN PHANDLE phNewTimer,
3878  IN WAITORTIMERCALLBACKFUNC Callback,
3879  IN PVOID Parameter,
3880  IN ULONG DueTime,
3881  IN ULONG Period,
3882  IN ULONG Flags
3883  )_FP_;
3884 
3885 _NTFN_EXTERN NTFUNC( RtlCreateTimerQueue )(
3886  OUT PHANDLE TimerQueue
3887  )_FP_;
3888 
3889 _NTFN_EXTERN NTFUNC( RtlDeleteTimer )(
3890  IN HANDLE TimerQueue,
3891  IN HANDLE Timer,
3892  IN HANDLE CompletionEvent
3893  )_FP_;
3894 
3895 _NTFN_EXTERN NTFUNC( RtlUpdateTimer )(
3896  IN HANDLE TimerQueue,
3897  IN HANDLE Timer,
3898  IN ULONG DueTime,
3899  IN ULONG Period
3900  )_FP_;
3901 
3902 _NTFN_EXTERN NTFUNC( RtlDeleteTimerQueueEx )(
3903  IN HANDLE TimerQueue,
3904  OPTIN HANDLE CompletionEvent
3905  )_FP_;
3906 
3907 _NTFN_EXTERN NTFUNC( RtlDeleteTimerQueue )(
3908  HANDLE TimerQueue
3909  )_FP_;
3910 
3911 // SList functions ------------------------------------------------------------
3912 
3913 _NTFN_EXTERN NTFUNCT( PSLIST_ENTRY, InterlockedPushListSList )(
3914  INOUT PSLIST_HEADER ListHead,
3915  INOUT PSLIST_ENTRY List, //__drv_aliasesMem
3916  INOUT PSLIST_ENTRY ListEnd,
3917  IN ULONG Count
3918  )_FP_;
3919 
3920 // Range List functions -------------------------------------------------------
3921 
3922 _NTFN_EXTERN NTFUNCT( VOID, RtlInitializeRangeList )(
3923  INOUT PRTL_RANGE_LIST RangeList
3924  )_FP_;
3925 
3926 _NTFN_EXTERN NTFUNCT( VOID, RtlFreeRangeList )(
3927  IN PRTL_RANGE_LIST RangeList
3928  )_FP_;
3929 
3930 _NTFN_EXTERN NTFUNC( RtlAddRange )(
3931  INOUT PRTL_RANGE_LIST RangeList,
3932  IN ULONGLONG Start,
3933  IN ULONGLONG End,
3934  IN UCHAR Attributes,
3935  IN ULONG Flags,
3936  OPTIN PVOID UserData,
3937  OPTIN PVOID Owner
3938  )_FP_;
3939 
3940 // Debug Functions ------------------------------------------------------------
3941 
3942 // __cdecl
3943 _NTFN_EXTERN NTFUNCC( ULONG, DbgPrint )(
3944  IN PCSTR Format,
3945  ...
3946  )_FP_;
3947 
3948 // __cdecl
3949 _NTFN_EXTERN NTFUNCC( ULONG, DbgPrintEx )(
3950  IN ULONG ComponentId,
3951  IN ULONG Level,
3952  IN PCSTR Format,
3953  ...
3954  )_FP_;
3955 
3956 _NTFN_EXTERN NTFUNCT( ULONG, DbgPrompt )(
3957  IN PCCH Prompt, //_In_z_
3958  OUT PCH Response, //_Out_writes_bytes_(MaximumResponseLength)
3959  IN ULONG MaximumResponseLength
3960  )_FP_;
3961 
3962 #undef DbgBreakPoint
3963 _NTFN_EXTERN NTFUNCT( VOID, DbgBreakPoint )( VOID )_FP_;
3964 
3965 _NTFN_EXTERN NTFUNCT( VOID, DbgLoadImageSymbols )(
3966  IN PSTRING Name,
3967  IN PVOID Base,
3968  IN ULONG_PTR ProcessId
3969  )_FP_;
3970 
3971 _NTFN_EXTERN NTFUNCT( VOID, DbgUnLoadImageSymbols )(
3972  IN PSTRING Name,
3973  IN PVOID Base,
3974  IN ULONG_PTR ProcessId
3975  )_FP_;
3976 
3977 _NTFN_EXTERN NTFUNCT( VOID, DbgCommandString )(
3978  IN PCCH Name,
3979  IN PCCH Command
3980  )_FP_;
3981 
3982 // Handle Table Functions -----------------------------------------------------
3983 
3984 _NTFN_EXTERN NTFUNCT( PRTL_HANDLE_TABLE_ENTRY, RtlAllocateHandle )(
3985  IN PRTL_HANDLE_TABLE HandleTable,
3986  INOUT PULONG Index
3987  )_FP_;
3988 
3989 _NTFN_EXTERN NTFUNCT( VOID, RtlDestroyHandleTable )(
3990  INOUT PRTL_HANDLE_TABLE HandleTable
3991  )_FP_;
3992 
3993 _NTFN_EXTERN NTFUNCT( BOOLEAN, RtlFreeHandle )(
3994  IN PRTL_HANDLE_TABLE HandleTable,
3995  IN PRTL_HANDLE_TABLE_ENTRY Handle
3996  )_FP_;
3997 
3998 _NTFN_EXTERN NTFUNCT( VOID, RtlInitializeHandleTable )(
3999  IN ULONG TableSize,
4000  IN ULONG HandleSize,
4001  IN PRTL_HANDLE_TABLE HandleTable
4002  )_FP_;
4003 
4004 _NTFN_EXTERN NTFUNCT( BOOLEAN, RtlIsValidHandle )(
4005  IN PRTL_HANDLE_TABLE HandleTable,
4006  IN PRTL_HANDLE_TABLE_ENTRY Handle
4007  )_FP_;
4008 
4009 _NTFN_EXTERN NTFUNCT( BOOLEAN, RtlIsValidIndexHandle )(
4010  IN PRTL_HANDLE_TABLE HandleTable,
4011  IN ULONG Index,
4012  OUT PRTL_HANDLE_TABLE_ENTRY *Handle
4013  )_FP_;
4014 
4015 // PE Functions ---------------------------------------------------------------
4016 
4017 _NTFN_EXTERN NTFUNC( RtlFindMessage )(
4018  IN PVOID BaseAddress,
4019  IN ULONG Type,
4020  IN ULONG Language,
4021  IN ULONG MessageId,
4022  OUT PMESSAGE_RESOURCE_ENTRY *MessageResourceEntry
4023  )_FP_;
4024 
4025 _NTFN_EXTERN NTFUNCT( ULONG, RtlGetNtGlobalFlags )( VOID )_FP_;
4026 
4027 _NTFN_EXTERN NTFUNCT( PVOID, RtlImageDirectoryEntryToData )(
4028  IN PVOID BaseAddress,
4029  IN BOOLEAN MappedAsImage,
4030  IN USHORT Directory,
4031  OUT PULONG Size
4032  )_FP_;
4033 
4034 _NTFN_EXTERN NTFUNCT( PVOID, RtlImageRvaToVa )(
4035  IN PIMAGE_NT_HEADERS NtHeader,
4036  IN PVOID BaseAddress,
4037  IN ULONG Rva,
4038  OPTIO PIMAGE_SECTION_HEADER *SectionHeader
4039  )_FP_;
4040 
4041 _NTFN_EXTERN NTFUNCT( PIMAGE_NT_HEADERS, RtlImageNtHeader )(
4042  IN PVOID BaseAddress
4043  )_FP_;
4044 
4045 _NTFN_EXTERN NTFUNCT( NTSTATUS, RtlImageNtHeaderEx )(
4046  IN ULONG Flags,
4047  IN PVOID BaseAddress,
4048  IN ULONGLONG Size,
4049  OUT PIMAGE_NT_HEADERS *NtHeader
4050  )_FP_;
4051 
4052 _NTFN_EXTERN NTFUNCT( PIMAGE_SECTION_HEADER, RtlImageRvaToSection )(
4053  IN PIMAGE_NT_HEADERS NtHeader,
4054  IN PVOID BaseAddress,
4055  IN ULONG Rva
4056  )_FP_;
4057 
4058 _NTFN_EXTERN NTFUNCT( ULONG, LdrRelocateImageWithBias )(
4059  IN PVOID NewAddress,
4060  IN LONGLONG AdditionalBias,
4061  IN PCCH LoaderName,
4062  IN ULONG Success,
4063  IN ULONG Conflict,
4064  IN ULONG Invalid
4065  )_FP_;
4066 
4067 // Activation Context Functions -----------------------------------------------
4068 
4069 _NTFN_EXTERN NTFUNC( RtlActivateActivationContextEx )(
4070  IN ULONG Flags,
4071  IN PTEB Teb,
4072  IN PVOID Context,
4073  OUT PULONG_PTR Cookie
4074  )_FP_;
4075 
4076 _NTFN_EXTERN NTFUNC( RtlActivateActivationContext )(
4077  IN ULONG Flags,
4078  IN HANDLE Handle,
4079  OUT PULONG_PTR Cookie
4080  )_FP_;
4081 
4082 _NTFN_EXTERN NTFUNCT( VOID, RtlAddRefActivationContext )(
4083  IN PVOID Context
4084  )_FP_;
4085 
4086 _NTFN_EXTERN NTFUNCT( PRTL_ACTIVATION_CONTEXT_STACK_FRAME, RtlActivateActivationContextUnsafeFast )(
4087  IN PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED Frame,
4088  IN PVOID Context
4089  )_FP_;
4090 
4091 _NTFN_EXTERN NTFUNC( RtlAllocateActivationContextStack )(
4092  IN PACTIVATION_CONTEXT_STACK *Stack
4093  )_FP_;
4094 
4095 _NTFN_EXTERN NTFUNC( RtlCreateActivationContext )(
4096  IN ULONG Flags,
4097  IN PACTIVATION_CONTEXT_DATA ActivationContextData,
4098  IN ULONG ExtraBytes,
4099  IN PVOID NotificationRoutine,
4100  IN PVOID NotificationContext,
4101  OUT PACTIVATION_CONTEXT *ActCtx
4102  )_FP_;
4103 
4104 _NTFN_EXTERN NTFUNC( RtlGetActiveActivationContext )(
4105  IN PVOID *Context
4106  )_FP_;
4107 
4108 _NTFN_EXTERN NTFUNCT( VOID, RtlReleaseActivationContext )(
4109  IN HANDLE handle
4110  )_FP_;
4111 
4112 _NTFN_EXTERN NTFUNC( RtlDeactivateActivationContext )(
4113  IN ULONG dwFlags,
4114  IN ULONG_PTR ulCookie
4115  )_FP_;
4116 
4117 _NTFN_EXTERN NTFUNCT( VOID, RtlFreeActivationContextStack )(
4118  IN PACTIVATION_CONTEXT_STACK Stack
4119  )_FP_;
4120 
4121 _NTFN_EXTERN NTFUNCT( VOID, RtlFreeThreadActivationContextStack )( VOID )_FP_;
4122 
4123 _NTFN_EXTERN NTFUNCT( PRTL_ACTIVATION_CONTEXT_STACK_FRAME, RtlDeactivateActivationContextUnsafeFast )(
4124  IN PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED Frame
4125  )_FP_;
4126 
4127 _NTFN_EXTERN NTFUNC( RtlDosApplyFileIsolationRedirection_Ustr )(
4128  IN ULONG Flags,
4129  IN PUNICODE_STRING OriginalName,
4130  IN PUNICODE_STRING Extension,
4131  INOUT PUNICODE_STRING StaticString,
4132  INOUT PUNICODE_STRING DynamicString,
4133  INOUT PUNICODE_STRING *NewName,
4134  IN PULONG NewFlags,
4135  IN PSIZE_T FileNameSize,
4136  IN PSIZE_T RequiredLength
4137  )_FP_;
4138 
4139 _NTFN_EXTERN NTFUNC( RtlFindActivationContextSectionString )(
4140  IN ULONG dwFlags,
4141  IN const GUID *ExtensionGuid,
4142  IN ULONG SectionType,
4143  IN const UNICODE_STRING *SectionName,
4144  INOUT PVOID ReturnedData
4145  )_FP_;
4146 
4147 _NTFN_EXTERN NTFUNC( RtlQueryInformationActivationContext )(
4148  IN DWORD dwFlags,
4149  OPTIN PVOID Context,
4150  OPTIN PVOID pvSubInstance,
4151  IN ULONG ulInfoClass,
4152  OUT PVOID pvBuffer, //_Out_bytecap_(cbBuffer)
4153  OPTIN SIZE_T cbBuffer,
4154  OPTOUT SIZE_T *pcbWrittenOrRequired
4155  )_FP_;
4156 
4157 _NTFN_EXTERN NTFUNC( RtlQueryInformationActiveActivationContext )(
4158  IN ULONG ulInfoClass,
4159  OUT PVOID pvBuffer, //_Out_bytecap_(cbBuffer)
4160  OPTIN SIZE_T cbBuffer,
4161  OPTOUT SIZE_T *pcbWrittenOrRequired
4162  )_FP_;
4163 
4164 _NTFN_EXTERN NTFUNC( RtlZombifyActivationContext )(
4165  PVOID Context
4166  )_FP_;
4167 
4168 // WOW64 Functions ------------------------------------------------------------
4169 
4170 _NTFN_EXTERN NTFUNC( RtlWow64EnableFsRedirection )(
4171  IN BOOLEAN Wow64FsEnableRedirection
4172  )_FP_;
4173 
4174 _NTFN_EXTERN NTFUNC( RtlWow64EnableFsRedirectionEx )(
4175  IN PVOID Wow64FsEnableRedirection,
4176  OUT PVOID *OldFsRedirectionLevel
4177  )_FP_;
4178 
4179 // Registry Functions ---------------------------------------------------------
4180 
4181 _NTFN_EXTERN NTFUNC( RtlCheckRegistryKey )(
4182  IN ULONG RelativeTo,
4183  IN PWSTR Path
4184  )_FP_;
4185 
4186 _NTFN_EXTERN NTFUNC( RtlCreateRegistryKey )(
4187  IN ULONG RelativeTo,
4188  IN PWSTR Path
4189  )_FP_;
4190 
4191 _NTFN_EXTERN NTFUNC( RtlFormatCurrentUserKeyPath )(
4192  OUT PUNICODE_STRING KeyPath
4193  )_FP_;
4194 
4195 _NTFN_EXTERN NTFUNC( RtlOpenCurrentUser )(
4196  IN ACCESS_MASK DesiredAccess,
4197  OUT PHANDLE KeyHandle
4198  )_FP_;
4199 
4200 _NTFN_EXTERN NTFUNC( RtlQueryRegistryValues )(
4201  IN ULONG RelativeTo,
4202  IN PCWSTR Path,
4203  INOUT PRTL_QUERY_REGISTRY_TABLE QueryTable,
4204  OPTIN PVOID Context,
4205  OPTIN PVOID Environment
4206  )_FP_;
4207 
4208 _NTFN_EXTERN NTFUNC( RtlWriteRegistryValue )(
4209  IN ULONG RelativeTo,
4210  IN PCWSTR Path,
4211  IN PCWSTR ValueName,
4212  IN ULONG ValueType,
4213  IN PVOID ValueData,
4214  IN ULONG ValueLength
4215  )_FP_;
4216 
4217 _NTFN_EXTERN NTFUNC( RtlpNtCreateKey )(
4218  OUT HANDLE KeyHandle,
4219  IN ACCESS_MASK DesiredAccess,
4220  IN POBJECT_ATTRIBUTES ObjectAttributes,
4221  IN ULONG TitleIndex,
4222  IN PUNICODE_STRING Class,
4223  OUT PULONG Disposition
4224  )_FP_;
4225 
4226 _NTFN_EXTERN NTFUNC( RtlpNtEnumerateSubKey )(
4227  IN HANDLE KeyHandle,
4228  INOUT PUNICODE_STRING SubKeyName,
4229  IN ULONG Index,
4230  IN ULONG Unused
4231  )_FP_;
4232 
4233 _NTFN_EXTERN NTFUNC( RtlpNtMakeTemporaryKey )(
4234  IN HANDLE KeyHandle
4235  )_FP_;
4236 
4237 _NTFN_EXTERN NTFUNC( RtlpNtOpenKey )(
4238  OUT HANDLE KeyHandle,
4239  IN ACCESS_MASK DesiredAccess,
4240  IN POBJECT_ATTRIBUTES ObjectAttributes,
4241  IN ULONG Unused
4242  )_FP_;
4243 
4244 _NTFN_EXTERN NTFUNC( RtlpNtQueryValueKey )(
4245  IN HANDLE KeyHandle,
4246  OPTOUT PULONG Type,
4247  OPTOUT PVOID Data,
4248  OPTIO PULONG DataLength,
4249  IN ULONG Unused
4250  )_FP_;
4251 
4252 _NTFN_EXTERN NTFUNC( RtlpNtSetValueKey )(
4253  IN HANDLE KeyHandle,
4254  IN ULONG Type,
4255  IN PVOID Data,
4256  IN ULONG DataLength
4257  )_FP_;
4258 
4270 
4271 _NTFN_EXTERN NTFUNC( NtRenameKey )(
4272  IN HANDLE KeyHandle,
4273  IN PUNICODE_STRING NewName
4274  )_FP_;
4275 
4276 // NLS Functions --------------------------------------------------------------
4277 
4278 _NTFN_EXTERN NTFUNCT( VOID, RtlGetDefaultCodePage )(
4279  OUT PUSHORT AnsiCodePage,
4280  OUT PUSHORT OemCodePage
4281  )_FP_;
4282 
4283 _NTFN_EXTERN NTFUNCT( VOID, RtlInitNlsTables )(
4284  IN PUSHORT AnsiTableBase,
4285  IN PUSHORT OemTableBase,
4286  IN PUSHORT CaseTableBase,
4287  OUT PNLSTABLEINFO NlsTable
4288  )_FP_;
4289 
4290 _NTFN_EXTERN NTFUNCT( VOID, RtlInitCodePageTable )(
4291  IN PUSHORT TableBase,
4292  OUT PCPTABLEINFO CodePageTable
4293  )_FP_;
4294 
4295 _NTFN_EXTERN NTFUNCT( VOID, RtlResetRtlTranslations )(
4296  IN PNLSTABLEINFO NlsTable
4297  )_FP_;
4298 
4299 // Misc conversion functions --------------------------------------------------
4300 
4301 #if !defined(NO_RTL_INLINES)
4302 
4303 static __inline LARGE_INTEGER NTAPI_INLINE
4304  RtlConvertLongToLargeInteger( IN LONG SignedInteger )
4305  {
4306  LARGE_INTEGER Result;
4307  Result.QuadPart = SignedInteger;
4308  return Result;
4309  }
4310 
4311 static __inline LARGE_INTEGER NTAPI_INLINE
4312  RtlEnlargedIntegerMultiply( IN LONG Multiplicand, IN LONG Multiplier )
4313  {
4314  LARGE_INTEGER Product;
4315  Product.QuadPart = (LONGLONG)Multiplicand * (ULONGLONG)Multiplier;
4316  return Product;
4317  }
4318 
4319 static __inline ULONG NTAPI_INLINE
4320  RtlEnlargedUnsignedDivide( IN ULARGE_INTEGER Dividend, IN ULONG Divisor, OPTIN PULONG Remainder )
4321  {
4322  ULONG Quotient;
4323  Quotient = (ULONG)(Dividend.QuadPart / Divisor);
4324  if (Remainder) *Remainder = (ULONG)(Dividend.QuadPart % Divisor);
4325  return Quotient;
4326  }
4327 
4328 static __inline LARGE_INTEGER NTAPI_INLINE
4329  RtlEnlargedUnsignedMultiply( IN ULONG Multiplicand, IN ULONG Multiplier )
4330  {
4331  LARGE_INTEGER Product;
4332  Product.QuadPart = (ULONGLONG)Multiplicand * (ULONGLONG)Multiplier;
4333  return Product;
4334  }
4335 
4336 #if defined(_AMD64_) || defined(_IA64_)
4337 static __inline LARGE_INTEGER NTAPI_INLINE
4338  RtlExtendedLargeIntegerDivide( IN LARGE_INTEGER Dividend, IN ULONG Divisor, OPTOUT PULONG Remainder )
4339  {
4340  LARGE_INTEGER ret;
4341  ret.QuadPart = (ULONG64)Dividend.QuadPart / Divisor;
4342  if (Remainder) *Remainder = (ULONG)(Dividend.QuadPart % Divisor);
4343  return ret;
4344  }
4345 #define defined_RtlExtendedLargeIntegerDivide
4346 #endif // defined(_AMD64_) || defined(_IA64_)
4347 #endif
4348 
4349 #ifndef defined_RtlExtendedLargeIntegerDivide
4350 _NTFN_EXTERN NTFUNCT( LARGE_INTEGER, RtlExtendedLargeIntegerDivide )(
4351  IN LARGE_INTEGER Dividend, IN ULONG Divisor, OPTOUT PULONG Remainder
4352  )_FP_;
4353 #endif
4354 
4355 _NTFN_EXTERN NTFUNCT( ULONG, RtlUniform )(
4356  IN PULONG Seed
4357  )_FP_;
4358 
4359 _NTFN_EXTERN NTFUNCT( ULONG, RtlRandom )(
4360  INOUT PULONG Seed
4361  )_FP_;
4362 
4363 _NTFN_EXTERN NTFUNCT( ULONG, RtlComputeCrc32 )(
4364  IN ULONG InitialCrc,
4365  IN PUCHAR Buffer,
4366  IN ULONG Length
4367  )_FP_;
4368 
4369 // Network Functions ----------------------------------------------------------
4370 
4371 _NTFN_EXTERN NTFUNCT( LPSTR, RtlIpv4AddressToStringA )(
4372  IN const struct in_addr *Addr,
4373  OUT PCHAR S //_Out_writes_(16)
4374  )_FP_;
4375 
4376 _NTFN_EXTERN NTFUNCT( PWSTR, RtlIpv4AddressToStringW )(
4377  IN const struct in_addr *Addr,
4378  OUT PWCHAR S //_Out_writes_(16)
4379  )_FP_;
4380 
4381 _NTFN_EXTERN NTFUNC( RtlIpv4AddressToStringExA )(
4382  IN const struct in_addr *Address,
4383  IN USHORT Port,
4384  OUT PCHAR AddressString, //_Out_writes_to_(*AddressStringLength, *AddressStringLength)
4385  INOUT PULONG AddressStringLength
4386  )_FP_;
4387 
4388 _NTFN_EXTERN NTFUNC( RtlIpv4AddressToStringExW )(
4389  IN const struct in_addr *Address,
4390  IN USHORT Port,
4391  OUT PWCHAR AddressString, //_Out_writes_to_(*AddressStringLength, *AddressStringLength)
4392  INOUT PULONG AddressStringLength
4393  )_FP_;
4394 
4395 _NTFN_EXTERN NTFUNC( RtlIpv4StringToAddressA )(
4396  IN PCSTR String,
4397  IN BOOLEAN Strict,
4398  OUT PCSTR *Terminator,
4399  OUT struct in_addr *Addr
4400  )_FP_;
4401 
4402 _NTFN_EXTERN NTFUNC( RtlIpv4StringToAddressW )(
4403  IN PCWSTR String,
4404  IN BOOLEAN Strict,
4405  OUT PCWSTR *Terminator,
4406  OUT struct in_addr *Addr
4407  )_FP_;
4408 
4409 _NTFN_EXTERN NTFUNC( RtlIpv4StringToAddressExA )(
4410  IN PCSTR AddressString,
4411  IN BOOLEAN Strict,
4412  OUT struct in_addr *Address,
4413  OUT PUSHORT Port
4414  )_FP_;
4415 
4416 _NTFN_EXTERN NTFUNC( RtlIpv4StringToAddressExW )(
4417  IN PCWSTR AddressString,
4418  IN BOOLEAN Strict,
4419  OUT struct in_addr *Address,
4420  OUT PUSHORT Port
4421  )_FP_;
4422 
4423 _NTFN_EXTERN NTFUNCT( LPSTR, RtlIpv6AddressToStringA )(
4424  IN const struct in6_addr *Addr,
4425  OUT TSTR S //_Out_writes_(46)
4426  )_FP_;
4427 
4428 _NTFN_EXTERN NTFUNCT( PWSTR, RtlIpv6AddressToStringW )(
4429  IN const struct in6_addr *Addr,
4430  OUT PWSTR S //_Out_writes_(46)
4431  )_FP_;
4432 
4433 _NTFN_EXTERN NTFUNC( RtlIpv6AddressToStringExA )(
4434  IN const struct in6_addr *Address,
4435  IN ULONG ScopeId,
4436  IN USHORT Port,
4437  OUT TSTR AddressString,
4438  INOUT PULONG AddressStringLength
4439  )_FP_;
4440 
4441 _NTFN_EXTERN NTFUNC( RtlIpv6AddressToStringExW )(
4442  IN const struct in6_addr *Address,
4443  IN ULONG ScopeId,
4444  IN USHORT Port,
4445  OUT PWCHAR AddressString,
4446  INOUT PULONG AddressStringLength
4447  )_FP_;
4448 
4449 _NTFN_EXTERN NTFUNC( RtlIpv6StringToAddressA )(
4450  IN PCSTR String,
4451  OUT PCSTR *Terminator,
4452  OUT struct in6_addr *Addr
4453  )_FP_;
4454 
4455 _NTFN_EXTERN NTFUNC( RtlIpv6StringToAddressW )(
4456  IN PCWSTR String,
4457  OUT PCWSTR *Terminator,
4458  OUT struct in6_addr *Addr
4459  )_FP_;
4460 
4461 _NTFN_EXTERN NTFUNC( RtlIpv6StringToAddressExA )(
4462  IN PCSTR AddressString,
4463  OUT struct in6_addr *Address,
4464  OUT PULONG ScopeId,
4465  OUT PUSHORT Port
4466  )_FP_;
4467 
4468 _NTFN_EXTERN NTFUNC( RtlIpv6StringToAddressExW )(
4469  IN PCWSTR AddressString,
4470  OUT struct in6_addr *Address,
4471  OUT PULONG ScopeId,
4472  OUT PUSHORT Port
4473  )_FP_;
4474 
4475 // Time Functions
4476 
4477 _NTFN_EXTERN NTFUNC( RtlQueryTimeZoneInformation )(
4478  OUT PRTL_TIME_ZONE_INFORMATION TimeZoneInformation
4479  )_FP_;
4480 
4481 _NTFN_EXTERN NTFUNCT( VOID, RtlSecondsSince1970ToTime )(
4482  IN ULONG SecondsSince1970,
4483  OUT PLARGE_INTEGER Time
4484  )_FP_;
4485 
4486 _NTFN_EXTERN NTFUNC( RtlSetTimeZoneInformation )(
4487  IN PRTL_TIME_ZONE_INFORMATION TimeZoneInformation
4488  )_FP_;
4489 
4490 _NTFN_EXTERN NTFUNCT( BOOLEAN, RtlTimeFieldsToTime )(
4491  IN PTIME_FIELDS TimeFields,
4492  OUT PLARGE_INTEGER Time
4493  )_FP_;
4494 
4495 _NTFN_EXTERN NTFUNCT( BOOLEAN, RtlTimeToSecondsSince1970 )(
4496  IN PLARGE_INTEGER Time,
4497  OUT PULONG ElapsedSeconds
4498  )_FP_;
4499 
4500 _NTFN_EXTERN NTFUNCT( VOID, RtlTimeToTimeFields )(
4501  PLARGE_INTEGER Time,
4502  PTIME_FIELDS TimeFields
4503  )_FP_;
4504 
4505 _NTFN_EXTERN NTFUNC( RtlSystemTimeToLocalTime )(
4506  IN PLARGE_INTEGER SystemTime,
4507  OUT PLARGE_INTEGER LocalTime
4508  )_FP_;
4509 
4510 // Version Functions ----------------------------------------------------------
4511 
4512 _NTFN_EXTERN NTFUNC( RtlVerifyVersionInfo )(
4513  IN PRTL_OSVERSIONINFOEXW VersionInfo,
4514  IN ULONG TypeMask,
4515  IN ULONGLONG ConditionMask
4516  )_FP_;
4517 
4518 _NTFN_EXTERN NTFUNC( RtlGetVersion )(
4519  OUT PRTL_OSVERSIONINFOW lpVersionInformation
4520  )_FP_;
4521 
4522 _NTFN_EXTERN NTFUNCT( BOOLEAN, RtlGetNtProductType )(
4523  OUT PNT_PRODUCT_TYPE ProductType
4524  )_FP_;
4525 
4526 // Secure Memory Functions ----------------------------------------------------
4527 
4528 _NTFN_EXTERN NTFUNC( RtlRegisterSecureMemoryCacheCallback )(
4529  IN PRTL_SECURE_MEMORY_CACHE_CALLBACK Callback
4530  )_FP_;
4531 
4532 _NTFN_EXTERN NTFUNCT( BOOLEAN, RtlFlushSecureMemoryCache )(
4533  IN PVOID MemoryCache,
4534  OPTIN SIZE_T MemoryLength
4535  )_FP_;
4536 
4537 // Boot Status Data Functions -------------------------------------------------
4538 
4539 _NTFN_EXTERN NTFUNC( RtlCreateBootStatusDataFile )( VOID )_FP_;
4540 
4541 _NTFN_EXTERN NTFUNC( RtlGetSetBootStatusData )(
4542  IN HANDLE FileHandle,
4543  IN BOOLEAN WriteMode,
4544  IN RTL_BSD_ITEM_TYPE DataClass,
4545  IN PVOID Buffer,
4546  IN ULONG BufferSize,
4547  OPTOUT PULONG ReturnLength
4548  )_FP_;
4549 
4550 _NTFN_EXTERN NTFUNC( RtlLockBootStatusData )(
4551  OUT PHANDLE FileHandle
4552  )_FP_;
4553 
4554 _NTFN_EXTERN NTFUNC( RtlUnlockBootStatusData )(
4555  IN HANDLE FileHandle
4556  )_FP_;
4557 
4558 _NTFN_EXTERN NTFUNC( RtlGUIDFromString )(
4559  IN PUNICODE_STRING GuidString,
4560  OUT GUID *Guid
4561  )_FP_;
4562 
4563 _NTFN_EXTERN NTFUNC( RtlStringFromGUID )(
4564  IN REFGUID Guid,
4565  OUT PUNICODE_STRING GuidString
4566  )_FP_;
4567 
4568 _NTFN_EXTERN NTFUNC( RtlComputeImportTableHash )(
4569  IN HANDLE hFile,
4570  OUT PCHAR Hash,
4571  IN ULONG ImportTableHashRevision
4572  )_FP_;
4573 
4574 // MemoryStream functions -----------------------------------------------------
4575 
4577 _NTFN_EXTERN NTFUNCT( VOID, RtlInitMemoryStream )(
4578  OUT PRTL_MEMORY_STREAM Stream
4579  )_FP_;
4580 
4581 _NTFN_EXTERN NTFUNCT( VOID, RtlInitOutOfProcessMemoryStream )(
4582  OUT PRTL_MEMORY_STREAM Stream
4583  )_FP_;
4584 
4585 _NTFN_EXTERN NTFUNCT( VOID, RtlFinalReleaseOutOfProcessMemoryStream )(
4586  IN PRTL_MEMORY_STREAM Stream
4587  )_FP_;
4588 
4589 _NTFN_EXTERN NTFUNCT( HRESULT, RtlQueryInterfaceMemoryStream )(
4590  IN struct IStream *This,
4591  IN REFIID RequestedIid,
4592  OUT PVOID *ResultObject //_Outptr_
4593  )_FP_;
4594 
4595 _NTFN_EXTERN NTFUNCT( ULONG, RtlAddRefMemoryStream )(
4596  IN struct IStream *This
4597  )_FP_;
4598 
4599 _NTFN_EXTERN NTFUNCT( ULONG, RtlReleaseMemoryStream )(
4600  IN struct IStream *This
4601  )_FP_;
4602 
4603 _NTFN_EXTERN NTFUNCT( HRESULT, RtlReadMemoryStream )(
4604  IN struct IStream *This,
4605  OUT PVOID Buffer, //_Out_writes_bytes_(Length)
4606  IN ULONG Length,
4607  OPTOUT PULONG BytesRead
4608  )_FP_;
4609 
4610 _NTFN_EXTERN NTFUNCT( HRESULT, RtlReadOutOfProcessMemoryStream )(
4611  IN struct IStream *This,
4612  OUT PVOID Buffer, //_Out_writes_bytes_(Length)
4613  IN ULONG Length,
4614  OPTOUT PULONG BytesRead
4615  )_FP_;
4616 
4617 _NTFN_EXTERN NTFUNCT( HRESULT, RtlSeekMemoryStream )(
4618  IN struct IStream *This,
4619  IN LARGE_INTEGER RelativeOffset,
4620  IN ULONG Origin,
4621  OPTOUT PULARGE_INTEGER ResultOffset
4622  )_FP_;
4623 
4624 _NTFN_EXTERN NTFUNCT( HRESULT, RtlCopyMemoryStreamTo )(
4625  IN struct IStream *This,
4626  IN struct IStream *Target,
4627  IN ULARGE_INTEGER Length,
4628  OPTOUT PULARGE_INTEGER BytesRead,
4629  OPTOUT PULARGE_INTEGER BytesWritten
4630  )_FP_;
4631 
4632 _NTFN_EXTERN NTFUNCT( HRESULT, RtlCopyOutOfProcessMemoryStreamTo )(
4633  IN struct IStream *This,
4634  IN struct IStream *Target,
4635  IN ULARGE_INTEGER Length,
4636  OPTOUT PULARGE_INTEGER BytesRead,
4637  OPTOUT PULARGE_INTEGER BytesWritten
4638  )_FP_;
4639 
4640 _NTFN_EXTERN NTFUNCT( HRESULT, RtlStatMemoryStream )(
4641  IN struct IStream *This,
4642  OUT struct tagSTATSTG *Stats,
4643  IN ULONG Flags
4644  )_FP_;
4645 
4646 // Dummy functions ------------------------------------------------------------
4647 
4648 _NTFN_EXTERN NTFUNCT( HRESULT, RtlWriteMemoryStream )(
4649  IN struct IStream *This,
4650  IN CONST VOID *Buffer, //_In_reads_bytes_(Length)
4651  IN ULONG Length,
4652  OPTOUT PULONG BytesWritten
4653  )_FP_;
4654 
4655 _NTFN_EXTERN NTFUNCT( HRESULT, RtlSetMemoryStreamSize )(
4656  IN struct IStream *This,
4657  IN ULARGE_INTEGER NewSize
4658  )_FP_;
4659 
4660 _NTFN_EXTERN NTFUNCT( HRESULT, RtlCommitMemoryStream )(
4661  IN struct IStream *This,
4662  IN ULONG CommitFlags
4663  )_FP_;
4664 
4665 _NTFN_EXTERN NTFUNCT( HRESULT, RtlRevertMemoryStream )(
4666  IN struct IStream *This
4667  )_FP_;
4668 
4669 _NTFN_EXTERN NTFUNCT( HRESULT, RtlLockMemoryStreamRegion )(
4670  IN struct IStream *This,
4671  IN ULARGE_INTEGER Offset,
4672  IN ULARGE_INTEGER Length,
4673  IN ULONG LockType
4674  )_FP_;
4675 
4676 _NTFN_EXTERN NTFUNCT( HRESULT, RtlUnlockMemoryStreamRegion )(
4677  IN struct IStream *This,
4678  IN ULARGE_INTEGER Offset,
4679  IN ULARGE_INTEGER Length,
4680  IN ULONG LockType
4681  )_FP_;
4682 
4683 _NTFN_EXTERN NTFUNCT( HRESULT, RtlCloneMemoryStream )(
4684  IN struct IStream *This,
4685  OUT struct IStream **ResultStream
4686  )_FP_;
4687 
4688 _NTFN_EXTERN NTFUNC( RtlFindActivationContextSectionGuid )(
4689  ULONG flags,
4690  const GUID *extguid,
4691  ULONG section_kind,
4692  const GUID *guid,
4693  void *ptr
4694  )_FP_;
4695 
4696 // RTL Splay Tree Functions ---------------------------------------------------
4697 
4698 _NTFN_EXTERN NTFUNCT( PRTL_SPLAY_LINKS, RtlSplay )(
4699  INOUT PRTL_SPLAY_LINKS Links
4700  )_FP_;
4701 
4702 _NTFN_EXTERN NTFUNCT( PRTL_SPLAY_LINKS, RtlDelete )(
4703  IN PRTL_SPLAY_LINKS Links
4704  )_FP_;
4705 
4706 _NTFN_EXTERN NTFUNCT( VOID, RtlDeleteNoSplay )(
4707  IN PRTL_SPLAY_LINKS Links,
4708  INOUT PRTL_SPLAY_LINKS *Root
4709  )_FP_;
4710 
4711 _NTFN_EXTERN NTFUNCT( PRTL_SPLAY_LINKS, RtlSubtreeSuccessor )(
4712  IN PRTL_SPLAY_LINKS Links
4713  )_FP_;
4714 
4715 _NTFN_EXTERN NTFUNCT( PRTL_SPLAY_LINKS, RtlSubtreePredecessor )(
4716  IN PRTL_SPLAY_LINKS Links
4717  )_FP_;
4718 
4719 _NTFN_EXTERN NTFUNCT( PRTL_SPLAY_LINKS, RtlRealSuccessor )(
4720  IN PRTL_SPLAY_LINKS Links
4721  )_FP_;
4722 
4723 _NTFN_EXTERN NTFUNCT( PRTL_SPLAY_LINKS, RtlRealPredecessor )(
4724  IN PRTL_SPLAY_LINKS Links
4725  )_FP_;
4726 
4727 #ifndef RtlIsLeftChild
4728 #define RtlIsLeftChild( Links ) \
4729  (RtlLeftChild( RtlParent( Links )) == (PRTL_SPLAY_LINKS)(Links))
4730 
4731 #define RtlIsRightChild( Links ) \
4732  (RtlRightChild( RtlParent( Links )) == (PRTL_SPLAY_LINKS)(Links))
4733 
4734 #define RtlRightChild( Links ) \
4735  ((PRTL_SPLAY_LINKS)(Links))->RightChild
4736 
4737 #define RtlIsRoot( Links ) \
4738  (RtlParent( Links ) == (PRTL_SPLAY_LINKS)(Links))
4739 
4740 #define RtlLeftChild( Links ) \
4741  ((PRTL_SPLAY_LINKS)(Links))->LeftChild
4742 
4743 #define RtlParent( Links ) \
4744  ((PRTL_SPLAY_LINKS)(Links))->Parent
4745 
4746 #define RtlInitializeSplayLinks( Links ) \
4747  { \
4748  PRTL_SPLAY_LINKS _SplayLinks; \
4749  _SplayLinks = (PRTL_SPLAY_LINKS)(Links); \
4750  _SplayLinks->Parent = _SplayLinks; \
4751  _SplayLinks->LeftChild = NULL; \
4752  _SplayLinks->RightChild = NULL; \
4753  }
4754 
4755 #define RtlInsertAsLeftChild( ParentLinks, ChildLinks ) \
4756  { \
4757  PRTL_SPLAY_LINKS _SplayParent; \
4758  PRTL_SPLAY_LINKS _SplayChild; \
4759  _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
4760  _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \
4761  _SplayParent->LeftChild = _SplayChild; \
4762  _SplayChild->Parent = _SplayParent; \
4763  }
4764 
4765 #define RtlInsertAsRightChild( ParentLinks, ChildLinks ) \
4766  { \
4767  PRTL_SPLAY_LINKS _SplayParent; \
4768  PRTL_SPLAY_LINKS _SplayChild; \
4769  _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
4770  _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \
4771  _SplayParent->RightChild = _SplayChild; \
4772  _SplayChild->Parent = _SplayParent; \
4773  }
4774 #endif//ndef RtlIsLeftChild
4775 
4776 // RTL AVL Tree Functions -----------------------------------------------------
4777 
4778 _NTFN_EXTERN NTFUNCT( VOID, RtlInitializeGenericTableAvl )(
4779  OUT PRTL_AVL_TABLE Table,
4780  IN PRTL_AVL_COMPARE_ROUTINE CompareRoutine,
4781  OPTIN PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine,
4782  OPTIN PRTL_AVL_FREE_ROUTINE FreeRoutine,
4783  OPTIN PVOID TableContext
4784  )_FP_;
4785 
4786 _NTFN_EXTERN NTFUNCT( PVOID, RtlInsertElementGenericTableAvl )(
4787  IN PRTL_AVL_TABLE Table,
4788  IN PVOID Buffer, //_In_reads_bytes_(BufferSize)
4789  IN CLONG BufferSize,
4790  OPTOUT PBOOLEAN NewElement
4791  )_FP_;
4792 
4793 _NTFN_EXTERN NTFUNCT( PVOID, RtlInsertElementGenericTableFullAvl )(
4794  IN PRTL_AVL_TABLE Table,
4795  IN PVOID Buffer, //_In_reads_bytes_(BufferSize)
4796  IN CLONG BufferSize,
4797  OPTOUT PBOOLEAN NewElement,
4798  IN PVOID NodeOrParent,
4799  IN TABLE_SEARCH_RESULT SearchResult
4800  )_FP_;
4801 
4802 _NTFN_EXTERN NTFUNCT( BOOLEAN, RtlDeleteElementGenericTableAvl )(
4803  IN PRTL_AVL_TABLE Table,
4804  IN PVOID Buffer
4805  )_FP_;
4806 
4807 _NTFN_EXTERN NTFUNCT( PVOID, RtlLookupElementGenericTableAvl )(
4808  IN PRTL_AVL_TABLE Table,
4809  IN PVOID Buffer
4810  )_FP_;
4811 
4812 _NTFN_EXTERN NTFUNCT( PVOID, RtlLookupElementGenericTableFullAvl )(
4813  IN PRTL_AVL_TABLE Table,
4814  IN PVOID Buffer,
4815  OUT PVOID *NodeOrParent,
4816  OUT TABLE_SEARCH_RESULT *SearchResult
4817  )_FP_;
4818 
4819 _NTFN_EXTERN NTFUNCT( PVOID, RtlEnumerateGenericTableAvl )(
4820  IN PRTL_AVL_TABLE Table,
4821  IN BOOLEAN Restart
4822  )_FP_;
4823 
4824 _NTFN_EXTERN NTFUNCT( PVOID, RtlEnumerateGenericTableWithoutSplayingAvl )(
4825  IN PRTL_AVL_TABLE Table,
4826  INOUT PVOID *RestartKey
4827  )_FP_;
4828 
4829 _NTFN_EXTERN NTFUNCT( PVOID, RtlLookupFirstMatchingElementGenericTableAvl )(
4830  IN PRTL_AVL_TABLE Table,
4831  IN PVOID Buffer,
4832  OUT PVOID *RestartKey
4833  )_FP_;
4834 
4835 _NTFN_EXTERN NTFUNCT( PVOID, RtlEnumerateGenericTableLikeADirectory )(
4836  IN PRTL_AVL_TABLE Table,
4837  OPTIN PRTL_AVL_MATCH_FUNCTION MatchFunction,
4838  OPTIN PVOID MatchData,
4839  IN ULONG NextFlag,
4840  INOUT PVOID *RestartKey,
4841  INOUT PULONG DeleteCount,
4842  IN PVOID Buffer
4843  )_FP_;
4844 
4845 _NTFN_EXTERN NTFUNCT( PVOID, RtlGetElementGenericTableAvl )(
4846  IN PRTL_AVL_TABLE Table,
4847  IN ULONG I
4848  )_FP_;
4849 
4850 _NTFN_EXTERN NTFUNCT( ULONG, RtlNumberGenericTableElementsAvl )(
4851  IN PRTL_AVL_TABLE Table
4852  )_FP_;
4853 
4854 _NTFN_EXTERN NTFUNCT( BOOLEAN, RtlIsGenericTableEmptyAvl )(
4855  IN PRTL_AVL_TABLE Table
4856  )_FP_;
4857 
4858 // RTL Generic Table Functions ------------------------------------------------
4859 
4860 #ifdef RTL_USE_AVL_TABLES
4861 
4862 #define RtlInitializeGenericTable RtlInitializeGenericTableAvl
4863 #define RtlInsertElementGenericTable RtlInsertElementGenericTableAvl
4864 #define RtlInsertElementGenericTableFull RtlInsertElementGenericTableFullAvl
4865 #define RtlDeleteElementGenericTable RtlDeleteElementGenericTableAvl
4866 #define RtlLookupElementGenericTable RtlLookupElementGenericTableAvl
4867 #define RtlLookupElementGenericTableFull RtlLookupElementGenericTableFullAvl
4868 #define RtlEnumerateGenericTable RtlEnumerateGenericTableAvl
4869 #define RtlEnumerateGenericTableWithoutSplaying RtlEnumerateGenericTableWithoutSplayingAvl
4870 #define RtlGetElementGenericTable RtlGetElementGenericTableAvl
4871 #define RtlNumberGenericTableElements RtlNumberGenericTableElementsAvl
4872 #define RtlIsGenericTableEmpty RtlIsGenericTableEmptyAvl
4873 
4874 #else
4875 
4876 _NTFN_EXTERN NTFUNCT( VOID, RtlInitializeGenericTable )(
4877  OUT PRTL_GENERIC_TABLE Table,
4878  IN PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine,
4879  OPTIN PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine,
4880  OPTIN PRTL_GENERIC_FREE_ROUTINE FreeRoutine,
4881  OPTIN PVOID TableContext
4882  )_FP_;
4883 
4884 _NTFN_EXTERN NTFUNCT( PVOID, RtlInsertElementGenericTable )(
4885  IN PRTL_GENERIC_TABLE Table,
4886  IN PVOID Buffer, //_In_reads_bytes_(BufferSize)
4887  IN CLONG BufferSize,
4888  OPTOUT PBOOLEAN NewElement
4889  )_FP_;
4890 
4891 _NTFN_EXTERN NTFUNCT( PVOID, RtlInsertElementGenericTableFull )(
4892  IN PRTL_GENERIC_TABLE Table,
4893  IN PVOID Buffer, //_In_reads_bytes_(BufferSize)
4894  IN CLONG BufferSize,
4895  OPTOUT PBOOLEAN NewElement,
4896  IN PVOID NodeOrParent,
4897  IN TABLE_SEARCH_RESULT SearchResult
4898  )_FP_;
4899 
4900 _NTFN_EXTERN NTFUNCT( BOOLEAN, RtlDeleteElementGenericTable )(
4901  IN PRTL_GENERIC_TABLE Table,
4902  IN PVOID Buffer
4903  )_FP_;
4904 
4905 _NTFN_EXTERN NTFUNCT( PVOID, RtlLookupElementGenericTable )(
4906  IN PRTL_GENERIC_TABLE Table,
4907  IN PVOID Buffer
4908  )_FP_;
4909 
4910 _NTFN_EXTERN NTFUNCT( PVOID, RtlLookupElementGenericTableFull )(
4911  IN PRTL_GENERIC_TABLE Table,
4912  IN PVOID Buffer,
4913  OUT PVOID *NodeOrParent,
4914  OUT TABLE_SEARCH_RESULT *SearchResult
4915  )_FP_;
4916 
4917 _NTFN_EXTERN NTFUNCT( PVOID, RtlEnumerateGenericTable )(
4918  IN PRTL_GENERIC_TABLE Table,
4919  IN BOOLEAN Restart
4920  )_FP_;
4921 
4922 _NTFN_EXTERN NTFUNCT( PVOID, RtlEnumerateGenericTableWithoutSplaying )(
4923  IN PRTL_GENERIC_TABLE Table,
4924  INOUT PVOID *RestartKey
4925  )_FP_;
4926 
4927 _NTFN_EXTERN NTFUNCT( PVOID, RtlGetElementGenericTable )(
4928  IN PRTL_GENERIC_TABLE Table,
4929  IN ULONG I
4930  )_FP_;
4931 
4932 _NTFN_EXTERN NTFUNCT( ULONG, RtlNumberGenericTableElements )(
4933  IN PRTL_GENERIC_TABLE Table
4934  )_FP_;
4935 
4936 _NTFN_EXTERN NTFUNCT( BOOLEAN, RtlIsGenericTableEmpty )(
4937  IN PRTL_GENERIC_TABLE Table
4938  )_FP_;
4939 
4940 #endif
4941 
4942 //==---------------------------------------------------------------------------
4944 // User-Mode NT Library Functions - Migrated to appropriate sections.
4945 // PONDER: Do this migration in the NDK as well ?
4946 //==---------------------------------------------------------------------------
4947 
4948 // Debug Functions -> User-Mode Kernel Debugging Functions
4949 
4950 //_NTFN_EXTERN NTFUNC( DbgUiConnectToDbg )( VOID )_FP_;
4951 //_NTFN_EXTERN NTFUNC( DbgUiDebugActiveProcess )(
4952 // IN HANDLE Process
4953 // )_FP_;
4954 //_NTFN_EXTERN NTFUNC( DbgUiStopDebugging )(
4955 // IN HANDLE Process
4956 // )_FP_;
4957 //_NTFN_EXTERN NTFUNCT( VOID, DbgBreakPointWithStatus )( IN ULONG Status )_FP_;
4958 //_NTFN_EXTERN NTFUNC( DbgUiContinue )(
4959 // IN PCLIENT_ID ClientId,
4960 // IN NTSTATUS ContinueStatus
4961 // )_FP_;
4962 //_NTFN_EXTERN NTFUNC( DbgUiWaitStateChange )(
4963 // IN PDBGUI_WAIT_STATE_CHANGE DbgUiWaitStateCange,
4964 // IN PLARGE_INTEGER TimeOut
4965 // )_FP_;
4966 //_NTFN_EXTERN NTFUNC( DbgUiConvertStateChangeStructure )(
4967 // IN PDBGUI_WAIT_STATE_CHANGE WaitStateChange,
4968 // IN PVOID DebugEvent
4969 // )_FP_;
4970 //_NTFN_EXTERN NTFUNCT( VOID, DbgUiRemoteBreakin )( VOID )_FP_;
4971 //_NTFN_EXTERN NTFUNC( DbgUiIssueRemoteBreakin )( IN HANDLE Process )_FP_;
4972 //_NTFN_EXTERN NTFUNCT( HANDLE, DbgUiGetThreadDebugObject )( VOID )_FP_;
4973 
4974 // Loader Functions
4975 
4976 //_NTFN_EXTERN NTFUNC( LdrDisableThreadCalloutsForDll )(
4977 // IN PVOID BaseAddress
4978 // )_FP_;
4979 //_NTFN_EXTERN NTFUNC( LdrLoadDll )(
4980 // OPTIN PWSTR SearchPath,
4981 // OPTIN PULONG LoadFlags,
4982 // IN PUNICODE_STRING Name,
4983 // OPTOUT PVOID* BaseAddress
4984 // )_FP_;
4985 //_NTFN_EXTERN NTFUNC( LdrUnloadDll )( IN PVOID BaseAddress )_FP_;
4986 //_NTFN_EXTERN NTFUNC( LdrAddRefDll )(
4987 // IN ULONG Flags,
4988 // IN PVOID BaseAddress
4989 // )_FP_;
4990 //_NTFN_EXTERN NTFUNC( LdrGetDllHandle )(
4991 // OPTIN PWSTR DllPath,
4992 // IN PULONG DllCharacteristics,
4993 // IN PUNICODE_STRING DllName,
4994 // OUT HANDLE* DllHandle
4995 // )_FP_;
4996 //_NTFN_EXTERN NTFUNC( LdrGetDllHandleEx )(
4997 // IN ULONG Flags,
4998 // OPTIN PWSTR DllPath,
4999 // OPTIN PULONG DllCharacteristics,
5000 // IN PUNICODE_STRING DllName,
5001 // OPTOUT HANDLE* DllHandle
5002 // )_FP_;
5003 //_NTFN_EXTERN NTFUNC( LdrFindEntryForAddress )(
5004 // IN PVOID Address,
5005 // OUT PLDR_DATA_TABLE_ENTRY* Module
5006 // )_FP_;
5007 //_NTFN_EXTERN NTFUNC( LdrQueryImageFileExecutionOptions )(
5008 // IN PUNICODE_STRING SubKey,
5009 // IN PCWSTR ValueName,
5010 // IN ULONG ValueSize,
5011 // OUT PVOID Buffer,
5012 // IN ULONG BufferSize,
5013 // OPTOUT PULONG RetunedLength
5014 // )_FP_;
5015 //_NTFN_EXTERN NTFUNC( LdrQueryProcessModuleInformation )(
5016 // OPTIN PRTL_PROCESS_MODULES ModuleInformation,
5017 // OPTIN ULONG Size,
5018 // OUT PULONG ReturnedSize
5019 // )_FP_;
5020 //_NTFN_EXTERN NTFUNC( LdrQueryImageFileKeyOption )(
5021 // IN HANDLE KeyHandle,
5022 // IN PCWSTR ValueName,
5023 // IN ULONG Type,
5024 // OUT PVOID Buffer,
5025 // IN ULONG BufferSize,
5026 // OPTOUT PULONG ReturnedLength
5027 // )_FP_;
5028 //_NTFN_EXTERN NTFUNC( LdrOpenImageFileOptionsKey )(
5029 // IN PUNICODE_STRING SubKey,
5030 // IN BOOLEAN Wow64,
5031 // OUT PHANDLE NewKeyHandle
5032 // )_FP_;
5033 //_NTFN_EXTERN NTFUNCT( VOID, LdrSetDllManifestProber )(
5034 // IN PLDR_MANIFEST_PROBER_ROUTINE Routine
5035 // )_FP_;
5036 //_NTFN_EXTERN NTFUNC( LdrShutdownProcess )( VOID )_FP_;
5037 //_NTFN_EXTERN NTFUNC( LdrShutdownThread )( VOID )_FP_;
5038 //typedef VOID (NTAPI *PLDR_CALLBACK)( PVOID CallbackContext, PCHAR Name );
5039 //_NTFN_EXTERN NTFUNC( LdrVerifyImageMatchesChecksum )(
5040 // IN HANDLE FileHandle,
5041 // IN PLDR_CALLBACK Callback,
5042 // IN PVOID CallbackContext,
5043 // OUT PUSHORT ImageCharacterstics
5044 // )_FP_;
5045 //_NTFN_EXTERN NTFUNCT( PIMAGE_BASE_RELOCATION, LdrProcessRelocationBlock )(
5046 // IN ULONG_PTR Address,
5047 // IN ULONG Count,
5048 // IN PUSHORT TypeOffset,
5049 // IN LONG_PTR Delta
5050 // )_FP_;
5051 //_NTFN_EXTERN NTFUNCT( VOID, LdrInitializeThunk )(
5052 // ULONG Unknown1, ULONG Unknown2,
5053 // ULONG Unknown3, ULONG Unknown4
5054 // )_FP_;
5055 
5056 //==---------------------------------------------------------------------------
5057 #undef NTFUNC
5058 #undef NTFUNCT
5059 #undef NTFUNCC
5060 #undef _FP_
5063 #endif // ndef NO_NDK_FILES
5064 #endif // ndef __NtFunc_h_incl__
5065 // EOF
unsigned long DWORD
Definition: Common.h:414
bool GetProcPathname(DWORD procId, OUT TSTR PathName, UINT ccPathName)
Definition: NtFunc.cpp:294
unsigned short WORD
Definition: Common.h:413
bool(__stdcall * PFnEnumModuleAction)(HANDLE hProcess, const PLDR_MODULE pModule, PVOID Context)
Definition: NtFunc.h:162
UNICODE_STRING uName
Definition: NtFunc.h:96
bool _InitializeObjectAttributes(OUT POBJECT_ATTRIBUTES pObjAttr, IN HANDLE BaseObj, IN PUNICODE_STRING ObjName, IN ULONG Attrib, OPTIN PSECURITY_DESCRIPTOR SecurityDesc, OPTIN PSECURITY_QUALITY_OF_SERVICE SecurityQoS)
wchar_t * WSTR
Definition: Common.h:366
#define TSTR
Definition: Common.h:328
bool GetProcPEB(HANDLE hProcess, OUT PPEB pPeb)
struct _PACKED_OBJ_ATTRIBUTES * PPACKED_OBJ_ATTRIBUTES
#define OPTOUT
Definition: Common.h:264
UINT GetProcDllData(HANDLE hProcess, WCSTR DllName, OUT PLDR_MODULE pModule, bool Localize)
VOID(NTAPI * PLDR_CALLBACK)(PVOID CallbackContext, PCHAR Name)
Definition: NtFunc.h:1687
const wchar_t * WCSTR
Definition: Common.h:367
bool InitNtFunc()
InitNtFunc must be called before any of the NTDLL functions can be used.
Definition: NtFunc.cpp:336
EVENT_TRACE_HEADER * PEVENT_TRACE_HEADER
Definition: NtTypes.h:194
bool CopyProcUStringBuf(HANDLE hProc, PUNICODE_STRING pProcStr, OUT WSTR wzBuf, UINT ccBuf)
#define _byteswap_ulong
Definition: Common.h:700
OBJECT_ATTRIBUTES oa
Definition: NtFunc.h:95
#define _byteswap_uint64
Definition: Common.h:710
#define OPTIO
Definition: Common.h:265
void FreeLdrModBuffers(PLDR_MODULE pMod)
Definition: NtFunc.cpp:282
UINT EnumProcModules(HANDLE hProcess, PFnEnumModuleAction Action, PVOID Context)
Definition: NtFunc.cpp:126
PACKED_OBJ_ATTRIBUTES * AllocPackedObjAttributes(HANDLE BaseObj, PCWSTR ObjName, ULONG Attributes, PSECURITY_DESCRIPTOR SecurityDesc, PSECURITY_QUALITY_OF_SERVICE SecurityQoS)
Definition: NtFunc.cpp:45
PPEB GetPEBAddress(HANDLE hProcess)
Definition: NtFunc.cpp:80
#define END_EXTERN_C
Definition: Common.h:221
#define BEGIN_EXTERN_C
Definition: Common.h:220
#define _byteswap_ushort
Definition: Common.h:692
#define OPTIN
Definition: Common.h:263
#define INOUT
Definition: Common.h:262