/****************************************************************************
 ****************************************************************************
 ***
 ***   This header was created to make information necessary for userspace
 ***   to call into the Windows kernel available to Dr. Memory.  It contains
 ***   only constants, structures, and macros, and thus, contains no
 ***   copyrightable information.
 ***
 ****************************************************************************
 ****************************************************************************/

#ifndef _NTEXAPI_H_
#define _NTEXAPI_H_ 1

#include "ndk_iotypes.h"

NTSTATUS NTAPI
NtEnumerateBootEntries(
    __out_bcount_opt(*BufferLength) PVOID Buffer,
    __inout PULONG BufferLength
    );

NTSTATUS NTAPI
NtEnumerateDriverEntries(
    __out_bcount(*BufferLength) PVOID Buffer,
    __inout PULONG BufferLength
    );

NTSTATUS NTAPI
NtEnumerateSystemEnvironmentValuesEx(
    __in ULONG InformationClass,
    __out PVOID Buffer,
    __inout PULONG BufferLength
    );

NTSTATUS NTAPI
NtQueryBootEntryOrder(
    __out_ecount_opt(*Count) PULONG Ids,
    __inout PULONG Count
    );

NTSTATUS NTAPI
NtQueryBootOptions(
    __out_bcount_opt(*BootOptionsLength) PBOOT_OPTIONS BootOptions,
    __inout PULONG BootOptionsLength
    );

NTSTATUS NTAPI
NtQueryDriverEntryOrder(
    __out_ecount(*Count) PULONG Ids,
    __inout PULONG Count
    );

NTSTATUS NTAPI
NtQuerySystemEnvironmentValueEx(
    __in PUNICODE_STRING VariableName,
    __in LPGUID VendorGuid,
    __out_bcount_opt(*ValueLength) PVOID Value,
    __inout PULONG ValueLength,
    __out_opt PULONG Attributes
    );

NTSTATUS NTAPI
NtSetBootEntryOrder(
    __in_ecount(Count) PULONG Ids,
    __in ULONG Count
    );

NTSTATUS NTAPI
NtSetDriverEntryOrder(
    __in_ecount(Count) PULONG Ids,
    __in ULONG Count
    );

NTSTATUS
NTAPI
NtQuerySystemInformationEx(
    __in SYSTEM_INFORMATION_CLASS SystemInformationClass,
    __in_bcount(QueryInformationLength) PVOID QueryInformation,
    __in ULONG QueryInformationLength,
    __out_bcount_opt(SystemInformationLength) PVOID SystemInformation,
    __in ULONG SystemInformationLength,
    __out_opt PULONG ReturnLength
    );

NTSTATUS
NTAPI
NtInitializeNlsFiles(
    __out PVOID *BaseAddress,
    __out PLCID DefaultLocaleId,
    __out PLARGE_INTEGER DefaultCasingTableSize
    );
	
NTSTATUS
NTAPI
NtAcquireCMFViewOwnership(
    __out PULONGLONG TimeStamp,
    __out PBOOLEAN tokenTaken,
    __in BOOLEAN replaceExisting
    );

NTSTATUS
NTAPI
NtCreateProfileEx(
    __out PHANDLE ProfileHandle,
    __in_opt HANDLE Process,
    __in PVOID ProfileBase,
    __in SIZE_T ProfileSize,
    __in ULONG BucketSize,
    __in PULONG Buffer,
    __in ULONG BufferSize,
    __in KPROFILE_SOURCE ProfileSource,
    __in ULONG GroupAffinityCount,
    __in_opt PGROUP_AFFINITY GroupAffinity
    );

NTSTATUS
NTAPI
NtCreateWorkerFactory(
    __out PHANDLE WorkerFactoryHandleReturn,
    __in ACCESS_MASK DesiredAccess,
    __in_opt POBJECT_ATTRIBUTES ObjectAttributes,
    __in HANDLE CompletionPortHandle,
    __in HANDLE WorkerProcessHandle,
    __in PVOID StartRoutine,
    __in_opt PVOID StartParameter,
    __in_opt ULONG MaxThreadCount,
    __in_opt SIZE_T StackReserve,
    __in_opt SIZE_T StackCommit
    );

NTSTATUS
NTAPI
NtFlushInstallUILanguage(
    __in LANGID InstallUILanguage,
    __in ULONG SetComittedFlag
    );

NTSTATUS
NTAPI
NtGetMUIRegistryInfo(
    __in ULONG Flags,
    __inout PULONG DataSize,
    __out PVOID Data
    );

NTSTATUS
NTAPI
NtGetNlsSectionPtr(
    __in ULONG SectionType,
    __in ULONG SectionData,
    __in PVOID ContextData,
    __out PVOID *SectionPointer,
    __out PULONG SectionSize
    );

NTSTATUS
NTAPI
NtIsUILanguageComitted(
    VOID
    );

NTSTATUS
NTAPI
NtReleaseCMFViewOwnership(
    VOID
    );

NTSTATUS
NTAPI
NtReleaseWorkerFactoryWorker(
    __in HANDLE WorkerFactoryHandle
    );

NTSTATUS
NTAPI
NtWorkerFactoryWorkerReady(
    __in HANDLE WorkerFactoryHandle
    );

NTSTATUS
NTAPI
NtQueryInformationWorkerFactory(
    __in HANDLE WorkerFactoryHandle,
    __in WORKERFACTORYINFOCLASS WorkerFactoryInformationClass,
    __out_bcount(WorkerFactoryInformationLength) PVOID WorkerFactoryInformation,
    __in ULONG WorkerFactoryInformationLength,
    __out_opt PULONG ReturnLength
    );

NTSTATUS
NTAPI
NtSetInformationWorkerFactory(
    __in HANDLE WorkerFactoryHandle,
    __in WORKERFACTORYINFOCLASS WorkerFactoryInformationClass,
    __in_bcount(WorkerFactoryInformationLength) PVOID WorkerFactoryInformation,
    __in ULONG WorkerFactoryInformationLength
    );

NTSTATUS
NTAPI
NtWaitForWorkViaWorkerFactory(
    __in HANDLE WorkerFactoryHandle,
    __out FILE_IO_COMPLETION_INFORMATION *MiniPacket
    );

NTSTATUS
NTAPI
NtShutdownWorkerFactory(
    __in HANDLE WorkerFactoryHandle,
    __inout volatile LONG *PendingWorkerCount
    );

NTSTATUS
NTAPI
NtSetTimerEx(
    __in HANDLE TimerHandle,
    __in TIMER_SET_INFORMATION_CLASS TimerSetInformationClass,
    __inout_bcount_opt(TimerSetInformationLength) PVOID TimerSetInformation,
    __in ULONG TimerSetInformationLength
    );

NTSTATUS
NTAPI
NtCancelTimer2(
    __in HANDLE TimerHandle,
    __out_opt PBOOLEAN CurrentState
    );

NTSTATUS
NTAPI
NtSetTimer2(
    __in HANDLE TimerHandle,
    __in PLARGE_INTEGER DueTime,
    __in_opt PLARGE_INTEGER Period,
    __in PT2_SET_PARAMETERS Parameters
    );

typedef struct _WNF_STATE_NAME {
    ULONG Data[2];
} WNF_STATE_NAME, *PWNF_STATE_NAME;

typedef const WNF_STATE_NAME *PCWNF_STATE_NAME;

typedef enum _WNF_STATE_NAME_LIFETIME {
    WnfWellKnownStateName,
    WnfPermanentStateName,
    WnfPersistentStateName,
    WnfTemporaryStateName
} WNF_STATE_NAME_LIFETIME;

typedef enum _WNF_STATE_NAME_INFORMATION {
    WnfInfoStateNameExist,
    WnfInfoSubscribersPresent,
    WnfInfoIsQuiescent
} WNF_STATE_NAME_INFORMATION;

typedef enum _WNF_DATA_SCOPE {
    WnfDataScopeSystem,
    WnfDataScopeSession,
    WnfDataScopeUser,
    WnfDataScopeProcess
} WNF_DATA_SCOPE;

typedef struct _WNF_TYPE_ID {
    GUID TypeId;
} WNF_TYPE_ID, *PWNF_TYPE_ID;

typedef const WNF_TYPE_ID *PCWNF_TYPE_ID;

typedef ULONG WNF_CHANGE_STAMP, *PWNF_CHANGE_STAMP;

typedef ULONG LOGICAL;
typedef ULONG *PLOGICAL;

NTSTATUS
NTAPI
NtQueryWnfStateData(
    _In_ PCWNF_STATE_NAME StateName,
    _In_opt_ PCWNF_TYPE_ID TypeId,
    _In_opt_ const VOID* ExplicitScope,
    _Out_ PWNF_CHANGE_STAMP ChangeStamp,
    _Out_writes_bytes_to_opt_(*BufferSize, *BufferSize) PVOID Buffer,
    _Inout_ PULONG BufferSize
    );

NTSTATUS
NTAPI
NtUpdateWnfStateData(
    _In_ PCWNF_STATE_NAME StateName,
    _In_reads_bytes_opt_(Length) const VOID* Buffer,
    _In_opt_ ULONG Length,
    _In_opt_ PCWNF_TYPE_ID TypeId,
    _In_opt_ const PVOID ExplicitScope,
    _In_ WNF_CHANGE_STAMP MatchingChangeStamp,
    _In_ LOGICAL CheckStamp
    );

#endif /* _NTEXAPI_H_ 1 */
