]> sourceware.org Git - newlib-cygwin.git/blobdiff - winsup/cygwin/ntdll.h
* cygwin.din (pthread_attr_getstack): Export.
[newlib-cygwin.git] / winsup / cygwin / ntdll.h
index 7ac15cb18dbf0f7daa8e5462546b51953a6b68f1..75ba1a5e89189570ae51e11686278e51f9094e37 100644 (file)
@@ -1,7 +1,7 @@
 /* ntdll.h.  Contains ntdll specific stuff not defined elsewhere.
 
    Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
-   2009, 2010 Red Hat, Inc.
+   2009, 2010, 2011 Red Hat, Inc.
 
    This file is part of Cygwin.
 
@@ -20,6 +20,7 @@
    define to avoid warnings. */
 #define STATUS_INVALID_INFO_CLASS     ((NTSTATUS) 0xc0000003)
 #endif
+#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)
@@ -28,6 +29,7 @@
 #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_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)
@@ -206,6 +215,8 @@ typedef struct _FILE_ID_BOTH_DIR_INFORMATION
 #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
 
@@ -574,7 +585,10 @@ typedef struct _PEB
   BYTE Reserved2[9];
   PVOID LoaderData;
   PRTL_USER_PROCESS_PARAMETERS ProcessParameters;
-  BYTE Reserved3[448];
+  BYTE Reserved3[4];
+  PVOID ProcessHeap;
+  PRTL_CRITICAL_SECTION FastPebLock;
+  BYTE Reserved4[436];
   ULONG SessionId;
 } PEB, *PPEB;
 
@@ -586,6 +600,22 @@ typedef struct _TEB
   /* 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
 {
   NTSTATUS ExitStatus;
@@ -742,14 +772,17 @@ typedef struct _FILE_FS_ATTRIBUTE_INFORMATION
   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
 {
@@ -841,6 +874,9 @@ 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
@@ -860,20 +896,105 @@ 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,
@@ -888,6 +1009,8 @@ extern "C"
                                  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,
@@ -896,9 +1019,13 @@ extern "C"
   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,
@@ -912,11 +1039,17 @@ extern "C"
   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,
@@ -935,6 +1068,10 @@ extern "C"
                                         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,
@@ -944,6 +1081,11 @@ extern "C"
 
   NTSTATUS NTAPI NtQuerySecurityObject (HANDLE, SECURITY_INFORMATION,
                                        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 *,
@@ -956,44 +1098,105 @@ extern "C"
   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);
-  VOID NTAPI RtlAcquirePebLock ();
   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,
@@ -1001,7 +1204,10 @@ extern "C"
   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. */
@@ -1098,5 +1304,18 @@ extern "C"
     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*/
This page took 0.035944 seconds and 5 git commands to generate.