mirror of
https://github.com/reactos/reactos
synced 2025-10-06 00:12:51 +02:00
Fix KiWriteSystemTime and move it to NDK. The previous implementation of KiWriteSystemTime was broken and updated the fields in the wrong order. Before that it was right for SystemTime and wrong for InterruptTime. ExpSetTimeZoneInformation had it wrong for the TimeZoneBias. Add KiReadSystemTime to read KSYSTEM_TIME values correctly, instead of doing it manually (and partly wrongly) all over the place.
893 lines
14 KiB
C
893 lines
14 KiB
C
/*++ NDK Version: 0098
|
|
|
|
Copyright (c) Alex Ionescu. All rights reserved.
|
|
|
|
Header Name:
|
|
|
|
kefuncs.h
|
|
|
|
Abstract:
|
|
|
|
Functions definitions for the Kernel services.
|
|
|
|
Author:
|
|
|
|
Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006
|
|
|
|
--*/
|
|
|
|
#ifndef _KEFUNCS_H
|
|
#define _KEFUNCS_H
|
|
|
|
//
|
|
// Dependencies
|
|
//
|
|
#include <umtypes.h>
|
|
#include <ketypes.h>
|
|
#include <section_attribs.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C"
|
|
{
|
|
#endif
|
|
|
|
#ifndef NTOS_MODE_USER
|
|
|
|
//
|
|
// Affinity helpers
|
|
//
|
|
FORCEINLINE KAFFINITY AFFINITY_MASK(ULONG Index)
|
|
{
|
|
ASSERT(Index < sizeof(KAFFINITY) * 8);
|
|
return (KAFFINITY)1 << Index;
|
|
}
|
|
|
|
FORCEINLINE BOOLEAN BitScanForwardAffinity(PULONG Index, KAFFINITY Mask)
|
|
{
|
|
#ifdef _WIN64
|
|
return BitScanForward64(Index, Mask);
|
|
#else
|
|
return BitScanForward(Index, Mask);
|
|
#endif
|
|
}
|
|
|
|
FORCEINLINE BOOLEAN BitScanReverseAffinity(PULONG Index, KAFFINITY Mask)
|
|
{
|
|
#ifdef _WIN64
|
|
return BitScanReverse64(Index, Mask);
|
|
#else
|
|
return BitScanReverse(Index, Mask);
|
|
#endif
|
|
}
|
|
|
|
FORCEINLINE BOOLEAN InterlockedBitTestAndSetAffinity(volatile KAFFINITY *Affinity, ULONG Index)
|
|
{
|
|
ASSERT(Index < sizeof(KAFFINITY) * 8);
|
|
#ifdef _WIN64
|
|
return InterlockedBitTestAndSet64((PLONG64)Affinity, Index);
|
|
#else
|
|
return InterlockedBitTestAndSet((PLONG)Affinity, Index);
|
|
#endif
|
|
}
|
|
|
|
FORCEINLINE BOOLEAN InterlockedBitTestAndResetAffinity(volatile KAFFINITY *Affinity, ULONG Index)
|
|
{
|
|
ASSERT(Index < sizeof(KAFFINITY) * 8);
|
|
#ifdef _WIN64
|
|
return InterlockedBitTestAndReset64((PLONG64)Affinity, Index);
|
|
#else
|
|
return InterlockedBitTestAndReset((PLONG)Affinity, Index);
|
|
#endif
|
|
}
|
|
|
|
//
|
|
// APC Functions
|
|
//
|
|
VOID
|
|
NTAPI
|
|
KeInitializeApc(
|
|
_In_ PKAPC Apc,
|
|
_In_ PKTHREAD Thread,
|
|
_In_ KAPC_ENVIRONMENT TargetEnvironment,
|
|
_In_ PKKERNEL_ROUTINE KernelRoutine,
|
|
_In_opt_ PKRUNDOWN_ROUTINE RundownRoutine,
|
|
_In_ PKNORMAL_ROUTINE NormalRoutine,
|
|
_In_ KPROCESSOR_MODE Mode,
|
|
_In_ PVOID Context
|
|
);
|
|
|
|
BOOLEAN
|
|
NTAPI
|
|
KeInsertQueueApc(
|
|
_In_ PKAPC Apc,
|
|
_In_ PVOID SystemArgument1,
|
|
_In_ PVOID SystemArgument2,
|
|
_In_ KPRIORITY PriorityBoost
|
|
);
|
|
|
|
VOID
|
|
NTAPI
|
|
KiDeliverApc(
|
|
_In_ KPROCESSOR_MODE PreviousMode,
|
|
#ifdef _M_AMD64
|
|
_In_ PKEXCEPTION_FRAME ExceptionFrame,
|
|
#else
|
|
_Reserved_ PKEXCEPTION_FRAME ExceptionFrame,
|
|
#endif
|
|
_In_ PKTRAP_FRAME TrapFrame
|
|
);
|
|
|
|
//
|
|
// Process/Thread Functions
|
|
//
|
|
VOID
|
|
NTAPI
|
|
KeTerminateThread(
|
|
_In_ KPRIORITY Increment
|
|
);
|
|
|
|
BOOLEAN
|
|
NTAPI
|
|
KeIsAttachedProcess(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
NTAPI
|
|
KeSetEventBoostPriority(
|
|
_In_ PKEVENT Event,
|
|
_In_opt_ PKTHREAD *Thread
|
|
);
|
|
|
|
KAFFINITY
|
|
NTAPI
|
|
KeSetAffinityThread(
|
|
_Inout_ PKTHREAD Thread,
|
|
_In_ KAFFINITY Affinity
|
|
);
|
|
|
|
PKPROCESS
|
|
NTAPI
|
|
KeGetCurrentProcess(
|
|
VOID
|
|
);
|
|
|
|
BOOLEAN
|
|
NTAPI
|
|
KeAddSystemServiceTable(
|
|
_In_ PULONG_PTR Base,
|
|
_In_opt_ PULONG Count,
|
|
_In_ ULONG Limit,
|
|
_In_ PUCHAR Number,
|
|
_In_ ULONG Index
|
|
);
|
|
|
|
//
|
|
// Spinlock Functions
|
|
//
|
|
VOID
|
|
FASTCALL
|
|
KiAcquireSpinLock(
|
|
_Inout_ PKSPIN_LOCK SpinLock
|
|
);
|
|
|
|
VOID
|
|
FASTCALL
|
|
KiReleaseSpinLock(
|
|
_Inout_ PKSPIN_LOCK SpinLock
|
|
);
|
|
|
|
KIRQL
|
|
FASTCALL
|
|
KeAcquireQueuedSpinLockRaiseToSynch(
|
|
_In_ KSPIN_LOCK_QUEUE_NUMBER LockNumber
|
|
);
|
|
|
|
BOOLEAN
|
|
FASTCALL
|
|
KeTryToAcquireQueuedSpinLockRaiseToSynch(
|
|
_In_ KSPIN_LOCK_QUEUE_NUMBER LockNumber,
|
|
_In_ PKIRQL OldIrql
|
|
);
|
|
|
|
VOID
|
|
FASTCALL
|
|
KeAcquireInStackQueuedSpinLockRaiseToSynch(
|
|
_In_ PKSPIN_LOCK SpinLock,
|
|
_In_ PKLOCK_QUEUE_HANDLE LockHandle
|
|
);
|
|
|
|
|
|
//
|
|
// Interrupt Functions
|
|
//
|
|
VOID
|
|
NTAPI
|
|
KeInitializeInterrupt(
|
|
_Out_ PKINTERRUPT InterruptObject,
|
|
_In_ PKSERVICE_ROUTINE ServiceRoutine,
|
|
_In_ PVOID ServiceContext,
|
|
_In_ PKSPIN_LOCK SpinLock,
|
|
_In_ ULONG Vector,
|
|
_In_ KIRQL Irql,
|
|
_In_ KIRQL SynchronizeIrql,
|
|
_In_ KINTERRUPT_MODE InterruptMode,
|
|
_In_ BOOLEAN ShareVector,
|
|
_In_ CHAR ProcessorNumber,
|
|
_In_ BOOLEAN FloatingSave
|
|
);
|
|
|
|
BOOLEAN
|
|
NTAPI
|
|
KeConnectInterrupt(
|
|
_Inout_ PKINTERRUPT InterruptObject
|
|
);
|
|
|
|
BOOLEAN
|
|
NTAPI
|
|
KeDisconnectInterrupt(
|
|
_Inout_ PKINTERRUPT InterruptObject
|
|
);
|
|
|
|
VOID
|
|
NTAPI
|
|
KiDispatchInterrupt(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
NTAPI
|
|
KiCoprocessorError(
|
|
VOID
|
|
);
|
|
|
|
DECLSPEC_NORETURN
|
|
VOID
|
|
__cdecl
|
|
KiUnexpectedInterrupt(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
NTAPI
|
|
KeEnterKernelDebugger(
|
|
VOID
|
|
);
|
|
|
|
BOOLEAN
|
|
NTAPI
|
|
KeIsExecutingDpc(
|
|
VOID
|
|
);
|
|
|
|
BOOLEAN
|
|
NTAPI
|
|
KiIpiServiceRoutine(
|
|
_In_ PKTRAP_FRAME TrapFrame,
|
|
#ifdef _M_AMD64
|
|
_In_ PKEXCEPTION_FRAME ExceptionFrame
|
|
#else
|
|
_Reserved_ PKEXCEPTION_FRAME ExceptionFrame
|
|
#endif
|
|
);
|
|
|
|
//
|
|
// Generic DPC Routines
|
|
//
|
|
VOID
|
|
NTAPI
|
|
KeGenericCallDpc(
|
|
_In_ PKDEFERRED_ROUTINE Routine,
|
|
_In_ PVOID Context
|
|
);
|
|
|
|
VOID
|
|
NTAPI
|
|
KeSignalCallDpcDone(
|
|
_In_ PVOID SystemArgument1
|
|
);
|
|
|
|
BOOLEAN
|
|
NTAPI
|
|
KeSignalCallDpcSynchronize(
|
|
_In_ PVOID SystemArgument2
|
|
);
|
|
|
|
//
|
|
// ARC Configuration Functions. Only enabled if you have ARC Support
|
|
//
|
|
#ifdef _ARC_
|
|
PCONFIGURATION_COMPONENT_DATA
|
|
NTAPI
|
|
KeFindConfigurationNextEntry(
|
|
_In_ PCONFIGURATION_COMPONENT_DATA Child,
|
|
_In_ CONFIGURATION_CLASS Class,
|
|
_In_ CONFIGURATION_TYPE Type,
|
|
_In_opt_ PULONG ComponentKey,
|
|
_In_ PCONFIGURATION_COMPONENT_DATA *NextLink
|
|
);
|
|
|
|
PCONFIGURATION_COMPONENT_DATA
|
|
NTAPI
|
|
KeFindConfigurationEntry(
|
|
_In_ PCONFIGURATION_COMPONENT_DATA Child,
|
|
_In_ CONFIGURATION_CLASS Class,
|
|
_In_ CONFIGURATION_TYPE Type,
|
|
_In_opt_ PULONG ComponentKey
|
|
);
|
|
#endif
|
|
|
|
//
|
|
// Low-level Hardware/CPU Control Functions
|
|
//
|
|
VOID
|
|
NTAPI
|
|
KeFlushEntireTb(
|
|
_In_ BOOLEAN Invalid,
|
|
_In_ BOOLEAN AllProcessors
|
|
);
|
|
|
|
VOID
|
|
NTAPI
|
|
KeSetDmaIoCoherency(
|
|
_In_ ULONG Coherency
|
|
);
|
|
|
|
VOID
|
|
KeSetGdtSelector(
|
|
_In_ ULONG Entry,
|
|
_In_ ULONG Value1,
|
|
_In_ ULONG Value2
|
|
);
|
|
|
|
VOID
|
|
NTAPI
|
|
KeProfileInterrupt(
|
|
_In_ PKTRAP_FRAME TrapFrame
|
|
);
|
|
|
|
VOID
|
|
NTAPI
|
|
KeProfileInterruptWithSource(
|
|
_In_ PKTRAP_FRAME TrapFrame,
|
|
_In_ KPROFILE_SOURCE Source
|
|
);
|
|
|
|
VOID
|
|
NTAPI
|
|
KeSetProfileIrql(
|
|
_In_ KIRQL ProfileIrql
|
|
);
|
|
|
|
VOID
|
|
NTAPI
|
|
KeSetTimeIncrement(
|
|
_In_ ULONG MaxIncrement,
|
|
_In_ ULONG MinIncrement
|
|
);
|
|
|
|
NTSTATUS
|
|
NTAPI
|
|
Ke386CallBios(
|
|
_In_ ULONG BiosCommand,
|
|
_Inout_ PCONTEXT BiosArguments
|
|
);
|
|
|
|
//
|
|
// Misc. Functions
|
|
//
|
|
NTSTATUS
|
|
NTAPI
|
|
KeUserModeCallback(
|
|
_In_ ULONG FunctionID,
|
|
_In_reads_opt_(InputLength) PVOID InputBuffer,
|
|
_In_ ULONG InputLength,
|
|
_Outptr_result_buffer_(*OutputLength) PVOID *OutputBuffer,
|
|
_Out_ PULONG OutputLength
|
|
);
|
|
|
|
NTSTATUS
|
|
NTAPI
|
|
KeRaiseUserException(
|
|
_In_ NTSTATUS ExceptionCode
|
|
);
|
|
|
|
#endif
|
|
|
|
#ifndef NONAMELESSUNION
|
|
|
|
FORCEINLINE
|
|
LARGE_INTEGER
|
|
KiReadSystemTime(
|
|
_In_ volatile const KSYSTEM_TIME *SystemTime)
|
|
{
|
|
LARGE_INTEGER Time;
|
|
|
|
#ifdef _WIN64
|
|
/* Do a single atomic read */
|
|
Time.QuadPart = *(volatile ULONG64*)SystemTime;
|
|
#else
|
|
/* Read in a loop until we get a match */
|
|
for (;;)
|
|
{
|
|
Time.HighPart = SystemTime->High1Time;
|
|
Time.LowPart = SystemTime->LowPart;
|
|
if (Time.HighPart == SystemTime->High2Time) break;
|
|
YieldProcessor();
|
|
}
|
|
#endif
|
|
return Time;
|
|
}
|
|
|
|
#ifndef NTOS_MODE_USER
|
|
|
|
FORCEINLINE
|
|
VOID
|
|
KiWriteSystemTime(
|
|
_Out_ volatile KSYSTEM_TIME *SystemTime,
|
|
_In_ LARGE_INTEGER NewTime)
|
|
{
|
|
/* Update High2Time first to indicate an update in progress */
|
|
SystemTime->High2Time = NewTime.HighPart;
|
|
|
|
#ifdef _WIN64
|
|
/* Do a single 'atomic' write. This isn't actually guaranteed to be atomic,
|
|
if the address isn't 64 bit aligned. But as long as the entire 64 bits
|
|
are within a single cache line, we should be good (on x64 at least,
|
|
when it comes to ARM64, all bets are off) This is also what Windows does. */
|
|
*(LONGLONG*)SystemTime = NewTime.QuadPart;
|
|
#else
|
|
/* Update low part, then high part to allow readers detect partial updates. */
|
|
SystemTime->LowPart = NewTime.LowPart;
|
|
SystemTime->High1Time = NewTime.HighPart;
|
|
#endif
|
|
}
|
|
|
|
#endif // !NTOS_MODE_USER
|
|
#endif // !NONAMELESSUNION
|
|
|
|
//
|
|
// Native Calls
|
|
//
|
|
NTSYSCALLAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
NtContinue(
|
|
_In_ PCONTEXT Context,
|
|
_In_ BOOLEAN TestAlert
|
|
);
|
|
|
|
NTSYSCALLAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
NtCallbackReturn(
|
|
_In_ PVOID Result,
|
|
_In_ ULONG ResultLength,
|
|
_In_ NTSTATUS Status
|
|
);
|
|
|
|
NTSYSCALLAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
NtCreateProfile(
|
|
_Out_ PHANDLE ProfileHandle,
|
|
_In_ HANDLE ProcessHandle,
|
|
_In_ PVOID ImageBase,
|
|
_In_ SIZE_T ImageSize,
|
|
_In_ ULONG Granularity,
|
|
_Out_ PVOID Buffer,
|
|
_In_ ULONG ProfilingSize,
|
|
_In_ KPROFILE_SOURCE Source,
|
|
_In_ KAFFINITY ProcessorMask
|
|
);
|
|
|
|
NTSYSCALLAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
NtCreateProfileEx(
|
|
_Out_ PHANDLE ProfileHandle,
|
|
_In_ HANDLE ProcessHandle,
|
|
_In_ PVOID ImageBase,
|
|
_In_ SIZE_T ImageSize,
|
|
_In_ ULONG Granularity,
|
|
_Out_ PVOID Buffer,
|
|
_In_ ULONG ProfilingSize,
|
|
_In_ KPROFILE_SOURCE Source,
|
|
_In_ USHORT GroupCount,
|
|
_In_reads_(GroupCount) PGROUP_AFFINITY Affinity
|
|
);
|
|
|
|
NTSYSCALLAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
NtDelayExecution(
|
|
_In_ BOOLEAN Alertable,
|
|
_In_ LARGE_INTEGER *Interval
|
|
);
|
|
|
|
ULONG
|
|
NTAPI
|
|
NtGetCurrentProcessorNumber(
|
|
VOID
|
|
);
|
|
|
|
NTSYSCALLAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
NtGetContextThread(
|
|
_In_ HANDLE ThreadHandle,
|
|
_Out_ PCONTEXT Context
|
|
);
|
|
|
|
NTSYSCALLAPI
|
|
ULONG
|
|
NTAPI
|
|
NtGetTickCount(
|
|
VOID
|
|
);
|
|
|
|
NTSYSCALLAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
NtQueryIntervalProfile(
|
|
_In_ KPROFILE_SOURCE ProfileSource,
|
|
_Out_ PULONG Interval
|
|
);
|
|
|
|
NTSYSCALLAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
NtQueryPerformanceCounter(
|
|
_Out_ PLARGE_INTEGER Counter,
|
|
_Out_opt_ PLARGE_INTEGER Frequency
|
|
);
|
|
|
|
NTSYSCALLAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
NtQuerySystemTime(
|
|
_Out_ PLARGE_INTEGER CurrentTime
|
|
);
|
|
|
|
NTSYSCALLAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
NtQueryTimerResolution(
|
|
_Out_ PULONG MinimumResolution,
|
|
_Out_ PULONG MaximumResolution,
|
|
_Out_ PULONG ActualResolution
|
|
);
|
|
|
|
NTSYSCALLAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
NtQueueApcThread(
|
|
_In_ HANDLE ThreadHandle,
|
|
_In_ PKNORMAL_ROUTINE ApcRoutine,
|
|
_In_opt_ PVOID NormalContext,
|
|
_In_opt_ PVOID SystemArgument1,
|
|
_In_opt_ PVOID SystemArgument2
|
|
);
|
|
|
|
NTSYSCALLAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
NtQueueApcThreadEx(
|
|
_In_ HANDLE ThreadHandle,
|
|
_In_opt_ HANDLE UserApcReserveHandle,
|
|
_In_ PKNORMAL_ROUTINE ApcRoutine,
|
|
_In_opt_ PVOID NormalContext,
|
|
_In_opt_ PVOID SystemArgument1,
|
|
_In_opt_ PVOID SystemArgument2
|
|
);
|
|
|
|
NTSYSCALLAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
NtRaiseException(
|
|
_In_ PEXCEPTION_RECORD ExceptionRecord,
|
|
_In_ PCONTEXT Context,
|
|
_In_ BOOLEAN SearchFrames
|
|
);
|
|
|
|
NTSYSCALLAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
NtSetContextThread(
|
|
_In_ HANDLE ThreadHandle,
|
|
_In_ PCONTEXT Context
|
|
);
|
|
|
|
NTSYSCALLAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
NtSetIntervalProfile(
|
|
_In_ ULONG Interval,
|
|
_In_ KPROFILE_SOURCE ClockSource
|
|
);
|
|
|
|
NTSYSCALLAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
NtSetLdtEntries(
|
|
_In_ ULONG Selector1,
|
|
_In_ LDT_ENTRY LdtEntry1,
|
|
_In_ ULONG Selector2,
|
|
_In_ LDT_ENTRY LdtEntry2
|
|
);
|
|
|
|
NTSYSCALLAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
NtSetSystemTime(
|
|
_In_ PLARGE_INTEGER SystemTime,
|
|
_In_opt_ PLARGE_INTEGER NewSystemTime
|
|
);
|
|
|
|
NTSYSCALLAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
NtSetTimerResolution(
|
|
_In_ ULONG RequestedResolution,
|
|
_In_ BOOLEAN SetOrUnset,
|
|
_Out_ PULONG ActualResolution
|
|
);
|
|
|
|
NTSYSCALLAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
NtStartProfile(
|
|
_In_ HANDLE ProfileHandle
|
|
);
|
|
|
|
NTSYSCALLAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
NtStopProfile(
|
|
_In_ HANDLE ProfileHandle
|
|
);
|
|
|
|
NTSYSCALLAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
NtTestAlert(
|
|
VOID
|
|
);
|
|
|
|
NTSYSCALLAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
NtVdmControl(
|
|
_In_ ULONG ControlCode,
|
|
_In_ PVOID ControlData
|
|
);
|
|
|
|
NTSYSCALLAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
NtW32Call(
|
|
_In_ ULONG RoutineIndex,
|
|
_In_ PVOID Argument,
|
|
_In_ ULONG ArgumentLength,
|
|
_Out_opt_ PVOID* Result,
|
|
_Out_opt_ PULONG ResultLength
|
|
);
|
|
|
|
NTSYSCALLAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
NtYieldExecution(
|
|
VOID
|
|
);
|
|
|
|
NTSYSAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
ZwContinue(
|
|
_In_ PCONTEXT Context,
|
|
_In_ BOOLEAN TestAlert
|
|
);
|
|
|
|
NTSYSAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
ZwCallbackReturn(
|
|
_In_ PVOID Result,
|
|
_In_ ULONG ResultLength,
|
|
_In_ NTSTATUS Status
|
|
);
|
|
|
|
NTSYSAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
ZwCreateProfile(
|
|
_Out_ PHANDLE ProfileHandle,
|
|
_In_ HANDLE ProcessHandle,
|
|
_In_ PVOID ImageBase,
|
|
_In_ ULONG ImageSize,
|
|
_In_ ULONG Granularity,
|
|
_Out_ PVOID Buffer,
|
|
_In_ ULONG ProfilingSize,
|
|
_In_ KPROFILE_SOURCE Source,
|
|
_In_ KAFFINITY ProcessorMask
|
|
);
|
|
|
|
NTSYSAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
ZwDelayExecution(
|
|
_In_ BOOLEAN Alertable,
|
|
_In_ LARGE_INTEGER *Interval
|
|
);
|
|
|
|
NTSYSAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
ZwFlushInstructionCache(
|
|
_In_ HANDLE ProcessHandle,
|
|
_In_ PVOID BaseAddress,
|
|
_In_ ULONG NumberOfBytesToFlush
|
|
);
|
|
|
|
NTSYSAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
ZwGetContextThread(
|
|
_In_ HANDLE ThreadHandle,
|
|
_Out_ PCONTEXT Context
|
|
);
|
|
|
|
NTSYSAPI
|
|
ULONG
|
|
NTAPI
|
|
ZwGetTickCount(
|
|
VOID
|
|
);
|
|
|
|
NTSYSAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
ZwQueryIntervalProfile(
|
|
_In_ KPROFILE_SOURCE ProfileSource,
|
|
_Out_ PULONG Interval
|
|
);
|
|
|
|
NTSYSAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
ZwQueryPerformanceCounter(
|
|
_Out_ PLARGE_INTEGER Counter,
|
|
_Out_opt_ PLARGE_INTEGER Frequency
|
|
);
|
|
|
|
NTSYSAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
ZwQuerySystemTime(
|
|
_Out_ PLARGE_INTEGER CurrentTime
|
|
);
|
|
|
|
NTSYSAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
ZwQueryTimerResolution(
|
|
_Out_ PULONG MinimumResolution,
|
|
_Out_ PULONG MaximumResolution,
|
|
_Out_ PULONG ActualResolution
|
|
);
|
|
|
|
NTSYSAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
ZwQueueApcThread(
|
|
_In_ HANDLE ThreadHandle,
|
|
_In_ PKNORMAL_ROUTINE ApcRoutine,
|
|
_In_opt_ PVOID NormalContext,
|
|
_In_opt_ PVOID SystemArgument1,
|
|
_In_opt_ PVOID SystemArgument2
|
|
);
|
|
|
|
NTSYSAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
ZwRaiseException(
|
|
_In_ PEXCEPTION_RECORD ExceptionRecord,
|
|
_In_ PCONTEXT Context,
|
|
_In_ BOOLEAN SearchFrames
|
|
);
|
|
|
|
NTSYSAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
ZwSetContextThread(
|
|
_In_ HANDLE ThreadHandle,
|
|
_In_ PCONTEXT Context
|
|
);
|
|
|
|
NTSYSAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
ZwSetIntervalProfile(
|
|
_In_ ULONG Interval,
|
|
_In_ KPROFILE_SOURCE ClockSource
|
|
);
|
|
|
|
NTSYSAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
ZwSetLdtEntries(
|
|
_In_ ULONG Selector1,
|
|
_In_ LDT_ENTRY LdtEntry1,
|
|
_In_ ULONG Selector2,
|
|
_In_ LDT_ENTRY LdtEntry2
|
|
);
|
|
|
|
NTSYSAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
ZwSetSystemTime(
|
|
_In_ PLARGE_INTEGER SystemTime,
|
|
_In_opt_ PLARGE_INTEGER NewSystemTime
|
|
);
|
|
|
|
NTSYSAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
ZwSetTimerResolution(
|
|
_In_ ULONG RequestedResolution,
|
|
_In_ BOOLEAN SetOrUnset,
|
|
_Out_ PULONG ActualResolution
|
|
);
|
|
|
|
NTSYSAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
ZwStartProfile(
|
|
_In_ HANDLE ProfileHandle
|
|
);
|
|
|
|
NTSYSAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
ZwStopProfile(
|
|
_In_ HANDLE ProfileHandle
|
|
);
|
|
|
|
NTSYSAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
ZwTestAlert(
|
|
VOID
|
|
);
|
|
|
|
NTSYSAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
ZwVdmControl(
|
|
_In_ ULONG ControlCode,
|
|
_In_ PVOID ControlData
|
|
);
|
|
|
|
NTSYSAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
ZwW32Call(
|
|
_In_ ULONG RoutineIndex,
|
|
_In_ PVOID Argument,
|
|
_In_ ULONG ArgumentLength,
|
|
_Out_opt_ PVOID* Result,
|
|
_Out_opt_ PULONG ResultLength
|
|
);
|
|
|
|
NTSYSAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
ZwYieldExecution(
|
|
VOID
|
|
);
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
} // extern "C"
|
|
#endif
|