Geoff Chappell, Software Analyst
The table below lists the 103 functions and variables that are newly exported from the the Windows kernel for the original release of version 3.51. All but seven are still exported in version 10.0. Also listed are four which first appear in version 3.51 but after its original release. One was added for SP1 or SP2 (the former having not been found for inspection). Three more first appear in SP5, i.e., are not exported from SP4.
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 | Export History | Documentation History | Declaration History |
---|---|---|---|
DbgPrompt | before 6.0, undocumented | ||
ExAcquireSharedStarveExclusive | since 6.1 revision, documented start is 5.0 | since 6.0, declared start is 5.0 | |
ExCreateCallback | before 5.0, declared since 6.1 revision, documented start is 5.0 |
since 6.0, declared start is 5.0 | |
ExEventObjectType (data) | before 4.0, undocumented since 5.0, indirectly documented |
||
ExNotifyCallback | before 5.0, declared since 6.1 revision, documented start is 5.0 |
since 6.0, declared start is 5.0 | |
ExPostSystemEvent | discontinued in 5.0 | ||
ExRaiseAccessViolation | before 5.0, declared since 6.1 revision, documented start is 5.0 |
since 6.0, declared start is 5.0 | |
ExRaiseDatatypeMisalignment | before 5.0, declared since 6.1 revision, documented start is 5.0 |
since 6.0, declared start is 5.0 | |
ExRaiseException | |||
ExRegisterCallback | before 5.0, declared since 6.1 revision, documented start is 5.0 |
since 6.0, declared start is 5.0 | |
ExReinitializeResourceLite | since 6.1 revision, documented start is 5.0 | since 6.0, declared start is 5.0 | |
ExUnregisterCallback | before 5.0, declared since 6.1 revision, documented start is 5.0 |
since 6.0, declared start is 5.0 |
As with most exported variables, ExEventObjectType is not itself documented. Starting with the DDK for Windows 2000, however, it gets mentioned in the documentation of exported functions such as ObReferenceObjectByHandle from its being intended as an argument.
Function | Export History | Documentation History | Declaration History |
---|---|---|---|
FsRtlPostPagingFileStackOverflow | before 5.0 (IFS), undocumented since 6.1, documented start is 5.0 |
since 6.0, declared start is 5.0 | |
HalDispatchTable (data) | |||
HalPrivateDispatchTable (data) | |||
InterlockedDecrement | x86 only | since 6.1 revision, documented start is 5.0 | |
InterlockedExchange | x86 only | since 6.1 revision, documented start is 5.0 | |
InterlockedIncrement | x86 only | since 6.1 revision, documented start is 5.0 | |
IoDriverObjectType (data) | |||
IoGetAttachedDevice | before 5.0 (IFS), undocumented | since 6.0, declared start is 5.0 | |
IoQueryFileInformation | before 5.0 (IFS), undocumented before 5.1 (IFS) to 6.0, declared |
since 6.0, declared start is 5.0 | |
IoQueryVolumeInformation | before 5.0 (IFS), undocumented before 5.1 (IFS) to 6.0, declared |
since 6.0, declared start is 5.0 | |
IoRegisterFsRegistrationChange | before 5.0 (IFS), undocumented | since 6.0, declared start is 5.0 | |
IoUnregisterFsRegistrationChange | before 5.0 (IFS), undocumented | since 6.0, declared start is 5.0 | |
KeAddSystemServiceTable | |||
KeI386Call16BitFunction | x86 only; discontinued in 6.2 |
||
KeI386ReleaseGdtSelectors | x86 only; discontinued in 6.2 |
||
KeI386SetGdtSelector | x86 only; discontinued in 6.2 |
||
KeInsertHeadQueue | before 5.0 (IFS), undocumented | since 6.0, declared start is 5.0 | |
KeProfileInterruptWithSource | |||
KePulseEvent | before 5.0, undocumented since 6.1 revision, documented start is 5.0 |
since 6.0, declared start is 5.0 | |
KeServiceDescriptorTable (data) | since 5.2 SP2, x86 only | ||
KeSetDmaIoCoherency | |||
KeSetImportanceDpc | before 5.0, declared since 6.1 revision, documented start is 5.0 |
since 6.0, declared start is 5.0 | |
KeSetTargetProcessorDpc | before 5.0, declared since 6.1 revision, documented start is 5.0 |
since 6.0, declared start is 5.0 | |
KeUserModeCallback |
Of the few kernel exports that have ever been discontinued selectively, KeServiceDescriptorTable is the oldest. It exists in all x64 kernels but it very plausibly was never meant to be exported from any. That it is exported from the very first x64 kernel, i.e., version 5.2 SP1, is perhaps an oversight which was corrected as soon as SP2.
Function | Export History | Documentation History | Declaration History |
---|---|---|---|
LdrAccessResource | |||
LdrEnumResources | |||
LdrFindResource_U | |||
LpcRequestPort | |||
MmAdjustWorkingSetSize | |||
MmCreateSection | declared start is 5.0 | ||
MmLockPagableDataSection | since 6.1 revision, documented start is 5.0 | since 6.0, declared start is 5.0 | |
MmLockPagableSectionByHandle | since 6.1 revision, documented start is 5.0 | since 6.0, declared start is 5.0 | |
MmMapViewInSystemSpace | before 5.1, declared | since 6.0, declared start is 5.0 | |
MmMapViewOfSection | |||
MmPageEntireDriver | since 6.1 revision, documented start is 5.0 | since 6.0, declared start is 5.0 | |
MmResetDriverPaging | since 6.1 revision, documented start is 5.0 | since 6.0, declared start is 5.0 | |
MmSectionObjectType (data) | |||
MmSecureVirtualMemory | before 5.1, declared since 6.1 revision, documented start is 5.0 |
since 6.0, declared start is 5.0 | |
MmSetBankedSection | |||
MmUnmapViewInSystemSpace | before 5.1, declared | since 6.0, declared start is 5.0 | |
MmUnmapViewOfSection | |||
MmUnsecureVirtualMemory | before 5.1, declared since 6.1 revision, documented start is 5.0 |
since 6.0, declared start is 5.0 | |
NtAllocateUuids | |||
NtBuildNumber | |||
PoQueryPowerSequence | discontinued in 5.0 | ||
PoRegisterDeviceForIdleDetection | discontinued in 4.0; restored in 5.0 |
before 5.0, undocumented since 6.1 revision, documented start is 5.0 |
since 6.0, declared start is 5.0 |
PoRequestPowerChange | discontinued in 5.0 | ||
PsEstablishWin32Callouts | |||
PsLookupProcessByProcessId | before 5.1 (IFS) to 6.0, undocumented
documented start is 5.0 |
||
PsLookupThreadByThreadId | before 5.1 (IFS) to 6.0, undocumented
documented start is 5.0 |
||
PsReferenceImpersonationToken | before 5.1 (IFS), undocumented in 6.0, documented start is 5.1 since 6.1, documented start is 5.0 |
since 6.0, declared start is 5.0 | |
PsReferencePrimaryToken | before 5.1 (IFS), undocumented in 6.0, documented start is 5.1 since 6.1, documented start is 5.0 |
since 6.0, declared start is 5.0 | |
PsSetProcessPriorityByClass | |||
RtlAddAce | before 5.1 (IFS) to 6.0, undocumented
documented start is 5.2 SP1 |
since 6.0, declared start is 5.0 | |
RtlAllocateAndInitializeSid | discontinued in 5.0 | before 5.1 (IFS) to 6.0, undocumented | since 6.0, declared start is 5.0 |
RtlAreAllAccessesGranted | |||
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 | |
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 |
|
RtlFindMessage | |||
RtlFormatCurrentUserKeyPath | |||
RtlImageNtHeader | |||
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 |
|
RtlIntegerToChar | |||
RtlIsNameLegalDOS8Dot3 | starts in SP2 | before 5.0 (IFS), undocumented | since 6.0, declared start is 5.0 |
RtlMultiByteToUnicodeN | before 5.0 (IFS), undocumented | since 6.0, declared start is 5.0 | |
RtlSetSaclSecurityDescriptor | |||
RtlUnicodeStringToInteger | since 6.1 revision, documented start is 5.0 | before 4.0, not declared since 6.0, declared start is 5.0 |
|
RtlUnicodeToMultiByteSize | before 5.0 (IFS), undocumented | since 6.0, declared start is 5.0 | |
RtlZeroHeap |
By the time RtlAllocateAndInitializeSid got documented in the WDK, the kernel had stopped exporting it. Even in the two versions that do have it as a kernel-mode export, no kernel-mode use of it is known. In user mode, the function is exported from NTDLL in all versions.
Function | Export History | Documentation History | Declaration History |
---|---|---|---|
SeCaptureSecurityDescriptor | declared start is 5.0 | ||
SeCloseObjectAuditAlarm | |||
SeCreateAccessState | |||
SeDeleteAccessState | |||
SeMarkLogonSessionForTerminationNotification | starts in SP5 | before 5.0 (IFS), undocumented | since 6.0, declared start is 5.0 |
SePrivilegeCheck | before 5.0 (IFS), undocumented | since 6.0, declared start is 5.0 | |
SePrivilegeObjectAuditAlarm | |||
SeRegisterLogonSessionTerminatedRoutine | starts in SP5 | before 5.0 (IFS), undocumented | since 6.0, declared start is 5.0 |
SeReleaseSecurityDescriptor | declared start is 5.0 | ||
SeUnregisterLogonSessionTerminatedRoutine | starts in SP5 | before 5.0 (IFS), undocumented | since 6.0, declared start is 5.0 |
ZwAlertThread | |||
ZwClearEvent | |||
ZwCreateTimer | discontinued in 4.0; restored in 5.0 |
before 4.0, undocumented before 6.0, declared |
since 6.0, declared start is 5.0 |
ZwDuplicateToken | before 6.1, undocumented documented start is 5.0 |
||
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 | |
ZwOpenProcess | before 6.0, undocumented since 6.1 revision, documented start is 5.0 |
||
ZwOpenThread | |||
ZwPulseEvent | |||
ZwQueryInformationProcess | |||
ZwQuerySecurityObject | before 5.1 (IFS), undocumented documented start is 5.1 |
since 6.0, declared start is 5.0 | |
ZwResetEvent | |||
ZwSetDefaultLocale | |||
ZwSetSystemInformation | |||
ZwSetTimer | discontinued in 4.0; restored in 5.0 |
before 4.0, undocumented before 6.0, declared |
since 6.0, declared start is 5.0 |
ZwWaitForMultipleObjects |