diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 07305fb87..616e58190 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,56 @@ +2011-03-31 Corinna Vinschen + + * ntdll.h: Allow usage from plain C code. + (FSCTL_PIPE_IMPERSONATE): Define. + (enum _THREAD_INFORMATION_CLASS): Define. + (RTL_QUERY_REGISTRY_xxx): Define. + (RTL_REGISTRY_xxx): Define. + (PRTL_QUERY_REGISTRY_ROUTINE): Define. + (struct _RTL_QUERY_REGISTRY_TABLE): Define. + (enum _KEY_VALUE_INFORMATION_CLASS): Define. + (struct _KEY_VALUE_PARTIAL_INFORMATION): Define. + (NtAccessCheck): Declare. + (NtAllocateLocallyUniqueId): Declare. + (NtCreateKey): Declare. + (NtDuplicateToken): Declare. + (NtLoadKey): Declare. + (NtOpenKey): Declare. + (NtOpenProcessToken): Declare. + (NtOpenThreadToken): Declare. + (NtPrivilegeCheck): Declare. + (NtQueryInformationToken): Declare. + (NtQueryValueKey): Declare. + (NtSetInformationThread): Declare. + (NtSetInformationToken): Declare. + (NtSetValueKey): Declare. + (RtlAbsoluteToSelfRelativeSD): Declare. + (RtlAddAccessAllowedAce): Declare. + (RtlAddAccessDeniedAce): Declare. + (RtlAddAce): Declare. + (RtlCheckRegistryKey): Declare. + (RtlCopySid): Declare. + (RtlCreateAcl): Declare. + (RtlCreateRegistryKey): Declare. + (RtlCreateSecurityDescriptor): Declare. + (RtlEqualPrefixSid): Declare. + (RtlEqualSid): Declare. + (RtlFirstFreeAce): Declare. + (RtlGetAce): Declare. + (RtlGetDaclSecurityDescriptor): Declare. + (RtlGetGroupSecurityDescriptor): Declare. + (RtlGetOwnerSecurityDescriptor): Declare. + (RtlIdentifierAuthoritySid): Declare. + (RtlInitializeSid): Declare. + (RtlLengthSid): Declare. + (RtlQueryRegistryValues): Declare. + (RtlSetControlSecurityDescriptor): Declare. + (RtlSetDaclSecurityDescriptor): Declare. + (RtlSetGroupSecurityDescriptor): Declare. + (RtlSetOwnerSecurityDescriptor): Declare. + (RtlSubAuthorityCountSid): Declare. + (RtlSubAuthoritySid): Declare. + (RtlWriteRegistryValue): Declare. + 2011-03-31 Corinna Vinschen * uinfo.cc (cygheap_user::init): Don't call GetUserName. Fetch username diff --git a/winsup/cygwin/ntdll.h b/winsup/cygwin/ntdll.h index 5f7f5cff4..757291439 100644 --- a/winsup/cygwin/ntdll.h +++ b/winsup/cygwin/ntdll.h @@ -873,6 +873,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 @@ -892,12 +895,65 @@ typedef enum _EVENT_INFORMATION_CLASS EventBasicInformation = 0 } EVENT_INFORMATION_CLASS, *PEVENT_INFORMATION_CLASS; +typedef enum _THREAD_INFORMATION_CLASS +{ + ThreadImpersonationToken = 5 +} THREAD_INFORMATION_CLASS, *PTHREAD_INFORMATION_CLASS; + +#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; + /* 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 @@ -905,13 +961,20 @@ static KUSER_SHARED_DATA &SharedUserData 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 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, @@ -934,9 +997,12 @@ 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 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, @@ -950,13 +1016,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, @@ -975,6 +1045,8 @@ extern "C" ULONG, FILE_INFORMATION_CLASS); NTSTATUS NTAPI NtQueryInformationProcess (HANDLE, PROCESSINFOCLASS, 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, @@ -986,6 +1058,9 @@ extern "C" 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 *, @@ -998,50 +1073,93 @@ 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 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); VOID NTAPI RtlCopyUnicodeString (PUNICODE_STRING, PUNICODE_STRING); + NTSTATUS NTAPI RtlCopySid (ULONG, PSID, PSID); + 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 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); 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 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, @@ -1049,7 +1167,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. */ @@ -1147,4 +1268,5 @@ extern "C" return NtSetInformationFile(h, &io, &fbi, sizeof fbi, FileBasicInformation); } } +#endif #endif /*_NTDLL_H*/