Compare commits

...

22 Commits

Author SHA1 Message Date
Bill Zissimopoulos
4fdec4d37f sys: FspFsvolCreate, FspFsvolSetSecurity: absolute security descriptors
Some third party filters send us security descriptors in absolute rather
than self-relative format. Handle this case by converting them to self-
relative format ourselves.
2024-10-10 12:34:04 +01:00
Bill Zissimopoulos
2da97d48f5 tools: make-release: add new signatures 2024-09-11 14:48:55 +01:00
Bill Zissimopoulos
7c5dc48414 build: version: 2024 Beta2 2024-09-11 14:46:38 +01:00
Bill Zissimopoulos
93c057571a changelog: 2024 Beta2 2024-09-11 13:23:41 +01:00
Bill Zissimopoulos
da16d0e6ea
Merge pull request #567 from siketyan/fix/string-h-import
fix: Add missing string.h import in winfsp_fuse.h
2024-09-10 09:25:12 +01:00
Natsuki Ikeguchi
dbaee25ed2
fix: Add missing string.h import in winfsp_fuse.h
Signed-off-by: Naoki Ikeguchi <me@s6n.jp>
2024-09-10 01:02:29 +09:00
Bill Zissimopoulos
2bf9a6c16e sys: mup: correctly handle relative file object chain (#561) 2024-06-20 12:44:35 +01:00
Bill Zissimopoulos
b058925692 tst: launcher-secrets: secret: replace gets with fgets 2024-06-03 11:49:38 +01:00
Bill Zissimopoulos
507c794470 doc: known file systems: remove nodejs library with no support for WinFsp 2024-02-20 13:18:30 +00:00
Bill Zissimopoulos
9a6571809e changelog: 2024 Beta1 2024-02-20 12:16:46 +00:00
Bill Zissimopoulos
e452f75c9c doc: SxsDir registry setting 2024-01-20 10:55:26 +00:00
Bill Zissimopoulos
7551193ad7 update source copyright to 2024 2024-01-08 12:38:44 +00:00
Bill Zissimopoulos
65bf8c5319 dll: use adaptive locks when starting/stopping FSD 2023-12-12 12:36:41 +00:00
Bill Zissimopoulos
be5faf34bc build: version: 2024 Beta1 2023-12-11 16:26:56 +00:00
Bill Zissimopoulos
0e1c8ae1dc build: version: correct version to 2023.1 Beta1 2023-08-30 11:33:54 +01:00
Bill Zissimopoulos
9aa67bdad4 build: version: bump to 2.1 (2023.1) 2023-08-30 11:30:36 +01:00
Bill Zissimopoulos
de321620fd dll: FspFsctlServiceVersion as public API 2023-08-30 11:17:09 +01:00
Bill Zissimopoulos
a482183149 sys: FspPropagateTopFlags: check TopLevelIrp not completed
Add a check to verify that the TopLevelIrp has not been completed. This
became necessary because on recent Windows kernels, IRP's can have "IRP
extensions", which are freed when an IRP is completed. This can trigger
a recursive CLOSE with a top-level IRP that has been completed, which
can bugcheck the system.

Case in point: the new (Win11) NtCopyFileChunk creates IRP's with
COPY_INFORMATION attached. Upon completion of such an IRP the
SourceFileObject is freed, which results in a recursive IRP_MJ_CLOSE
with a completed top-level IRP, which would lead to a BSOD.
2023-08-29 13:15:37 +01:00
Bill Zissimopoulos
6fb72555d3 github: workflows: avm: update latest asset 2023-03-16 11:58:45 +00:00
Bill Zissimopoulos
9accf72d39 tools: make-release.ps1: match release tag exactly 2023-03-16 11:30:03 +00:00
Bill Zissimopoulos
5c03dd11ee changelog: version: 2023 2023-03-16 10:43:13 +00:00
Bill Zissimopoulos
1f37e5a81a build: version: 2023 2023-03-16 10:43:00 +00:00
181 changed files with 390 additions and 195 deletions

View File

@ -15,4 +15,4 @@ jobs:
https://github.com/winfsp/winfsp/releases/download/v1.11/winfsp-1.11.22176.msi
https://github.com/winfsp/winfsp/releases/download/v1.12/winfsp-1.12.22301.msi
https://github.com/winfsp/winfsp/releases/download/v1.12.22339/winfsp-1.12.22339.msi
https://github.com/winfsp/winfsp/releases/download/v2.0B2/winfsp-2.0.23033.msi
https://github.com/winfsp/winfsp/releases/download/v2.0/winfsp-2.0.23075.msi

View File

@ -1,6 +1,55 @@
# Changelog
## 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)
- [FIX] Fixes a rare BSOD on recent versions of Windows. See commit a482183 for details.
- [FIX] Fixes a racing issue with two processes competing to start the FSD discovered during testing.
## v2.0 (2023)
This release is a major version change for WinFsp (from 1.x to 2.x). There are no backwards incompatible API changes in this release, but nevertheless enough things change that warrant a version change.
The major new feature of this release is that it allows uninstallation and reinstallation of WinFsp **without reboot**. Going forward installers named `winfsp-2.x.y.msi` can be uninstalled and reinstalled without reboot. Furthermore a later version `winfsp-2.x.y.msi` installer can be used to upgrade over an earlier version `winfsp-2.x.y.msi` installer. However note that a `winfsp-2.x.y.msi` installer cannot be used to upgrade over a legacy `winfsp-1.x.y.msi` installer; you will still need to uninstall the old `winfsp-1.x.y.msi` installer, potentially reboot and then install the new `winfsp-2.x.y.msi` installer.
Changes visible to file system developers are listed below:
- WinFsp executable files are now installed by default in the directory `C:\Program Files (x86)\WinFsp\SxS\sxs.<InstanceID>\bin`. The previous directory `C:\Program Files (x86)\WinFsp\bin` is now a junction that points to the above directory.
- The WinFsp driver name is no longer `winfsp`, but rather a name such as `winfsp+<InstanceID>`. This means that managing the driver using the `sc.exe` utility is no longer as easy.
- The `fsptool` utility has been updated with new commands `lsdrv`, `load`, `unload` and `ver`. The `lsdrv`, `load` and `unload` commands can be used to manage the driver from the command line. This is rarely necessary, but may be useful for troubleshooting purposes.
- Prior to this release the WinFsp driver would never unmount a file system volume unless the user mode file system requested the unmount. From this release onward it is possible for the WinFsp driver to unmount a file system volume, without a user mode file system request. This is to allow for the driver to be unloaded.
A new operation `DispatcherStopped` has been added to `FSP_FILE_SYSTEM_INTERFACE`, which is sent after the file system volume has been unmounted and the file system dispatcher has been stopped. This can happen because of a user mode file system request via `FspFileSystemStopDispatcher` or because of driver unload. The `DispatcherStopped` operation includes a `Normally` parameter, which is `TRUE` for normal file system shutdown via `FspFileSystemStopDispatcher` and `FALSE` otherwise.
Native file systems that use the `FspService` infrastructure can use the `FspFileSystemStopServiceIfNecessary` API to handle the `DispatcherStopped` operation (see the MEMFS and NTPTFS samples). FUSE file systems get this functionality for free. .NET file systems that use the `Service` class infrastructure also get this functionality for free.
- WinFsp now offers a .NET library that targets .NET Framework 3.5 (as before) and one that targets .NET Standard 2.0. This is due to work by @Noire001 in PR #451.
- There is now a winfsp.net nuget package at https://www.nuget.org/packages/winfsp.net
- FUSE now supports path components up to 255 characters long (previously it was 255 bytes). This is due to work by @zeho11 in PR #474.
- The FUSE passthrough file systems have been updated to support long paths. This is also due to work by @zeho11.
- In some rare circumstances WinFsp file systems could report duplicate directory entries. This problem has been fixed. (GitHub issue #475.)
- The WinFsp symbols directory has been removed. If you are looking for WinFsp symbols you can find them at https://github.com/winfsp/winfsp.sym
## v2.0RC1 (2023 RC1)
This release is a major version change for WinFsp (from 1.x to 2.x). There are no backwards incompatible API changes in this release, but nevertheless enough things change that warrant a version change.

View File

@ -67,6 +67,7 @@ CONTRIBUTOR LIST
|John Oberschelp |john at oberschelp.net
|John Tyner |jtyner at gmail.com
|Konstantinos Karakostas |noiredev at protonmail.com
|Naoki Ikeguchi |me at s6n.jp
|Paweł Wegner (Google LLC, https://google.com) |lemourin at google.com
|Pedro Frejo (Arpa System, https://arpasystem.com) |pedro.frejo at arpasystem.com
|Ronny Chan |ronny at ronnychan.ca

View File

@ -18,10 +18,10 @@
<MyCompanyName>Navimatics LLC</MyCompanyName>
<MyCopyright>2015-$([System.DateTime]::Now.ToString(`yyyy`)) Bill Zissimopoulos</MyCopyright>
<MyCanonicalVersion>2.0</MyCanonicalVersion>
<MyCanonicalVersion>2.1</MyCanonicalVersion>
<MyProductVersion>2023 RC1</MyProductVersion>
<MyProductStage>RC</MyProductStage>
<MyProductVersion>2024 Beta2</MyProductVersion>
<MyProductStage>Beta</MyProductStage>
<MyCrossCert>DigiCertGlobalG3CodeSigningECCSHA3842021CA1.cer</MyCrossCert>
<MyCertIssuer>DigiCert</MyCertIssuer>

View File

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

View File

@ -30,7 +30,6 @@ This document contains a list of known open-source file systems and file system
- https://github.com/winfsp/cgofuse[Go: cgofuse] - Cross-platform FUSE library 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/DuroSoft/fuse-bindings[Nodejs: fuse-bindings] - Fully maintained FUSE bindings for Node that aims to cover the entire FUSE api
- https://github.com/billziss-gh/fusepy[Python: fusepy] - Simple ctypes bindings for FUSE
- https://github.com/pleiszenburg/refuse[Python: refuse] - Simple cross-plattform ctypes bindings for libfuse / FUSE for macOS / WinFsp
- https://github.com/Scille/winfspy[Python: winfspy] - WinFSP binding for Python

View File

@ -65,6 +65,8 @@ Primary registry key used to store WinFsp settings. On a 64-bit system (x64 or A
* `InstallDir (REG_SZ)`: Contains the WinFsp installation directory.
* `SxsDir (REG_SZ)`: Contains the WinFsp Side-by-Side (SxS) directory. The SxS directory allows for multiple versions of WinFsp to be active at the same time and among other benefits it enables reinstalling WinFsp without reboot. The SxS directory contains primarily executable files.
* `DistinctPermsForSameOwnerGroup (REG_DWORD)`: Directs how WinFsp-FUSE should consider UNIX owner and group permissions in the case when the Windows owner and group SID are the same (for example, this can happen when someone uses a Microsoft account as their primary login). When this setting is 0 and the Windows owner and group SID are the same, WinFsp-FUSE combines the UNIX owner and group permissions (for example, user permission `rw-` and group permission `---` combine to `---`), which can result in inadvertent "access denied" errors. When this setting is 1 and even if the Windows owner and group SID are the same, WinFsp-FUSE looks at the UNIX owner permissions and the UNIX group permissions separately. The default value is 1 since v1.11B1 and was 0 in earlier versions.
* `MountBroadcastDriveChange (REG_DWORD)`: A value of 1 instructs WinFsp to broadcast an additional "drive change" message to all top-level windows during mounting and unmounting. The default value is 0. Normally the Windows infrastructure broadcasts a `WM_DEVICECHANGE` message whenever a drive gets added/removed. In some rare systems it is possible for this message to get lost or stalled. The workaround for these rare systems is to enable this registry setting, in which case WinFsp will broadcast the `WM_DEVICECHANGE` using a slightly different but more reliable method than the one Windows uses.

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,7 +1,7 @@
/**
* @file winfsp/fsctl.h
*
* @copyright 2015-2022 Bill Zissimopoulos
* @copyright 2015-2024 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
@ -696,6 +696,7 @@ FSP_API NTSTATUS FspFsctlNotify(HANDLE VolumeHandle,
FSP_API NTSTATUS FspFsctlGetVolumeList(PWSTR DevicePath,
PWCHAR VolumeListBuf, PSIZE_T PVolumeListSize);
FSP_API NTSTATUS FspFsctlPreflight(PWSTR DevicePath);
FSP_API NTSTATUS FspFsctlServiceVersion(PUINT32 PVersion);
FSP_API NTSTATUS FspFsctlStartService(VOID);
FSP_API NTSTATUS FspFsctlStopService(VOID);
FSP_API NTSTATUS FspFsctlEnumServices(

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-2022 Bill Zissimopoulos
* @copyright 2015-2024 Bill Zissimopoulos
*/
/*
* 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;
* and link with the winfsp_x64.dll (or winfsp_x86.dll) library.
*
* @copyright 2015-2022 Bill Zissimopoulos
* @copyright 2015-2024 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,7 +1,7 @@
/**
* @file dll/fsctl.c
*
* @copyright 2015-2022 Bill Zissimopoulos
* @copyright 2015-2024 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
@ -31,8 +31,6 @@ static ULONG FspFsctlServiceVersionValue;
static DWORD FspFsctlTransactCode = FSP_FSCTL_TRANSACT;
static DWORD FspFsctlTransactBatchCode = FSP_FSCTL_TRANSACT_BATCH;
static VOID FspFsctlServiceVersion(PUINT32 PVersion);
FSP_API NTSTATUS FspFsctlCreateVolume(PWSTR DevicePath,
const FSP_FSCTL_VOLUME_PARAMS *VolumeParams,
PWCHAR VolumeNameBuf, SIZE_T VolumeNameSize,
@ -423,15 +421,33 @@ exit:
return TRUE;
}
static VOID FspFsctlServiceVersion(PUINT32 PVersion)
FSP_API NTSTATUS FspFsctlServiceVersion(PUINT32 PVersion)
{
InitOnceExecuteOnce(&FspFsctlServiceVersionInitOnce, FspFsctlServiceVersionInitialize, 0, 0);
if (0 != PVersion)
*PVersion = FspFsctlServiceVersionValue;
return 0 != FspFsctlServiceVersionValue ? STATUS_SUCCESS : STATUS_UNSUCCESSFUL;
}
static SRWLOCK FspFsctlStartStopServiceLock = SRWLOCK_INIT;
static FSP_ADAPTIVE_LOCK FspFsctlStartStopServiceLock = FSP_ADAPTIVE_LOCK_INIT;
static VOID FspFsctlStartStopServiceLockAcquire(VOID)
{
extern HINSTANCE DllInstance;
WCHAR DllPath[MAX_PATH];
PWSTR FileName = 0;
if (0 != GetModuleFileNameW(DllInstance, DllPath, MAX_PATH))
FileName = DllPath;
FspAdaptiveLockAcquire(&FspFsctlStartStopServiceLock,
FileName, 0xfffffffffffffff0ull, (10 + 1) * 1000);
}
static VOID FspFsctlStartStopServiceLockRelease(VOID)
{
FspAdaptiveLockRelease(&FspFsctlStartStopServiceLock);
}
static BOOLEAN FspFsctlRunningInContainer(VOID)
{
@ -455,7 +471,7 @@ static NTSTATUS FspFsctlStartServiceByName(PWSTR DriverName)
DWORD LastError;
NTSTATUS Result;
AcquireSRWLockExclusive(&FspFsctlStartStopServiceLock);
FspFsctlStartStopServiceLockAcquire();
if (FspFsctlRunningInContainer())
{
@ -517,7 +533,7 @@ exit:
if (0 != ScmHandle)
CloseServiceHandle(ScmHandle);
ReleaseSRWLockExclusive(&FspFsctlStartStopServiceLock);
FspFsctlStartStopServiceLockRelease();
return Result;
}
@ -587,7 +603,7 @@ FSP_API NTSTATUS FspFsctlStopService(VOID)
FspSxsAppendSuffix(DriverName, sizeof DriverName, L"" FSP_FSCTL_DRIVER_NAME);
AcquireSRWLockExclusive(&FspFsctlStartStopServiceLock);
FspFsctlStartStopServiceLockAcquire();
if (FspFsctlRunningInContainer())
{
@ -659,7 +675,7 @@ exit:
if (0 != ProcessToken)
CloseHandle(ProcessToken);
ReleaseSRWLockExclusive(&FspFsctlStartStopServiceLock);
FspFsctlStartStopServiceLockRelease();
return Result;
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,7 +1,7 @@
/**
* @file dll/library.h
*
* @copyright 2015-2022 Bill Zissimopoulos
* @copyright 2015-2024 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
@ -106,6 +106,21 @@ NTSTATUS FspGetModuleFileName(
ULONG Size,
PWSTR RelativePath);
typedef struct
{
SRWLOCK Lock;
HANDLE Handle;
UINT64 Offset;
} FSP_ADAPTIVE_LOCK;
#define FSP_ADAPTIVE_LOCK_INIT { SRWLOCK_INIT, INVALID_HANDLE_VALUE, 0 }
VOID FspAdaptiveLockAcquire(
FSP_ADAPTIVE_LOCK *Lock,
PWSTR FileName,
UINT64 Offset,
DWORD Timeout);
VOID FspAdaptiveLockRelease(
FSP_ADAPTIVE_LOCK *Lock);
#define FspFileSystemDirectoryBufferEntryInvalid ((ULONG)-1)
VOID FspFileSystemPeekInDirectoryBuffer(PVOID *PDirBuffer,
PUINT8 *PBuffer, PULONG *PIndex, PULONG PCount);

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,7 +1,7 @@
/**
* @file dll/util.c
*
* @copyright 2015-2022 Bill Zissimopoulos
* @copyright 2015-2024 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
@ -418,3 +418,74 @@ NTSTATUS FspGetModuleFileName(
return STATUS_SUCCESS;
}
VOID FspAdaptiveLockAcquire(
FSP_ADAPTIVE_LOCK *Lock,
PWSTR FileName,
UINT64 Offset,
DWORD Timeout)
{
AcquireSRWLockExclusive(&Lock->Lock);
if (0 != FileName)
{
HANDLE Handle;
DWORD BytesTransferred;
OVERLAPPED Overlapped;
BOOL Success;
Handle = CreateFileW(
FileName,
FILE_READ_DATA,
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
0,
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,
0);
if (INVALID_HANDLE_VALUE != Handle)
{
memset(&Overlapped, 0, sizeof Overlapped);
Overlapped.Offset = ((PLARGE_INTEGER)&Offset)->LowPart;
Overlapped.OffsetHigh = ((PLARGE_INTEGER)&Offset)->HighPart;
Success = LockFileEx(
Handle,
LOCKFILE_EXCLUSIVE_LOCK, 0,
1, 0,
&Overlapped);
if (Success || ERROR_IO_PENDING == GetLastError())
{
Success = FALSE;
if (WAIT_OBJECT_0 == WaitForSingleObject(Handle, Timeout))
Success = GetOverlappedResult(Handle, &Overlapped, &BytesTransferred, TRUE);
}
if (Success)
{
Lock->Handle = Handle;
Lock->Offset = Offset;
}
else
CloseHandle(Handle);
}
}
}
VOID FspAdaptiveLockRelease(
FSP_ADAPTIVE_LOCK *Lock)
{
if (INVALID_HANDLE_VALUE != Lock->Handle)
{
HANDLE Handle = Lock->Handle;
LARGE_INTEGER LargeOffset = *(PLARGE_INTEGER)&Lock->Offset;
UnlockFile(Handle, LargeOffset.LowPart, LargeOffset.HighPart, 1, 0);
CloseHandle(Handle);
Lock->Handle = INVALID_HANDLE_VALUE;
Lock->Offset = 0;
}
ReleaseSRWLockExclusive(&Lock->Lock);
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

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-2022 Bill Zissimopoulos
* @copyright 2015-2024 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.

View File

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

View File

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

View File

@ -14,7 +14,7 @@
* [SNAME]
* https://www.cygwin.com/cygwin-ug-net/using-specialnames.html
*
* @copyright 2015-2022 Bill Zissimopoulos
* @copyright 2015-2024 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.

View File

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

View File

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

View File

@ -2,7 +2,7 @@
* @file sys/callbacks.c
* Fast I/O and resource acquisition callbacks.
*
* @copyright 2015-2022 Bill Zissimopoulos
* @copyright 2015-2024 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
@ -324,7 +324,9 @@ VOID FspPropagateTopFlags(PIRP Irp, PIRP TopLevelIrp)
FspFileNodeAcquireMain :
FspFileNodeAcquireFull);
}
else if ((PIRP)MM_SYSTEM_RANGE_START <= TopLevelIrp && IO_TYPE_IRP == TopLevelIrp->Type)
else if ((PIRP)MM_SYSTEM_RANGE_START <= TopLevelIrp &&
IO_TYPE_IRP == TopLevelIrp->Type &&
TopLevelIrp->CurrentLocation <= TopLevelIrp->StackCount)
{
PFILE_OBJECT FileObject = IoGetCurrentIrpStackLocation(Irp)->FileObject;
PFILE_OBJECT TopLevelFileObject = IoGetCurrentIrpStackLocation(TopLevelIrp)->FileObject;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,7 +1,7 @@
/**
* @file sys/mup.c
*
* @copyright 2015-2022 Bill Zissimopoulos
* @copyright 2015-2024 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
@ -250,7 +250,7 @@ NTSTATUS FspMupHandleIrp(
* Every other CREATE request must be forwarded to the appropriate fsvol device.
*/
if (0 != FileObject->RelatedFileObject)
while (0 != FileObject->RelatedFileObject)
FileObject = FileObject->RelatedFileObject;
FspFsmupDeviceLockPrefixTable(FsmupDeviceObject);

View File

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

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