OLD MATERIAL BEING UPDATED OR REWORKED - TAKE CARE

NTDLL 3.10 Exports

This page tabulates all the functions that are exported from NTDLL in what appears to be the original version 3.10. This is what the Windows that is its own operating system (in contrast to the Windows that runs on DOS) started with as its lowest-level user-mode Application Programming Interface (API).

Of 2,728 functions (and some variables) that had ever been exported from NTDLL in at least one known version up to and including the original release of Windows 10, 812 are original. Most are still exported as of Windows 10. Since by far the largest single addition was for Windows Vista, it is striking that in terms of available functions, though not perhaps in terms of what can or should be done with them, a fully-informed low-level user-mode programmer from the early 1990s would not have had much to learn for well over a decade (and even still might pass as well-equipped).

Conventions

Also striking is that hardly any of these original functions are yet documented as being available in user mode as exports from NTDLL. This is not to say that all (or even most) should be, just that few are.

Colours

Documentation status is summarised by colour coding so that more detail can be conveyed with less text. (Had the website’s scripts run as expected, then hovering over any colour-coded text would produce a tooltip that shows why the text is coloured.) (To decode a colour, hover for a tooltip.)

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 exported NTDLL implementations of documented functions and variables from the C Run-Time Library.

NTDLL is low-level enough that some of its exported functions correspond closely to Windows Kernel Exports. Those that are documented in the Windows Driver Kit (WDK) for use by ring 0 software such as device drivers are shaded green to hint that they are documented in effect (even though the documentation rarely talks more than obliquely of being callable in user mode).

Functions that are explicitly documented as reserved or obsolete—no matter where—are shaded red or shaded grey, respectively, as quick indications that they are better avoided.

Functions that look to be completely undocumented get this website’s conventional distinction of being 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 (but now long gone from Microsoft’s website), then the shading is less yellow since Microsoft at least acknowledged that the documentation was late. Exports whose WDK documentation took a while get a green tinge.

An undocumented function is shaded 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). Some undocumented functions aren’t declared in any header now but had declarations disclosed by Microsoft in a “minwin” subdirectory of early editions of the WDK for Windows 10 which Microsoft seems since to have been withdrawn from distribution. These are highlighted orange to indicate that public disclosure even of the declaration was exceptional.

Tabulation

Something to write here!

Csr Functions

Being loaded into every user-mode process, NTDLL is naturally well-placed to be the client in every process’s communication with the Client-Server Run-Time System Service (CSRSS.EXE). In the early Windows versions, DLLs in this service provide the lowest-level user-mode handling of most Win32 functionality. All versions have one DLL, named CSRSRV, as the server-side receiver of communications to distribute to the other DLLs. Text in NTDLL version 3.10 suggests that the client side of the communications once had its own DLL, named CSRDLL, and early pre-release builds do indeed have a CSR.DLL that exports all the following 22 functions whose names begin with Csr. They were moved to NTDLL at least as early as build 328 (roughly a year before the formal release).

Take these functions as an internal detail of the most vital inter-process communication in the Win32 subsystem, and it should not surprise that none are known ever to have been declared in any header, let alone documented.

Function Export History
CsrAllocateCaptureBuffer  
CsrAllocateCapturePointer discontinued in 5.0
CsrAllocateMessagePointer  
CsrCaptureMessageBuffer  
CsrCaptureMessageString  
CsrCaptureTimeout  
CsrClientCallServer  
CsrClientConnectToServer  
CsrClientMaxMessage discontinued in 4.0
CsrClientSendMessage discontinued in 4.0
CsrClientThreadConnect discontinued in 4.0
CsrDumpProfile discontinued in 3.50
CsrFreeCaptureBuffer  
CsrIdentifyAlertableThread  
CsrNewThread discontinued in 6.0 SP1
CsrProbeForRead discontinued in 6.0
CsrProbeForWrite discontinued in 6.0
CsrSetPriorityClass  
CsrStartProfile discontinued in 3.50
CsrStopDumpProfile discontinued in 3.50
CsrStopProfile discontinued in 3.50
CsrpProcessCallbackRequest discontinued in 4.0

Version 4.0 re-architected how Windows works with windows. Almost all functionality that supports the Graphical User Interface (GUI) that Windows users know and love is thereafter not done by inter-process communication with a server process in user mode but is instead directed in-process to a new kernel-mode module named WIN32K.SYS. The immediate consequence for NTDLL is that several of these Csr functions became superfluous and so they cease as exports.

However much this relocation of windowing from WINSRV.DLL in CSRSS to WIN32K.SYS in kernel mode may be celebrated (or, in some circles, mocked), it was not the first relocation from CSRSS to kernel mode. This unstated honour goes to profiling. As a hardware-based statistical sampling of processors’ execution this diagnostic technique necessarily requires kernel-mode support, but although the native API calls such as NtCreateProfile and NtStartProfile that get to the kernel-mode functionality are exported from all NTDLL versions and might be called from any process, the original intention looks to have been that the ones that do the work, rather than just the preparation or analysis, are better constrained to the CSRSS process. For instance, a client process calls the NTDLL function CsrStartProfile to reach CSRSS. On the server side, CSRSRV calls the NTDLL function RtlStartProfile, which in turn calls to kernel mode. Whether this was thought unnecessarily elaborate is not known, but it was scrapped as soon as version 3.50 and NTDLL never again exports Csr or Rtl functions for profiling.

Dbg Functions

Function Export History Documentation History Declaration History
DbgBreakPoint   in 5.1 to 5.2, documented start is 5.0 since 6.0, declared start is 5.0
DbgPrint   since 5.1, documented start is 5.0  
DbgPrompt   before 6.0, undocumented  
DbgSsHandleKmApiMsg discontinued in 5.1    
DbgSsInitialize discontinued in 5.1    
DbgUiConnectToDbg      
DbgUiContinue      
DbgUiWaitStateChange      
DbgUserBreakPoint      

The DbgBreakPoint function is the only known example of Microsoft’s having retracted a misrepresentation that a function requires Windows 2000 when in fact its availability is ancient. Perhaps someone with a level head (and the right clout) pointed out the absurdity that the one routine the kernel had from the start for the vital matter of breaking to a debugger had been documented all along but suddenly “can only be used in Windows 2000 and later.” The case is surely no different for the user-mode export. Either way, the implementation is the single-byte int 3 instruction. Its supposed unavailability until Windows 2000 is plainly absurd. But see that the fiction is maintained for the declaration.

Incidentally, though DbgBreakPoint is not formally documented for user mode, a jmp to it is the whole implementation of the documented KERNEL32 function DebugBreak in versions 3.10 to 6.0.

Ki Functions

Function Export History
KiUserApcDispatcher  
KiUserExceptionDispatcher  

Ldr Functions

Function Export History
LdrAccessResource  
LdrFindEntryForAddress  
LdrFindResourceDirectory_U  
LdrFindResource_U  
LdrGetDllHandle  
LdrGetProcedureAddress  
LdrInitializeThunk  
LdrLoadDll  
LdrProcessRelocationBlock  
LdrQueryImageFileExecutionOptions  
LdrQueryProcessModuleInformation  
LdrShutdownProcess  
LdrShutdownThread  
LdrUnloadDll  
LdrVerifyImageMatchesChecksum  

One NPX Variable

Function Export History
NPXEMULATORTABLE (data) discontinued in 5.1

Nt Functions

Function Export History Documentation History Declaration History
NtAcceptConnectPort      
NtAccessCheck      
NtAccessCheckAndAuditAlarm   before 5.1 (IFS) to 6.0, undocumented since 6.0, declared start is 5.1
NtAdjustGroupsToken   before 5.1 (IFS) to 6.0, undocumented since 6.0, declared start is 5.1
NtAdjustPrivilegesToken   before 5.0 (IFS), undocumented since 6.0, declared start is 5.0
NtAlertResumeThread      
NtAlertThread      
NtAllocateLocallyUniqueId   before 6.1, undocumented;
documented start is 6.0
not declared
NtAllocateVirtualMemory   before 5.1 (IFS) to 6.0, undocumented;
before 6.1, declared;
since 6.1 revision, documented start is 5.0
since 6.0, declared start is 5.0
NtCancelIoFile      
NtCancelTimer      
NtClose   before 5.1 (IFS) to 6.0, undocumented;
before 6.1, declared;
since 6.1 revision, documented start is 5.0
since 6.0, declared start is 5.0
NtCloseObjectAuditAlarm      
NtCompleteConnectPort      
NtConnectPort   in 6.0 only, declared declared start is 5.1
NtContinue      
NtCreateDirectoryObject      
NtCreateEvent   before 6.1, undocumented;
documented start is 5.1
not declared
NtCreateEventPair      
NtCreateFile   before 5.1 (IFS) to 6.0, undocumented;
before 6.1, declared;
documented start is 5.0
since 6.0, declared start is 5.0
NtCreateKey      
NtCreateMailslotFile      
NtCreateMutant      
NtCreateNamedPipeFile      
NtCreatePagingFile      
NtCreatePort      
NtCreateProcess      
NtCreateProfile      
NtCreateSection   before 5.1 (IFS) to 6.0, undocumented;
before 6.1, declared;
since 6.1 revision, documented start is 5.0
since 6.0, declared start is 5.1
NtCreateSemaphore      
NtCreateSymbolicLinkObject      
NtCreateThread      
NtCreateTimer      
NtCreateToken      
NtCurrentTeb x86 only    
NtDelayExecution      
NtDeleteKey      
NtDeleteValueKey      
NtDeviceIoControlFile   before 5.1 (IFS) to 6.0, undocumented;
before 6.1, declared;
since 6.1 revision, documented start is 5.0
since 6.0, declared start is 5.0
NtDisplayString      
NtDuplicateObject   before 6.1, undocumented;
documented start is 5.0
not declared
NtDuplicateToken   before 5.0 (IFS), undocumented;
before 6.1, declared;
documented start is 5.0
since 6.0, declared start is 5.1
NtEnumerateKey      
NtEnumerateValueKey      
NtExtendSection      
NtFlushBuffersFile      
NtFlushInstructionCache      
NtFlushKey      
NtFlushVirtualMemory      
NtFlushWriteBuffer      
NtFreeVirtualMemory   before 5.1 (IFS) to 6.0, undocumented;
before 6.1, declared;
since 6.1 revision, documented start is 5.0
since 6.0, declared start is 5.0
NtFsControlFile   before 5.1 (IFS) to 6.0, undocumented;
before 6.1, declared;
since 6.1 revision, documented start is 5.0
since 6.0, declared start is 5.0
NtGetContextThread      
NtGetTickCount discontinued in 5.1;
restored in 5.2
   
NtImpersonateClientOfPort      
NtImpersonateThread      
NtInitializeRegistry      
NtInitializeVDM discontinued in 3.50    
NtListenPort      
NtLoadDriver      
NtLoadKey      
NtLockFile   before 5.1 (IFS) to 6.0, undocumented;
before 6.1, declared;
documented start is 6.1
since 6.0, declared start is 5.0
NtLockVirtualMemory      
NtMakeTemporaryObject      
NtMapViewOfSection   before 6.1, undocumented;
since 6.1 revision, documented start is 5.0
not declared
NtNotifyChangeDirectoryFile      
NtNotifyChangeKey      
NtOpenDirectoryObject      
NtOpenEvent      
NtOpenEventPair      
NtOpenFile   before 5.1 (IFS) to 6.0, undocumented;
before 6.1, declared;
since 6.1 revision, documented start is 5.0
since 6.0, declared start is 5.0
NtOpenKey      
NtOpenMutant      
NtOpenObjectAuditAlarm      
NtOpenProcess   before 6.1, declared;
since 6.1 revision, documented start is 5.0
 
NtOpenProcessToken   before 5.0 (IFS), undocumented since 6.0, declared start is 5.0
NtOpenSection      
NtOpenSemaphore      
NtOpenSymbolicLinkObject      
NtOpenThread      
NtOpenThreadToken     since 6.0, declared start is 5.0
NtOpenTimer      
NtPrivilegeCheck      
NtPrivilegeObjectAuditAlarm      
NtPrivilegedServiceAuditAlarm      
NtProtectVirtualMemory      
NtPulseEvent      
NtQueryDefaultLocale      
NtQueryDirectoryFile   before 5.1 (IFS) to 6.0, undocumented;
before 6.1, declared;
documented start is 5.1
since 6.0, declared start is 5.0
NtQueryDirectoryObject      
NtQueryEaFile      
NtQueryEvent      
NtQueryInformationFile   before 5.1 (IFS) to 6.0, undocumented;
before 6.1, declared;
since 6.1 revision, documented start is 5.0
since 6.0, declared start is 5.0
NtQueryInformationPort      
NtQueryInformationProcess      
NtQueryInformationThread      
NtQueryInformationToken   before 5.0 (IFS), undocumented;
before 6.1, declared;
documented start is 5.1
since 6.0, declared start is 5.0
NtQueryIntervalProfile      
NtQueryKey      
NtQueryMutant      
NtQueryObject      
NtQueryPerformanceCounter      
NtQuerySection      
NtQuerySecurityObject   before 5.1 (IFS), undocumented;
before 6.1, declared;
documented start is 5.1
since 6.0, declared start is 5.0
NtQuerySemaphore      
NtQuerySymbolicLinkObject      
NtQuerySystemEnvironmentValue      
NtQuerySystemInformation      
NtQuerySystemTime      
NtQueryTimer      
NtQueryValueKey      
NtQueryVirtualMemory      
NtQueryVolumeInformationFile   before 5.1 (IFS), undocumented;
before 6.1, declared;
documented start is 5.1
since 6.0, declared start is 5.0
NtRaiseException      
NtRaiseHardError      
NtReadFile   before 5.1 (IFS) to 6.0, undocumented;
before 6.1, declared;
since 6.1 revision, documented start is 5.0
since 6.0, declared start is 5.0
NtReadRequestData      
NtReadVirtualMemory      
NtRegisterThreadTerminatePort      
NtReleaseMutant      
NtReleaseProcessMutant discontinued in 4.0    
NtReleaseSemaphore      
NtRenameValueKey discontinued in 3.50    
NtReplaceKey      
NtReplyPort      
NtReplyWaitReceivePort      
NtReplyWaitReplyPort      
NtRequestPort      
NtRequestWaitReplyPort   in 6.0 only, declared declared start is 5.1
NtResetEvent      
NtRestoreKey      
NtResumeThread      
NtSaveKey      
NtSetContextThread      
NtSetDefaultHardErrorPort      
NtSetDefaultLocale      
NtSetEaFile      
NtSetEvent   before 6.1, undocumented;
documented start is 5.1
not declared
NtSetHighEventPair      
NtSetHighWaitLowEventPair      
NtSetHighWaitLowThread discontinued in 5.0    
NtSetInformationFile   before 5.1 (IFS) to 6.0, undocumented;
before 6.1, declared;
since 6.1 revision, documented start is 5.0
since 6.0, declared start is 5.0
NtSetInformationKey      
NtSetInformationProcess      
NtSetInformationThread   before 5.1 (IFS) to 6.0, undocumented;
before 6.1, declared;
since 6.1 revision, documented start is 5.0
since 6.0, declared start is 5.1
NtSetInformationToken      
NtSetIntervalProfile      
NtSetLdtEntries      
NtSetLowEventPair      
NtSetLowWaitHighEventPair      
NtSetLowWaitHighThread discontinued in 5.0    
NtSetSecurityObject   before 5.1 (IFS), undocumented;
before 6.1, declared;
documented start is 5.1
since 6.0, declared start is 5.0
NtSetSystemEnvironmentValue      
NtSetSystemTime      
NtSetTimer      
NtSetValueKey      
NtSetVolumeInformationFile   before 5.2 (IFS), undocumented;
before 6.1, declared;
documented start is 5.2
 
NtShutdownSystem      
NtStartProfile      
NtStopProfile      
NtSuspendThread      
NtSystemDebugControl      
NtTerminateProcess      
NtTerminateThread      
NtTestAlert      
NtUnloadDriver      
NtUnloadKey      
NtUnlockFile   before 5.1 (IFS) to 6.0, undocumented;
before 6.1, declared;
documented start is 6.1
since 6.0, declared start is 5.0
NtUnlockVirtualMemory      
NtUnmapViewOfSection      
NtVdmControl      
NtVdmStartExecution discontinued in 3.50    
NtWaitForMultipleObjects      
NtWaitForProcessMutant discontinued in 4.0    
NtWaitForSingleObject   before 6.1, undocumented;
documented start is 5.1
not declared
NtWaitHighEventPair      
NtWaitLowEventPair      
NtWriteFile   before 5.1 (IFS) to 6.0, undocumented;
before 6.1, declared;
since 6.1 revision, documented start is 5.0
since 6.0, declared start is 5.0
NtWriteRequestData      
NtWriteVirtualMemory      

The functions whose names begin with Nt correspond closely to functions whose names have the Zw prefix instead (see below). Put aside some general points about how the two differ, and documentation of an Nt function is to a large extent implied by documentation of the corresponding Zw function. Microsoft started making this explicit some time after releasing the WDK for Windows Vista. Documentation in the WDK for Windows 7 gives each Nt function its own page and directs attention to the page for the corresponding Zw function. The former warns expressly “Do not call this routine from kernel-mode code”, which is here taken as documenting the functions as reserved for kernel-mode use but not as NTDLL exports.

One oddity had better be remarked on now lest it be thought a mistake in the table. The NtGetTickCount function was dropped just for version 5.1. Its companion, ZwGetTickCount, was also dropped for version 5.1 but only NtGetTickCount reappears for version 5.2.

The NtNotifyChangeDirectoryFile function is mentioned in comments in NTIFS.H starting from the IFS Kit for Windows 2000 and in WDM.H starting from the WDK for Windows Vista, but has never yet been declared. The story is only slightly different for NtQueryEaFile: it too is mentioned in a comment in NTIFS.H from the IFS Kit for Windows 2000, but the comment then moves to WDM.H.

The NtQueryInformationThread function is mentioned in a comment in NTDDK.H from at least as far back as the Windows NT 3.51 DDK, presumably for its export from NTDLL.DLL in user mode, but has never yet been declared for use in programming.

Every known DDK and WDK mentions NtQuerySystemInformation in a comment, apparently meaning its export from NTDLL.DLL in user mode, without ever presenting a declaration.

The NtSetEaFile function is mentioned in a comment, first in the NTIFS.H from the Windows 2000 IFS Kit and then in WDM.H since the WDK for Windows Vista.

More obscurely, NtRequestPort and NtRequestWaitReplyPort share a comment in the NTIFS.H from the WDK for Windows Vista, which is never repeated in later editions. The second of this pair is notable because this header also declares the function (and also NtConnectPort). It is here speculated, though with some confidence, that these declarations started as early as an IFS Kit for Windows XP. For however long they were published, they’re long gone now.

The NtSetInformationProcess function is mentioned in increasingly many comments in NTDDK.H, starting as long ago as the DDK for Windows NT 3.51, yet it too never has been declared.

Pfx Functions

Function Documentation History Declaration History
PfxFindPrefix before 5.0 (IFS), undocumented since 6.0, declared start is 5.0
PfxInitialize before 5.0 (IFS), undocumented since 6.0, declared start is 5.0
PfxInsertPrefix before 5.0 (IFS), undocumented since 6.0, declared start is 5.0
PfxRemovePrefix before 5.0 (IFS), undocumented since 6.0, declared start is 5.0

Floating-Point Miscellany

Function Export History
RestoreEm87Context discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0

Rtl Functions

Function Export History Documentation History Declaration History
RtlAbortRXact      
RtlAbsoluteToSelfRelativeSD   before 5.2 SP1 (IFS), undocumented;
documented start is 5.2 SP1
since 6.0, declared start is 5.2 SP1
RtlAcquirePebLock      
RtlAcquireResourceExclusive      
RtlAcquireResourceShared      
RtlAddAccessAllowedAce   before 5.0 (IFS), undocumented since 6.0, declared start is 5.0
RtlAddAccessDeniedAce      
RtlAddAce   before 5.1 (IFS) to 6.0, undocumented;
documented start is 5.2 SP1
since 6.0, declared start is 5.0
RtlAddActionToRXact      
RtlAddAttributeActionToRXact      
RtlAddAuditAccessAce      
RtlAdjustPrivilege      
RtlAllocateAndInitializeSid   before 5.1 (IFS) to 6.0, undocumented since 6.0, declared start is 5.0
RtlAllocateHeap   before 5.1 (IFS), undocumented;
documented start is 5.1
since 6.0, declared start is 5.0
RtlAnalyzeProfile discontinued in 3.50    
RtlAnsiCharToUnicodeChar   before 6.1, undocumented;
documented start is 5.0;
documented but not declared
 
RtlAnsiStringToUnicodeSize   since 6.1 revision, documented start is 5.0  
RtlAnsiStringToUnicodeString   since 6.1 revision, documented start is 5.0 since 6.0, declared start is 5.0
RtlAppendAsciizToString      
RtlAppendStringToString   before 5.0 (IFS), undocumented;
since 6.1, documented start is 5.0
since 6.0, declared start is 5.0
RtlAppendUnicodeStringToString   since 6.1 revision, documented start is 5.0 since 6.0, declared start is 5.0
RtlAppendUnicodeToString   since 6.1 revision, documented start is 5.0 since 6.0, declared start is 5.0
RtlApplyRXact      
RtlApplyRXactNoFlush      
RtlAreAllAccessesGranted      
RtlAreAnyAccessesGranted      
RtlAreBitsClear   before 5.0, undocumented;
since 6.1 revision, documented start is 5.0
since 6.0, declared start is 5.0
RtlAreBitsSet   before 5.0, undocumented;
since 6.1 revision, documented start is 5.0
since 6.0, declared start is 5.0
RtlAssert   before 5.1, declared  
RtlCaptureStackBackTrace   before 5.1 (IFS) to 6.0, undocumented;
before 6.1, declared;
documented start is 5.1
since 6.0, declared start is 5.1
RtlCharToInteger   before 3.51, undocumented;
since 6.1 revision, documented start is 5.0
since 6.0, declared start is 5.0
RtlCheckRegistryKey   since 6.1 revision, documented start is 5.0 since 6.0, declared start is 5.0
RtlClearAllBits   before 5.0, undocumented;
since 6.1 revision, documented start is 5.0
since 6.0, declared start is 5.0
RtlClearBits   before 5.0, undocumented;
since 6.1 revision, documented start is 5.0
since 6.0, declared start is 5.0
RtlCompactHeap      
RtlCompareMemory   since 6.1 revision, documented start is 5.0 since 6.0, declared start is 5.0
RtlCompareMemoryUlong   before 5.0 (IFS), undocumented since 6.0, declared start is 5.0
RtlCompareString   before 3.50 to 3.51, undocumented;
since 6.1 revision, documented start is 5.0
since 6.0, declared start is 5.0
RtlCompareUnicodeString   since 6.1 revision, documented start is 5.0 since 6.0, declared start is 5.0
RtlConsoleMultiByteToUnicodeN      
RtlConvertExclusiveToShared      
RtlConvertLongToLargeInteger x86 only since 6.1 revision, documented start is 5.0 since 5.1, deprecated;
since 6.0, deprecated (5.1)
RtlConvertSharedToExclusive      
RtlConvertSidToUnicodeString   before 6.1, undocumented;
documented start is 5.0
declared start is 5.0
RtlConvertUiListToApiList discontinued in 6.3    
RtlConvertUlongToLargeInteger x86 only since 6.1 revision, documented start is 5.0 since 5.1, deprecated;
since 6.0, deprecated (5.1)
RtlCopyLuid   before 5.0 (IFS), undocumented since 6.0, declared start is 5.0
RtlCopyLuidAndAttributesArray      
RtlCopySecurityDescriptor      
RtlCopySid   before 5.0 (IFS), undocumented since 6.0, declared start is 5.0
RtlCopySidAndAttributesArray      
RtlCopyString   since 6.1 revision, documented start is 5.0 since 6.0, declared start is 5.0
RtlCopyUnicodeString   since 6.1 revision, documented start is 5.0 since 6.0, declared start is 5.0
RtlCreateAcl   before 5.0 (IFS), undocumented since 6.0, declared start is 5.0
RtlCreateAndSetSD      
RtlCreateEnvironment      
RtlCreateHeap   before 5.1 (IFS), undocumented;
documented start is 5.1
since 6.0, declared start is 5.1
RtlCreateProcessParameters      
RtlCreateRegistryKey   since 6.1 revision, documented start is 5.0 since 6.0, declared start is 5.0
RtlCreateSecurityDescriptor   since 6.1 revision, documented start is 5.0 since 6.0, declared start is 5.0
RtlCreateUnicodeString   before 5.0 (IFS), undocumented;
since 5.1 (IFS) to 6.0, documented start is 5.0
before 5.1 (IFS) to 6.0, not declared;
since 6.0, declared start is 5.0
RtlCreateUnicodeStringFromAsciiz      
RtlCreateUserProcess      
RtlCreateUserSecurityObject      
RtlCreateUserThread      
RtlCustomCPToUnicodeN   before 5.0 (IFS), undocumented;
before 5.1 (IFS) to 6.0, declared
since 6.0, declared start is 5.0
RtlDeNormalizeProcessParams      
RtlDelete   before 5.0 (IFS), undocumented since 6.0, declared start is 5.0
RtlDeleteAce   before 5.1 (IFS) to 6.0, undocumented;
documented start is 5.2 SP1
 
RtlDeleteCriticalSection      
RtlDeleteElementGenericTable   before 5.0 (IFS), undocumented since 6.0, declared start is 5.0
RtlDeleteRegistryValue   since 6.1 revision, documented start is 5.0 since 6.0, declared start is 5.0
RtlDeleteResource      
RtlDeleteSecurityObject      
RtlDestroyEnvironment      
RtlDestroyHeap   before 5.1 (IFS), undocumented;
documented start is 5.1
since 6.0, declared start is 5.1
RtlDestroyProcessParameters      
RtlDetermineDosPathNameType_U      
RtlDoesFileExists_U      
RtlDosPathNameToNtPathName_U      
RtlDosSearchPath_U      
RtlDumpResource      
RtlEnlargedIntegerMultiply x86 only before 3.50 to 3.51, documented since 5.1, deprecated
RtlEnlargedUnsignedDivide x86 only;
discontinued in 6.2
before 3.50 to 3.51, documented since 5.1, deprecated
RtlEnlargedUnsignedMultiply x86 only before 3.50 to 3.51, documented since 5.1, deprecated
RtlEnterCriticalSection      
RtlEnumerateGenericTable   before 5.0 (IFS), undocumented since 6.0, declared start is 5.0
RtlEnumerateGenericTableWithoutSplaying   before 5.0 (IFS), undocumented;
since 6.2, documented start is 5.1
since 6.0, declared start is 5.0
RtlEqualComputerName      
RtlEqualDomainName      
RtlEqualLuid   before 4.0, undocumented;
before 5.0, declared;
since 6.1 revision, documented start is 5.0
 
RtlEqualPrefixSid      
RtlEqualSid   before 5.0 (IFS), undocumented since 6.0, declared start is 5.0
RtlEqualString   since 6.1 revision, documented start is 5.0 since 6.0, declared start is 5.0
RtlEqualUnicodeString   since 6.1 revision, documented start is 5.0 since 6.0, declared start is 5.0
RtlEraseUnicodeString      
RtlExpandEnvironmentStrings discontinued in 3.50;
partly restored in 6.0
   
RtlExpandEnvironmentStrings_U      
RtlExtendedIntegerMultiply x86 only before 3.50 to 3.51, documented since 5.1, deprecated;
since 6.0, declared start is 5.0
RtlExtendedLargeIntegerDivide x86 only before 3.50 to 3.51, documented since 5.1, deprecated;
since 6.0, declared start is 5.0
RtlExtendedMagicDivide x86 only before 3.50 to 3.51, documented since 5.1, deprecated;
since 6.0, declared start is 5.0
RtlFillMemory   since 6.1 revision, documented start is 5.0  
RtlFillMemoryUlong x86 only before 5.0 (IFS), undocumented since 6.0, declared start is 5.1
RtlFindClearBits   before 5.0, undocumented;
since 6.1 revision, documented start is 5.0
since 6.0, declared start is 5.0
RtlFindClearBitsAndSet   before 5.0, undocumented;
since 6.1 revision, documented start is 5.0
since 6.0, declared start is 5.0
RtlFindLongestRunClear   before 5.0, undocumented;
since 6.1 revision, documented start is 5.0
since 6.0, declared start is 5.0
RtlFindLongestRunSet discontinued in 5.0 in 5.0 (IFS), declared  
RtlFindMessage      
RtlFindSetBits   before 5.0, undocumented;
since 6.1 revision, documented start is 5.0
since 6.0, declared start is 5.0
RtlFindSetBitsAndClear   before 5.0, undocumented;
since 6.1 revision, documented start is 5.0
since 6.0, declared start is 5.0
RtlFirstFreeAce      
RtlFormatMessage      
RtlFreeAnsiString   since 6.1 revision, documented start is 5.0 since 6.0, declared start is 5.0
RtlFreeHeap   before 5.1 (IFS), undocumented;
documented start is 5.1
since 6.0, declared start is 5.0
RtlFreeOemString   before 5.0 (IFS), undocumented since 6.0, declared start is 5.0
RtlFreeSid      
RtlFreeUnicodeString   since 6.1 revision, documented start is 5.0  
RtlGenerate8dot3Name   before 5.0 (IFS), undocumented since 6.0, declared start is 5.0
RtlGetAce   before 5.1 (IFS), undocumented;
documented start is 5.1
 
RtlGetCallersAddress   before 3.50 to 3.51, undocumented;
before 5.1, declared
since 6.0, declared start is 5.0
RtlGetControlSecurityDescriptor      
RtlGetCurrentDirectory_U      
RtlGetDaclSecurityDescriptor   before 5.2 SP1 (IFS), undocumented;
documented start is 5.2 SP1
since 6.0, declared start is 5.0
RtlGetElementGenericTable   before 5.0 (IFS), undocumented since 6.0, declared start is 5.0
RtlGetFullPathName_U      
RtlGetGroupSecurityDescriptor   before 5.2 SP1 (IFS), undocumented;
documented start is 5.2 SP1
since 6.0, declared start is 5.2 SP1
RtlGetHandleValueHeap discontinued in 3.50    
RtlGetHeapUserValue discontinued in 3.50    
RtlGetNtGlobalFlags      
RtlGetNtProductType      
RtlGetOwnerSecurityDescriptor   before 5.0 (IFS), undocumented;
since 6.0, documented start is 5.0
before 5.1 (IFS) to 6.0, not declared;
since 6.0, declared start is 5.0
RtlGetSaclSecurityDescriptor   before 5.2 SP1 (IFS), undocumented;
documented start is 5.2 SP1
since 6.0, declared start is 5.2 SP1
RtlIdentifierAuthoritySid      
RtlImageDirectoryEntryToData      
RtlImageNtHeader      
RtlImpersonateSelf      
RtlInitAnsiString   since 6.1 revision, documented start is 5.0 since 6.0, declared start is 5.0
RtlInitCodePageTable   before 5.0 (IFS), undocumented;
before 5.1 (IFS) to 6.0, declared
since 6.0, declared start is 5.0
RtlInitNlsTables      
RtlInitString   since 6.1 revision, documented start is 5.0 since 6.0, declared start is 5.0
RtlInitUnicodeString   since 6.1 revision, documented start is 5.0  
RtlInitializeBitMap   before 5.0, undocumented;
since 6.1 revision, documented start is 5.0
since 6.0, declared start is 5.0
RtlInitializeContext      
RtlInitializeCriticalSection      
RtlInitializeGenericTable   before 5.0 (IFS), undocumented;
since 6.1, documented start is 5.0
since 6.0, declared start is 5.0
RtlInitializeProfile discontinued in 3.50    
RtlInitializeRXact      
RtlInitializeResource      
RtlInitializeSid   before 5.0 (IFS), undocumented;
since 5.1 (IFS) to 6.0, documented start is 5.0
before 5.1 (IFS) to 6.0, not declared;
since 6.0, declared start is 5.0
RtlInitializeStackTraceDataBase discontinued in 3.50;
restored in 5.1 SP2;
discontinued in 6.0
   
RtlInsertElementGenericTable   before 5.0 (IFS), undocumented since 6.0, declared start is 5.0
RtlIntegerToChar      
RtlIntegerToUnicodeString      
RtlIsDosDeviceName_U      
RtlIsGenericTableEmpty   in 5.0 (IFS), documented but not declared  
RtlLargeIntegerAdd x86 only before 3.50 to 3.51, documented since 5.1, deprecated
RtlLargeIntegerArithmeticShift x86 only before 3.50 to 3.51, documented since 5.1, deprecated;
since 6.0, deprecated (5.1)
RtlLargeIntegerDivide x86 only before 3.50 to 3.51, documented since 5.1, deprecated;
since 6.0, declared start is 5.0
RtlLargeIntegerNegate x86 only before 3.50 to 3.51, documented since 5.1, deprecated
RtlLargeIntegerShiftLeft x86 only before 3.50 to 3.51, documented since 5.1, deprecated;
since 6.0, deprecated (5.1)
RtlLargeIntegerShiftRight x86 only before 3.50 to 3.51, documented since 5.1, deprecated;
since 6.0, deprecated (5.1)
RtlLargeIntegerSubtract x86 only before 3.50 to 3.51, documented since 5.1, deprecated
RtlLargeIntegerToChar      
RtlLeaveCriticalSection      
RtlLengthRequiredSid   before 5.0 (IFS), undocumented;
since 5.1 (IFS) to 6.0, documented start is 5.0
before 5.1 (IFS) to 6.0, not declared;
since 6.0, declared start is 5.0
RtlLengthSecurityDescriptor   before 3.50 to 3.51, undocumented;
since 6.1 revision, documented start is 5.0
since 6.0, declared start is 5.0
RtlLengthSid   before 5.0 (IFS), undocumented; since 6.0, declared start is 5.0
RtlLocalTimeToSystemTime      
RtlLockHeap      
RtlLogStackBackTrace discontinued in 3.50;
restored in 5.1
   
RtlLookupElementGenericTable   before 5.0 (IFS), undocumented since 6.0, declared start is 5.0
RtlLookupSymbolByAddress discontinued in 3.50    
RtlLookupSymbolByName discontinued in 3.50    
RtlMakeSelfRelativeSD      
RtlMapGenericMask   before 4.0, undocumented;
before 5.1, declared;
since 6.1 revision, documented start is 5.0
since 6.0, declared start is 5.0
RtlMoveMemory   since 6.1 revision, documented start is 5.0  
RtlMultiByteToUnicodeN   before 5.0 (IFS), undocumented since 6.0, declared start is 5.0
RtlMultiByteToUnicodeSize   before 5.0 (IFS), undocumented since 6.0, declared start is 5.0
RtlNewInstanceSecurityObject      
RtlNewSecurityGrantedAccess      
RtlNewSecurityObject      
RtlNormalizeProcessParams      
RtlNtStatusToDosError   before 5.1 (IFS) to 6.0, undocumented;
before 6.1, reserved;
since 6.1, documented start is 5.0
since 6.0, declared start is 5.0
RtlNumberGenericTableElements   before 5.0 (IFS), undocumented since 6.0, declared start is 5.0
RtlNumberOfClearBits   before 5.0, undocumented;
since 6.1 revision, documented start is 5.0
since 6.0, declared start is 5.0
RtlNumberOfSetBits   before 5.0, undocumented;
since 6.1 revision, documented start is 5.0
since 6.0, declared start is 5.0
RtlOemStringToUnicodeSize   before 5.0 (IFS), undocumented  
RtlOemStringToUnicodeString   before 5.0 (IFS), undocumented since 6.0, declared start is 5.0
RtlOemToUnicodeN   before 5.0 (IFS), undocumented since 6.0, declared start is 5.0
RtlOpenCurrentUser      
RtlPcToFileHeader   documented only in SDK  
RtlPrefixString   before 6.2, undocumented  
RtlPrefixUnicodeString   before 4.0, undocumented;
before 5.0, declared;
since 6.1 revision, documented start is 5.0
since 6.0, declared start is 5.0
RtlQueryEnvironmentVariable discontinued in 3.50;
restored in 6.0
   
RtlQueryEnvironmentVariable_U      
RtlQueryInformationAcl      
RtlQueryModuleInformation discontinued in 3.50;
restored in 6.0
   
RtlQueryProcessBackTraceInformation      
RtlQueryProcessHeapInformation      
RtlQueryProcessLockInformation      
RtlQueryRegistryValues   since 6.1 revision, documented start is 5.0 since 6.0, declared start is 5.0
RtlQuerySecurityObject      
RtlQueryTimeZoneInformation      
RtlRaiseException      
RtlRaiseStatus      
RtlRandom   before 5.0 (IFS), undocumented;
since 6.2, documented start is 5.0
since 6.0, declared start is 5.0
RtlReAllocateHeap      
RtlRealPredecessor   in 5.0 (IFS), documented but not declared  
RtlRealSuccessor   in 5.0 (IFS), documented but not declared  
RtlReleasePebLock      
RtlReleaseResource      
RtlRemoteCall      
RtlResetRtlTranslations      
RtlRunDecodeUnicodeString      
RtlRunEncodeUnicodeString      
RtlSecondsSince1970ToTime   before 5.0 (IFS), undocumented since 6.0, declared start is 5.0
RtlSecondsSince1980ToTime   before 5.0 (IFS), undocumented since 6.0, declared start is 5.0
RtlSelfRelativeToAbsoluteSD   before 5.2 SP1 (IFS), undocumented;
documented start is 5.2 SP1
since 6.0, declared start is 5.2 SP1
RtlSetAllBits   before 5.0, undocumented;
since 6.1 revision, documented start is 5.0
since 6.0, declared start is 5.0
RtlSetBits   before 5.0, undocumented;
since 6.1 revision, documented start is 5.0
since 6.0, declared start is 5.0
RtlSetCurrentDirectory_U      
RtlSetCurrentEnvironment      
RtlSetDaclSecurityDescriptor   since 6.1 revision, documented start is 5.0 since 6.0, declared start is 5.0
RtlSetEnvironmentVariable      
RtlSetGroupSecurityDescriptor   before 5.2 SP1 (IFS), undocumented;
documented start is 5.2 SP1
since 6.0, declared start is 5.2 SP1
RtlSetHandleValueHeap discontinued in 3.50    
RtlSetHeapUserValue discontinued in 3.50    
RtlSetInformationAcl      
RtlSetOwnerSecurityDescriptor   before 5.0 (IFS), undocumented since 6.0, declared start is 5.0
RtlSetSaclSecurityDescriptor      
RtlSetSecurityObject      
RtlSetTimeZoneInformation      
RtlSizeHeap      
RtlSnapshotHeap discontinued in 3.50    
RtlSplay   before 5.0 (IFS), undocumented since 6.0, declared start is 5.0
RtlStartProfile discontinued in 3.50    
RtlStartRXact      
RtlStopProfile discontinued in 3.50    
RtlSubAuthorityCountSid   before 5.1 (IFS) to 6.0, undocumented since 6.0, declared start is 5.1
RtlSubAuthoritySid   before 5.0 (IFS), undocumented;
since 6.0, documented start is 5.0
before 5.1 (IFS) to 6.0, not declared;
since 6.0, declared start is 5.0
RtlSubtreePredecessor   before 5.1 (IFS) to 6.0, documented but not declared  
RtlSubtreeSuccessor   before 5.1 (IFS) to 6.0, documented but not declared  
RtlSystemTimeToLocalTime      
RtlTimeFieldsToTime   before 3.50 to 3.51, undocumented;
since 6.1 revision, documented start is 5.0
since 6.0, declared start is 5.0
RtlTimeToElapsedTimeFields      
RtlTimeToSecondsSince1970   before 5.0 (IFS), undocumented since 6.0, declared start is 5.0
RtlTimeToSecondsSince1980   before 5.0 (IFS), undocumented since 6.0, declared start is 5.0
RtlTimeToTimeFields   since 6.1 revision, documented start is 5.0 since 6.0, declared start is 5.0
RtlUnicodeStringToAnsiSize   before 5.0, undocumented;
since 6.1 revision, documented start is 5.0
 
RtlUnicodeStringToAnsiString   since 6.1 revision, documented start is 5.0 since 6.0, declared start is 5.0
RtlUnicodeStringToCountedOemString   before 5.0 (IFS), undocumented since 6.0, declared start is 5.0
RtlUnicodeStringToInteger   since 6.1 revision, documented start is 5.0 before 4.0, not declared;
since 6.0, declared start is 5.0
RtlUnicodeStringToOemSize   before 5.0 (IFS), undocumented  
RtlUnicodeStringToOemString   before 5.0 (IFS), undocumented since 6.0, declared start is 5.0
RtlUnicodeToCustomCPN   before 5.0 (IFS), undocumented;
before 5.1 (IFS) to 6.0, declared
since 6.0, declared start is 5.0
RtlUnicodeToMultiByteN   before 5.0 (IFS), undocumented since 6.0, declared start is 5.0
RtlUnicodeToMultiByteSize   before 5.0 (IFS), undocumented since 6.0, declared start is 5.0
RtlUnicodeToOemN     before 5.0 (IFS), undocumented since 6.0, declared start is 5.0
RtlUniform      
RtlUnlockHeap      
RtlUnwind   documented only in SDK  
RtlUpcaseUnicodeChar   before 5.0, undocumented;
since 6.1 revision, documented start is 5.0
since 6.0, declared start is 5.0
RtlUpcaseUnicodeString   since 6.1 revision, documented start is 5.0 since 6.0, declared start is 5.0
RtlUpcaseUnicodeStringToAnsiString      
RtlUpcaseUnicodeStringToCountedOemString   before 5.0 (IFS), undocumented since 6.0, declared start is 5.0
RtlUpcaseUnicodeStringToOemString   before 5.0 (IFS), undocumented since 6.0, declared start is 5.0
RtlUpcaseUnicodeToCustomCPN   before 5.0 (IFS), undocumented;
before 5.1 (IFS) to 6.0, declared
since 6.0, declared start is 5.0
RtlUpcaseUnicodeToMultiByteN   before 5.0 (IFS), undocumented since 6.0, declared start is 5.0
RtlUpcaseUnicodeToOemN   before 5.0 (IFS), undocumented since 6.0, declared start is 5.0
RtlUpperChar   before 4.0, undocumented;
before 5.0, declared;
since 6.1 revision, documented start is 5.0
since 6.0, declared start is 5.0
RtlUpperString   since 6.1 revision, documented start is 5.0 since 6.0, declared start is 5.0
RtlValidAcl      
RtlValidSecurityDescriptor   before 3.50 to 3.51, undocumented;
since 6.1 revision, documented start is 5.0
since 6.0, declared start is 5.0
RtlValidSid   before 5.0 (IFS), undocumented since 6.0, declared start is 5.0
RtlValidateHeap      
RtlWriteRegistryValue   since 6.1 revision, documented start is 5.0 since 6.0, declared start is 5.0
RtlZeroMemory   since 6.1 revision, documented start is 5.0  
RtlpInitializeRtl discontinued in 4.0    
RtlpNtCreateKey      
RtlpNtEnumerateSubKey      
RtlpNtMakeTemporaryKey      
RtlpNtOpenKey      
RtlpNtQueryValueKey      
RtlpNtSetValueKey      
RtlpUnWaitCriticalSection      
RtlpWaitForCriticalSection      

Some Rtl functions are supposed above to have been documented first in an IFS Kit for Windows XP or for Windows Server 2003 SP1 even though neither kit has been obtained for inspection. In each such case, the function’s documentation in the WDK for Windows Vista is in the IFS section and already gives the earlier version as the minimum. The inference is that although the minimum is entirely fictitious for when the function is first exported from the kernel, it is credibly correct about when the function was first documented for use by non-Microsoft programmers. Beware of a further inference: conditional-compilation blocks that the WDK for Windows Vista adds to the declarations are here dismissed as having been written independently of the documentation, else RtlCreateHeap and RtlDestroyHeap were documented as early as the Windows XP IFS Kit while RtlAllocateHeap and RtlFreeHeap were not.

Though RtlEqualLuid is exported from all known versions of the Windows kernel, no known edition of NTDDK.H and WDM.H declares it as a function: all define it by macro.

That RtlFindLongestRunSet ceases as an exported function in version 5.0 may have been a late decision: it’s still declared in the NTIFS.H from the Windows 2000 IFS Kit.

The RtlFreeHeap function has the rare distinction of having changed its prototype while documented. Its return type widens from BOOLEAN to LOGICAL in version 6.2. This may have been motivated by a long-running off-and-on problem with matching the NTDLL implementation of RtlFreeHeap (returning a BOOLEAN) to the Win32 HeapFree function (returning a BOOL).

Another change of prototype affects RtlGenerate8dot3Name. Starting with version 6.0 SP1, it returns an NTSTATUS instead of returning nothing. Not until the WDK for Windows 8 does the documentation even show the new return type under the Syntax heading, but nothing in the Remarks alerts to the reader to any change of functionality and the textual description of the “Return value” persists as “None”. This didn’t get addressed until some time after the first WDK for Windows 10.

Floating-Point Miscellany

Function Export History Documentation History Declaration History
SaveEm87Context discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
   

Zw Functions

Function Export History Documentation History Declaration History
ZwAcceptConnectPort      
ZwAccessCheck      
ZwAccessCheckAndAuditAlarm      
ZwAdjustGroupsToken      
ZwAdjustPrivilegesToken      
ZwAlertResumeThread      
ZwAlertThread      
ZwAllocateLocallyUniqueId      
ZwAllocateVirtualMemory   before 5.0 (IFS), undocumented;
since 6.1 revision, documented start is 5.0
since 6.0, declared start is 5.0
ZwCancelIoFile      
ZwCancelTimer   before 6.0, declared  
ZwClose   since 6.1 revision, documented start is 5.0 since 6.0, declared start is 5.0
ZwCloseObjectAuditAlarm      
ZwCompleteConnectPort      
ZwConnectPort   in 5.1 (IFS) to 6.0, declared in 6.0, declared start is 6.0
ZwContinue      
ZwCreateDirectoryObject   since 6.1 revision, documented start is 5.0 since 6.0, declared start is 5.0
ZwCreateEvent   before 5.0 (IFS), undocumented;
before 5.1 (IFS), declared;
documented start is 5.1
since 6.0, declared start is 5.0
ZwCreateEventPair      
ZwCreateFile   before 3.50 to 3.51, undocumented;
since 6.1, documented start is 5.0
since 6.0, declared start is 5.0
ZwCreateKey   since 6.1 revision, documented start is 5.0 since 6.0, declared start is 5.0
ZwCreateMailslotFile      
ZwCreateMutant      
ZwCreateNamedPipeFile      
ZwCreatePagingFile      
ZwCreatePort      
ZwCreateProcess      
ZwCreateProfile      
ZwCreateSection   before 5.0 (IFS), undocumented;
since 6.1 revision, documented start is 5.0
since 6.0, declared start is 5.0
ZwCreateSemaphore      
ZwCreateSymbolicLinkObject      
ZwCreateThread      
ZwCreateTimer   before 4.0, undocumented;
before 6.0, declared
since 6.0, declared start is 5.0
ZwCreateToken      
ZwDelayExecution      
ZwDeleteKey   before 3.50 to 3.51, undocumented;
since 6.1 revision, documented start is 5.0
since 6.0, declared start is 5.0
ZwDeleteValueKey   before 5.1, undocumented;
before 6.1, documented start is 5.1;
documented start is 5.0
since 6.0, declared start is 5.0
ZwDeviceIoControlFile   before 5.0 (IFS), undocumented;
since 6.1 revision, documented start is 5.0
since 6.0, declared start is 5.0
ZwDisplayString   before 6.1, undocumented declared start is 5.0
ZwDuplicateObject   before 5.0 (IFS), undocumented;
before 5.1 (IFS) to 6.0, declared;
before 6.2, reserved;
since 6.2, documented start is 5.0
since 6.0, declared start is 5.0
ZwDuplicateToken   before 6.1, undocumented;
documented start is 5.0
 
ZwEnumerateKey   since 6.1 revision, documented start is 5.0 since 6.0, declared start is 5.0
ZwEnumerateValueKey   since 6.1 revision, documented start is 5.0 since 6.0, declared start is 5.0
ZwExtendSection      
ZwFlushBuffersFile      
ZwFlushInstructionCache      
ZwFlushKey   since 6.1 revision, documented start is 5.0 since 6.0, declared start is 5.0
ZwFlushVirtualMemory   before 5.1 (IFS), undocumented;
documented start is 5.1
 
ZwFlushWriteBuffer      
ZwFreeVirtualMemory   before 5.0 (IFS), undocumented;
since 6.1 revision, documented start is 5.0
since 6.0, declared start is 5.0
ZwFsControlFile   before 5.1 (IFS) to 6.0, undocumented;
since 6.1 revision, documented start is 5.0
since 6.0, declared start is 5.0
ZwGetContextThread      
ZwGetTickCount discontinued in 5.1    
ZwImpersonateClientOfPort      
ZwImpersonateThread      
ZwInitializeRegistry      
ZwInitializeVDM discontinued in 3.50    
ZwListenPort      
ZwLoadDriver   before 5.1 (IFS), undocumented;
documented start is 5.1
since 6.0, declared start is 5.0
ZwLoadKey      
ZwLockFile      
ZwLockVirtualMemory      
ZwMakeTemporaryObject   since 6.1 revision, documented start is 5.0 since 6.0, declared start is 5.0
ZwMapViewOfSection   since 6.1 revision, documented start is 5.0 since 6.0, declared start is 5.0
ZwNotifyChangeDirectoryFile      
ZwNotifyChangeKey   before 5.1 (IFS) to 6.0, undocumented;
before 6.1, declared;
documented start is 5.1
since 6.0, declared start is 5.0
ZwOpenDirectoryObject   before 5.1 (IFS), undocumented;
documented start is 5.1
since 6.0, declared start is 5.0
ZwOpenEvent   before 6.0, undocumented;
documented start is 5.2
since 6.0, declared start is 5.2
ZwOpenEventPair      
ZwOpenFile   before 5.0, undocumented;
since 6.1 revision, documented start is 5.0
since 6.0, declared start is 5.0
ZwOpenKey   since 6.1 revision, documented start is 5.0 since 6.0, declared start is 5.0
ZwOpenMutant      
ZwOpenObjectAuditAlarm      
ZwOpenProcess   before 6.0, undocumented;
since 6.1 revision, documented start is 5.0
 
ZwOpenProcessToken      
ZwOpenSection   since 6.1 revision, documented start is 5.0 since 6.0, declared start is 5.0
ZwOpenSemaphore      
ZwOpenSymbolicLinkObject   before 5.0, undocumented;
since 6.1 revision, documented start is 5.0
since 6.0, declared start is 5.0
ZwOpenThread      
ZwOpenThreadToken      
ZwOpenTimer   before 6.0, declared  
ZwPrivilegeCheck      
ZwPrivilegeObjectAuditAlarm      
ZwPrivilegedServiceAuditAlarm      
ZwProtectVirtualMemory      
ZwPulseEvent      
ZwQueryDefaultLocale      
ZwQueryDirectoryFile   before 5.0 (IFS), undocumented;
since 5.1 (IFS), documented start is 5.1
before 5.1 (IFS), not declared;
since 6.0, declared start is 5.0
ZwQueryDirectoryObject      
ZwQueryEaFile   before 5.1 (IFS) to 6.0, undocumented;
before 6.2, declared
 
ZwQueryEvent      
ZwQueryInformationFile   before 3.50 to 3.51, undocumented;
since 6.1 revision, documented start is 5.0
since 6.0, declared start is 5.0
ZwQueryInformationPort      
ZwQueryInformationProcess      
ZwQueryInformationThread      
ZwQueryInformationToken   before 5.1 (IFS), undocumented;
documented start is 5.1
since 6.0, declared start is 5.0
ZwQueryIntervalProfile      
ZwQueryKey   since 6.1 revision, documented start is 5.0 since 6.0, declared start is 5.0
ZwQueryMutant      
ZwQueryObject   before 6.1, undocumented;
documented start is 5.0
declared start is 5.0
ZwQueryPerformanceCounter      
ZwQuerySection      
ZwQuerySecurityObject   before 5.1 (IFS), undocumented;
documented start is 5.1
since 6.0, declared start is 5.0
ZwQuerySemaphore      
ZwQuerySymbolicLinkObject   before 5.0, undocumented;
since 6.1 revision, documented start is 5.0
since 6.0, declared start is 5.0
ZwQuerySystemEnvironmentValue      
ZwQuerySystemInformation      
ZwQuerySystemTime      
ZwQueryTimer      
ZwQueryValueKey   since 6.1 revision, documented start is 5.0 since 6.0, declared start is 5.0
ZwQueryVirtualMemory      
ZwQueryVolumeInformationFile   before 5.1 (IFS) to 6.0, undocumented;
since 6.2, documented start is 5.1
since 6.0, declared start is 5.0
ZwRaiseException      
ZwRaiseHardError      
ZwReadFile   before 3.50 to 3.51, undocumented;
since 6.1 revision, documented start is 5.0
since 6.0, declared start is 5.0
ZwReadRequestData      
ZwReadVirtualMemory      
ZwRegisterThreadTerminatePort      
ZwReleaseMutant      
ZwReleaseProcessMutant discontinued in 4.0    
ZwReleaseSemaphore      
ZwRenameValueKey discontinued in 3.50    
ZwReplaceKey      
ZwReplyPort      
ZwReplyWaitReceivePort      
ZwReplyWaitReplyPort      
ZwRequestPort      
ZwRequestWaitReplyPort   in 5.1 (IFS) to 6.0, declared in 6.0, declared start is 5.0
ZwResetEvent      
ZwRestoreKey   before 6.2, undocumented declared start is 6.1
ZwResumeThread      
ZwSaveKey   before 6.2, undocumented declared start is 6.1
ZwSetContextThread      
ZwSetDefaultHardErrorPort      
ZwSetDefaultLocale      
ZwSetEaFile   before 5.1 (IFS) to 6.0, undocumented;
before 6.2, declared
 
ZwSetEvent   before 5.0 (IFS), undocumented;
before 5.1 (IFS), declared;
documented start is 5.1
since 6.0, declared start is 5.0
ZwSetHighEventPair      
ZwSetHighWaitLowEventPair      
ZwSetHighWaitLowThread discontinued in 5.0    
ZwSetInformationFile   since 6.1 revision, documented start is 5.0 since 6.0, declared start is 5.0
ZwSetInformationKey      
ZwSetInformationProcess      
ZwSetInformationThread   since 6.1 revision, documented start is 5.0 since 6.0, declared start is 5.0
ZwSetInformationToken      
ZwSetIntervalProfile      
ZwSetLdtEntries      
ZwSetLowEventPair      
ZwSetLowWaitHighEventPair      
ZwSetLowWaitHighThread discontinued in 5.0    
ZwSetSecurityObject   before 5.1 (IFS), undocumented;
documented start is 5.1
 
ZwSetSystemEnvironmentValue      
ZwSetSystemTime      
ZwSetTimer   before 4.0, undocumented;
before 6.0, declared
since 6.0, declared start is 5.0
ZwSetValueKey   since 6.1 revision, documented start is 5.0 since 6.0, declared start is 5.0
ZwSetVolumeInformationFile   before 5.2 (IFS), undocumented;
documented start is 5.2
 
ZwShutdownSystem      
ZwStartProfile      
ZwStopProfile      
ZwSuspendThread      
ZwSystemDebugControl      
ZwTerminateProcess   before 6.0, undocumented;
since 6.1 revision, documented start is 5.0
 
ZwTerminateThread      
ZwTestAlert      
ZwUnloadDriver   before 5.1 (IFS), undocumented;
documented start is 5.1
since 6.0, declared start is 5.0
ZwUnloadKey      
ZwUnlockFile      
ZwUnlockVirtualMemory      
ZwUnmapViewOfSection   since 6.1 revision, documented start is 5.0 since 6.0, declared start is 5.0
ZwVdmControl      
ZwVdmStartExecution discontinued in 3.50    
ZwWaitForMultipleObjects      
ZwWaitForProcessMutant discontinued in 4.0    
ZwWaitForSingleObject   before 5.0 (IFS), undocumented;
before 5.1 (IFS), declared;
documented start is 5.1
since 6.0, declared start is 5.0
ZwWaitHighEventPair      
ZwWaitLowEventPair      
ZwWriteFile   before 3.50 to 3.51, undocumented;
since 6.1 revision, documented start is 5.0
since 6.0, declared start is 5.0
ZwWriteRequestData      
ZwWriteVirtualMemory      

The documentation history of ZwDeleteValueKey is complicated by documentation in parallel. No documentation or declaration is known from any DDK before Windows XP. In the WDK for Windows Vista, however, it has two pages: one under Installable File System; the other in the general section for Driver Support Routines. Presumably, it had been documented in an IFS Kit before the merger into the WDK for Windows Vista. The IFS documentation starts the function’s availability at Windows XP. Without a Windows XP IFS Kit for reference, it can’t be discounted as the first documentation. The less developed documentation in the general section appears first in the DDK for Windows Server 2003 SP1 and says nothing about availability. The WDK for Windows 7 drops it in favour of the IFS documentation, but with the function’s availability changed to Windows 2000 and later.

Though ZwQueryDirectoryFile is documented in the Windows 2000 IFS Kit, it comes with a warning in red that “This is preliminary documentation and subject to change” and the NTIFS.H from the same kit does not declare the function. Presumably, the documentation was settled in time for the Windows XP IFS Kit and Microsoft has ever since meant that Windows XP is when the function became documented for use. A declaration was perhaps also settled on as early as the Windows XP IFS Kit. Certainly, a declaration is presented in the WDK for Windoiws Vista, but with a conditional-compilation block that doesn’t agree with the documentation.

Floating-Point Emulation Functions

Function Export History
__eCommonExceptions discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eEmulatorInit discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eF2XM1 discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFABS discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFADD32 discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFADD64 discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFADDPreg discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFADDreg discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFADDtop discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFCHS discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFCOM discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFCOM32 discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFCOM64 discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFCOMP discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFCOMP32 discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFCOMP64 discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFCOMPP discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFCOS discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFDECSTP discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFDIV32 discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFDIV64 discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFDIVPreg discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFDIVR32 discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFDIVR64 discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFDIVRPreg discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFDIVRreg discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFDIVRtop discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFDIVreg discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFDIVtop discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFFREE discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFIADD16 discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFIADD32 discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFICOM16 discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFICOM32 discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFICOMP16 discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFICOMP32 discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFIDIV16 discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFIDIV32 discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFIDIVR16 discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFIDIVR32 discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFILD16 discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFILD32 discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFILD64 discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFIMUL16 discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFIMUL32 discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFINCSTP discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFINIT discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFIST16 discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFIST32 discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFISTP16 discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFISTP32 discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFISTP64 discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFISUB16 discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFISUB32 discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFISUBR16 discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFISUBR32 discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFLD1 discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFLD32 discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFLD64 discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFLD80 discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFLDCW discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFLDENV discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFLDL2E discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFLDLN2 discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFLDPI discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFLDZ discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFMUL32 discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFMUL64 discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFMULPreg discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFMULreg discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFMULtop discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFPATAN discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFPREM discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFPREM1 discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFPTAN discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFRNDINT discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFRSTOR discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFSAVE discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFSCALE discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFSIN discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFSQRT discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFST discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFST32 discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFST64 discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFSTCW discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFSTENV discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFSTP discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFSTP32 discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFSTP64 discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFSTP80 discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFSTSW discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFSUB32 discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFSUB64 discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFSUBPreg discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFSUBR32 discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFSUBR64 discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFSUBRPreg discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFSUBRreg discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFSUBRtop discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFSUBreg discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFSUBtop discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFTST discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFUCOM discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFUCOMP discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFUCOMPP discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFXAM discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFXCH discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFXTRACT discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFYL2X discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eFYL2XP1 discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0
__eGetStatusWord discontinued in 5.1 SP2;
discontinued in 5.2 SP1;
discontinued in 6.0

These several dozen functions for floating-point emulation eventually got discontinued in what looks to have been a clean-up across multiple versions (contemporaneous with the release of 64-bit Windows for the x64 platform). These functions drop out from version 5.1 at Windows XP SP2 and from version 5.2 at Windows Server 2003 SP1 and do not survive at all to version 6.0. Some may say this was long past time, especially since even the original Windows XP requires the cmpxchg8b instruction and thus in practice (if only for processors made by Intel) a CPU that’s recent enough to be sure of having a built-in floating-point unit.

One Straggler

Function Export History
xRtlDosPathNameToNtPathName discontinued in 3.50