ReactOS.org
Sign In
Sign Up
Sign In
Sign Up
Manage this list
×
Keyboard Shortcuts
Thread View
j
: Next unread message
k
: Previous unread message
j a
: Jump to all threads
j l
: Jump to MailingList overview
2024
December
November
October
September
August
July
June
May
April
March
February
January
2023
December
November
October
September
August
July
June
May
April
March
February
January
2022
December
November
October
September
August
July
June
May
April
March
February
January
2021
December
November
October
September
August
July
June
May
April
March
February
January
2020
December
November
October
September
August
July
June
May
April
March
February
January
2019
December
November
October
September
August
July
June
May
April
March
February
January
2018
December
November
October
September
August
July
June
May
April
March
February
January
2017
December
November
October
September
August
July
June
May
April
March
February
January
2016
December
November
October
September
August
July
June
May
April
March
February
January
2015
December
November
October
September
August
July
June
May
April
March
February
January
2014
December
November
October
September
August
July
June
May
April
March
February
January
2013
December
November
October
September
August
July
June
May
April
March
February
January
2012
December
November
October
September
August
July
June
May
April
March
February
January
2011
December
November
October
September
August
July
June
May
April
March
February
January
2010
December
November
October
September
August
July
June
May
April
March
February
January
2009
December
November
October
September
August
July
June
May
April
March
February
January
2008
December
November
October
September
August
July
June
May
April
March
February
January
2007
December
November
October
September
August
July
June
May
April
March
February
January
2006
December
November
October
September
August
July
June
May
April
March
February
January
2005
December
November
October
September
August
July
June
May
April
March
February
January
2004
December
November
October
September
August
July
June
May
April
March
February
List overview
Download
Ros-diffs
July 2017
----- 2024 -----
December 2024
November 2024
October 2024
September 2024
August 2024
July 2024
June 2024
May 2024
April 2024
March 2024
February 2024
January 2024
----- 2023 -----
December 2023
November 2023
October 2023
September 2023
August 2023
July 2023
June 2023
May 2023
April 2023
March 2023
February 2023
January 2023
----- 2022 -----
December 2022
November 2022
October 2022
September 2022
August 2022
July 2022
June 2022
May 2022
April 2022
March 2022
February 2022
January 2022
----- 2021 -----
December 2021
November 2021
October 2021
September 2021
August 2021
July 2021
June 2021
May 2021
April 2021
March 2021
February 2021
January 2021
----- 2020 -----
December 2020
November 2020
October 2020
September 2020
August 2020
July 2020
June 2020
May 2020
April 2020
March 2020
February 2020
January 2020
----- 2019 -----
December 2019
November 2019
October 2019
September 2019
August 2019
July 2019
June 2019
May 2019
April 2019
March 2019
February 2019
January 2019
----- 2018 -----
December 2018
November 2018
October 2018
September 2018
August 2018
July 2018
June 2018
May 2018
April 2018
March 2018
February 2018
January 2018
----- 2017 -----
December 2017
November 2017
October 2017
September 2017
August 2017
July 2017
June 2017
May 2017
April 2017
March 2017
February 2017
January 2017
----- 2016 -----
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
----- 2015 -----
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
----- 2014 -----
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
----- 2013 -----
December 2013
November 2013
October 2013
September 2013
August 2013
July 2013
June 2013
May 2013
April 2013
March 2013
February 2013
January 2013
----- 2012 -----
December 2012
November 2012
October 2012
September 2012
August 2012
July 2012
June 2012
May 2012
April 2012
March 2012
February 2012
January 2012
----- 2011 -----
December 2011
November 2011
October 2011
September 2011
August 2011
July 2011
June 2011
May 2011
April 2011
March 2011
February 2011
January 2011
----- 2010 -----
December 2010
November 2010
October 2010
September 2010
August 2010
July 2010
June 2010
May 2010
April 2010
March 2010
February 2010
January 2010
----- 2009 -----
December 2009
November 2009
October 2009
September 2009
August 2009
July 2009
June 2009
May 2009
April 2009
March 2009
February 2009
January 2009
----- 2008 -----
December 2008
November 2008
October 2008
September 2008
August 2008
July 2008
June 2008
May 2008
April 2008
March 2008
February 2008
January 2008
----- 2007 -----
December 2007
November 2007
October 2007
September 2007
August 2007
July 2007
June 2007
May 2007
April 2007
March 2007
February 2007
January 2007
----- 2006 -----
December 2006
November 2006
October 2006
September 2006
August 2006
July 2006
June 2006
May 2006
April 2006
March 2006
February 2006
January 2006
----- 2005 -----
December 2005
November 2005
October 2005
September 2005
August 2005
July 2005
June 2005
May 2005
April 2005
March 2005
February 2005
January 2005
----- 2004 -----
December 2004
November 2004
October 2004
September 2004
August 2004
July 2004
June 2004
May 2004
April 2004
March 2004
February 2004
ros-diffs@reactos.org
19 participants
213 discussions
Start a n
N
ew thread
[dquintana] 75404: [FREELDR] Fix compilation on ARM.
by dquintana@svn.reactos.org
Author: dquintana Date: Tue Jul 25 18:12:33 2017 New Revision: 75404 URL:
http://svn.reactos.org/svn/reactos?rev=75404&view=rev
Log: [FREELDR] Fix compilation on ARM. Modified: trunk/reactos/boot/freeldr/freeldr/custom.c trunk/reactos/boot/freeldr/freeldr/freeldr.c Modified: trunk/reactos/boot/freeldr/freeldr/custom.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/custo…
============================================================================== --- trunk/reactos/boot/freeldr/freeldr/custom.c [iso-8859-1] (original) +++ trunk/reactos/boot/freeldr/freeldr/custom.c [iso-8859-1] Tue Jul 25 18:12:33 2017 @@ -388,6 +388,8 @@ { UiMessageBox("The system will now reboot."); +#if defined(__i386__) || defined(_M_AMD64) DiskStopFloppyMotor(); +#endif Reboot(); } Modified: trunk/reactos/boot/freeldr/freeldr/freeldr.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/freel…
============================================================================== --- trunk/reactos/boot/freeldr/freeldr/freeldr.c [iso-8859-1] (original) +++ trunk/reactos/boot/freeldr/freeldr/freeldr.c [iso-8859-1] Tue Jul 25 18:12:33 2017 @@ -61,7 +61,9 @@ Quit: /* If we reach this point, something went wrong before, therefore reboot */ +#if defined(__i386__) || defined(_M_AMD64) DiskStopFloppyMotor(); +#endif Reboot(); }
7 years, 5 months
1
0
0
0
[dquintana] 75403: [BOOTLIB] [BOOTMGR] Disabled x86-specific code when building ARM. [LIBSUPP] Use a hack to replace inline asm which is not supported by MSVC ARM. [DBGHELP] Fix ARM register access...
by dquintana@svn.reactos.org
Author: dquintana Date: Tue Jul 25 17:30:21 2017 New Revision: 75403 URL:
http://svn.reactos.org/svn/reactos?rev=75403&view=rev
Log: [BOOTLIB] [BOOTMGR] Disabled x86-specific code when building ARM. [LIBSUPP] Use a hack to replace inline asm which is not supported by MSVC ARM. [DBGHELP] Fix ARM register access from context struct. [MSVCRT] Fix typo in spec file. [NTOSKRNL] [WIN32SS] Add asm dependency to *sys modules. [CPPRT] Add one of the missing constructor aliases. There's more, but my brain is fried at this point. [BTRFS] Define-away an include for x86-specific intrinsics. This is the first batch of fixes for building reactos using the MSVC ARM toolchain. A lot more work is needed to get a full build including rostests and rosapps. Modified: trunk/reactos/boot/environ/CMakeLists.txt trunk/reactos/boot/environ/app/bootmgr/bootmgr.c trunk/reactos/boot/environ/lib/misc/image.c trunk/reactos/boot/environ/lib/misc/util.c trunk/reactos/boot/environ/lib/platform/time.c trunk/reactos/dll/ntdll/rtl/libsupp.c trunk/reactos/dll/win32/dbghelp/cpu_arm.c trunk/reactos/dll/win32/msvcrt/msvcrt.spec trunk/reactos/drivers/filesystems/btrfs/btrfs_drv.h trunk/reactos/ntoskrnl/CMakeLists.txt trunk/reactos/sdk/lib/cpprt/arm/cpprt.s trunk/reactos/sdk/lib/delayimp/delayimp.c trunk/reactos/win32ss/CMakeLists.txt Modified: trunk/reactos/boot/environ/CMakeLists.txt URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/boot/environ/CMakeLists.tx…
============================================================================== --- trunk/reactos/boot/environ/CMakeLists.txt [iso-8859-1] (original) +++ trunk/reactos/boot/environ/CMakeLists.txt [iso-8859-1] Tue Jul 25 17:30:21 2017 @@ -81,7 +81,11 @@ set_target_properties(bootmgfw PROPERTIES SUFFIX ".efi") if(MSVC) - add_target_link_flags(bootmgfw "/ignore:4078 /ignore:4254 /DRIVER /FIXED") + if (ARCH STREQUAL "arm") + add_target_link_flags(bootmgfw "/ignore:4078 /ignore:4254 /DRIVER") + else() + add_target_link_flags(bootmgfw "/ignore:4078 /ignore:4254 /DRIVER /FIXED") + endif() else() add_target_link_flags(bootmgfw "-Wl,--strip-all,--exclude-all-symbols") endif() Modified: trunk/reactos/boot/environ/app/bootmgr/bootmgr.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/boot/environ/app/bootmgr/b…
============================================================================== --- trunk/reactos/boot/environ/app/bootmgr/bootmgr.c [iso-8859-1] (original) +++ trunk/reactos/boot/environ/app/bootmgr/bootmgr.c [iso-8859-1] Tue Jul 25 17:30:21 2017 @@ -2755,7 +2755,12 @@ RebootOnError = FALSE; /* Save the start/end-of-POST time */ +#if defined(_M_IX86) || defined(_M_X64) ApplicationStartTime = __rdtsc(); +#else + EfiPrintf(L"No time source defined for this platform\r\n"); + ApplicationStartTime = 0; +#endif PostTime = ApplicationStartTime; /* Setup the boot library parameters for this application */ Modified: trunk/reactos/boot/environ/lib/misc/image.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/boot/environ/lib/misc/imag…
============================================================================== --- trunk/reactos/boot/environ/lib/misc/image.c [iso-8859-1] (original) +++ trunk/reactos/boot/environ/lib/misc/image.c [iso-8859-1] Tue Jul 25 17:30:21 2017 @@ -17,6 +17,7 @@ ULONG IapTableEntries; PVOID* IapImageTable; +#ifndef _M_ARM KDESCRIPTOR GdtRegister; KDESCRIPTOR IdtRegister; KDESCRIPTOR BootAppGdtRegister; @@ -24,6 +25,7 @@ PVOID BootApp32EntryRoutine; PBOOT_APPLICATION_PARAMETER_BLOCK BootApp32Parameters; PVOID BootApp32Stack; +#endif /* FUNCTIONS *****************************************************************/ @@ -1832,6 +1834,7 @@ _In_ PBL_RETURN_ARGUMENTS ReturnArguments ) { +#ifndef _M_ARM KDESCRIPTOR Gdt, Idt; ULONG BootSizeNeeded; NTSTATUS Status; @@ -1916,6 +1919,9 @@ /* Free it */ MmPapFreePages(BootData, BL_MM_INCLUDE_MAPPED_ALLOCATED); } +#else + EfiPrintf(L"ImgArchEfiStartBootApplication not implemented for this platform.\r\n"); +#endif /* All done */ return STATUS_NOT_IMPLEMENTED; Modified: trunk/reactos/boot/environ/lib/misc/util.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/boot/environ/lib/misc/util…
============================================================================== --- trunk/reactos/boot/environ/lib/misc/util.c [iso-8859-1] (original) +++ trunk/reactos/boot/environ/lib/misc/util.c [iso-8859-1] Tue Jul 25 17:30:21 2017 @@ -832,6 +832,7 @@ return PartialSum; } +#if defined(_M_IX86) || defined(_M_X64) BOOLEAN Archx86IsCpuidSupported ( VOID @@ -849,12 +850,14 @@ /* Check if the bit stuck */ return (((CallerFlags ^ Flags) >> 21) & 1) ^ 1; } +#endif BOOLEAN BlArchIsCpuIdFunctionSupported ( _In_ ULONG Function ) { +#if defined(_M_IX86) || defined(_M_X64) BOOLEAN Supported; INT CpuInfo[4]; @@ -887,6 +890,9 @@ { return TRUE; } +#else + EfiPrintf(L"BlArchIsCpuIdFunctionSupported not implemented for this platform.\r\n"); +#endif /* Nope */ return FALSE; @@ -897,6 +903,7 @@ VOID ) { +#if defined(_M_IX86) || defined(_M_X64) INT CpuInfo[4]; /* Serialize with CPUID, if it exists */ @@ -907,6 +914,10 @@ /* Read the TSC */ return __rdtsc(); +#else + EfiPrintf(L"BlArchGetPerformanceCounter not implemented for this platform.\r\n"); + return 0; +#endif } VOID @@ -916,6 +927,8 @@ _Out_ INT* Result ) { +#if defined(_M_IX86) || defined(_M_X64) /* Use the intrinsic */ __cpuidex(Result, Function, SubFunction); -} +#endif +} Modified: trunk/reactos/boot/environ/lib/platform/time.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/boot/environ/lib/platform/…
============================================================================== --- trunk/reactos/boot/environ/lib/platform/time.c [iso-8859-1] (original) +++ trunk/reactos/boot/environ/lib/platform/time.c [iso-8859-1] Tue Jul 25 17:30:21 2017 @@ -21,6 +21,7 @@ VOID ) { +#if defined(_M_IX86) || defined(_M_X64) ULONG Count; INT CpuInfo[4]; ULONGLONG TimeStamp1, TimeStamp2, Delta; @@ -51,6 +52,10 @@ /* Set the frequency based on the two measurements we took */ BlpTimePerformanceFrequency = 125 * (Delta - (TimeStamp2 - TimeStamp1)) & 0x1FFFFFFFFFFFFFF; return STATUS_SUCCESS; +#else + EfiPrintf(L"BlpTimeMeasureTscFrequency not implemented for this platform.\r\n"); + return STATUS_NOT_IMPLEMENTED; +#endif } NTSTATUS @@ -58,6 +63,7 @@ VOID ) { +#if defined(_M_IX86) || defined(_M_X64) INT CpuInfo[4]; /* Check if the ISVM bit it set, meaning we're in a hypervisor */ @@ -85,6 +91,10 @@ /* On other systems, compute it */ return BlpTimeMeasureTscFrequency(); +#else + EfiPrintf(L"BlpTimeCalibratePerformanceCounter not implemented for this platform.\r\n"); + return STATUS_NOT_IMPLEMENTED; +#endif } ULONGLONG @@ -92,6 +102,7 @@ _Out_opt_ PLARGE_INTEGER Frequency ) { +#if defined(_M_IX86) || defined(_M_X64) /* Check if caller wants frequency */ if (Frequency) { @@ -101,4 +112,8 @@ /* Return the TSC value */ return __rdtsc(); +#else + EfiPrintf(L"BlTimeQueryPerformanceCounter not implemented for this platform.\r\n"); + return 0; +#endif }; Modified: trunk/reactos/dll/ntdll/rtl/libsupp.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/ntdll/rtl/libsupp.c?re…
============================================================================== --- trunk/reactos/dll/ntdll/rtl/libsupp.c [iso-8859-1] (original) +++ trunk/reactos/dll/ntdll/rtl/libsupp.c [iso-8859-1] Tue Jul 25 17:30:21 2017 @@ -245,7 +245,12 @@ #elif defined(_M_PPC) __asm__("mr %0,1" : "=r" (Stack) : ); #elif defined(_M_ARM) +#if defined __GNUC__ __asm__("mov sp, %0" : "=r"(Stack) : ); +#elif defined(_MSC_VER) + // FIXME: Hack. Probably won't work if this ever actually manages to run someday. + Stack = (ULONG_PTR)&Stack; +#endif #else #error Unknown architecture #endif Modified: trunk/reactos/dll/win32/dbghelp/cpu_arm.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/dbghelp/cpu_arm.…
============================================================================== --- trunk/reactos/dll/win32/dbghelp/cpu_arm.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/dbghelp/cpu_arm.c [iso-8859-1] Tue Jul 25 17:30:21 2017 @@ -33,7 +33,7 @@ #ifdef __arm__ case cpu_addr_pc: addr->Offset = ctx->Pc; return TRUE; case cpu_addr_stack: addr->Offset = ctx->Sp; return TRUE; - case cpu_addr_frame: addr->Offset = ctx->Fp; return TRUE; + case cpu_addr_frame: addr->Offset = ctx->R11; return TRUE; #endif default: addr->Mode = -1; return FALSE; @@ -116,7 +116,7 @@ /* set frame information */ frame->AddrStack.Offset = context->Sp; frame->AddrReturn.Offset = context->Lr; - frame->AddrFrame.Offset = context->Fp; + frame->AddrFrame.Offset = context->R11; frame->AddrPC.Offset = context->Pc; frame->Far = TRUE; @@ -169,8 +169,8 @@ case CV_ARM_R0 + 8: *size = sizeof(ctx->R8); return &ctx->R8; case CV_ARM_R0 + 9: *size = sizeof(ctx->R9); return &ctx->R9; case CV_ARM_R0 + 10: *size = sizeof(ctx->R10); return &ctx->R10; - case CV_ARM_R0 + 11: *size = sizeof(ctx->Fp); return &ctx->Fp; - case CV_ARM_R0 + 12: *size = sizeof(ctx->Ip); return &ctx->Ip; + case CV_ARM_R0 + 11: *size = sizeof(ctx->R11); return &ctx->R11; + case CV_ARM_R0 + 12: *size = sizeof(ctx->R12); return &ctx->R12; case CV_ARM_SP: *size = sizeof(ctx->Sp); return &ctx->Sp; case CV_ARM_LR: *size = sizeof(ctx->Lr); return &ctx->Lr; Modified: trunk/reactos/dll/win32/msvcrt/msvcrt.spec URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msvcrt/msvcrt.sp…
============================================================================== --- trunk/reactos/dll/win32/msvcrt/msvcrt.spec [iso-8859-1] (original) +++ trunk/reactos/dll/win32/msvcrt/msvcrt.spec [iso-8859-1] Tue Jul 25 17:30:21 2017 @@ -163,7 +163,7 @@ @ cdecl -arch=arm ?_set_new_handler@@YAP6AHI@ZP6AHI@Z@Z() MSVCRT__set_new_handler # int (__cdecl*__cdecl _set_new_handler(int (__cdecl*)(unsigned int)))(unsigned int) @ cdecl -arch=arm ?_set_new_mode@@YAHH@Z() MSVCRT__set_new_mode # int __cdecl _set_new_mode(int) @ cdecl -arch=arm ?_set_se_translator@@YAP6AXIPAU_EXCEPTION_POINTERS@@@ZP6AXI0@Z@Z() MSVCRT__set_se_translator # void (__cdecl*__cdecl _set_se_translator(void (__cdecl*)(unsigned int,struct _EXCEPTION_POINTERS *)))(unsigned int,struct _EXCEPTION_POINTERS *) -@ cdecl -arch=arm ?before@type_info@@QBAHABV1@@Z() MSVCRT_type_info_before# public: int __cdecl type_info::before(class type_info const &)const +@ cdecl -arch=arm ?before@type_info@@QBAHABV1@@Z() MSVCRT_type_info_before # public: int __cdecl type_info::before(class type_info const &)const @ cdecl -arch=arm ?name@type_info@@QBAPBDXZ() MSVCRT_type_info_name # public: char const * __cdecl type_info::name(void)const @ cdecl -arch=arm ?raw_name@type_info@@QBAPBDXZ() MSVCRT_type_info_raw_name # public: char const * __cdecl type_info::raw_name(void)const @ cdecl -arch=arm ?set_terminate@@YAP6AXXZP6AXXZ@Z() MSVCRT_set_terminate # void (__cdecl*__cdecl set_terminate(void (__cdecl*)(void)))(void) Modified: trunk/reactos/drivers/filesystems/btrfs/btrfs_drv.h URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/filesystems/btrfs/…
============================================================================== --- trunk/reactos/drivers/filesystems/btrfs/btrfs_drv.h [iso-8859-1] (original) +++ trunk/reactos/drivers/filesystems/btrfs/btrfs_drv.h [iso-8859-1] Tue Jul 25 17:30:21 2017 @@ -44,7 +44,10 @@ #include <stdio.h> #include <stdarg.h> #include <stddef.h> +#ifndef __REACTOS__ +// Not actually used #include <emmintrin.h> +#endif /* __REACTOS__ */ #include "btrfs.h" #include "btrfsioctl.h" Modified: trunk/reactos/ntoskrnl/CMakeLists.txt URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/CMakeLists.txt?re…
============================================================================== --- trunk/reactos/ntoskrnl/CMakeLists.txt [iso-8859-1] (original) +++ trunk/reactos/ntoskrnl/CMakeLists.txt [iso-8859-1] Tue Jul 25 17:30:21 2017 @@ -57,3 +57,4 @@ add_asm_files(ntdllsys_asm ntdll.S) add_library(ntdllsys ${ntdllsys_asm}) set_target_properties(ntdllsys PROPERTIES LINKER_LANGUAGE "C") +add_dependencies(ntdllsys asm) Modified: trunk/reactos/sdk/lib/cpprt/arm/cpprt.s URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/sdk/lib/cpprt/arm/cpprt.s?…
============================================================================== --- trunk/reactos/sdk/lib/cpprt/arm/cpprt.s [iso-8859-1] (original) +++ trunk/reactos/sdk/lib/cpprt/arm/cpprt.s [iso-8859-1] Tue Jul 25 17:30:21 2017 @@ -27,4 +27,7 @@ ; void __cdecl operator delete[](void *,struct std::nothrow_t const &) DEFINE_ALIAS ??_V@YAXPAXABUnothrow_t@std@@@Z, ??3@YAXPAX@Z + ; void __cdecl operator delete(void *,unsigned int) + DEFINE_ALIAS ??3@YAXPAXI@Z, ??3@YAXPAX@Z + END Modified: trunk/reactos/sdk/lib/delayimp/delayimp.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/sdk/lib/delayimp/delayimp.…
============================================================================== --- trunk/reactos/sdk/lib/delayimp/delayimp.c [iso-8859-1] (original) +++ trunk/reactos/sdk/lib/delayimp/delayimp.c [iso-8859-1] Tue Jul 25 17:30:21 2017 @@ -32,6 +32,9 @@ #pragma comment(linker, "/alternatename:___pfnDliNotifyHook2=___pfnDliNotifyHook2Default") #pragma comment(linker, "/alternatename:___pfnDliFailureHook2=___pfnDliFailureHook2Default") #elif defined (_M_IA64) || defined (_M_AMD64) +#pragma comment(linker, "/alternatename:__pfnDliNotifyHook2=__pfnDliNotifyHook2Default") +#pragma comment(linker, "/alternatename:__pfnDliFailureHook2=__pfnDliFailureHook2Default") +#elif defined (_M_ARM) #pragma comment(linker, "/alternatename:__pfnDliNotifyHook2=__pfnDliNotifyHook2Default") #pragma comment(linker, "/alternatename:__pfnDliFailureHook2=__pfnDliFailureHook2Default") #else Modified: trunk/reactos/win32ss/CMakeLists.txt URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/CMakeLists.txt?rev…
============================================================================== --- trunk/reactos/win32ss/CMakeLists.txt [iso-8859-1] (original) +++ trunk/reactos/win32ss/CMakeLists.txt [iso-8859-1] Tue Jul 25 17:30:21 2017 @@ -246,3 +246,4 @@ add_asm_files(win32ksys_asm sys-stubs.S) add_library(win32ksys ${win32ksys_asm}) set_target_properties(win32ksys PROPERTIES LINKER_LANGUAGE "C") +add_dependencies(win32ksys asm)
7 years, 5 months
1
0
0
0
[pschweitzer] 75402: [RDBSS] - Implement RxCommonSetInformation(), RxpSetInfoMiniRdr(), RxSetBasicInfo() - Stub RxSetAllocationInfo(), RxSetDispositionInfo(), RxSetEndOfFileInfo(), RxSetPipeInfo(), ...
by pschweitzer@svn.reactos.org
Author: pschweitzer Date: Tue Jul 25 12:09:11 2017 New Revision: 75402 URL:
http://svn.reactos.org/svn/reactos?rev=75402&view=rev
Log: [RDBSS] - Implement RxCommonSetInformation(), RxpSetInfoMiniRdr(), RxSetBasicInfo() - Stub RxSetAllocationInfo(), RxSetDispositionInfo(), RxSetEndOfFileInfo(), RxSetPipeInfo(), RxSetPositionInfo(), RxSetRenameInfo(), RxSetSimpleInfo() CORE-8204 CORE-11327 Modified: trunk/reactos/sdk/include/ddk/fcb.h trunk/reactos/sdk/lib/drivers/rdbsslib/rdbss.c Modified: trunk/reactos/sdk/include/ddk/fcb.h URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/sdk/include/ddk/fcb.h?rev=…
============================================================================== --- trunk/reactos/sdk/include/ddk/fcb.h [iso-8859-1] (original) +++ trunk/reactos/sdk/include/ddk/fcb.h [iso-8859-1] Tue Jul 25 12:09:11 2017 @@ -290,6 +290,7 @@ #define FOBX_FLAG_FREE_UNICODE 0x20000 #define FOBX_FLAG_USER_SET_LAST_WRITE 0x40000 #define FOBX_FLAG_USER_SET_LAST_ACCESS 0x80000 +#define FOBX_FLAG_USER_SET_CREATION 0x100000 #define FOBX_FLAG_USER_SET_LAST_CHANGE 0x200000 #define FOBX_FLAG_DELETE_ON_CLOSE 0x800000 #define FOBX_FLAG_SRVOPEN_CLOSED 0x1000000 Modified: trunk/reactos/sdk/lib/drivers/rdbsslib/rdbss.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/sdk/lib/drivers/rdbsslib/r…
============================================================================== --- trunk/reactos/sdk/lib/drivers/rdbsslib/rdbss.c [iso-8859-1] (original) +++ trunk/reactos/sdk/lib/drivers/rdbsslib/rdbss.c [iso-8859-1] Tue Jul 25 12:09:11 2017 @@ -447,6 +447,38 @@ PRX_CONTEXT RxContext, ACCESS_MASK DesiredAccess, ULONG ShareAccess); + +NTSTATUS +RxSetAllocationInfo( + PRX_CONTEXT RxContext); + +NTSTATUS +RxSetBasicInfo( + PRX_CONTEXT RxContext); + +NTSTATUS +RxSetDispositionInfo( + PRX_CONTEXT RxContext); + +NTSTATUS +RxSetEndOfFileInfo( + PRX_CONTEXT RxContext); + +NTSTATUS +RxSetPipeInfo( + PRX_CONTEXT RxContext); + +NTSTATUS +RxSetPositionInfo( + PRX_CONTEXT RxContext); + +NTSTATUS +RxSetRenameInfo( + PRX_CONTEXT RxContext); + +NTSTATUS +RxSetSimpleInfo( + PRX_CONTEXT RxContext); VOID RxSetupNetFileObject( @@ -3535,13 +3567,249 @@ return STATUS_NOT_IMPLEMENTED; } +/* + * @implemented + */ NTSTATUS NTAPI RxCommonSetInformation( PRX_CONTEXT Context) { - UNIMPLEMENTED; - return STATUS_NOT_IMPLEMENTED; + PIRP Irp; + PFCB Fcb; + PFOBX Fobx; + NTSTATUS Status; + PNET_ROOT NetRoot; + PIO_STACK_LOCATION Stack; + FILE_INFORMATION_CLASS Class; + BOOLEAN CanWait, FcbTableAcquired, FcbAcquired; + + PAGED_CODE(); + + Fcb = (PFCB)Context->pFcb; + Fobx = (PFOBX)Context->pFobx; + DPRINT("RxCommonSetInformation(%p), FCB: %p, FOBX: %p\n", Context, Fcb, Fobx); + + Irp = Context->CurrentIrp; + Stack = Context->CurrentIrpSp; + Class = Stack->Parameters.SetFile.FileInformationClass; + DPRINT("Buffer: %p, Length: %lx, Class: %ld, ReplaceIfExists: %d\n", + Irp->AssociatedIrp.SystemBuffer, Stack->Parameters.SetFile.Length, + Class, Stack->Parameters.SetFile.ReplaceIfExists); + + Status = STATUS_SUCCESS; + CanWait = BooleanFlagOn(Context->Flags, RX_CONTEXT_FLAG_WAIT); + FcbTableAcquired = FALSE; + FcbAcquired = FALSE; + NetRoot = (PNET_ROOT)Fcb->pNetRoot; + +#define _SEH2_TRY_RETURN(S) S; goto try_exit + + _SEH2_TRY + { + /* Valide the node type first */ + if (NodeType(Fcb) != RDBSS_NTC_STORAGE_TYPE_UNKNOWN && + NodeType(Fcb) != RDBSS_NTC_STORAGE_TYPE_DIRECTORY) + { + if (NodeType(Fcb) == RDBSS_NTC_STORAGE_TYPE_FILE) + { + if (!BooleanFlagOn(Fcb->FcbState, FCB_STATE_PAGING_FILE)) + { + Status = STATUS_SUCCESS; + } + } + else if (NodeType(Fcb) != RDBSS_NTC_SPOOLFILE) + { + if (NodeType(Fcb) == RDBSS_NTC_MAILSLOT) + { + _SEH2_TRY_RETURN(Status = STATUS_NOT_IMPLEMENTED); + } + else + { + DPRINT1("Illegal type of file provided: %x\n", NodeType(Fcb)); + _SEH2_TRY_RETURN(Status = STATUS_INVALID_PARAMETER); + } + } + } + + /* We don't autorize advance operation */ + if (Class == FileEndOfFileInformation && Stack->Parameters.SetFile.AdvanceOnly) + { + DPRINT1("Not allowed\n"); + + _SEH2_TRY_RETURN(Status = STATUS_SUCCESS); + } + + /* For these to classes, we'll have to deal with the FCB table (removal) + * We thus need the exclusive FCB table lock + */ + if (Class == FileDispositionInformation || Class == FileRenameInformation) + { + RxPurgeRelatedFobxs(NetRoot, Context, TRUE, Fcb); + RxScavengeFobxsForNetRoot(NetRoot, Fcb, TRUE); + + if (!RxAcquireFcbTableLockExclusive(&NetRoot->FcbTable, CanWait)) + { + Context->PostRequest = TRUE; + _SEH2_TRY_RETURN(Status = STATUS_PENDING); + } + + FcbTableAcquired = TRUE; + } + + /* Finally, if not paging file, we need exclusive FCB lock */ + if (!BooleanFlagOn(Fcb->FcbState, FCB_STATE_PAGING_FILE)) + { + Status = RxAcquireExclusiveFcb(Context, Fcb); + if (Status == STATUS_LOCK_NOT_GRANTED) + { + Context->PostRequest = TRUE; + _SEH2_TRY_RETURN(Status = STATUS_SUCCESS); + } + else if (Status != STATUS_SUCCESS) + { + _SEH2_LEAVE; + } + + FcbAcquired = TRUE; + } + + Status = STATUS_SUCCESS; + + /* And now, perform the job! */ + switch (Class) + { + case FileBasicInformation: + Status = RxSetBasicInfo(Context); + break; + + case FileDispositionInformation: + { + PFILE_DISPOSITION_INFORMATION FDI; + + /* Check whether user wants deletion */ + FDI = Irp->AssociatedIrp.SystemBuffer; + if (FDI->DeleteFile) + { + /* If so, check whether it's doable */ + if (!MmFlushImageSection(&Fcb->NonPaged->SectionObjectPointers, MmFlushForDelete)) + { + Status = STATUS_CANNOT_DELETE; + } + + /* And if doable, already remove from FCB table */ + if (Status == STATUS_SUCCESS) + { + ASSERT(FcbAcquired && FcbTableAcquired); + RxRemoveNameNetFcb(Fcb); + + RxReleaseFcbTableLock(&NetRoot->FcbTable); + FcbTableAcquired = FALSE; + } + } + + /* If it succeed, perform the operation */ + if (Status == STATUS_SUCCESS) + { + Status = RxSetDispositionInfo(Context); + } + + break; + } + + case FilePositionInformation: + Status = RxSetPositionInfo(Context); + break; + + case FileAllocationInformation: + Status = RxSetAllocationInfo(Context); + break; + + case FileEndOfFileInformation: + Status = RxSetEndOfFileInfo(Context); + break; + + case FilePipeInformation: + case FilePipeLocalInformation: + case FilePipeRemoteInformation: + Status = RxSetPipeInfo(Context); + break; + + case FileRenameInformation: + case FileLinkInformation: + case FileMoveClusterInformation: + /* If we can wait, try to perform the operation right now */ + if (CanWait) + { + /* Of course, collapsing is not doable anymore, file is + * in an inbetween state + */ + ClearFlag(Fcb->FcbState, FCB_STATE_COLLAPSING_ENABLED); + + /* Set the information */ + Status = RxSetRenameInfo(Context); + /* If it succeed, drop the current entry from FCB table */ + if (Status == STATUS_SUCCESS && Class == FileRenameInformation) + { + ASSERT(FcbAcquired && FcbTableAcquired); + RxRemoveNameNetFcb(Fcb); + } + _SEH2_TRY_RETURN(Status); + } + /* Can't wait? Post for async retry */ + else + { + Status = RxFsdPostRequest(Context); + _SEH2_TRY_RETURN(Status); + } + break; + + case FileValidDataLengthInformation: + if (!MmCanFileBeTruncated(&Fcb->NonPaged->SectionObjectPointers, NULL)) + { + Status = STATUS_USER_MAPPED_FILE; + } + break; + + case FileShortNameInformation: + Status = RxSetSimpleInfo(Context); + break; + + default: + DPRINT1("Insupported class: %x\n", Class); + Status = STATUS_INVALID_PARAMETER; + + break; + } + +try_exit: NOTHING; + /* If mini-rdr was OK and wants a re-post on this, do it */ + if (Status == STATUS_SUCCESS) + { + if (Context->PostRequest) + { + Status = RxFsdPostRequest(Context); + } + } + } + _SEH2_FINALLY + { + /* Release any acquired lock */ + if (FcbAcquired) + { + RxReleaseFcb(Context, Fcb); + } + + if (FcbTableAcquired) + { + RxReleaseFcbTableLock(&NetRoot->FcbTable); + } + } + _SEH2_END; + +#undef _SEH2_TRY_RETURN + + return Status; } NTSTATUS @@ -4498,6 +4766,8 @@ } } _SEH2_END; + +#undef _SEH2_TRY_RETURN return Status; } @@ -7279,6 +7549,29 @@ IoMarkIrpPending(Irp); } +/* + * @implemented + */ +NTSTATUS +RxpSetInfoMiniRdr( + PRX_CONTEXT RxContext, + FILE_INFORMATION_CLASS Class) +{ + PFCB Fcb; + NTSTATUS Status; + + /* Initialize parameters in RX_CONTEXT */ + RxContext->Info.FileInformationClass = Class; + RxContext->Info.Buffer = RxContext->CurrentIrp->AssociatedIrp.SystemBuffer; + RxContext->Info.Length = RxContext->CurrentIrpSp->Parameters.SetFile.Length; + + /* And call mini-rdr */ + Fcb = (PFCB)RxContext->pFcb; + MINIRDR_CALL(Status, RxContext, Fcb->MRxDispatch, MRxSetFileInfo, (RxContext)); + + return Status; +} + VOID NTAPI RxpUnregisterMinirdr( @@ -8146,6 +8439,157 @@ return Status; } +NTSTATUS +RxSetAllocationInfo( + PRX_CONTEXT RxContext) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + +/* + * @implemented + */ +NTSTATUS +RxSetBasicInfo( + PRX_CONTEXT RxContext) +{ + NTSTATUS Status; + + PAGED_CODE(); + +#define FILE_ATTRIBUTE_VOLUME 0x8 +#define VALID_FILE_ATTRIBUTES ( \ + FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_HIDDEN | \ + FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_VOLUME | \ + FILE_ATTRIBUTE_ARCHIVE | FILE_ATTRIBUTE_DEVICE | \ + FILE_ATTRIBUTE_TEMPORARY | FILE_ATTRIBUTE_SPARSE_FILE | \ + FILE_ATTRIBUTE_REPARSE_POINT | FILE_ATTRIBUTE_COMPRESSED | \ + FILE_ATTRIBUTE_OFFLINE | FILE_ATTRIBUTE_NOT_CONTENT_INDEXED | \ + FILE_ATTRIBUTE_ENCRYPTED | FILE_ATTRIBUTE_INTEGRITY_STREAM) +#define VALID_DIR_ATTRIBUTES (VALID_FILE_ATTRIBUTES | FILE_ATTRIBUTE_DIRECTORY) + + /* First of all, call the mini-rdr */ + Status = RxpSetInfoMiniRdr(RxContext, FileBasicInformation); + /* If it succeed, perform last bits */ + if (NT_SUCCESS(Status)) + { + PIRP Irp; + PFCB Fcb; + PFOBX Fobx; + PFILE_OBJECT FileObject; + ULONG Attributes, CleanAttr; + PFILE_BASIC_INFORMATION BasicInfo; + + Fcb = (PFCB)RxContext->pFcb; + Fobx = (PFOBX)RxContext->pFobx; + Irp = RxContext->CurrentIrp; + BasicInfo = Irp->AssociatedIrp.SystemBuffer; + FileObject = RxContext->CurrentIrpSp->FileObject; + + /* If caller provided flags, handle the change */ + Attributes = BasicInfo->FileAttributes; + if (Attributes != 0) + { + /* Clean our flags first, with only stuff we support */ + if (NodeType(Fcb) == RDBSS_NTC_STORAGE_TYPE_DIRECTORY) + { + CleanAttr = (Attributes & VALID_DIR_ATTRIBUTES) | FILE_ATTRIBUTE_DIRECTORY; + } + else + { + CleanAttr = Attributes & VALID_FILE_ATTRIBUTES; + } + + /* Handle the temporary mark (set/unset depending on caller) */ + if (BooleanFlagOn(Attributes, FILE_ATTRIBUTE_TEMPORARY)) + { + SetFlag(Fcb->FcbState, FCB_STATE_TEMPORARY); + SetFlag(FileObject->Flags, FO_TEMPORARY_FILE); + } + else + { + ClearFlag(Fcb->FcbState, FCB_STATE_TEMPORARY); + ClearFlag(FileObject->Flags, FO_TEMPORARY_FILE); + } + + /* And set new attributes */ + Fcb->Attributes = CleanAttr; + } + + /* If caller provided a creation time, set it */ + if (BasicInfo->CreationTime.QuadPart != 0LL) + { + Fcb->CreationTime.QuadPart = BasicInfo->CreationTime.QuadPart; + SetFlag(Fobx->Flags, FOBX_FLAG_USER_SET_CREATION); + } + + /* If caller provided a last access time, set it */ + if (BasicInfo->LastAccessTime.QuadPart != 0LL) + { + Fcb->LastAccessTime.QuadPart = BasicInfo->LastAccessTime.QuadPart; + SetFlag(Fobx->Flags, FOBX_FLAG_USER_SET_LAST_ACCESS); + } + + /* If caller provided a last write time, set it */ + if (BasicInfo->LastWriteTime.QuadPart != 0LL) + { + Fcb->LastWriteTime.QuadPart = BasicInfo->LastWriteTime.QuadPart; + SetFlag(Fobx->Flags, FOBX_FLAG_USER_SET_LAST_WRITE); + } + + /* If caller provided a last change time, set it */ + if (BasicInfo->ChangeTime.QuadPart != 0LL) + { + Fcb->LastChangeTime.QuadPart = BasicInfo->ChangeTime.QuadPart; + SetFlag(Fobx->Flags, FOBX_FLAG_USER_SET_LAST_CHANGE); + } + } + + /* Done */ + return Status; +} + +NTSTATUS +RxSetDispositionInfo( + PRX_CONTEXT RxContext) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS +RxSetEndOfFileInfo( + PRX_CONTEXT RxContext) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS +RxSetPipeInfo( + PRX_CONTEXT RxContext) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS +RxSetPositionInfo( + PRX_CONTEXT RxContext) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS +RxSetRenameInfo( + PRX_CONTEXT RxContext) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + /* * @implemented */ @@ -8165,6 +8609,14 @@ RxDumpCurrentAccess(where, "after", wherelogtag, ShareAccess); } +NTSTATUS +RxSetSimpleInfo( + PRX_CONTEXT RxContext) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + /* * @implemented */
7 years, 5 months
1
0
0
0
[pschweitzer] 75401: [XDK] Define FILE_ATTRIBUTE_INTEGRITY_STREAM
by pschweitzer@svn.reactos.org
Author: pschweitzer Date: Tue Jul 25 11:34:36 2017 New Revision: 75401 URL:
http://svn.reactos.org/svn/reactos?rev=75401&view=rev
Log: [XDK] Define FILE_ATTRIBUTE_INTEGRITY_STREAM Modified: trunk/reactos/sdk/include/xdk/iotypes.h trunk/reactos/sdk/include/xdk/winnt_old.h Modified: trunk/reactos/sdk/include/xdk/iotypes.h URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/sdk/include/xdk/iotypes.h?…
============================================================================== --- trunk/reactos/sdk/include/xdk/iotypes.h [iso-8859-1] (original) +++ trunk/reactos/sdk/include/xdk/iotypes.h [iso-8859-1] Tue Jul 25 11:34:36 2017 @@ -2996,6 +2996,7 @@ #define FILE_ATTRIBUTE_OFFLINE 0x00001000 #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000 #define FILE_ATTRIBUTE_ENCRYPTED 0x00004000 +#define FILE_ATTRIBUTE_INTEGRITY_STREAM 0x00008000 #define FILE_ATTRIBUTE_VIRTUAL 0x00010000 #define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7 Modified: trunk/reactos/sdk/include/xdk/winnt_old.h URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/sdk/include/xdk/winnt_old.…
============================================================================== --- trunk/reactos/sdk/include/xdk/winnt_old.h [iso-8859-1] (original) +++ trunk/reactos/sdk/include/xdk/winnt_old.h [iso-8859-1] Tue Jul 25 11:34:36 2017 @@ -211,6 +211,7 @@ #define FILE_ATTRIBUTE_OFFLINE 0x00001000 #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000 #define FILE_ATTRIBUTE_ENCRYPTED 0x00004000 +#define FILE_ATTRIBUTE_INTEGRITY_STREAM 0x00008000 #define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7 #define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7
7 years, 5 months
1
0
0
0
[jimtabor] 75400: [NtUser] - Initialize rectangle to all zero's. See CORE-13582.
by jimtabor@svn.reactos.org
Author: jimtabor Date: Mon Jul 24 23:48:08 2017 New Revision: 75400 URL:
http://svn.reactos.org/svn/reactos?rev=75400&view=rev
Log: [NtUser] - Initialize rectangle to all zero's. See CORE-13582. Modified: trunk/reactos/win32ss/user/ntuser/windc.c Modified: trunk/reactos/win32ss/user/ntuser/windc.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/ntuser/windc.…
============================================================================== --- trunk/reactos/win32ss/user/ntuser/windc.c [iso-8859-1] (original) +++ trunk/reactos/win32ss/user/ntuser/windc.c [iso-8859-1] Mon Jul 24 23:48:08 2017 @@ -146,7 +146,7 @@ ULONG Flags, BOOL SetClipOrigin) { - RECTL rect; + RECTL rect = {0,0,0,0}; if (Window) {
7 years, 5 months
1
0
0
0
[dquintana] 75399: [CABMAN] Fix pointer math ('unsigned long' will truncate the pointer). [MKISOFS/SCHILY TOOLS] Fix the invalid assumption that a 'long' variable can hold pointers. Will be sent up...
by dquintana@svn.reactos.org
Author: dquintana Date: Mon Jul 24 18:37:25 2017 New Revision: 75399 URL:
http://svn.reactos.org/svn/reactos?rev=75399&view=rev
Log: [CABMAN] Fix pointer math ('unsigned long' will truncate the pointer). [MKISOFS/SCHILY TOOLS] Fix the invalid assumption that a 'long' variable can hold pointers. Will be sent upstream. With this the whole of reactos and rostests builds on x64. Rosapps still has issues. Modified: trunk/reactos/sdk/tools/cabman/mszip.cxx trunk/reactos/sdk/tools/mkisofs/schilytools/include/schily/schily.h trunk/reactos/sdk/tools/mkisofs/schilytools/libschily/format.c trunk/reactos/sdk/tools/mkisofs/schilytools/libschily/jsprintf.c trunk/reactos/sdk/tools/mkisofs/schilytools/libschily/jssnprintf.c Modified: trunk/reactos/sdk/tools/cabman/mszip.cxx URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/sdk/tools/cabman/mszip.cxx…
============================================================================== --- trunk/reactos/sdk/tools/cabman/mszip.cxx [iso-8859-1] (original) +++ trunk/reactos/sdk/tools/cabman/mszip.cxx [iso-8859-1] Mon Jul 24 18:37:25 2017 @@ -74,7 +74,7 @@ ZStream.next_in = (unsigned char*)InputBuffer; ZStream.avail_in = InputLength; - ZStream.next_out = (unsigned char*)((unsigned long)OutputBuffer + 2); + ZStream.next_out = ((unsigned char *)OutputBuffer + 2); ZStream.avail_out = CAB_BLOCKSIZE + 12; /* WindowBits is passed < 0 to tell that there is no zlib header */ @@ -137,7 +137,7 @@ return CS_BADSTREAM; } - ZStream.next_in = (unsigned char*)((unsigned long)InputBuffer + 2); + ZStream.next_in = ((unsigned char*)InputBuffer + 2); ZStream.avail_in = InputLength - 2; ZStream.next_out = (unsigned char*)OutputBuffer; ZStream.avail_out = CAB_BLOCKSIZE + 12; Modified: trunk/reactos/sdk/tools/mkisofs/schilytools/include/schily/schily.h URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/sdk/tools/mkisofs/schilyto…
============================================================================== --- trunk/reactos/sdk/tools/mkisofs/schilytools/include/schily/schily.h [iso-8859-1] (original) +++ trunk/reactos/sdk/tools/mkisofs/schilytools/include/schily/schily.h [iso-8859-1] Mon Jul 24 18:37:25 2017 @@ -46,6 +46,9 @@ #endif #ifndef _SCHILY_CCOMDEFS_H #include <schily/ccomdefs.h> +#endif +#ifndef _SCHILY_STDINT_H +#include <schily/stdint.h> #endif #ifdef __cplusplus @@ -464,12 +467,12 @@ extern int wcseql __PR((const wchar_t *, const wchar_t *)); #endif #ifdef va_arg -extern int format __PR((void (*)(char, long), long, const char *, +extern int format __PR((void (*)(char, intptr_t), intptr_t, const char *, va_list)); -extern int fprformat __PR((long, const char *, va_list)); +extern int fprformat __PR((intptr_t, const char *, va_list)); #else -extern int format __PR((void (*)(char, long), long, const char *, void *)); -extern int fprformat __PR((long, const char *, void *)); +extern int format __PR((void (*)(char, intptr_t), intptr_t, const char *, void *)); +extern int fprformat __PR((intptr_t, const char *, void *)); #endif extern int ftoes __PR((char *, double, int, int)); Modified: trunk/reactos/sdk/tools/mkisofs/schilytools/libschily/format.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/sdk/tools/mkisofs/schilyto…
============================================================================== --- trunk/reactos/sdk/tools/mkisofs/schilytools/libschily/format.c [iso-8859-1] (original) +++ trunk/reactos/sdk/tools/mkisofs/schilytools/libschily/format.c [iso-8859-1] Mon Jul 24 18:37:25 2017 @@ -138,9 +138,9 @@ char *ptr; /* Current ptr in buf */ int cnt; /* Free char count in buf */ #else - void (*outf)__PR((char, long)); /* Func from format(fun, arg) */ -#endif - long farg; /* Arg from format (fun, arg) */ + void (*outf)__PR((char, intptr_t)); /* Func from format(fun, arg) */ +#endif + intptr_t farg; /* Arg from format (fun, arg) */ int minusflag; /* Fieldwidth is negative */ int flags; /* General flags (+-#) */ int fldwidth; /* Field width as in %3d */ @@ -227,7 +227,7 @@ #define FORMAT_FUNC_NAME format #define FORMAT_FUNC_PARM -#define FORMAT_FUNC_PROTO_DECL void (*fun)(char, long), +#define FORMAT_FUNC_PROTO_DECL void (*fun)(char, intptr_t), #define FORMAT_FUNC_KR_DECL register void (*fun)(); #define FORMAT_FUNC_KR_ARGS fun, @@ -243,14 +243,14 @@ #ifdef PROTOTYPES EXPORT int FORMAT_FUNC_NAME(FORMAT_FUNC_PROTO_DECL - long farg, + intptr_t farg, const char *fmt, va_list oargs) #else EXPORT int FORMAT_FUNC_NAME(FORMAT_FUNC_KR_ARGS farg, fmt, oargs) FORMAT_FUNC_KR_DECL - register long farg; + register intptr_t farg; register char *fmt; va_list oargs; #endif @@ -292,7 +292,7 @@ fa.ptr = fa.iobuf; fa.fp = (FILE *)farg; fa.err = 0; - farg = fa.farg = (long)&fa; + farg = fa.farg = (intptr_t)&fa; } else { /* recursion */ farg &= ~1; } @@ -1023,7 +1023,7 @@ } out: #ifdef FORMAT_BUFFER - if (farg == (long)&fa) { /* Top level call, flush buffer */ + if (farg == (intptr_t)&fa) { /* Top level call, flush buffer */ if (fa.err) return (EOF); if ((fa.ptr != fa.iobuf) && @@ -1208,9 +1208,9 @@ { register int diff; register int rfillc; - register long arg = fa->farg; + register intptr_t arg = fa->farg; #ifdef FORMAT_FUNC_PARM - register void (*fun) __PR((char, long)) = fa->outf; + register void (*fun) __PR((char, intptr_t)) = fa->outf; #endif register int count; register int lzero = 0; @@ -1274,9 +1274,9 @@ { register int diff; register int rfillc; - register long arg = fa->farg; + register intptr_t arg = fa->farg; #ifdef FORMAT_FUNC_PARM - register void (*fun) __PR((char, long)) = fa->outf; + register void (*fun) __PR((char, intptr_t)) = fa->outf; #endif register int count; Modified: trunk/reactos/sdk/tools/mkisofs/schilytools/libschily/jsprintf.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/sdk/tools/mkisofs/schilyto…
============================================================================== --- trunk/reactos/sdk/tools/mkisofs/schilytools/libschily/jsprintf.c [iso-8859-1] (original) +++ trunk/reactos/sdk/tools/mkisofs/schilytools/libschily/jsprintf.c [iso-8859-1] Mon Jul 24 18:37:25 2017 @@ -57,7 +57,7 @@ #else va_start(args); #endif - ret = fprformat((long)stdout, form, args); + ret = fprformat((intptr_t)stdout, form, args); va_end(args); return (ret); } @@ -82,7 +82,7 @@ #else va_start(args); #endif - ret = fprformat((long)file, form, args); + ret = fprformat((intptr_t)file, form, args); va_end(args); return (ret); } @@ -103,7 +103,7 @@ } *BUF, _BUF; LOCAL void _bflush __PR((BUF)); -LOCAL void _bput __PR((char, long)); +LOCAL void _bput __PR((char, intptr_t)); EXPORT int js_fprintf __PR((FILE *, const char *, ...)); EXPORT int js_printf __PR((const char *, ...)); @@ -120,12 +120,12 @@ #ifdef PROTOTYPES LOCAL void -_bput(char c, long l) +_bput(char c, intptr_t l) #else LOCAL void _bput(c, l) char c; - long l; + intptr_t l; #endif { register BUF bp = (BUF)l; @@ -158,7 +158,7 @@ #else va_start(args); #endif - format(_bput, (long)&bb, form, args); + format(_bput, (intptr_t)&bb, form, args); va_end(args); if (bb.cnt < BFSIZ) _bflush(&bb); @@ -189,7 +189,7 @@ #else va_start(args); #endif - format(_bput, (long)&bb, form, args); + format(_bput, (intptr_t)&bb, form, args); va_end(args); if (bb.cnt < BFSIZ) _bflush(&bb); Modified: trunk/reactos/sdk/tools/mkisofs/schilytools/libschily/jssnprintf.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/sdk/tools/mkisofs/schilyto…
============================================================================== --- trunk/reactos/sdk/tools/mkisofs/schilytools/libschily/jssnprintf.c [iso-8859-1] (original) +++ trunk/reactos/sdk/tools/mkisofs/schilytools/libschily/jssnprintf.c [iso-8859-1] Mon Jul 24 18:37:25 2017 @@ -33,12 +33,12 @@ #ifdef PROTOTYPES static void -_cput(char c, long l) +_cput(char c, intptr_t l) #else static void _cput(c, l) char c; - long l; + intptr_t l; #endif { register BUF bp = (BUF)l; @@ -78,7 +78,7 @@ #else va_start(args); #endif - cnt = format(_cput, (long)&bb, form, args); + cnt = format(_cput, (intptr_t)&bb, form, args); va_end(args); if (maxcnt > 0) *(bb.ptr) = '\0';
7 years, 5 months
1
0
0
0
[pschweitzer] 75398: [RDBSS] - Implement __RxWriteReleaseResources(), RxCommonWrite(), RxCompleteMdl(), RxGetTopIrpIfRdbssIrp(), RxLowIoWriteShell(), RxLowIoWriteShellCompletion() - Finish implemen...
by pschweitzer@svn.reactos.org
Author: pschweitzer Date: Mon Jul 24 17:05:05 2017 New Revision: 75398 URL:
http://svn.reactos.org/svn/reactos?rev=75398&view=rev
Log: [RDBSS] - Implement __RxWriteReleaseResources(), RxCommonWrite(), RxCompleteMdl(), RxGetTopIrpIfRdbssIrp(), RxLowIoWriteShell(), RxLowIoWriteShellCompletion() - Finish implementation of RxCommonCleanup() so that it handles setting EOF on a file - Finish implementation of RxCommonCreate() so that it handles sharing violations and attempts to scavenge open files [RXCE] - Implement RxpScavengeFobxs(), RxpTrackDereference(), RxpTrackReference(), RxPurgeFobx(), RxPurgeRelatedFobxs(), RxReinitializeContext(), RxSetFileSizeWithLock(), RxScavengeFobxsForNetRoot() - Fix a bug in RxPrefixTableLookupName() where it was badly handling nodes in scavenger This commits brings several improvments to the NFS driver. First of all, now, the driver handles creating, extending and writing to files! It also handles purging dormant opened files when a file opening fails because of a sharing violation Finally, it also brings something to look at our references issues in RDBSS to help finding out why our FCB are never (or nearly) dereferenced CORE-8204 CORE-11327 CORE-13581 Modified: trunk/reactos/sdk/include/ddk/fcb.h trunk/reactos/sdk/include/ddk/mrx.h trunk/reactos/sdk/include/ddk/rxcontx.h trunk/reactos/sdk/include/ddk/rxprocs.h trunk/reactos/sdk/include/ddk/scavengr.h trunk/reactos/sdk/lib/drivers/rdbsslib/rdbss.c trunk/reactos/sdk/lib/drivers/rxce/rxce.c Modified: trunk/reactos/sdk/include/ddk/fcb.h URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/sdk/include/ddk/fcb.h?rev=…
============================================================================== --- trunk/reactos/sdk/include/ddk/fcb.h [iso-8859-1] (original) +++ trunk/reactos/sdk/include/ddk/fcb.h [iso-8859-1] Mon Jul 24 17:05:05 2017 @@ -296,6 +296,9 @@ #define FOBX_FLAG_UNC_NAME 0x2000000 #define FOBX_FLAG_ENCLOSED_ALLOCATED 0x4000000 #define FOBX_FLAG_MARKED_AS_DORMANT 0x8000000 +#ifdef __REACTOS__ +#define FOBX_FLAG_DISABLE_COLLAPSING 0x20000000 +#endif typedef struct _FOBX { @@ -349,6 +352,7 @@ #define RDBSS_REF_TRACK_NETFCB 0x00000010 #define RDBSS_REF_TRACK_SRVOPEN 0x00000020 #define RX_PRINT_REF_TRACKING 0x40000000 +#define RX_LOG_REF_TRACKING 0x80000000 extern ULONG RdbssReferenceTracingValue; @@ -367,12 +371,21 @@ _In_ PVOID Instance); #define REF_TRACING_ON(TraceMask) (TraceMask & RdbssReferenceTracingValue) +#ifndef __REACTOS__ #define PRINT_REF_COUNT(TYPE, Count) \ if (REF_TRACING_ON( RDBSS_REF_TRACK_ ## TYPE) && \ (RdbssReferenceTracingValue & RX_PRINT_REF_TRACKING)) \ { \ DbgPrint("%ld\n", Count); \ } +#else +#define PRINT_REF_COUNT(TYPE, Count) \ + if (REF_TRACING_ON( RDBSS_REF_TRACK_ ## TYPE) && \ + (RdbssReferenceTracingValue & RX_PRINT_REF_TRACKING)) \ + { \ + DbgPrint("(%s:%d) %s: %ld\n", __FILE__, __LINE__, #TYPE, Count); \ + } +#endif #define RxReferenceSrvCall(SrvCall) \ RxpTrackReference(RDBSS_REF_TRACK_SRVCALL, __FILE__, __LINE__, SrvCall); \ @@ -499,6 +512,11 @@ #define RxWaitForStableVNetRoot(V, R) RxWaitForStableCondition(&(V)->Condition, &(V)->TransitionWaitList, (R), NULL) #define RxTransitionVNetRoot(V, C) RxUpdateCondition((C), &(V)->Condition, &(V)->TransitionWaitList) + +VOID +RxSetFileSizeWithLock( + _Inout_ PFCB Fcb, + _In_ PLONGLONG FileSize); VOID RxGetFileSizeWithLock( Modified: trunk/reactos/sdk/include/ddk/mrx.h URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/sdk/include/ddk/mrx.h?rev=…
============================================================================== --- trunk/reactos/sdk/include/ddk/mrx.h [iso-8859-1] (original) +++ trunk/reactos/sdk/include/ddk/mrx.h [iso-8859-1] Mon Jul 24 17:05:05 2017 @@ -323,6 +323,8 @@ #define LOWIO_CONTEXT_FLAG_CAN_COMPLETE_AT_DPC_LEVEL 0x08 #define LOWIO_READWRITEFLAG_PAGING_IO 0x01 +#define LOWIO_READWRITEFLAG_EXTENDING_FILESIZE 0x02 +#define LOWIO_READWRITEFLAG_EXTENDING_VDL 0x04 #define RDBSS_MANAGE_SRV_CALL_EXTENSION 0x01 #define RDBSS_MANAGE_NET_ROOT_EXTENSION 0x02 Modified: trunk/reactos/sdk/include/ddk/rxcontx.h URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/sdk/include/ddk/rxcontx.h?…
============================================================================== --- trunk/reactos/sdk/include/ddk/rxcontx.h [iso-8859-1] (original) +++ trunk/reactos/sdk/include/ddk/rxcontx.h [iso-8859-1] Mon Jul 24 17:05:05 2017 @@ -36,6 +36,10 @@ _In_ ULONG Flags); #define RxInitializeTopLevelIrpContext(a,b,c) __RxInitializeTopLevelIrpContext(a,b,c,0) + +PIRP +RxGetTopIrpIfRdbssIrp( + VOID); PRDBSS_DEVICE_OBJECT RxGetTopDeviceObjectIfRdbssIrp( @@ -307,6 +311,14 @@ RX_CONTEXT_FLAG_MINIRDR_INITIATED = 0x80000000, } RX_CONTEXT_FLAGS; +#define RX_CONTEXT_PRESERVED_FLAGS (RX_CONTEXT_FLAG_FROM_POOL | \ + RX_CONTEXT_FLAG_MUST_SUCCEED_ALLOCATED | \ + RX_CONTEXT_FLAG_IN_FSP) + +#define RX_CONTEXT_INITIALIZATION_FLAGS (RX_CONTEXT_FLAG_WAIT | \ + RX_CONTEXT_FLAG_MUST_SUCCEED | \ + RX_CONTEXT_FLAG_MUST_SUCCEED_NONBLOCKING) + typedef enum { RX_CONTEXT_CREATE_FLAG_UNC_NAME = 0x1, @@ -328,6 +340,23 @@ RXCONTEXT_FLAG4LOWIO_LOCK_OPERATION_COMPLETED = 0x100, RXCONTEXT_FLAG4LOWIO_LOCK_BUFFERED_ON_ENTRY = 0x200 } RX_CONTEXT_LOWIO_FLAGS; + +#if DBG +#define RxSaveAndSetExceptionNoBreakpointFlag(R, F) \ +{ \ + F = FlagOn(R->Flags, RX_CONTEXT_FLAG_NO_EXCEPTION_BREAKPOINT); \ + SetFlag(R->Flags, RX_CONTEXT_FLAG_NO_EXCEPTION_BREAKPOINT); \ +} + +#define RxRestoreExceptionNoBreakpointFlag(R, F) \ +{ \ + ClearFlag(R->Flags, RX_CONTEXT_FLAG_NO_EXCEPTION_BREAKPOINT); \ + SetFlag(R->Flags, F); \ +} +#else +#define RxSaveAndSetExceptionNoBreakpointFlag(R, F) +#define RxRestoreExceptionNoBreakpointFlag(R, F) +#endif #if DBG VOID @@ -470,6 +499,11 @@ RxDereferenceAndDeleteRxContext_Real( _In_ PRX_CONTEXT RxContext); +VOID +NTAPI +RxReinitializeContext( + _Inout_ PRX_CONTEXT RxContext); + #if DBG #define RxDereferenceAndDeleteRxContext(RXCONTEXT) \ { \ Modified: trunk/reactos/sdk/include/ddk/rxprocs.h URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/sdk/include/ddk/rxprocs.h?…
============================================================================== --- trunk/reactos/sdk/include/ddk/rxprocs.h [iso-8859-1] (original) +++ trunk/reactos/sdk/include/ddk/rxprocs.h [iso-8859-1] Mon Jul 24 17:05:05 2017 @@ -222,6 +222,7 @@ } \ RxTrackPagingIoResource(Fcb, 1, __LINE__, __FILE__) +#ifndef __REACTOS__ #define RxAcquirePagingIoResourceShared(RxContext, Fcb, Flag) \ ExAcquireResourceSharedLite((Fcb)->Header.PagingIoResource, Flag); \ if (AcquiredFile) \ @@ -232,6 +233,21 @@ } \ RxTrackPagingIoResource(Fcb, 2, __LINE__, __FILE__); \ } +#else +#define RxAcquirePagingIoResourceShared(RxContext, Fcb, Flag) \ + { \ + BOOLEAN AcquiredFile; \ + AcquiredFile = ExAcquireResourceSharedLite((Fcb)->Header.PagingIoResource, Flag); \ + if (AcquiredFile) \ + { \ + if (RxContext != NULL) \ + { \ + ((PRX_CONTEXT)RxContext)->FcbPagingIoResourceAcquired = TRUE; \ + } \ + RxTrackPagingIoResource(Fcb, 2, __LINE__, __FILE__); \ + } \ + } +#endif #define RxReleasePagingIoResource(RxContext, Fcb) \ RxTrackPagingIoResource(Fcb, 3, __LINE__, __FILE__); \ @@ -249,6 +265,26 @@ } \ ExReleaseResourceForThreadLite((Fcb)->Header.PagingIoResource, (Thread)) +#ifdef __REACTOS__ +VOID +__RxWriteReleaseResources( + PRX_CONTEXT RxContext, + BOOLEAN ResourceOwnerSet +#ifdef RDBSS_TRACKER + , + ULONG LineNumber, + PCSTR FileName, + ULONG SerialNumber +#endif + ); + +#ifdef RDBSS_TRACKER +#define RxWriteReleaseResources(R, B) __RxWriteReleaseResources((R), (B), __LINE__, __FILE__, 0) +#else +#define RxWriteReleaseResources(R, B) __RxWriteReleaseResources((R), (B)) +#endif +#endif + BOOLEAN NTAPI RxAcquireFcbForLazyWrite( @@ -294,6 +330,7 @@ _In_ PIRP Irp); VOID +NTAPI RxAddToWorkque( _In_ PRX_CONTEXT RxContext, _In_ PIRP Irp); @@ -574,6 +611,10 @@ RxPurgeFobxFromCache( PFOBX FobxToBePurged); +BOOLEAN +RxPurgeFobx( + PFOBX pFobx); + VOID RxUndoScavengerFinalizationMarking( PVOID Instance); @@ -745,4 +786,10 @@ _In_ PDEVICE_OBJECT DeviceObject, _In_ PIRP Irp); -#endif +#ifdef __REACTOS__ +#define RxWriteCacheingAllowed(F, S) ( \ + BooleanFlagOn((F)->FcbState, FCB_STATE_WRITECACHING_ENABLED) && \ + !BooleanFlagOn((S)->Flags, SRVOPEN_FLAG_DONTUSE_WRITE_CACHING)) +#endif + +#endif Modified: trunk/reactos/sdk/include/ddk/scavengr.h URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/sdk/include/ddk/scavengr.h…
============================================================================== --- trunk/reactos/sdk/include/ddk/scavengr.h [iso-8859-1] (original) +++ trunk/reactos/sdk/include/ddk/scavengr.h [iso-8859-1] Mon Jul 24 17:05:05 2017 @@ -34,6 +34,16 @@ VOID RxMarkFobxOnClose( _In_ PFOBX Fobx); + +NTSTATUS +RxPurgeRelatedFobxs( + PNET_ROOT NetRoot, + PRX_CONTEXT RxContext, + BOOLEAN AttemptFinalization, + PFCB PurgingFcb); + +#define DONT_ATTEMPT_FINALIZE_ON_PURGE FALSE +#define ATTEMPT_FINALIZE_ON_PURGE TRUE typedef enum _RDBSS_SCAVENGER_STATE { @@ -117,6 +127,12 @@ _In_ PFCB Fcb); VOID +RxScavengeFobxsForNetRoot( + PNET_ROOT NetRoot, + PFCB PurgingFcb, + BOOLEAN SynchronizeWithScavenger); + +VOID RxpMarkInstanceForScavengedFinalization( PVOID Instance); Modified: trunk/reactos/sdk/lib/drivers/rdbsslib/rdbss.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/sdk/lib/drivers/rdbsslib/r…
============================================================================== --- trunk/reactos/sdk/lib/drivers/rdbsslib/rdbss.c [iso-8859-1] (original) +++ trunk/reactos/sdk/lib/drivers/rdbsslib/rdbss.c [iso-8859-1] Mon Jul 24 17:05:05 2017 @@ -342,6 +342,15 @@ NTSTATUS NTAPI RxLowIoReadShellCompletion( + PRX_CONTEXT RxContext); + +NTSTATUS +RxLowIoWriteShell( + IN PRX_CONTEXT RxContext); + +NTSTATUS +NTAPI +RxLowIoWriteShellCompletion( PRX_CONTEXT RxContext); PVOID @@ -566,6 +575,7 @@ KSPIN_LOCK TopLevelIrpSpinLock; LIST_ENTRY TopLevelIrpAllocatedContextsList; BOOLEAN RxForceQFIPassThrough = FALSE; +BOOLEAN RxNoAsync = FALSE; DECLARE_CONST_UNICODE_STRING(unknownId, L"???"); @@ -648,6 +658,59 @@ } } +/* + * @implemented + */ +VOID +__RxWriteReleaseResources( + PRX_CONTEXT RxContext, + BOOLEAN ResourceOwnerSet, + ULONG LineNumber, + PCSTR FileName, + ULONG SerialNumber) +{ + PFCB Fcb; + + PAGED_CODE(); + + ASSERT(RxContext != NULL); + + Fcb = (PFCB)RxContext->pFcb; + ASSERT(Fcb != NULL); + + /* If FCB resource was acquired, release it */ + if (RxContext->FcbResourceAcquired) + { + /* Taking care of owner */ + if (ResourceOwnerSet) + { + RxReleaseFcbForThread(RxContext, Fcb, RxContext->LowIoContext.ResourceThreadId); + } + else + { + RxReleaseFcb(RxContext, Fcb); + } + + RxContext->FcbResourceAcquired = FALSE; + } + + /* If FCB paging resource was acquired, release it */ + if (RxContext->FcbPagingIoResourceAcquired) + { + /* Taking care of owner */ + if (ResourceOwnerSet) + { + RxReleasePagingIoResourceForThread(RxContext, Fcb, RxContext->LowIoContext.ResourceThreadId); + } + else + { + RxReleasePagingIoResource(RxContext, Fcb); + } + + /* No need to release boolean here, RxReleasePagingIoResource() takes care of it */ + } +} + NTSTATUS NTAPI RxAcquireExclusiveFcbResourceInMRx( @@ -718,6 +781,7 @@ * @implemented */ VOID +NTAPI RxAddToWorkque( IN PRX_CONTEXT RxContext, IN PIRP Irp) @@ -1514,7 +1578,7 @@ RxDereferenceAndDeleteRxContext(LocalContext); } - return STATUS_SUCCESS; + return STATUS_SUCCESS; } ASSERT(RxIsFcbAcquiredExclusive(Fcb)); @@ -1735,6 +1799,9 @@ return Status; } +/* + * @implemented + */ NTSTATUS NTAPI RxCommonCleanup( @@ -2035,11 +2102,49 @@ RxRemoveShareAccess(FileObject, &Fcb->ShareAccess, "Cleanup the share access", "ClnUpShr"); } - /* In case there's caching, on a file, update file metadata */ - if (NodeType(Fcb) == RDBSS_NTC_STORAGE_TYPE_FILE && BooleanFlagOn(Fobx->Flags, 0x20000000) && - BooleanFlagOn(Fcb->FcbState, FCB_STATE_WRITECACHING_ENABLED) && !BooleanFlagOn(Fobx->pSrvOpen->Flags, SRVOPEN_FLAG_DONTUSE_WRITE_CACHING)) - { - UNIMPLEMENTED; + /* In case there's caching, on a file, and we were asked to drop collapsing, handle it */ + if (NodeType(Fcb) == RDBSS_NTC_STORAGE_TYPE_FILE && BooleanFlagOn(Fobx->Flags, FOBX_FLAG_DISABLE_COLLAPSING) && + RxWriteCacheingAllowed(Fcb, Fobx->pSrvOpen)) + { + NTSTATUS InternalStatus; + PRX_CONTEXT InternalContext; + + /* If we can properly set EOF, there's no need to drop collapsing, try to do it */ + InternalStatus = STATUS_UNSUCCESSFUL; + InternalContext = RxCreateRxContext(Context->CurrentIrp, + Fcb->RxDeviceObject, + RX_CONTEXT_FLAG_WAIT | RX_CONTEXT_FLAG_MUST_SUCCEED_NONBLOCKING); + if (InternalContext != NULL) + { + FILE_END_OF_FILE_INFORMATION FileEOF; + + InternalStatus = STATUS_SUCCESS; + + /* Initialize the context for file information set */ + InternalContext->pFcb = RX_GET_MRX_FCB(Fcb); + InternalContext->pFobx = (PMRX_FOBX)Fobx; + InternalContext->pRelevantSrvOpen = Fobx->pSrvOpen; + + /* Get EOF from the FCB */ + FileEOF.EndOfFile.QuadPart = Fcb->Header.FileSize.QuadPart; + InternalContext->Info.FileInformationClass = FileEndOfFileInformation; + InternalContext->Info.Buffer = &FileEOF; + InternalContext->Info.Length = sizeof(FileEOF); + + /* Call the mini-rdr */ + MINIRDR_CALL_THROUGH(InternalStatus, Fcb->MRxDispatch, MRxSetFileInfo, (InternalContext)); + + /* We're done */ + RxDereferenceAndDeleteRxContext(InternalContext); + } + + /* We tried, so, clean the FOBX flag */ + ClearFlag(Fobx->Flags, FOBX_FLAG_DISABLE_COLLAPSING); + /* If it failed, then, disable collapsing on the FCB */ + if (!NT_SUCCESS(InternalStatus)) + { + ClearFlag(Fcb->FcbState, FCB_STATE_COLLAPSING_ENABLED); + } } /* We're clean! */ @@ -2219,6 +2324,9 @@ #undef BugCheckFileId } +/* + * @implemented + */ NTSTATUS NTAPI RxCommonCreate( @@ -2341,7 +2449,65 @@ Status = RxCreateFromNetRoot(Context, &NetRootName); if (Status == STATUS_SHARING_VIOLATION) { - UNIMPLEMENTED; + ASSERT(!BooleanFlagOn(Context->Create.Flags, RX_CONTEXT_CREATE_FLAG_REPARSE)); + + /* If that happens for file creation, fail for real */ + if (Context->Create.NtCreateParameters.Disposition == FILE_CREATE) + { + Status = STATUS_OBJECT_NAME_COLLISION; + } + else + { + /* Otherwise, if possible, attempt to scavenger current FOBX + * to check whether a dormant FOBX is the reason for sharing violation + */ + if (Context->Create.TryForScavengingOnSharingViolation && + !Context->Create.ScavengingAlreadyTried) + { + /* Only doable with a VNetRoot */ + if (Context->Create.pVNetRoot != NULL) + { + PV_NET_ROOT VNetRoot; + NT_CREATE_PARAMETERS SavedParameters; + + /* Save create parameters */ + RtlCopyMemory(&SavedParameters, &Context->Create.NtCreateParameters, sizeof(NT_CREATE_PARAMETERS)); + + /* Reference the VNetRoot for the scavenging time */ + VNetRoot = (PV_NET_ROOT)Context->Create.pVNetRoot; + RxReferenceVNetRoot(VNetRoot); + + /* Prepare the RX_CONTEXT for reuse */ + RxpPrepareCreateContextForReuse(Context); + RxReinitializeContext(Context); + + /* Copy what we saved */ + RtlCopyMemory(&Context->Create.NtCreateParameters, &SavedParameters, sizeof(NT_CREATE_PARAMETERS)); + + /* And recopy what can be */ + RxCopyCreateParameters(Context); + + /* And start purging, then scavenging FOBX */ + RxPurgeRelatedFobxs((PNET_ROOT)VNetRoot->pNetRoot, Context, + DONT_ATTEMPT_FINALIZE_ON_PURGE, NULL); + RxScavengeFobxsForNetRoot((PNET_ROOT)VNetRoot->pNetRoot, + NULL, TRUE); + + /* Ask for a second round */ + Status = STATUS_MORE_PROCESSING_REQUIRED; + + /* Keep track we already scavenged */ + Context->Create.ScavengingAlreadyTried = TRUE; + + /* Reference our SRV_CALL for CBS handling */ + RxReferenceSrvCall(VNetRoot->pNetRoot->pSrvCall); + RxpProcessChangeBufferingStateRequests((PSRV_CALL)VNetRoot->pNetRoot->pSrvCall, FALSE); + + /* Drop our extra reference */ + RxDereferenceVNetRoot(VNetRoot, LHS_LockNotHeld); + } + } + } } else if (Status == STATUS_REPARSE) { @@ -2589,6 +2755,18 @@ RxCommonFileSystemControl( PRX_CONTEXT Context) { + PIRP Irp; + ULONG ControlCode; + PIO_STACK_LOCATION Stack; + + PAGED_CODE(); + + Irp = Context->CurrentIrp; + Stack = Context->CurrentIrpSp; + ControlCode = Stack->Parameters.FileSystemControl.FsControlCode; + + DPRINT1("RxCommonFileSystemControl: %p, %p, %d, %lx\n", Context, Irp, Stack->MinorFunction, ControlCode); + UNIMPLEMENTED; return STATUS_NOT_IMPLEMENTED; } @@ -3405,21 +3583,978 @@ NTSTATUS NTAPI RxCommonWrite( - PRX_CONTEXT Context) -{ - UNIMPLEMENTED; - return STATUS_NOT_IMPLEMENTED; -} - + PRX_CONTEXT RxContext) +{ + PIRP Irp; + PFCB Fcb; + PFOBX Fobx; + NTSTATUS Status; + PNET_ROOT NetRoot; + PSRV_OPEN SrvOpen; + PFILE_OBJECT FileObject; + PIO_STACK_LOCATION Stack; + LARGE_INTEGER ByteOffset; + NODE_TYPE_CODE NodeTypeCode; + PLOWIO_CONTEXT LowIoContext; + PRDBSS_DEVICE_OBJECT RxDeviceObject; + ULONG WriteLength, CapturedRxContextSerialNumber = RxContext->SerialNumber; + LONGLONG FileSize, ValidDataLength, InitialFileSize, InitialValidDataLength; + BOOLEAN CanWait, PagingIo, NoCache, Sync, NormalFile, WriteToEof, IsPipe, NoPreposting, InFsp, RecursiveWriteThrough, CalledByLazyWriter, SwitchBackToAsync, ExtendingFile, ExtendingValidData, UnwindOutstandingAsync, ResourceOwnerSet, PostIrp, ContextReferenced; + + PAGED_CODE(); + + Fcb = (PFCB)RxContext->pFcb; + NodeTypeCode = NodeType(Fcb); + /* Validate FCB type */ + if (NodeTypeCode != RDBSS_NTC_STORAGE_TYPE_FILE && NodeTypeCode != RDBSS_NTC_VOLUME_FCB && + NodeTypeCode != RDBSS_NTC_SPOOLFILE && NodeTypeCode != RDBSS_NTC_MAILSLOT) + { + return STATUS_INVALID_DEVICE_REQUEST; + } + + /* We'll write to file, keep track of it */ + Fcb->IsFileWritten = TRUE; + + Stack = RxContext->CurrentIrpSp; + /* Set write through if asked */ + if (BooleanFlagOn(Stack->Flags, SL_WRITE_THROUGH)) + { + SetFlag(RxContext->Flags, RX_CONTEXT_FLAG_WRITE_THROUGH); + } + + Fobx = (PFOBX)RxContext->pFobx; + DPRINT("RxCommonWrite(%p) FOBX: %p, FCB: %p\n", RxContext, Fobx, Fcb); + + /* Get some parameters */ + Irp = RxContext->CurrentIrp; + NoPreposting = BooleanFlagOn(RxContext->Flags, RX_CONTEXT_FLAG_NO_PREPOSTING_NEEDED); + InFsp = BooleanFlagOn(RxContext->Flags, RX_CONTEXT_FLAG_IN_FSP); + CanWait = BooleanFlagOn(RxContext->Flags, RX_CONTEXT_FLAG_WAIT); + PagingIo = BooleanFlagOn(Irp->Flags, IRP_PAGING_IO); + NoCache = BooleanFlagOn(Irp->Flags, IRP_NOCACHE); + Sync = !BooleanFlagOn(RxContext->Flags, RX_CONTEXT_FLAG_ASYNC_OPERATION); + WriteLength = Stack->Parameters.Write.Length; + ByteOffset.QuadPart = Stack->Parameters.Write.ByteOffset.QuadPart; + DPRINT("Writing: %lx@%I64x %s %s %s %s\n", WriteLength, ByteOffset.QuadPart, + (CanWait ? "CW" : "!CW"), (PagingIo ? "PI" : "!PI"), (NoCache ? "NC" : "!NC"), (Sync ? "S" : "!S")); + + RxItsTheSameContext(); + + RxContext->FcbResourceAcquired = FALSE; + RxContext->FcbPagingIoResourceAcquired = FALSE; + + LowIoContext = &RxContext->LowIoContext; + CheckForLoudOperations(RxContext); + if (BooleanFlagOn(LowIoContext->Flags, LOWIO_CONTEXT_FLAG_LOUDOPS)) + { + DPRINT("LoudWrite %I64x/%lx on %lx vdl/size/alloc %I64x/%I64x/%I64x\n", + ByteOffset, WriteLength, + Fcb, Fcb->Header.ValidDataLength, Fcb->Header.FileSize, Fcb->Header.AllocationSize); + } + + RxDeviceObject = RxContext->RxDeviceObject; + /* Update stats */ + if (!BooleanFlagOn(RxContext->Flags, RX_CONTEXT_FLAG_IN_FSP) && Fcb->CachedNetRootType == NET_ROOT_DISK) + { + InterlockedIncrement((volatile long *)&RxDeviceObject->WriteOperations); + + if (ByteOffset.QuadPart != Fobx->Specific.DiskFile.PredictedWriteOffset) + { + InterlockedIncrement((volatile long *)&RxDeviceObject->RandomWriteOperations); + } + Fobx->Specific.DiskFile.PredictedWriteOffset = ByteOffset.QuadPart + WriteLength; + + if (PagingIo) + { + ExInterlockedAddLargeStatistic(&RxDeviceObject->PagingWriteBytesRequested, WriteLength); + } + else if (NoCache) + { + ExInterlockedAddLargeStatistic(&RxDeviceObject->NonPagingWriteBytesRequested, WriteLength); + } + else + { + ExInterlockedAddLargeStatistic(&RxDeviceObject->CacheWriteBytesRequested, WriteLength); + } + } + + NetRoot = (PNET_ROOT)Fcb->NetRoot; + IsPipe = (NetRoot->Type == NET_ROOT_PIPE); + /* Keep track for normal writes */ + if (NetRoot->Type == NET_ROOT_DISK || NetRoot->Type == NET_ROOT_WILD) + { + NormalFile = TRUE; + } + else + { + NormalFile = FALSE; + } + + /* Zero-length write is immediate success */ + if (NormalFile && WriteLength == 0) + { + return STATUS_SUCCESS; + } + + /* Check whether we have input data */ + if (Irp->UserBuffer == NULL && Irp->MdlAddress == NULL) + { + return STATUS_INVALID_PARAMETER; + } + + /* Are we writting to EOF? */ + WriteToEof = ((ByteOffset.LowPart == FILE_WRITE_TO_END_OF_FILE) && (ByteOffset.HighPart == -1)); + /* FIXME: validate length/offset */ + + /* Get our SRV_OPEN in case of normal write */ + if (Fobx != NULL) + { + SrvOpen = (PSRV_OPEN)Fobx->pSrvOpen; + } + else + { + SrvOpen = NULL; + } + + FileObject = Stack->FileObject; + + /* If we have caching enabled, check whether we have to defer write */ + if (!NoCache) + { + if (RxWriteCacheingAllowed(Fcb, SrvOpen)) + { + if (!CcCanIWrite(FileObject, WriteLength, + (CanWait && !BooleanFlagOn(RxContext->Flags, RX_CONTEXT_FLAG_IN_FSP)), + BooleanFlagOn(RxContext->Flags, RX_CONTEXT_FLAG_DEFERRED_WRITE))) + { + BOOLEAN Retrying; + + Retrying = BooleanFlagOn(RxContext->Flags, RX_CONTEXT_FLAG_DEFERRED_WRITE); + + RxPrePostIrp(RxContext, Irp); + + SetFlag(RxContext->Flags, RX_CONTEXT_FLAG_DEFERRED_WRITE); + + CcDeferWrite(FileObject, (PCC_POST_DEFERRED_WRITE)RxAddToWorkque, RxContext, Irp, WriteLength, Retrying); + + return STATUS_PENDING; + } + } + } + + /* Initialize the low IO context for write */ + RxInitializeLowIoContext(LowIoContext, LOWIO_OP_WRITE); + + /* Initialize our (many) booleans */ + RecursiveWriteThrough = FALSE; + CalledByLazyWriter = FALSE; + SwitchBackToAsync = FALSE; + ExtendingFile = FALSE; + ExtendingValidData = FALSE; + UnwindOutstandingAsync = FALSE; + ResourceOwnerSet = FALSE; + PostIrp = FALSE; + ContextReferenced = FALSE; + +#define _SEH2_TRY_RETURN(S) S; goto try_exit + + _SEH2_TRY + { + /* No volume FCB here! */ + ASSERT((NodeTypeCode == RDBSS_NTC_STORAGE_TYPE_FILE) || + (NodeTypeCode == RDBSS_NTC_SPOOLFILE) || + (NodeTypeCode == RDBSS_NTC_MAILSLOT)); + + /* Writing to EOF on a paging file is non sense */ + ASSERT(!(WriteToEof && PagingIo)); + + RxItsTheSameContext(); + + /* Start locking stuff */ + if (!PagingIo && !NoPreposting) + { + /* If it's already acquired, all fine */ + if (RxContext->FcbResourceAcquired) + { + ASSERT(!IsPipe); + } + else + { + /* Otherwise, try to acquire shared (excepted for pipes) */ + if (IsPipe) + { + Status = RxAcquireExclusiveFcb(RxContext, Fcb); + } + else if (CanWait || + (!NoCache && RxWriteCacheingAllowed(Fcb, SrvOpen))) + { + Status = RxAcquireSharedFcb(RxContext, Fcb); + } + else + { + Status = RxAcquireSharedFcbWaitForEx(RxContext, Fcb); + } + + /* We'll post IRP to retry */ + if (Status == STATUS_LOCK_NOT_GRANTED) + { + PostIrp = TRUE; + DPRINT1("Failed to acquire lock!\n"); + _SEH2_TRY_RETURN(Status); + } + + /* We'll just fail */ + if (Status != STATUS_SUCCESS) + { + _SEH2_TRY_RETURN(Status); + } + + /* Resource acquired */ + RxContext->FcbResourceAcquired = TRUE; + } + + /* At that point, resource is acquired */ + if (IsPipe) + { + ASSERT(RxContext->FcbResourceAcquired); + } + else + { + BOOLEAN IsDormant; + + /* Now, check whether we have to promote shared lock */ + if (NodeTypeCode == RDBSS_NTC_STORAGE_TYPE_FILE && Fobx != NULL) + { + IsDormant = BooleanFlagOn(Fobx->Flags, FOBX_FLAG_MARKED_AS_DORMANT); + } + else + { + IsDormant = FALSE; + } + + /* We're writing beyond VDL, we'll need an exclusive lock if not dormant */ + if (RxIsFcbAcquiredShared(Fcb) && + ByteOffset.QuadPart + WriteLength > Fcb->Header.ValidDataLength.QuadPart) + { + if (!IsDormant) + { + RxReleaseFcb(RxContext, Fcb); + RxContext->FcbResourceAcquired = FALSE; + + Status = RxAcquireExclusiveFcb(RxContext, Fcb); + if (Status == STATUS_LOCK_NOT_GRANTED) + { + PostIrp = TRUE; + DPRINT1("Failed to acquire lock!\n"); + _SEH2_TRY_RETURN(Status); + } + + if (Status != STATUS_SUCCESS) + { + _SEH2_TRY_RETURN(Status); + } + + RxContext->FcbResourceAcquired = TRUE; + } + } + + /* If we're writing in VDL, or if we're dormant, shared lock is enough */ + if (ByteOffset.QuadPart + WriteLength <= Fcb->Header.ValidDataLength.QuadPart || + IsDormant) + { + if (RxIsFcbAcquiredExclusive(Fcb)) + { + RxConvertToSharedFcb(RxContext, Fcb); + } + } + else + { + /* We're extending file, disable collapsing */ + ASSERT(RxIsFcbAcquiredExclusive(Fcb)); + + DPRINT("Disabling collapsing\n"); + + if (NodeTypeCode == RDBSS_NTC_STORAGE_TYPE_FILE && Fobx != NULL) + { + SetFlag(Fobx->Flags, FOBX_FLAG_DISABLE_COLLAPSING); + } + } + + ASSERT(RxContext->FcbResourceAcquired); + } + + /* Keep track of the acquired resource */ + LowIoContext->Resource = Fcb->Header.Resource; + } + else + { + /* Paging IO */ + ASSERT(!IsPipe); + + /* Lock the paging resource */ + RxAcquirePagingIoResourceShared(RxContext, Fcb, TRUE); + + /* Keep track of the acquired resource */ + LowIoContext->Resource = Fcb->Header.PagingIoResource; + } + + if (IsPipe) + { + UNIMPLEMENTED; + _SEH2_TRY_RETURN(Status = STATUS_NOT_IMPLEMENTED); + } + + /* If it's a non cached write, or if caching is disallowed */ + if (NoCache || !RxWriteCacheingAllowed(Fcb, SrvOpen)) + { + /* If cache was previously enabled, we'll have to flush before writing */ + if (!PagingIo && Fcb->NonPaged->SectionObjectPointers.DataSectionObject != NULL) + { + LARGE_INTEGER FlushOffset; + + /* FCB is lock */ + ASSERT(RxIsFcbAcquiredExclusive(Fcb) || RxIsFcbAcquiredShared(Fcb)); + + /* If shared, we'll have to relock exclusive */ + if (!RxIsFcbAcquiredExclusive(Fcb)) + { + /* Release and retry exclusive */ + RxReleaseFcb(RxContext, Fcb); + RxContext->FcbResourceAcquired = FALSE; + + Status = RxAcquireExclusiveFcb(RxContext, Fcb); + if (Status == STATUS_LOCK_NOT_GRANTED) + { + PostIrp = TRUE; + DPRINT1("Failed to acquire lock for flush!\n"); + _SEH2_TRY_RETURN(Status); + } + + if (Status != STATUS_SUCCESS) + { + _SEH2_TRY_RETURN(Status); + } + + RxContext->FcbResourceAcquired = TRUE; + } + + /* Get the length to flush */ + if (WriteToEof) + { + RxGetFileSizeWithLock(Fcb, &FlushOffset.QuadPart); + } + else + { + FlushOffset.QuadPart = ByteOffset.QuadPart; + } + + /* Perform the flushing */ + RxAcquirePagingIoResource(RxContext, Fcb); + CcFlushCache(&Fcb->NonPaged->SectionObjectPointers, &FlushOffset, + WriteLength, &Irp->IoStatus); + RxReleasePagingIoResource(RxContext, Fcb); + + /* Cannot continue if flushing failed */ + if (!NT_SUCCESS(Irp->IoStatus.Status)) + { + _SEH2_TRY_RETURN(Status = Irp->IoStatus.Status); + } + + /* Synchronize */ + RxAcquirePagingIoResource(RxContext, Fcb); + RxReleasePagingIoResource(RxContext, Fcb); + + /* And purge */ + CcPurgeCacheSection(&Fcb->NonPaged->SectionObjectPointers, + &FlushOffset, WriteLength, FALSE); + } + } + + /* If not paging IO, check if write is allowed */ + if (!PagingIo) + { + if (!FsRtlCheckLockForWriteAccess(&Fcb->Specific.Fcb.FileLock, Irp)) + { + _SEH2_TRY_RETURN(Status = STATUS_FILE_LOCK_CONFLICT); + } + } + + /* Get file sizes */ + ValidDataLength = Fcb->Header.ValidDataLength.QuadPart; + RxGetFileSizeWithLock(Fcb, &FileSize); + ASSERT(ValidDataLength <= FileSize); + + /* If paging IO, we cannot write past file size + * so fix write length if needed + */ + if (PagingIo) + { + if (ByteOffset.QuadPart >= FileSize) + { + _SEH2_TRY_RETURN(Status = STATUS_SUCCESS); + } + + if (WriteLength > FileSize - ByteOffset.QuadPart) + { + WriteLength = FileSize - ByteOffset.QuadPart; + } + } + + /* If we're being called by the lazywrite */ + if (Fcb->Specific.Fcb.LazyWriteThread == PsGetCurrentThread()) + { + CalledByLazyWriter = TRUE; + + /* Fail if we're beyong VDL */ + if (BooleanFlagOn(Fcb->Header.Flags, FSRTL_FLAG_USER_MAPPED_FILE)) + { + if ((ByteOffset.QuadPart + WriteLength > ValidDataLength) && + (ByteOffset.QuadPart < FileSize)) + { + if (ByteOffset.QuadPart + WriteLength > ((ValidDataLength + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1))) + { + _SEH2_TRY_RETURN(Status = STATUS_FILE_LOCK_CONFLICT); + } + } + } + } + + /* If that's a recursive synchronous page write */ + if (BooleanFlagOn(Irp->Flags, IRP_SYNCHRONOUS_PAGING_IO) && + BooleanFlagOn(RxContext->Flags, RX_CONTEXT_FLAG_RECURSIVE_CALL)) + { + PIRP TopIrp; + + /* Check the top level IRP on the FastIO path */ + TopIrp = RxGetTopIrpIfRdbssIrp(); + if (TopIrp != NULL && (ULONG_PTR)TopIrp > FSRTL_FAST_IO_TOP_LEVEL_IRP) + { + PIO_STACK_LOCATION IrpStack; + + ASSERT(NodeType(TopIrp) == IO_TYPE_IRP); + + /* If the top level IRP was a cached write for this file, keep track */ + IrpStack = IoGetCurrentIrpStackLocation(TopIrp); + if (IrpStack->MajorFunction == IRP_MJ_WRITE && + IrpStack->FileObject->FsContext == FileObject->FsContext) + { + RecursiveWriteThrough = TRUE; + SetFlag(RxContext->Flags, RX_CONTEXT_FLAG_WRITE_THROUGH); + } + } + } + + /* Now, deal with file size and VDL */ + if (!CalledByLazyWriter && !RecursiveWriteThrough && + (WriteToEof || ByteOffset.QuadPart + WriteLength > ValidDataLength)) + { + /* Not sync? Let's make it sync, just the time we extended */ + if (!Sync) + { + CanWait = TRUE; + SetFlag(RxContext->Flags, RX_CONTEXT_FLAG_WAIT); + ClearFlag(RxContext->Flags, RX_CONTEXT_FLAG_ASYNC_OPERATION); + Sync = TRUE; + + /* Keep track we'll have to switch back to async */ + if (NoCache) + { + SwitchBackToAsync = TRUE; + } + } + + /* Release all the locks */ + RxWriteReleaseResources(RxContext, 0); + + /* Acquire exclusive */ + Status = RxAcquireExclusiveFcb(RxContext, Fcb); + if (Status == STATUS_LOCK_NOT_GRANTED) + { + PostIrp = TRUE; + DPRINT1("Failed to acquire lock for extension!\n"); + _SEH2_TRY_RETURN(Status); + } + + if (Status != STATUS_SUCCESS) + { + _SEH2_TRY_RETURN(Status); + } + + RxContext->FcbResourceAcquired = TRUE; + + RxItsTheSameContext(); + + /* Get the sizes again, to be sure they didn't change in the meantime */ + ValidDataLength = Fcb->Header.ValidDataLength.QuadPart; + RxGetFileSizeWithLock(Fcb, &FileSize); + ASSERT(ValidDataLength <= FileSize); + + /* Check we can switch back to async? */ + if ((SwitchBackToAsync && Fcb->NonPaged->SectionObjectPointers.DataSectionObject != NULL) || + (ByteOffset.QuadPart + WriteLength > FileSize) || RxNoAsync) + { + SwitchBackToAsync = FALSE; + } + + /* If paging IO, check we don't try to extend the file */ + if (PagingIo) + { + if (ByteOffset.QuadPart >= FileSize) + { + _SEH2_TRY_RETURN(Status = STATUS_SUCCESS); + } + + if (WriteLength > FileSize - ByteOffset.QuadPart) + { + WriteLength = FileSize - ByteOffset.QuadPart; + } + } + } + + /* Save our initial sizes for potential rollback */ + InitialFileSize = FileSize; + InitialValidDataLength = ValidDataLength; + /* If writing to EOF, update byte offset with file size */ + if (WriteToEof) + { + ByteOffset.QuadPart = FileSize; + } + + /* Check again whether we're allowed to write */ + if (!PagingIo) + { + if (!FsRtlCheckLockForWriteAccess(&Fcb->Specific.Fcb.FileLock, Irp )) + { + _SEH2_TRY_RETURN(Status = STATUS_FILE_LOCK_CONFLICT); + } + + /* Do we have to extend? */ + if (NormalFile && (ByteOffset.QuadPart + WriteLength > FileSize)) + { + DPRINT("Need to extend file\n"); + ExtendingFile = TRUE; + SetFlag(LowIoContext->ParamsFor.ReadWrite.Flags, LOWIO_READWRITEFLAG_EXTENDING_FILESIZE); + } + } + + /* Let's start to extend */ + if (ExtendingFile) + { + /* If we're past allocating, inform mini-rdr */ + FileSize = ByteOffset.QuadPart + WriteLength; + if (FileSize > Fcb->Header.AllocationSize.QuadPart) + { + LARGE_INTEGER NewAllocationSize; + + DPRINT("Extending %p\n", RxContext); + + if (NoCache) + { + C_ASSERT(sizeof(LONGLONG) == sizeof(LARGE_INTEGER)); + MINIRDR_CALL(Status, RxContext, Fcb->MRxDispatch, MRxExtendForNonCache, + (RxContext, (PLARGE_INTEGER)&FileSize, &NewAllocationSize)); + } + else + { + C_ASSERT(sizeof(LONGLONG) == sizeof(LARGE_INTEGER)); + MINIRDR_CALL(Status, RxContext, Fcb->MRxDispatch, MRxExtendForCache, + (RxContext, (PLARGE_INTEGER)&FileSize, &NewAllocationSize)); + } + + if (!NT_SUCCESS(Status)) + { + _SEH2_TRY_RETURN(Status); + } + + if (FileSize > NewAllocationSize.QuadPart) + { + NewAllocationSize.QuadPart = FileSize; + } + + /* And update FCB */ + Fcb->Header.AllocationSize.QuadPart = NewAllocationSize.QuadPart; + } + + /* Set the new sizes */ + RxSetFileSizeWithLock(Fcb, &FileSize); + RxAdjustAllocationSizeforCC(Fcb); + + /* And inform Cc */ + if (CcIsFileCached(FileObject)) + { + CcSetFileSizes(FileObject, (PCC_FILE_SIZES)&Fcb->Header.AllocationSize); + } + } + + /* Do we have to extend VDL? */ + if (!CalledByLazyWriter && !RecursiveWriteThrough) + { + if (WriteToEof || ByteOffset.QuadPart + WriteLength > ValidDataLength) + { + ExtendingValidData = TRUE; + SetFlag(LowIoContext->ParamsFor.ReadWrite.Flags, LOWIO_READWRITEFLAG_EXTENDING_VDL); + } + } + + /* If none cached write */ + if (PagingIo || NoCache || !RxWriteCacheingAllowed(Fcb, SrvOpen)) + { + /* Switch back to async, if asked to */ + if (SwitchBackToAsync) + { + CanWait = FALSE; + Sync = FALSE; + + ClearFlag(RxContext->Flags, RX_CONTEXT_FLAG_WAIT); + SetFlag(RxContext->Flags, RX_CONTEXT_FLAG_ASYNC_OPERATION); + } + + /* If not synchronous, keep track of writes to be finished */ + if (!Sync) + { + if (Fcb->NonPaged->OutstandingAsyncEvent == NULL) + { + Fcb->NonPaged->OutstandingAsyncEvent = &Fcb->NonPaged->TheActualEvent; + KeInitializeEvent(Fcb->NonPaged->OutstandingAsyncEvent, + NotificationEvent, FALSE); + } + + if (ExInterlockedAddUlong(&Fcb->NonPaged->OutstandingAsyncWrites, + 1, + &RxStrucSupSpinLock) == 0) + { + KeResetEvent(Fcb->NonPaged->OutstandingAsyncEvent); + } + + UnwindOutstandingAsync = TRUE; + LowIoContext->ParamsFor.ReadWrite.NonPagedFcb = Fcb->NonPaged; + } + + /* Set our LOWIO_CONTEXT information */ + LowIoContext->ParamsFor.ReadWrite.ByteOffset = ByteOffset.QuadPart; + LowIoContext->ParamsFor.ReadWrite.ByteCount = WriteLength; + + RxItsTheSameContext(); + + /* We have to be locked */ + ASSERT(RxContext->FcbResourceAcquired || RxContext->FcbPagingIoResourceAcquired); + + /* Update thread ID if we're in FSP */ + if (InFsp) + { + LowIoContext->ResourceThreadId = (ULONG_PTR)RxContext | 3; + + if (RxContext->FcbResourceAcquired) + { + ExSetResourceOwnerPointer(Fcb->Header.Resource, (PVOID)((ULONG_PTR)RxContext | 3)); + } + + if (RxContext->FcbPagingIoResourceAcquired) + { + ExSetResourceOwnerPointer(Fcb->Header.PagingIoResource, (PVOID)((ULONG_PTR)RxContext | 3)); + } + + ResourceOwnerSet = TRUE; + } + + /* And perform the write */ + Status = RxLowIoWriteShell(RxContext); + + RxItsTheSameContext(); + + /* Not outstanding write anymore */ + if (UnwindOutstandingAsync && Status == STATUS_PENDING) + { + UnwindOutstandingAsync = FALSE; + } + } + /* Cached write */ + else + { + /* If cache wasn't enabled yet, do it */ + if (FileObject->PrivateCacheMap == NULL) + { + if (BooleanFlagOn(FileObject->Flags, FO_CLEANUP_COMPLETE)) + { + _SEH2_TRY_RETURN(Status = STATUS_FILE_CLOSED); + } + + RxAdjustAllocationSizeforCC(Fcb); + + CcInitializeCacheMap(FileObject, (PCC_FILE_SIZES)&Fcb->Header.AllocationSize, + FALSE, &RxData.CacheManagerCallbacks, Fcb); + + CcSetReadAheadGranularity(FileObject, NetRoot->DiskParameters.ReadAheadGranularity); + } + + /* If that's a MDL backed write */ + if (BooleanFlagOn(RxContext->MinorFunction, IRP_MN_MDL)) + { + /* Shouldn't happen */ + ASSERT(FALSE); + ASSERT(CanWait); + + /* Perform it, though */ + CcPrepareMdlWrite(FileObject, &ByteOffset, WriteLength, + &Irp->MdlAddress, &Irp->IoStatus); + + Status = Irp->IoStatus.Status; + } + else + { + PVOID SystemBuffer; + ULONG BreakpointsSave; + + /* Map the user buffer */ + SystemBuffer = RxNewMapUserBuffer(RxContext); + if (SystemBuffer == NULL) + { + _SEH2_TRY_RETURN(Status = STATUS_INSUFFICIENT_RESOURCES); + } + + RxSaveAndSetExceptionNoBreakpointFlag(RxContext, BreakpointsSave); + + RxItsTheSameContext(); + + /* And deal with Cc */ + if (!CcCopyWrite(FileObject, &ByteOffset, WriteLength, CanWait, + SystemBuffer)) + { + RxRestoreExceptionNoBreakpointFlag(RxContext, BreakpointsSave); + + RxItsTheSameContext(); + + DPRINT1("CcCopyWrite failed for: %p %I64d %d %lx\n", + FileObject, Fcb->Header.FileSize.QuadPart, WriteLength, Status); + + PostIrp = TRUE; + } + else + { + Irp->IoStatus.Status = STATUS_SUCCESS; + Irp->IoStatus.Information = WriteLength; + + RxRestoreExceptionNoBreakpointFlag(RxContext, BreakpointsSave); + + RxItsTheSameContext(); + + DPRINT("CcCopyWrite succeed for: %p %I64d %d %lx\n", + FileObject, Fcb->Header.FileSize.QuadPart, WriteLength, Status); + } + } + } + +try_exit: NOTHING; + + /* If we've to post the IRP */ + if (PostIrp) + { + /* Reset the file size if required */ + if (ExtendingFile && !IsPipe) + { + ASSERT(RxWriteCacheingAllowed(Fcb, SrvOpen)); + ASSERT(Fcb->Header.PagingIoResource != NULL); + + RxAcquirePagingIoResource(RxContext, Fcb); + RxSetFileSizeWithLock(Fcb, &InitialFileSize); + RxReleasePagingIoResource(RxContext, Fcb); + + if (FileObject->SectionObjectPointer->SharedCacheMap != NULL) + { + *CcGetFileSizePointer(FileObject) = Fcb->Header.FileSize; + } + } + + InterlockedIncrement((volatile long *)&RxContext->ReferenceCount); + ContextReferenced = TRUE; + + /* Release locks */ + ASSERT(!ResourceOwnerSet); + RxWriteReleaseResources(RxContext, ResourceOwnerSet); + +#ifdef RDBSS_TRACKER + ASSERT(RxContext->AcquireReleaseFcbTrackerX == 0); +#endif + + /* And post the request */ + Status = RxFsdPostRequest(RxContext); + } + else + { + if (!IsPipe) + { + /* Update FILE_OBJECT if synchronous write succeed */ + if (!PagingIo) + { + if (NT_SUCCESS(Status) && BooleanFlagOn(FileObject->Flags, FO_SYNCHRONOUS_IO)) + { + FileObject->CurrentByteOffset.QuadPart = ByteOffset.QuadPart + Irp->IoStatus.Information; + } + } + + /* If write succeed, ,also update FILE_OBJECT flags */ + if (NT_SUCCESS(Status) && Status != STATUS_PENDING) + { + /* File was modified */ + if (!PagingIo) + { + SetFlag(FileObject->Flags, FO_FILE_MODIFIED); + } + + /* If was even extended */ + if (ExtendingFile) + { + SetFlag(FileObject->Flags, FO_FILE_SIZE_CHANGED); + } + + /* If VDL was extended, update FCB and inform Cc */ + if (ExtendingValidData) + { + LONGLONG LastOffset; + + LastOffset = ByteOffset.QuadPart + Irp->IoStatus.Information; + if (FileSize < LastOffset) + { + LastOffset = FileSize; + } + + Fcb->Header.ValidDataLength.QuadPart = LastOffset; + + if (NoCache && CcIsFileCached(FileObject)) + { + CcSetFileSizes(FileObject, (PCC_FILE_SIZES)&Fcb->Header.AllocationSize); + } + } + } + } + } + } + _SEH2_FINALLY + { + /* Finally, if we failed while extension was required */ + if (_SEH2_AbnormalTermination() && (ExtendingFile || ExtendingValidData)) + { + /* Rollback! */ + if (!IsPipe) + { + ASSERT(Fcb->Header.PagingIoResource != NULL); + + RxAcquirePagingIoResource(RxContext, Fcb); + RxSetFileSizeWithLock(Fcb, &InitialFileSize); + Fcb->Header.ValidDataLength.QuadPart = InitialValidDataLength; + RxReleasePagingIoResource(RxContext, Fcb); + + if (FileObject->SectionObjectPointer->SharedCacheMap != NULL) + { + *CcGetFileSizePointer(FileObject) = Fcb->Header.FileSize; + } + } + } + + /* One async write less */ + if (UnwindOutstandingAsync) + { + ASSERT(!IsPipe); + + ExInterlockedAddUlong(&Fcb->NonPaged->OutstandingAsyncWrites, -1, &RxStrucSupSpinLock); + KeSetEvent(Fcb->NonPaged->OutstandingAsyncEvent, IO_NO_INCREMENT, FALSE); + } + + /* And now, cleanup everything */ + if (_SEH2_AbnormalTermination() || Status != STATUS_PENDING || PostIrp) + { + /* If we didn't post, release every lock (for posting, it's already done) */ + if (!PostIrp) + { + RxWriteReleaseResources(RxContext, ResourceOwnerSet); + } + + /* If the context was referenced - posting, dereference it */ + if (ContextReferenced) + { + RxDereferenceAndDeleteRxContext(RxContext); + } + + /* If that's a pipe operation, resume any blocked one */ + if (!PostIrp) + { + if (BooleanFlagOn(RxContext->FlagsForLowIo, RXCONTEXT_FLAG4LOWIO_PIPE_SYNC_OPERATION)) + { + RxResumeBlockedOperations_Serially(RxContext, &Fobx->Specific.NamedPipe.ReadSerializationQueue); + } + } + + /* Sanity check for write */ + if (Status == STATUS_SUCCESS) + { + ASSERT(Irp->IoStatus.Information <= Stack->Parameters.Write.Length); + } + } + /* Just dereference our context */ + else + { + ASSERT(!Sync); + RxDereferenceAndDeleteRxContext(RxContext); + } + } + _SEH2_END; + + return Status; +} + +/* + * @implemented + */ NTSTATUS NTAPI RxCompleteMdl( IN PRX_CONTEXT RxContext) { + PIRP Irp; + PFILE_OBJECT FileObject; + PIO_STACK_LOCATION Stack; + +#define BugCheckFileId RDBSS_BUG_CHECK_CACHESUP + PAGED_CODE(); - UNIMPLEMENTED; - return STATUS_NOT_IMPLEMENTED; + Irp = RxContext->CurrentIrp; + Stack = RxContext->CurrentIrpSp; + FileObject = Stack->FileObject; + + /* We can only complete for IRP_MJ_READ and IRP_MJ_WRITE */ + switch (RxContext->MajorFunction) + { + /* Call the Cc function */ + case IRP_MJ_READ: + CcMdlReadComplete(FileObject, Irp->MdlAddress); + break; + + case IRP_MJ_WRITE: + /* If here, we can wait */ + ASSERT(BooleanFlagOn(RxContext->Flags, RX_CONTEXT_FLAG_WAIT)); + + /* Call the Cc function */ + CcMdlWriteComplete(FileObject, &Stack->Parameters.Write.ByteOffset, Irp->MdlAddress); + + Irp->IoStatus.Status = STATUS_SUCCESS; + break; + + default: + DPRINT1("Invalid major for RxCompleteMdl: %d\n", RxContext->MajorFunction); + RxBugCheck(RxContext->MajorFunction, 0, 0); + break; + } + + /* MDL was freed */ + Irp->MdlAddress = NULL; + + /* And complete the IRP */ + RxCompleteRequest(RxContext, STATUS_SUCCESS); + +#undef BugCheckFileId + + return STATUS_SUCCESS; } /* @@ -5118,6 +6253,25 @@ /* * @implemented */ +PIRP +RxGetTopIrpIfRdbssIrp( + VOID) +{ + PIRP Irp = NULL; + PRX_TOPLEVELIRP_CONTEXT TopLevel; + + TopLevel = (PRX_TOPLEVELIRP_CONTEXT)IoGetTopLevelIrp(); + if (RxIsThisAnRdbssTopLevelContext(TopLevel)) + { + Irp = TopLevel->Irp; + } + + return Irp; +} + +/* + * @implemented + */ LUID RxGetUid( IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext) @@ -5649,6 +6803,176 @@ * @implemented */ NTSTATUS +RxLowIoWriteShell( + IN PRX_CONTEXT RxContext) +{ + PFCB Fcb; + NTSTATUS Status; + + PAGED_CODE(); + + DPRINT("RxLowIoWriteShell(%p)\n", RxContext); + + Fcb = (PFCB)RxContext->pFcb; + + ASSERT(!BooleanFlagOn(Fcb->FcbState, FCB_STATE_FILE_IS_BUF_COMPRESSED) && + !BooleanFlagOn(Fcb->FcbState, FCB_STATE_FILE_IS_DISK_COMPRESSED)); + + /* Always update stats for disks */ + if (Fcb->CachedNetRootType == NET_ROOT_DISK) + { + ExInterlockedAddLargeStatistic(&RxContext->RxDeviceObject->NetworkWriteBytesRequested, RxContext->LowIoContext.ParamsFor.ReadWrite.ByteCount); + } + + /* And forward the write to the mini-rdr */ + Status = RxLowIoSubmit(RxContext, RxLowIoWriteShellCompletion); + DPRINT("RxLowIoWriteShell(%p), Status: %lx\n", RxContext, Status); + + return Status; +} + +NTSTATUS +NTAPI +RxLowIoWriteShellCompletion( + PRX_CONTEXT RxContext) +{ + PIRP Irp; + PFCB Fcb; + NTSTATUS Status; + BOOLEAN PagingIo; + PLOWIO_CONTEXT LowIoContext; + + PAGED_CODE(); + + DPRINT("RxLowIoWriteShellCompletion(%p)\n", RxContext); + + Status = RxContext->IoStatusBlock.Status; + DPRINT("In %p, Status: %lx, Information: %lx\n", RxContext, Status, RxContext->IoStatusBlock.Information); + + Irp = RxContext->CurrentIrp; + + /* Set IRP information from the RX_CONTEXT status block */ + Irp->IoStatus.Information = RxContext->IoStatusBlock.Information; + + LowIoContext = &RxContext->LowIoContext; + ASSERT(RxLowIoIsBufferLocked(LowIoContext)); + + /* Perform a few sanity checks */ + Fcb = (PFCB)RxContext->pFcb; + if (Status == STATUS_SUCCESS) + { + if (BooleanFlagOn(RxContext->FlagsForLowIo, RXCONTEXT_FLAG4LOWIO_THIS_IO_BUFFERED)) + { + ASSERT(!BooleanFlagOn(Fcb->FcbState, FCB_STATE_FILE_IS_BUF_COMPRESSED) && + !BooleanFlagOn(Fcb->FcbState, FCB_STATE_FILE_IS_DISK_COMPRESSED)); + } + + ASSERT(!BooleanFlagOn(Fcb->FcbState, FCB_STATE_FILE_IS_SHADOWED)); + } + + PagingIo = BooleanFlagOn(Irp->Flags, IRP_PAGING_IO); + if (Status != STATUS_SUCCESS && PagingIo) + { + DPRINT1("Paging IO failed %p (%p) %lx\n", Fcb, Fcb->NetRoot, Status); + } + + /* In case of async call, perform last bits not done in RxCommonWrite */ + if (!BooleanFlagOn(LowIoContext->Flags, LOWIO_CONTEXT_FLAG_SYNCCALL)) + { + PFILE_OBJECT FileObject; + PIO_STACK_LOCATION Stack; + + /* We only succeed if we wrote what was asked for */ + if (NT_SUCCESS(Status) && !BooleanFlagOn(RxContext->FlagsForLowIo, RXCONTEXT_FLAG4LOWIO_PIPE_OPERATION)) + { + ASSERT(Irp->IoStatus.Information == LowIoContext->ParamsFor.ReadWrite.ByteCount); + } + + /* If write succeed, ,also update FILE_OBJECT flags */ + Stack = RxContext->CurrentIrpSp; + FileObject = Stack->FileObject; + if (!PagingIo) + { + SetFlag(FileObject->Flags, FO_FILE_MODIFIED); + } + + if (BooleanFlagOn(LowIoContext->ParamsFor.ReadWrite.Flags, LOWIO_READWRITEFLAG_EXTENDING_FILESIZE)) + { + SetFlag(FileObject->Flags, FO_FILE_SIZE_CHANGED); + } + + /* If VDL was extended, fix attributes */ + if (BooleanFlagOn(LowIoContext->ParamsFor.ReadWrite.Flags, LOWIO_READWRITEFLAG_EXTENDING_VDL)) + { + LONGLONG LastOffset, FileSize; + + LastOffset = LowIoContext->ParamsFor.ReadWrite.ByteOffset + + Irp->IoStatus.Information; + RxGetFileSizeWithLock(Fcb, &FileSize); + + if (FileSize < LastOffset) + { + LastOffset = FileSize; + } + + Fcb->Header.ValidDataLength.QuadPart = LastOffset; + } + + /* One less outstanding write */ + if (!BooleanFlagOn(RxContext->FlagsForLowIo, RXCONTEXT_FLAG4LOWIO_PIPE_SYNC_OPERATION)) + { + PNON_PAGED_FCB NonPagedFcb; + + NonPagedFcb = LowIoContext->ParamsFor.ReadWrite.NonPagedFcb; + if (NonPagedFcb != NULL) + { + if (ExInterlockedAddUlong(&NonPagedFcb->OutstandingAsyncWrites, + -1, &RxStrucSupSpinLock) == 1) + { + KeSetEvent(NonPagedFcb->OutstandingAsyncEvent, IO_NO_INCREMENT, FALSE); + } + } + } + + /* Release paging resource if acquired */ + if (RxContext->FcbPagingIoResourceAcquired) + { + RxReleasePagingIoResourceForThread(RxContext, Fcb, LowIoContext->ResourceThreadId); + } + + /* Resume blocked operations for pipes */ + if (BooleanFlagOn(RxContext->FlagsForLowIo, RXCONTEXT_FLAG4LOWIO_PIPE_SYNC_OPERATION)) + { + RxResumeBlockedOperations_Serially(RxContext, + &((PFOBX)RxContext->pFobx)->Specific.NamedPipe.WriteSerializationQueue); + } + else + { + /* And release FCB only for files */ + if (RxContext->FcbResourceAcquired) + { + RxReleaseFcbForThread(RxContext, Fcb, LowIoContext->ResourceThreadId); + } + } + + /* Final sanity checks */ + ASSERT(Status != STATUS_RETRY); + ASSERT((Status != STATUS_SUCCESS) || (Irp->IoStatus.Information <= Stack->Parameters.Write.Length)); + ASSERT(RxContext->MajorFunction == IRP_MJ_WRITE); + + if (BooleanFlagOn(RxContext->FlagsForLowIo, RXCONTEXT_FLAG4LOWIO_PIPE_OPERATION)) + { + UNIMPLEMENTED; + } + } + + return Status; +} + +/* + * @implemented + */ +NTSTATUS RxNotifyChangeDirectory( PRX_CONTEXT RxContext) { Modified: trunk/reactos/sdk/lib/drivers/rxce/rxce.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/sdk/lib/drivers/rxce/rxce.…
============================================================================== --- trunk/reactos/sdk/lib/drivers/rxce/rxce.c [iso-8859-1] (original) +++ trunk/reactos/sdk/lib/drivers/rxce/rxce.c [iso-8859-1] Mon Jul 24 17:05:05 2017 @@ -121,7 +121,14 @@ BOOLEAN RxSrvCallConstructionDispatcherActive = FALSE; LIST_ENTRY RxSrvCalldownList; RX_SPIN_LOCK RxStrucSupSpinLock; -ULONG RdbssReferenceTracingValue; +#if 0 +ULONG RdbssReferenceTracingValue = (RDBSS_REF_TRACK_SRVCALL | RDBSS_REF_TRACK_NETROOT | + RDBSS_REF_TRACK_VNETROOT | RDBSS_REF_TRACK_NETFOBX | + RDBSS_REF_TRACK_NETFCB | RDBSS_REF_TRACK_SRVOPEN | + RX_PRINT_REF_TRACKING); +#else +ULONG RdbssReferenceTracingValue = 0; +#endif LARGE_INTEGER RxWorkQueueWaitInterval[RxMaximumWorkQueue]; LARGE_INTEGER RxSpinUpDispatcherWaitInterval; RX_DISPATCHER RxDispatcher; @@ -2906,7 +2913,7 @@ HashBucket = &FcbTable->HashBuckets[Bucket]; ListEntry = HashBucket->Flink; while (ListEntry != HashBucket) - { + { PFCB Fcb; Fcb = CONTAINING_RECORD(ListEntry, FCB, FcbTableEntry.HashLinks); @@ -3866,7 +3873,7 @@ { /* If our FCB newly points to a file, initiliaze everything related */ if (FileType == RDBSS_NTC_STORAGE_TYPE_FILE) - + { if (OldType != RDBSS_NTC_STORAGE_TYPE_FILE) { @@ -6302,7 +6309,7 @@ { NODE_TYPE_CODE Type; - Type = NodeType(Container); + Type = (NodeType(Container) & ~RX_SCAVENGER_MASK); switch (Type) { case RDBSS_NTC_SRVCALL: @@ -6318,7 +6325,9 @@ break; default: + DPRINT1("Invalid node type: %x\n", Type); ASSERT(FALSE); + RxReference(Container); break; } } @@ -6479,6 +6488,43 @@ UNIMPLEMENTED; } +/* + * @implemented + */ +VOID +RxpScavengeFobxs( + PRDBSS_SCAVENGER Scavenger, + PLIST_ENTRY FobxToScavenge) +{ + /* Explore the whole list of FOBX to scavenge */ + while (!IsListEmpty(FobxToScavenge)) + { + PFCB Fcb; + PFOBX Fobx; + PLIST_ENTRY Entry; + + Entry = RemoveHeadList(FobxToScavenge); + Fobx = CONTAINING_RECORD(Entry, FOBX, ScavengerFinalizationList); + Fcb = (PFCB)Fobx->SrvOpen->pFcb; + + /* Try to acquire the lock exclusively to perform finalization */ + if (RxAcquireExclusiveFcb(NULL, Fcb) != STATUS_SUCCESS) + { + RxDereferenceNetRoot(Fobx, LHS_LockNotHeld); + } + else + { + RxReferenceNetFcb(Fcb); + RxDereferenceNetRoot(Fobx, LHS_ExclusiveLockHeld); + + if (!RxDereferenceAndFinalizeNetFcb(Fcb, NULL, FALSE, FALSE)) + { + RxReleaseFcb(NULL, Fcb); + } + } + } +} + BOOLEAN RxpTrackDereference( _In_ ULONG TraceType, @@ -6486,6 +6532,9 @@ _In_ ULONG Line, _In_ PVOID Instance) { + PCSTR InstanceType; + ULONG ReferenceCount; + PAGED_CODE(); if (!BooleanFlagOn(RdbssReferenceTracingValue, TraceType)) @@ -6493,7 +6542,53 @@ return TRUE; } - UNIMPLEMENTED; + switch (TraceType) + { + case RDBSS_REF_TRACK_SRVCALL: + InstanceType = "SrvCall"; + ReferenceCount = ((PSRV_CALL)Instance)->NodeReferenceCount; + break; + + case RDBSS_REF_TRACK_NETROOT: + InstanceType = "NetRoot"; + ReferenceCount = ((PNET_ROOT)Instance)->NodeReferenceCount; + break; + + case RDBSS_REF_TRACK_VNETROOT: + InstanceType = "VNetRoot"; + ReferenceCount = ((PV_NET_ROOT)Instance)->NodeReferenceCount; + break; + + case RDBSS_REF_TRACK_NETFOBX: + InstanceType = "NetFobx"; + ReferenceCount = ((PFOBX)Instance)->NodeReferenceCount; + break; + + case RDBSS_REF_TRACK_NETFCB: + InstanceType = "NetFcb"; + ReferenceCount = ((PFCB)Instance)->NodeReferenceCount; + break; + + case RDBSS_REF_TRACK_SRVOPEN: + InstanceType = "SrvOpen"; + ReferenceCount = ((PSRV_OPEN)Instance)->NodeReferenceCount; + break; + + default: + DPRINT1("Invalid node type!\n"); + return TRUE; + } + + if (BooleanFlagOn(RdbssReferenceTracingValue, RX_LOG_REF_TRACKING)) + { + UNIMPLEMENTED; + } + + if (BooleanFlagOn(RdbssReferenceTracingValue, RX_PRINT_REF_TRACKING)) + { + DbgPrint("(%s:%d) %p (%s) dereferenced from %d\n", FileName, Line, Instance, InstanceType, ReferenceCount); + } + return TRUE; } @@ -6504,12 +6599,60 @@ _In_ ULONG Line, _In_ PVOID Instance) { + PCSTR InstanceType; + ULONG ReferenceCount; + if (!BooleanFlagOn(RdbssReferenceTracingValue, TraceType)) { return; } - UNIMPLEMENTED; + switch (TraceType) + { + case RDBSS_REF_TRACK_SRVCALL: + InstanceType = "SrvCall"; + ReferenceCount = ((PSRV_CALL)Instance)->NodeReferenceCount; + break; + + case RDBSS_REF_TRACK_NETROOT: + InstanceType = "NetRoot"; + ReferenceCount = ((PNET_ROOT)Instance)->NodeReferenceCount; + break; + + case RDBSS_REF_TRACK_VNETROOT: + InstanceType = "VNetRoot"; + ReferenceCount = ((PV_NET_ROOT)Instance)->NodeReferenceCount; + break; + + case RDBSS_REF_TRACK_NETFOBX: + InstanceType = "NetFobx"; + ReferenceCount = ((PFOBX)Instance)->NodeReferenceCount; + break; + + case RDBSS_REF_TRACK_NETFCB: + InstanceType = "NetFcb"; + ReferenceCount = ((PFCB)Instance)->NodeReferenceCount; + break; + + case RDBSS_REF_TRACK_SRVOPEN: + InstanceType = "SrvOpen"; + ReferenceCount = ((PSRV_OPEN)Instance)->NodeReferenceCount; + break; + + default: + DPRINT1("Invalid node type!\n"); + return; + } + + if (BooleanFlagOn(RdbssReferenceTracingValue, RX_LOG_REF_TRACKING)) + { + UNIMPLEMENTED; + } + + if (BooleanFlagOn(RdbssReferenceTracingValue, RX_PRINT_REF_TRACKING)) + { + DbgPrint("(%s:%d) %p (%s) referenced from %d\n", FileName, Line, Instance, InstanceType, ReferenceCount); + } } /* @@ -6701,6 +6844,42 @@ /* * @implemented */ +BOOLEAN +RxPurgeFobx( + PFOBX pFobx) +{ + NTSTATUS Status; + PFCB FcbToBePurged; + + PAGED_CODE(); + + /* Get the associated FCB */ + FcbToBePurged = (PFCB)pFobx->pSrvOpen->pFcb; + Status = RxAcquireExclusiveFcb(NULL, FcbToBePurged); + ASSERT(Status == STATUS_SUCCESS); + + /* Purge it */ + Status = RxPurgeFcbInSystemCache(FcbToBePurged, NULL, 0, FALSE, TRUE); + if (Status != STATUS_SUCCESS) + { + DPRINT1("Purge failed for %p (%p)\n", FcbToBePurged, pFobx); + return FALSE; + } + + /* And flush */ + if (!MmFlushImageSection(&FcbToBePurged->NonPaged->SectionObjectPointers, MmFlushForWrite)) + { + DPRINT1("Image section flush failed for %p (%p)\n", FcbToBePurged, pFobx); + return FALSE; + } + + DPRINT("Purge OK for %p (%p)\n", FcbToBePurged, pFobx); + return TRUE; +} + +/* + * @implemented + */ NTSTATUS RxPurgeFobxFromCache( PFOBX FobxToBePurged) @@ -6742,6 +6921,155 @@ } return Status; +} + +/* + * @implemented + */ +NTSTATUS +RxPurgeRelatedFobxs( + PNET_ROOT NetRoot, + PRX_CONTEXT RxContext, + BOOLEAN AttemptFinalization, + PFCB PurgingFcb) +{ + PLIST_ENTRY Entry; + ULONG SuccessfullPurge; + PRDBSS_SCAVENGER Scavenger; + PRDBSS_DEVICE_OBJECT RxDeviceObject; + PPURGE_SYNCHRONIZATION_CONTEXT PurgeSyncCtx; + + PAGED_CODE(); + + RxDeviceObject = RxContext->RxDeviceObject; + Scavenger = RxDeviceObject->pRdbssScavenger; + PurgeSyncCtx = &NetRoot->PurgeSyncronizationContext; + + RxAcquireScavengerMutex(); + + /* If there's already a purge in progress */ + if (PurgeSyncCtx->PurgeInProgress) + { + /* Add our RX_CONTEXT to the current run */ + InsertTailList(&PurgeSyncCtx->ContextsAwaitingPurgeCompletion, + &RxContext->RxContextSerializationQLinks); + + /* And wait until it's done */ + RxReleaseScavengerMutex(); + RxWaitSync(RxContext); + RxAcquireScavengerMutex(); + } + + /* Start the purge */ + PurgeSyncCtx->PurgeInProgress = TRUE; + + /* While the purge is still handling our NET_ROOT, do nothing but wait */ + while (Scavenger->CurrentNetRootForClosePendingProcessing == NetRoot) + { + RxReleaseScavengerMutex(); + KeWaitForSingleObject(&Scavenger->ClosePendingProcessingSyncEvent, Executive, + KernelMode, TRUE, NULL); + RxAcquireScavengerMutex(); + } + + /* Now, for all the entries */ + SuccessfullPurge = 0; + Entry = Scavenger->ClosePendingFobxsList.Flink; + while (Entry != &Scavenger->ClosePendingFobxsList) + { + PFCB Fcb; + PFOBX Fobx; + BOOLEAN Success; + + Fobx = CONTAINING_RECORD(Entry, FOBX, ClosePendingList); + DPRINT("Dealing with FOBX: %p\n", Fobx); + + Entry = Entry->Flink; + + /* If it's not matching our NET_ROOT, ignore */ + if (Fobx->pSrvOpen == NULL || + Fobx->pSrvOpen->pFcb == NULL || + ((PFCB)Fobx->pSrvOpen->pFcb)->VNetRoot == NULL || + (PNET_ROOT)((PFCB)Fobx->pSrvOpen->pFcb)->VNetRoot->pNetRoot != NetRoot) + { + continue; + } + + /* Determine if it matches our FCB */ + Fcb = (PFCB)Fobx->pSrvOpen->pFcb; + if (PurgingFcb != NULL && NodeType(PurgingFcb) != RDBSS_NTC_STORAGE_TYPE_DIRECTORY && + PurgingFcb != Fcb) + { + NTSTATUS Status; + + MINIRDR_CALL_THROUGH(Status, RxDeviceObject->Dispatch, MRxAreFilesAliased, (Fcb, PurgingFcb)); + if (Status == STATUS_SUCCESS) + { + continue; + } + } + + /* Matching, we'll purge it */ + RemoveEntryList(&Fobx->ClosePendingList); + + /* Reference it so that it doesn't disappear */ + RxReferenceNetFobx(Fobx); + + RxReleaseScavengerMutex(); + + /* And purge */ + Success = RxPurgeFobx(Fobx); + if (Success) + { + ++SuccessfullPurge; + } + + /* If we don't have to finalize it (or if we cannot acquire lock exclusively + * Just normally dereference + */ + if ((AttemptFinalization == DONT_ATTEMPT_FINALIZE_ON_PURGE) || + RxAcquireExclusiveFcb(NULL, Fcb) != STATUS_SUCCESS) + { + RxDereferenceNetFobx(Fobx, LHS_LockNotHeld); + } + /* Otherwise, finalize */ + else + { + RxReferenceNetFcb(Fcb); + RxDereferenceNetFobx(Fobx, LHS_ExclusiveLockHeld); + if (!RxDereferenceAndFinalizeNetFcb(Fcb, NULL, FALSE, FALSE)) + { + RxReleaseFcb(NULL, Fcb); + } + } + + if (!Success) + { + DPRINT1("Failed purging %p (%p)\n", Fcb, Fobx); + } + + RxAcquireScavengerMutex(); + } + + /* If no contexts left, purge is not running */ + if (IsListEmpty(&PurgeSyncCtx->ContextsAwaitingPurgeCompletion)) + { + PurgeSyncCtx->PurgeInProgress = FALSE; + } + /* Otherwise, notify a waiter it can start */ + else + { + PRX_CONTEXT Context; + + Entry = RemoveHeadList(&PurgeSyncCtx->ContextsAwaitingPurgeCompletion); + Context = CONTAINING_RECORD(Entry, RX_CONTEXT, RxContextSerializationQLinks); + + RxSignalSynchronousWaiter(Context); + } + + RxReleaseScavengerMutex(); + + return (SuccessfullPurge > 0 ? STATUS_SUCCESS : STATUS_UNSUCCESSFUL); } /* @@ -6958,6 +7286,38 @@ * @implemented */ VOID +NTAPI +RxReinitializeContext( + IN OUT PRX_CONTEXT RxContext) +{ + PIRP Irp; + PRDBSS_DEVICE_OBJECT RxDeviceObject; + ULONG InitialContextFlags, SavedFlags; + + PAGED_CODE(); + + /* Backup a few flags */ + Irp = RxContext->CurrentIrp; + RxDeviceObject = RxContext->RxDeviceObject; + SavedFlags = RxContext->Flags & RX_CONTEXT_PRESERVED_FLAGS; + InitialContextFlags = RxContext->Flags & RX_CONTEXT_INITIALIZATION_FLAGS; + + /* Reset our context */ + RxPrepareContextForReuse(RxContext); + + /* Zero everything */ + RtlZeroMemory(&RxContext->MajorFunction, sizeof(RX_CONTEXT) - FIELD_OFFSET(RX_CONTEXT, MajorFunction)); + + /* Restore saved flags */ + RxContext->Flags = SavedFlags; + /* And reinit the context */ + RxInitializeContext(Irp, RxDeviceObject, InitialContextFlags, RxContext); +} + +/* + * @implemented + */ +VOID RxRemoveNameNetFcb( OUT PFCB ThisFcb) { @@ -7104,6 +7464,110 @@ UNIMPLEMENTED; RxReleaseSerializationMutex(); +} + +/* + * @implemented + */ +VOID +RxSetFileSizeWithLock( + IN OUT PFCB Fcb, + IN PLONGLONG FileSize) +{ + PAGED_CODE(); + + /* Set attribute and increase version */ + Fcb->Header.FileSize.QuadPart = *FileSize; + ++Fcb->ulFileSizeVersion; +} + +/* + * @implemented + */ +VOID +RxScavengeFobxsForNetRoot( + PNET_ROOT NetRoot, + PFCB PurgingFcb, + BOOLEAN SynchronizeWithScavenger) +{ + PRDBSS_SCAVENGER Scavenger; + PRDBSS_DEVICE_OBJECT RxDeviceObject; + + PAGED_CODE(); + + RxDeviceObject = NetRoot->pSrvCall->RxDeviceObject; + Scavenger = RxDeviceObject->pRdbssScavenger; + + /* Wait for the scavenger, if asked to */ + if (SynchronizeWithScavenger) + { + KeWaitForSingleObject(&Scavenger->SyncEvent, Executive, KernelMode, FALSE, NULL); + } + + RxAcquireScavengerMutex(); + + /* If there's nothing left to do... */ + if (Scavenger->FobxsToBeFinalized <= 0) + { + RxReleaseScavengerMutex(); + } + else + { + PLIST_ENTRY Entry; + LIST_ENTRY FobxToScavenge; + + InitializeListHead(&FobxToScavenge); + + /* Browse all the FOBXs to finalize */ + Entry = Scavenger->FobxFinalizationList.Flink; + while (Entry != &Scavenger->FobxFinalizationList) + { + PFOBX Fobx; + + Fobx = CONTAINING_RECORD(Entry, FOBX, ScavengerFinalizationList); + Entry = Entry->Flink; + + if (Fobx->SrvOpen != NULL) + { + PFCB Fcb; + + Fcb = (PFCB)Fobx->SrvOpen->pFcb; + + /* If it matches our NET_ROOT */ + if ((PNET_ROOT)Fcb->pNetRoot == NetRoot) + { + NTSTATUS Status; + + /* Check whether it matches our FCB */ + Status = STATUS_MORE_PROCESSING_REQUIRED; + if (PurgingFcb != NULL && PurgingFcb != Fcb) + { + MINIRDR_CALL_THROUGH(Status, RxDeviceObject->Dispatch, MRxAreFilesAliased, (Fcb, PurgingFcb)); + } + + /* If so, add it to the list of the FOBXs to scavenge */ + if (Status != STATUS_SUCCESS) + { + RxReferenceNetFobx(Fobx); + ASSERT(NodeType(Fobx) == RDBSS_NTC_FOBX); + + RemoveEntryList(&Fobx->ScavengerFinalizationList); + InsertTailList(&FobxToScavenge, &Fobx->ScavengerFinalizationList); + } + } + } + } + + RxReleaseScavengerMutex(); + + /* Now, scavenge all the extracted FOBX */ + RxpScavengeFobxs(Scavenger, &FobxToScavenge); + } + + if (SynchronizeWithScavenger) + { + KeSetEvent(&Scavenger->SyncEvent, IO_NO_INCREMENT, FALSE); + } } /*
7 years, 5 months
1
0
0
0
[dquintana] 75397: [APITESTS] MSVCRT_CRT_APITEST: Remove getmainargs tests from X64 build. DELAYIMP: Fix callback prototype. CComHeapPtr: Fix implementation of IMallocSpy to match the actual interf...
by dquintana@svn.reactos.org
Author: dquintana Date: Mon Jul 24 15:09:22 2017 New Revision: 75397 URL:
http://svn.reactos.org/svn/reactos?rev=75397&view=rev
Log: [APITESTS] MSVCRT_CRT_APITEST: Remove getmainargs tests from X64 build. DELAYIMP: Fix callback prototype. CComHeapPtr: Fix implementation of IMallocSpy to match the actual interface. [WINETESTS] ntdll: Disable 'generated' tests when not i386 platform, since they were generated for x86 and not x64 or ARM. Fixes x64 compilation for tests. Modified: trunk/rostests/apitests/atl/CComHeapPtr.cpp trunk/rostests/apitests/crt/msvcrt_crt_apitest.cmake trunk/rostests/apitests/crt/testlist.c trunk/rostests/apitests/sdk/delayimp.cpp trunk/rostests/winetests/ntdll/CMakeLists.txt trunk/rostests/winetests/ntdll/testlist.c Modified: trunk/rostests/apitests/atl/CComHeapPtr.cpp URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/atl/CComHeapPtr.…
============================================================================== --- trunk/rostests/apitests/atl/CComHeapPtr.cpp [iso-8859-1] (original) +++ trunk/rostests/apitests/atl/CComHeapPtr.cpp [iso-8859-1] Mon Jul 24 15:09:22 2017 @@ -33,7 +33,7 @@ virtual ULONG STDMETHODCALLTYPE AddRef() { return 1; } virtual ULONG STDMETHODCALLTYPE Release() { return 1; } - virtual ULONG STDMETHODCALLTYPE PreAlloc(ULONG cbRequest) { return cbRequest; } + virtual SIZE_T STDMETHODCALLTYPE PreAlloc(SIZE_T cbRequest) { return cbRequest; } virtual LPVOID STDMETHODCALLTYPE PostAlloc(LPVOID pActual) { InterlockedIncrement(&g_OpenAllocations); @@ -45,7 +45,7 @@ if (fSpyed) InterlockedDecrement(&g_OpenAllocations); } - virtual ULONG STDMETHODCALLTYPE PreRealloc(LPVOID pRequest, ULONG cbRequest, LPVOID *ppNewRequest, BOOL) + virtual SIZE_T STDMETHODCALLTYPE PreRealloc(LPVOID pRequest, SIZE_T cbRequest, LPVOID *ppNewRequest, BOOL) { *ppNewRequest = pRequest; return cbRequest; @@ -57,7 +57,7 @@ return pActual; } virtual LPVOID STDMETHODCALLTYPE PreGetSize(LPVOID pRequest, BOOL) { return pRequest; } - virtual ULONG STDMETHODCALLTYPE PostGetSize(ULONG cbActual, BOOL) { return cbActual; } + virtual SIZE_T STDMETHODCALLTYPE PostGetSize(SIZE_T cbActual, BOOL) { return cbActual; } virtual LPVOID STDMETHODCALLTYPE PreDidAlloc(LPVOID pRequest, BOOL) { return pRequest; } virtual int STDMETHODCALLTYPE PostDidAlloc(LPVOID, BOOL, int fActual) { return fActual; } virtual void STDMETHODCALLTYPE PreHeapMinimize() {} Modified: trunk/rostests/apitests/crt/msvcrt_crt_apitest.cmake URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/crt/msvcrt_crt_a…
============================================================================== --- trunk/rostests/apitests/crt/msvcrt_crt_apitest.cmake [iso-8859-1] (original) +++ trunk/rostests/apitests/crt/msvcrt_crt_apitest.cmake [iso-8859-1] Mon Jul 24 15:09:22 2017 @@ -66,7 +66,7 @@ # __doserrno.c # __fpecode.c # __get_app_type.c - __getmainargs.c +# __getmainargs.c # __initenv # __iob_func.c # __isascii.c @@ -1267,6 +1267,7 @@ if(ARCH STREQUAL "i386") list(APPEND SOURCE_MSVCRT + __getmainargs.c ##FIXME: Moved here because it doesn't work on x64 # _CIacos.c # _CIasin.c # _CIatan.c Modified: trunk/rostests/apitests/crt/testlist.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/crt/testlist.c?r…
============================================================================== --- trunk/rostests/apitests/crt/testlist.c [iso-8859-1] (original) +++ trunk/rostests/apitests/crt/testlist.c [iso-8859-1] Mon Jul 24 15:09:22 2017 @@ -51,7 +51,9 @@ #endif #if defined(TEST_STATIC_CRT) #elif defined(TEST_MSVCRT) +#if !defined(_M_X64) { "__getmainargs", func___getmainargs }, +#endif { "_vscprintf", func__vscprintf }, { "_vscwprintf", func__vscwprintf }, Modified: trunk/rostests/apitests/sdk/delayimp.cpp URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/sdk/delayimp.cpp…
============================================================================== --- trunk/rostests/apitests/sdk/delayimp.cpp [iso-8859-1] (original) +++ trunk/rostests/apitests/sdk/delayimp.cpp [iso-8859-1] Mon Jul 24 15:09:22 2017 @@ -127,7 +127,7 @@ /* Replacement functions */ -int __stdcall MyFunction() +INT_PTR WINAPI MyFunction() { return 123; } Modified: trunk/rostests/winetests/ntdll/CMakeLists.txt URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/ntdll/CMakeList…
============================================================================== --- trunk/rostests/winetests/ntdll/CMakeLists.txt [iso-8859-1] (original) +++ trunk/rostests/winetests/ntdll/CMakeLists.txt [iso-8859-1] Mon Jul 24 15:09:22 2017 @@ -11,7 +11,6 @@ error.c exception.c file.c - generated.c info.c large_int.c om.c @@ -26,6 +25,12 @@ time.c testlist.c) +if(ARCH STREQUAL "i386") + list(APPEND SOURCE + generated.c + ) +endif() + add_executable(ntdll_winetest ${SOURCE}) set_module_type(ntdll_winetest win32cui) add_importlibs(ntdll_winetest user32 ole32 advapi32 msvcrt kernel32 ntdll) Modified: trunk/rostests/winetests/ntdll/testlist.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/ntdll/testlist.…
============================================================================== --- trunk/rostests/winetests/ntdll/testlist.c [iso-8859-1] (original) +++ trunk/rostests/winetests/ntdll/testlist.c [iso-8859-1] Mon Jul 24 15:09:22 2017 @@ -33,7 +33,9 @@ { "error", func_error }, { "exception", func_exception }, { "file", func_file }, +#ifdef _M_IX86 { "generated", func_generated }, +#endif { "info", func_info }, { "large_int", func_large_int }, { "om", func_om },
7 years, 5 months
1
0
0
0
[dquintana] 75396: [BOOTLIB] Stub out some arch-specific functions (fixes x64 build). [USBPORT] Actually fix x64 build. The old code was not working at all, but the bootlib errors cancelled the bui...
by dquintana@svn.reactos.org
Author: dquintana Date: Mon Jul 24 15:08:16 2017 New Revision: 75396 URL:
http://svn.reactos.org/svn/reactos?rev=75396&view=rev
Log: [BOOTLIB] Stub out some arch-specific functions (fixes x64 build). [USBPORT] Actually fix x64 build. The old code was not working at all, but the bootlib errors cancelled the build earlier than I thought. The X64 compilation now succeeds, but cabman crashes trying to generate the bootcd. Modified: trunk/reactos/boot/environ/lib/arch/stub/arch.c trunk/reactos/boot/environ/lib/mm/stub/mm.c trunk/reactos/drivers/usb/usbport/usbport.h trunk/reactos/sdk/include/reactos/drivers/usbport/usbmport.h Modified: trunk/reactos/boot/environ/lib/arch/stub/arch.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/boot/environ/lib/arch/stub…
============================================================================== --- trunk/reactos/boot/environ/lib/arch/stub/arch.c [iso-8859-1] (original) +++ trunk/reactos/boot/environ/lib/arch/stub/arch.c [iso-8859-1] Mon Jul 24 15:08:16 2017 @@ -44,3 +44,9 @@ return STATUS_NOT_IMPLEMENTED; } +VOID +Archx86TransferTo32BitApplicationAsm (VOID) +{ + EfiPrintf(L" Archx86TransferTo32BitApplicationAsm NOT IMPLEMENTED for this platform\r\n"); +} + Modified: trunk/reactos/boot/environ/lib/mm/stub/mm.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/boot/environ/lib/mm/stub/m…
============================================================================== --- trunk/reactos/boot/environ/lib/mm/stub/mm.c [iso-8859-1] (original) +++ trunk/reactos/boot/environ/lib/mm/stub/mm.c [iso-8859-1] Mon Jul 24 15:08:16 2017 @@ -9,6 +9,10 @@ /* INCLUDES ******************************************************************/ #include "bl.h" + +BL_ADDRESS_RANGE MmArchKsegAddressRange; +ULONG_PTR MmArchTopOfApplicationAddressSpace; +ULONG MmArchLargePageSize; /* FUNCTIONS *****************************************************************/ @@ -23,3 +27,26 @@ EfiPrintf(L" MmArchInitialize NOT IMPLEMENTED for this platform\r\n"); return STATUS_NOT_IMPLEMENTED; } + +NTSTATUS +MmMapPhysicalAddress ( + _Inout_ PPHYSICAL_ADDRESS PhysicalAddressPtr, + _Inout_ PVOID* VirtualAddressPtr, + _Inout_ PULONGLONG SizePtr, + _In_ ULONG CacheAttributes + ) +{ + EfiPrintf(L" MmMapPhysicalAddress NOT IMPLEMENTED for this platform\r\n"); + return STATUS_NOT_IMPLEMENTED; +} + +BOOLEAN +MmArchTranslateVirtualAddress ( + _In_ PVOID VirtualAddress, + _Out_opt_ PPHYSICAL_ADDRESS PhysicalAddress, + _Out_opt_ PULONG CachingFlags + ) +{ + EfiPrintf(L" MmMapPhysicalAddress NOT IMPLEMENTED for this platform\r\n"); + return FALSE; +} Modified: trunk/reactos/drivers/usb/usbport/usbport.h URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbport/usbpor…
============================================================================== --- trunk/reactos/drivers/usb/usbport/usbport.h [iso-8859-1] (original) +++ trunk/reactos/drivers/usb/usbport/usbport.h [iso-8859-1] Mon Jul 24 15:08:16 2017 @@ -359,11 +359,17 @@ /* Miniport extension should be aligned on 0x100 */ #if !defined(_M_X64) ULONG Padded[34]; +#else + ULONG Padded[0]; #endif } USBPORT_DEVICE_EXTENSION, *PUSBPORT_DEVICE_EXTENSION; +#if !defined(_M_X64) C_ASSERT(sizeof(USBPORT_DEVICE_EXTENSION) == 0x400); +#else +C_ASSERT(sizeof(USBPORT_DEVICE_EXTENSION) == 0x600); +#endif typedef struct _USBPORT_RH_DESCRIPTORS { USB_DEVICE_DESCRIPTOR DeviceDescriptor; @@ -397,7 +403,7 @@ ULONG CallbackContext; } USBPORT_ASYNC_CALLBACK_DATA, *PUSBPORT_ASYNC_CALLBACK_DATA; -C_ASSERT(sizeof(USBPORT_ASYNC_CALLBACK_DATA) == 84 + sizeof(PVOID)); +C_ASSERT(sizeof(USBPORT_ASYNC_CALLBACK_DATA) == 16 + 18 * sizeof(PVOID)); typedef struct _TIMER_WORK_QUEUE_ITEM { WORK_QUEUE_ITEM WqItem; Modified: trunk/reactos/sdk/include/reactos/drivers/usbport/usbmport.h URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/sdk/include/reactos/driver…
============================================================================== --- trunk/reactos/sdk/include/reactos/drivers/usbport/usbmport.h [iso-8859-1] (original) +++ trunk/reactos/sdk/include/reactos/drivers/usbport/usbmport.h [iso-8859-1] Mon Jul 24 15:08:16 2017 @@ -62,7 +62,7 @@ UCHAR Reserved3; } USBPORT_RESOURCES, *PUSBPORT_RESOURCES; -C_ASSERT(sizeof(USBPORT_RESOURCES) == 40 + 3 * sizeof(PVOID)); +C_ASSERT(sizeof(USBPORT_RESOURCES) == 24 + 7 * sizeof(PVOID)); typedef ULONG MPSTATUS; // Miniport status typedef ULONG RHSTATUS; // Roothub status @@ -578,7 +578,7 @@ USBPORT_REGISTRATION_PACKET Packet; } USBPORT_MINIPORT_INTERFACE, *PUSBPORT_MINIPORT_INTERFACE; -C_ASSERT(sizeof(USBPORT_MINIPORT_INTERFACE) == 328 + 2 * sizeof(PVOID)); +C_ASSERT(sizeof(USBPORT_MINIPORT_INTERFACE) == 32 + 76 * sizeof(PVOID)); #define USBPORT_TRANSFER_DIRECTION_OUT 1 // From host to device typedef struct _USBPORT_ENDPOINT_PROPERTIES { @@ -607,7 +607,7 @@ ULONG Reserved6; } USBPORT_ENDPOINT_PROPERTIES, *PUSBPORT_ENDPOINT_PROPERTIES; -C_ASSERT(sizeof(USBPORT_ENDPOINT_PROPERTIES) == 64); +C_ASSERT(sizeof(USBPORT_ENDPOINT_PROPERTIES) == 48 + 4 * sizeof(PVOID)); typedef struct _USBPORT_SCATTER_GATHER_ELEMENT { PHYSICAL_ADDRESS SgPhysicalAddress; @@ -617,7 +617,7 @@ ULONG Reserved2; } USBPORT_SCATTER_GATHER_ELEMENT, *PUSBPORT_SCATTER_GATHER_ELEMENT; -C_ASSERT(sizeof(USBPORT_SCATTER_GATHER_ELEMENT) == 20 + sizeof(PVOID)); +C_ASSERT(sizeof(USBPORT_SCATTER_GATHER_ELEMENT) == 24); typedef struct _USBPORT_SCATTER_GATHER_LIST { ULONG Flags; @@ -627,7 +627,7 @@ USBPORT_SCATTER_GATHER_ELEMENT SgElement[1]; } USBPORT_SCATTER_GATHER_LIST, *PUSBPORT_SCATTER_GATHER_LIST; -C_ASSERT(sizeof(USBPORT_SCATTER_GATHER_LIST) == 36 + sizeof(PVOID)); +C_ASSERT(sizeof(USBPORT_SCATTER_GATHER_LIST) == 24 + 4 * sizeof(PVOID)); typedef struct _USBPORT_TRANSFER_PARAMETERS { ULONG TransferFlags;
7 years, 5 months
1
0
0
0
[hbelusca] 75395: Sync branch with trunk r75394.
by hbelusca@svn.reactos.org
Author: hbelusca Date: Mon Jul 24 11:36:00 2017 New Revision: 75395 URL:
http://svn.reactos.org/svn/reactos?rev=75395&view=rev
Log: Sync branch with trunk r75394. Added: branches/setup_improvements/dll/keyboard/kbdeo/ - copied from r75394, trunk/reactos/dll/keyboard/kbdeo/ branches/setup_improvements/dll/win32/kernel32/winnls/nls/eoa.nls - copied unchanged from r75394, trunk/reactos/dll/win32/kernel32/winnls/nls/eoa.nls branches/setup_improvements/drivers/multimedia/CMakeLists.txt - copied unchanged from r75394, trunk/reactos/drivers/multimedia/CMakeLists.txt branches/setup_improvements/drivers/multimedia/bdasup/CMakeLists.txt - copied unchanged from r75394, trunk/reactos/drivers/multimedia/bdasup/CMakeLists.txt branches/setup_improvements/sdk/lib/crt/include/internal/popen.h - copied unchanged from r75394, trunk/reactos/sdk/lib/crt/include/internal/popen.h Modified: branches/setup_improvements/ (props changed) branches/setup_improvements/base/applications/cmdutils/mode/lang/ru-RU.rc branches/setup_improvements/base/applications/dxdiag/lang/ru-RU.rc branches/setup_improvements/base/applications/mspaint/main.cpp branches/setup_improvements/base/setup/usetup/inffile.h branches/setup_improvements/base/shell/cmd/lang/cs-CZ.rc branches/setup_improvements/base/shell/cmd/lang/de-DE.rc branches/setup_improvements/base/shell/cmd/lang/el-GR.rc branches/setup_improvements/base/shell/cmd/lang/en-US.rc branches/setup_improvements/base/shell/cmd/lang/es-ES.rc branches/setup_improvements/base/shell/cmd/lang/fr-FR.rc branches/setup_improvements/base/shell/cmd/lang/hu-HU.rc branches/setup_improvements/base/shell/cmd/lang/id-ID.rc branches/setup_improvements/base/shell/cmd/lang/it-IT.rc branches/setup_improvements/base/shell/cmd/lang/ja-JP.rc branches/setup_improvements/base/shell/cmd/lang/no-NO.rc branches/setup_improvements/base/shell/cmd/lang/pl-PL.rc branches/setup_improvements/base/shell/cmd/lang/ro-RO.rc branches/setup_improvements/base/shell/cmd/lang/ru-RU.rc branches/setup_improvements/base/shell/cmd/lang/sk-SK.rc branches/setup_improvements/base/shell/cmd/lang/sq-AL.rc branches/setup_improvements/base/shell/cmd/lang/sv-SE.rc branches/setup_improvements/base/shell/cmd/lang/tr-TR.rc branches/setup_improvements/base/shell/cmd/lang/uk-UA.rc branches/setup_improvements/base/shell/cmd/lang/zh-CN.rc branches/setup_improvements/base/shell/cmd/lang/zh-TW.rc branches/setup_improvements/base/shell/explorer/explorer.cpp branches/setup_improvements/base/shell/explorer/taskband.cpp branches/setup_improvements/base/shell/explorer/taskswnd.cpp branches/setup_improvements/base/shell/explorer/traywnd.cpp branches/setup_improvements/base/shell/rshell/misc.cpp branches/setup_improvements/base/system/userinit/lang/ru-RU.rc branches/setup_improvements/boot/bootdata/bootcd/unattend.inf branches/setup_improvements/boot/bootdata/bootcdregtest/unattend.inf branches/setup_improvements/boot/bootdata/caroots.inf branches/setup_improvements/boot/bootdata/hivesft.inf branches/setup_improvements/boot/bootdata/hivesys.inf branches/setup_improvements/dll/appcompat/apphelp/shimeng.c branches/setup_improvements/dll/appcompat/shims/shimlib/shimlib.c branches/setup_improvements/dll/appcompat/shims/shimlib/shimlib.h branches/setup_improvements/dll/cpl/console/lang/ru-RU.rc branches/setup_improvements/dll/cpl/desk/lang/ru-RU.rc branches/setup_improvements/dll/cpl/input/lang/bg-BG.rc branches/setup_improvements/dll/cpl/input/lang/cs-CZ.rc branches/setup_improvements/dll/cpl/input/lang/de-DE.rc branches/setup_improvements/dll/cpl/input/lang/el-GR.rc branches/setup_improvements/dll/cpl/input/lang/en-US.rc branches/setup_improvements/dll/cpl/input/lang/es-ES.rc branches/setup_improvements/dll/cpl/input/lang/fr-FR.rc branches/setup_improvements/dll/cpl/input/lang/he-IL.rc branches/setup_improvements/dll/cpl/input/lang/it-IT.rc branches/setup_improvements/dll/cpl/input/lang/no-NO.rc branches/setup_improvements/dll/cpl/input/lang/pl-PL.rc branches/setup_improvements/dll/cpl/input/lang/pt-BR.rc branches/setup_improvements/dll/cpl/input/lang/ro-RO.rc branches/setup_improvements/dll/cpl/input/lang/ru-RU.rc branches/setup_improvements/dll/cpl/input/lang/sk-SK.rc branches/setup_improvements/dll/cpl/input/lang/sq-AL.rc branches/setup_improvements/dll/cpl/input/lang/tr-TR.rc branches/setup_improvements/dll/cpl/input/lang/uk-UA.rc branches/setup_improvements/dll/cpl/input/lang/zh-CN.rc branches/setup_improvements/dll/cpl/input/lang/zh-TW.rc branches/setup_improvements/dll/cpl/input/resource.h branches/setup_improvements/dll/cpl/mmsys/lang/ru-RU.rc branches/setup_improvements/dll/keyboard/CMakeLists.txt branches/setup_improvements/dll/opengl/mesa/main/vsnprintf.c branches/setup_improvements/dll/shellext/acppage/CLayerUIPropPage.cpp branches/setup_improvements/dll/shellext/acppage/lang/bg-BG.rc branches/setup_improvements/dll/shellext/acppage/lang/cs-CZ.rc branches/setup_improvements/dll/shellext/acppage/lang/de-DE.rc branches/setup_improvements/dll/shellext/acppage/lang/en-US.rc branches/setup_improvements/dll/shellext/acppage/lang/es-ES.rc branches/setup_improvements/dll/shellext/acppage/lang/eu-ES.rc branches/setup_improvements/dll/shellext/acppage/lang/fr-FR.rc branches/setup_improvements/dll/shellext/acppage/lang/he-IL.rc branches/setup_improvements/dll/shellext/acppage/lang/hu-HU.rc branches/setup_improvements/dll/shellext/acppage/lang/id-ID.rc branches/setup_improvements/dll/shellext/acppage/lang/it-IT.rc branches/setup_improvements/dll/shellext/acppage/lang/nl-NL.rc branches/setup_improvements/dll/shellext/acppage/lang/no-NO.rc branches/setup_improvements/dll/shellext/acppage/lang/pl-PL.rc branches/setup_improvements/dll/shellext/acppage/lang/ro-RO.rc branches/setup_improvements/dll/shellext/acppage/lang/ru-RU.rc branches/setup_improvements/dll/shellext/acppage/lang/sk-SK.rc branches/setup_improvements/dll/shellext/acppage/lang/sq-AL.rc branches/setup_improvements/dll/shellext/acppage/lang/sv-SE.rc branches/setup_improvements/dll/shellext/acppage/lang/tr-TR.rc branches/setup_improvements/dll/shellext/acppage/lang/uk-UA.rc branches/setup_improvements/dll/shellext/acppage/lang/zh-CN.rc branches/setup_improvements/dll/shellext/acppage/lang/zh-TW.rc branches/setup_improvements/dll/shellext/acppage/resource.h branches/setup_improvements/dll/shellext/ntobjshex/ntobjshex.cpp branches/setup_improvements/dll/shellext/stobject/stobject.cpp branches/setup_improvements/dll/win32/browseui/browseui.cpp branches/setup_improvements/dll/win32/browseui/lang/ru-RU.rc branches/setup_improvements/dll/win32/browseui/shellbars/CBandSite.cpp branches/setup_improvements/dll/win32/crtdll/dllmain.c branches/setup_improvements/dll/win32/iernonce/lang/ru-RU.rc branches/setup_improvements/dll/win32/kernel32/winnls/locale_rc.rc branches/setup_improvements/dll/win32/msgina/lang/ru-RU.rc branches/setup_improvements/dll/win32/msvcrt/dllmain.c branches/setup_improvements/dll/win32/msvcrt20/msvcrt20.c branches/setup_improvements/dll/win32/msvcrt40/msvcrt40.c branches/setup_improvements/dll/win32/netapi32/netlogon.c branches/setup_improvements/dll/win32/setupapi/driver.c branches/setup_improvements/dll/win32/shell32/CEnumIDListBase.cpp branches/setup_improvements/dll/win32/shell32/CEnumIDListBase.h branches/setup_improvements/dll/win32/shell32/folders.cpp branches/setup_improvements/dll/win32/shell32/folders/CControlPanelFolder.cpp branches/setup_improvements/dll/win32/shell32/folders/CDesktopFolder.cpp branches/setup_improvements/dll/win32/shell32/folders/CDrivesFolder.cpp branches/setup_improvements/dll/win32/shell32/folders/CFSFolder.cpp branches/setup_improvements/dll/win32/shell32/folders/CRegFolder.cpp branches/setup_improvements/dll/win32/shell32/shell32.cpp branches/setup_improvements/dll/win32/shell32/shelldesktop/CDesktopBrowser.cpp branches/setup_improvements/dll/win32/shell32/wine/changenotify.c branches/setup_improvements/dll/win32/shell32/wine/shell32_main.c branches/setup_improvements/dll/win32/shell32/wine/shell32_main.h branches/setup_improvements/dll/win32/syssetup/install.c branches/setup_improvements/drivers/CMakeLists.txt branches/setup_improvements/drivers/usb/usbport/urb.c branches/setup_improvements/drivers/usb/usbport/usbport.h branches/setup_improvements/media/inf/intl.inf branches/setup_improvements/media/inf/shortcuts.inf branches/setup_improvements/sdk/include/ddk/mrx.h branches/setup_improvements/sdk/include/reactos/drivers/usbport/usbmport.h branches/setup_improvements/sdk/lib/crt/include/internal/wine/msvcrt.h branches/setup_improvements/sdk/lib/crt/precomp.h branches/setup_improvements/sdk/lib/crt/stdio/popen.c branches/setup_improvements/sdk/lib/drivers/rdbsslib/rdbss.c branches/setup_improvements/sdk/lib/drivers/rxce/rxce.c branches/setup_improvements/win32ss/gdi/eng/pathobj.c branches/setup_improvements/win32ss/user/ntuser/desktop.c branches/setup_improvements/win32ss/user/ntuser/menu.c [This mail would be too long, it was shortened to contain the URLs only.] Modified: branches/setup_improvements/base/applications/cmdutils/mode/lang/ru-RU.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/base/applica…
Modified: branches/setup_improvements/base/applications/dxdiag/lang/ru-RU.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/base/applica…
Modified: branches/setup_improvements/base/applications/mspaint/main.cpp URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/base/applica…
Modified: branches/setup_improvements/base/setup/usetup/inffile.h URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/base/setup/u…
Modified: branches/setup_improvements/base/shell/cmd/lang/cs-CZ.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/base/shell/c…
Modified: branches/setup_improvements/base/shell/cmd/lang/de-DE.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/base/shell/c…
Modified: branches/setup_improvements/base/shell/cmd/lang/el-GR.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/base/shell/c…
Modified: branches/setup_improvements/base/shell/cmd/lang/en-US.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/base/shell/c…
Modified: branches/setup_improvements/base/shell/cmd/lang/es-ES.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/base/shell/c…
Modified: branches/setup_improvements/base/shell/cmd/lang/fr-FR.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/base/shell/c…
Modified: branches/setup_improvements/base/shell/cmd/lang/hu-HU.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/base/shell/c…
Modified: branches/setup_improvements/base/shell/cmd/lang/id-ID.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/base/shell/c…
Modified: branches/setup_improvements/base/shell/cmd/lang/it-IT.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/base/shell/c…
Modified: branches/setup_improvements/base/shell/cmd/lang/ja-JP.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/base/shell/c…
Modified: branches/setup_improvements/base/shell/cmd/lang/no-NO.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/base/shell/c…
Modified: branches/setup_improvements/base/shell/cmd/lang/pl-PL.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/base/shell/c…
Modified: branches/setup_improvements/base/shell/cmd/lang/ro-RO.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/base/shell/c…
Modified: branches/setup_improvements/base/shell/cmd/lang/ru-RU.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/base/shell/c…
Modified: branches/setup_improvements/base/shell/cmd/lang/sk-SK.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/base/shell/c…
Modified: branches/setup_improvements/base/shell/cmd/lang/sq-AL.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/base/shell/c…
Modified: branches/setup_improvements/base/shell/cmd/lang/sv-SE.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/base/shell/c…
Modified: branches/setup_improvements/base/shell/cmd/lang/tr-TR.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/base/shell/c…
Modified: branches/setup_improvements/base/shell/cmd/lang/uk-UA.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/base/shell/c…
Modified: branches/setup_improvements/base/shell/cmd/lang/zh-CN.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/base/shell/c…
Modified: branches/setup_improvements/base/shell/cmd/lang/zh-TW.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/base/shell/c…
Modified: branches/setup_improvements/base/shell/explorer/explorer.cpp URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/base/shell/e…
Modified: branches/setup_improvements/base/shell/explorer/taskband.cpp URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/base/shell/e…
Modified: branches/setup_improvements/base/shell/explorer/taskswnd.cpp URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/base/shell/e…
Modified: branches/setup_improvements/base/shell/explorer/traywnd.cpp URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/base/shell/e…
Modified: branches/setup_improvements/base/shell/rshell/misc.cpp URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/base/shell/r…
Modified: branches/setup_improvements/base/system/userinit/lang/ru-RU.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/base/system/…
Modified: branches/setup_improvements/boot/bootdata/bootcd/unattend.inf URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/boot/bootdat…
Modified: branches/setup_improvements/boot/bootdata/bootcdregtest/unattend.inf URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/boot/bootdat…
Modified: branches/setup_improvements/boot/bootdata/caroots.inf URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/boot/bootdat…
Modified: branches/setup_improvements/boot/bootdata/hivesft.inf URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/boot/bootdat…
Modified: branches/setup_improvements/boot/bootdata/hivesys.inf URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/boot/bootdat…
Modified: branches/setup_improvements/dll/appcompat/apphelp/shimeng.c URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/appcompa…
Modified: branches/setup_improvements/dll/appcompat/shims/shimlib/shimlib.c URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/appcompa…
Modified: branches/setup_improvements/dll/appcompat/shims/shimlib/shimlib.h URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/appcompa…
Modified: branches/setup_improvements/dll/cpl/console/lang/ru-RU.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/cpl/cons…
Modified: branches/setup_improvements/dll/cpl/desk/lang/ru-RU.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/cpl/desk…
Modified: branches/setup_improvements/dll/cpl/input/lang/bg-BG.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/cpl/inpu…
Modified: branches/setup_improvements/dll/cpl/input/lang/cs-CZ.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/cpl/inpu…
Modified: branches/setup_improvements/dll/cpl/input/lang/de-DE.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/cpl/inpu…
Modified: branches/setup_improvements/dll/cpl/input/lang/el-GR.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/cpl/inpu…
Modified: branches/setup_improvements/dll/cpl/input/lang/en-US.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/cpl/inpu…
Modified: branches/setup_improvements/dll/cpl/input/lang/es-ES.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/cpl/inpu…
Modified: branches/setup_improvements/dll/cpl/input/lang/fr-FR.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/cpl/inpu…
Modified: branches/setup_improvements/dll/cpl/input/lang/he-IL.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/cpl/inpu…
Modified: branches/setup_improvements/dll/cpl/input/lang/it-IT.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/cpl/inpu…
Modified: branches/setup_improvements/dll/cpl/input/lang/no-NO.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/cpl/inpu…
Modified: branches/setup_improvements/dll/cpl/input/lang/pl-PL.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/cpl/inpu…
Modified: branches/setup_improvements/dll/cpl/input/lang/pt-BR.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/cpl/inpu…
Modified: branches/setup_improvements/dll/cpl/input/lang/ro-RO.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/cpl/inpu…
Modified: branches/setup_improvements/dll/cpl/input/lang/ru-RU.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/cpl/inpu…
Modified: branches/setup_improvements/dll/cpl/input/lang/sk-SK.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/cpl/inpu…
Modified: branches/setup_improvements/dll/cpl/input/lang/sq-AL.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/cpl/inpu…
Modified: branches/setup_improvements/dll/cpl/input/lang/tr-TR.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/cpl/inpu…
Modified: branches/setup_improvements/dll/cpl/input/lang/uk-UA.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/cpl/inpu…
Modified: branches/setup_improvements/dll/cpl/input/lang/zh-CN.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/cpl/inpu…
Modified: branches/setup_improvements/dll/cpl/input/lang/zh-TW.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/cpl/inpu…
Modified: branches/setup_improvements/dll/cpl/input/resource.h URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/cpl/inpu…
Modified: branches/setup_improvements/dll/cpl/mmsys/lang/ru-RU.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/cpl/mmsy…
Modified: branches/setup_improvements/dll/keyboard/CMakeLists.txt URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/keyboard…
Modified: branches/setup_improvements/dll/opengl/mesa/main/vsnprintf.c URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/opengl/m…
Modified: branches/setup_improvements/dll/shellext/acppage/CLayerUIPropPage.cpp URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/shellext…
Modified: branches/setup_improvements/dll/shellext/acppage/lang/bg-BG.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/shellext…
Modified: branches/setup_improvements/dll/shellext/acppage/lang/cs-CZ.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/shellext…
Modified: branches/setup_improvements/dll/shellext/acppage/lang/de-DE.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/shellext…
Modified: branches/setup_improvements/dll/shellext/acppage/lang/en-US.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/shellext…
Modified: branches/setup_improvements/dll/shellext/acppage/lang/es-ES.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/shellext…
Modified: branches/setup_improvements/dll/shellext/acppage/lang/eu-ES.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/shellext…
Modified: branches/setup_improvements/dll/shellext/acppage/lang/fr-FR.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/shellext…
Modified: branches/setup_improvements/dll/shellext/acppage/lang/he-IL.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/shellext…
Modified: branches/setup_improvements/dll/shellext/acppage/lang/hu-HU.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/shellext…
Modified: branches/setup_improvements/dll/shellext/acppage/lang/id-ID.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/shellext…
Modified: branches/setup_improvements/dll/shellext/acppage/lang/it-IT.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/shellext…
Modified: branches/setup_improvements/dll/shellext/acppage/lang/nl-NL.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/shellext…
Modified: branches/setup_improvements/dll/shellext/acppage/lang/no-NO.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/shellext…
Modified: branches/setup_improvements/dll/shellext/acppage/lang/pl-PL.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/shellext…
Modified: branches/setup_improvements/dll/shellext/acppage/lang/ro-RO.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/shellext…
Modified: branches/setup_improvements/dll/shellext/acppage/lang/ru-RU.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/shellext…
Modified: branches/setup_improvements/dll/shellext/acppage/lang/sk-SK.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/shellext…
Modified: branches/setup_improvements/dll/shellext/acppage/lang/sq-AL.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/shellext…
Modified: branches/setup_improvements/dll/shellext/acppage/lang/sv-SE.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/shellext…
Modified: branches/setup_improvements/dll/shellext/acppage/lang/tr-TR.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/shellext…
Modified: branches/setup_improvements/dll/shellext/acppage/lang/uk-UA.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/shellext…
Modified: branches/setup_improvements/dll/shellext/acppage/lang/zh-CN.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/shellext…
Modified: branches/setup_improvements/dll/shellext/acppage/lang/zh-TW.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/shellext…
Modified: branches/setup_improvements/dll/shellext/acppage/resource.h URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/shellext…
Modified: branches/setup_improvements/dll/shellext/ntobjshex/ntobjshex.cpp URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/shellext…
Modified: branches/setup_improvements/dll/shellext/stobject/stobject.cpp URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/shellext…
Modified: branches/setup_improvements/dll/win32/browseui/browseui.cpp URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/win32/br…
Modified: branches/setup_improvements/dll/win32/browseui/lang/ru-RU.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/win32/br…
Modified: branches/setup_improvements/dll/win32/browseui/shellbars/CBandSite.cpp URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/win32/br…
Modified: branches/setup_improvements/dll/win32/crtdll/dllmain.c URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/win32/cr…
Modified: branches/setup_improvements/dll/win32/iernonce/lang/ru-RU.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/win32/ie…
Modified: branches/setup_improvements/dll/win32/kernel32/winnls/locale_rc.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/win32/ke…
Modified: branches/setup_improvements/dll/win32/msgina/lang/ru-RU.rc URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/win32/ms…
Modified: branches/setup_improvements/dll/win32/msvcrt/dllmain.c URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/win32/ms…
Modified: branches/setup_improvements/dll/win32/msvcrt20/msvcrt20.c URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/win32/ms…
Modified: branches/setup_improvements/dll/win32/msvcrt40/msvcrt40.c URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/win32/ms…
Modified: branches/setup_improvements/dll/win32/netapi32/netlogon.c URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/win32/ne…
Modified: branches/setup_improvements/dll/win32/setupapi/driver.c URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/win32/se…
Modified: branches/setup_improvements/dll/win32/shell32/CEnumIDListBase.cpp URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/win32/sh…
Modified: branches/setup_improvements/dll/win32/shell32/CEnumIDListBase.h URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/win32/sh…
Modified: branches/setup_improvements/dll/win32/shell32/folders.cpp URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/win32/sh…
Modified: branches/setup_improvements/dll/win32/shell32/folders/CControlPanelFolder.cpp URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/win32/sh…
Modified: branches/setup_improvements/dll/win32/shell32/folders/CDesktopFolder.cpp URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/win32/sh…
Modified: branches/setup_improvements/dll/win32/shell32/folders/CDrivesFolder.cpp URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/win32/sh…
Modified: branches/setup_improvements/dll/win32/shell32/folders/CFSFolder.cpp URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/win32/sh…
Modified: branches/setup_improvements/dll/win32/shell32/folders/CRegFolder.cpp URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/win32/sh…
Modified: branches/setup_improvements/dll/win32/shell32/shell32.cpp URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/win32/sh…
Modified: branches/setup_improvements/dll/win32/shell32/shelldesktop/CDesktopBrowser.cpp URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/win32/sh…
Modified: branches/setup_improvements/dll/win32/shell32/wine/changenotify.c URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/win32/sh…
Modified: branches/setup_improvements/dll/win32/shell32/wine/shell32_main.c URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/win32/sh…
Modified: branches/setup_improvements/dll/win32/shell32/wine/shell32_main.h URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/win32/sh…
Modified: branches/setup_improvements/dll/win32/syssetup/install.c URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/dll/win32/sy…
Modified: branches/setup_improvements/drivers/CMakeLists.txt URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/drivers/CMak…
Modified: branches/setup_improvements/drivers/usb/usbport/urb.c URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/drivers/usb/…
Modified: branches/setup_improvements/drivers/usb/usbport/usbport.h URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/drivers/usb/…
Modified: branches/setup_improvements/media/inf/intl.inf URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/media/inf/in…
Modified: branches/setup_improvements/media/inf/shortcuts.inf URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/media/inf/sh…
Modified: branches/setup_improvements/sdk/include/ddk/mrx.h URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/sdk/include/…
Modified: branches/setup_improvements/sdk/include/reactos/drivers/usbport/usbmport.h URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/sdk/include/…
Modified: branches/setup_improvements/sdk/lib/crt/include/internal/wine/msvcrt.h URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/sdk/lib/crt/…
Modified: branches/setup_improvements/sdk/lib/crt/precomp.h URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/sdk/lib/crt/…
Modified: branches/setup_improvements/sdk/lib/crt/stdio/popen.c URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/sdk/lib/crt/…
Modified: branches/setup_improvements/sdk/lib/drivers/rdbsslib/rdbss.c URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/sdk/lib/driv…
Modified: branches/setup_improvements/sdk/lib/drivers/rxce/rxce.c URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/sdk/lib/driv…
Modified: branches/setup_improvements/win32ss/gdi/eng/pathobj.c URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/win32ss/gdi/…
Modified: branches/setup_improvements/win32ss/user/ntuser/desktop.c URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/win32ss/user…
Modified: branches/setup_improvements/win32ss/user/ntuser/menu.c URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/win32ss/user…
7 years, 5 months
1
0
0
0
← Newer
1
...
4
5
6
7
8
9
10
...
22
Older →
Jump to page:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Results per page:
10
25
50
100
200