diff --git a/include/freerdp/channels/rdpdr.h b/include/freerdp/channels/rdpdr.h index 2d7f6401e..5ed9f7dfc 100644 --- a/include/freerdp/channels/rdpdr.h +++ b/include/freerdp/channels/rdpdr.h @@ -280,50 +280,6 @@ enum FILE_FS_DEVICE_FLAG FILE_DEVICE_SECURE_OPEN = 0x00000100 }; -enum FILE_INFORMATION_CLASS -{ - FileDirectoryInformation = 1, - FileFullDirectoryInformation, - FileBothDirectoryInformation, - FileBasicInformation, - FileStandardInformation, - FileInternalInformation, - FileEaInformation, - FileAccessInformation, - FileNameInformation, - FileRenameInformation, - FileLinkInformation, - FileNamesInformation, - FileDispositionInformation, - FilePositionInformation, - FileFullEaInformation, - FileModeInformation, - FileAlignmentInformation, - FileAllInformation, - FileAllocationInformation, - FileEndOfFileInformation, - FileAlternateNameInformation, - FileStreamInformation, - FilePipeInformation, - FilePipeLocalInformation, - FilePipeRemoteInformation, - FileMailslotQueryInformation, - FileMailslotSetInformation, - FileCompressionInformation, - FileObjectIdInformation, - FileUnknownInformation1, - FileMoveClusterInformation, - FileQuotaInformation, - FileReparsePointInformation, - FileNetworkOpenInformation, - FileAttributeTagInformation, - FileTrackingInformation, - FileIdBothDirectoryInformation, - FileIdFullDirectoryInformation, - FileValidDataLengthInformation, - FileShortNameInformation -}; - enum FILE_FS_INFORMATION_CLASS { FileFsVolumeInformation = 1, diff --git a/winpr/include/winpr/credui.h b/winpr/include/winpr/credui.h index b4277906e..5ad1c28d7 100644 --- a/winpr/include/winpr/credui.h +++ b/winpr/include/winpr/credui.h @@ -23,6 +23,7 @@ #include #include +#include #include #include #include diff --git a/winpr/include/winpr/nt.h b/winpr/include/winpr/nt.h index 6664576bb..1dc82e224 100644 --- a/winpr/include/winpr/nt.h +++ b/winpr/include/winpr/nt.h @@ -87,6 +87,29 @@ #endif +/* Defined in wincred.h, do not redefine */ + +#ifdef _WIN32 + +#include + +#else + +#define STATUS_LOGON_FAILURE ((NTSTATUS)0xC000006DL) +#define STATUS_WRONG_PASSWORD ((NTSTATUS)0xC000006AL) +#define STATUS_PASSWORD_EXPIRED ((NTSTATUS)0xC0000071L) +#define STATUS_PASSWORD_MUST_CHANGE ((NTSTATUS)0xC0000224L) +#define STATUS_ACCESS_DENIED ((NTSTATUS)0xC0000022L) +#define STATUS_DOWNGRADE_DETECTED ((NTSTATUS)0xC0000388L) +#define STATUS_AUTHENTICATION_FIREWALL_FAILED ((NTSTATUS)0xC0000413L) +#define STATUS_ACCOUNT_DISABLED ((NTSTATUS)0xC0000072L) +#define STATUS_ACCOUNT_RESTRICTION ((NTSTATUS)0xC000006EL) +#define STATUS_ACCOUNT_LOCKED_OUT ((NTSTATUS)0xC0000234L) +#define STATUS_ACCOUNT_EXPIRED ((NTSTATUS)0xC0000193L) +#define STATUS_LOGON_TYPE_NOT_GRANTED ((NTSTATUS)0xC000015BL) + +#endif + #define FACILITY_DEBUGGER 0x1 #define FACILITY_RPC_RUNTIME 0x2 #define FACILITY_RPC_STUBS 0x3 @@ -309,7 +332,7 @@ #define STATUS_INVALID_VIEW_SIZE ((NTSTATUS)0xC000001F) #define STATUS_INVALID_FILE_FOR_SECTION ((NTSTATUS)0xC0000020) #define STATUS_ALREADY_COMMITTED ((NTSTATUS)0xC0000021) -#define STATUS_ACCESS_DENIED ((NTSTATUS)0xC0000022) +//#define STATUS_ACCESS_DENIED ((NTSTATUS)0xC0000022) #define STATUS_BUFFER_TOO_SMALL ((NTSTATUS)0xC0000023) #define STATUS_OBJECT_TYPE_MISMATCH ((NTSTATUS)0xC0000024) //#define STATUS_NONCONTINUABLE_EXCEPTION ((NTSTATUS)0xC0000025) @@ -380,15 +403,15 @@ #define STATUS_MEMBER_IN_GROUP ((NTSTATUS)0xC0000067) #define STATUS_MEMBER_NOT_IN_GROUP ((NTSTATUS)0xC0000068) #define STATUS_LAST_ADMIN ((NTSTATUS)0xC0000069) -#define STATUS_WRONG_PASSWORD ((NTSTATUS)0xC000006A) +//#define STATUS_WRONG_PASSWORD ((NTSTATUS)0xC000006A) #define STATUS_ILL_FORMED_PASSWORD ((NTSTATUS)0xC000006B) #define STATUS_PASSWORD_RESTRICTION ((NTSTATUS)0xC000006C) -#define STATUS_LOGON_FAILURE ((NTSTATUS)0xC000006D) -#define STATUS_ACCOUNT_RESTRICTION ((NTSTATUS)0xC000006E) +//#define STATUS_LOGON_FAILURE ((NTSTATUS)0xC000006D) +//#define STATUS_ACCOUNT_RESTRICTION ((NTSTATUS)0xC000006E) #define STATUS_INVALID_LOGON_HOURS ((NTSTATUS)0xC000006F) #define STATUS_INVALID_WORKSTATION ((NTSTATUS)0xC0000070) -#define STATUS_PASSWORD_EXPIRED ((NTSTATUS)0xC0000071) -#define STATUS_ACCOUNT_DISABLED ((NTSTATUS)0xC0000072) +//#define STATUS_PASSWORD_EXPIRED ((NTSTATUS)0xC0000071) +//#define STATUS_ACCOUNT_DISABLED ((NTSTATUS)0xC0000072) #define STATUS_NONE_MAPPED ((NTSTATUS)0xC0000073) #define STATUS_TOO_MANY_LUIDS_REQUESTED ((NTSTATUS)0xC0000074) #define STATUS_LUIDS_EXHAUSTED ((NTSTATUS)0xC0000075) @@ -621,7 +644,7 @@ #define STATUS_INTERNAL_DB_ERROR ((NTSTATUS)0xC0000158) #define STATUS_FULLSCREEN_MODE ((NTSTATUS)0xC0000159) #define STATUS_TOO_MANY_CONTEXT_IDS ((NTSTATUS)0xC000015A) -#define STATUS_LOGON_TYPE_NOT_GRANTED ((NTSTATUS)0xC000015B) +//#define STATUS_LOGON_TYPE_NOT_GRANTED ((NTSTATUS)0xC000015B) #define STATUS_NOT_REGISTRY_FILE ((NTSTATUS)0xC000015C) #define STATUS_NT_CROSS_ENCRYPTION_REQUIRED ((NTSTATUS)0xC000015D) #define STATUS_DOMAIN_CTRLR_CONFIG_ERROR ((NTSTATUS)0xC000015E) @@ -674,7 +697,7 @@ #define STATUS_TRUST_FAILURE ((NTSTATUS)0xC0000190) #define STATUS_MUTANT_LIMIT_EXCEEDED ((NTSTATUS)0xC0000191) #define STATUS_NETLOGON_NOT_STARTED ((NTSTATUS)0xC0000192) -#define STATUS_ACCOUNT_EXPIRED ((NTSTATUS)0xC0000193) +//#define STATUS_ACCOUNT_EXPIRED ((NTSTATUS)0xC0000193) #define STATUS_POSSIBLE_DEADLOCK ((NTSTATUS)0xC0000194) #define STATUS_NETWORK_CREDENTIAL_CONFLICT ((NTSTATUS)0xC0000195) #define STATUS_REMOTE_SESSION_LIMIT ((NTSTATUS)0xC0000196) @@ -718,7 +741,7 @@ #define STATUS_IMAGE_CHECKSUM_MISMATCH ((NTSTATUS)0xC0000221) #define STATUS_LOST_WRITEBEHIND_DATA ((NTSTATUS)0xC0000222) #define STATUS_CLIENT_SERVER_PARAMETERS_INVALID ((NTSTATUS)0xC0000223) -#define STATUS_PASSWORD_MUST_CHANGE ((NTSTATUS)0xC0000224) +//#define STATUS_PASSWORD_MUST_CHANGE ((NTSTATUS)0xC0000224) #define STATUS_NOT_FOUND ((NTSTATUS)0xC0000225) #define STATUS_NOT_TINY_STREAM ((NTSTATUS)0xC0000226) #define STATUS_RECOVERY_FAILURE ((NTSTATUS)0xC0000227) @@ -734,7 +757,7 @@ #define STATUS_MARSHALL_OVERFLOW ((NTSTATUS)0xC0000231) #define STATUS_INVALID_VARIANT ((NTSTATUS)0xC0000232) #define STATUS_DOMAIN_CONTROLLER_NOT_FOUND ((NTSTATUS)0xC0000233) -#define STATUS_ACCOUNT_LOCKED_OUT ((NTSTATUS)0xC0000234) +//#define STATUS_ACCOUNT_LOCKED_OUT ((NTSTATUS)0xC0000234) #define STATUS_HANDLE_NOT_CLOSABLE ((NTSTATUS)0xC0000235) #define STATUS_CONNECTION_REFUSED ((NTSTATUS)0xC0000236) #define STATUS_GRACEFUL_DISCONNECT ((NTSTATUS)0xC0000237) @@ -968,7 +991,7 @@ #define STATUS_SMARTCARD_NO_CERTIFICATE ((NTSTATUS)0xC0000385) #define STATUS_SMARTCARD_NO_KEYSET ((NTSTATUS)0xC0000386) #define STATUS_SMARTCARD_IO_ERROR ((NTSTATUS)0xC0000387) -#define STATUS_DOWNGRADE_DETECTED ((NTSTATUS)0xC0000388) +//#define STATUS_DOWNGRADE_DETECTED ((NTSTATUS)0xC0000388) #define STATUS_SMARTCARD_CERT_REVOKED ((NTSTATUS)0xC0000389) #define STATUS_ISSUING_CA_UNTRUSTED ((NTSTATUS)0xC000038A) #define STATUS_REVOCATION_OFFLINE_C ((NTSTATUS)0xC000038B) @@ -994,7 +1017,7 @@ #define STATUS_PARAMETER_QUOTA_EXCEEDED ((NTSTATUS)0xC0000410) #define STATUS_HIBERNATION_FAILURE ((NTSTATUS)0xC0000411) #define STATUS_DELAY_LOAD_FAILED ((NTSTATUS)0xC0000412) -#define STATUS_AUTHENTICATION_FIREWALL_FAILED ((NTSTATUS)0xC0000413) +//#define STATUS_AUTHENTICATION_FIREWALL_FAILED ((NTSTATUS)0xC0000413) #define STATUS_VDM_DISALLOWED ((NTSTATUS)0xC0000414) #define STATUS_HUNG_DISPLAY_DRIVER_THREAD ((NTSTATUS)0xC0000415) //#define STATUS_INVALID_CRUNTIME_PARAMETER ((NTSTATUS)0xC0000417) @@ -1246,6 +1269,71 @@ /* Defined in winternl.h, always define since we do not include this header */ +#ifdef _WIN32 + +/** + * winternl.h contains an incomplete definition of enum FILE_INFORMATION_CLASS + * avoid conflict by prefixing the winternl.h definition by _WINTERNL_ and then + * make a complete definition of enum FILE_INFORMATION_CLASS ourselves. + * + * For more information, refer to [MS-FSCC]: File System Control Codes: + * http://msdn.microsoft.com/en-us/library/cc231987.aspx + */ + +#define _FILE_INFORMATION_CLASS _WINTERNL_FILE_INFORMATION_CLASS +#define FileDirectoryInformation _WINTERNL_FileDirectoryInformation + +#include + +#undef _FILE_INFORMATION_CLASS +#undef FileDirectoryInformation + +enum FILE_INFORMATION_CLASS +{ + FileDirectoryInformation = 1, + FileFullDirectoryInformation, + FileBothDirectoryInformation, + FileBasicInformation, + FileStandardInformation, + FileInternalInformation, + FileEaInformation, + FileAccessInformation, + FileNameInformation, + FileRenameInformation, + FileLinkInformation, + FileNamesInformation, + FileDispositionInformation, + FilePositionInformation, + FileFullEaInformation, + FileModeInformation, + FileAlignmentInformation, + FileAllInformation, + FileAllocationInformation, + FileEndOfFileInformation, + FileAlternateNameInformation, + FileStreamInformation, + FilePipeInformation, + FilePipeLocalInformation, + FilePipeRemoteInformation, + FileMailslotQueryInformation, + FileMailslotSetInformation, + FileCompressionInformation, + FileObjectIdInformation, + FileUnknownInformation1, + FileMoveClusterInformation, + FileQuotaInformation, + FileReparsePointInformation, + FileNetworkOpenInformation, + FileAttributeTagInformation, + FileTrackingInformation, + FileIdBothDirectoryInformation, + FileIdFullDirectoryInformation, + FileValidDataLengthInformation, + FileShortNameInformation +}; + +#else + #define FILE_SUPERSEDE 0x00000000 #define FILE_OPEN 0x00000001 #define FILE_CREATE 0x00000002 @@ -1293,7 +1381,63 @@ #define FILE_EXISTS 0x00000004 #define FILE_DOES_NOT_EXIST 0x00000005 -#ifndef _WIN32 +typedef CONST char *PCSZ; + +typedef struct _STRING +{ + USHORT Length; + USHORT MaximumLength; + PCHAR Buffer; +} STRING; +typedef STRING *PSTRING; + +typedef STRING ANSI_STRING; +typedef PSTRING PANSI_STRING; +typedef PSTRING PCANSI_STRING; + +typedef STRING OEM_STRING; +typedef PSTRING POEM_STRING; +typedef CONST STRING* PCOEM_STRING; + +typedef struct _LSA_UNICODE_STRING +{ + USHORT Length; + USHORT MaximumLength; + PWSTR Buffer; +} LSA_UNICODE_STRING, *PLSA_UNICODE_STRING, UNICODE_STRING, *PUNICODE_STRING; + +#define OBJ_INHERIT 0x00000002L +#define OBJ_PERMANENT 0x00000010L +#define OBJ_EXCLUSIVE 0x00000020L +#define OBJ_CASE_INSENSITIVE 0x00000040L +#define OBJ_OPENIF 0x00000080L +#define OBJ_OPENLINK 0x00000100L +#define OBJ_KERNEL_HANDLE 0x00000200L +#define OBJ_FORCE_ACCESS_CHECK 0x00000400L +#define OBJ_VALID_ATTRIBUTES 0x000007F2L + +typedef struct _OBJECT_ATTRIBUTES +{ + ULONG Length; + HANDLE RootDirectory; + PUNICODE_STRING ObjectName; + ULONG Attributes; + PVOID SecurityDescriptor; + PVOID SecurityQualityOfService; +} OBJECT_ATTRIBUTES; +typedef OBJECT_ATTRIBUTES *POBJECT_ATTRIBUTES; + +typedef struct _IO_STATUS_BLOCK +{ + union + { + NTSTATUS status; + PVOID Pointer; + }; + ULONG_PTR Information; +} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK; + +typedef VOID (*PIO_APC_ROUTINE)(PVOID ApcContext, PIO_STATUS_BLOCK IoStatusBlock, ULONG Reserved); typedef struct _PEB PEB; typedef struct _PEB* PPEB; @@ -1377,64 +1521,6 @@ struct _TEB typedef DWORD ACCESS_MASK; typedef ACCESS_MASK* PACCESS_MASK; -typedef CONST char *PCSZ; - -typedef struct _STRING -{ - USHORT Length; - USHORT MaximumLength; - PCHAR Buffer; -} STRING; -typedef STRING *PSTRING; - -typedef STRING ANSI_STRING; -typedef PSTRING PANSI_STRING; -typedef PSTRING PCANSI_STRING; - -typedef STRING OEM_STRING; -typedef PSTRING POEM_STRING; -typedef CONST STRING* PCOEM_STRING; - -typedef struct _LSA_UNICODE_STRING -{ - USHORT Length; - USHORT MaximumLength; - PWSTR Buffer; -} LSA_UNICODE_STRING, *PLSA_UNICODE_STRING, UNICODE_STRING, *PUNICODE_STRING; - -#define OBJ_INHERIT 0x00000002L -#define OBJ_PERMANENT 0x00000010L -#define OBJ_EXCLUSIVE 0x00000020L -#define OBJ_CASE_INSENSITIVE 0x00000040L -#define OBJ_OPENIF 0x00000080L -#define OBJ_OPENLINK 0x00000100L -#define OBJ_KERNEL_HANDLE 0x00000200L -#define OBJ_FORCE_ACCESS_CHECK 0x00000400L -#define OBJ_VALID_ATTRIBUTES 0x000007F2L - -typedef struct _OBJECT_ATTRIBUTES -{ - ULONG Length; - HANDLE RootDirectory; - PUNICODE_STRING ObjectName; - ULONG Attributes; - PVOID SecurityDescriptor; - PVOID SecurityQualityOfService; -} OBJECT_ATTRIBUTES; -typedef OBJECT_ATTRIBUTES *POBJECT_ATTRIBUTES; - -typedef struct _IO_STATUS_BLOCK -{ - union - { - NTSTATUS status; - PVOID Pointer; - }; - ULONG_PTR Information; -} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK; - -typedef VOID (*PIO_APC_ROUTINE)(PVOID ApcContext, PIO_STATUS_BLOCK IoStatusBlock, ULONG Reserved); - #ifdef __cplusplus extern "C" { #endif diff --git a/winpr/include/winpr/synch.h b/winpr/include/winpr/synch.h index 45373ac00..28d15fa23 100644 --- a/winpr/include/winpr/synch.h +++ b/winpr/include/winpr/synch.h @@ -271,6 +271,12 @@ WINPR_API BOOL CancelWaitableTimer(HANDLE hTimer); #endif +#if ((_WIN32) && (_WIN32_WINNT < 0x0600)) + +WINPR_API BOOL InitializeCriticalSectionEx(LPCRITICAL_SECTION lpCriticalSection, DWORD dwSpinCount, DWORD Flags); + +#endif + /* Extended API */ WINPR_API VOID USleep(DWORD dwMicroseconds); diff --git a/winpr/libwinpr/nt/test/TestNtCreateFile.c b/winpr/libwinpr/nt/test/TestNtCreateFile.c index 4dcb876ae..571f733a0 100644 --- a/winpr/libwinpr/nt/test/TestNtCreateFile.c +++ b/winpr/libwinpr/nt/test/TestNtCreateFile.c @@ -5,6 +5,7 @@ int TestNtCreateFile(int argc, char* argv[]) { +#ifndef _WIN32 HANDLE handle; NTSTATUS ntstatus; ULONG CreateOptions; @@ -25,6 +26,7 @@ int TestNtCreateFile(int argc, char* argv[]) ntstatus = NtCreateFile(&handle, DesiredAccess, &attributes, &ioStatusBlock, 0, 0, 0, CreateOptions, 0, 0, 0); RtlFreeUnicodeString(&uString); +#endif return 0; } diff --git a/winpr/libwinpr/nt/test/TestNtCurrentTeb.c b/winpr/libwinpr/nt/test/TestNtCurrentTeb.c index 43f46a77f..719042c70 100644 --- a/winpr/libwinpr/nt/test/TestNtCurrentTeb.c +++ b/winpr/libwinpr/nt/test/TestNtCurrentTeb.c @@ -5,6 +5,7 @@ int TestNtCurrentTeb(int argc, char* argv[]) { +#ifndef _WIN32 PTEB teb; teb = NtCurrentTeb(); @@ -14,7 +15,7 @@ int TestNtCurrentTeb(int argc, char* argv[]) printf("NtCurrentTeb() returned NULL\n"); return -1; } - +#endif return 0; } diff --git a/winpr/libwinpr/synch/critical.c b/winpr/libwinpr/synch/critical.c index a547bd24e..ff419a55f 100644 --- a/winpr/libwinpr/synch/critical.c +++ b/winpr/libwinpr/synch/critical.c @@ -22,6 +22,7 @@ #include "config.h" #endif +#include #include #include #include @@ -233,3 +234,49 @@ VOID DeleteCriticalSection(LPCRITICAL_SECTION lpCriticalSection) } #endif + +#if ((_WIN32) && (_WIN32_WINNT < 0x0600)) + +typedef BOOL (*PINITIALIZE_CRITICAL_SECTION_EX_FN)(LPCRITICAL_SECTION lpCriticalSection, DWORD dwSpinCount, DWORD Flags); + +static HMODULE g_KERNEL32_Library = NULL; +static BOOL g_InitializeCriticalSectionEx_Detected = FALSE; +static BOOL g_InitializeCriticalSectionEx_Available = FALSE; +static PINITIALIZE_CRITICAL_SECTION_EX_FN g_pInitializeCriticalSectionEx = NULL; + +BOOL InitializeCriticalSectionEx(LPCRITICAL_SECTION lpCriticalSection, DWORD dwSpinCount, DWORD Flags) +{ + if (!g_InitializeCriticalSectionEx_Detected) + { + g_KERNEL32_Library = LoadLibrary(_T("kernel32.dll")); + + if (g_KERNEL32_Library) + { + g_pInitializeCriticalSectionEx = (PINITIALIZE_CRITICAL_SECTION_EX_FN) + GetProcAddress(g_KERNEL32_Library, "InitializeCriticalSectionEx"); + + g_InitializeCriticalSectionEx_Available = (g_pInitializeCriticalSectionEx) ? TRUE : FALSE; + } + else + { + g_InitializeCriticalSectionEx_Available = FALSE; + } + + g_InitializeCriticalSectionEx_Detected = TRUE; + } + + if (g_InitializeCriticalSectionEx_Available) + { + /* Vista and later */ + return g_pInitializeCriticalSectionEx(lpCriticalSection, dwSpinCount, Flags); + } + else + { + /* Windows XP */ + InitializeCriticalSection(lpCriticalSection); + } + + return TRUE; +} + +#endif diff --git a/winpr/libwinpr/synch/test/TestSynchCritical.c b/winpr/libwinpr/synch/test/TestSynchCritical.c index 6ec5ca284..854e24215 100644 --- a/winpr/libwinpr/synch/test/TestSynchCritical.c +++ b/winpr/libwinpr/synch/test/TestSynchCritical.c @@ -7,7 +7,6 @@ #include #include - #define TEST_SYNC_CRITICAL_TEST1_RUNTIME_MS 500 #define TEST_SYNC_CRITICAL_TEST1_RUNS 4