Native API Functions

Whether or not NTDLL belongs to the Win32 subsystem particularly or is more generally the kernel’s user-mode face for supporting all subsystems, it is indisputably on the user-mode side of the boundary with kernel mode. The highest-level functionality in kernel mode is also the lowest-level functionality in user mode. This functionality is sometimes called the native API. Its functions are described as native system services in Microsoft’s documentation for device driver programming and are sometimes referred to just as system calls.

The extra qualification as native has significance, however. Ever since version 3.51 (and explicitly not before), the kernel has allowed for multiple distinct sets of system services: at first four, but limited to two starting with version 5.2 in the build for Windows 2003 SP1. The first of these sets is native. The second supports user-mode communication with WIN32K.SYS, which surely is important but is just as surely not native.

The native API functions are distinguished by names that begin with Nt or Zw. They are exported from NTDLL in user mode and from the NTOSKRNL module (i.e., the kernel, whatever its filename) in kernel mode, though not all functions are exported in both modes or with both prefixes. Indeed, very many are exported only in user mode even as late as Windows 10, some two decades after the first 32-bit Windows that doesn’t run as an MS-DOS program. Many more were exported only in user mode to begin with, until their usefulness for kernel-mode programming (at least for Microsoft’s) was compelling enough that they became kernel-mode exports too.

As user-mode exports, the native API functions tend to be known by their Nt prefix (for reasons given below). They are mostly undocumented, in part for the obviously good reason that their functionality is better reached through the documented functions of the Win32 API. Documented or not, they have long attracted the attention of various sorts of programmers for good reasons and bad. Among the bad must be counted hackers, not just malware writers but some programmers of security tools too, who by-pass the documented Win32 APIs in the hope of doing their otherwise more or less ordinary work without being readily detected. Even some of Microsoft’s own programmers, not only of low-level user-mode software such as services but also of so-called middleware, could not resist the siren call of the native API, such that Microsoft felt compelled in 2002 to document some of the API for user-mode programming, albeit with warnings.

The suggestion seems strong, then, that the native API functions exist to be called from user mode even if most user-mode software would better not call them. Yet where these notes document native API functions they do so in the Kernel section. Why?

Implementation

The reason is that the kernel is where these functions are coded. Even if the function is exported only in user mode, NTDLL has none of the implementation. Though the native API functions are NTDLL exports, NTDLL provides nothing more than one or another type of stub for the transition to kernel mode. For other NTDLL exports, I do (or mean to) place my documentation of them here with NTDLL because even if most of their work, e.g., to create a file, is ultimately done in kernel mode, NTDLL provides at least some non-trivial pre- or post-processing. But for whatever native API functions I yet document, look in the Kernel section. Here, there are just these general notes.

If a native API function is exported in user mode, which almost all are, then with only one exception NTDLL exports it in both the Nt and Zw forms, which are aliases. This user-mode function is just a stub to effect a transition to kernel mode for the real handling. It is there picked up by a routine whose name has the Nt prefix. In kernel mode, the Nt and Zw names are not aliases. The Nt function has the substantial implementation. It may be exported from the kernel, but more likely is not. Indeed, most of these Nt routines exist only to service the corresponding user-mode functionality. If the functionality is exposed in kernel mode for use from outside the kernel, e.g., from drivers, there may instead (or also) be an export with the Zw prefix. This is a stub which simulates a transition from user mode to kernel mode, ending up in the kernel’s Nt routine, except for recording that the call actually originated in kernel mode.

Usage

The clearly intended usage is that user-mode clients will call the functions whose names have the Nt prefix and kernel-mode clients will call the Zw functions. If everyone sticks to this, then the underlying Nt routine in kernel mode can reliably distinguish whether it is executing for a kernel-mode or user-mode caller. Though it doesn’t matter which of the Nt and Zw forms is called in user mode, since they are just aliases there, calling the wrong one in kernel mode can bring surprises.

User Mode

Of particular importance is that user-mode requests are subject to the natural distrust that everything executing in kernel mode must have for any parameters, but especially addresses, that can possibly have originated in user mode. As user-mode calls to an Nt or Zw function make the transition to kernel mode, the thread’s so-called previous mode—actually named PreviousMode in the KTHREAD—is set to UserMode (1) and the kernel-mode Nt routine then knows to distrust all parameters.

What distrust means in general is that all addresses, whether given as arguments or passed indirectly in structures whose addresses are given as arguments, must be in user-mode address space, are typically also subject to alignment requirements, and may have to be writable even if it turns out that there’s nothing to write. All access through these addresses, whether for reading or writing, is done with exception handling. Where data at these addresses is to be read as input for kernel-mode processing, the kernel captures a copy to validate and then work from so that it is not vulnerable to the user-mode caller changing the data after validation.

Good practice in user mode is to avoid these functions. Instead, call them indirectly through Win32 API functions, even if undocumented. Know about the underlying native function, as much as it helps to understand the higher-level wrapping, but keep to the higher level for real-world use unless you have a very good reason not to.

Kernel-Mode Zw Calls

A kernel-mode call to the Zw form goes through a stub that directs the handling to the same Nt routine as from user mode, but with the previous mode set to KernelMode (0). It will then be handled as if trusted. The usual case will be that some kernel-mode caller forms a request for its own purposes, with parameters that are in kernel-mode address space and will remain meaningful if the handling switches to an arbitrary thread. For this, the Zw call is natural and appropriate.

It is not of itself unsound to call a Zw function with arguments that are user-mode addresses, but since these addresses will all be trusted, the caller has the entire responsibility for whatever might get done with those user-mode addresses.

Kernel-Mode Nt Calls

By contrast, a kernel-mode call to the Nt form, if it is exported, passes through no stub. It goes directly to the internal handling. The previous mode is unchanged. The call may be handled as trusted or not. The caller had better know which. The kernel-mode caller of an Nt function has the responsibility of knowing the previous mode. It is generally better to call the Zw function, but there are two notable cases where the Nt function has the edge.

If the previous mode is KernelMode, as when the caller is handling a kernel-mode request, then calling the Nt function is effectively the same as calling the Zw function except for being faster and using less stack. The efficiency makes it irresistable to some programmers, and indeed the use of less stack means that calling the Nt function actually is safer, e.g., for re-entrant file I/O by file system filter drivers. However, the caller must be certain that the previous mode truly is KernelMode. Get this wrong and the kernel-mode addresses that would be perfectly fine as parameters for a call to the Zw function will instead be rejected by the Nt function.

Calling the Nt function can also be right when the previous mode is UserMode. Here, the kernel-mode caller knows it is handling a user-mode request and wants its own further operations to continue being treated as user-mode requests. One reason, though probably rare in drivers such as can be added by third-party programmers, is that it will pass user-mode addresses to those operations. Another is that it truly does want access rights and privileges within those operations to be evaluated as if for a user-mode request.

Available Functions

As noted above, not all system functions are exported in both user mode and kernel mode, and not all are exported with both the Nt and Zw prefixes. The following table lists the modes and prefixes, and summarises the applicable Windows versions. Where user or kernel is shown without parentheses, infer that the function is exported in that mode with both prefixes in the corresponding versions. If a function is exported in both modes using both prefixes, it is shown as all.

Also given the shorthand all is any function that is exported in all known versions all the way back to Windows NT 3.10.

Not one NT API function is exported with the Zw prefix unless it is also exported with the Nt prefix. In user mode, only one is not exported with both prefixes. This exceptional case is NtGetTickCount: both it and ZwGetTickCount were dropped as exports for Windows XP but only the latter stayed dropped.

One other function, named NtCurrentTeb, is also exported from NTDLL only with the Nt prefix, and only then in x86 builds, but it is not included below because although its name starts with Nt, it is not handled through a transition to kernel mode and is not regarded here as a native API function. Two functions are exported in kernel mode with the Nt prefix only and not at all in user mode. They are NtGetEnvironmentVariableEx and NtQueryEnvironmentVariableInfoEx. They are here treated as being not actually intended as native API functions. Also omitted from the table, if only for now, are nearly two dozen user-mode functions that NTDLL exports with both the Nt and Zw prefixes, but only from the wow64 builds. These are meant to look in some sense like native API functions, yet they are not.

Note that many native API functions that are exported in kernel mode were not always. Many were first exported with one prefix but only much later with the other. What governs Microsoft’s thinking about which functions are also exposed for use in kernel mode but from outside the kernel is anyone’s guess. It seems at least plausible, however, that these functions are intended first as user-mode exports and then get exported in kernel mode as and when Microsoft discovers a need for Microsoft’s purposes.

Function Modes and Prefixes Versions
NtAcceptConnectPort user all
NtAccessCheck user all
NtAccessCheckAndAuditAlarm user;
kernel (Zw)
all
NtAccessCheckByType user 5.0 and higher
NtAccessCheckByTypeAndAuditAlarm user 5.0 and higher
NtAccessCheckByTypeResultList user 5.0 and higher
NtAccessCheckByTypeResultListAndAuditAlarm user 5.0 and higher
NtAccessCheckByTypeResultListAndAuditAlarmByHandle user 5.0 and higher
NtAcquireCMFViewOwnership user 6.0 only
NtAddAtom user;
kernel (Nt)
4.0 and higher
NtAddAtomEx user 6.2 and higher
NtAddBootEntry user;
kernel (Zw)
5.1 and higher
NtAddDriverEntry user;
kernel (Zw)
5.2 and higher
NtAdjustGroupsToken user all
NtAdjustPrivilegesToken user;
kernel (Nt)
all
kernel (Zw) 5.0 and higher
NtAdjustTokenClaimsAndDeviceGroups user 6.2 and higher
NtAlertResumeThread user all
NtAlertThread user all
kernel (Zw) 3.51 and higher
NtAlertThreadById user 6.2 and higher
NtAllocateLocallyUniqueId user;
kernel (Nt)
all
kernel (Zw) 6.0 and higher
NtAllocateReserveObject user 6.1 and higher
NtAllocateUserPhysicalPages user 5.0 and higher
NtAllocateUuids user;
kernel (Nt)
3.51 and higher
NtAllocateVirtualMemory all all
NtAlpcAcceptConnectPort user;
kernel (Zw)
6.0 and higher
NtAlpcCancelMessage user;
kernel (Zw)
6.0 and higher
NtAlpcConnectPort user;
kernel (Zw)
6.0 and higher
NtAlpcConnectPortEx user;
kernel (Zw)
6.2 and higher
NtAlpcCreatePort user;
kernel (Zw)
6.0 and higher
NtAlpcCreatePortSection user;
kernel (Zw)
6.0 and higher
NtAlpcCreateResourceReserve user;
kernel (Zw)
6.0 and higher
NtAlpcCreateSectionView user;
kernel (Zw)
6.0 and higher
NtAlpcCreateSecurityContext user;
kernel (Zw)
6.0 and higher
NtAlpcDeletePortSection user;
kernel (Zw)
6.0 and higher
NtAlpcDeleteResourceReserve user;
kernel (Zw)
6.0 and higher
NtAlpcDeleteSectionView user;
kernel (Zw)
6.0 and higher
NtAlpcDeleteSecurityContext user;
kernel (Zw)
6.0 and higher
NtAlpcDisconnectPort user;
kernel (Zw)
6.0 and higher
NtAlpcImpersonateClientContainerOfPort user 10.0 and higher
NtAlpcImpersonateClientOfPort user 6.0 and higher
NtAlpcOpenSenderProcess user 6.0 and higher
NtAlpcOpenSenderThread user 6.0 and higher
kernel (Zw) 10.0 and higher
NtAlpcQueryInformation user;
kernel (Zw)
6.0 and higher
NtAlpcQueryInformationMessage user 6.0 and higher
kernel (Zw) 10.0 and higher
NtAlpcRevokeSecurityContext user 6.0 and higher
NtAlpcSendWaitReceivePort user;
kernel (Zw)
6.0 and higher
NtAlpcSetInformation user;
kernel (Zw)
6.0 and higher
NtApphelpCacheControl user 5.2 and higher
NtAreMappedFilesTheSame user 5.0 and higher
NtAssignProcessToJobObject user 5.0 and higher
kernel (Zw) 5.1 and higher
NtAssociateWaitCompletionPacket user 6.2 and higher
kernel (Zw) 6.3 and higher
NtCallbackReturn user 3.51 and higher
NtCancelDeviceWakeupRequest user 5.0 to 6.0
NtCancelIoFile user all
kernel (Zw) 5.0 and higher
NtCancelIoFileEx user 6.0 and higher
kernel (Zw) 6.3 and higher
NtCancelSynchronousIoFile user 6.0 and higher
NtCancelTimer user all
kernel (Zw) 5.0 and higher
NtCancelTimer2 user 6.3 and higher
NtCancelWaitCompletionPacket user 6.2 and higher
NtClearAllSavepointsTransaction user;
kernel (Nt)
6.0 before SP1
NtClearEvent user;
kernel (Zw)
3.50 and higher
NtClearSavepointTransaction user;
kernel (Nt)
6.0 before SP1
NtClose all all
NtCloseObjectAuditAlarm user;
kernel (Zw)
all
NtCommitComplete user;
kernel (Nt)
6.0 and higher
kernel (Zw) 6.1 and higher
NtCommitEnlistment all 6.0 and higher
NtCommitTransaction all 6.0 and higher
NtCompactKeys user 5.1 and higher
NtCompareObjects user (Nt) 10.0 and higher
NtCompareTokens user 5.1 and higher
kernel (Zw) 10.0 and higher
NtCompleteConnectPort user all
NtCompressKey user 5.1 and higher
NtConnectPort user;
kernel (Nt)
all
kernel (Zw) 3.50 and higher
NtContinue user all
NtCreateChannel user 4.0 to 5.0
NtCreateDebugObject user 5.1 and higher
NtCreateDirectoryObject user;
kernel (Zw)
all
NtCreateDirectoryObjectEx user 6.2 and higher
NtCreateEnlistment all 6.0 and higher
NtCreateEvent user;
kernel (Nt)
all
kernel (Zw) 3.50 and higher
NtCreateEventPair user all
NtCreateFile all all
NtCreateIRTimer user 6.2 and higher
NtCreateIoCompletion user 3.50 and higher
kernel (Zw) 6.0 and higher
NtCreateJobObject user 5.0 and higher
kernel (Zw) 5.1 and higher
NtCreateJobSet user 5.1 and higher
NtCreateKey user;
kernel (Zw)
all
NtCreateKeyTransacted user;
kernel (Zw)
6.0 and higher
NtCreateKeyedEvent user 5.1 and higher
NtCreateLowBoxToken user 6.2 and higher
NtCreateMailslotFile user all
NtCreateMutant user all
NtCreateNamedPipeFile user all
NtCreatePagingFile user all
NtCreatePartition user 10.0 and higher
NtCreatePort user all
NtCreatePrivateNamespace user 6.0 and higher
NtCreateProcess user all
NtCreateProcessEx user 5.1 and higher
NtCreateProfile user all
NtCreateProfileEx user 6.1 and higher
NtCreateResourceManager all 6.0 and higher
NtCreateSection all all
NtCreateSemaphore user all
NtCreateSymbolicLinkObject user;
kernel (Zw)
all
NtCreateThread user all
NtCreateThreadEx user 6.0 and higher
NtCreateTimer user all
kernel (Zw) 3.51, and 5.0 and higher
NtCreateTimer2 user 6.3 and higher
NtCreateToken user all
NtCreateTokenEx user 6.2 and higher
NtCreateTransaction all 6.0 and higher
NtCreateTransactionManager user;
kernel (Zw)
6.0 and higher
kernel (Nt) 6.1 and higher
NtCreateUserProcess user 6.0 and higher
kernel (Zw) 6.2 and higher
NtCreateWaitCompletionPacket user 6.2 and higher
kernel (Zw) 6.3 and higher
NtCreateWaitablePort user 5.0 and higher
NtCreateWnfStateName user;
kernel (Zw)
6.2 and higher
NtCreateWorkerFactory user 6.0 and higher
NtDebugActiveProcess user 5.1 and higher
NtDebugContinue user 5.1 and higher
NtDelayExecution user all
NtDeleteAtom user;
kernel (Nt)
4.0 and higher
NtDeleteBootEntry user;
kernel (Zw)
5.1 and higher
NtDeleteDriverEntry user;
kernel (Zw)
5.2 and higher
NtDeleteFile all 3.50 and higher
NtDeleteKey user;
kernel (Zw)
all
NtDeleteObjectAuditAlarm user 4.0 and higher
NtDeletePrivateNamespace user 6.0 and higher
NtDeleteValueKey user;
kernel (Zw)
all
NtDeleteWnfStateData user;
kernel (Zw)
6.2 and higher
NtDeleteWnfStateName user;
kernel (Zw)
6.2 and higher
NtDeviceIoControlFile all all
NtDisableLastKnownGood user 6.1 and higher
NtDisplayString user;
kernel (Zw)
all
NtDrawText user 6.1 and higher
NtDuplicateObject all all
NtDuplicateToken user;
kernel (Nt)
all
kernel (Zw) 3.51 and higher
NtEnableLastKnownGood user 6.1 and higher
NtEnumerateBootEntries user;
kernel (Zw)
5.1 and higher
NtEnumerateBus user 3.51 only
NtEnumerateDriverEntries user;
kernel (Zw)
5.2 and higher
NtEnumerateKey user;
kernel (Zw)
all
NtEnumerateSystemEnvironmentValuesEx user 5.1 and higher
NtEnumerateTransactionObject all 6.0 and higher
NtEnumerateValueKey user;
kernel (Zw)
all
NtExtendSection user all
NtFilterBootOption user 6.2 and higher
NtFilterToken user 5.0 and higher
NtFilterTokenEx user 6.2 and higher
NtFindAtom user;
kernel (Nt)
4.0 and higher
NtFlushBuffersFile user all
kernel (Zw) 6.0 and higher
NtFlushBuffersFileEx user;
kernel (Zw)
6.2 and higher
NtFlushInstallUILanguage user 6.0 and higher
NtFlushInstructionCache user; all
kernel (Zw) 3.50 and higher
NtFlushKey user;
kernel (Zw)
all
NtFlushProcessWriteBuffers user 6.0 and higher
NtFlushVirtualMemory user all
kernel (Zw) 5.0 and higher
NtFlushWriteBuffer user all
NtFreeUserPhysicalPages user 5.0 and higher
NtFreeVirtualMemory all all
NtFreezeRegistry user 6.0 and higher
NtFreezeTransactions user;
kernel (Nt)
6.0 and higher
NtFsControlFile user;
kernel (Nt)
all
kernel (Zw) 3.50 and higher
NtGetCachedSigningLevel user 6.2 and higher
kernel (Zw) 10.0 and higher
NtGetCompleteWnfStateSubscription user 6.3 and higher
NtGetContextThread user all
NtGetCurrentProcessorNumber user 5.2 and higher
NtGetCurrentProcessorNumberEx user 10.0 and higher
NtGetDevicePowerState user 5.0 and higher
NtGetMUIRegistryInfo user 6.0 and higher
NtGetNextProcess user 6.0 and higher
kernel (Zw) 10.0 and higher
NtGetNextThread user 6.0 and higher
NtGetNlsSectionPtr user 6.0 and higher
NtGetNotificationResourceManager all 6.0 and higher
NtGetPlugPlayEvent user 3.51 to 6.1
NtGetTickCount user (Nt) all except 5.1
user (Zw) 3.10 to 5.0
NtGetWriteWatch user 5.0 and higher
NtImpersonateAnonymousToken user 5.0 and higher
kernel (Zw) 6.0 and higher
NtImpersonateClientOfPort user all
NtImpersonateThread user all
NtInitializeNlsFiles user 6.0 and higher
NtInitializeRegistry user all
NtInitializeVDM user 3.10 only
NtInitiatePowerAction user;
kernel (Zw)
5.0 and higher
NtIsProcessInJob user;
kernel (Zw)
5.1 and higher
NtIsSystemResumeAutomatic user 5.0 and higher
NtIsUILanguageComitted user 6.0 and higher
NtListTransactions user 6.0 before SP1
NtListenChannel user 4.0 to 5.0
NtListenPort user all
NtLoadDriver user;
kernel (Zw)
all
NtLoadKey user all
kernel (Zw) 4.0 and higher
NtLoadKey2 user 4.0 and higher
NtLoadKeyEx user 5.2 and higher
kernel (Zw) 6.0 and higher
NtLockFile user;
kernel (Nt)
all
kernel (Zw) 6.1 and higher
NtLockProductActivationKeys user 5.1 and higher
kernel (Zw) 6.0 and higher
NtLockRegistryKey user 5.1 and higher
NtLockVirtualMemory user all
kernel (Zw) 6.3 and higher
NtMakePermanentObject user;
kernel (Nt)
5.1 and higher
NtMakeTemporaryObject user;
kernel (Zw)
all
NtManagePartition user 10.0 and higher
NtMapCMFModule user 6.0 and higher
NtMapUserPhysicalPages user 5.0 and higher
NtMapUserPhysicalPagesScatter user 5.0 and higher
NtMapViewOfSection all all
NtMarshallTransaction all 6.0 before SP1
NtModifyBootEntry user 5.1 and higher
kernel (Zw) 5.2 and higher
NtModifyDriverEntry user;
kernel (Zw)
5.2 and higher
NtNotifyChangeDirectoryFile user;
kernel (Nt)
all
kernel (Zw) 10.0 and higher
NtNotifyChangeKey user all
kernel (Zw) 3.51 and higher
NtNotifyChangeMultipleKeys user 5.0 and higher
NtNotifyChangeSession user;
kernel (Zw)
6.1 and higher
NtOpenChannel user 4.0 to 5.0
NtOpenDirectoryObject user;
kernel (Zw)
all
NtOpenEnlistment all 6.0 and higher
NtOpenEvent user all
kernel (Zw) 3.50 and higher
NtOpenEventPair user all
NtOpenFile all all
NtOpenIoCompletion user 3.50 and higher
NtOpenJobObject user 5.0 and higher
kernel (Zw) 5.1 and higher
NtOpenKey user;
kernel (Zw)
all
NtOpenKeyEx user;
kernel (Zw)
6.1 and higher
NtOpenKeyTransacted user;
kernel (Zw)
6.0 and higher
NtOpenKeyTransactedEx user;
kernel (Zw)
6.1 and higher
NtOpenKeyedEvent user 5.1 and higher
NtOpenMutant user all
NtOpenObjectAuditAlarm user all
NtOpenPartition user 10.0 and higher
NtOpenPrivateNamespace user 6.0 and higher
NtOpenProcess user all
kernel (Nt) 3.50 and higher
kernel (Zw) 3.51 and higher
NtOpenProcessToken all all
NtOpenProcessTokenEx all 5.1 and higher
NtOpenResourceManager all 6.0 and higher
NtOpenSection user;
kernel (Zw)
all
NtOpenSemaphore user all
NtOpenSession user 6.0 and higher
kernel (Zw) 6.1 and higher
NtOpenSymbolicLinkObject user;
kernel (Zw)
all
NtOpenThread user all
kernel 3.51 and higher
NtOpenThreadToken user;
kernel (Zw)
all
kernel (Nt) 5.1 and higher
NtOpenThreadTokenEx all 5.1 and higher
NtOpenTimer user all
kernel (Zw) 5.0 and higher
NtOpenTransaction all 6.0 and higher
NtOpenTransactionManager user;
kernel (Zw)
6.0 and higher
kernel (Nt) 6.1 and higher
NtPlugPlayControl user 3.51 and higher
NtPowerInformation user;
kernel (Zw)
5.0 and higher
NtPrePrepareComplete user 6.0 and higher
kernel 6.1 and higher
NtPrePrepareEnlistment all 6.0 and higher
NtPrepareComplete all 6.0 and higher
NtPrepareEnlistment all 6.0 and higher
NtPrivilegeCheck user all
NtPrivilegeObjectAuditAlarm user all
NtPrivilegedServiceAuditAlarm user all
NtPropagationComplete user 6.0 and higher
kernel 6.1 and higher
NtPropagationFailed user 6.0 and higher
kernel 6.1 and higher
NtProtectVirtualMemory user all
kernel (Zw) 6.3 and higher
NtPullTransaction all 6.0 before SP1
NtPulseEvent user
all
kernel (Zw) 3.51 and higher
NtQueryAttributesFile user 3.50 and higher
NtQueryBootEntryOrder user;
kernel (Zw)
5.1 and higher
NtQueryBootOptions user;
kernel (Zw)
5.1 and higher
NtQueryDebugFilterState user 5.1 and higher
NtQueryDefaultLocale user all
kernel (Zw) 4.0 and higher
NtQueryDefaultUILanguage user;
kernel (Zw)
5.0 and higher
NtQueryDirectoryFile user;
kernel (Nt)
all
kernel (Zw) 3.50 and higher
NtQueryDirectoryObject user all
kernel (Zw) 5.0 and higher
NtQueryDriverEntryOrder user;
kernel (Zw)
5.2 and higher
NtQueryEaFile user;
kernel (Nt)
all
kernel (Zw) 5.0 and higher
NtQueryEvent user all
NtQueryFullAttributesFile user 4.0 and higher
kernel (Zw) 5.1 and higher
NtQueryInformationAtom user;
kernel (Nt)
4.0 and higher
NtQueryInformationEnlistment all 6.0 and higher
NtQueryInformationFile all all
NtQueryInformationJobObject user 5.0 and higher
kernel (Zw) 5.1 and higher
NtQueryInformationPort user all
NtQueryInformationProcess user all
kernel (Nt) 3.50 and higher
kernel (Zw) 3.51 and higher
NtQueryInformationResourceManager all 6.0 and higher
NtQueryInformationThread user all
kernel 5.1 and higher
NtQueryInformationToken all all
NtQueryInformationTransaction all 6.0 and higher
NtQueryInformationTransactionManager all 6.0 and higher
NtQueryInformationWorkerFactory user 6.0 and higher
NtQueryInstallUILanguage user;
kernel (Zw)
5.0 and higher
NtQueryIntervalProfile user all
NtQueryIoCompletion user 3.50 and higher
NtQueryKey user;
kernel (Zw)
all
NtQueryLicenseValue user;
kernel (Zw)
6.0 and higher
NtQueryMultipleValueKey user 4.0 and higher
NtQueryMutant user all
NtQueryObject user all
kernel (Zw) 4.0 and higher
NtQueryOleDirectoryFile user;
kernel (Nt)
4.0 only
NtQueryOpenSubKeys user 5.0 and higher
NtQueryOpenSubKeysEx user 5.2 and higher
NtQueryPerformanceCounter user all
NtQueryPortInformationProcess user 5.1 and higher
NtQueryQuotaInformationFile user;
kernel (Nt)
5.0 and higher
kernel (Zw) 6.1 and higher
NtQuerySection user
all
kernel (Zw) 3.50 and higher
NtQuerySecurityAttributesToken all 6.1 and higher
NtQuerySecurityObject user;
kernel (Nt)
all
kernel (Zw) 3.51 and higher
NtQuerySemaphore user all
NtQuerySymbolicLinkObject user;
kernel (Zw)
all
NtQuerySystemEnvironmentValue user all
NtQuerySystemEnvironmentValueEx user 5.1 and higher
kernel (Zw) 6.2 and higher
NtQuerySystemInformation user all
kernel (Zw) 4.0 and higher
kernel (Nt) 5.0 and higher
NtQuerySystemInformationEx user;
kernel (Nt)
6.1 and higher
kernel (Zw) 6.3 and higher
NtQuerySystemTime user all
NtQueryTimer user all
NtQueryTimerResolution user 3.50 and higher
NtQueryValueKey user;
kernel (Zw)
all
NtQueryVirtualMemory user all
kernel (Zw) 6.0 and higher
NtQueryVolumeInformationFile all all
NtQueryWnfStateData user;
kernel (Zw)
6.2 and higher
NtQueryWnfStateNameInformation user;
kernel (Zw)
6.2 and higher
NtQueueApcThread user 4.0 and higher
NtQueueApcThreadEx user 6.1 and higher
NtRaiseException user all
NtRaiseHardError user all
NtReadFile all all
NtReadFileScatter user 4.0 SP2 and higher
NtReadOnlyEnlistment user 6.0 and higher
kernel 6.1 and higher
NtReadRequestData user all
NtReadVirtualMemory user all
NtRecoverEnlistment user;
kernel (Zw)
6.0 and higher
kernel (Nt) 6.1 and higher
NtRecoverResourceManager user;
kernel (Zw)
6.0 and higher
kernel (Nt) 6.1 and higher
NtRecoverTransactionManager user;
kernel (Zw)
6.0 and higher
kernel (Nt) 6.1 and higher
NtRegisterNewDevice user 3.51 only
NtRegisterProtocolAddressInformation user 6.0 and higher
NtRegisterThreadTerminatePort user all
NtReleaseCMFViewOwnership user 6.0 only
NtReleaseKeyedEvent user 5.1 and higher
NtReleaseMutant user all
NtReleaseProcessMutant user 3.10 to 3.51
NtReleaseSemaphore user all
NtReleaseWorkerFactoryWorker user 6.0 and higher
NtRemoveIoCompletion user 3.50 and higher
kernel (Zw) 6.0 and higher
NtRemoveIoCompletionEx user;
kernel (Zw)
6.0 and higher
NtRemoveProcessDebug user 5.1 and higher
NtRenameKey user 5.1 and higher
kernel (Zw) 6.1 SP1 and higher
NtRenameTransactionManager user 6.0 SP1 and higher
NtRenameValueKey user 3.10 only
NtReplaceKey user all
kernel (Zw) 4.0 and higher
NtReplacePartitionUnit user 6.0 SP1 and higher
NtReplyPort user all
NtReplyWaitReceivePort user all
NtReplyWaitReceivePortEx user 5.0 and higher
NtReplyWaitReplyPort user all
NtReplyWaitSendChannel user 4.0 to 5.0
NtRequestDeviceWakeup user 5.0 to 6.0
NtRequestPort user;
kernel (Nt)
all
kernel (Zw) 6.0 and higher
NtRequestWaitReplyPort user;
kernel (Nt)
all
kernel (Zw) 3.50 and higher
NtRequestWakeupLatency user 5.0 to 6.0
NtResetEvent user
all
kernel (Zw) 3.51 and higher
NtResetWriteWatch user 5.0 and higher
NtRestoreKey user all
kernel (Zw) 5.0 and higher
NtResumeProcess user 5.1 and higher
NtResumeThread user all
NtRevertContainerImpersonation user 10.0 and higher
NtRollbackComplete user 6.0 and higher
kernel 6.1 and higher
NtRollbackEnlistment all 6.0 and higher
NtRollbackSavepointTransaction user 6.0 before SP1
NtRollbackTransaction all 6.0 and higher
NtRollforwardTransactionManager user 6.0 and higher
NtSaveKey user all
kernel (Zw) 4.0 and higher
NtSaveKeyEx user;
kernel (Zw)
5.1 and higher
NtSaveMergedKeys user 5.0 and higher
NtSavepointComplete all 6.0 before SP1
NtSavepointTransaction all 6.0 before SP1
NtSecureConnectPort user 5.0 and higher
kernel (Zw) 5.2 SP1 and higher
NtSendWaitReplyChannel user 4.0 to 5.0
NtSerializeBoot user 6.1 and higher
NtSetBootEntryOrder user;
kernel (Zw)
5.1 and higher
NtSetBootOptions user;
kernel (Zw)
5.1 and higher
NtSetCachedSigningLevel all 6.2 and higher
NtSetContextChannel user 4.0 to 5.0
NtSetContextThread user all
NtSetDebugFilterState user 5.1 and higher
NtSetDefaultHardErrorPort user all
NtSetDefaultLocale user
all
kernel (Zw) 3.51 and higher
NtSetDefaultUILanguage user;
kernel (Zw)
5.0 and higher
NtSetDriverEntryOrder user;
kernel (Zw)
5.2 and higher
NtSetEaFile user all
kernel 5.0 and higher
NtSetEvent user;
kernel (Nt)
all
kernel (Zw) 3.50 and higher
NtSetEventBoostPriority user 5.1 and higher
NtSetHighEventPair user all
NtSetHighWaitLowEventPair user all
NtSetHighWaitLowThread user 3.10 to 4.0
NtSetIRTimer user 6.2 and higher
NtSetInformationDebugObject user 5.1 and higher
NtSetInformationEnlistment all 6.0 and higher
NtSetInformationFile user;
kernel (Nt)
all
kernel (Zw) 3.50 and higher
NtSetInformationJobObject user 5.0 and higher
kernel (Zw) 5.1 and higher
NtSetInformationKey user all
kernel (Zw) 6.2 and higher
NtSetInformationObject user 3.50 and higher
kernel (Zw) 4.0 and higher
NtSetInformationProcess all all
NtSetInformationResourceManager user;
kernel (Nt)
6.0 and higher
kernel (Zw) 6.1 and higher
NtSetInformationSymbolicLink user 10.0 and higher
NtSetInformationThread user;
kernel (Nt)
all
kernel (Zw) 3.50 and higher
NtSetInformationToken user all
kernel 6.1 and higher
NtSetInformationTransaction all 6.0 and higher
NtSetInformationTransactionManager user 6.0 and higher
NtSetInformationVirtualMemory all 6.2 and higher
NtSetInformationWorkerFactory user 6.0 and higher
NtSetIntervalProfile user all
NtSetIoCompletion user 3.51 and higher
NtSetIoCompletionEx user 6.1 and higher
NtSetLdtEntries user all
NtSetLowEventPair user all
NtSetLowWaitHighEventPair user all
NtSetLowWaitHighThread user 3.10 to 4.0
NtSetQuotaInformationFile user;
kernel (Nt)
5.0 and higher
kernel (Zw) 6.1 and higher
NtSetSecurityObject user;
kernel (Nt)
all
kernel (Zw) 5.0 and higher
NtSetSystemEnvironmentValue user all
NtSetSystemEnvironmentValueEx user 5.1 and higher
kernel (Zw) 6.2 and higher
NtSetSystemInformation user;
kernel (Zw)
3.50 and higher
NtSetSystemPowerState user 3.51 and higher
NtSetSystemTime user all
kernel (Zw) 4.0 and higher
NtSetThreadExecutionState user 5.0 and higher
NtSetTimer user all
kernel (Zw) 3.51, and 5.0 and higher
NtSetTimer2 user 6.3 and higher
NtSetTimerEx user;
kernel (Zw)
6.1 and higher
NtSetTimerResolution user 3.50 and higher
NtSetUuidSeed user 5.0 and higher
NtSetValueKey user;
kernel (Zw)
all
NtSetVolumeInformationFile user all
kernel 5.0 and higher
NtSetWnfProcessNotificationEvent user 6.3 and higher
NtShutdownSystem user all
kernel (Nt) 5.1 and higher
NtShutdownWorkerFactory user 6.0 and higher
NtSignalAndWaitForSingleObject user 4.0 and higher
NtSinglePhaseReject user 6.0 and higher
NtStartProfile user all
NtStartTm user;
kernel (Nt)
6.0 before SP1
NtStopProfile user all
NtSubscribeWnfStateChange user 6.2 and higher
NtSuspendProcess user 5.1 and higher
NtSuspendThread user all
NtSystemDebugControl user all
NtTerminateJobObject user 5.0 and higher
kernel (Zw) 5.1 and higher
NtTerminateProcess user all
kernel (Zw) 4.0 and higher
NtTerminateThread user all
NtTestAlert user all
NtThawRegistry user 6.0 and higher
NtThawTransactions user;
kernel (Nt)
6.0 and higher
NtTraceControl user;
kernel (Nt)
6.0 and higher
kernel (Zw) 10.0 and higher
NtTraceEvent user;
kernel (Nt)
5.1 and higher
kernel (Zw) 6.1 and higher
NtTranslateFilePath user;
kernel (Zw)
5.1 and higher
NtUmsThreadYield user 6.1 and higher
NtUnloadDriver user all
kernel (Zw) 4.0 and higher
NtUnloadKey user all
kernel (Zw) 4.0 and higher
NtUnloadKey2 user 5.2 and higher
NtUnloadKeyEx user 5.1 and higher
kernel (Zw) 6.0 and higher
NtUnlockFile user;
kernel (Nt)
all
kernel (Zw) 6.1 and higher
NtUnlockVirtualMemory user all
kernel (Zw) 6.2 and higher
NtUnmapViewOfSection user;
kernel (Zw)
all
NtUnmapViewOfSectionEx user 6.2 and higher
NtUnsubscribeWnfStateChange user 6.2 and higher
NtUpdateWnfStateData user;
kernel (Zw)
6.2 and higher
NtVdmControl user;
kernel (Nt)
all
NtVdmStartExecution user 3.10 only
NtW32Call user 3.51 to 4.0 SP3
NtWaitForAlertByThreadId user 6.2 and higher
NtWaitForDebugEvent user 5.1 and higher
NtWaitForKeyedEvent user 5.1 and higher
NtWaitForMultipleObjects user
all
kernel (Zw) 3.51 and higher
NtWaitForMultipleObjects32 user 5.2 SP1 and higher
NtWaitForProcessMutant user 3.10 to 3.51
NtWaitForSingleObject user;
kernel (Nt)
all
kernel (Zw) 3.50 and higher
NtWaitForWnfNotifications user 6.2 only
NtWaitForWorkViaWorkerFactory user 6.0 and higher
NtWaitHighEventPair user all
NtWaitLowEventPair user all
NtWorkerFactoryWorkerReady user 6.0 and higher
NtWriteFile all all
NtWriteFileGather user 4.0 SP2 and higher
NtWriteRequestData user all
NtWriteVirtualMemory user all
NtYieldExecution user;
kernel (Zw)
4.0 and higher