/* ntdll.h. Contains ntdll specific stuff not defined elsewhere.
- Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006 Red Hat, Inc.
+ Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
+ 2009, 2010, 2011 Red Hat, Inc.
This file is part of Cygwin.
Cygwin license. Please consult the file "CYGWIN_LICENSE" for
details. */
+#ifndef _NTDLL_H
+#define _NTDLL_H 1
+#define STATUS_NOT_ALL_ASSIGNED ((NTSTATUS) 0x00000106)
+#define STATUS_OBJECT_NAME_EXISTS ((NTSTATUS) 0x40000000)
+#define STATUS_BUFFER_OVERFLOW ((NTSTATUS) 0x80000005)
+#define STATUS_NO_MORE_FILES ((NTSTATUS) 0x80000006)
#ifndef STATUS_INVALID_INFO_CLASS
/* Some w32api header file defines this so we need to conditionalize this
define to avoid warnings. */
-#define STATUS_INVALID_INFO_CLASS ((NTSTATUS) 0xc0000003)
+#define STATUS_INVALID_INFO_CLASS ((NTSTATUS) 0xc0000003)
#endif
-#define STATUS_INFO_LENGTH_MISMATCH ((NTSTATUS) 0xc0000004)
-#define STATUS_INVALID_PARAMETER ((NTSTATUS) 0xc000000d)
-#define STATUS_BUFFER_TOO_SMALL ((NTSTATUS) 0xc0000023)
-#define STATUS_DELETE_PENDING ((NTSTATUS) 0xc0000056)
-#define STATUS_WORKING_SET_QUOTA ((NTSTATUS) 0xc00000a1L)
-#define STATUS_INVALID_LEVEL ((NTSTATUS) 0xc0000148)
-#define STATUS_NO_MORE_FILES ((NTSTATUS)0x80000006L)
+#define STATUS_NOT_IMPLEMENTED ((NTSTATUS) 0xc0000002)
+#define STATUS_INFO_LENGTH_MISMATCH ((NTSTATUS) 0xc0000004)
+#define STATUS_INVALID_PARAMETER ((NTSTATUS) 0xc000000d)
+#define STATUS_NO_SUCH_FILE ((NTSTATUS) 0xc000000f)
+#define STATUS_INVALID_DEVICE_REQUEST ((NTSTATUS) 0xc0000010)
+#define STATUS_END_OF_FILE ((NTSTATUS) 0xc0000011)
+#define STATUS_NO_MEDIA_IN_DEVICE ((NTSTATUS) 0xc0000013)
+#define STATUS_ACCESS_DENIED ((NTSTATUS) 0xc0000022)
+#define STATUS_BUFFER_TOO_SMALL ((NTSTATUS) 0xc0000023)
+#define STATUS_OBJECT_TYPE_MISMATCH ((NTSTATUS) 0xc0000024)
+#define STATUS_OBJECT_NAME_INVALID ((NTSTATUS) 0xc0000033)
+#define STATUS_OBJECT_NAME_NOT_FOUND ((NTSTATUS) 0xc0000034)
+#define STATUS_OBJECT_PATH_NOT_FOUND ((NTSTATUS) 0xc000003A)
+#define STATUS_SHARING_VIOLATION ((NTSTATUS) 0xc0000043)
+#define STATUS_EAS_NOT_SUPPORTED ((NTSTATUS) 0xc000004f)
+#define STATUS_EA_TOO_LARGE ((NTSTATUS) 0xc0000050)
+#define STATUS_NONEXISTENT_EA_ENTRY ((NTSTATUS) 0xc0000051)
+#define STATUS_NO_EAS_ON_FILE ((NTSTATUS) 0xc0000052)
+#define STATUS_LOCK_NOT_GRANTED ((NTSTATUS) 0xc0000055)
+#define STATUS_DELETE_PENDING ((NTSTATUS) 0xc0000056)
+#define STATUS_PROCEDURE_NOT_FOUND ((NTSTATUS) 0xc000007a)
+#define STATUS_DISK_FULL ((NTSTATUS) 0xc000007f)
+#define STATUS_WORKING_SET_QUOTA ((NTSTATUS) 0xc00000a1)
+#define STATUS_INSTANCE_NOT_AVAILABLE ((NTSTATUS) 0xc00000ab)
+#define STATUS_PIPE_NOT_AVAILABLE ((NTSTATUS) 0xc00000ac)
+#define STATUS_INVALID_PIPE_STATE ((NTSTATUS) 0xc00000ad)
+#define STATUS_PIPE_BUSY ((NTSTATUS) 0xc00000ae)
+#define STATUS_NOT_SUPPORTED ((NTSTATUS) 0xc00000bb)
+#define STATUS_BAD_NETWORK_PATH ((NTSTATUS) 0xc00000be)
+#define STATUS_INVALID_NETWORK_RESPONSE ((NTSTATUS) 0xc00000c3)
+#define STATUS_BAD_NETWORK_NAME ((NTSTATUS) 0xc00000cc)
+#define STATUS_DIRECTORY_NOT_EMPTY ((NTSTATUS) 0xc0000101)
+#define STATUS_CANNOT_DELETE ((NTSTATUS) 0xc0000121)
+#define STATUS_INVALID_LEVEL ((NTSTATUS) 0xc0000148)
+#define STATUS_DLL_NOT_FOUND ((NTSTATUS) 0xc0000135)
+#define STATUS_ENTRYPOINT_NOT_FOUND ((NTSTATUS) 0xc0000139)
+#define STATUS_BAD_DLL_ENTRYPOINT ((NTSTATUS) 0xc0000251)
+#define STATUS_ILLEGAL_DLL_RELOCATION ((NTSTATUS) 0xc0000269)
+/* custom status code: */
+#define STATUS_ILLEGAL_DLL_PSEUDO_RELOCATION ((NTSTATUS) 0xe0000269)
+
#define PDI_MODULES 0x01
#define PDI_HEAPS 0x04
#define LDRP_IMAGE_DLL 0x00000004
#define WSLE_PAGE_SHARE_COUNT_MASK 0x0E0
#define WSLE_PAGE_SHAREABLE 0x100
+#define FILE_SUPERSEDED 0
+#define FILE_OPENED 1
+#define FILE_CREATED 2
+#define FILE_OVERWRITTEN 3
+#define FILE_EXISTS 4
+#define FILE_DOES_NOT_EXIST 5
+
+#define FILE_WRITE_TO_END_OF_FILE (-1LL)
+#define FILE_USE_FILE_POINTER_POSITION (-2LL)
+
+/* Device Characteristics. */
+#define FILE_REMOVABLE_MEDIA 0x00000001
+#define FILE_READ_ONLY_DEVICE 0x00000002
+#define FILE_FLOPPY_DISKETTE 0x00000004
+#define FILE_WRITE_ONCE_MEDIA 0x00000008
+#define FILE_REMOTE_DEVICE 0x00000010
+#define FILE_DEVICE_IS_MOUNTED 0x00000020
+#define FILE_VIRTUAL_VOLUME 0x00000040
+#define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080
+#define FILE_DEVICE_SECURE_OPEN 0x00000100
+
+/* Transaction access rights. */
+#define TRANSACTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x3F)
+
typedef enum _FILE_INFORMATION_CLASS
{
FileDirectoryInformation = 1,
FileMaximumInformation
} FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;
-typedef struct _FILE_BOTH_DIR_INFORMATION
+typedef struct _FILE_NAMES_INFORMATION
+{
+ ULONG NextEntryOffset;
+ ULONG FileIndex;
+ ULONG FileNameLength;
+ WCHAR FileName[1];
+} FILE_NAMES_INFORMATION, *PFILE_NAMES_INFORMATION;
+
+typedef struct _FILE_DIRECTORY_INFORMATION {
+ ULONG NextEntryOffset;
+ ULONG FileIndex;
+ LARGE_INTEGER CreationTime;
+ LARGE_INTEGER LastAccessTime;
+ LARGE_INTEGER LastWriteTime;
+ LARGE_INTEGER ChangeTime;
+ LARGE_INTEGER EndOfFile;
+ LARGE_INTEGER AllocationSize;
+ ULONG FileAttributes;
+ ULONG FileNameLength;
+ WCHAR FileName[1];
+} FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION;
+
+typedef struct _FILE_BOTH_DIRECTORY_INFORMATION
{
ULONG NextEntryOffset;
ULONG FileIndex;
CCHAR ShortNameLength;
WCHAR ShortName[12];
WCHAR FileName[1];
-} FILE_BOTH_DIR_INFORMATION, *PFILE_BOTH_DIR_INFORMATION;
+} FILE_BOTH_DIRECTORY_INFORMATION, *PFILE_BOTH_DIRECTORY_INFORMATION;
typedef struct _FILE_ID_BOTH_DIR_INFORMATION
{
#define LOCK_VM_IN_RAM 2
#define DIRECTORY_QUERY 1
+#define DIRECTORY_TRAVERSE 2
+#define DIRECTORY_CREATE_OBJECT 4
+#define DIRECTORY_CREATE_SUBDIRECTORY 8
+#define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|0x0f)
+
+#define SYMBOLIC_LINK_QUERY 1
+
+#define EVENT_QUERY_STATE 1
+#define SEMAPHORE_QUERY_STATE 1
+
+/* Specific ACCESS_MASKSs for objects created in Cygwin. */
+#define CYG_SHARED_DIR_ACCESS (DIRECTORY_QUERY \
+ | DIRECTORY_TRAVERSE \
+ | DIRECTORY_CREATE_SUBDIRECTORY \
+ | DIRECTORY_CREATE_OBJECT \
+ | READ_CONTROL)
+
+#define CYG_MUTANT_ACCESS (MUTANT_QUERY_STATE \
+ | SYNCHRONIZE \
+ | READ_CONTROL)
+
+#define CYG_EVENT_ACCESS (EVENT_QUERY_STATE \
+ | EVENT_MODIFY_STATE \
+ | SYNCHRONIZE \
+ | READ_CONTROL)
+
+#define CYG_SEMAPHORE_ACCESS (SEMAPHORE_QUERY_STATE \
+ | SEMAPHORE_MODIFY_STATE \
+ | SYNCHRONIZE \
+ | READ_CONTROL)
typedef ULONG KAFFINITY;
ProcessBasicInformation = 0,
ProcessQuotaLimits = 1,
ProcessVmCounters = 3,
- ProcessTimes =4,
+ ProcessTimes = 4,
+ ProcessSessionInformation = 24,
+ ProcessWow64Information = 26
} PROCESSINFOCLASS;
typedef struct _DEBUG_BUFFER
LARGE_INTEGER UserTime;
} KERNEL_USER_TIMES, *PKERNEL_USER_TIMES;
-typedef void *PPEB;
+typedef struct _RTL_USER_PROCESS_PARAMETERS
+{
+ ULONG AllocationSize;
+ ULONG Size;
+ ULONG Flags;
+ ULONG DebugFlags;
+ HANDLE hConsole;
+ ULONG ProcessGroup;
+ HANDLE hStdInput;
+ HANDLE hStdOutput;
+ HANDLE hStdError;
+ UNICODE_STRING CurrentDirectoryName;
+ HANDLE CurrentDirectoryHandle;
+ UNICODE_STRING DllPath;
+ UNICODE_STRING ImagePathName;
+ UNICODE_STRING CommandLine;
+ PWSTR Environment;
+ ULONG dwX;
+ ULONG dwY;
+ ULONG dwXSize;
+ ULONG dwYSize;
+ ULONG dwXCountChars;
+ ULONG dwYCountChars;
+ ULONG dwFillAttribute;
+ ULONG dwFlags;
+ ULONG wShowWindow;
+ UNICODE_STRING WindowTitle;
+ UNICODE_STRING DesktopInfo;
+ UNICODE_STRING ShellInfo;
+ UNICODE_STRING RuntimeInfo;
+} RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS;
+
+typedef struct _PEB
+{
+ BYTE Reserved1[2];
+ BYTE BeingDebugged;
+ BYTE Reserved2[9];
+ PVOID LoaderData;
+ PRTL_USER_PROCESS_PARAMETERS ProcessParameters;
+ BYTE Reserved3[4];
+ PVOID ProcessHeap;
+ PRTL_CRITICAL_SECTION FastPebLock;
+ BYTE Reserved4[436];
+ ULONG SessionId;
+} PEB, *PPEB;
+
+/* Simplifed definition, just to get the PEB pointer. */
+typedef struct _TEB
+{
+ PVOID dummy[12];
+ PPEB Peb;
+ /* A lot more follows... */
+} TEB, *PTEB;
+
+typedef struct _KSYSTEM_TIME
+{
+ ULONG LowPart;
+ LONG High1Time;
+ LONG High2Time;
+} KSYSTEM_TIME, *PKSYSTEM_TIME;
+
+typedef struct _KUSER_SHARED_DATA
+{
+ BYTE Reserved1[0x08];
+ KSYSTEM_TIME InterruptTime;
+ BYTE Reserved2[0x2c8];
+ ULONG DismountCount;
+ /* A lot more follows... */
+} KUSER_SHARED_DATA, *PKUSER_SHARED_DATA;
typedef struct _PROCESS_BASIC_INFORMATION
{
ULONG InheritedFromUniqueProcessId;
} PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION;
+typedef struct _PROCESS_SESSION_INFORMATION
+{
+ ULONG SessionId;
+} PROCESS_SESSION_INFORMATION, *PPROCESS_SESSION_INFORMATION;
+
typedef enum _MEMORY_INFORMATION_CLASS
{
MemoryBasicInformation,
BOOLEAN Directory;
} FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION;
+typedef struct _FILE_NETWORK_OPEN_INFORMATION {
+ LARGE_INTEGER CreationTime;
+ LARGE_INTEGER LastAccessTime;
+ LARGE_INTEGER LastWriteTime;
+ LARGE_INTEGER ChangeTime;
+ LARGE_INTEGER AllocationSize;
+ LARGE_INTEGER EndOfFile;
+ ULONG FileAttributes;
+} FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;
+
typedef struct _FILE_INTERNAL_INFORMATION {
LARGE_INTEGER FileId;
} FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION;
WCHAR FileName[1];
} FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;
+typedef struct _FILE_LINK_INFORMATION {
+ BOOLEAN ReplaceIfExists;
+ HANDLE RootDirectory;
+ ULONG FileNameLength;
+ WCHAR FileName[1];
+} FILE_LINK_INFORMATION, *PFILE_LINK_INFORMATION;
+
+typedef struct _FILE_RENAME_INFORMATION {
+ BOOLEAN ReplaceIfExists;
+ HANDLE RootDirectory;
+ ULONG FileNameLength;
+ WCHAR FileName[1];
+} FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION;
+
typedef struct _FILE_ALL_INFORMATION {
FILE_BASIC_INFORMATION BasicInformation;
FILE_STANDARD_INFORMATION StandardInformation;
typedef struct _FILE_COMPRESSION_INFORMATION
{
- LARGE_INTEGER CompressedSize;
+ LARGE_INTEGER CompressedFileSize;
USHORT CompressionFormat;
UCHAR CompressionUnitShift;
- UCHAR Unknown;
- UCHAR ClusterSizeShift;
+ UCHAR ChunkShift;
+ UCHAR ClusterShift;
+ UCHAR Reserved[3];
} FILE_COMPRESSION_INFORMATION, *PFILE_COMPRESSION_INFORMATION;
+typedef struct _FILE_FS_DEVICE_INFORMATION
+{
+ ULONG DeviceType;
+ ULONG Characteristics;
+} FILE_FS_DEVICE_INFORMATION, *PFILE_FS_DEVICE_INFORMATION;
+
+typedef struct _FILE_FS_ATTRIBUTE_INFORMATION
+{
+ ULONG FileSystemAttributes;
+ ULONG MaximumComponentNameLength;
+ ULONG FileSystemNameLength;
+ WCHAR FileSystemName[1];
+} FILE_FS_ATTRIBUTE_INFORMATION, *PFILE_FS_ATTRIBUTE_INFORMATION;
+
+#pragma pack(push,4)
typedef struct _FILE_FS_VOLUME_INFORMATION
{
LARGE_INTEGER VolumeCreationTime;
ULONG VolumeSerialNumber;
ULONG VolumeLabelLength;
BOOLEAN SupportsObjects;
+ BOOLEAN __dummy;
WCHAR VolumeLabel[1];
} FILE_FS_VOLUME_INFORMATION, *PFILE_FS_VOLUME_INFORMATION;
+#pragma pack(pop)
typedef struct _FILE_FS_SIZE_INFORMATION
{
ULONG BytesPerSector;
} FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION;
+typedef struct _FILE_FS_FULL_SIZE_INFORMATION
+{
+ LARGE_INTEGER TotalAllocationUnits;
+ LARGE_INTEGER CallerAvailableAllocationUnits;
+ LARGE_INTEGER ActualAvailableAllocationUnits;
+ ULONG SectorsPerAllocationUnit;
+ ULONG BytesPerSector;
+} FILE_FS_FULL_SIZE_INFORMATION, *PFILE_FS_FULL_SIZE_INFORMATION;
+
+typedef struct _FILE_FS_OBJECTID_INFORMATION {
+ UCHAR ObjectId[16];
+ UCHAR ExtendedInfo[48];
+} FILE_FS_OBJECTID_INFORMATION, *PFILE_FS_OBJECTID_INFORMATION;
+
typedef enum _FSINFOCLASS {
FileFsVolumeInformation = 1,
FileFsLabelInformation,
// and many more
} OBJECT_INFORMATION_CLASS;
+typedef struct _OBJECT_BASIC_INFORMATION
+{
+ ULONG Attributes;
+ ACCESS_MASK GrantedAccess;
+ ULONG HandleCount;
+ ULONG PointerCount;
+ ULONG PagedPoolUsage;
+ ULONG NonPagedPoolUsage;
+ ULONG Reserved[3];
+ ULONG NameInformationLength;
+ ULONG TypeInformationLength;
+ ULONG SecurityDescriptorLength;
+ LARGE_INTEGER CreateTime;
+} OBJECT_BASIC_INFORMATION, *POBJECT_BASIC_INFORMATION;
+
typedef struct _OBJECT_NAME_INFORMATION
{
UNICODE_STRING Name;
CHAR EaName[1];
} FILE_GET_EA_INFORMATION, *PFILE_GET_EA_INFORMATION;
-
typedef struct _FILE_FULL_EA_INFORMATION
{
ULONG NextEntryOffset;
CHAR EaName[1];
} FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION;
+typedef struct _FILE_MAILSLOT_SET_INFORMATION
+{
+ LARGE_INTEGER ReadTimeout;
+} FILE_MAILSLOT_SET_INFORMATION, *PFILE_MAILSLOT_SET_INFORMATION;
+
+#define FSCTL_PIPE_IMPERSONATE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, \
+ METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+typedef VOID NTAPI (*PIO_APC_ROUTINE)(PVOID, PIO_STATUS_BLOCK, ULONG);
+
+typedef enum _EVENT_TYPE
+{
+ NotificationEvent = 0,
+ SynchronizationEvent
+} EVENT_TYPE, *PEVENT_TYPE;
+
+typedef struct _EVENT_BASIC_INFORMATION
+{
+ EVENT_TYPE EventType;
+ LONG SignalState;
+} EVENT_BASIC_INFORMATION, *PEVENT_BASIC_INFORMATION;
+
+typedef enum _EVENT_INFORMATION_CLASS
+{
+ EventBasicInformation = 0
+} EVENT_INFORMATION_CLASS, *PEVENT_INFORMATION_CLASS;
+
+typedef enum _THREAD_INFORMATION_CLASS
+{
+ ThreadBasicInformation = 0,
+ ThreadImpersonationToken = 5
+} THREAD_INFORMATION_CLASS, *PTHREAD_INFORMATION_CLASS;
+
+typedef struct _THREAD_BASIC_INFORMATION {
+ NTSTATUS ExitStatus;
+ PNT_TIB TebBaseAddress;
+ CLIENT_ID ClientId;
+ KAFFINITY AffinityMask;
+ KPRIORITY Priority;
+ KPRIORITY BasePriority;
+} THREAD_BASIC_INFORMATION, *PTHREAD_BASIC_INFORMATION;
+
+#define RTL_QUERY_REGISTRY_SUBKEY 0x01
+#define RTL_QUERY_REGISTRY_TOPKEY 0x02
+#define RTL_QUERY_REGISTRY_REQUIRED 0x04
+#define RTL_QUERY_REGISTRY_NOVALUE 0x08
+#define RTL_QUERY_REGISTRY_NOEXPAND 0x10
+#define RTL_QUERY_REGISTRY_DIRECT 0x20
+#define RTL_QUERY_REGISTRY_DELETE 0x40
+#define RTL_QUERY_REGISTRY_NOSTRING 0x80
+
+#define RTL_REGISTRY_ABSOLUTE 0
+#define RTL_REGISTRY_SERVICES 1
+#define RTL_REGISTRY_CONTROL 2
+#define RTL_REGISTRY_WINDOWS_NT 3
+#define RTL_REGISTRY_DEVICEMAP 4
+#define RTL_REGISTRY_USER 5
+#define RTL_REGISTRY_HANDLE 0x40000000
+#define RTL_REGISTRY_OPTIONAL 0x80000000
+
+typedef NTSTATUS (*PRTL_QUERY_REGISTRY_ROUTINE)
+ (PWSTR, ULONG, PVOID, ULONG, PVOID, PVOID);
+
+typedef struct _RTL_QUERY_REGISTRY_TABLE
+{
+ PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine;
+ ULONG Flags;
+ PCWSTR Name;
+ PVOID EntryContext;
+ ULONG DefaultType;
+ PVOID DefaultData;
+ ULONG DefaultLength;
+} RTL_QUERY_REGISTRY_TABLE, *PRTL_QUERY_REGISTRY_TABLE;
+
+typedef enum _KEY_VALUE_INFORMATION_CLASS
+{
+ KeyValueBasicInformation = 0,
+ KeyValueFullInformation,
+ KeyValuePartialInformation
+} KEY_VALUE_INFORMATION_CLASS, *PKEY_VALUE_INFORMATION_CLASS;
+
+typedef struct _KEY_VALUE_PARTIAL_INFORMATION
+{
+ ULONG TitleIndex;
+ ULONG Type;
+ ULONG DataLength;
+ UCHAR Data[1];
+} KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION;
+
+typedef enum _TIMER_TYPE
+{
+ NotificationTimer,
+ SynchronisationTimer
+} TIMER_TYPE, *PTIMER_TYPE;
+
+typedef VOID (APIENTRY *PTIMER_APC_ROUTINE)(PVOID, ULONG, ULONG);
+
/* Function declarations for ntdll.dll. These don't appear in any
standard Win32 header. */
+
+#define NtCurrentProcess() ((HANDLE) 0xffffffff)
+#define NtCurrentThread() ((HANDLE) 0xfffffffe)
+
+#ifdef __cplusplus
+/* This is the mapping of the KUSER_SHARED_DATA structure into the 32 bit
+ user address space. We need it here to access the current DismountCount. */
+static KUSER_SHARED_DATA &SharedUserData
+ = *(volatile PKUSER_SHARED_DATA) 0x7ffe0000;
+
extern "C"
{
+#endif
+ NTSTATUS NTAPI NtAccessCheck (PSECURITY_DESCRIPTOR, HANDLE, ACCESS_MASK,
+ PGENERIC_MAPPING, PPRIVILEGE_SET, PULONG,
+ PACCESS_MASK, PNTSTATUS);
+ NTSTATUS NTAPI NtAdjustPrivilegesToken (HANDLE, BOOLEAN, PTOKEN_PRIVILEGES,
+ ULONG, PTOKEN_PRIVILEGES, PULONG);
+ NTSTATUS NTAPI NtAllocateLocallyUniqueId (PLUID);
+ NTSTATUS NTAPI NtAllocateUuids (PLARGE_INTEGER, PULONG, PULONG, PUCHAR);
+ NTSTATUS NTAPI NtCancelTimer (HANDLE, PBOOLEAN);
NTSTATUS NTAPI NtClose (HANDLE);
+ NTSTATUS NTAPI NtCommitTransaction (HANDLE, BOOLEAN);
+ NTSTATUS NTAPI NtCreateDirectoryObject (PHANDLE, ACCESS_MASK,
+ POBJECT_ATTRIBUTES);
+ NTSTATUS NTAPI NtCreateKey (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, ULONG,
+ PUNICODE_STRING, ULONG, PULONG);
+ NTSTATUS NTAPI NtCreateEvent (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
+ EVENT_TYPE, BOOLEAN);
NTSTATUS NTAPI NtCreateFile (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
PIO_STATUS_BLOCK, PLARGE_INTEGER, ULONG, ULONG,
ULONG, ULONG, PVOID, ULONG);
+ NTSTATUS NTAPI NtCreateMailslotFile(PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
+ PIO_STATUS_BLOCK, ULONG, ULONG, ULONG,
+ PLARGE_INTEGER);
+ NTSTATUS NTAPI NtCreateMutant (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
+ BOOLEAN);
NTSTATUS NTAPI NtCreateSection (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
- PLARGE_INTEGER, ULONG, ULONG, HANDLE);
+ PLARGE_INTEGER, ULONG, ULONG, HANDLE);
+ NTSTATUS NTAPI NtCreateSemaphore (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
+ LONG, LONG);
+ NTSTATUS NTAPI NtCreateTimer (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
+ TIMER_TYPE);
NTSTATUS NTAPI NtCreateToken (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
TOKEN_TYPE, PLUID, PLARGE_INTEGER, PTOKEN_USER,
PTOKEN_GROUPS, PTOKEN_PRIVILEGES, PTOKEN_OWNER,
PTOKEN_PRIMARY_GROUP, PTOKEN_DEFAULT_DACL,
PTOKEN_SOURCE);
+ NTSTATUS NTAPI NtCreateTransaction (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
+ LPGUID, HANDLE, ULONG, ULONG, ULONG,
+ PLARGE_INTEGER, PUNICODE_STRING);
+ NTSTATUS NTAPI NtDuplicateToken (HANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
+ BOOLEAN, TOKEN_TYPE, PHANDLE);
+ NTSTATUS NTAPI NtFsControlFile (HANDLE, HANDLE, PIO_APC_ROUTINE, PVOID,
+ PIO_STATUS_BLOCK, ULONG, PVOID, ULONG,
+ PVOID, ULONG);
+ NTSTATUS NTAPI NtFlushBuffersFile (HANDLE, PIO_STATUS_BLOCK);
+ NTSTATUS NTAPI NtLoadKey (POBJECT_ATTRIBUTES, POBJECT_ATTRIBUTES);
NTSTATUS NTAPI NtLockVirtualMemory (HANDLE, PVOID *, ULONG *, ULONG);
NTSTATUS NTAPI NtMapViewOfSection (HANDLE, HANDLE, PVOID *, ULONG, ULONG,
PLARGE_INTEGER, PULONG, SECTION_INHERIT,
ULONG, ULONG);
+ NTSTATUS NTAPI NtNotifyChangeDirectoryFile (HANDLE, HANDLE, PIO_APC_ROUTINE,
+ PVOID, PIO_STATUS_BLOCK,
+ PFILE_NOTIFY_INFORMATION, ULONG,
+ ULONG, BOOLEAN);
NTSTATUS NTAPI NtOpenDirectoryObject (PHANDLE, ACCESS_MASK,
- POBJECT_ATTRIBUTES);
+ POBJECT_ATTRIBUTES);
+ NTSTATUS NTAPI NtOpenEvent (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES);
NTSTATUS NTAPI NtOpenFile (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
PIO_STATUS_BLOCK, ULONG, ULONG);
+ NTSTATUS NTAPI NtOpenKey (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES);
+ NTSTATUS NTAPI NtOpenMutant (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES);
+ NTSTATUS NTAPI NtOpenProcessToken (HANDLE, ACCESS_MASK, PHANDLE);
+ NTSTATUS NTAPI NtOpenThreadToken (HANDLE, ACCESS_MASK, BOOLEAN, PHANDLE);
NTSTATUS NTAPI NtOpenSection (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES);
+ NTSTATUS NTAPI NtOpenSemaphore (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES);
+ NTSTATUS NTAPI NtOpenSymbolicLinkObject (PHANDLE, ACCESS_MASK,
+ POBJECT_ATTRIBUTES);
+ /* WARNING! Don't rely on the timestamp information returned by
+ NtQueryAttributesFile. Only the DOS file attribute info is reliable. */
+ NTSTATUS NTAPI NtPrivilegeCheck (HANDLE, PPRIVILEGE_SET, PBOOLEAN);
+ NTSTATUS NTAPI NtQueryAttributesFile (POBJECT_ATTRIBUTES,
+ PFILE_BASIC_INFORMATION);
NTSTATUS NTAPI NtQueryDirectoryFile(HANDLE, HANDLE, PVOID, PVOID,
PIO_STATUS_BLOCK, PVOID, ULONG,
FILE_INFORMATION_CLASS, BOOLEAN,
PUNICODE_STRING, BOOLEAN);
NTSTATUS NTAPI NtQueryDirectoryObject (HANDLE, PVOID, ULONG, BOOLEAN,
- BOOLEAN, PULONG, PULONG);
+ BOOLEAN, PULONG, PULONG);
NTSTATUS NTAPI NtQueryEaFile (HANDLE, PIO_STATUS_BLOCK, PVOID, ULONG,
BOOLEAN, PVOID, ULONG, PULONG, BOOLEAN);
+ NTSTATUS NTAPI NtQueryEvent (HANDLE, EVENT_INFORMATION_CLASS, PVOID, ULONG,
+ PULONG);
+ NTSTATUS NTAPI NtQueryFullAttributesFile (POBJECT_ATTRIBUTES,
+ PFILE_NETWORK_OPEN_INFORMATION);
NTSTATUS NTAPI NtQueryInformationFile (HANDLE, PIO_STATUS_BLOCK, PVOID,
ULONG, FILE_INFORMATION_CLASS);
NTSTATUS NTAPI NtQueryInformationProcess (HANDLE, PROCESSINFOCLASS,
PVOID, ULONG, PULONG);
+ NTSTATUS NTAPI NtQueryInformationThread (HANDLE, THREAD_INFORMATION_CLASS,
+ PVOID, ULONG, PULONG);
+ NTSTATUS NTAPI NtQueryInformationToken (HANDLE, TOKEN_INFORMATION_CLASS,
+ PVOID, ULONG, PULONG);
NTSTATUS NTAPI NtQueryObject (HANDLE, OBJECT_INFORMATION_CLASS, VOID *,
ULONG, ULONG *);
NTSTATUS NTAPI NtQuerySystemInformation (SYSTEM_INFORMATION_CLASS,
PVOID, ULONG, PULONG);
+
+ NTSTATUS WINAPI NtQuerySystemTime (PLARGE_INTEGER);
+
NTSTATUS NTAPI NtQuerySecurityObject (HANDLE, SECURITY_INFORMATION,
- PSECURITY_DESCRIPTOR, ULONG, PULONG);
+ PSECURITY_DESCRIPTOR, ULONG, PULONG);
+ NTSTATUS NTAPI NtQuerySymbolicLinkObject (HANDLE, PUNICODE_STRING, PULONG);
+ NTSTATUS NTAPI NtQueryTimerResolution (PULONG, PULONG, PULONG);
+ NTSTATUS NTAPI NtQueryValueKey (HANDLE, PUNICODE_STRING,
+ KEY_VALUE_INFORMATION_CLASS, PVOID, ULONG,
+ PULONG);
NTSTATUS NTAPI NtQueryVirtualMemory (HANDLE, PVOID, MEMORY_INFORMATION_CLASS,
PVOID, ULONG, PULONG);
NTSTATUS NTAPI NtQueryVolumeInformationFile (HANDLE, IO_STATUS_BLOCK *,
VOID *, ULONG,
FS_INFORMATION_CLASS);
+ NTSTATUS NTAPI NtReadFile (HANDLE, HANDLE, PIO_APC_ROUTINE, PVOID,
+ PIO_STATUS_BLOCK, PVOID, ULONG, PLARGE_INTEGER,
+ PULONG);
+ NTSTATUS NTAPI NtRollbackTransaction (HANDLE, BOOLEAN);
NTSTATUS NTAPI NtSetEaFile (HANDLE, PIO_STATUS_BLOCK, PVOID, ULONG);
NTSTATUS NTAPI NtSetInformationFile (HANDLE, PIO_STATUS_BLOCK, PVOID, ULONG,
FILE_INFORMATION_CLASS);
+ NTSTATUS NTAPI NtSetInformationThread (HANDLE, THREAD_INFORMATION_CLASS,
+ PVOID, ULONG);
+ NTSTATUS NTAPI NtSetInformationToken (HANDLE, TOKEN_INFORMATION_CLASS, PVOID,
+ ULONG);
NTSTATUS NTAPI NtSetSecurityObject (HANDLE, SECURITY_INFORMATION,
PSECURITY_DESCRIPTOR);
+ NTSTATUS NTAPI NtSetTimer (HANDLE, PLARGE_INTEGER, PTIMER_APC_ROUTINE, PVOID,
+ BOOLEAN, LONG, PBOOLEAN);
+ NTSTATUS NTAPI NtSetTimerResolution (ULONG, BOOLEAN, PULONG);
+ NTSTATUS NTAPI NtSetValueKey (HANDLE, PUNICODE_STRING, ULONG, ULONG, PVOID,
+ ULONG);
NTSTATUS NTAPI NtUnlockVirtualMemory (HANDLE, PVOID *, ULONG *, ULONG);
NTSTATUS NTAPI NtUnmapViewOfSection (HANDLE, PVOID);
+ NTSTATUS NTAPI NtWriteFile (HANDLE, HANDLE, PIO_APC_ROUTINE, PVOID,
+ PIO_STATUS_BLOCK, PVOID, ULONG, PLARGE_INTEGER,
+ PULONG);
+ NTSTATUS NTAPI RtlAbsoluteToSelfRelativeSD (PSECURITY_DESCRIPTOR,
+ PSECURITY_DESCRIPTOR, PULONG);
+ VOID NTAPI RtlAcquirePebLock ();
+ NTSTATUS NTAPI RtlAddAccessAllowedAce (PACL, ULONG, ACCESS_MASK, PSID);
+ NTSTATUS NTAPI RtlAddAccessDeniedAce (PACL, ULONG, ACCESS_MASK, PSID);
+ NTSTATUS NTAPI RtlAddAce (PACL, ULONG, ULONG, PVOID, ULONG);
+ PVOID NTAPI RtlAllocateHeap (PVOID, ULONG, SIZE_T);
+ NTSTATUS NTAPI RtlAppendUnicodeToString (PUNICODE_STRING, PCWSTR);
+ NTSTATUS NTAPI RtlAppendUnicodeStringToString (PUNICODE_STRING,
+ PUNICODE_STRING);
+ NTSTATUS NTAPI RtlAnsiStringToUnicodeString (PUNICODE_STRING, PANSI_STRING,
+ BOOLEAN);
+ NTSTATUS NTAPI RtlCheckRegistryKey (ULONG, PCWSTR);
+ LONG NTAPI RtlCompareUnicodeString (PUNICODE_STRING, PUNICODE_STRING,
+ BOOLEAN);
+ NTSTATUS NTAPI RtlConvertSidToUnicodeString (PUNICODE_STRING, PSID, BOOLEAN);
+ NTSTATUS NTAPI RtlConvertToAutoInheritSecurityObject (PSECURITY_DESCRIPTOR,
+ PSECURITY_DESCRIPTOR,
+ PSECURITY_DESCRIPTOR *,
+ GUID *, BOOLEAN,
+ PGENERIC_MAPPING);
+ NTSTATUS NTAPI RtlCopySid (ULONG, PSID, PSID);
+ VOID NTAPI RtlCopyUnicodeString (PUNICODE_STRING, PUNICODE_STRING);
+ NTSTATUS NTAPI RtlCreateAcl (PACL, ULONG, ULONG);
+ NTSTATUS NTAPI RtlCreateRegistryKey (ULONG, PCWSTR);
+ NTSTATUS NTAPI RtlCreateSecurityDescriptor (PSECURITY_DESCRIPTOR, ULONG);
+ BOOLEAN NTAPI RtlCreateUnicodeStringFromAsciiz (PUNICODE_STRING, PCSTR);
+ NTSTATUS NTAPI RtlDeleteSecurityObject (PSECURITY_DESCRIPTOR *);
+ NTSTATUS NTAPI RtlDowncaseUnicodeString (PUNICODE_STRING, PUNICODE_STRING,
+ BOOLEAN);
+ NTSTATUS NTAPI RtlEnterCriticalSection (PRTL_CRITICAL_SECTION);
+ BOOLEAN NTAPI RtlEqualPrefixSid (PSID, PSID);
+ BOOLEAN NTAPI RtlEqualSid (PSID, PSID);
+ BOOLEAN NTAPI RtlEqualUnicodeString (PUNICODE_STRING, PUNICODE_STRING,
+ BOOLEAN);
+ VOID NTAPI RtlFreeAnsiString (PANSI_STRING);
+ BOOLEAN NTAPI RtlFreeHeap (PVOID, ULONG, PVOID);
+ VOID NTAPI RtlFreeOemString (POEM_STRING);
+ VOID NTAPI RtlFreeUnicodeString (PUNICODE_STRING);
+ BOOLEAN NTAPI RtlFirstFreeAce (PACL, PVOID *);
+ NTSTATUS NTAPI RtlGetAce (PACL, ULONG, PVOID);
+ NTSTATUS NTAPI RtlGetControlSecurityDescriptor (PSECURITY_DESCRIPTOR,
+ PSECURITY_DESCRIPTOR_CONTROL,
+ PULONG);
+ HANDLE NTAPI RtlGetCurrentTransaction ();
+ NTSTATUS NTAPI RtlGetDaclSecurityDescriptor (PSECURITY_DESCRIPTOR, PBOOLEAN,
+ PACL *, PBOOLEAN);
+ NTSTATUS NTAPI RtlGetGroupSecurityDescriptor (PSECURITY_DESCRIPTOR, PSID *,
+ PBOOLEAN);
+ NTSTATUS NTAPI RtlGetOwnerSecurityDescriptor (PSECURITY_DESCRIPTOR, PSID *,
+ PBOOLEAN);
+ PSID_IDENTIFIER_AUTHORITY NTAPI RtlIdentifierAuthoritySid (PSID);
+ VOID NTAPI RtlInitEmptyUnicodeString (PUNICODE_STRING, PCWSTR, USHORT);
+ NTSTATUS NTAPI RtlInitializeSid (PSID, PSID_IDENTIFIER_AUTHORITY, UCHAR);
VOID NTAPI RtlInitUnicodeString (PUNICODE_STRING, PCWSTR);
+ NTSTATUS NTAPI RtlIntegerToUnicodeString (ULONG, ULONG, PUNICODE_STRING);
ULONG NTAPI RtlIsDosDeviceName_U (PCWSTR);
+ NTSTATUS NTAPI RtlLeaveCriticalSection (PRTL_CRITICAL_SECTION);
+ ULONG NTAPI RtlLengthSecurityDescriptor (PSECURITY_DESCRIPTOR);
+ ULONG NTAPI RtlLengthSid (PSID);
ULONG NTAPI RtlNtStatusToDosError (NTSTATUS);
+ NTSTATUS NTAPI RtlOemStringToUnicodeString (PUNICODE_STRING, POEM_STRING,
+ BOOLEAN);
+ BOOLEAN NTAPI RtlPrefixUnicodeString (PUNICODE_STRING, PUNICODE_STRING,
+ BOOLEAN);
+ NTSTATUS NTAPI RtlQueryRegistryValues (ULONG, PCWSTR,
+ PRTL_QUERY_REGISTRY_TABLE, PVOID,
+ PVOID);
+ VOID NTAPI RtlReleasePebLock ();
+ VOID NTAPI RtlSecondsSince1970ToTime (ULONG, PLARGE_INTEGER);
+ NTSTATUS NTAPI RtlSetCurrentDirectory_U (PUNICODE_STRING);
+ BOOLEAN NTAPI RtlSetCurrentTransaction (HANDLE);
+ NTSTATUS NTAPI RtlSetControlSecurityDescriptor (PSECURITY_DESCRIPTOR,
+ SECURITY_DESCRIPTOR_CONTROL,
+ SECURITY_DESCRIPTOR_CONTROL);
+ NTSTATUS NTAPI RtlSetDaclSecurityDescriptor (PSECURITY_DESCRIPTOR, BOOLEAN,
+ PACL, BOOLEAN);
+ NTSTATUS NTAPI RtlSetGroupSecurityDescriptor (PSECURITY_DESCRIPTOR, PSID,
+ BOOLEAN);
+ NTSTATUS NTAPI RtlSetOwnerSecurityDescriptor (PSECURITY_DESCRIPTOR, PSID,
+ BOOLEAN);
+ PUCHAR NTAPI RtlSubAuthorityCountSid (PSID);
+ PULONG NTAPI RtlSubAuthoritySid (PSID, ULONG);
+ NTSTATUS NTAPI RtlUnicodeStringToAnsiString (PANSI_STRING, PUNICODE_STRING,
+ BOOLEAN);
+ NTSTATUS NTAPI RtlUnicodeStringToOemString (PANSI_STRING, PUNICODE_STRING,
+ BOOLEAN);
+ WCHAR NTAPI RtlUpcaseUnicodeChar (WCHAR);
+ NTSTATUS NTAPI RtlUpcaseUnicodeString (PUNICODE_STRING, PUNICODE_STRING,
+ BOOLEAN);
+ NTSTATUS NTAPI RtlWriteRegistryValue (ULONG, PCWSTR, PCWSTR, ULONG, PVOID,
+ ULONG);
+
+#ifdef __cplusplus
+ /* A few Rtl functions are either actually macros, or they just don't
+ exist even though they would be a big help. We implement them here,
+ partly as inline functions. */
+
+ /* RtlInitEmptyUnicodeString is defined as a macro in wdm.h, but that file
+ is missing entirely in w32api. */
+ inline
+ VOID NTAPI RtlInitEmptyUnicodeString(PUNICODE_STRING dest, PCWSTR buf,
+ USHORT len)
+ {
+ dest->Length = 0;
+ dest->MaximumLength = len;
+ dest->Buffer = (PWSTR) buf;
+ }
+ /* Like RtlInitEmptyUnicodeString, but initialize Length to len, too.
+ This is for instance useful when creating a UNICODE_STRING from an
+ NtQueryInformationFile info buffer, where the length of the filename
+ is known, but you can't rely on the string being 0-terminated.
+ If you know it's 0-terminated, just use RtlInitUnicodeString(). */
+ inline
+ VOID NTAPI RtlInitCountedUnicodeString (PUNICODE_STRING dest, PCWSTR buf,
+ USHORT len)
+ {
+ dest->Length = dest->MaximumLength = len;
+ dest->Buffer = (PWSTR) buf;
+ }
+ /* Split path into dirname and basename part. This function does not
+ copy anything! It just initializes the dirname and basename
+ UNICODE_STRINGs so that their Buffer members point to the right spot
+ into path's Buffer, and the Length (and MaximumLength) members are set
+ to match the dirname part and the basename part.
+ Note that dirname's Length is set so that it also includes the trailing
+ backslash. If you don't need it, just subtract sizeof(WCHAR) from
+ dirname.Length. */
+ inline
+ VOID NTAPI RtlSplitUnicodePath (PUNICODE_STRING path, PUNICODE_STRING dirname,
+ PUNICODE_STRING basename)
+ {
+ USHORT len = path->Length / sizeof (WCHAR);
+ while (len > 0 && path->Buffer[--len] != L'\\')
+ ;
+ ++len;
+ if (dirname)
+ RtlInitCountedUnicodeString (dirname, path->Buffer, len * sizeof (WCHAR));
+ if (basename)
+ RtlInitCountedUnicodeString (basename, &path->Buffer[len],
+ path->Length - len * sizeof (WCHAR));
+ }
+ /* Check if prefix is a prefix of path. */
+ inline
+ BOOLEAN NTAPI RtlEqualUnicodePathPrefix (PUNICODE_STRING path,
+ PUNICODE_STRING prefix,
+ BOOLEAN caseinsensitive)
+ {
+ UNICODE_STRING p;
+
+ RtlInitCountedUnicodeString (&p, path->Buffer,
+ prefix->Length < path->Length
+ ? prefix->Length : path->Length);
+ return RtlEqualUnicodeString (&p, prefix, caseinsensitive);
+ }
+ /* Check if sufffix is a sufffix of path. */
+ inline
+ BOOL NTAPI RtlEqualUnicodePathSuffix (PUNICODE_STRING path,
+ PUNICODE_STRING suffix,
+ BOOLEAN caseinsensitive)
+ {
+ UNICODE_STRING p;
+
+ if (suffix->Length < path->Length)
+ RtlInitCountedUnicodeString (&p, (PWCHAR) ((PBYTE) path->Buffer
+ + path->Length - suffix->Length),
+ suffix->Length);
+ else
+ RtlInitCountedUnicodeString (&p, path->Buffer, path->Length);
+ return RtlEqualUnicodeString (&p, suffix, caseinsensitive);
+ }
+ /* Implemented in strfuncs.cc. Create a Hex UNICODE_STRING from a given
+ 64 bit integer value. If append is TRUE, append the hex string,
+ otherwise overwrite dest. Returns either STATUS_SUCCESS, or
+ STATUS_BUFFER_OVERFLOW, if the unicode buffer is too small (hasn't
+ room for 16 WCHARs). */
+ NTSTATUS NTAPI RtlInt64ToHexUnicodeString (ULONGLONG value,
+ PUNICODE_STRING dest,
+ BOOLEAN append);
+ /* Set file attributes. Don't change file times. */
+ inline
+ NTSTATUS NTAPI NtSetAttributesFile (HANDLE h, ULONG attr)
+ {
+ IO_STATUS_BLOCK io;
+ FILE_BASIC_INFORMATION fbi;
+ fbi.CreationTime.QuadPart = fbi.LastAccessTime.QuadPart =
+ fbi.LastWriteTime.QuadPart = fbi.ChangeTime.QuadPart = 0LL;
+ fbi.FileAttributes = attr ?: FILE_ATTRIBUTE_NORMAL;
+ return NtSetInformationFile(h, &io, &fbi, sizeof fbi, FileBasicInformation);
+ }
+
+ /* This test for a signalled event is twice as fast as calling
+ WaitForSingleObject (event, 0). */
+ inline
+ BOOL NTAPI IsEventSignalled (HANDLE event)
+ {
+ EVENT_BASIC_INFORMATION ebi;
+ return NT_SUCCESS (NtQueryEvent (event, EventBasicInformation,
+ &ebi, sizeof ebi, NULL))
+ && ebi.SignalState != 0;
+
+ }
}
+#endif
+#endif /*_NTDLL_H*/