Exports Added For NTDLL 5.1

The table below lists the 262 exports that are new to NTDLL for version 5.1, i.e., Windows XP. Some functions wait for a service pack. With Windows XP SP2, the otherwise orderly correlation with version numbers in all the rest of NTDLL’s history breaks down. Some functions added for Windows XP SP2 actually appear first (in chronological order) in the version 5.2 from the original Windows Server 2003. Others do not appear in version 5.2 until its first service pack. Curiously, some of these are documented as requiring Windows Vista.

Documentation status is conveyed by colour coding. If you browse with scripting enabled, hovering over any text that has a background colour should produce a tooltip that explains the formatting. NTDLL exports that have all along had their own non-trivial documentation as exports from NTDLL are shown with no background colour. So too are the NTDLL implementations of documented functions and variables from the C Run-Time Library. If the whole of the documentation is just that the function is reserved or obsolete, without even giving a prototype, then the function is highlighted red or highlighted pink, respectively. Functions that look to be completely undocumented are highlighted yellow. If a function is documented now but is known not to have been documented immediately, especially in the contemporaneous Software Development Kit (SDK), then it is shaded yellow to retain some of its previous status as undocumented. If the delayed documentation came specifically from the function’s listing among the Settlement Program Interfaces in late 2002, then the shading is less yellow since Microsoft at least acknowledged that the documentation was late. An undocumented function is highlighted orange, as semi-documented, if it is at least declared in one or another header file from an SDK or, exceptionally, a Windows Driver Kit (WDK). NTDLL is low-level enough that some functions are documented in the Windows Driver Kit (WDK), typically as exports from the NT kernel for use by ring 0 software such as device drivers, but sometimes with non-specific talk of being callable from user mode. Such functions are shaded blue if they seem always to have had such documentation, but a brighter blue if the WDK documentation was not immediate. A function is shaded grey if it seems not to be documented but is known to be the entire low-level implementation of some function in a higher-level DLL such as KERNEL32 or ADVAPI32. Identifying these is a work in progress.

Function Remarks
CsrCaptureMessageMultiUnicodeStringsInPlace  
CsrGetProcessId  
DbgPrintEx  
DbgQueryDebugFilterState  
DbgSetDebugFilterState  
DbgUiConvertStateChangeStructure  
DbgUiDebugActiveProcess  
DbgUiGetThreadDebugObject  
DbgUiIssueRemoteBreakin  
DbgUiRemoteBreakin  
DbgUiSetThreadDebugObject  
DbgUiStopDebugging  
KiFastSystemCall begins from SP2;
not in 5.2 before SP1;
x86 only
KiFastSystemCallRet begins from SP2;
not in 5.2 before SP1;
x86 only
KiIntSystemCall begins SP2;
not in 5.2 before SP1;
x86 only
LdrAccessOutOfProcessResource discontinued in 6.0
LdrAddRefDll  
LdrCreateOutOfProcessImage discontinued in 6.0
LdrDestroyOutOfProcessImage discontinued in 6.0
LdrEnumerateLoadedModules begins from SP1
LdrFindCreateProcessManifest discontinued in 6.0
LdrFindResourceEx_U  
LdrGetDllHandleEx  
LdrHotPatchRoutine begins from SP2;
discontinued in 6.3
LdrInitShimEngineDynamic  
LdrLockLoaderLock  
LdrSetAppCompatDllRedirectionCallback  
LdrSetDllManifestProber  
LdrUnlockLoaderLock  
NtAddBootEntry  
NtCompactKeys  
NtCompareTokens undocumented until 2004-2006;
not declared
NtCompressKey  
NtCreateDebugObject  
NtCreateJobSet  
NtCreateKeyedEvent  
NtCreateProcessEx  
NtDebugActiveProcess  
NtDebugContinue  
NtDeleteBootEntry  
NtEnumerateBootEntries  
NtEnumerateSystemEnvironmentValuesEx  
NtIsProcessInJob  
NtLockProductActivationKeys  
NtLockRegistryKey  
NtMakePermanentObject  
NtModifyBootEntry  
NtOpenKeyedEvent  
NtOpenProcessTokenEx undocumented until 2008-2009
NtOpenThreadTokenEx undocumented until 2008-2009
NtQueryBootEntryOrder  
NtQueryBootOptions  
NtQueryDebugFilterState  
NtQueryPortInformationProcess  
NtQuerySystemEnvironmentValueEx  
NtReleaseKeyedEvent  
NtRemoveProcessDebug  
NtRenameKey  
NtResumeProcess  
NtSaveKeyEx  
NtSetBootEntryOrder  
NtSetBootOptions  
NtSetDebugFilterState  
NtSetEventBoostPriority  
NtSetInformationDebugObject  
NtSetSystemEnvironmentValueEx  
NtSuspendProcess  
NtTraceEvent declared in Windows 10 WDK
NtTranslateFilePath  
NtUnloadKeyEx  
NtWaitForDebugEvent  
NtWaitForKeyedEvent  
RtlActivateActivationContext  
RtlActivateActivationContextEx  
RtlActivateActivationContextUnsafeFast  
RtlAddRefActivationContext whole implementation of KERNEL32 function AddRefActCtx in 5.1 and higher
RtlAddRefMemoryStream not in wow64 before 6.0
RtlAddVectoredExceptionHandler forwarded from KERNEL32 function AddVectoredExceptionHandler in 5.1 and higher
RtlAddressInSectionTable  
RtlAppendPathElement  
RtlApplicationVerifierStop  
RtlAssert2 discontinued in 5.2
RtlCaptureContext forwarded from KERNEL32 function RtlCaptureContext in 5.1 to 6.0;
undocumented in WDK until 2005-2006;
documented in WDK until 2008-2009 as “reserved for system use”;
declaration in WDK requires Windows 2000 and higher
RtlCaptureStackContext x86 only
RtlCheckProcessParameters discontinued in 6.0
RtlCloneMemoryStream not in wow64
RtlCommitMemoryStream not in wow64 before 6.0
RtlComputeCrc32 declared in Windows 10 WDK
RtlComputeImportTableHash  
RtlComputePrivatizedDllName_U  
RtlCopyMemoryStreamTo not in wow64 before 6.0
RtlCopyOutOfProcessMemoryStreamTo not in wow64 before 6.0
RtlCreateActivationContext  
RtlCreateBootStatusDataFile  
RtlCreateSystemVolumeInformationFolder undocumented until 2005-2006
RtlDeactivateActivationContext  
RtlDeactivateActivationContextUnsafeFast  
RtlDecodePointer begins from SP2;
not in 5.2 before SP1;
forwarded from KERNEL32 function DecodePointer in corresponding 5.1 and 5.2, and higher;
forwarded from KERNELBASE function DecodePointer in 6.1 and higher
RtlDecodeSystemPointer begins from SP2;
not in 5.2 before SP1;
forwarded from KERNEL32 function DecodeSystemPointer in corresponding 5.1 and 5.2, and higher;
forwarded from KERNELBASE function DecodeSystemPointer in 6.1 and higher
RtlDeleteElementGenericTableAvl  
RtlDllShutdownInProgress  
RtlDosApplyFileIsolationRedirection_Ustr  
RtlDosSearchPath_Ustr  
RtlDowncaseUnicodeChar undocumented until 2005-2006
RtlDuplicateUnicodeString  
RtlEncodePointer begins from SP2;
not in 5.2 before SP1;
forwarded from KERNEL32 function EncodePointer in corresponding 5.1 and 5.2, and higher;
forwarded from KERNELBASE function EncodePointer in 6.1 and higher;
RtlEncodeSystemPointer begins from SP2;
not in 5.2 before SP1;
forwarded from KERNEL32 function EncodeSystemPointer in corresponding 5.1 and 5.2, and higher;
forwarded from KERNELBASE function EncodeSystemPointer in 6.1 and higher
RtlEnumerateGenericTableAvl  
RtlEnumerateGenericTableLikeADirectory  
RtlEnumerateGenericTableWithoutSplayingAvl  
RtlExitUserThread forwarded from KERNEL32 function ExitThread in 6.0 and higher;
forwarded from KERNELBASE function ExitThread in 6.1 and higher
RtlFinalReleaseOutOfProcessMemoryStream not in wow64
RtlFindActivationContextSectionGuid  
RtlFindActivationContextSectionString  
RtlFindCharInUnicodeString  
RtlFindClearRuns declaration requires Windows 2000 and higher
RtlFirstEntrySList undocumented until 2006
RtlFlushSecureMemoryCache  
RtlFreeThreadActivationContextStack  
RtlGetActiveActivationContext  
RtlGetCurrentPeb  
RtlGetElementGenericTableAvl undocumented until 2008-2009
RtlGetFrame  
RtlGetLastNtStatus  
RtlGetLastWin32Error forwarded from KERNEL32 function GetLastError in 5.1 and 5.2
RtlGetLengthWithoutLastFullDosOrNtPathElement  
RtlGetLengthWithoutTrailingPathSeperators  
RtlGetNativeSystemInformation  
RtlGetNtVersionNumbers  
RtlGetSetBootStatusData  
RtlGetUnloadEventTrace begins from SP2;
undocumented until 2004-2006;
documentation withdrawn from SDK in 2007-2008;
not declared
RtlHashUnicodeString undocumented until 2005-2006
RtlInitMemoryStream not in wow64 before 6.0
RtlInitOutOfProcessMemoryStream not in wow64 before 6.0
RtlInitUnicodeStringEx  
RtlInitializeGenericTableAvl  
RtlInitializeSListHead forwarded from KERNEL32 function InitializeSListHead in 5.1 and higher;
forwarded from KERNELBASE function InitializeSListHead in 6.1 and higher;
undocumented until 2006
RtlInitializeStackTraceDatabase begins from SP2;
discontinued in 6.0
RtlInsertElementGenericTableAvl  
RtlInterlockedFlushSList forwarded from KERNEL32 function InterlockedFlushSList in 5.1 and higher;
forwarded from KERNELBASE function InterlockedFlushSList in 6.1 and higher;
undocumented until 2006
RtlInterlockedPopEntrySList forwarded from KERNEL32 function InterlockedPopEntrySList in 5.1 and higher;
forwarded from KERNELBASE function InterlockedPopEntrySList in 6.1 and higher;
undocumented until 2006
RtlInterlockedPushEntrySList forwarded from KERNEL32 function InterlockedPushEntrySList in 5.1 and higher;
forwarded from KERNELBASE function InterlockedPushEntrySList in 6.1 and higher;
undocumented until 2006
RtlInterlockedPushListSList forwarded from KERNEL32 function InterlockedPushListSList in 6.0 and higher;
forwarded from KERNELBASE function InterlockedPushListSList in 6.1 and higher
RtlIpv4AddressToStringA undocumented until 2004-2006;
documentation requires Windows Vista and higher;
declaration requires Windows Vista and higher
RtlIpv4AddressToStringExA begins from SP2;
documented as requiring Windows Vista or higher;
declared for Windows Vista and higher
RtlIpv4AddressToStringExW begins from SP2;
documented as requiring Windows Vista or higher;
declared for Windows Vista and higher
RtlIpv4AddressToStringW undocumented until 2004-2006;
documentation requires Windows Vista and higher;
declaration requires Windows Vista and higher
RtlIpv4StringToAddressA undocumented until 2004-2006;
documentation requires Windows Vista and higher;
declaration requires Windows Vista and higher
RtlIpv4StringToAddressExA begins from SP2;
documented as requiring Windows Vista or higher;
declared for Windows Vista and higher
RtlIpv4StringToAddressExW begins from SP2;
documented as requiring Windows Vista or higher;
declared for Windows Vista and higher
RtlIpv4StringToAddressW undocumented until 2004-2006;
documentation requires Windows Vista and higher;
declaration requires Windows Vista and higher
RtlIpv6AddressToStringA undocumented until 2004-2006;
documentation requires Windows Vista and higher;
declaration requires Windows Vista and higher
RtlIpv6AddressToStringExA begins from SP2;
documented as requiring Windows Vista or higher;
declared for Windows Vista and higher
RtlIpv6AddressToStringExW begins from SP2;
documented as requiring Windows Vista or higher;
declared for Windows Vista and higher
RtlIpv6AddressToStringW undocumented until 2004-2006;
documentation requires Windows Vista and higher;
declaration requires Windows Vista and higher
RtlIpv6StringToAddressA undocumented until 2004-2006;
documentation requires Windows Vista and higher;
declaration requires Windows Vista and higher
RtlIpv6StringToAddressExA begins from SP2;
documented as requiring Windows Vista or higher;
declared for Windows Vista and higher
RtlIpv6StringToAddressExW begins from SP2;
documented as requiring Windows Vista or higher;
declared for Windows Vista and higher
RtlIpv6StringToAddressW undocumented until 2004-2006;
documentation requires Windows Vista and higher;
declaration requires Windows Vista and higher
RtlIsActivationContextActive  
RtlIsGenericTableEmptyAvl  
RtlIsThreadWithinLoaderCallout begins from SP1
RtlLockBootStatusData  
RtlLockMemoryStreamRegion not in wow64 before 6.0
RtlLogStackBackTrace  
RtlLookupElementGenericTableAvl  
RtlMapSecurityErrorToNtStatus  
RtlMultiAppendUnicodeStringBuffer  
RtlNewSecurityObjectWithMultipleInheritance  
RtlNtPathNameToDosPathName  
RtlNtStatusToDosErrorNoTeb documented as “reserved for system use”
RtlNumberGenericTableElementsAvl  
RtlPopFrame  
RtlPushFrame  
RtlQueryDepthSList forwarded from KERNEL32 function QueryDepthSList in 5.1 and higher;
forwarded from KERNELBASE function QueryDepthSList in 6.1 and higher;
undocumented until 2006
RtlQueryHeapInformation  
RtlQueryInformationActivationContext  
RtlQueryInformationActiveActivationContext  
RtlQueryInterfaceMemoryStream not in wow64
RtlQueueApcWow64Thread  
RtlRandomEx  
RtlReadMemoryStream not in wow64 before 6.0
RtlReadOutOfProcessMemoryStream not in wow64 before 6.0
RtlRegisterSecureMemoryCacheCallback  
RtlReleaseActivationContext whole implementation of KERNEL32 function ReleaseActCtx in 5.1 and higher
RtlReleaseMemoryStream not in wow64 before 6.0
RtlRemoveVectoredExceptionHandler forwarded from KERNEL32 function RemoveVectoredExceptionHandler in 5.1 and higher
RtlRestoreLastWin32Error forwarded from KERNEL32 function RestoreLastError in 5.1 and higher
RtlRevertMemoryStream not in wow64 before 6.0
RtlSeekMemoryStream not in wow64 before 6.0
RtlSetHeapInformation  
RtlSetLastWin32Error forwarded from KERNEL32 function SetLastError in 5.1 and 5.2 only;
forwarded from KERNELBASE function SetLastError in 6.1 and higher
RtlSetLastWin32ErrorAndNtStatusFromNtStatus  
RtlSetMemoryStreamSize not in wow64 before 6.0
RtlSetProcessIsCritical  
RtlSetThreadIsCritical  
RtlStatMemoryStream not in wow64 before 6.0
RtlUnhandledExceptionFilter  
RtlUnhandledExceptionFilter2  
RtlUnlockBootStatusData  
RtlUnlockMemoryStreamRegion not in wow64 before 6.0
RtlValidateUnicodeString  
RtlWriteMemoryStream not in wow64 before 6.0
RtlZombifyActivationContext  
RtlpApplyLengthFunction  
RtlpEnsureBufferSize  
RtlpNotOwnerCriticalSection  
ZwAddBootEntry declared in Windows 10 WDK
ZwCompactKeys declared in Windows 10 WDK
ZwCompareTokens declared in Windows 10 WDK
ZwCompressKey declared in Windows 10 WDK
ZwCreateDebugObject  
ZwCreateJobSet declared in Windows 10 WDK
ZwCreateKeyedEvent declared in Windows 10 WDK
ZwCreateProcessEx declared in Windows 10 WDK
ZwDebugActiveProcess  
ZwDebugContinue  
ZwDeleteBootEntry declared in Windows 10 WDK
ZwEnumerateBootEntries declared in Windows 10 WDK
ZwEnumerateSystemEnvironmentValuesEx declared in Windows 10 WDK
ZwIsProcessInJob declared in Windows 10 WDK
ZwLockProductActivationKeys declared in Windows 10 WDK
ZwLockRegistryKey declared in Windows 10 WDK
ZwMakePermanentObject declared in Windows 10 WDK
ZwModifyBootEntry declared in Windows 10 WDK
ZwOpenKeyedEvent declared in Windows 10 WDK
ZwOpenProcessTokenEx  
ZwOpenThreadTokenEx  
ZwQueryBootEntryOrder declared in Windows 10 WDK
ZwQueryBootOptions declared in Windows 10 WDK
ZwQueryDebugFilterState declared in Windows 10 WDK
ZwQueryPortInformationProcess declared in Windows 10 WDK
ZwQuerySystemEnvironmentValueEx declared in Windows 10 WDK
ZwReleaseKeyedEvent declared in Windows 10 WDK
ZwRemoveProcessDebug  
ZwRenameKey declaration requires Windows 7 and higher
ZwResumeProcess declared in Windows 10 WDK
ZwSaveKeyEx declared in Windows 10 WDK
ZwSetBootEntryOrder declared in Windows 10 WDK
ZwSetBootOptions declared in Windows 10 WDK
ZwSetDebugFilterState declared in Windows 10 WDK
ZwSetEventBoostPriority declared in Windows 10 WDK
ZwSetInformationDebugObject  
ZwSetSystemEnvironmentValueEx declared in Windows 10 WDK
ZwSuspendProcess declared in Windows 10 WDK
ZwTraceEvent declared in Windows 10 WDK
ZwTranslateFilePath declared in Windows 10 WDK
ZwUnloadKeyEx declared in Windows 10 WDK
ZwWaitForDebugEvent  
ZwWaitForKeyedEvent declared in Windows 10 WDK
_CIcos x86 only
_CIlog x86 only
_CIsin x86 only
_CIsqrt x86 only
_alldvrm x86 only
_aulldvrm x86 only
_lfind  
_ui64tow  
_vsnwprintf  
bsearch  
vDbgPrintEx  
vDbgPrintExWithPrefix  

Valediction

While version 5.1 adds significantly to NTDLL’s API, it also drops 21 functions (or 22, depending on how we count):

A special case must be made of NtGetTickCount, which is discontinued for version 5.1 but is then restored for version 5.2.

Floating-Point Emulation

Additionally, a service pack of version 5.1 is the lowest-numbered build that clears away the many NTDLL functions for floating-point emulation. All the following cease as exports in version 5.1 from Windows XP SP2 and in version 5.2 from Windows Server 2003 SP1, such that they are not exported in version 6.0 and higher: