1
0
mirror of https://github.com/winfsp/winfsp.git synced 2026-06-04 11:56:54 -05:00

Compare commits

..

26 Commits

Author SHA1 Message Date
Bill Zissimopoulos 0a89d2ecaf tools: make-release: add new signatures 2026-04-22 18:21:32 +03:00
Bill Zissimopoulos d9ffc24334 changelog: 2026 Beta1 2026-04-22 18:16:39 +03:00
Bill Zissimopoulos 624f285452 update source copyright for 2026 2026-03-04 15:54:27 +02:00
Bill Zissimopoulos 6ab7532d5b Merge branch 'pvt-np-nolaunch' 2026-03-04 15:25:53 +02:00
Bill Zissimopoulos cc533632a2 build: version 2026 Beta1 2026-03-04 15:23:14 +02:00
Bill Zissimopoulos 8b1e2d3020 build,tools: updates for new EV cert 2026-03-04 15:16:54 +02:00
Bill Zissimopoulos 7f82326454 sys: FspFastIoDeviceControl: add a couple of fixes
- Check that the operation succeeded prior to copying to the output buffer.
- Avoid information leaks by only copying what is necessary to the output
buffer (suggestion by Tay Kiat Loong).
2026-02-17 20:48:01 +02:00
Bill Zissimopoulos 13d306f586 sys: FspFastIoDeviceControl: check input/output buffer lengths 2026-02-17 17:07:28 +02:00
Bill Zissimopoulos ae40f0edb1 sys: FspFastIoDeviceControl: fix exploit reported by Tay Kiat Loong
The WinFsp "transact" protocol is used by user mode file systems to interface
with the FSD. This protocol works via the DeviceIoControl API and uses the
FSP_IOCTL_TRANSACT control code. The FSP_IOCTL_TRANSACT code is marked as
METHOD_BUFFERED.

When the DeviceIoControl call is forwarded as an IRP, the METHOD_BUFFERED flag
instructs the kernel to copy user mode buffers to kernel mode buffers (and
vice-versa). However when the DeviceIoControl call is forwarded via the FastIO
mechanism the METHOD_BUFFERED flag is ignored. This means that when WinFsp
added support for DeviceIoControl FastIO, the FSD started accessing user mode
buffers directly.

This means that a malicious file system could attempt exploits like changing
or freeing a buffer while the FSD is reading it. Tay Kiat Loong developed a
POC exploit which demonstrated this vulnerability.

This commit fixes the problem by patching FspFastIoDeviceControl to add the
missing METHOD_BUFFERED handling.
2026-02-17 15:21:35 +02:00
Bill Zissimopoulos aed8bb745f Merge pull request #648 from chenjie4255/add_write_ea_perm
dll & fuse: Added "AddWriteEaPerm" mount option.
2026-02-05 12:07:23 +02:00
ethan 4dbea1f298 dll & fuse: Added "AddWriteEaPerm" mount option. 2026-02-05 12:09:19 +08:00
Bill Zissimopoulos f021496302 np: NPAddConnection: support file systems not managed by the launcher 2026-02-03 21:03:04 +02:00
Bill Zissimopoulos 2aa682ffa1 Merge pull request #626 from chenjie4255/directio
dll: add support for disabling directio.
2025-12-24 11:18:13 +00:00
ethan ccd75d7c47 remove outdated comments 2025-12-24 09:28:37 +08:00
ethan fbbb4c3de1 dll: add fuse directio flag support 2025-12-23 17:05:48 +08:00
Bill Zissimopoulos 4045ce2d19 Merge pull request #625 from tomgr/doc-add-buildbarn
doc: add bb-remote-execution to known file systems
2025-08-21 15:32:40 +03:00
Thomas Gibson-Robinson 5d8c692845 doc: add bb-remote-execution to known file systems 2025-08-20 09:55:16 +01:00
Bill Zissimopoulos 5b429bc445 Merge pull request #614 from chenjie4255/flush_on_cleanup
dll: Added FlushOnCleanup fuse param
2025-08-07 16:55:11 +03:00
Bill Zissimopoulos facd4bb9c4 Merge pull request #613 from chenjie4255/patch-1
Update Contributors.asciidoc
2025-08-07 16:54:31 +03:00
ethan e4ceb9010b moved FlushOnCleanup from VolumeParam to struct fuse 2025-08-07 15:30:07 +08:00
Bill Zissimopoulos d6444da2ef Merge pull request #617 from coderall2/fix_path_convert_bug
Fix: fix FspPosixMapPosixToWindowsPathEx pointer misuse
2025-08-06 18:19:19 +03:00
coderall2 b088221c82 Update Contributors.asciidoc with real name 2025-08-06 10:19:17 +08:00
coderall2 8f01618fad Update Contributors.asciidoc 2025-07-02 13:43:55 +08:00
coderall2 7e861c30ac Fix: fix FspPosixMapPosixToWindowsPathEx pointer misuse 2025-07-02 13:30:12 +08:00
ethan 1e5455653d Added "Ethan Chan" to the Contributors.asciidoc 2025-06-20 15:03:58 +08:00
ethan c8e182e1d4 sys & dll: Added FlushOnCleanup volume param 2025-06-20 14:56:01 +08:00
186 changed files with 465 additions and 208 deletions
+13
View File
@@ -1,6 +1,19 @@
# Changelog
## v2.2B1 (2026 Beta1)
- [FIX] Fixes vulnerability CVE-2026-3006 discovered by Tay Kiat Loong.
- [FIX] The WinFsp Network Provider provides improved shell support for network file systems not managed by the Launcher. See commit f021496.
- [FUSE] Add FUSE option `FlushOnCleanup`. See PR #614 by @chenjie4255.
- [FUSE] FUSE now respects the `direct_io` flag. See PR #646 by @chenjie4255.
- [FUSE] Add FUSE option `AddWriteEaAccess`. See PR #648 by @chenjie4255.
## v2.1 (2025)
- [FIX] Fixes a compatibility problem with certain AntiVirus products (e.g. Trend Micro).
+3
View File
@@ -60,6 +60,7 @@ CONTRIBUTOR LIST
|Brett Dutro |brett.dutro at gmail.com
|Changjian Gao (Juicedata, https://juicefs.com) |gcj at juicedata.io
|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
|Francois Karam (KS2, http://www.ks2.fr) |francois.karam at ks2.fr
|Fritz Elfert |fritz-github at fritz-elfert.de
@@ -73,7 +74,9 @@ CONTRIBUTOR LIST
|Ronny Chan |ronny at ronnychan.ca
|Sam Kelly (DuroSoft Technologies LLC, https://durosoft.com) |sam at durosoft.com
|Santiago Ganis |sganis at gmail.com
|Thomas Gibson-Robinson |tom at cocotec.io
|Tobias Urlaub |saibotu at outlook.de
|Victor Gao |victgm at outlook.com
|Zeho Huang |zeho11 at protonmail.com
|Zhangfen Duan |lzcgwushuang at 163.com
|===
+4 -4
View File
@@ -18,12 +18,12 @@
<MyCompanyName>Navimatics LLC</MyCompanyName>
<MyCopyright>2015-$([System.DateTime]::Now.ToString(`yyyy`)) Bill Zissimopoulos</MyCopyright>
<MyCanonicalVersion>2.1</MyCanonicalVersion>
<MyCanonicalVersion>2.2</MyCanonicalVersion>
<MyProductVersion>2025</MyProductVersion>
<MyProductStage>Gold</MyProductStage>
<MyProductVersion>2026 Beta1</MyProductVersion>
<MyProductStage>Beta</MyProductStage>
<MyCrossCert>DigiCertGlobalG3CodeSigningECCSHA3842021CA1.cer</MyCrossCert>
<MyCrossCert>CrossCert.cer</MyCrossCert>
<MyCertIssuer>DigiCert</MyCertIssuer>
<MyVersion>$(MyCanonicalVersion).$(MyBuildNumber)</MyVersion>
@@ -1,7 +1,7 @@
/**
* @file CustomActions.cpp
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+2
View File
@@ -5,6 +5,7 @@ This document contains a list of known open-source file systems and file system
== 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/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/vgough/encfs[EncFS] - an Encrypted Filesystem for FUSE
- https://github.com/lowleveldesign/fsmemfs[fsmemfs] - Memory File System written in F#
@@ -28,6 +29,7 @@ This document contains a list of known open-source file systems and file system
== File System Libraries
- 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/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
+1 -1
View File
@@ -416,7 +416,7 @@ typedef struct _FSP_LAUNCH_REG_RECORD {
<br/>
<p align="center">
<sub>
Copyright © 2015-2021 Bill Zissimopoulos
Copyright © 2015-2026 Bill Zissimopoulos
<br/>
Generated with <a href="https://github.com/billziss-gh/prettydoc">prettydoc</a>
</sub>
+90 -2
View File
@@ -404,6 +404,59 @@ NTSTATUS ( *DeleteReparsePoint)(
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>
</details>
@@ -1655,7 +1708,7 @@ FSP_API NTSTATUS FspFileSystemCreate(
- _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.
- _VolumeParams_ \- Volume parameters for the newly created file system.
- _Interface_ \- A pointer to the actual operations that actually implement this user mode file system.
- _Interface_ \- A pointer to the operations that implement this user mode file system.
- _PFileSystem_ \- [out]
Pointer that will receive the file system object created on successful return from this
call.
@@ -2309,6 +2362,39 @@ FSP_API VOID FspFileSystemStopDispatcher(
- _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>
</details>
@@ -2651,6 +2737,8 @@ 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
not available (and console mode is allowed) it will enter console mode.
This function should be called once per process.
</blockquote>
</details>
@@ -2775,7 +2863,7 @@ in a clean manner by calling this function.
<br/>
<p align="center">
<sub>
Copyright © 2015-2021 Bill Zissimopoulos
Copyright © 2015-2026 Bill Zissimopoulos
<br/>
Generated with <a href="https://github.com/billziss-gh/prettydoc">prettydoc</a>
</sub>
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file tlib/callstack.c
*
* @copyright 2014-2025 Bill Zissimopoulos
* @copyright 2014-2026 Bill Zissimopoulos
*/
#include <tlib/callstack.h>
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file tlib/callstack.h
*
* @copyright 2014-2025 Bill Zissimopoulos
* @copyright 2014-2026 Bill Zissimopoulos
*/
#ifndef TLIB_CALLSTACK_H_INCLUDED
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file tlib/injected/allfunc.h
*
* @copyright 2014-2025 Bill Zissimopoulos
* @copyright 2014-2026 Bill Zissimopoulos
*/
#ifndef TLIB_INJECTED_ALLFUNC_H_INCLUDED
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file tlib/injected/curlfunc.c
*
* @copyright 2014-2025 Bill Zissimopoulos
* @copyright 2014-2026 Bill Zissimopoulos
*/
#include <tlib/injected/curlfunc.h>
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file tlib/injected/curlfunc.h
*
* @copyright 2014-2025 Bill Zissimopoulos
* @copyright 2014-2026 Bill Zissimopoulos
*/
#ifndef TLIB_INJECTED_CURLFUNC_H_INCLUDED
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file tlib/injected/stdfunc.c
*
* @copyright 2014-2025 Bill Zissimopoulos
* @copyright 2014-2026 Bill Zissimopoulos
*/
#include <tlib/injected/stdfunc.h>
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file tlib/injected/stdfunc.h
*
* @copyright 2014-2025 Bill Zissimopoulos
* @copyright 2014-2026 Bill Zissimopoulos
*/
#ifndef TLIB_INJECTED_STDFUNC_H_INCLUDED
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file tlib/injection.c
*
* @copyright 2014-2025 Bill Zissimopoulos
* @copyright 2014-2026 Bill Zissimopoulos
*/
#include <tlib/injection.h>
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file tlib/injection.h
*
* @copyright 2014-2025 Bill Zissimopoulos
* @copyright 2014-2026 Bill Zissimopoulos
*/
/* NOTE: This header may usefully be included multiple times.
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file tlib/testsuite.c
*
* @copyright 2014-2025 Bill Zissimopoulos
* @copyright 2014-2026 Bill Zissimopoulos
*/
#include <tlib/testsuite.h>
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file tlib/testsuite.h
*
* @copyright 2014-2025 Bill Zissimopoulos
* @copyright 2014-2026 Bill Zissimopoulos
*/
#ifndef TLIB_TESTSUITE_H_INCLUDED
+1 -1
View File
@@ -6,7 +6,7 @@
* FUSE: Filesystem in Userspace
* Copyright (C) 2001-2007 Miklos Szeredi <miklos@szeredi.hu>
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -6,7 +6,7 @@
* FUSE: Filesystem in Userspace
* Copyright (C) 2001-2007 Miklos Szeredi <miklos@szeredi.hu>
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -6,7 +6,7 @@
* FUSE: Filesystem in Userspace
* Copyright (C) 2001-2007 Miklos Szeredi <miklos@szeredi.hu>
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -2,7 +2,7 @@
* @file fuse/winfsp_fuse.h
* WinFsp FUSE compatible API.
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -6,7 +6,7 @@
* FUSE: Filesystem in Userspace
* Copyright (C) 2001-2007 Miklos Szeredi <miklos@szeredi.hu>
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -6,7 +6,7 @@
* FUSE: Filesystem in Userspace
* Copyright (C) 2001-2007 Miklos Szeredi <miklos@szeredi.hu>
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -2,7 +2,7 @@
* @file fuse3/fuse_opt.h
* WinFsp FUSE3 compatible API.
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -2,7 +2,7 @@
* @file fuse3/winfsp_fuse.h
* WinFsp FUSE3 compatible API.
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file winfsp/fsctl.h
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -5,7 +5,7 @@
* 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.
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
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;
* and link with the winfsp_x64.dll (or winfsp_x86.dll) library.
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -2,7 +2,7 @@
* @file winfsp/winfsp.hpp
* WinFsp C++ Layer.
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file fuse/cygfuse.c
*
* @copyright 2015-2022 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file fuse3/cygfuse.c
*
* @copyright 2015-2022 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file winfsp/fsext.h
*
* @copyright 2015-2022 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file dll/debug.c
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file dll/debuglog.c
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file dll/dirbuf.c
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file dll/eventlog.c
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file dll/fs.c
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file dll/fsctl.c
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file dll/fsop.c
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+7 -2
View File
@@ -1,7 +1,7 @@
/**
* @file dll/fuse/fuse.c
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
@@ -98,6 +98,7 @@ static struct fuse_opt fsp_fuse_core_opts[] =
FSP_FUSE_CORE_OPT("VolumeInfoTimeout=", set_VolumeInfoTimeout, 1),
FSP_FUSE_CORE_OPT("VolumeInfoTimeout=%d", VolumeParams.VolumeInfoTimeout, 0),
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("ThreadCount=%u", ThreadCount, 0),
FUSE_OPT_KEY("UNC=", 'U'),
@@ -120,6 +121,8 @@ static struct fuse_opt fsp_fuse_core_opts[] =
FSP_FUSE_CORE_OPT("--GroupName=", set_gid, 1),
FUSE_OPT_KEY("--GroupName=", 'g'),
FSP_FUSE_CORE_OPT("AddWriteEaAccess", add_write_ea_access, 1),
FUSE_OPT_END,
};
@@ -880,7 +883,7 @@ FSP_FUSE_API struct fuse *fsp_fuse_new(struct fsp_fuse_env *env,
opt_data.VolumeParams.ReparsePointsAccessCheck = FALSE;
opt_data.VolumeParams.NamedStreams = FALSE;
opt_data.VolumeParams.ReadOnlyVolume = FALSE;
opt_data.VolumeParams.PostCleanupWhenModifiedOnly = TRUE;
opt_data.VolumeParams.PostCleanupWhenModifiedOnly = !opt_data.set_FlushOnCleanup;
opt_data.VolumeParams.PassQueryDirectoryFileName = TRUE;
opt_data.VolumeParams.DeviceControl = TRUE;
#if defined(FSP_CFG_REJECT_EARLY_IRP)
@@ -902,9 +905,11 @@ 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_uid = opt_data.set_uid; f->uid = opt_data.uid;
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->dothidden = opt_data.dothidden;
f->ThreadCount = opt_data.ThreadCount;
f->FlushOnCleanup = !!opt_data.set_FlushOnCleanup;
memcpy(&f->ops, ops, opsize);
f->data = data;
f->DebugLog = opt_data.debug ? -1 : 0;
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file dll/fuse/fuse_compat.c
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+54 -10
View File
@@ -1,7 +1,7 @@
/**
* @file dll/fuse/fuse_intf.c
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
@@ -545,6 +545,39 @@ static NTSTATUS fsp_fuse_intf_GetFileInfoFunnel(FSP_FILE_SYSTEM *FileSystem,
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,
const char *PosixPath, struct fuse_file_info *fi,
PUINT32 PFileAttributes,
@@ -579,7 +612,11 @@ static NTSTATUS fsp_fuse_intf_GetSecurityEx(FSP_FILE_SYSTEM *FileSystem,
*PSecurityDescriptorSize = SecurityDescriptorSize;
if (0 != SecurityDescriptorBuf)
{
memcpy(SecurityDescriptorBuf, SecurityDescriptor, SecurityDescriptorSize);
if (f->add_write_ea_access)
fsp_fuse_intf_AddWriteEaAccess(SecurityDescriptorBuf);
}
}
if (0 != PFileAttributes)
@@ -1046,13 +1083,12 @@ static NTSTATUS fsp_fuse_intf_Create(FSP_FILE_SYSTEM *FileSystem,
goto exit;
/*
* 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::keep_cache.
* Ignore fuse_file_info::nonseekable.
*/
FspFileSystemGetOperationContext()->Response->Rsp.Create.Opened.DisableCache = fi.direct_io;
*PFileDesc = filedesc;
memcpy(FileInfo, &FileInfoBuf, sizeof FileInfoBuf);
@@ -1191,13 +1227,12 @@ static NTSTATUS fsp_fuse_intf_Open(FSP_FILE_SYSTEM *FileSystem,
goto exit;
/*
* 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::keep_cache.
* Ignore fuse_file_info::nonseekable.
*/
FspFileSystemGetOperationContext()->Response->Rsp.Create.Opened.DisableCache = fi.direct_io;
*PFileDesc = filedesc;
memcpy(FileInfo, &FileInfoBuf, sizeof FileInfoBuf);
@@ -1305,6 +1340,7 @@ static VOID fsp_fuse_intf_Cleanup(FSP_FILE_SYSTEM *FileSystem,
{
struct fuse *f = FileSystem->UserContext;
struct fsp_fuse_file_desc *filedesc = FileDesc;
struct fuse_file_info fi;
/*
* In Windows a DeleteFile/RemoveDirectory is the sequence of the following:
@@ -1331,6 +1367,14 @@ static VOID fsp_fuse_intf_Cleanup(FSP_FILE_SYSTEM *FileSystem,
* 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 (filedesc->IsDirectory && !filedesc->IsReparsePoint)
{
@@ -1366,7 +1410,7 @@ static VOID fsp_fuse_intf_Close(FSP_FILE_SYSTEM *FileSystem,
}
else
{
if (0 != f->ops.flush)
if (!f->FlushOnCleanup && 0 != f->ops.flush)
f->ops.flush(filedesc->PosixPath, &fi);
if (0 != f->ops.release)
f->ops.release(filedesc->PosixPath, &fi);
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file dll/fuse/fuse_loop.c
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file dll/fuse/fuse_main.c
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file dll/fuse/fuse_opt.c
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+5 -1
View File
@@ -1,7 +1,7 @@
/**
* @file dll/fuse/library.h
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
@@ -55,6 +55,7 @@ struct fuse
int set_create_dir_umask, create_dir_umask;
int set_uid, uid;
int set_gid, gid;
int add_write_ea_access;
int rellinks;
int dothidden;
unsigned ThreadCount;
@@ -63,6 +64,7 @@ struct fuse
unsigned conn_want;
BOOLEAN fsinit;
BOOLEAN has_symlinks, has_slashdot;
BOOLEAN FlushOnCleanup;
UINT32 DebugLog;
FSP_FILE_SYSTEM_OPERATION_GUARD_STRATEGY OpGuardStrategy;
FSP_FSCTL_VOLUME_PARAMS VolumeParams;
@@ -147,6 +149,7 @@ struct fsp_fuse_core_opt_data
set_create_dir_umask, create_dir_umask,
set_uid, uid, username_to_uid_result,
set_gid, gid,
add_write_ea_access,
set_uidmap,
set_attr_timeout, attr_timeout,
rellinks,
@@ -156,6 +159,7 @@ struct fsp_fuse_core_opt_data
set_EaTimeout,
set_VolumeInfoTimeout,
set_KeepFileCache,
set_FlushOnCleanup,
set_LegacyUnlinkRename;
unsigned ThreadCount;
FSP_FSCTL_VOLUME_PARAMS VolumeParams;
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file dll/fuse3/fuse2to3.c
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file dll/fuse3/fuse3.c
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file dll/fuse/fuse3_compat.c
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file dll/fuse3/library.h
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file dll/launch.c
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file dll/ldap.c
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file dll/library.c
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file dll/library.h
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file dll/mount.c
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+54 -1
View File
@@ -1,7 +1,7 @@
/**
* @file dll/np.c
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
@@ -454,6 +454,41 @@ exit:
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(
LPWSTR lpLocalName, LPWSTR lpRemoteName, LPDWORD lpnBufferLen)
{
@@ -573,7 +608,16 @@ DWORD APIENTRY NPAddConnection(LPNETRESOURCEW lpNetResource, LPWSTR lpPassword,
NpResult = FspNpGetRemoteInfo(lpRemoteName, 0, &CredentialsKind, &AllowImpersonation);
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;
}
#if defined(FSP_NP_CREDENTIAL_MANAGER)
/* if we need credentials and none were passed check with the credential manager */
@@ -720,6 +764,15 @@ DWORD APIENTRY NPAddConnection(LPNETRESOURCEW lpNetResource, LPWSTR lpPassword,
/* we are not being asked for a drive mapping, so whatever we have is good! */
NpResult = WN_SUCCESS;
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:
NpResult = WN_NO_NETWORK;
break;
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file dll/ntstatus.c
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file dll/path.c
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file dll/security.c
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file dll/service.c
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file dll/sxs.c
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file dll/util.c
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file dll/wksid.c
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/*
* dotnet/FileSystemBase+Const.cs
*
* Copyright 2015-2025 Bill Zissimopoulos
* Copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/*
* dotnet/FileSystemBase.cs
*
* Copyright 2015-2025 Bill Zissimopoulos
* Copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/*
* dotnet/FileSystemHost.cs
*
* Copyright 2015-2025 Bill Zissimopoulos
* Copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/*
* dotnet/Interop.cs
*
* Copyright 2015-2025 Bill Zissimopoulos
* Copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/*
* dotnet/Service.cs
*
* Copyright 2015-2025 Bill Zissimopoulos
* Copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file fsptool/fsptool.c
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file launcher/launchctl.c
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file launcher/launcher.c
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file launcher/ptrans.c
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -4,7 +4,7 @@
* Shared kernel/user configuration. This file is to be included by the
* FSD and DLL components ONLY!
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file shared/ku/library.h
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file shared/ku/mountmgr.c
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+2 -2
View File
@@ -14,7 +14,7 @@
* [SNAME]
* https://www.cygwin.com/cygwin-ug-net/using-specialnames.html
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
@@ -1416,7 +1416,7 @@ FSP_API NTSTATUS FspPosixMapPosixToWindowsPathEx(const char *PosixPath, PWSTR *P
goto lasterror;
WindowsPath = MemAlloc(Size * sizeof(WCHAR));
if (0 == PosixPath)
if (0 == WindowsPath)
{
Result = STATUS_INSUFFICIENT_RESOURCES;
goto exit;
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file shared/ku/uuid5.c
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file shared/um/minimal.h
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -2,7 +2,7 @@
* @file sys/callbacks.c
* Fast I/O and resource acquisition callbacks.
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file sys/cleanup.c
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file sys/close.c
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file sys/create.c
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file sys/debug.c
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+41 -13
View File
@@ -1,7 +1,7 @@
/**
* @file sys/devctl.c
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
@@ -72,15 +72,32 @@ BOOLEAN FspFastIoDeviceControl(
if (!Result)
FSP_RETURN();
#if 0
PDEVICE_OBJECT FsctlDeviceObject = DeviceObject;
if (!FspDeviceReference(FsctlDeviceObject))
if (0 != InputBufferLength &&
FSP_FSCTL_DEFAULT_ALIGN_UP(sizeof(FSP_FSCTL_TRANSACT_RSP)) > InputBufferLength)
FSP_RETURN(IoStatus->Status = STATUS_INVALID_PARAMETER);
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)
{
IoStatus->Status = STATUS_CANCELLED;
IoStatus->Information = 0;
FSP_RETURN();
SystemBuffer = FspAllocNonPaged(
InputBufferLength > OutputBufferLength ? InputBufferLength : OutputBufferLength);
if (0 == SystemBuffer)
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());
IoSetTopLevelIrp((PIRP)FSRTL_FAST_IO_TOP_LEVEL_IRP);
@@ -88,18 +105,29 @@ BOOLEAN FspFastIoDeviceControl(
IoStatus->Status = FspVolumeFastTransact(
FileObject->FsContext2,
IoControlCode,
InputBuffer,
SystemBuffer,
InputBufferLength,
OutputBuffer,
0 != OutputBufferLength ? SystemBuffer : 0,
OutputBufferLength,
IoStatus,
(PIRP)FSRTL_FAST_IO_TOP_LEVEL_IRP);
IoSetTopLevelIrp(0);
#if 0
FspDeviceDereference(FsctlDeviceObject);
#endif
if (0 != SystemBuffer)
{
if (NT_SUCCESS(IoStatus->Status) && 0 != OutputBuffer)
try
{
RtlCopyMemory(OutputBuffer, SystemBuffer, IoStatus->Information);
}
except (EXCEPTION_EXECUTE_HANDLER)
{
IoStatus->Status = GetExceptionCode();
IoStatus->Information = 0;
}
FspFree(SystemBuffer);
}
FSP_LEAVE_BOOL(
"%s, FileObject=%p",
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file sys/device.c
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file sys/devtimer.c
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file sys/dirctl.c
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file sys/driver.c
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file sys/driver.h
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file sys/ea.c
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file sys/file.c
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file sys/fileinfo.c
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file sys/flush.c
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file sys/fsctl.c
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file sys/fsext.c
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file sys/iop.c
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file sys/ioq.c
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file sys/lockctl.c
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* @file sys/meta.c
*
* @copyright 2015-2025 Bill Zissimopoulos
* @copyright 2015-2026 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.

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