2012-08-29 Yaakov Selkowitz * ntdef.h (_OBJECT_ATTRIBUTES): Guard against duplicate declaration. * winnt.h (DECLSPEC_IMPORT): Do not redefine. (FILE_SUPERSEDE...FILE_MAXIMUM_DISPOSITION): Copy from ntdef.h. (FILE_DIRECTORY_FILE...FILE_OPEN_FOR_FREE_SPACE_QUERY): Ditto. (FILE_SHARE_VALID_FLAGS): Ditto. * winternl.h (_UNICODE_STRING): Guard against duplicate declaration. (_STRING): Ditto. (_OBJECT_ATTRIBUTES): Ditto. (_FILE_LINK_INFORMATION): Copy from ddk/ntifs.h. Index: include/ntdef.h =================================================================== --- include/ntdef.h (revision 5375) +++ include/ntdef.h (working copy) @@ -509,6 +509,8 @@ /* Object Attributes */ +#ifndef __OBJECT_ATTRIBUTES_DEFINED +#define __OBJECT_ATTRIBUTES_DEFINED typedef struct _OBJECT_ATTRIBUTES { ULONG Length; HANDLE RootDirectory; @@ -517,6 +519,7 @@ PVOID SecurityDescriptor; PVOID SecurityQualityOfService; } OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES; +#endif typedef CONST OBJECT_ATTRIBUTES *PCOBJECT_ATTRIBUTES; /* Values for the Attributes member */ Index: include/winnt.h =================================================================== --- include/winnt.h (revision 5375) +++ include/winnt.h (working copy) @@ -88,11 +88,13 @@ #include +#ifndef DECLSPEC_IMPORT #if defined(_X86_) || defined(__ia64__) || defined(__x86_64) #define DECLSPEC_IMPORT __declspec(dllimport) #else #define DECLSPEC_IMPORT #endif +#endif #ifndef DECLSPEC_NORETURN #define DECLSPEC_NORETURN __declspec(noreturn) @@ -3813,9 +3815,43 @@ #define FILE_GENERIC_WRITE (STANDARD_RIGHTS_WRITE | FILE_WRITE_DATA | FILE_WRITE_ATTRIBUTES | FILE_WRITE_EA | FILE_APPEND_DATA | SYNCHRONIZE) #define FILE_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE | FILE_READ_ATTRIBUTES | FILE_EXECUTE | SYNCHRONIZE) +#define FILE_SUPERSEDE 0x00000000 +#define FILE_OPEN 0x00000001 +#define FILE_CREATE 0x00000002 +#define FILE_OPEN_IF 0x00000003 +#define FILE_OVERWRITE 0x00000004 +#define FILE_OVERWRITE_IF 0x00000005 +#define FILE_MAXIMUM_DISPOSITION 0x00000005 + +#define FILE_DIRECTORY_FILE 0x00000001 +#define FILE_WRITE_THROUGH 0x00000002 +#define FILE_SEQUENTIAL_ONLY 0x00000004 +#define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008 +#define FILE_SYNCHRONOUS_IO_ALERT 0x00000010 +#define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020 +#define FILE_NON_DIRECTORY_FILE 0x00000040 +#define FILE_CREATE_TREE_CONNECTION 0x00000080 +#define FILE_COMPLETE_IF_OPLOCKED 0x00000100 +#define FILE_NO_EA_KNOWLEDGE 0x00000200 +#define FILE_OPEN_REMOTE_INSTANCE 0x00000400 +#define FILE_RANDOM_ACCESS 0x00000800 +#define FILE_DELETE_ON_CLOSE 0x00001000 +#define FILE_OPEN_BY_FILE_ID 0x00002000 +#define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000 +#define FILE_NO_COMPRESSION 0x00008000 +#if (NTDDI_VERSION >= NTDDI_WIN7) +#define FILE_OPEN_REQUIRING_OPLOCK 0x00010000 +#define FILE_DISALLOW_EXCLUSIVE 0x00020000 +#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ +#define FILE_RESERVE_OPFILTER 0x00100000 +#define FILE_OPEN_REPARSE_POINT 0x00200000 +#define FILE_OPEN_NO_RECALL 0x00400000 +#define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000 + #define FILE_SHARE_READ 0x00000001 #define FILE_SHARE_WRITE 0x00000002 #define FILE_SHARE_DELETE 0x00000004 +#define FILE_SHARE_VALID_FLAGS 0x00000007 #define FILE_ATTRIBUTE_READONLY 0x00000001 #define FILE_ATTRIBUTE_HIDDEN 0x00000002 #define FILE_ATTRIBUTE_SYSTEM 0x00000004 Index: include/winternl.h =================================================================== --- include/winternl.h (revision 5375) +++ include/winternl.h (working copy) @@ -16,11 +16,14 @@ extern "C" { #endif +#ifndef __UNICODE_STRING_DEFINED +#define __UNICODE_STRING_DEFINED typedef struct _UNICODE_STRING { USHORT Length; USHORT MaximumLength; PWSTR Buffer; } UNICODE_STRING; +#endif typedef struct _PEB_LDR_DATA { BYTE Reserved1[8]; @@ -85,11 +88,14 @@ typedef LONG NTSTATUS; typedef CONST char *PCSZ; +#ifndef __STRING_DEFINED +#define __STRING_DEFINED typedef struct _STRING { USHORT Length; USHORT MaximumLength; PCHAR Buffer; } STRING; +#endif typedef STRING *PSTRING; typedef STRING ANSI_STRING; @@ -102,6 +108,8 @@ typedef UNICODE_STRING *PUNICODE_STRING; typedef const UNICODE_STRING *PCUNICODE_STRING; +#ifndef __OBJECT_ATTRIBUTES_DEFINED +#define __OBJECT_ATTRIBUTES_DEFINED typedef struct _OBJECT_ATTRIBUTES { ULONG Length; #ifdef _WIN64 @@ -116,6 +124,7 @@ PVOID SecurityDescriptor; PVOID SecurityQualityOfService; } OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES; +#endif /* Values for the Attributes member */ #define OBJ_INHERIT 0x00000002 @@ -348,6 +357,13 @@ ACCESS_MASK AccessFlags; } FILE_ACCESS_INFORMATION, *PFILE_ACCESS_INFORMATION; + typedef struct _FILE_LINK_INFORMATION { + BOOLEAN ReplaceIfExists; + HANDLE RootDirectory; + ULONG FileNameLength; + WCHAR FileName[1]; + } FILE_LINK_INFORMATION, *PFILE_LINK_INFORMATION; + typedef struct _FILE_NAME_INFORMATION { ULONG FileNameLength; WCHAR FileName[1];