diff --git a/reactos/dll/win32/kernel32/file/create.c b/reactos/dll/win32/kernel32/file/create.c index 47c3f422969..e7e67769d18 100644 --- a/reactos/dll/win32/kernel32/file/create.c +++ b/reactos/dll/win32/kernel32/file/create.c @@ -14,16 +14,42 @@ /* INCLUDES *****************************************************************/ -/* File contains Vista Semantics */ -#undef _WIN32_WINNT -#define _WIN32_WINNT 0x0600 - #include #define NDEBUG #include "../include/debug.h" +#define SYMLINK_FLAG_RELATIVE 1 + +typedef struct _REPARSE_DATA_BUFFER { + ULONG ReparseTag; + USHORT ReparseDataLength; + USHORT Reserved; + union { + struct { + USHORT SubstituteNameOffset; + USHORT SubstituteNameLength; + USHORT PrintNameOffset; + USHORT PrintNameLength; + ULONG Flags; + WCHAR PathBuffer[1]; + } SymbolicLinkReparseBuffer; + struct { + USHORT SubstituteNameOffset; + USHORT SubstituteNameLength; + USHORT PrintNameOffset; + USHORT PrintNameLength; + WCHAR PathBuffer[1]; + } MountPointReparseBuffer; + struct { + UCHAR DataBuffer[1]; + } GenericReparseBuffer; + }; +} REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER; + +#define REPARSE_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(REPARSE_DATA_BUFFER, GenericReparseBuffer) + /* FUNCTIONS ****************************************************************/ /* @@ -391,13 +417,13 @@ CreateSymbolicLinkW(IN LPCWSTR lpSymlinkFileName, ULONG dwCreateOptions; DWORD dwErr; - if(!lpSymlinkFileName || !lpTargetFileName || (dwFlags | SYMLINK_FLAG_DIRECTORY) != SYMLINK_FLAG_DIRECTORY) + if(!lpSymlinkFileName || !lpTargetFileName || (dwFlags | SYMBOLIC_LINK_FLAG_DIRECTORY) != SYMBOLIC_LINK_FLAG_DIRECTORY) { SetLastError(ERROR_INVALID_PARAMETER); return FALSE; } - if(dwFlags & SYMLINK_FLAG_DIRECTORY) + if(dwFlags & SYMBOLIC_LINK_FLAG_DIRECTORY) dwCreateOptions = FILE_DIRECTORY_FILE; else dwCreateOptions = FILE_NON_DIRECTORY_FILE; @@ -468,8 +494,8 @@ CreateSymbolicLinkW(IN LPCWSTR lpSymlinkFileName, pBufTail = (PBYTE)(pReparseData->SymbolicLinkReparseBuffer.PathBuffer); - pReparseData->ReparseTag = IO_REPARSE_TAG_SYMLINK; - pReparseData->ReparseDataLength = cbReparseData - REPARSE_DATA_BUFFER_HEADER_SIZE; + pReparseData->ReparseTag = (ULONG)IO_REPARSE_TAG_SYMLINK; + pReparseData->ReparseDataLength = (USHORT)cbReparseData - REPARSE_DATA_BUFFER_HEADER_SIZE; pReparseData->Reserved = 0; pReparseData->SymbolicLinkReparseBuffer.SubstituteNameOffset = 0; @@ -478,7 +504,7 @@ CreateSymbolicLinkW(IN LPCWSTR lpSymlinkFileName, RtlCopyMemory(pBufTail, TargetFileName.Buffer, TargetFileName.Length); pReparseData->SymbolicLinkReparseBuffer.PrintNameOffset = pReparseData->SymbolicLinkReparseBuffer.SubstituteNameLength; - pReparseData->SymbolicLinkReparseBuffer.PrintNameLength = cbPrintName; + pReparseData->SymbolicLinkReparseBuffer.PrintNameLength = (USHORT)cbPrintName; pBufTail += pReparseData->SymbolicLinkReparseBuffer.PrintNameOffset; RtlCopyMemory(pBufTail, lpTargetFileName, cbPrintName); @@ -574,13 +600,13 @@ Cleanup: * @implemented */ BOOLEAN -STDCALL +NTAPI CreateSymbolicLinkA(IN LPCSTR lpSymlinkFileName, IN LPCSTR lpTargetFileName, IN DWORD dwFlags) { PWCHAR SymlinkW, TargetW; - BOOL Ret; + BOOLEAN Ret; if(!lpSymlinkFileName || !lpTargetFileName) { diff --git a/reactos/dll/win32/kernel32/file/file.c b/reactos/dll/win32/kernel32/file/file.c index 6bfeb142a26..b5e8b720a79 100644 --- a/reactos/dll/win32/kernel32/file/file.c +++ b/reactos/dll/win32/kernel32/file/file.c @@ -12,10 +12,6 @@ /* INCLUDES *****************************************************************/ -/* File contains Vista Semantics */ -#undef _WIN32_WINNT -#define _WIN32_WINNT 0x0600 - #include #define NDEBUG diff --git a/reactos/dll/win32/kernel32/k32.h b/reactos/dll/win32/kernel32/k32.h index 6922bf94589..6121ac62b7c 100755 --- a/reactos/dll/win32/kernel32/k32.h +++ b/reactos/dll/win32/kernel32/k32.h @@ -12,7 +12,6 @@ /* INCLUDES ******************************************************************/ /* PSDK/NDK Headers */ -#define DBG 1 #define WIN32_NO_STATUS #define _KERNEL32_ #include diff --git a/reactos/dll/win32/kernel32/kernel32.rbuild b/reactos/dll/win32/kernel32/kernel32.rbuild index aa75cabf382..fb4ee6ed9e3 100644 --- a/reactos/dll/win32/kernel32/kernel32.rbuild +++ b/reactos/dll/win32/kernel32/kernel32.rbuild @@ -80,7 +80,7 @@ cmdline.c - create.c + procsup.c job.c proc.c session.c @@ -125,7 +125,6 @@ 0x0500 kernel32_base pseh - intrlck ntdll -lgcc -nostartfiles diff --git a/reactos/dll/win32/kernel32/misc/console.c b/reactos/dll/win32/kernel32/misc/console.c index 783585eba17..22b9215d55e 100644 --- a/reactos/dll/win32/kernel32/misc/console.c +++ b/reactos/dll/win32/kernel32/misc/console.c @@ -14,10 +14,6 @@ /* INCLUDES ******************************************************************/ -/* File contains Vista Semantics */ -#undef _WIN32_WINNT -#define _WIN32_WINNT 0x0600 - #include #define NDEBUG diff --git a/reactos/dll/win32/kernel32/misc/dllmain.c b/reactos/dll/win32/kernel32/misc/dllmain.c index e3ce2f49f60..e91c44f4a7e 100644 --- a/reactos/dll/win32/kernel32/misc/dllmain.c +++ b/reactos/dll/win32/kernel32/misc/dllmain.c @@ -323,9 +323,10 @@ DllMain(HANDLE hDll, if (hDll == (HANDLE)0x7c800000) { PULONG Eip; - Eip = (PULONG)*(PULONG)NtCurrentTeb()->Tib.ExceptionList + - 0x9 + - FIELD_OFFSET(CONTEXT, Eip) / sizeof(ULONG); + __debugbreak(); + Eip = (PULONG)*(PULONG)*(PULONG)NtCurrentTeb()->Tib.ExceptionList + + 0x9 + + FIELD_OFFSET(CONTEXT, Eip) / sizeof(ULONG); *Eip = (ULONG)BaseProcessStartThunk; } } @@ -466,4 +467,43 @@ DllMain(HANDLE hDll, return TRUE; } +LONG +WINAPI +InterlockedIncrement(IN OUT LONG volatile *lpAddend) +{ + return _InterlockedIncrement(lpAddend); +} + +LONG +WINAPI +InterlockedDecrement(IN OUT LONG volatile *lpAddend) +{ + return _InterlockedDecrement(lpAddend); +} + +LONG +WINAPI +InterlockedExchange(IN OUT LONG volatile *Target, + IN LONG Value) +{ + return _InterlockedExchange(Target, Value); +} + +LONG +WINAPI +InterlockedExchangeAdd(IN OUT LONG volatile *Addend, + IN LONG Value) +{ + return _InterlockedExchangeAdd(Addend, Value); +} + +LONG +WINAPI +InterlockedCompareExchange(IN OUT LONG volatile *Destination, + IN LONG Exchange, + IN LONG Comperand) +{ + return _InterlockedCompareExchange(Destination, Exchange, Comperand); +} + /* EOF */ diff --git a/reactos/dll/win32/kernel32/misc/recovery.c b/reactos/dll/win32/kernel32/misc/recovery.c index 105c340b501..eb5500d9b5d 100644 --- a/reactos/dll/win32/kernel32/misc/recovery.c +++ b/reactos/dll/win32/kernel32/misc/recovery.c @@ -10,10 +10,6 @@ * 10/28/2005 Created stubs (w3) */ -/* File contains Vista Semantics */ -#undef _WIN32_WINNT -#define _WIN32_WINNT 0x0600 - #include #define NDEBUG diff --git a/reactos/dll/win32/kernel32/misc/stubs.c b/reactos/dll/win32/kernel32/misc/stubs.c index dd70dcd6f01..8a6c29c5814 100644 --- a/reactos/dll/win32/kernel32/misc/stubs.c +++ b/reactos/dll/win32/kernel32/misc/stubs.c @@ -45,10 +45,16 @@ BaseFlushAppcompatCache(VOID) /* * @unimplemented */ -VOID STDCALL -BaseCheckAppcompatCache(ULONG Unknown1, ULONG Unknown2, ULONG Unknown3, ULONG Unknown4) +BOOL +WINAPI +BaseCheckAppcompatCache(ULONG Unknown1, + ULONG Unknown2, + ULONG Unknown3, + PULONG Unknown4) { STUB; + if (Unknown4) *Unknown4 = 0; + return TRUE; } /* diff --git a/reactos/dll/win32/kernel32/process/create.c b/reactos/dll/win32/kernel32/process/procsup.c similarity index 100% rename from reactos/dll/win32/kernel32/process/create.c rename to reactos/dll/win32/kernel32/process/procsup.c diff --git a/reactos/dll/win32/kernel32/synch/condvar.c b/reactos/dll/win32/kernel32/synch/condvar.c index f5de7c0093e..62bb676bcfb 100644 --- a/reactos/dll/win32/kernel32/synch/condvar.c +++ b/reactos/dll/win32/kernel32/synch/condvar.c @@ -4,10 +4,6 @@ * PROGRAMMER: Thomas Weidenmueller */ -/* File contains Vista Semantics */ -#undef _WIN32_WINNT -#define _WIN32_WINNT 0x0600 - #include #define NDEBUG diff --git a/reactos/dll/win32/kernel32/synch/event.c b/reactos/dll/win32/kernel32/synch/event.c index 43c1ca978a7..b629d087ff7 100644 --- a/reactos/dll/win32/kernel32/synch/event.c +++ b/reactos/dll/win32/kernel32/synch/event.c @@ -8,10 +8,6 @@ /* INCLUDES *****************************************************************/ -/* File contains Vista Semantics */ -#undef _WIN32_WINNT -#define _WIN32_WINNT 0x0600 - #include #define NDEBUG diff --git a/reactos/dll/win32/kernel32/synch/mutex.c b/reactos/dll/win32/kernel32/synch/mutex.c index a7bd3dbb44d..ec4e8c86c34 100644 --- a/reactos/dll/win32/kernel32/synch/mutex.c +++ b/reactos/dll/win32/kernel32/synch/mutex.c @@ -8,10 +8,6 @@ /* INCLUDES *****************************************************************/ -/* File contains Vista Semantics */ -#undef _WIN32_WINNT -#define _WIN32_WINNT 0x0600 - #include #define NDEBUG diff --git a/reactos/dll/win32/kernel32/synch/sem.c b/reactos/dll/win32/kernel32/synch/sem.c index 57b942349da..89cf6149b14 100644 --- a/reactos/dll/win32/kernel32/synch/sem.c +++ b/reactos/dll/win32/kernel32/synch/sem.c @@ -8,10 +8,6 @@ /* INCLUDES *****************************************************************/ -/* File contains Vista Semantics */ -#undef _WIN32_WINNT -#define _WIN32_WINNT 0x0600 - #include #define NDEBUG diff --git a/reactos/dll/win32/kernel32/synch/timer.c b/reactos/dll/win32/kernel32/synch/timer.c index 4170eeabb55..f4610a315e3 100644 --- a/reactos/dll/win32/kernel32/synch/timer.c +++ b/reactos/dll/win32/kernel32/synch/timer.c @@ -8,10 +8,6 @@ /* INCLUDES *****************************************************************/ -/* File contains Vista Semantics */ -//#undef _WIN32_WINNT -//#define _WIN32_WINNT 0x0600 - #include #define NDEBUG diff --git a/reactos/dll/win32/kernel32/synch/wait.c b/reactos/dll/win32/kernel32/synch/wait.c index 42939517425..af61473bcc3 100644 --- a/reactos/dll/win32/kernel32/synch/wait.c +++ b/reactos/dll/win32/kernel32/synch/wait.c @@ -8,10 +8,6 @@ /* INCLUDES *****************************************************************/ -/* File contains Vista Semantics */ -#undef _WIN32_WINNT -#define _WIN32_WINNT 0x0600 - #include #define NDEBUG diff --git a/reactos/include/ndk/ntndk.h b/reactos/include/ndk/ntndk.h index 30bc239ed9a..0547f9f944b 100644 --- a/reactos/include/ndk/ntndk.h +++ b/reactos/include/ndk/ntndk.h @@ -38,6 +38,7 @@ Author: #include // C Standard Header #include // C Standard Header #include // General Definitions +#include // Use Inlined Intrinsics // // Type Headers @@ -81,6 +82,9 @@ Author: #include // Security Subsystem Functions #include // User-Mode NT Library Functions +// +// Assembly Support +// #include // Assembly Offsets #ifdef _MSC_VER diff --git a/reactos/include/psdk/intrin.h b/reactos/include/psdk/intrin.h index b3eb1592baf..7955ac45c99 100644 --- a/reactos/include/psdk/intrin.h +++ b/reactos/include/psdk/intrin.h @@ -82,7 +82,7 @@ #if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) > 40100 #define _ReadWriteBarrier() __sync_synchronize() #else -static __inline__ __attribute__((always_inline)) _MemoryBarrier(void) +static void __inline__ __attribute__((always_inline)) _MemoryBarrier(void) { __asm__ __volatile__("" : : : "memory"); } diff --git a/reactos/include/psdk/winbase.h b/reactos/include/psdk/winbase.h index 8562a97caba..ebdca872047 100644 --- a/reactos/include/psdk/winbase.h +++ b/reactos/include/psdk/winbase.h @@ -504,7 +504,7 @@ extern "C" { #define QUERY_ACTCTX_FLAG_ACTCTX_IS_HMODULE 0x00000008 #define QUERY_ACTCTX_FLAG_ACTCTX_IS_ADDRESS 0x00000010 #if (_WIN32_WINNT >= 0x0600) -#define SYMLINK_FLAG_DIRECTORY 0x1 +#define SYMBOLIC_LINK_FLAG_DIRECTORY 0x1 #endif #endif /* (_WIN32_WINNT >= 0x0501) */ #if (_WIN32_WINNT >= 0x0500) @@ -1683,20 +1683,20 @@ VOID WINAPI InitializeSRWLock(PSRWLOCK); #endif #ifndef __INTERLOCKED_DECLARED #define __INTERLOCKED_DECLARED -LONG WINAPI InterlockedCompareExchange(LPLONG,LONG,LONG); +LONG WINAPI InterlockedCompareExchange(IN OUT LONG volatile *,LONG,LONG); /* PVOID WINAPI InterlockedCompareExchangePointer(PVOID*,PVOID,PVOID); */ #define InterlockedCompareExchangePointer(d,e,c) \ (PVOID)InterlockedCompareExchange((LPLONG)(d),(LONG)(e),(LONG)(c)) -LONG WINAPI InterlockedDecrement(LPLONG); -LONG WINAPI InterlockedExchange(LPLONG,LONG); +LONG WINAPI InterlockedDecrement(IN OUT LONG volatile *); +LONG WINAPI InterlockedExchange(IN OUT LONG volatile *,LONG); /* PVOID WINAPI InterlockedExchangePointer(PVOID*,PVOID); */ #define InterlockedExchangePointer(t,v) \ (PVOID)InterlockedExchange((LPLONG)(t),(LONG)(v)) -LONG WINAPI InterlockedExchangeAdd(LPLONG,LONG); +LONG WINAPI InterlockedExchangeAdd(IN OUT LONG volatile *,LONG); #if (_WIN32_WINNT >= 0x0501) PSLIST_ENTRY WINAPI InterlockedFlushSList(PSLIST_HEADER); #endif -LONG WINAPI InterlockedIncrement(LPLONG); +LONG WINAPI InterlockedIncrement(IN OUT LONG volatile *); #if (_WIN32_WINNT >= 0x0501) PSLIST_ENTRY WINAPI InterlockedPopEntrySList(PSLIST_HEADER); PSLIST_ENTRY WINAPI InterlockedPushEntrySList(PSLIST_HEADER,PSLIST_ENTRY); diff --git a/reactos/include/psdk/winnt.h b/reactos/include/psdk/winnt.h index faaa0abe468..885a17602f8 100644 --- a/reactos/include/psdk/winnt.h +++ b/reactos/include/psdk/winnt.h @@ -1598,7 +1598,6 @@ typedef VOID (NTAPI *WORKERCALLBACKFUNC)(PVOID); #define INCREF(x) ((((x)&~N_BTMASK)<>N_TSHIFT)&~N_BTMASK)|((x)&N_BTMASK)) #define TLS_MINIMUM_AVAILABLE 64 -#define REPARSE_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(REPARSE_DATA_BUFFER, GenericReparseBuffer) #define REPARSE_GUID_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(REPARSE_GUID_DATA_BUFFER, GenericReparseBuffer) #define MAXIMUM_REPARSE_DATA_BUFFER_SIZE 16384 #define IO_REPARSE_TAG_RESERVED_ZERO 0 @@ -3306,31 +3305,6 @@ typedef struct _NT_TIB { PVOID ArbitraryUserPointer; struct _NT_TIB *Self; } NT_TIB,*PNT_TIB; -typedef struct _REPARSE_DATA_BUFFER { - DWORD ReparseTag; - WORD ReparseDataLength; - WORD Reserved; - _ANONYMOUS_UNION union { - struct { - WORD SubstituteNameOffset; - WORD SubstituteNameLength; - WORD PrintNameOffset; - WORD PrintNameLength; - ULONG Flags; - WCHAR PathBuffer[1]; - } SymbolicLinkReparseBuffer; - struct { - WORD SubstituteNameOffset; - WORD SubstituteNameLength; - WORD PrintNameOffset; - WORD PrintNameLength; - WCHAR PathBuffer[1]; - } MountPointReparseBuffer; - struct { - BYTE DataBuffer[1]; - } GenericReparseBuffer; - } DUMMYUNIONNAME; -} REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER; typedef struct _REPARSE_GUID_DATA_BUFFER { DWORD ReparseTag; WORD ReparseDataLength;