1
0
mirror of https://github.com/winfsp/winfsp.git synced 2026-03-05 23:29:19 -06:00

Compare commits

..

1 Commits

Author SHA1 Message Date
Bill Zissimopoulos
9db17294da sys: FspFsvolQueryDirectoryCopyCache: check DirInfoCacheHint against DirInfoSize 2024-08-21 11:29:37 +01:00
199 changed files with 248 additions and 570 deletions

View File

@@ -1,26 +1,6 @@
# Changelog # Changelog
## v2.1 (2025)
- [FIX] Fixes a compatibility problem with certain AntiVirus products (e.g. Trend Micro).
- [FIX] Fixes a couple of rare BSODs on recent versions of Windows 11. See commits a482183, a2cd697 for details.
- [FIX] Fixes a rare problem when using `NtCreateFile` to perform "relative" opens on a network drive (see GitHub issue #561).
- [FIX] Fixes a racing issue with two processes competing to start the FSD discovered during testing.
## v2.1B2 (2024 Beta2)
- [FIX] Fixes a rare BSOD on recent versions of Windows. See commit a482183 for details.
- [FIX] Fixes a rare problem when using `NtCreateFile` to perform "relative" opens on a network drive (see GitHub issue #561).
- [FIX] Fixes a racing issue with two processes competing to start the FSD discovered during testing.
## v2.1B1 (2024 Beta1) ## v2.1B1 (2024 Beta1)
- [FIX] Fixes a rare BSOD on recent versions of Windows. See commit a482183 for details. - [FIX] Fixes a rare BSOD on recent versions of Windows. See commit a482183 for details.

View File

@@ -60,7 +60,6 @@ CONTRIBUTOR LIST
|Brett Dutro |brett.dutro at gmail.com |Brett Dutro |brett.dutro at gmail.com
|Changjian Gao (Juicedata, https://juicefs.com) |gcj at juicedata.io |Changjian Gao (Juicedata, https://juicefs.com) |gcj at juicedata.io
|Colin Atkinson (Atakama, https://atakama.com) |colin at atakama.com |Colin Atkinson (Atakama, https://atakama.com) |colin at atakama.com
|Ethan Chan (Juicedata, https://juicefs.com) |ethan at juicedata.io
|Felix Croes |felix at dworkin.nl |Felix Croes |felix at dworkin.nl
|Francois Karam (KS2, http://www.ks2.fr) |francois.karam at ks2.fr |Francois Karam (KS2, http://www.ks2.fr) |francois.karam at ks2.fr
|Fritz Elfert |fritz-github at fritz-elfert.de |Fritz Elfert |fritz-github at fritz-elfert.de
@@ -68,15 +67,12 @@ CONTRIBUTOR LIST
|John Oberschelp |john at oberschelp.net |John Oberschelp |john at oberschelp.net
|John Tyner |jtyner at gmail.com |John Tyner |jtyner at gmail.com
|Konstantinos Karakostas |noiredev at protonmail.com |Konstantinos Karakostas |noiredev at protonmail.com
|Naoki Ikeguchi |me at s6n.jp
|Paweł Wegner (Google LLC, https://google.com) |lemourin at google.com |Paweł Wegner (Google LLC, https://google.com) |lemourin at google.com
|Pedro Frejo (Arpa System, https://arpasystem.com) |pedro.frejo at arpasystem.com |Pedro Frejo (Arpa System, https://arpasystem.com) |pedro.frejo at arpasystem.com
|Ronny Chan |ronny at ronnychan.ca |Ronny Chan |ronny at ronnychan.ca
|Sam Kelly (DuroSoft Technologies LLC, https://durosoft.com) |sam at durosoft.com |Sam Kelly (DuroSoft Technologies LLC, https://durosoft.com) |sam at durosoft.com
|Santiago Ganis |sganis at gmail.com |Santiago Ganis |sganis at gmail.com
|Thomas Gibson-Robinson |tom at cocotec.io
|Tobias Urlaub |saibotu at outlook.de |Tobias Urlaub |saibotu at outlook.de
|Victor Gao |victgm at outlook.com |Victor Gao |victgm at outlook.com
|Zeho Huang |zeho11 at protonmail.com |Zeho Huang |zeho11 at protonmail.com
|Zhangfen Duan |lzcgwushuang at 163.com
|=== |===

View File

@@ -3,7 +3,7 @@
<Import Project="$(MsbuildThisFileDirectory)\build.version.props" /> <Import Project="$(MsbuildThisFileDirectory)\build.version.props" />
<ItemDefinitionGroup> <ItemDefinitionGroup>
<ClCompile> <ClCompile>
<PreprocessorDefinitions>NTDDI_VERSION=$(MyNtddiVersion);_WIN32_WINNT=$(MyWin32Version);MyProductName=$(MyProductName);MyProductFileName=$(MyProductFileName);MyDescription=$(MyDescription);MyCompanyName=$(MyCompanyName);MyCopyright=$(MyCopyright);MyProductVersion=$(MyProductVersion);MyProductStage=$(MyProductStage);MyVersion=$(MyVersion);MyVersionWithCommas=$(MyVersionWithCommas);MyFullVersion=$(MyFullVersion);MyFspFsctlDeviceClassGuid=$(MyFspFsctlDeviceClassGuid);MyFspFsvrtDeviceClassGuid=$(MyFspFsvrtDeviceClassGuid);MyFsctlRegisterPath=$(MyFsctlRegisterPath);MyNpRegisterPath=$(MyNpRegisterPath);MyEventLogRegisterPath=$(MyEventLogRegisterPath)</PreprocessorDefinitions> <PreprocessorDefinitions>NTDDI_VERSION=0x06010000;_WIN32_WINNT=0x0601;MyProductName=$(MyProductName);MyProductFileName=$(MyProductFileName);MyDescription=$(MyDescription);MyCompanyName=$(MyCompanyName);MyCopyright=$(MyCopyright);MyProductVersion=$(MyProductVersion);MyProductStage=$(MyProductStage);MyVersion=$(MyVersion);MyVersionWithCommas=$(MyVersionWithCommas);MyFullVersion=$(MyFullVersion);MyFspFsctlDeviceClassGuid=$(MyFspFsctlDeviceClassGuid);MyFspFsvrtDeviceClassGuid=$(MyFspFsvrtDeviceClassGuid);MyFsctlRegisterPath=$(MyFsctlRegisterPath);MyNpRegisterPath=$(MyNpRegisterPath);MyEventLogRegisterPath=$(MyEventLogRegisterPath)</PreprocessorDefinitions>
</ClCompile> </ClCompile>
<ResourceCompile> <ResourceCompile>
<PreprocessorDefinitions>MyProductName=$(MyProductName);MyProductFileName=$(MyProductFileName);MyDescription=$(MyDescription);MyCompanyName=$(MyCompanyName);MyCopyright=$(MyCopyright);MyProductVersion=$(MyProductVersion);MyProductStage=$(MyProductStage);MyVersion=$(MyVersion);MyVersionWithCommas=$(MyVersionWithCommas);MyFullVersion=$(MyFullVersion);MyFspFsctlDeviceClassGuid=$(MyFspFsctlDeviceClassGuid);MyFspFsvrtDeviceClassGuid=$(MyFspFsvrtDeviceClassGuid);MyFsctlRegisterPath=$(MyFsctlRegisterPath);MyNpRegisterPath=$(MyNpRegisterPath);MyEventLogRegisterPath=$(MyEventLogRegisterPath)</PreprocessorDefinitions> <PreprocessorDefinitions>MyProductName=$(MyProductName);MyProductFileName=$(MyProductFileName);MyDescription=$(MyDescription);MyCompanyName=$(MyCompanyName);MyCopyright=$(MyCopyright);MyProductVersion=$(MyProductVersion);MyProductStage=$(MyProductStage);MyVersion=$(MyVersion);MyVersionWithCommas=$(MyVersionWithCommas);MyFullVersion=$(MyFullVersion);MyFspFsctlDeviceClassGuid=$(MyFspFsctlDeviceClassGuid);MyFspFsvrtDeviceClassGuid=$(MyFspFsvrtDeviceClassGuid);MyFsctlRegisterPath=$(MyFsctlRegisterPath);MyNpRegisterPath=$(MyNpRegisterPath);MyEventLogRegisterPath=$(MyEventLogRegisterPath)</PreprocessorDefinitions>

View File

@@ -18,12 +18,12 @@
<MyCompanyName>Navimatics LLC</MyCompanyName> <MyCompanyName>Navimatics LLC</MyCompanyName>
<MyCopyright>2015-$([System.DateTime]::Now.ToString(`yyyy`)) Bill Zissimopoulos</MyCopyright> <MyCopyright>2015-$([System.DateTime]::Now.ToString(`yyyy`)) Bill Zissimopoulos</MyCopyright>
<MyCanonicalVersion>2.2</MyCanonicalVersion> <MyCanonicalVersion>2.1</MyCanonicalVersion>
<MyProductVersion>2026 Beta1</MyProductVersion> <MyProductVersion>2024 Beta1</MyProductVersion>
<MyProductStage>Beta</MyProductStage> <MyProductStage>Beta</MyProductStage>
<MyCrossCert>CrossCert.cer</MyCrossCert> <MyCrossCert>DigiCertGlobalG3CodeSigningECCSHA3842021CA1.cer</MyCrossCert>
<MyCertIssuer>DigiCert</MyCertIssuer> <MyCertIssuer>DigiCert</MyCertIssuer>
<MyVersion>$(MyCanonicalVersion).$(MyBuildNumber)</MyVersion> <MyVersion>$(MyCanonicalVersion).$(MyBuildNumber)</MyVersion>
@@ -72,22 +72,5 @@
<MyFsctlRegisterPath>"."</MyFsctlRegisterPath> <MyFsctlRegisterPath>"."</MyFsctlRegisterPath>
<MyNpRegisterPath>"."</MyNpRegisterPath> <MyNpRegisterPath>"."</MyNpRegisterPath>
<MyEventLogRegisterPath>"."</MyEventLogRegisterPath> <MyEventLogRegisterPath>"."</MyEventLogRegisterPath>
<!--
Target SDK/WDK version
For VS2019 builds (supports Win7/Win8/Win10+ x86/x64/a64):
MyTargetPlatformVersion = 10.0.19041.0
MyNtddiVersion = 0x06010000
MyWin32Version = 0x0601
For latest SDK/WDK builds (supports Win10+ x64/a64):
MyTargetPlatformVersion = $(LatestTargetPlatformVersion)
MyNtddiVersion = 0x0A000006
MyWin32Version = 0x0A00
-->
<MyTargetPlatformVersion>10.0.19041.0</MyTargetPlatformVersion>
<MyNtddiVersion>0x06010000</MyNtddiVersion>
<MyWin32Version>0x0601</MyWin32Version>
</PropertyGroup> </PropertyGroup>
</Project> </Project>

View File

@@ -1,7 +1,7 @@
/** /**
* @file CustomActions.cpp * @file CustomActions.cpp
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -15,7 +15,7 @@
<ProjectGuid>{95C223E6-B5F1-4FD0-9376-41CDBC824445}</ProjectGuid> <ProjectGuid>{95C223E6-B5F1-4FD0-9376-41CDBC824445}</ProjectGuid>
<RootNamespace>CustomActions</RootNamespace> <RootNamespace>CustomActions</RootNamespace>
<Keyword>Win32Proj</Keyword> <Keyword>Win32Proj</Keyword>
<WindowsTargetPlatformVersion>$(MyTargetPlatformVersion)</WindowsTargetPlatformVersion> <WindowsTargetPlatformVersion>$(LatestTargetPlatformVersion)</WindowsTargetPlatformVersion>
</PropertyGroup> </PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">

View File

@@ -31,7 +31,7 @@
<ProjectGuid>{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}</ProjectGuid> <ProjectGuid>{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}</ProjectGuid>
<Keyword>Win32Proj</Keyword> <Keyword>Win32Proj</Keyword>
<RootNamespace>fsbench</RootNamespace> <RootNamespace>fsbench</RootNamespace>
<WindowsTargetPlatformVersion>$(MyTargetPlatformVersion)</WindowsTargetPlatformVersion> <WindowsTargetPlatformVersion>$(LatestTargetPlatformVersion)</WindowsTargetPlatformVersion>
</PropertyGroup> </PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">

View File

@@ -31,7 +31,7 @@
<ProjectGuid>{10757011-749D-4954-873B-AE38D8145472}</ProjectGuid> <ProjectGuid>{10757011-749D-4954-873B-AE38D8145472}</ProjectGuid>
<Keyword>Win32Proj</Keyword> <Keyword>Win32Proj</Keyword>
<RootNamespace>fscrash</RootNamespace> <RootNamespace>fscrash</RootNamespace>
<WindowsTargetPlatformVersion>$(MyTargetPlatformVersion)</WindowsTargetPlatformVersion> <WindowsTargetPlatformVersion>$(LatestTargetPlatformVersion)</WindowsTargetPlatformVersion>
</PropertyGroup> </PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">

View File

@@ -31,7 +31,7 @@
<ProjectGuid>{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}</ProjectGuid> <ProjectGuid>{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}</ProjectGuid>
<Keyword>Win32Proj</Keyword> <Keyword>Win32Proj</Keyword>
<RootNamespace>memfs</RootNamespace> <RootNamespace>memfs</RootNamespace>
<WindowsTargetPlatformVersion>$(MyTargetPlatformVersion)</WindowsTargetPlatformVersion> <WindowsTargetPlatformVersion>$(LatestTargetPlatformVersion)</WindowsTargetPlatformVersion>
<ProjectName>memfs</ProjectName> <ProjectName>memfs</ProjectName>
</PropertyGroup> </PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />

View File

@@ -31,7 +31,7 @@
<ProjectGuid>{262DF8CC-E7A8-4460-A22C-683CBA322C32}</ProjectGuid> <ProjectGuid>{262DF8CC-E7A8-4460-A22C-683CBA322C32}</ProjectGuid>
<Keyword>Win32Proj</Keyword> <Keyword>Win32Proj</Keyword>
<RootNamespace>winfsptests</RootNamespace> <RootNamespace>winfsptests</RootNamespace>
<WindowsTargetPlatformVersion>$(MyTargetPlatformVersion)</WindowsTargetPlatformVersion> <WindowsTargetPlatformVersion>$(LatestTargetPlatformVersion)</WindowsTargetPlatformVersion>
</PropertyGroup> </PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">

View File

@@ -31,7 +31,7 @@
<ProjectGuid>{1E997BEC-1642-4A5C-B252-852DA094E11E}</ProjectGuid> <ProjectGuid>{1E997BEC-1642-4A5C-B252-852DA094E11E}</ProjectGuid>
<Keyword>Win32Proj</Keyword> <Keyword>Win32Proj</Keyword>
<RootNamespace>fsptool</RootNamespace> <RootNamespace>fsptool</RootNamespace>
<WindowsTargetPlatformVersion>$(MyTargetPlatformVersion)</WindowsTargetPlatformVersion> <WindowsTargetPlatformVersion>$(LatestTargetPlatformVersion)</WindowsTargetPlatformVersion>
</PropertyGroup> </PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">

View File

@@ -31,7 +31,7 @@
<ProjectGuid>{264A5D09-126F-4760-A3F1-4B3B95C925AA}</ProjectGuid> <ProjectGuid>{264A5D09-126F-4760-A3F1-4B3B95C925AA}</ProjectGuid>
<Keyword>Win32Proj</Keyword> <Keyword>Win32Proj</Keyword>
<RootNamespace>launchctl</RootNamespace> <RootNamespace>launchctl</RootNamespace>
<WindowsTargetPlatformVersion>$(MyTargetPlatformVersion)</WindowsTargetPlatformVersion> <WindowsTargetPlatformVersion>$(LatestTargetPlatformVersion)</WindowsTargetPlatformVersion>
</PropertyGroup> </PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">

View File

@@ -31,7 +31,7 @@
<ProjectGuid>{6CDF9411-B852-4EAC-822D-8F930675F17B}</ProjectGuid> <ProjectGuid>{6CDF9411-B852-4EAC-822D-8F930675F17B}</ProjectGuid>
<Keyword>Win32Proj</Keyword> <Keyword>Win32Proj</Keyword>
<RootNamespace>launcher</RootNamespace> <RootNamespace>launcher</RootNamespace>
<WindowsTargetPlatformVersion>$(MyTargetPlatformVersion)</WindowsTargetPlatformVersion> <WindowsTargetPlatformVersion>$(LatestTargetPlatformVersion)</WindowsTargetPlatformVersion>
</PropertyGroup> </PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">

View File

@@ -163,7 +163,7 @@ copy /b $(OutDir)fuse3-$(MyProductFileArch).pc + %(FullPath) $(OutDir)fuse3-$(My
<ProjectGuid>{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}</ProjectGuid> <ProjectGuid>{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}</ProjectGuid>
<Keyword>Win32Proj</Keyword> <Keyword>Win32Proj</Keyword>
<RootNamespace>winfspdll</RootNamespace> <RootNamespace>winfspdll</RootNamespace>
<WindowsTargetPlatformVersion>$(MyTargetPlatformVersion)</WindowsTargetPlatformVersion> <WindowsTargetPlatformVersion>$(LatestTargetPlatformVersion)</WindowsTargetPlatformVersion>
<ProjectName>winfsp.dll</ProjectName> <ProjectName>winfsp.dll</ProjectName>
</PropertyGroup> </PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />

View File

@@ -35,7 +35,7 @@
<Configuration>Debug</Configuration> <Configuration>Debug</Configuration>
<Platform Condition="'$(Platform)' == ''">Win32</Platform> <Platform Condition="'$(Platform)' == ''">Win32</Platform>
<RootNamespace>winfsp</RootNamespace> <RootNamespace>winfsp</RootNamespace>
<WindowsTargetPlatformVersion>$(MyTargetPlatformVersion)</WindowsTargetPlatformVersion> <WindowsTargetPlatformVersion>$(LatestTargetPlatformVersion)</WindowsTargetPlatformVersion>
<ProjectName>winfsp.sys</ProjectName> <ProjectName>winfsp.sys</ProjectName>
</PropertyGroup> </PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />

View File

@@ -5,7 +5,6 @@ This document contains a list of known open-source file systems and file system
== File Systems == File Systems
- https://github.com/wesley1975/blobfs-win[blobfs-win] - The native porting of the blobfs on the windows platform, blobfs can help you mount the Azure Blob storage as the local disk driver, no matter it is a Linux system or a Windows system. - https://github.com/wesley1975/blobfs-win[blobfs-win] - The native porting of the blobfs on the windows platform, blobfs can help you mount the Azure Blob storage as the local disk driver, no matter it is a Linux system or a Windows system.
- https://github.com/buildbarn/bb-remote-execution[buildbarn] - A bazel-compatible remote execution service that uses WinFSP to provide a virtual directory for performing builds
- https://github.com/cryptomator/cryptomator[Cryptomator] - Multi-platform transparent client-side encryption of your files in the cloud - https://github.com/cryptomator/cryptomator[Cryptomator] - Multi-platform transparent client-side encryption of your files in the cloud
- https://github.com/vgough/encfs[EncFS] - an Encrypted Filesystem for FUSE - https://github.com/vgough/encfs[EncFS] - an Encrypted Filesystem for FUSE
- https://github.com/lowleveldesign/fsmemfs[fsmemfs] - Memory File System written in F# - https://github.com/lowleveldesign/fsmemfs[fsmemfs] - Memory File System written in F#
@@ -29,7 +28,6 @@ This document contains a list of known open-source file systems and file system
== File System Libraries == File System Libraries
- https://github.com/winfsp/cgofuse[Go: cgofuse] - Cross-platform FUSE library for Go - https://github.com/winfsp/cgofuse[Go: cgofuse] - Cross-platform FUSE library for Go
- https://github.com/aegistudio/go-winfsp[Go: go-winfsp] - WinFSP bindings for Go
- https://github.com/SerCeMan/jnr-fuse[Java: jnr-fuse] - FUSE implementation in Java using Java Native Runtime (JNR) - https://github.com/SerCeMan/jnr-fuse[Java: jnr-fuse] - FUSE implementation in Java using Java Native Runtime (JNR)
- https://github.com/jnr-winfsp-team/jnr-winfsp[Java: jnr-winfsp] - A Java binding for WinFsp using Java Native Runtime (JNR) - https://github.com/jnr-winfsp-team/jnr-winfsp[Java: jnr-winfsp] - A Java binding for WinFsp using Java Native Runtime (JNR)
- https://github.com/billziss-gh/fusepy[Python: fusepy] - Simple ctypes bindings for FUSE - https://github.com/billziss-gh/fusepy[Python: fusepy] - Simple ctypes bindings for FUSE

View File

@@ -416,7 +416,7 @@ typedef struct _FSP_LAUNCH_REG_RECORD {
<br/> <br/>
<p align="center"> <p align="center">
<sub> <sub>
Copyright © 2015-2026 Bill Zissimopoulos Copyright © 2015-2021 Bill Zissimopoulos
<br/> <br/>
Generated with <a href="https://github.com/billziss-gh/prettydoc">prettydoc</a> Generated with <a href="https://github.com/billziss-gh/prettydoc">prettydoc</a>
</sub> </sub>

View File

@@ -404,59 +404,6 @@ NTSTATUS ( *DeleteReparsePoint)(
STATUS\_SUCCESS or error code. STATUS\_SUCCESS or error code.
</blockquote>
</details>
<details>
<summary>
<b>DispatcherStopped</b> - Inform the file system that its dispatcher has been stopped.
</summary>
<blockquote>
<br/>
```c
VOID ( *DispatcherStopped)(
FSP_FILE_SYSTEM *FileSystem,
BOOLEAN Normally);
```
**Parameters**
- _FileSystem_ \- The file system on which this request is posted.
- _Normally_ \- TRUE if the file system is being stopped via FspFileSystemStopDispatcher.
FALSE if the file system is being stopped because of another reason such
as driver unload/uninstall.
**Discussion**
Prior to WinFsp v2.0 the FSD would never unmount a file system volume unless
the user mode file system requested the unmount. Since WinFsp v2.0 it is possible
for the FSD to unmount a file system volume without an explicit user mode file system
request. For example, this happens when the FSD is being uninstalled.
A user mode file system can use this operation to determine when its dispatcher
has been stopped. The Normally parameter can be used to determine why the dispatcher
was stopped: it is TRUE when the file system is being stopped via
FspFileSystemStopDispatcher and FALSE otherwise.
When the file system receives a request with Normally == TRUE it need not take any
extra steps. This case is the same as for pre-v2.0 versions: since the file system
stopped the dispatcher via FspFileSystemStopDispatcher, it will likely exit its
process soon.
When the file system receives a request with Normally == FALSE it may need to take
extra steps to exit its process as this is not done by default.
A file system that uses the FspService infrastructure may use the
FspFileSystemStopServiceIfNecessary API to correctly handle all cases.
This operation is the last one that a file system will receive.
**See Also**
- FspFileSystemStopServiceIfNecessary
</blockquote> </blockquote>
</details> </details>
@@ -1708,7 +1655,7 @@ FSP_API NTSTATUS FspFileSystemCreate(
- _DevicePath_ \- The name of the control device for this file system. This must be either - _DevicePath_ \- The name of the control device for this file system. This must be either
FSP\_FSCTL\_DISK\_DEVICE\_NAME or FSP\_FSCTL\_NET\_DEVICE\_NAME. FSP\_FSCTL\_DISK\_DEVICE\_NAME or FSP\_FSCTL\_NET\_DEVICE\_NAME.
- _VolumeParams_ \- Volume parameters for the newly created file system. - _VolumeParams_ \- Volume parameters for the newly created file system.
- _Interface_ \- A pointer to the operations that implement this user mode file system. - _Interface_ \- A pointer to the actual operations that actually implement this user mode file system.
- _PFileSystem_ \- [out] - _PFileSystem_ \- [out]
Pointer that will receive the file system object created on successful return from this Pointer that will receive the file system object created on successful return from this
call. call.
@@ -2362,39 +2309,6 @@ FSP_API VOID FspFileSystemStopDispatcher(
- _FileSystem_ \- The file system object. - _FileSystem_ \- The file system object.
</blockquote>
</details>
<details>
<summary>
<b>FspFileSystemStopServiceIfNecessary</b> - Stop a file system service, if any.
</summary>
<blockquote>
<br/>
```c
FSP_API VOID FspFileSystemStopServiceIfNecessary(
FSP_FILE_SYSTEM *FileSystem,
BOOLEAN Normally);
```
**Parameters**
- _FileSystem_ \- The file system object.
- _Normally_ \- TRUE if the file system is being stopped via FspFileSystemStopDispatcher.
FALSE if the file system is being stopped because of another reason such
as driver unload/uninstall.
**Discussion**
This is a helper for implementing the DispatcherStopped operation, but only for file systems
that use the FspService infrastructure.
**See Also**
- DispatcherStopped
</blockquote> </blockquote>
</details> </details>
@@ -2737,8 +2651,6 @@ This function starts and runs a service. It executes the Windows StartServiceCtr
to connect the service process to the Service Control Manager. If the Service Control Manager is to connect the service process to the Service Control Manager. If the Service Control Manager is
not available (and console mode is allowed) it will enter console mode. not available (and console mode is allowed) it will enter console mode.
This function should be called once per process.
</blockquote> </blockquote>
</details> </details>
@@ -2863,7 +2775,7 @@ in a clean manner by calling this function.
<br/> <br/>
<p align="center"> <p align="center">
<sub> <sub>
Copyright © 2015-2026 Bill Zissimopoulos Copyright © 2015-2021 Bill Zissimopoulos
<br/> <br/>
Generated with <a href="https://github.com/billziss-gh/prettydoc">prettydoc</a> Generated with <a href="https://github.com/billziss-gh/prettydoc">prettydoc</a>
</sub> </sub>

View File

@@ -1,7 +1,7 @@
/** /**
* @file tlib/callstack.c * @file tlib/callstack.c
* *
* @copyright 2014-2026 Bill Zissimopoulos * @copyright 2014-2024 Bill Zissimopoulos
*/ */
#include <tlib/callstack.h> #include <tlib/callstack.h>

View File

@@ -1,7 +1,7 @@
/** /**
* @file tlib/callstack.h * @file tlib/callstack.h
* *
* @copyright 2014-2026 Bill Zissimopoulos * @copyright 2014-2024 Bill Zissimopoulos
*/ */
#ifndef TLIB_CALLSTACK_H_INCLUDED #ifndef TLIB_CALLSTACK_H_INCLUDED

View File

@@ -1,7 +1,7 @@
/** /**
* @file tlib/injected/allfunc.h * @file tlib/injected/allfunc.h
* *
* @copyright 2014-2026 Bill Zissimopoulos * @copyright 2014-2024 Bill Zissimopoulos
*/ */
#ifndef TLIB_INJECTED_ALLFUNC_H_INCLUDED #ifndef TLIB_INJECTED_ALLFUNC_H_INCLUDED

View File

@@ -1,7 +1,7 @@
/** /**
* @file tlib/injected/curlfunc.c * @file tlib/injected/curlfunc.c
* *
* @copyright 2014-2026 Bill Zissimopoulos * @copyright 2014-2024 Bill Zissimopoulos
*/ */
#include <tlib/injected/curlfunc.h> #include <tlib/injected/curlfunc.h>

View File

@@ -1,7 +1,7 @@
/** /**
* @file tlib/injected/curlfunc.h * @file tlib/injected/curlfunc.h
* *
* @copyright 2014-2026 Bill Zissimopoulos * @copyright 2014-2024 Bill Zissimopoulos
*/ */
#ifndef TLIB_INJECTED_CURLFUNC_H_INCLUDED #ifndef TLIB_INJECTED_CURLFUNC_H_INCLUDED

View File

@@ -1,7 +1,7 @@
/** /**
* @file tlib/injected/stdfunc.c * @file tlib/injected/stdfunc.c
* *
* @copyright 2014-2026 Bill Zissimopoulos * @copyright 2014-2024 Bill Zissimopoulos
*/ */
#include <tlib/injected/stdfunc.h> #include <tlib/injected/stdfunc.h>

View File

@@ -1,7 +1,7 @@
/** /**
* @file tlib/injected/stdfunc.h * @file tlib/injected/stdfunc.h
* *
* @copyright 2014-2026 Bill Zissimopoulos * @copyright 2014-2024 Bill Zissimopoulos
*/ */
#ifndef TLIB_INJECTED_STDFUNC_H_INCLUDED #ifndef TLIB_INJECTED_STDFUNC_H_INCLUDED

View File

@@ -1,7 +1,7 @@
/** /**
* @file tlib/injection.c * @file tlib/injection.c
* *
* @copyright 2014-2026 Bill Zissimopoulos * @copyright 2014-2024 Bill Zissimopoulos
*/ */
#include <tlib/injection.h> #include <tlib/injection.h>

View File

@@ -1,7 +1,7 @@
/** /**
* @file tlib/injection.h * @file tlib/injection.h
* *
* @copyright 2014-2026 Bill Zissimopoulos * @copyright 2014-2024 Bill Zissimopoulos
*/ */
/* NOTE: This header may usefully be included multiple times. /* NOTE: This header may usefully be included multiple times.

View File

@@ -1,7 +1,7 @@
/** /**
* @file tlib/testsuite.c * @file tlib/testsuite.c
* *
* @copyright 2014-2026 Bill Zissimopoulos * @copyright 2014-2024 Bill Zissimopoulos
*/ */
#include <tlib/testsuite.h> #include <tlib/testsuite.h>

View File

@@ -1,7 +1,7 @@
/** /**
* @file tlib/testsuite.h * @file tlib/testsuite.h
* *
* @copyright 2014-2026 Bill Zissimopoulos * @copyright 2014-2024 Bill Zissimopoulos
*/ */
#ifndef TLIB_TESTSUITE_H_INCLUDED #ifndef TLIB_TESTSUITE_H_INCLUDED

View File

@@ -6,7 +6,7 @@
* FUSE: Filesystem in Userspace * FUSE: Filesystem in Userspace
* Copyright (C) 2001-2007 Miklos Szeredi <miklos@szeredi.hu> * Copyright (C) 2001-2007 Miklos Szeredi <miklos@szeredi.hu>
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -6,7 +6,7 @@
* FUSE: Filesystem in Userspace * FUSE: Filesystem in Userspace
* Copyright (C) 2001-2007 Miklos Szeredi <miklos@szeredi.hu> * Copyright (C) 2001-2007 Miklos Szeredi <miklos@szeredi.hu>
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -6,7 +6,7 @@
* FUSE: Filesystem in Userspace * FUSE: Filesystem in Userspace
* Copyright (C) 2001-2007 Miklos Szeredi <miklos@szeredi.hu> * Copyright (C) 2001-2007 Miklos Szeredi <miklos@szeredi.hu>
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -2,7 +2,7 @@
* @file fuse/winfsp_fuse.h * @file fuse/winfsp_fuse.h
* WinFsp FUSE compatible API. * WinFsp FUSE compatible API.
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.
@@ -27,7 +27,6 @@
#include <stdint.h> #include <stdint.h>
#if !defined(WINFSP_DLL_INTERNAL) #if !defined(WINFSP_DLL_INTERNAL)
#include <stdlib.h> #include <stdlib.h>
#include <string.h>
#endif #endif
#ifdef __cplusplus #ifdef __cplusplus

View File

@@ -6,7 +6,7 @@
* FUSE: Filesystem in Userspace * FUSE: Filesystem in Userspace
* Copyright (C) 2001-2007 Miklos Szeredi <miklos@szeredi.hu> * Copyright (C) 2001-2007 Miklos Szeredi <miklos@szeredi.hu>
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -6,7 +6,7 @@
* FUSE: Filesystem in Userspace * FUSE: Filesystem in Userspace
* Copyright (C) 2001-2007 Miklos Szeredi <miklos@szeredi.hu> * Copyright (C) 2001-2007 Miklos Szeredi <miklos@szeredi.hu>
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -2,7 +2,7 @@
* @file fuse3/fuse_opt.h * @file fuse3/fuse_opt.h
* WinFsp FUSE3 compatible API. * WinFsp FUSE3 compatible API.
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -2,7 +2,7 @@
* @file fuse3/winfsp_fuse.h * @file fuse3/winfsp_fuse.h
* WinFsp FUSE3 compatible API. * WinFsp FUSE3 compatible API.
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -1,7 +1,7 @@
/** /**
* @file winfsp/fsctl.h * @file winfsp/fsctl.h
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -5,7 +5,7 @@
* In order to use the WinFsp Launch API a program must include &lt;winfsp/launch.h&gt; * In order to use the WinFsp Launch API a program must include &lt;winfsp/launch.h&gt;
* and link with the winfsp_x64.dll (or winfsp_x86.dll) library. * and link with the winfsp_x64.dll (or winfsp_x86.dll) library.
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -5,7 +5,7 @@
* In order to use the WinFsp API the user mode file system must include &lt;winfsp/winfsp.h&gt; * In order to use the WinFsp API the user mode file system must include &lt;winfsp/winfsp.h&gt;
* and link with the winfsp_x64.dll (or winfsp_x86.dll) library. * and link with the winfsp_x64.dll (or winfsp_x86.dll) library.
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -2,7 +2,7 @@
* @file winfsp/winfsp.hpp * @file winfsp/winfsp.hpp
* WinFsp C++ Layer. * WinFsp C++ Layer.
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -1,7 +1,7 @@
/** /**
* @file fuse/cygfuse.c * @file fuse/cygfuse.c
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2022 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -1,7 +1,7 @@
/** /**
* @file fuse3/cygfuse.c * @file fuse3/cygfuse.c
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2022 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -1,7 +1,7 @@
/** /**
* @file winfsp/fsext.h * @file winfsp/fsext.h
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2022 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -1,7 +1,7 @@
/** /**
* @file dll/debug.c * @file dll/debug.c
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -1,7 +1,7 @@
/** /**
* @file dll/debuglog.c * @file dll/debuglog.c
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -1,7 +1,7 @@
/** /**
* @file dll/dirbuf.c * @file dll/dirbuf.c
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -1,7 +1,7 @@
/** /**
* @file dll/eventlog.c * @file dll/eventlog.c
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -1,7 +1,7 @@
/** /**
* @file dll/fs.c * @file dll/fs.c
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -1,7 +1,7 @@
/** /**
* @file dll/fsctl.c * @file dll/fsctl.c
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -1,7 +1,7 @@
/** /**
* @file dll/fsop.c * @file dll/fsop.c
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -1,7 +1,7 @@
/** /**
* @file dll/fuse/fuse.c * @file dll/fuse/fuse.c
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.
@@ -98,7 +98,6 @@ static struct fuse_opt fsp_fuse_core_opts[] =
FSP_FUSE_CORE_OPT("VolumeInfoTimeout=", set_VolumeInfoTimeout, 1), FSP_FUSE_CORE_OPT("VolumeInfoTimeout=", set_VolumeInfoTimeout, 1),
FSP_FUSE_CORE_OPT("VolumeInfoTimeout=%d", VolumeParams.VolumeInfoTimeout, 0), FSP_FUSE_CORE_OPT("VolumeInfoTimeout=%d", VolumeParams.VolumeInfoTimeout, 0),
FSP_FUSE_CORE_OPT("KeepFileCache=", set_KeepFileCache, 1), FSP_FUSE_CORE_OPT("KeepFileCache=", set_KeepFileCache, 1),
FSP_FUSE_CORE_OPT("FlushOnCleanup=", set_FlushOnCleanup, 1),
FSP_FUSE_CORE_OPT("LegacyUnlinkRename=", set_LegacyUnlinkRename, 1), FSP_FUSE_CORE_OPT("LegacyUnlinkRename=", set_LegacyUnlinkRename, 1),
FSP_FUSE_CORE_OPT("ThreadCount=%u", ThreadCount, 0), FSP_FUSE_CORE_OPT("ThreadCount=%u", ThreadCount, 0),
FUSE_OPT_KEY("UNC=", 'U'), FUSE_OPT_KEY("UNC=", 'U'),
@@ -120,8 +119,6 @@ static struct fuse_opt fsp_fuse_core_opts[] =
FUSE_OPT_KEY("GroupName=", 'g'), FUSE_OPT_KEY("GroupName=", 'g'),
FSP_FUSE_CORE_OPT("--GroupName=", set_gid, 1), FSP_FUSE_CORE_OPT("--GroupName=", set_gid, 1),
FUSE_OPT_KEY("--GroupName=", 'g'), FUSE_OPT_KEY("--GroupName=", 'g'),
FSP_FUSE_CORE_OPT("AddWriteEaAccess", add_write_ea_access, 1),
FUSE_OPT_END, FUSE_OPT_END,
}; };
@@ -883,7 +880,7 @@ FSP_FUSE_API struct fuse *fsp_fuse_new(struct fsp_fuse_env *env,
opt_data.VolumeParams.ReparsePointsAccessCheck = FALSE; opt_data.VolumeParams.ReparsePointsAccessCheck = FALSE;
opt_data.VolumeParams.NamedStreams = FALSE; opt_data.VolumeParams.NamedStreams = FALSE;
opt_data.VolumeParams.ReadOnlyVolume = FALSE; opt_data.VolumeParams.ReadOnlyVolume = FALSE;
opt_data.VolumeParams.PostCleanupWhenModifiedOnly = !opt_data.set_FlushOnCleanup; opt_data.VolumeParams.PostCleanupWhenModifiedOnly = TRUE;
opt_data.VolumeParams.PassQueryDirectoryFileName = TRUE; opt_data.VolumeParams.PassQueryDirectoryFileName = TRUE;
opt_data.VolumeParams.DeviceControl = TRUE; opt_data.VolumeParams.DeviceControl = TRUE;
#if defined(FSP_CFG_REJECT_EARLY_IRP) #if defined(FSP_CFG_REJECT_EARLY_IRP)
@@ -905,11 +902,9 @@ FSP_FUSE_API struct fuse *fsp_fuse_new(struct fsp_fuse_env *env,
f->set_create_dir_umask = opt_data.set_create_dir_umask; f->create_dir_umask = opt_data.create_dir_umask; f->set_create_dir_umask = opt_data.set_create_dir_umask; f->create_dir_umask = opt_data.create_dir_umask;
f->set_uid = opt_data.set_uid; f->uid = opt_data.uid; f->set_uid = opt_data.set_uid; f->uid = opt_data.uid;
f->set_gid = opt_data.set_gid; f->gid = opt_data.gid; f->set_gid = opt_data.set_gid; f->gid = opt_data.gid;
f->add_write_ea_access = opt_data.add_write_ea_access;
f->rellinks = opt_data.rellinks; f->rellinks = opt_data.rellinks;
f->dothidden = opt_data.dothidden; f->dothidden = opt_data.dothidden;
f->ThreadCount = opt_data.ThreadCount; f->ThreadCount = opt_data.ThreadCount;
f->FlushOnCleanup = !!opt_data.set_FlushOnCleanup;
memcpy(&f->ops, ops, opsize); memcpy(&f->ops, ops, opsize);
f->data = data; f->data = data;
f->DebugLog = opt_data.debug ? -1 : 0; f->DebugLog = opt_data.debug ? -1 : 0;

View File

@@ -1,7 +1,7 @@
/** /**
* @file dll/fuse/fuse_compat.c * @file dll/fuse/fuse_compat.c
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -1,7 +1,7 @@
/** /**
* @file dll/fuse/fuse_intf.c * @file dll/fuse/fuse_intf.c
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.
@@ -545,39 +545,6 @@ static NTSTATUS fsp_fuse_intf_GetFileInfoFunnel(FSP_FILE_SYSTEM *FileSystem,
return STATUS_SUCCESS; return STATUS_SUCCESS;
} }
static VOID fsp_fuse_intf_AddWriteEaAccess(
PSECURITY_DESCRIPTOR SecurityDescriptor)
{
BOOL DaclPresent, DaclDefaulted;
PACL Acl;
ACL_SIZE_INFORMATION AclSizeInfo;
PACE_HEADER Ace;
PACCESS_MASK AccessMask;
if (!GetSecurityDescriptorDacl(SecurityDescriptor, &DaclPresent, &Acl, &DaclDefaulted))
return;
if (0 == Acl)
return;
if (!GetAclInformation(Acl, &AclSizeInfo, sizeof AclSizeInfo, AclSizeInformation))
return;
for (DWORD I = 0; I < AclSizeInfo.AceCount; I++)
{
if (!GetAce(Acl, I, &Ace))
return;
if (Ace->AceType == ACCESS_ALLOWED_ACE_TYPE)
AccessMask = &((PACCESS_ALLOWED_ACE)Ace)->Mask;
else if (Ace->AceType == ACCESS_DENIED_ACE_TYPE)
AccessMask = &((PACCESS_DENIED_ACE)Ace)->Mask;
else
continue;
if (*AccessMask & FILE_WRITE_DATA)
*AccessMask |= FILE_WRITE_EA;
}
}
static NTSTATUS fsp_fuse_intf_GetSecurityEx(FSP_FILE_SYSTEM *FileSystem, static NTSTATUS fsp_fuse_intf_GetSecurityEx(FSP_FILE_SYSTEM *FileSystem,
const char *PosixPath, struct fuse_file_info *fi, const char *PosixPath, struct fuse_file_info *fi,
PUINT32 PFileAttributes, PUINT32 PFileAttributes,
@@ -611,12 +578,8 @@ static NTSTATUS fsp_fuse_intf_GetSecurityEx(FSP_FILE_SYSTEM *FileSystem,
} }
*PSecurityDescriptorSize = SecurityDescriptorSize; *PSecurityDescriptorSize = SecurityDescriptorSize;
if (0 != SecurityDescriptorBuf) if (0 != SecurityDescriptorBuf)
{
memcpy(SecurityDescriptorBuf, SecurityDescriptor, SecurityDescriptorSize); memcpy(SecurityDescriptorBuf, SecurityDescriptor, SecurityDescriptorSize);
if (f->add_write_ea_access)
fsp_fuse_intf_AddWriteEaAccess(SecurityDescriptorBuf);
}
} }
if (0 != PFileAttributes) if (0 != PFileAttributes)
@@ -1083,12 +1046,13 @@ static NTSTATUS fsp_fuse_intf_Create(FSP_FILE_SYSTEM *FileSystem,
goto exit; goto exit;
/* /*
* Ignore fuse_file_info::keep_cache. * Ignore fuse_file_info::direct_io, fuse_file_info::keep_cache.
* NOTE: Originally WinFsp did not support disabling the cache manager
* for an individual file. This is now possible and we should revisit.
*
* Ignore fuse_file_info::nonseekable. * Ignore fuse_file_info::nonseekable.
*/ */
FspFileSystemGetOperationContext()->Response->Rsp.Create.Opened.DisableCache = fi.direct_io;
*PFileDesc = filedesc; *PFileDesc = filedesc;
memcpy(FileInfo, &FileInfoBuf, sizeof FileInfoBuf); memcpy(FileInfo, &FileInfoBuf, sizeof FileInfoBuf);
@@ -1227,12 +1191,13 @@ static NTSTATUS fsp_fuse_intf_Open(FSP_FILE_SYSTEM *FileSystem,
goto exit; goto exit;
/* /*
* Ignore fuse_file_info::keep_cache. * Ignore fuse_file_info::direct_io, fuse_file_info::keep_cache.
* NOTE: Originally WinFsp did not support disabling the cache manager
* for an individual file. This is now possible and we should revisit.
*
* Ignore fuse_file_info::nonseekable. * Ignore fuse_file_info::nonseekable.
*/ */
FspFileSystemGetOperationContext()->Response->Rsp.Create.Opened.DisableCache = fi.direct_io;
*PFileDesc = filedesc; *PFileDesc = filedesc;
memcpy(FileInfo, &FileInfoBuf, sizeof FileInfoBuf); memcpy(FileInfo, &FileInfoBuf, sizeof FileInfoBuf);
@@ -1340,7 +1305,6 @@ static VOID fsp_fuse_intf_Cleanup(FSP_FILE_SYSTEM *FileSystem,
{ {
struct fuse *f = FileSystem->UserContext; struct fuse *f = FileSystem->UserContext;
struct fsp_fuse_file_desc *filedesc = FileDesc; struct fsp_fuse_file_desc *filedesc = FileDesc;
struct fuse_file_info fi;
/* /*
* In Windows a DeleteFile/RemoveDirectory is the sequence of the following: * In Windows a DeleteFile/RemoveDirectory is the sequence of the following:
@@ -1367,14 +1331,6 @@ static VOID fsp_fuse_intf_Cleanup(FSP_FILE_SYSTEM *FileSystem,
* LegacyUnlinkRename option to opt out of the POSIX unlink semantics. * LegacyUnlinkRename option to opt out of the POSIX unlink semantics.
*/ */
if (f->FlushOnCleanup && !filedesc->IsDirectory && !filedesc->IsReparsePoint) {
memset(&fi, 0, sizeof fi);
fi.flags = filedesc->OpenFlags;
fi.fh = filedesc->FileHandle;
if (0 != f->ops.flush)
f->ops.flush(filedesc->PosixPath, &fi);
}
if (Flags & FspCleanupDelete) if (Flags & FspCleanupDelete)
if (filedesc->IsDirectory && !filedesc->IsReparsePoint) if (filedesc->IsDirectory && !filedesc->IsReparsePoint)
{ {
@@ -1410,7 +1366,7 @@ static VOID fsp_fuse_intf_Close(FSP_FILE_SYSTEM *FileSystem,
} }
else else
{ {
if (!f->FlushOnCleanup && 0 != f->ops.flush) if (0 != f->ops.flush)
f->ops.flush(filedesc->PosixPath, &fi); f->ops.flush(filedesc->PosixPath, &fi);
if (0 != f->ops.release) if (0 != f->ops.release)
f->ops.release(filedesc->PosixPath, &fi); f->ops.release(filedesc->PosixPath, &fi);

View File

@@ -1,7 +1,7 @@
/** /**
* @file dll/fuse/fuse_loop.c * @file dll/fuse/fuse_loop.c
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -1,7 +1,7 @@
/** /**
* @file dll/fuse/fuse_main.c * @file dll/fuse/fuse_main.c
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -1,7 +1,7 @@
/** /**
* @file dll/fuse/fuse_opt.c * @file dll/fuse/fuse_opt.c
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -1,7 +1,7 @@
/** /**
* @file dll/fuse/library.h * @file dll/fuse/library.h
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.
@@ -55,7 +55,6 @@ struct fuse
int set_create_dir_umask, create_dir_umask; int set_create_dir_umask, create_dir_umask;
int set_uid, uid; int set_uid, uid;
int set_gid, gid; int set_gid, gid;
int add_write_ea_access;
int rellinks; int rellinks;
int dothidden; int dothidden;
unsigned ThreadCount; unsigned ThreadCount;
@@ -64,7 +63,6 @@ struct fuse
unsigned conn_want; unsigned conn_want;
BOOLEAN fsinit; BOOLEAN fsinit;
BOOLEAN has_symlinks, has_slashdot; BOOLEAN has_symlinks, has_slashdot;
BOOLEAN FlushOnCleanup;
UINT32 DebugLog; UINT32 DebugLog;
FSP_FILE_SYSTEM_OPERATION_GUARD_STRATEGY OpGuardStrategy; FSP_FILE_SYSTEM_OPERATION_GUARD_STRATEGY OpGuardStrategy;
FSP_FSCTL_VOLUME_PARAMS VolumeParams; FSP_FSCTL_VOLUME_PARAMS VolumeParams;
@@ -149,7 +147,6 @@ struct fsp_fuse_core_opt_data
set_create_dir_umask, create_dir_umask, set_create_dir_umask, create_dir_umask,
set_uid, uid, username_to_uid_result, set_uid, uid, username_to_uid_result,
set_gid, gid, set_gid, gid,
add_write_ea_access,
set_uidmap, set_uidmap,
set_attr_timeout, attr_timeout, set_attr_timeout, attr_timeout,
rellinks, rellinks,
@@ -159,7 +156,6 @@ struct fsp_fuse_core_opt_data
set_EaTimeout, set_EaTimeout,
set_VolumeInfoTimeout, set_VolumeInfoTimeout,
set_KeepFileCache, set_KeepFileCache,
set_FlushOnCleanup,
set_LegacyUnlinkRename; set_LegacyUnlinkRename;
unsigned ThreadCount; unsigned ThreadCount;
FSP_FSCTL_VOLUME_PARAMS VolumeParams; FSP_FSCTL_VOLUME_PARAMS VolumeParams;

View File

@@ -1,7 +1,7 @@
/** /**
* @file dll/fuse3/fuse2to3.c * @file dll/fuse3/fuse2to3.c
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -1,7 +1,7 @@
/** /**
* @file dll/fuse3/fuse3.c * @file dll/fuse3/fuse3.c
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -1,7 +1,7 @@
/** /**
* @file dll/fuse/fuse3_compat.c * @file dll/fuse/fuse3_compat.c
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -1,7 +1,7 @@
/** /**
* @file dll/fuse3/library.h * @file dll/fuse3/library.h
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -1,7 +1,7 @@
/** /**
* @file dll/launch.c * @file dll/launch.c
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -1,7 +1,7 @@
/** /**
* @file dll/ldap.c * @file dll/ldap.c
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -1,7 +1,7 @@
/** /**
* @file dll/library.c * @file dll/library.c
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -1,7 +1,7 @@
/** /**
* @file dll/library.h * @file dll/library.h
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -1,7 +1,7 @@
/** /**
* @file dll/mount.c * @file dll/mount.c
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -1,7 +1,7 @@
/** /**
* @file dll/np.c * @file dll/np.c
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.
@@ -454,41 +454,6 @@ exit:
return NpResult; return NpResult;
} }
static BOOLEAN FspNpCheckRemoteVolume(PWSTR RemoteName)
{
PWSTR ClassName, InstanceName, P;
ULONG ClassNameLen, InstanceNameLen;
WCHAR RemoteNameBuf[9 + sizeof(((FSP_FSCTL_VOLUME_PARAMS *)0)->Prefix) / sizeof(WCHAR)];
HANDLE Handle;
DWORD Bytes;
BOOLEAN Result;
if (!FspNpParseRemoteName(RemoteName,
&ClassName, &ClassNameLen, &InstanceName, &InstanceNameLen))
return FALSE;
Result = FALSE;
P = RemoteNameBuf;
*P++ = L'\\'; *P++ = L'\\'; *P++ = L'?'; *P++ = L'\\';
*P++ = L'U'; *P++ = L'N'; *P++ = L'C'; *P++ = L'\\';
memcpy(P, ClassName, ClassNameLen * sizeof(WCHAR)); P += ClassNameLen; *P++ = L'\\';
memcpy(P, InstanceName, InstanceNameLen * sizeof(WCHAR)); P += InstanceNameLen; *P++ = L'\\';
*P++ = L'\0';
Handle = CreateFileW(RemoteNameBuf,
FILE_READ_ATTRIBUTES, 0, 0, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0);
if (INVALID_HANDLE_VALUE != Handle)
{
/* the file system is up and running; is it WinFsp? */
if (DeviceIoControl(Handle, FSP_FSCTL_QUERY_WINFSP, 0, 0, 0, 0, &Bytes, 0))
Result = TRUE;
CloseHandle(Handle);
}
return Result;
}
DWORD APIENTRY NPGetConnection( DWORD APIENTRY NPGetConnection(
LPWSTR lpLocalName, LPWSTR lpRemoteName, LPDWORD lpnBufferLen) LPWSTR lpLocalName, LPWSTR lpRemoteName, LPDWORD lpnBufferLen)
{ {
@@ -608,16 +573,7 @@ DWORD APIENTRY NPAddConnection(LPNETRESOURCEW lpNetResource, LPWSTR lpPassword,
NpResult = FspNpGetRemoteInfo(lpRemoteName, 0, &CredentialsKind, &AllowImpersonation); NpResult = FspNpGetRemoteInfo(lpRemoteName, 0, &CredentialsKind, &AllowImpersonation);
if (WN_SUCCESS != NpResult) if (WN_SUCCESS != NpResult)
{
/*
* This may still be a WinFsp network file system, but not managed by the Launcher.
* So if it is already live, one of ours and we do not need to map a drive, then go
* ahead and report success.
*/
if (L'\0' == LocalNameBuf[0] && FspNpCheckRemoteVolume(lpRemoteName))
NpResult = WN_SUCCESS;
return NpResult; return NpResult;
}
#if defined(FSP_NP_CREDENTIAL_MANAGER) #if defined(FSP_NP_CREDENTIAL_MANAGER)
/* if we need credentials and none were passed check with the credential manager */ /* if we need credentials and none were passed check with the credential manager */
@@ -764,15 +720,6 @@ DWORD APIENTRY NPAddConnection(LPNETRESOURCEW lpNetResource, LPWSTR lpPassword,
/* we are not being asked for a drive mapping, so whatever we have is good! */ /* we are not being asked for a drive mapping, so whatever we have is good! */
NpResult = WN_SUCCESS; NpResult = WN_SUCCESS;
break; break;
case WN_NO_NETWORK:
/*
* This may still be a WinFsp network file system, but not managed by the Launcher.
* So if it is already live, one of ours and we do not need to map a drive, then go
* ahead and report success.
*/
if (L'\0' == LocalNameBuf[0] && FspNpCheckRemoteVolume(lpRemoteName))
NpResult = WN_SUCCESS;
break;
default: default:
NpResult = WN_NO_NETWORK; NpResult = WN_NO_NETWORK;
break; break;

View File

@@ -1,7 +1,7 @@
/** /**
* @file dll/ntstatus.c * @file dll/ntstatus.c
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -1,7 +1,7 @@
/** /**
* @file dll/path.c * @file dll/path.c
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -1,7 +1,7 @@
/** /**
* @file dll/security.c * @file dll/security.c
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -1,7 +1,7 @@
/** /**
* @file dll/service.c * @file dll/service.c
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -1,7 +1,7 @@
/** /**
* @file dll/sxs.c * @file dll/sxs.c
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -1,7 +1,7 @@
/** /**
* @file dll/util.c * @file dll/util.c
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -1,7 +1,7 @@
/** /**
* @file dll/wksid.c * @file dll/wksid.c
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -1,7 +1,7 @@
/* /*
* dotnet/FileSystemBase+Const.cs * dotnet/FileSystemBase+Const.cs
* *
* Copyright 2015-2026 Bill Zissimopoulos * Copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -1,7 +1,7 @@
/* /*
* dotnet/FileSystemBase.cs * dotnet/FileSystemBase.cs
* *
* Copyright 2015-2026 Bill Zissimopoulos * Copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -1,7 +1,7 @@
/* /*
* dotnet/FileSystemHost.cs * dotnet/FileSystemHost.cs
* *
* Copyright 2015-2026 Bill Zissimopoulos * Copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -1,7 +1,7 @@
/* /*
* dotnet/Interop.cs * dotnet/Interop.cs
* *
* Copyright 2015-2026 Bill Zissimopoulos * Copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -1,7 +1,7 @@
/* /*
* dotnet/Service.cs * dotnet/Service.cs
* *
* Copyright 2015-2026 Bill Zissimopoulos * Copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -1,7 +1,7 @@
/** /**
* @file fsptool/fsptool.c * @file fsptool/fsptool.c
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -1,7 +1,7 @@
/** /**
* @file launcher/launchctl.c * @file launcher/launchctl.c
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -1,7 +1,7 @@
/** /**
* @file launcher/launcher.c * @file launcher/launcher.c
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -1,7 +1,7 @@
/** /**
* @file launcher/ptrans.c * @file launcher/ptrans.c
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -4,7 +4,7 @@
* Shared kernel/user configuration. This file is to be included by the * Shared kernel/user configuration. This file is to be included by the
* FSD and DLL components ONLY! * FSD and DLL components ONLY!
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -1,7 +1,7 @@
/** /**
* @file shared/ku/library.h * @file shared/ku/library.h
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -1,7 +1,7 @@
/** /**
* @file shared/ku/mountmgr.c * @file shared/ku/mountmgr.c
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -14,7 +14,7 @@
* [SNAME] * [SNAME]
* https://www.cygwin.com/cygwin-ug-net/using-specialnames.html * https://www.cygwin.com/cygwin-ug-net/using-specialnames.html
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.
@@ -1416,7 +1416,7 @@ FSP_API NTSTATUS FspPosixMapPosixToWindowsPathEx(const char *PosixPath, PWSTR *P
goto lasterror; goto lasterror;
WindowsPath = MemAlloc(Size * sizeof(WCHAR)); WindowsPath = MemAlloc(Size * sizeof(WCHAR));
if (0 == WindowsPath) if (0 == PosixPath)
{ {
Result = STATUS_INSUFFICIENT_RESOURCES; Result = STATUS_INSUFFICIENT_RESOURCES;
goto exit; goto exit;

View File

@@ -1,7 +1,7 @@
/** /**
* @file shared/ku/uuid5.c * @file shared/ku/uuid5.c
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -1,7 +1,7 @@
/** /**
* @file shared/um/minimal.h * @file shared/um/minimal.h
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -2,7 +2,7 @@
* @file sys/callbacks.c * @file sys/callbacks.c
* Fast I/O and resource acquisition callbacks. * Fast I/O and resource acquisition callbacks.
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -1,7 +1,7 @@
/** /**
* @file sys/cleanup.c * @file sys/cleanup.c
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.
@@ -242,7 +242,8 @@ static VOID FspFsvolCleanupRequestFini(FSP_FSCTL_TRANSACT_REQ *Request, PVOID Co
FspFileNodeReleaseOwner(FileNode, Pgio, Request); FspFileNodeReleaseOwner(FileNode, Pgio, Request);
FspFileNodeCleanupComplete(FileNode, FileObject, !!Request->Req.Cleanup.Delete); FspFileNodeCleanupComplete(FileNode, FileObject, !!Request->Req.Cleanup.Delete);
FspFileNodeOplockCheck(FileNode, Irp); if (!FileNode->IsDirectory)
FspFileNodeOplockCheck(FileNode, Irp);
SetFlag(FileObject->Flags, FO_CLEANUP_COMPLETE); SetFlag(FileObject->Flags, FO_CLEANUP_COMPLETE);
MainFileHandle = FileDesc->MainFileHandle; MainFileHandle = FileDesc->MainFileHandle;

View File

@@ -1,7 +1,7 @@
/** /**
* @file sys/close.c * @file sys/close.c
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.
@@ -75,9 +75,6 @@ static NTSTATUS FspFsvolClose(
ASSERT(FileNode == FileDesc->FileNode); ASSERT(FileNode == FileDesc->FileNode);
if (!FlagOn(FileObject->Flags, FO_CLEANUP_COMPLETE))
FspFileNodeOplockCheck(FileNode, Irp);
/* create the user-mode file system request; MustSucceed because IRP_MJ_CLOSE cannot fail */ /* create the user-mode file system request; MustSucceed because IRP_MJ_CLOSE cannot fail */
FspIopCreateRequestMustSucceed(0, 0, 0, &Request); FspIopCreateRequestMustSucceed(0, 0, 0, &Request);
Request->Kind = FspFsctlTransactCloseKind; Request->Kind = FspFsctlTransactCloseKind;

View File

@@ -1,7 +1,7 @@
/** /**
* @file sys/create.c * @file sys/create.c
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.
@@ -298,8 +298,6 @@ static NTSTATUS FspFsvolCreateNoLock(
ULONG CreateOptions = IrpSp->Parameters.Create.Options; ULONG CreateOptions = IrpSp->Parameters.Create.Options;
USHORT FileAttributes = IrpSp->Parameters.Create.FileAttributes; USHORT FileAttributes = IrpSp->Parameters.Create.FileAttributes;
PSECURITY_DESCRIPTOR SecurityDescriptor = AccessState->SecurityDescriptor; PSECURITY_DESCRIPTOR SecurityDescriptor = AccessState->SecurityDescriptor;
BOOLEAN SecurityDescriptorRelative = 0 != SecurityDescriptor &&
BooleanFlagOn(((SECURITY_DESCRIPTOR *)SecurityDescriptor)->Control, SE_SELF_RELATIVE);
ULONG SecurityDescriptorSize = 0; ULONG SecurityDescriptorSize = 0;
UINT64 AllocationSize = Irp->Overlay.AllocationSize.QuadPart; UINT64 AllocationSize = Irp->Overlay.AllocationSize.QuadPart;
UINT64 AllocationUnit; UINT64 AllocationUnit;
@@ -408,10 +406,7 @@ static NTSTATUS FspFsvolCreateNoLock(
if (!RtlValidSecurityDescriptor(SecurityDescriptor)) if (!RtlValidSecurityDescriptor(SecurityDescriptor))
return STATUS_INVALID_PARAMETER; return STATUS_INVALID_PARAMETER;
#endif #endif
if (SecurityDescriptorRelative) SecurityDescriptorSize = RtlLengthSecurityDescriptor(SecurityDescriptor);
SecurityDescriptorSize = RtlLengthSecurityDescriptor(SecurityDescriptor);
else
RtlAbsoluteToSelfRelativeSD(SecurityDescriptor, 0, &SecurityDescriptorSize);
} }
/* align allocation size */ /* align allocation size */
@@ -707,18 +702,8 @@ static NTSTATUS FspFsvolCreateNoLock(
/* copy the security descriptor (if any) into the request */ /* copy the security descriptor (if any) into the request */
if (0 != SecurityDescriptorSize) if (0 != SecurityDescriptorSize)
{ RtlCopyMemory(Request->Buffer + Request->Req.Create.SecurityDescriptor.Offset,
if (SecurityDescriptorRelative) SecurityDescriptor, SecurityDescriptorSize);
RtlCopyMemory(
Request->Buffer + Request->Req.Create.SecurityDescriptor.Offset,
SecurityDescriptor,
SecurityDescriptorSize);
else
RtlAbsoluteToSelfRelativeSD(
SecurityDescriptor,
(PSECURITY_DESCRIPTOR)(Request->Buffer + Request->Req.Create.SecurityDescriptor.Offset),
&SecurityDescriptorSize);
}
/* copy the extra buffer (if any) into the request */ /* copy the extra buffer (if any) into the request */
if (0 != ExtraBuffer) if (0 != ExtraBuffer)

View File

@@ -1,7 +1,7 @@
/** /**
* @file sys/debug.c * @file sys/debug.c
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -1,7 +1,7 @@
/** /**
* @file sys/devctl.c * @file sys/devctl.c
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.
@@ -72,32 +72,15 @@ BOOLEAN FspFastIoDeviceControl(
if (!Result) if (!Result)
FSP_RETURN(); FSP_RETURN();
if (0 != InputBufferLength && #if 0
FSP_FSCTL_DEFAULT_ALIGN_UP(sizeof(FSP_FSCTL_TRANSACT_RSP)) > InputBufferLength) PDEVICE_OBJECT FsctlDeviceObject = DeviceObject;
FSP_RETURN(IoStatus->Status = STATUS_INVALID_PARAMETER); if (!FspDeviceReference(FsctlDeviceObject))
if (0 != OutputBufferLength &&
FSP_FSCTL_TRANSACT_BUFFER_SIZEMIN > OutputBufferLength)
FSP_RETURN(IoStatus->Status = STATUS_BUFFER_TOO_SMALL);
PVOID SystemBuffer = 0;
if (0 != InputBufferLength || 0 != OutputBufferLength)
{ {
SystemBuffer = FspAllocNonPaged( IoStatus->Status = STATUS_CANCELLED;
InputBufferLength > OutputBufferLength ? InputBufferLength : OutputBufferLength); IoStatus->Information = 0;
if (0 == SystemBuffer) FSP_RETURN();
FSP_RETURN(Result = FALSE);
if (0 != InputBuffer)
try
{
RtlCopyMemory(SystemBuffer, InputBuffer, InputBufferLength);
}
except (EXCEPTION_EXECUTE_HANDLER)
{
FspFree(SystemBuffer);
FSP_RETURN(Result = FALSE);
}
} }
#endif
ASSERT(0 == IoGetTopLevelIrp()); ASSERT(0 == IoGetTopLevelIrp());
IoSetTopLevelIrp((PIRP)FSRTL_FAST_IO_TOP_LEVEL_IRP); IoSetTopLevelIrp((PIRP)FSRTL_FAST_IO_TOP_LEVEL_IRP);
@@ -105,29 +88,18 @@ BOOLEAN FspFastIoDeviceControl(
IoStatus->Status = FspVolumeFastTransact( IoStatus->Status = FspVolumeFastTransact(
FileObject->FsContext2, FileObject->FsContext2,
IoControlCode, IoControlCode,
SystemBuffer, InputBuffer,
InputBufferLength, InputBufferLength,
0 != OutputBufferLength ? SystemBuffer : 0, OutputBuffer,
OutputBufferLength, OutputBufferLength,
IoStatus, IoStatus,
(PIRP)FSRTL_FAST_IO_TOP_LEVEL_IRP); (PIRP)FSRTL_FAST_IO_TOP_LEVEL_IRP);
IoSetTopLevelIrp(0); IoSetTopLevelIrp(0);
if (0 != SystemBuffer) #if 0
{ FspDeviceDereference(FsctlDeviceObject);
if (NT_SUCCESS(IoStatus->Status) && 0 != OutputBuffer) #endif
try
{
RtlCopyMemory(OutputBuffer, SystemBuffer, IoStatus->Information);
}
except (EXCEPTION_EXECUTE_HANDLER)
{
IoStatus->Status = GetExceptionCode();
IoStatus->Information = 0;
}
FspFree(SystemBuffer);
}
FSP_LEAVE_BOOL( FSP_LEAVE_BOOL(
"%s, FileObject=%p", "%s, FileObject=%p",

View File

@@ -1,7 +1,7 @@
/** /**
* @file sys/device.c * @file sys/device.c
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -1,7 +1,7 @@
/** /**
* @file sys/devtimer.c * @file sys/devtimer.c
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

View File

@@ -1,7 +1,7 @@
/** /**
* @file sys/dirctl.c * @file sys/dirctl.c
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.
@@ -348,7 +348,9 @@ static NTSTATUS FspFsvolQueryDirectoryCopyCache(
FSP_FILE_NODE *FileNode = FileDesc->FileNode; FSP_FILE_NODE *FileNode = FileDesc->FileNode;
if (ResetCache || FileDesc->DirInfo != FileNode->NonPaged->DirInfo) if (ResetCache ||
FileDesc->DirInfo != FileNode->NonPaged->DirInfo ||
FileDesc->DirInfoCacheHint >= DirInfoSize)
FileDesc->DirInfoCacheHint = 0; /* reset the DirInfo hint if anything looks fishy! */ FileDesc->DirInfoCacheHint = 0; /* reset the DirInfo hint if anything looks fishy! */
FileDesc->DirInfo = FileNode->NonPaged->DirInfo; FileDesc->DirInfo = FileNode->NonPaged->DirInfo;

View File

@@ -1,7 +1,7 @@
/** /**
* @file sys/driver.c * @file sys/driver.c
* *
* @copyright 2015-2026 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.

Some files were not shown because too many files have changed in this diff Show More