Kernel Version 6.2 Exports By Name

The large table on this page lists the functions and variables that are newly exported by name from the Windows kernel in its first release for version 6.2, i.e., for the original Windows 8. Several do not survive to the next version. Few were documented immediately (or even by the time of an online search for them all on 29th February 2016).

For the table below, documentation status is summarised by colour coding so that more detail can be given as Remarks with less text. (If you read this website with scripts enabled, then hovering the mouse over any coloured text will produce a tooltip that shows why the text is coloured.) Functions that have their own non-trivial documentation are shown with no background colour. If the function is documented as reserved or obsolete, it is shaded red or shaded grey, respectively. Functions that appear to be completely undocumented are highlighted yellow. If a function is documented now but was not documented in the first contemporaneous Device Driver Kit (DDK), Windows Driver Kit (WDK) or Installable File System (IFS) Kit, then it is shaded yellow to retain some of its previous status. Many undocumented functions do at least have C-language declarations in one or another header file from the WDK. These are shaded orange, except for one special case. Some declarations are known only from “minwin” headers that Microsoft published in early editions of the WDK for Windows 10 which seem since to have been withdrawn. These are highlighted orange to indicate that public knowledge even of the declaration is exceptional.

Function Documentation History
BgkDisplayCharacter  
BgkGetConsoleState  
BgkGetCursorState  
BgkSetCursor  
CcAddDirtyPagesToExternalCache  
CcCopyReadEx  
CcCopyWriteEx  
CcDeductDirtyPagesFromExternalCache  
CcFlushCacheToLsn  
CcIsThereDirtyLoggedPages documented but not declared
CcRegisterExternalCache  
CcScheduleReadAheadEx  
CcSetAdditionalCacheAttributesEx  
CcSetLogHandleForFileEx documented but not declared
CcSetLoggedDataThreshold documented but not declared
CcSetReadAheadGranularityEx documented but not declared
CcUnmapFileOffsetFromSystemCache documented but not declared
CcUnregisterExternalCache  
CcZeroDataOnDisk  

Surely much of the point to documenting a function is that programmers can use it and even that its use by programmers is intended. It’s therefore unusual that a documented function has no declaration among the headers that Microsoft publishes for inclusion in source code. The six cases that are known from the IFS Kit for Windows 2000 look like oversights: declarations were supplied with the WDK for Windows Vista, if not earlier. That Windows 8 documents five new Cache Manager functions without declaring them in NTIFS.H may be another such oversight, but it has been a long time waiting for correction.

Function Export History Documentation History Declaration History
CmCallbackGetKeyObjectIDEx      
CmCallbackReleaseKeyObjectIDEx      
ExBlockOnAddressPushLock      
ExBlockPushLock      
ExCompositionSurfaceObjectType (data) discontinued in 6.3    
ExGetFirmwareEnvironmentVariable      
ExNotifyBootDeviceRemoval      
ExQueryFastCacheAppOrigin discontinued in 1511    
ExQueryFastCacheDevLicense      
ExQueryTimerResolution   before 2012-2016, declared  
ExQueryWnfStateData      
ExRealTimeIsUniversal      
ExRegisterBootDevice      
ExSetFirmwareEnvironmentVariable      
ExSubscribeWnfStateChange      
ExTimedWaitForUnblockPushLock      
ExTryQueueWorkItem     since 10.0, deprecated
ExUnsubscribeWnfStateChange      
ExWaitForUnblockPushLock      

For the ExQueryTimerResolution function, the WDK documentation for Windows 8, Windows 8.1 and Windows 10 that Microsoft presents as “integrated” with successive editions of Visual Studio has a page titled High-Resolution Timers that lists the function, and states explicitly that a driver may call the function, but the link to what might have been the documentation of the function itself is broken. Whether, or for how long, the supposedly same documentation online had this deficiency is not known, but the page was seen to be available online on 27th February 2016.

When exactly the declaration of ExTryQueueWorkItem was formally deprecated is not known. The first known declaration in public, from the NTOSP.H in the WDK for Windows 10, is already marked as deprecated. A comment suggests IoTryQueueWorkItem as preferred. Since it also is newly exported for version 6.2, deprecation of the one in favour of the other presumably came later. It is here thought to have come when the favoured function got documented.

Function Documentation History
FsRtlAcquireEofLock  
FsRtlAcquireHeaderMutex  
FsRtlAreThereWaitingFileLocks  
FsRtlCheckLockForOplockRequest  
FsRtlDismountComplete  
FsRtlGetFilenameInformation  
FsRtlGetIoAtEof  
FsRtlGetSectorSizeInformation  
FsRtlGetSupportedFeatures  
FsRtlInitializeEofLock  
FsRtlIsSystemPagingFile  
FsRtlIssueDeviceIoControl  
FsRtlKernelFsControlFile  
FsRtlMdlReadEx  
FsRtlPrepareMdlWriteEx  
FsRtlPrepareToReuseEcp  
FsRtlQueryCachedVdl  
FsRtlQueryKernelEaFile before 2015-2018, declared
FsRtlReleaseEofLock  
FsRtlReleaseFileNameInformation  
FsRtlReleaseHeaderMutex  
FsRtlSetKernelEaFile before 2015-2018, declared
FsRtlTryToAcquireHeaderMutex  
FsRtlUpdateDiskCounters  

Somehow I must have missed Microsoft’s documentation of FsRtlQueryKernelEaFile and FsRtlSetKernelEaFile in an online inspection on 13th October 2018. As I find it today, 17th September 2020, it’s not only there but is dated 16th April 2018. This is roughly concurrent with Microsoft’s reorganisation of documentation according to which headers have the functions’ declarations. Whether these two were documented before then, I don’t know. They are not in the WDK documentation for Windows 10 as supplied for Visual Studio 2015.

Function Export History Documentation History Declaration History
HvlGetLpIndexFromApicId      
HvlPerformEndOfInterrupt x64 only    
HvlQueryActiveHypervisorProcessorCount      
HvlQueryActiveProcessors      
HvlQueryHypervisorProcessorNodeNumber      
HvlQueryProcessorTopology      
HvlQueryProcessorTopologyCount      
HvlQueryProcessorTopologyHighestId      
HvlRegisterInterruptCallback      
HvlRegisterWheaErrorNotification      
HvlUnregisterInterruptCallback      
HvlUnregisterWheaErrorNotification      
InbvNotifyDisplayOwnershipChange      
IoBoostThreadIo      
IoClearActivityIdThread      
IoClearReservedDependency discontinued in 6.3    
IoCompletionObjectType (data)      
IoCopyDeviceObjectHint      
IoCreateStreamFileObjectEx2      
IoCreateSystemThread      
IoDecrementKeepAliveCount   before 6.3, reserved  
IoGetActivityIdIrp      
IoGetActivityIdThread      
IoGetDeviceInterfacePropertyData      
IoGetInitiatorProcess      
IoGetOplockKeyContextEx      
IoIncrementKeepAliveCount   before 6.3, reserved  
IoInitializeMiniCompletionPacket     declared start is 6.1
IoIsActivityTracingEnabled      
IoIsInitiator32bitProcess x64 only    
IoIsValidIrpStatus      
IoPropagateActivityIdToThread      
IoQueueWorkItemToNode      
IoRegisterBootDriverCallback      
IoRegisterIoTracking      
IoReportInterruptActive      
IoReportInterruptInactive      
IoReserveDependency     declared start is 6.3
IoResolveDependency     declared start is 6.3
IoSetActivityIdIrp      
IoSetActivityIdThread      
IoSetDeviceInterfacePropertyData      
IoSetMasterIrpStatus      
IoSynchronousCallDriver      
IoTransferActivityId      
IoTryQueueWorkItem   before 10.0, undocumented  
IoUnregisterBootDriverCallback      
IoUnregisterIoTracking      
IoVolumeDeviceToGuid      
IoVolumeDeviceToGuidPath      

The IoDecrementKeepAliveCount and IoIncrementKeepAliveCount functions are not formally reserved in version 6.2 but may as well be. Their documentation in the WDK for Windows 8 has the functions as “for internal use only” and although it presents declarations, each of the parameters and the return value are marked simply as “Do not use.” The declarations are anyway not reproduced in any header file from the WDK for Windows 8 (which would be remarkable for a function that’s documented for use but not for one that’s documented as reserved).

Function Export History Documentation History Declaration History
KdLogDbgPrint      
KeAcquireSpinLock x86 only
(from HAL since 3.10)
since 6.1 revision, documented start is 5.0  
KeDispatchSecondaryInterrupt      
KeForceEnableNx      
KeGetNextTimerExpirationDueTime discontinued in 6.3    
KeHwPolicyLocateResource      
KeInitializeSecondaryInterruptServices      
KeLoadMTRR      
KeQueryEffectivePriorityThread      
KeQueryInterruptTimePrecise   before 6.3, undocumented
before 10.0, declared
documented start is 6.3
declared start is 6.3
KeQuerySystemTimePrecise      
KeQueryTotalCycleTimeThread     declared start is 6.1
KeStallWhileFrozen      
KeSweepLocalCaches      
KeUpdateTime discontinued in 6.3    
KeUpdateTimeAssist discontinued in 6.3    
KeWriteProtectPAT      
KfAcquireSpinLock x86 only
(from HAL since 3.50)
  since 6.0, declared start is 5.0
KfReleaseSpinLock x86 only
(from HAL since 3.50)
  since 6.0, declared start is 5.0
KiEndThreadAccountingPeriod x86 only    
KiEntropyQueueDpc x86 only    

Windows 8 tidied the redistribution of functionality between the HAL and the kernel that started with the introduction of the amd64 processor architecture in Windows Server 2003 SP1. Functions that work with the Interrupt Request Level (IRQL) and with the various types of spin lock are exported from the HAL in x86 Windows but have never been anything other than kernel exports in x64 Windows. The tidying for version 6.2 is that the functions that work solely with the IRQL continue to be implemented wholly in the x86 HAL but the ones that work with spin locks are forwarded to the kernel. Some functions that had been exported only from x64 builds of the kernel become exported from x86 builds too. Three are exported only from the x86 kernel. To support old x86 binaries, all these functions continue as exports from the x86 HAL.

Though KeQueryTotalCycleTimeThread is not exported until Windows 8, it is declared in WDM.H from the WDK for Windows 7. So too is a KeQueryTotalCycleTimeProcess that the version 6.1 kernel has as an internal routine and which no version exports.

Function Documentation History
KseQueryDeviceData  
KseQueryDeviceDataList  
KseQueryDeviceFlags  
KseRegisterShim  
KseRegisterShimEx  
KseSetDeviceFlags  
KseUnregisterShim  
MmAllocateContiguousNodeMemory  
MmAllocateMdlForIoSpace  
MmAllocateNodePagesForMdlEx before 6.3, declared
MmAreMdlPagesCached  
MmGetMaximumFileSectionSize  
MmIsDriverSuspectForVerifier  
MmMapViewInSessionSpaceEx  
MmMapViewInSystemSpaceEx  
MmMdlPageContentsState  
MmPrefetchVirtualAddresses  
NtSetCachedSigningLevel  
NtSetInformationVirtualMemory before 1511, undocumented
ObDuplicateObject  
ObReferenceObjectSafe before 2018, declared
ObReferenceObjectSafeWithTag  
ObWaitForMultipleObjects  
ObWaitForSingleObject  

The ObReferenceObjectSafe function is not in the documentation for the Windows 10 WDK as integrated into Visual Studio 2015 and did not show in surveys of online documentation on 27th February 2016 or 13th October 2018, but it is present today, 17th September 2020. It is dated 19th October 2018 and I see no reason not to take this as Microsoft’s first date of publication.

Function Export History Documentation History
PoAllProcessorsDeepIdle discontinued in 6.3  
PoFxCompleteDevicePowerNotRequired    
PoFxCompleteIdleCondition    
PoFxCompleteIdleState    
PoFxIdleComponent    
PoFxNotifySurprisePowerOn    
PoFxPowerControl    
PoFxProcessorNotification    
PoFxRegisterCoreDevice   before 10.0, undocumented
documented start is 10.0
PoFxRegisterDevice    
PoFxRegisterPlugin   before 10.0, undocumented
documented start is 10.0
PoFxRegisterPluginEx   before 10.0, undocumented
documented start is 10.0
PoFxRegisterPrimaryDevice    
PoFxReportDevicePoweredOn    
PoFxSetComponentLatency    
PoFxSetComponentResidency    
PoFxSetComponentWake    
PoFxSetDeviceIdleTimeout    
PoFxStartDevicePowerManagement    
PoFxUnregisterDevice    
PoGetProcessorIdleAccounting    
PoInitiateProcessorWake    
PoLatencySensitivityHint    
PoNotifyDisableDynamicTick discontinued in 6.3  
PoNotifyVSyncChange    
PoRegisterCoalescingCallback    
PoSetUserPresent    
PoUnregisterCoalescingCallback    
PoUserShutdownCancelled    

That PoFxRegisterCoreDevice, PoFxRegisterPlugin and PoFxRegisterPluginEx are not documented until version 10.0 looks deliberate. In the WDK for Windows 10 as integrated into Visual Studio 2015, they are documented under a new heading. Their declarations are in a new header, named PEPFX.H, which plainly was prepared for Windows 8. That the WDK for Windows 8 and again for Windows 8.1 omit a new heading and header might be disregarded as an oversight, except that the documentation would have it that the functions are new for Windows 10.

Function Documentation History
PsChargeProcessWakeCounter  
PsCreateSystemThreadEx  
PsDereferenceKernelStack  
PsGetProcessCommonJob  
PsGetProcessSignatureLevel  
PsGetThreadExitStatus  
PsIsDiskCountersEnabled  
PsQueryProcessAttributesByToken  
PsQueryTotalCycleTimeProcess  
PsReferenceKernelStack  
PsReleaseProcessWakeCounter  
PsUpdateDiskCounters  
RtlAddAtomToAtomTableEx  
RtlAddResourceAttributeAce  
RtlCheckPortableOperatingSystem  
RtlCheckTokenCapability  
RtlCheckTokenMembership  
RtlCheckTokenMembershipEx  
RtlCopyBitMap  
RtlCrc32  
RtlCrc64  
RtlCreateAtomTableEx  
RtlCreateHashTableEx  
RtlCreateUserThread  
RtlCultureNameToLCID  
RtlDecompressBufferEx  
RtlDeleteElementGenericTableAvlEx  
RtlEqualWnfChangeStamps  
RtlExtractBitMap  
RtlGenerateClass5Guid  
RtlGetAppContainerNamedObjectPath  
RtlIsUntrustedObject  
RtlLCIDToCultureName  
RtlNumberOfClearBitsInRange  
RtlNumberOfSetBitsInRange  
RtlOpenCurrentUser  
RtlQueryInformationAcl  
RtlQueryPackageIdentity before 2019, declared
RtlQueryRegistryValuesEx  
RtlQueryValidationRunlevel  
RtlRbInsertNodeEx  
RtlRbRemoveNode  
RtlSetControlSecurityDescriptor  
RtlSetPortableOperatingSystem  

Starting with the WDK for Windows 8, WDM.H mentions RtlCheckTokenMembership in a comment for defining “flags” for use with the function. Yet neither this function nor RtlCheckTokenMembershipEx are declared. The flags look to be intended not for the former but the latter (specifically for its third argument). More research may be required.

I have no record of finding RtlQueryPackageIdentity in Microsoft’s online documentation in October 2018. What’s there now, in September 2020, is dated 30th October 2019 and I see no reason not to accept this as the date of first publication.

Function Export History Documentation History
SeAccessCheckFromStateEx    
SeAuditingAnyFileEventsWithContextEx    
SeAuditingFileEventsWithContextEx    
SeCreateClientSecurityEx    
SeCreateClientSecurityFromSubjectContextEx    
SeGetLogonSessionToken    
SeQuerySecureBootPolicyValue    
SeSecurityAttributePresent    
SeSystemDefaultSd (data)    
SeTokenFromAccessInformation    
TmInitializeTransactionManager   documented start is 6.0
TmIsKTMCommitCoordinator    
TmRenameTransactionManager   documented start is 6.0
TmSinglePhaseReject   documented start is 6.0

For background to the Transaction Manager functions, remember that the functionality was introduced for Windows Vista but none of the functions were documented until Windows 7 (when, of course, they were said to be “Available in Windows Vista and later”).

As suggested by the documentation, the TmInitializeTransactionManager function’s first presence in the kernel is version 6.0. It is even declared in both WDM.H and NTIFS.H from the WDK for Windows Vista. Very plausibly, it was meant to be among the many other Transaction Manager functions that were newly exported for Windows Vista, but it is not actually exported before version 6.2, no matter how long the documentation continues to say differently.

Something similar applies to TmRenameTransactionManager. Its first presence in the kernel is for version 6.1 and it is declared in the WDM.H from the WDK for Windows 7. It plausibly was devised as new for Windows 7, adding to the original interface, but it is not exported until version 6.2 and no sense at all is known for the documented availability in version 6.0.

For more evidence that all three of the documented Transaction Manager functions are newly exported from version 6.2 only because they were overlooked in one or two earlier verions, consider TmSinglePhraseReject. Not only is it present as an internal routine in versions 6.0 and 6.1 and declared in contemporaneous WDK headers but it even gets documented in the WDK for Windows 7.

Function Export History Documentation History Notes
WheaRegisterInUsePageOfflineNotification x64 only   ok
WheaUnregisterInUsePageOfflineNotification x64 only   ok
ZwAlpcConnectPortEx      
ZwCreateWnfStateName      
ZwDeleteWnfStateData      
ZwDeleteWnfStateName      
ZwFlushBuffersFileEx      
ZwQuerySystemEnvironmentValueEx      
ZwQueryWnfStateData      
ZwQueryWnfStateNameInformation      
ZwSetCachedSigningLevel      
ZwSetInformationKey     decl: 6.1
declared start is 6.1
ZwSetInformationVirtualMemory   before 1511, declared ok
ZwSetSystemEnvironmentValueExEx      
ZwUnlockVirtualMemory      
ZwUpdateWnfStateData      
bsearch_s      

Though ZwSetInformationVirtualMemory is not documented in the WDK for Windows 10 as integrated into Visual Studio 2015, it did show in a survey of Microsoft’s online documentation on 27th February 2016. It was then, and still is, very specific that the function is “Available starting with Windows 10, version 1511” and since the same version’s WDK is the first to declare the function in any of the usual headers, I surmise that 1511 is the release for which the function was first documented.

Old Friends

Several more functions that are exported from all earlier versions of x64 builds are now exported from x86 builds too. One, however, is discontinued as an export from both builds in the very next version.

Discontinued

Version 6.2 also stops exporting a few functions. For each, the version in parentheses tells when the function was first exported:

The one Executive function that version 6.2 discontinues as an export is restored as an export for version 10.0.