Compare commits

...

2038 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
Bill Zissimopoulos
db319bc3c1 sys,dll: mount improvements
- sys: FspFsvolFileSystemControl: FSCTL_IS_VOLUME_MOUNTED
- dll: mount: Transact0, FspMountNotifyShellDriveChange
2023-02-24 12:02:03 +00:00
Bill Zissimopoulos
c04e3d9534 doc: update FAQ 2023-02-23 13:50:11 +00:00
Bill Zissimopoulos
1912814d79 changelog: v2.0RC1 2023-02-23 13:29:10 +00:00
Bill Zissimopoulos
97c075e744 sys: FspFsvolQueryDirectoryCopy: add missing continue
A single line change in FspFsvolQueryDirectoryCopy fixes GitHub issue #475.
This commit also includes a test for detecting duplicate directory entries.
Credit for the investigation and reproduction of this issue goes to GitHub
user @hach-que.
2023-02-16 17:07:59 +00:00
Bill Zissimopoulos
874a223bcc build: version: 2023 RC1 2023-02-07 20:55:49 +00:00
Bill Zissimopoulos
901a98e118 tools: make-release.ps1: automate submissions to hardware dashboard 2023-02-07 20:54:05 +00:00
Bill Zissimopoulos
0ab4300738 github: workflows: avm: update files 2023-02-02 12:20:34 +00:00
Bill Zissimopoulos
52e6aa97b5 build: sys: pacify hardware center validation
Infverif /k no longer likes "undecorated" [DefaultInstall] sections and
instead it wants them "architecture decorated". For example,
[DefaultInstall.ntarm64]. So play along to have our driver signed.

For more information see:
https://learn.microsoft.com/en-us/windows-hardware/drivers/develop/creating-a-primitive-driver
2023-02-01 22:50:35 +00:00
Bill Zissimopoulos
a7d82d5f8d changelog: v2.0B2 update 2023-02-01 17:55:14 +00:00
Bill Zissimopoulos
3aadaee511 dll: FspFileSystemStopServiceIfNecessary 2023-02-01 17:42:11 +00:00
Bill Zissimopoulos
da3a8aa229
Merge pull request #478 from zeho11/patch-1
tst: passthrough-fuse: fix UNC path mount
2023-02-01 11:01:13 +00:00
zeho11
1f0fd4c280 Update 2023-01-31 19:13:10 +08:00
Bill Zissimopoulos
6da92f0b54 tools: make-release: add nuget support 2023-01-09 23:04:03 +00:00
Bill Zissimopoulos
4f5f1dd350 build: version: bump to v2.0B2 2023-01-09 22:27:44 +00:00
Bill Zissimopoulos
ba5d52e9a5 dll: FspFileSystemStartDispatcher:
Send a Transact0 to inform the FSD that the dispatcher is almost ready.
2023-01-09 15:45:11 +00:00
Bill Zissimopoulos
d626fb9563 sys: FspReleaseForModWrite
In some rare cases and under load the mapped page writer's TopLevelIrp
may be trashed by some outside component (observed on Windows 10 1909).

For this reason remove an assertion that could trigger in debug builds.
2023-01-09 15:30:42 +00:00
zeho11
69cc1820e1 tst: passthrough-fuse3: fix UNC path mount 2022-12-19 09:22:43 +08:00
zeho11
c06141c8c8 tst: passthrough-fuse: fix UNC path mount 2022-12-19 09:22:16 +08:00
Bill Zissimopoulos
760c2acded
Merge pull request #476 from zeho11/patch-1
dll: fuse: correct error handling when name exceeds limit
2022-12-16 22:29:37 +00:00
zeho11
671efe625a Update 2022-12-15 20:49:01 +09:00
zeho11
a59b32b1ee tst: winfsp-tests: add multibyte checks to querydir_namelen_test 2022-12-15 19:17:22 +09:00
zeho11
22d81846df tst: passthrough-fuse3: multibyte support 2022-12-15 19:16:19 +09:00
zeho11
8c9b8362b4 tst: passthrough-fuse: multibyte support 2022-12-15 19:14:44 +09:00
Bill Zissimopoulos
e92eb023fe Merge branch 'release/1.12' 2022-12-12 11:53:20 +00:00
zeho11
e550e261f0
dll: fuse: correct error handling when name exceeds limit
Related to b62e1e920b292c4928395db89e96fada29dd7c38
2022-12-12 12:08:48 +09:00
Bill Zissimopoulos
46054c03fe
Merge pull request #474 from zeho11/patch-1
dll: fuse: change name limit to 255 chars
2022-12-08 16:02:38 +00:00
zeho11
db07b24342 Update 2022-12-08 18:02:19 +09:00
zeho11
cb81e81985
Update fuse_intf.c 2022-12-07 15:17:59 +09:00
zeho11
b62e1e920b
dll: fuse: change name limit to 255 chars
Fixes #191
Fixes #455
2022-12-07 14:39:36 +09:00
Bill Zissimopoulos
c61679a35d tools: build.bat: make cab file from unsigned drivers 2022-12-05 13:06:18 +00:00
Bill Zissimopoulos
619e41a18e changelog: update for v1.12.22335 2022-12-01 11:09:58 +00:00
Bill Zissimopoulos
80fa156e7b tools: build.bat: remove SHA1 signatures 2022-12-01 10:59:48 +00:00
Bill Zissimopoulos
01d9fa1719 Merge branch 'pvt-dotnetcore' 2022-11-30 10:06:42 +00:00
Bill Zissimopoulos
6846508631 tools: build.bat,make-release.ps1: accommodate winfsp.net.nupkg 2022-11-29 21:13:13 +00:00
Bill Zissimopoulos
0488451c3d build: fix dotnet output paths 2022-11-29 15:49:09 +00:00
Bill Zissimopoulos
7c3292af81 tools: build.bat: dotnet build 2022-11-29 12:53:33 +00:00
Bill Zissimopoulos
3d2ba637e5 build: minimize changes in .csproj files 2022-11-28 16:52:21 +00:00
Bill Zissimopoulos
db72b57ca4 build: dotnet: remove Directory.Build.props 2022-11-28 14:04:51 +00:00
Bill Zissimopoulos
020157a9ae Merge branch 'dotnetcore' of https://github.com/Noire001/winfsp into Noire001-dotnetcore 2022-11-28 12:13:50 +00:00
Konstantinos Karakostas
d99cb2d7d1 build: dotnet: set PlatformTarget to AnyCPU 2022-11-23 22:47:50 +02:00
Bill Zissimopoulos
298261c4af tools: make-release.ps1: add build hashes 2022-11-23 16:21:08 +00:00
Bill Zissimopoulos
3c674a556d tools: make-release.ps1: update download link 2022-11-23 15:18:25 +00:00
Bill Zissimopoulos
f85fb49f49 changelog: update for v2.0B1 2022-11-23 14:32:31 +00:00
Konstantinos Karakostas
92084a56c6 build: dotnet: add missing NuGet properties 2022-11-20 20:05:10 +02:00
Konstantinos Karakostas
53f97c9841 build: dotnet: revert optional changes/deletions 2022-11-20 19:39:06 +02:00
Konstantinos Karakostas
2770eca1bf tools: use dotnet build in VS2015 CI 2022-11-20 15:10:50 +02:00
Konstantinos Karakostas
2945971ba9 build: memfs-dotnet: migrate to .NET SDK 2022-11-19 21:01:44 +02:00
Noire001
0a39ef60bd Update Contributors.asciidoc 2022-11-19 21:01:44 +02:00
Konstantinos Karakostas
e1faf1351e build: dotnet: generate NuGet package on build 2022-11-19 21:01:44 +02:00
Konstantinos Karakostas
7333451eac build: installer: update assembly location 2022-11-19 21:01:24 +02:00
Konstantinos Karakostas
c178db127c build: dotnet: migrate to .NET SDK 2022-11-19 20:57:50 +02:00
Bill Zissimopoulos
9747af22e8 changelog: update for v1.12 (2022.2) 2022-10-18 12:21:23 +01:00
Bill Zissimopoulos
e1b2e77df0 build: version: 2022.2 2022-10-18 12:19:36 +01:00
Bill Zissimopoulos
ef9b7e22c6 Merge branch 'master' into pvt-sxs 2022-10-12 16:57:59 +01:00
Bill Zissimopoulos
4783902d1d tools: make-release.ps1 2022-10-12 16:57:43 +01:00
Bill Zissimopoulos
fd27c470b0 Merge branch 'master' into pvt-sxs 2022-10-12 16:36:22 +01:00
Bill Zissimopoulos
4cd2b8c612 tools: make-release.ps1 2022-10-12 16:35:40 +01:00
Bill Zissimopoulos
dacaff41e4 changelog: update for v1.12B2 2022-10-12 15:33:18 +01:00
Bill Zissimopoulos
c187209159 installer: check windows version 7 or higher 2022-10-07 14:09:19 +01:00
Bill Zissimopoulos
a2e92207c5 Merge branch 'master' into pvt-sxs 2022-10-07 12:10:20 +01:00
Bill Zissimopoulos
be27a82879 dll: FspCreateDirectoryFileW
On Windows/ARM64 CreateFileW is no longer able to create directories
using the flags FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_POSIX_SEMANTICS.
The new FspCreateDirectoryFileW implements the same semantics and replaces
the previous CreateFileW call.
2022-10-07 11:47:25 +01:00
Bill Zissimopoulos
4f5ad93f00 Merge branch 'master' into pvt-sxs 2022-10-04 15:44:49 +01:00
Bill Zissimopoulos
b9ca46694e sys: FspFileNodeRenameCheck: fix handle oplock break 2022-10-04 15:44:27 +01:00
Bill Zissimopoulos
b47c42877a Merge branch 'master' into pvt-sxs 2022-10-04 13:45:19 +01:00
Bill Zissimopoulos
e50d7adc50 tools: run-tests: retire some tests
Retire some tests that are no longer useful.
This should shorten CI time considerably.
2022-10-04 13:44:31 +01:00
Bill Zissimopoulos
d1fc5e5d0f Merge branch 'pvt-vpb2' into pvt-sxs-vpb 2022-10-03 15:10:06 +01:00
Bill Zissimopoulos
7f73192f8d sys: FspVolumeCreate
If we have an fsvrt device, mount it via opening the volume.
This ensures that the fsvrt is mounted by the correct fsvol
device early on and remedies a rare case where NTFS crashes
the system when it attempts to mount our fsvrt.
2022-10-02 20:10:32 +01:00
Bill Zissimopoulos
c4ecd15c0a Merge branch 'master' into pvt-sxs 2022-10-02 17:49:47 +01:00
Bill Zissimopoulos
d71049225e sys: FSP_DEVICE_EXTENSION: remove unused SiloContainerId 2022-10-02 17:35:07 +01:00
Bill Zissimopoulos
91d7f3b673 sys: FspSiloInitialize: always initialize FspSiloList and Mutex 2022-10-01 21:08:01 +01:00
Bill Zissimopoulos
63e23c2039 fsptool: load command 2022-10-01 14:55:30 +01:00
Bill Zissimopoulos
4d1594b1cf sys: silo: ensure FspSiloListMutex in critical region 2022-10-01 14:44:17 +01:00
Bill Zissimopoulos
0eb6912296 sys: FspSiloEnumerate, FspDriverFinalizeDevicesForUnload 2022-10-01 10:47:18 +01:00
Bill Zissimopoulos
c237a55951 Merge branch 'master' into pvt-sxs 2022-09-29 17:00:10 +01:00
Bill Zissimopoulos
c15006cce8 appveyor: silo testing 2022-09-28 19:06:16 +01:00
Bill Zissimopoulos
53b44dcb5c tst: winfsp-tests: silo testing 2022-09-28 18:46:17 +01:00
Bill Zissimopoulos
a3765d6360 sys: silo: FspSiloPostInitialize 2022-09-27 19:55:08 +01:00
Bill Zissimopoulos
98d68c4007 Merge branch 'master' into pvt-sxs 2022-09-26 17:52:29 +01:00
Bill Zissimopoulos
6c6dd8abcc tools: run-tests: disable exec tests for mountmgr 2022-09-26 17:51:05 +01:00
Bill Zissimopoulos
16dd729fc7 tools: run-tests: disable exec tests for mountmgr 2022-09-26 17:50:19 +01:00
Bill Zissimopoulos
e8cec5dfc1 Merge branch 'master' into pvt-sxs 2022-09-26 17:42:30 +01:00
Bill Zissimopoulos
a2d49a1ded build: version: 2022.2 Beta2 2022-09-26 17:35:57 +01:00
Bill Zissimopoulos
9ede097e73 changelog: update for v1.12B2 2022-09-26 17:34:36 +01:00
Bill Zissimopoulos
2c3800077f tst: passthrough: GetFileInfoInternal: fix IndexNumber 2022-09-26 17:26:25 +01:00
Bill Zissimopoulos
84b3f98d38 Merge branch 'pvt-fuse-mountmgr' 2022-09-26 17:01:35 +01:00
Bill Zissimopoulos
16734bf37a
Merge pull request #450 from chyyran/patch-doc-add-winfsp-rs
doc: Add winfsp-rs to file system libraries
2022-09-26 15:31:26 +01:00
Bill Zissimopoulos
ea189c5b68 dll: fuse: fix mountmgr directory mount points under Cygwin 2022-09-26 15:26:34 +01:00
Ronny Chan
7735506cc7
legal: add Ronny Chan to contributors 2022-09-25 22:14:11 -04:00
Ronny Chan
ca3170c293
doc: Add winfsp-rs to file system libraries 2022-09-25 22:09:40 -04:00
Bill Zissimopoulos
9a27a3225b Merge branch 'master' into pvt-sxs 2022-09-16 12:32:59 +01:00
Bill Zissimopoulos
d44cb54bd5 tools: run-tests: disable exec tests for mountmgr 2022-09-14 17:16:56 +01:00
Bill Zissimopoulos
ba13995d10 update changelog 2022-09-14 12:26:40 +01:00
Bill Zissimopoulos
d1f863e9ac tools: run-tests: disable exec tests for mountmgr 2022-09-14 12:23:13 +01:00
Bill Zissimopoulos
ccdbc9daf9 tools: diag.bat: SxS support 2022-09-12 12:41:09 +01:00
Bill Zissimopoulos
1723179430 dll: FspFsctlStartService: fix bug in non-SxS mode 2022-09-10 17:14:19 +01:00
Bill Zissimopoulos
8e0f5b457c tools,appveyor: remove sxsident 2022-09-10 16:24:15 +01:00
Bill Zissimopoulos
2fc2c237d3 dll: FspFsctlEnumServices 2022-09-10 16:23:14 +01:00
Bill Zissimopoulos
b99fb9a5cb dll: FspFsctlRegister: sxs-ize driver display name 2022-09-09 23:57:44 +01:00
Bill Zissimopoulos
538fee8e54 installer: CustomActions: InstallJunctions 2022-09-09 22:59:14 +01:00
Bill Zissimopoulos
925fa4b6e4 installer: CustomActions: DeferredAction: minor fix 2022-09-09 14:35:17 +01:00
Bill Zissimopoulos
b179c7a933 tools: sxsident.bat 2022-09-08 17:55:57 +01:00
Bill Zissimopoulos
b25e116f08 tools: sxsident.bat 2022-09-08 16:00:22 +01:00
Bill Zissimopoulos
422c369b15 tools: sxsident.bat 2022-09-08 15:52:25 +01:00
Bill Zissimopoulos
d450683e2e installer: SxS: WIP 2022-09-07 21:59:42 +01:00
Bill Zissimopoulos
ad1aa156dc installer: SxS: WIP 2022-09-07 20:18:54 +01:00
Bill Zissimopoulos
aa012db099 installer: SxS: WIP 2022-09-07 17:37:25 +01:00
Bill Zissimopoulos
b08f60bfbd installer: SxS: WIP 2022-09-07 16:19:48 +01:00
Bill Zissimopoulos
a9b3cef253 installer: SxS: WIP 2022-09-07 15:31:18 +01:00
Bill Zissimopoulos
b43d1f5502 dll: FspFsctlUnregister: do FspFsctlStopService prior to unregister 2022-09-07 14:20:20 +01:00
Bill Zissimopoulos
de9112f6e6 installer: SxS: WIP 2022-09-06 18:42:39 +01:00
Bill Zissimopoulos
329b14d838 build: version: bump to v2.0 (2023) 2022-09-06 12:09:54 +01:00
Bill Zissimopoulos
7009324e7f installer: SxS: WIP 2022-09-06 12:08:09 +01:00
Bill Zissimopoulos
f4ae097722 installer: SxS: WIP 2022-09-05 17:28:31 +01:00
Bill Zissimopoulos
50be07e8ac installer: SxS: WIP 2022-09-05 17:23:49 +01:00
Bill Zissimopoulos
2dd054087c installer: SxS: fix whitespace 2022-09-05 16:46:10 +01:00
Bill Zissimopoulos
7f6608cf7d installer: SxS: WIP 2022-09-05 16:40:06 +01:00
Bill Zissimopoulos
39e9d8156b installer: SxS: WIP 2022-09-05 13:34:25 +01:00
Bill Zissimopoulos
90acd19014 sys: FspDeviceDelete: remove DBG code
FspDeviceDelete was recently changed and its DBG code is no longer valid.
2022-09-04 16:58:38 +01:00
Bill Zissimopoulos
9154ec784d installer: CustomActions: InstanceID 2022-09-04 15:55:47 +01:00
Bill Zissimopoulos
0b3ce52958 Merge branch 'master' into pvt-sxs 2022-09-01 14:42:27 +01:00
Bill Zissimopoulos
deee7edded build: version: v1.12B1 (2022.2 Beta1) 2022-08-30 13:21:31 +01:00
Bill Zissimopoulos
f41f410546 changelog: update for v1.12B1 2022-08-30 13:19:05 +01:00
Bill Zissimopoulos
a2dc40fe3a build: version: v1.12B1 (2022.2 Beta1) 2022-08-30 13:15:57 +01:00
Bill Zissimopoulos
adeed2b79d fsptool: ver, unload commands 2022-08-21 07:59:28 +01:00
Bill Zissimopoulos
5dda5903a8 tst: winfsp-tests: disable load_unload_test 2022-08-21 07:25:25 +01:00
Bill Zissimopoulos
a7bc306b2d dll: FspSxsAppendSuffix 2022-08-20 11:58:00 +01:00
Bill Zissimopoulos
7e59c2e5a6 dll: FspFsctlFixServiceSecurity: deny SERVICE_STOP to Everyone
Although the FSD can now be unloaded, this can only be done safely via
the new FSP_FSCTL_UNLOAD control code. For this reason we disable the
ability to stop the FSD via the Service Manager.
2022-08-19 19:43:48 +01:00
Bill Zissimopoulos
637e8bb8c2 build.version.props: MyFsctlRegisterPath, MyNpRegisterPath, MyEventLogRegisterPath 2022-08-19 17:43:55 +01:00
Bill Zissimopoulos
9670caa3fe sys,dll: FSP_FSCTL_UNLOAD 2022-08-18 11:05:45 +01:00
Bill Zissimopoulos
005d3e4fb0 sys: FspUnload, FspSxsIdent 2022-08-05 17:41:12 +01:00
Bill Zissimopoulos
62a6bbab66 dll: FspSxsSuffix 2022-08-03 17:29:45 +01:00
Bill Zissimopoulos
40ba537dc2 dll: FspSxsIdent 2022-08-03 16:33:13 +01:00
Bill Zissimopoulos
ec832b45ff changelog: update for v1.12 2022-07-28 17:16:48 +01:00
Bill Zissimopoulos
fc03b485f3 doc: MountUseMountmgrFromFSD 2022-07-28 17:12:26 +01:00
Bill Zissimopoulos
651e45c3ba tools: update DigiCert cross cert 2022-07-01 14:06:26 +01:00
Bill Zissimopoulos
95c2fadce0 build: version: v1.12 (2023) 2022-07-01 00:00:01 +01:00
Bill Zissimopoulos
b4453c89cc tst: winfsp-tests: RejectIrpPriorToTransact0 test fixes 2022-06-30 13:32:31 +01:00
Bill Zissimopoulos
5483dcbd73 dll: FspMountSet_MountmgrDirectory: bug fix 2022-06-29 15:30:36 +01:00
Bill Zissimopoulos
f1cfe758ec sys: RejectIrpPriorToTransact0 is always 1 2022-06-29 15:08:34 +01:00
Bill Zissimopoulos
e9143a73a6 tools: run-tests: mount manager testing 2022-06-28 15:16:13 +01:00
Bill Zissimopoulos
264450f627 tst: winfsp-tests: test mount manager directory support 2022-06-28 14:32:27 +01:00
Bill Zissimopoulos
a731f0e5d8 sys,dll: MountUseMountmgrFromFSD 2022-06-27 17:28:24 +01:00
Bill Zissimopoulos
d7450d740e dll: Mount Manager directory support 2022-06-27 17:27:45 +01:00
Bill Zissimopoulos
5251dcbce9
Merge pull request #431 from xiaogaozi/doc-add-juicefs
doc: add JuiceFS to known file systems
2022-06-22 09:06:13 +01:00
Changjian Gao
dd3adf34ef Sign contributor agreement 2022-06-22 13:24:51 +08:00
Changjian Gao
b8a6a8efed Reorder 2022-06-20 13:48:26 +08:00
Changjian Gao
d67acf3b3a doc: add JuiceFS to known file systems 2022-06-20 13:47:17 +08:00
Bill Zissimopoulos
3b104723af changelog: update for v1.11 2022-06-15 16:45:37 +01:00
Bill Zissimopoulos
699278a7ed appveyor: disable special pool 2022-06-15 10:58:47 +01:00
Bill Zissimopoulos
e070cdd6be build: bump to 2022+ARM64 2022-06-14 23:09:23 +01:00
Bill Zissimopoulos
fbbca110fb README: minor improvements 2022-06-14 23:06:03 +01:00
Bill Zissimopoulos
0083a45e31 doc: registry settings document 2022-06-13 17:52:33 +01:00
Bill Zissimopoulos
faaac2da3c doc: building document 2022-06-13 14:19:59 +01:00
Bill Zissimopoulos
e44cba033f update README 2022-06-12 17:39:23 +01:00
Bill Zissimopoulos
91400babe0 update README 2022-06-11 15:42:03 +01:00
Bill Zissimopoulos
e1ac7b60f7 update README 2022-06-11 15:38:43 +01:00
Bill Zissimopoulos
573897b06e appveyor: skip_commits 2022-06-11 15:25:58 +01:00
Bill Zissimopoulos
b77b0a51f4 appveyor: enable special pool 2022-06-10 17:43:06 +01:00
Bill Zissimopoulos
26af6c9363 sys: convert suitable ERESOURCE to FAST_MUTEX 2022-06-10 16:20:24 +01:00
Bill Zissimopoulos
2e441534a3 sys: FspFsvolDeviceLockVolumeNotify 2022-06-10 16:20:19 +01:00
Bill Zissimopoulos
66f3620808 sys: FSP_FSVOL_DEVICE_EXTENSION::VolumeDeleteResource 2022-06-10 16:20:13 +01:00
Bill Zissimopoulos
805742f306 sys: FSP_FSVOL_DEVICE_EXTENSION::VolumeDeleteResource 2022-06-10 16:20:08 +01:00
Bill Zissimopoulos
18842682c8 sys: inline FspFsvolDeviceFileRename* and FspFsvolDeviceLockContextTable 2022-06-10 16:19:57 +01:00
Bill Zissimopoulos
a7a526351f sys: keep extra fsvol device reference
Reference an fsvol device at CREATE time and dereference at CLOSE time,
to ensure that fsvol remains around for DeviceIoControl operations done
after CLEANUP.
2022-06-09 14:28:31 +01:00
Bill Zissimopoulos
22bf0b09ef dll: FspMountBroadcastDriveChange
Broadcast WM_DEVICECHANGE asynchronously.
2022-06-07 14:06:13 +01:00
Bill Zissimopoulos
0a919d317a dll: FspMountBroadcastDriveChange
Broadcast WM_DEVICECHANGE asynchronously.
2022-06-07 13:11:23 +01:00
Bill Zissimopoulos
8e45f7d795 doc: WinFsp Performance Testing
Update with new tests and analysis for 2022.
2022-06-06 15:58:19 +01:00
Bill Zissimopoulos
646818a65c doc: WinFsp Performance Testing
Update with new tests and analysis for 2022.
2022-06-06 15:44:45 +01:00
Bill Zissimopoulos
6023efa7e6 doc: WinFsp Performance Testing
Update with new tests and analysis for 2022.
2022-06-06 00:32:15 +01:00
Bill Zissimopoulos
2dcb21edf2 tools: perf testing 2022-06-03 22:45:38 +01:00
Bill Zissimopoulos
edc56df2b2 tools: perf testing 2022-06-03 17:54:35 +01:00
Bill Zissimopoulos
64b57476dc changelog: update for v1.11RC1 2022-06-03 12:28:01 +01:00
Bill Zissimopoulos
acfa0ad880 build: version: bump to 2022+ARM64 RC1 2022-06-03 12:26:42 +01:00
Bill Zissimopoulos
d63cbd4146 changelog: update for v1.11B3 2022-06-03 12:25:16 +01:00
Bill Zissimopoulos
a90f19dbe3 dll: FspMountBroadcastDriveChange: fix drive change unitmask 2022-06-03 12:10:54 +01:00
Bill Zissimopoulos
b0cfdc0396 tst: fsbench: OptEmptyCacheDrive, OptOpenCount 2022-06-02 13:10:31 +01:00
Bill Zissimopoulos
69257949ac sys: FspCompareUnicodeString 2022-06-02 13:09:40 +01:00
Bill Zissimopoulos
09ab9de32c tst: memfs: MemfsUpperChar
Bit-twiddling upper case char
2022-05-30 17:08:36 +01:00
Bill Zissimopoulos
75620332c7 tst: memfs: MemfsFileNameCompare
Use fast loop for ASCII and fall back to
CompareStringW for general case.
2022-05-30 14:13:53 +01:00
Bill Zissimopoulos
47aa53c70a dll: FspFsctlServiceVersion
During file system volume creation FspFsctlCreateVolume calls FspFsctlServiceVersion
which examines the version of the driver in use and initializes the variables
FspFsctlTransactCode and FspFsctlTransactBatchCode with either the new
FSP_IOCTL_TRANSACT* codes or the old FSP_FSCTL_TRANSACT* codes.
2022-05-27 18:31:36 +01:00
Bill Zissimopoulos
c343253718 inc: fuse: FSP_FUSE_HAS_GETPATH 2022-05-25 21:11:28 +01:00
Bill Zissimopoulos
6764269a49 dll: MountBroadcastDriveChange registry setting: BSF_POSTMESSAGE 2022-05-25 20:52:54 +01:00
Bill Zissimopoulos
41d69d7186 dll: MountBroadcastDriveChange registry setting 2022-05-25 16:55:54 +01:00
Bill Zissimopoulos
f6e6660362 dll: fuse: gracefully handle ENOSYS from xattr calls 2022-05-23 22:07:37 +01:00
Bill Zissimopoulos
61027daf6e update changelog 2022-05-23 21:38:53 +01:00
Bill Zissimopoulos
9ae9b8ff2c dll: fuse: uidmap option and AzureAD support 2022-05-23 17:53:39 +01:00
Bill Zissimopoulos
74bb51ae07 shared: posix: FspPosixSetUidMap 2022-05-19 00:50:38 +01:00
Bill Zissimopoulos
332ba48203 changelog: update for 2022+ARM64 Beta3 2022-05-18 14:01:43 +01:00
Bill Zissimopoulos
0d7f13abeb changelog: update for 2022+ARM64 Beta3 2022-05-18 13:59:16 +01:00
Bill Zissimopoulos
e88a7742df build: version: bump to 2022+ARM64 Beta3 2022-05-18 13:56:00 +01:00
Bill Zissimopoulos
c7b3312cf6 sys: disable FSP_FILE_NODE_NO_PGIO 2022-05-17 23:44:16 +01:00
Bill Zissimopoulos
c0fa5696d7 sys: FspVolumeFastTransact 2022-05-17 17:25:18 +01:00
Bill Zissimopoulos
43af829d46 sys,dll,inc: FSP_IOCTL_TRANSACT 2022-05-16 21:40:01 +01:00
Bill Zissimopoulos
9c1a7fb40b build: sign all artifacts destined for installation 2022-05-16 12:24:25 +01:00
Bill Zissimopoulos
dd907a44ad dll: fuse: ensure MaxComponentLength is initialized 2022-04-25 17:41:42 +01:00
Bill Zissimopoulos
df4c19c113 sys: FSP_FILE_NODE_NO_PGIO 2022-04-19 15:21:54 +01:00
Bill Zissimopoulos
deaf475861 sys: FSP_ENTER_FIO: handle bogus fast I/O to fsctl device 2022-04-19 14:29:29 +01:00
Bill Zissimopoulos
bda0477a79 tst: fsbench: --empty-cache option 2022-04-19 10:21:31 +01:00
Bill Zissimopoulos
4b65871747 changelog: update for 2022+ARM64 Beta2 2022-04-13 16:57:36 +01:00
Bill Zissimopoulos
eaa0d7d7d2 tst: passthrough-fuse: ensure WinFsp DLL loaded 2022-04-12 23:26:18 +01:00
Bill Zissimopoulos
facbc2c1b5 tst: passthrough-fuse: getpath: GetFinalPathNameByHandle 2022-04-12 18:21:19 +01:00
Bill Zissimopoulos
e5879a9cb0 dll: fuse: getpath 2022-04-12 15:44:54 +01:00
Bill Zissimopoulos
0a91292e05 tst: ntptfs: PostDispositionWhenNecessaryOnly 2022-04-02 18:11:54 +01:00
Bill Zissimopoulos
1a879e3302 inc, src: PostDispositionWhenNecessaryOnly
- Rename PostDispositionForDirOnly to PostDispositionWhenNecessaryOnly

- Implement PostDispositionWhenNecessaryOnly across the board
2022-04-02 12:48:35 +01:00
Bill Zissimopoulos
98421fe11b inc,sys,tst: fsctl: PostDispositionForDirOnly 2022-04-01 20:54:54 +01:00
Bill Zissimopoulos
f6fef97a10 changelog: update for 2022+ARM64 Beta2 2022-03-30 18:22:54 +01:00
Bill Zissimopoulos
f0931a0cf2 tools: wpr-test.bat 2022-03-30 18:06:59 +01:00
Bill Zissimopoulos
9ecb6541cf tools: vsvarsall.bat: cleanup and restrict to VS2019 2022-03-25 20:40:19 +00:00
Bill Zissimopoulos
d816d607f4 sys: FspFsvolDeviceDirInfoCacheItemSizeMax: increase to 64K 2022-03-24 18:10:04 +00:00
Bill Zissimopoulos
f3df3f6dd2 build: version: bump to 2022+ARM64 Beta2 2022-03-22 19:12:55 +00:00
Bill Zissimopoulos
7527155cb8 dll: dirbuf:
- FspFileSystemAcquireDirectoryBufferEx takes hint for initial capacity.
- Buffer allocation strategy has been improved to minimize reallocation.
- Quick sort of directory entries now implements median of three partitioning. This improves performance of sorting already sorted data.
2022-03-22 16:47:40 +00:00
Bill Zissimopoulos
868812d248 tools: run-all-perf-tests.bat 2022-03-21 16:11:02 +00:00
Bill Zissimopoulos
20680fa5b5 sys: FastIo: read/write implementation 2022-03-20 20:31:54 +00:00
Bill Zissimopoulos
00d4aba946 github: winfsp org 2022-03-02 18:01:21 +00:00
Bill Zissimopoulos
fadcd84ca9 winfsp.dev website 2022-03-02 17:36:14 +00:00
Bill Zissimopoulos
966e08e7c1 appveyor: winfsp.dev 2022-03-02 16:38:37 +00:00
Bill Zissimopoulos
8d83d46e7f
build.version.props: MyCrossCert, MyCertIssuer 2022-02-24 13:20:21 +00:00
Bill Zissimopoulos
cdcd6af81d
tools: run-tests: ntptfs: accommodate OS version differences 2022-02-11 11:12:59 +00:00
Bill Zissimopoulos
9567b94d37
tools: run-tests: ntptfs: accommodate OS version differences 2022-02-10 14:08:17 +00:00
Bill Zissimopoulos
50a28c4284
tools: run-tests: ntptfs: accommodate OS version differences 2022-02-10 10:30:31 +00:00
Bill Zissimopoulos
87a1d5468d
tools: run-tests: ntptfs: enable rename_mmap_test 2022-02-09 17:42:37 +00:00
Bill Zissimopoulos
fda950b90e
appveyor: enable VS2017 build 2022-02-09 17:02:16 +00:00
Bill Zissimopoulos
4ccf0d2085
build: allow builds outside git 2022-02-09 17:01:32 +00:00
Bill Zissimopoulos
2c42dc535c
tools: winfsp-winpe.bat 2022-02-07 17:57:50 +00:00
Bill Zissimopoulos
84ab502b98
doc: update known file systems 2022-02-03 16:42:19 +00:00
Bill Zissimopoulos
0c90a69b27
dotnet: Interop.cs: fix newlines 2022-02-03 16:15:24 +00:00
Bill Zissimopoulos
2ed46a39fa
tools: build-choco.bat: copy from build.bat 2022-02-03 16:08:54 +00:00
Bill Zissimopoulos
cf13cac438
dll: np: NPGetUniversalName implementation 2022-02-03 15:32:35 +00:00
Bill Zissimopoulos
025e42e046
tst: run-tests: cleanup 2022-01-27 16:52:36 +00:00
Bill Zissimopoulos
c4807bd7c9
tools: run-tests: match test names using "starts with" 2022-01-27 16:19:53 +00:00
Bill Zissimopoulos
71db03b0d3
tst: winfsp-tests: ResilientNtCreateFile 2022-01-27 13:03:54 +00:00
Bill Zissimopoulos
98f9921413
appveyor: enable skip_tags, RDP, disable fast_finish 2022-01-27 12:14:51 +00:00
Bill Zissimopoulos
d82caabb47
tools: run-tests: ntptfs: ifstest 2022-01-26 19:03:54 +00:00
Bill Zissimopoulos
172056b51e
tst: ntptfs: NtQueryDirectoryFile workaround comment 2022-01-26 09:18:16 +00:00
Bill Zissimopoulos
f7ba091364
tst: ntptfs: guard against potential NtQueryDirectoryFile wonkiness 2022-01-26 08:59:48 +00:00
Bill Zissimopoulos
1ad13aebdb
tst: ntptfs: workaround for NtQueryDirectoryFile on WOW64 2022-01-26 00:12:13 +00:00
Bill Zissimopoulos
83e59f33fc
appveyor: disable VS2017 that has expired license 2022-01-25 14:44:57 +00:00
Bill Zissimopoulos
b011bad5c0
tools: run-tests: ntptfs 2022-01-25 14:43:54 +00:00
Bill Zissimopoulos
290bc0d4c9
tst: ntptfs: ACCESS_SYSTEM_SECURITY 2022-01-22 00:07:28 +00:00
Bill Zissimopoulos
4de72f7c32
tst: ntptfs: SetEa: ensure that FileInfo is filled 2022-01-21 18:38:37 +00:00
Bill Zissimopoulos
cb98f711f7
tst: ntptfs: fix ea size for NTFS compatibility 2022-01-21 18:35:24 +00:00
Bill Zissimopoulos
c306a52d19
tst: ntptfs: fix Rename on versions of the OS without POSIX rename 2022-01-21 17:42:22 +00:00
Bill Zissimopoulos
627ad8be8c
tst: ptfs: eliminate FILE_SUPPORTS_POSIX_UNLINK_RENAME 2022-01-21 17:07:32 +00:00
Bill Zissimopoulos
42f534bee8
installer: ntptfs: add missing ptfs.h header 2022-01-21 17:07:23 +00:00
Bill Zissimopoulos
48d599edf7
tools: run-tests: ntptfs testing 2022-01-21 16:35:31 +00:00
Bill Zissimopoulos
eaa5fa8043
tst: ntptfs: ExtraFeatures 2022-01-21 16:24:42 +00:00
Bill Zissimopoulos
1ef85d5d3a
tst: ntptfs: SetAllocationSizeOnCleanup 2022-01-21 16:00:52 +00:00
Bill Zissimopoulos
f28902dd7b
tst: ntptfs: WslFeatures 2022-01-21 14:29:42 +00:00
Bill Zissimopoulos
13810e94fc
build: rename version.properties to build.version.props 2022-01-21 13:44:27 +00:00
Bill Zissimopoulos
7bd122a8db
tst: ntptfs: rename project files 2022-01-21 13:33:12 +00:00
Bill Zissimopoulos
c43ce26a1b
doc: WinFsp-on-ARM64: add info on memory barrier changes 2022-01-19 17:06:17 +00:00
Bill Zissimopoulos
29251dc2be
sys, dll: convert memory barriers to interlocked operations 2022-01-19 10:55:46 +00:00
Bill Zissimopoulos
362b9ceb7c
inc: fsctl.h: atomics 2022-01-17 14:33:34 +00:00
Bill Zissimopoulos
04c2f0120c
sys: remove wait group (Wgroup) functionality 2022-01-17 14:30:06 +00:00
Bill Zissimopoulos
a3b98634de
tst: winfsp-tests: notify_multiple_end_test 2022-01-15 15:55:00 +00:00
Bill Zissimopoulos
228f1d658d
sys: FspVolumeNotify: allow multiple outstanding calls to FspFileSystemNotifyBegin 2022-01-15 15:46:56 +00:00
Bill Zissimopoulos
73f587e674
tools: run-tests: fixes for appveyor vs2019 image 2022-01-13 19:44:22 +00:00
Bill Zissimopoulos
545184da66
tlib: report last error on ASSERT failure 2022-01-13 19:42:05 +00:00
Bill Zissimopoulos
e2bf834ff1
tools: run-tests: fixes for appveyor vs2019 image 2022-01-13 13:40:29 +00:00
Bill Zissimopoulos
57fce78ff3
sys: FspVolumeNotifyWork: always acquire the rename lock shared 2022-01-12 15:43:05 +00:00
Bill Zissimopoulos
24e6f1a2f6
Merge branch 'pvt-gauntlet-vs2019' into pvt-gauntlet-merge 2022-01-08 09:51:41 +00:00
Bill Zissimopoulos
6720dfacbc
workflows: avm: update files to check 2022-01-07 18:13:04 +00:00
Bill Zissimopoulos
dc5862c2a2
update changelog 2022-01-07 18:03:48 +00:00
Bill Zissimopoulos
30d09b4a11
shared: DistinctPermsForSameOwnerGroup: change default to TRUE 2022-01-07 17:50:20 +00:00
Bill Zissimopoulos
e9808a4373
update changelog 2022-01-07 17:44:27 +00:00
Bill Zissimopoulos
751eaa69df
update source copyright to 2022 2022-01-07 17:30:49 +00:00
Bill Zissimopoulos
aa644b4c7a
installer: add ntptfs sample 2022-01-06 17:14:46 +00:00
Bill Zissimopoulos
61a8adc809
tst: ntptfs: ARM64 build 2022-01-06 17:02:14 +00:00
Bill Zissimopoulos
76ad6d6ac9
Merge branch 'pvt-arm64' 2022-01-06 16:47:53 +00:00
Bill Zissimopoulos
0621a545ed
doc: tutorial: add note about ntptfs 2022-01-06 16:38:47 +00:00
Bill Zissimopoulos
eff74d78f5
Merge branch 'pvt-ntptfs' 2022-01-06 16:34:13 +00:00
Bill Zissimopoulos
36a3f1e1bf
changelog: archive old log and change format to markdown 2022-01-06 16:32:34 +00:00
Bill Zissimopoulos
2fb2de067c
update changelog 2022-01-06 13:49:56 +00:00
Bill Zissimopoulos
27b52fd167
tst: ntptfs: new passthrough file system 2022-01-06 13:40:26 +00:00
Bill Zissimopoulos
423c70757c
build: version: WinFsp 2022 2021-12-29 23:06:36 +00:00
Bill Zissimopoulos
551ed341a7
build: version: 2022 Beta5 2021-12-20 14:57:13 +00:00
Bill Zissimopoulos
b8038604d1
tst: winfsp-tests: disable delete_ex_test and rename_ex_test on shares
These tests fail on Server 2019. This is not a WinFsp problem.
2021-12-18 10:20:15 +00:00
Bill Zissimopoulos
38a8a4c2d2
tools: run-tests.bat: ifstest: disable SetPointIoReparseDataInvalidTest
This test succeeds on Server 2012 and fails on Server 2016/2019.
Investigation on Server 2019 showed that the FSCTL_SET_REPARSE_POINT
input buffer length was 23 instead of less than
REPARSE_DATA_BUFFER_HEADER_SIZE(==8) like ifstest claims. This
suggests that WinFsp is not the problem here, but perhaps some OS
changes between Server 2012 and Server 2016. NOTE that we are still
using the ifstest from Server 2012 HCK, which may account for the
difference.
2021-12-17 21:47:43 +00:00
Bill Zissimopoulos
fbd7036efa
appveyor: gauntlet: VS2017 support 2021-12-17 12:52:32 +00:00
Bill Zissimopoulos
c8ff0d4c88
appveyor: gauntlet 2021-12-17 12:00:26 +00:00
Bill Zissimopoulos
1cf40caedc
appveyor: gauntlet 2021-12-17 00:36:21 +00:00
Bill Zissimopoulos
defa57fd94
build: fix broken version info 2021-12-17 00:03:37 +00:00
Bill Zissimopoulos
c4cc444b80
doc: WinFsp on ARM64 2021-12-16 21:41:31 +00:00
Bill Zissimopoulos
b2681ff9c8
tools: remove-build-arm64 2021-12-16 16:06:27 +00:00
Bill Zissimopoulos
3bcb025389
build: VStudio: build.common.props 2021-12-16 15:39:29 +00:00
Bill Zissimopoulos
3b19b125b7
build: VStudio: build.common.props 2021-12-16 14:31:44 +00:00
Bill Zissimopoulos
8f0b80f46c
build: VStudio: build.common.props 2021-12-16 14:18:52 +00:00
Bill Zissimopoulos
5a44f4a233
appveyor: use VS2015 to build post-ARM64 2021-12-16 11:35:38 +00:00
Bill Zissimopoulos
6ab1ed3b7f
tools: remove-all-arm64
Add script to remove ARM64 project configurations for builds on VS2015
2021-12-16 11:30:09 +00:00
Bill Zissimopoulos
52ffb47fee
build: fix broken version info 2021-12-08 10:37:33 +00:00
Bill Zissimopoulos
41cc70e573
ARM64: initial port 2021-12-07 14:40:28 +00:00
Bill Zissimopoulos
c208e0ecbd
sys: cache FileDesc->DispositionStatus
DeleteFileW and RemoveDirectoryW in recent versions of Windows 10 have
been changed to perform a FileDispositionInformationEx with POSIX
semantics and if that fails to retry with FileDispositionInformation.
Unfortunately this is done even for legitimate error codes such as
STATUS_DIRECTORY_NOT_EMPTY.

This means that user mode file systems have to do unnecessary CanDelete
checks even when they support FileDispositionInformationEx. The extra
check incurs extra context switches, and in some cases it may also be
costly to compute (e.g. FUSE).

We optimize this away by storing the status of the last CanDelete check
in the FileDesc and then continue returning the same status code for
all checks for the same FileDesc.
2021-12-04 12:36:12 +00:00
Bill Zissimopoulos
87389f010b
build: fix broken builds when FSD source changes
Turns out that the linker automatically creates .LIB and .EXP files
for all targets that export symbols (e.g. via __declspec(dllexport)).
The FSD now exports symbols for use by other kernel drivers; this
resulted in files like winfsp-x64.lib and winfsp-x64.exp to be
inadvertently created. Unfortunately this clashed with the files with
the same name created from building the DLL.

Since we only want the .LIB and .EXP files produced from the DLL, we
rename the .LIB and .EXP files produced from the FSD to a name that
does not clash. There does not seem to be any way to instruct the
linker to completely turn off .LIB and .EXP file generation for targets
that export symbols.
2021-12-04 08:36:54 +00:00
Bill Zissimopoulos
c32b1c19c2
sys: FspFsvolQueryDirectoryRetry: early exit when pattern not wild 2021-12-03 17:20:50 +00:00
Bill Zissimopoulos
8ce6836674
dll: FspFileSystemSearchDirectoryBuffer: fix #351 2021-12-03 14:47:19 +00:00
Bill Zissimopoulos
8ba8d31e50
changelog: v1.10B4 update 2021-11-26 10:34:33 +00:00
Bill Zissimopoulos
c1ab78e8e1
changelog: v1.10B4 update 2021-11-26 10:33:29 +00:00
Bill Zissimopoulos
ed404ee579 inc: winfsp.h: FspCleanupDelete: POSIX semantics 2021-11-25 12:18:43 +00:00
Bill Zissimopoulos
620ebd9e72 inc: winfsp.h: FspCleanupDelete: POSIX semantics 2021-11-25 12:14:48 +00:00
Bill Zissimopoulos
fc8d18e4de doc: revert the Delete redesign 2021-11-25 11:51:29 +00:00
Bill Zissimopoulos
00219f29cf
sys: POSIX rename improvements 2021-11-25 10:35:22 +00:00
Bill Zissimopoulos
c4f994f8f6
sys: FspFsvolSetDispositionInformation
return STATUS_FILE_DELETED if file is already deleted
2021-11-24 18:31:48 +00:00
Bill Zissimopoulos
91211f6ccb
sys: reimplement POSIX unlink 2021-11-24 16:03:31 +00:00
Bill Zissimopoulos
666561bfa1
dll: revert the Delete redesign 2021-11-22 18:26:45 +00:00
Bill Zissimopoulos
4e94991221
dll: fuse: revert the Delete redesign 2021-11-22 14:46:57 +00:00
Bill Zissimopoulos
826a514fe3
dll: dotnet: revert the Delete redesign 2021-11-22 13:55:32 +00:00
Bill Zissimopoulos
a9d90acd71
tst: winfsp-tests: exec_delete_test 2021-11-20 10:53:57 +00:00
Bill Zissimopoulos
d72fe2ee33
sys: FspFsvolSetDispositionInformation: ignore FILE_DISPOSITION_FORCE_IMAGE_SECTION_CHECK flag 2021-11-19 17:16:36 +00:00
Bill Zissimopoulos
e09042c028
changelog: update with v1.10B4 notes 2021-11-18 16:04:44 +00:00
Bill Zissimopoulos
6e13825dcc
build: bump version to WinFsp 2022 Beta4 2021-11-18 15:52:39 +00:00
Bill Zissimopoulos
cc90b5dd80
changelog: fix notes accidentally magnled in previous release 2021-11-18 15:51:19 +00:00
Bill Zissimopoulos
4b6d9b70d7
tools: run-tests: FUSE sample testing
- exclude reparse_symlink* on AppVeyor
2021-11-18 10:34:48 +00:00
Bill Zissimopoulos
1f68eb0f3d
tst: memfs-fuse: remove initializer designators
- allows this project to be built with VS2015
2021-11-17 22:17:07 +00:00
Bill Zissimopoulos
61c48ab417
tools: run-tests: fix ignored ERRORLEVEL 2021-11-17 15:19:29 +00:00
Bill Zissimopoulos
d7e49dfb20
tools: run-tests: add memfs-fuse testing 2021-11-17 13:51:18 +00:00
Bill Zissimopoulos
10c5fa6301
tools: run-tests: add memfs-fuse testing 2021-11-17 13:46:09 +00:00
Bill Zissimopoulos
368855676a
tools: run-tests: fix !time! retrieval 2021-11-14 13:01:56 +00:00
Bill Zissimopoulos
6fbe73ce4d
tools: run-tests.bat: fix parens escaping 2021-11-14 12:45:13 +00:00
Bill Zissimopoulos
e1763bcd10
tools: run-tests: add test duration 2021-11-14 11:35:20 +00:00
Bill Zissimopoulos
378beb55eb
dll: fuse: CheckSymlinkDirectory: optimization 2021-11-14 10:48:17 +00:00
Bill Zissimopoulos
14b212f9af
tst: winfsp-tests: remove symbol SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE 2021-11-14 00:09:46 +00:00
Bill Zissimopoulos
cca8b32128
installer: add memfs-fuse sample 2021-11-13 23:37:34 +00:00
Bill Zissimopoulos
0b94e8bc6a
dll: fuse: multiple improvements and fixes
- Symlinks: Now supports conventing a directory into a symlink reparse
point.

- Symlinks: The determination of whether a symlink is a file or
directory is now possible for file systems that do not support slashdot
(/.) queries.

- EA: Now allows the removal of non-existant EA without error (this is
allowed on Windows).
2021-11-13 23:27:47 +00:00
Bill Zissimopoulos
ec3386c2b3
tst: winfsp-tests: add --fuse-external option 2021-11-13 10:15:12 +00:00
Bill Zissimopoulos
d67a917c6f
tst: memfs-fuse: add FUSE reference file system 2021-11-13 10:11:45 +00:00
Bill Zissimopoulos
2a86cd2c90
doc: WinFsp-Delete-Redesign: fix IRP_MJ_CLOSE doc link 2021-11-08 16:57:35 +00:00
Bill Zissimopoulos
67c4011263
update README with reference to Windows 11 2021-11-08 16:20:16 +00:00
Bill Zissimopoulos
90d67bc07d
tools: build: sign cab file using SHA-256 2021-11-08 15:20:54 +00:00
Bill Zissimopoulos
70643f40a0
update changelog 2021-11-08 13:38:02 +00:00
Bill Zissimopoulos
366a9c562f
art: update with Win11 colors 2021-11-08 13:17:35 +00:00
Bill Zissimopoulos
d7a8b0d9fb
launcher: SvcInstanceStartWithArgvCopy: properly handle timeout condition 2021-10-31 12:35:30 +00:00
Bill Zissimopoulos
52dd6f7478
dll: fuse: FSP_FUSE_CAP_DELETE_ACCESS 2021-10-26 13:21:57 +01:00
Bill Zissimopoulos
73359d682b
dll: fuse: convert EPERM/EACCES from unlink/rmdir to STATUS_CANNOT_DELETE 2021-10-25 13:58:52 +01:00
Bill Zissimopoulos
2a3f1a3990
doc: update NTFS compatibility 2021-10-22 15:22:08 +01:00
Bill Zissimopoulos
e823103334 doc: update API documentation 2021-10-22 14:47:58 +01:00
Bill Zissimopoulos
1208c6c652
doc: fix code in WinFsp Delete Redesign document 2021-10-22 12:22:33 +01:00
Bill Zissimopoulos
b13b24e0b1
doc: add WinFsp Delete Redesign document 2021-10-22 12:15:16 +01:00
Bill Zissimopoulos
91aa0ac2d0
inc: winfsp.h: fix source doc for Delete 2021-10-22 11:39:05 +01:00
Bill Zissimopoulos
dcce0d44a7
build: bump version to 2021.1 Beta3 2021-10-21 21:52:18 +01:00
Bill Zissimopoulos
af257d4bff
tst: winfsp-tests: eliminate use of symbol FILE_SUPPORTS_POSIX_UNLINK_RENAME 2021-10-21 15:56:58 +01:00
Bill Zissimopoulos
9eaaefd154
sys,dll: debug support for DispositionEx, RenameEx 2021-10-21 15:54:38 +01:00
Bill Zissimopoulos
bb3e92df6c
sys, dll: implement POSIX semantics for Rename 2021-10-21 15:39:25 +01:00
Bill Zissimopoulos
76bfa395a8
dotnet: implement new Delete design and POSIX semantics 2021-10-20 12:23:14 +01:00
Bill Zissimopoulos
81248f3899
dotnet: FileSystemHost: zero-init allocations made using Marshal.AllocHGlobal 2021-10-20 09:04:20 +01:00
Bill Zissimopoulos
a4d7aee6f5
dll: fuse: implement new Delete design and POSIX semantics 2021-10-19 17:54:01 +01:00
Bill Zissimopoulos
19823d84de
sys,dll,inc: implement new Delete design and POSIX semantics 2021-10-19 15:23:15 +01:00
Bill Zissimopoulos
3e66082f11
sys: FspFsvolQueryDirectoryCopy: fix issue #380 2021-10-13 16:35:02 +01:00
Bill Zissimopoulos
490d021b22
dll: mount: MountDoNotUseLauncher registry setting 2021-08-11 16:27:29 +01:00
Bill Zissimopoulos
2d41693f3c
src: dotnet: fix newlines 2021-06-20 20:44:06 +03:00
Bill Zissimopoulos
068270fa7f
update changelog 2021-06-13 12:40:41 -07:00
Bill Zissimopoulos
f51bdef534
dll: fuse: fix path arg to release on Create error
When the kernel sends a `Create` message the WinFsp-FUSE layer creates
and opens the file (as per Windows semantics). Sometimes an additional
operation needs to be performed after the file has been opened, which
may fail. In this case the just opened file must be released.

In this particular case the WinFsp-FUSE layer used to call `release`
with an uninitialized path. This commit fixes the problem.

This problem was originally reported in cgofuse (billziss-gh/cgofuse#58)
2021-06-09 10:17:59 -07:00
Bill Zissimopoulos
63f91cc667
build: bump version 2021-06-09 10:13:41 -07:00
Bill Zissimopoulos
6e3e469fcb
doc: update known file systems 2021-06-08 12:22:26 -07:00
Bill Zissimopoulos
efcc82b5dd
build: update version 2021-06-08 10:38:27 -07:00
Bill Zissimopoulos
cad5e68ac8
art: update logo 2021-06-01 13:49:00 -07:00
Bill Zissimopoulos
6e3a8f70b2
update source copyright to 2021 2021-05-21 15:57:05 -07:00
Bill Zissimopoulos
6bc0fe4ac5
art: update logo 2021-05-21 14:53:52 -07:00
Bill Zissimopoulos
07f097220f
changelog: update for v1.10B1 2021-05-21 11:41:35 -07:00
Bill Zissimopoulos
ca832988ed
dll,sys: fix issue #369
The original WinFsp protocol for shutting down a file system was to issue
an FSP_FSCTL_STOP control code to the fsctl device. This would set the IOQ
to the "stopped" state and would also cancel all active IRP's. Cancelation
of IRP's would sometimes free buffers that may have still been in use by
the user mode file system threads; hence access violation.

To fix this problem a new control code FSP_FSCTL_STOP0 is introduced. The
new file system shutdown protocol is backwards compatible with the original
one and works as follows:

- First the file system process issues an FSP_FSCTL_STOP0 control code which
sets the IOQ to the "stopped" state but does NOT cancel IRP's.

- Then the file system process waits for its dispatcher threads to complete
(see FspFileSystemStopDispatcher).

- Finally the file system process issues an FSP_FSCTL_STOP control code
which stops the (already stopped) IOQ and cancels all IRP's.
2021-05-18 12:30:17 -07:00
Bill Zissimopoulos
23e401e312
Merge pull request #371 from lemourin/mingw-fix
inc: don't redeclare _FILE_FULL_EA_INFORMATION for mingw
2021-05-17 10:00:17 -07:00
Paweł Wegner
bde57697f9 Add Paweł Wegner to contributors. 2021-05-15 14:59:10 +02:00
Paweł Wegner
f62aa00a1e inc: don't redeclare _FILE_FULL_EA_INFORMATION for mingw
mingw-w64 declares _FILE_FULL_EA_INFORMATION since Jan 18, 2010 [1].

The change allows the winfsp client library to be consumed by projects built with mingw.

[1]: afd1465722
2021-05-14 14:08:02 +02:00
Bill Zissimopoulos
a27994289d
art: update 2021-05-07 16:50:58 -07:00
Bill Zissimopoulos
3b10145e93
tst: winfsp-tests: disable new tests that fail on passthrough 2021-04-19 13:34:35 -07:00
Bill Zissimopoulos
33c6e7ee61
sys: fix issue #364 2021-04-16 16:43:34 -07:00
Bill Zissimopoulos
d0d67998c1
inc: fsctl.h: fix class guid's when used outside our build system 2021-04-13 15:33:57 -07:00
Bill Zissimopoulos
aa7888effc
tools: wixguid.py 2021-04-13 15:22:42 -07:00
Bill Zissimopoulos
3c7e712e57
tools: build.bat: skip choco build for non-WinFsp brands 2021-04-13 14:38:51 -07:00
Bill Zissimopoulos
f8ee12f592
build: fix inadvertently broken DLL build on VS2015 2021-04-12 22:07:04 -07:00
Bill Zissimopoulos
c84d47aa3e
doc: WinFsp rebranding document 2021-04-12 21:38:09 -07:00
Bill Zissimopoulos
023c925fb6
WinFsp rebranding support 2021-04-12 17:47:34 -07:00
Bill Zissimopoulos
a7cfabeff8
tools: add batch file that fixes issue #162 2021-04-08 15:00:55 -07:00
Bill Zissimopoulos
d4a70da611
Merge branch 'pvt-tsfix' 2021-04-08 14:06:52 -07:00
Bill Zissimopoulos
50892bfa19
shared: posix: DistinctPermsForSameOwnerGroup 2021-04-06 15:00:31 -07:00
Bill Zissimopoulos
b2e677a3d3
sys: FspFsvolSetBasicInformation: issue #362
According to the FILE_BASIC_INFORMATION doc a file system should not update a file timestamp when it receives a value of -1 in the corresponding time field.

This commit converts a -1 timestamp to a 0 timestamp; this directs a WinFsp file system not to update the corresponding file timestamp.

This commit fixes issue #362
2021-04-06 13:41:35 -07:00
Bill Zissimopoulos
9d76495340
update Changlog for v1.9 2021-04-06 13:01:33 -07:00
Bill Zissimopoulos
41c604b0fd
update Changelog for v1.9B2 2021-04-06 13:00:30 -07:00
Bill Zissimopoulos
28a9534a65
build: version.properties: bump version 2021-04-06 12:53:33 -07:00
Bill Zissimopoulos
b87c907af8
build: version.properties: bump version 2021-02-02 16:50:52 -08:00
Bill Zissimopoulos
9d5efe5f98
dll: fuse: FileSecurity option 2021-01-25 16:54:59 -08:00
Bill Zissimopoulos
c5b850be35
sys: improve trace functionality 2021-01-25 13:11:10 -08:00
Bill Zissimopoulos
0af0bfbe7c
sys: FspFsvolClose: convert CLOSE requests to synchronous when above the IOQ watermark 2021-01-25 12:45:33 -08:00
Bill Zissimopoulos
1dbcae3985
sys: FspTraceNtStatus: fix spelling mistake 2021-01-25 12:44:59 -08:00
Bill Zissimopoulos
a5726c820b
sys: add trace functionality 2021-01-13 16:15:06 -08:00
Bill Zissimopoulos
870c54253a
Merge pull request #342 from gaotxg/master
Credential: Default do not save password
2021-01-05 19:47:51 -08:00
gaotxg
f9cbbea386
Update Contributors.asciidoc 2021-01-06 10:47:42 +08:00
gaotxg
a939d9997b
Credential: Default do not save password
If user want to save password, click save and credential window won't appear again.
Do not remember password should be default option.
2020-12-30 11:19:57 +08:00
Bill Zissimopoulos
c803ef24f8
dll: fuse: truncate fixed size options
Some options (VolumePrefix, FileSystemName, volname) have a fixed maximum size.
This commit adds functionality to truncate user-specified long options to their fixed maximum size.
2020-12-22 15:44:37 -08:00
Bill Zissimopoulos
2d5d058d2f
dll: FspFsctlStartService:make thread safe 2020-12-19 11:05:24 -08:00
Bill Zissimopoulos
a372c6ee40
changelog: add note about notifyfs file systems 2020-12-18 16:57:08 -08:00
Bill Zissimopoulos
c8a5f52fb1
installer: add notifyfs-dotnet file system 2020-12-18 16:47:20 -08:00
Bill Zissimopoulos
40052b143e
tst: notifyfs-dotnet: add .NET file system to demo file notification mechanism 2020-12-18 16:39:30 -08:00
Bill Zissimopoulos
8006763367
dotnet: Interop: NotifyInfoInternal: fix FileNameBufOffset 2020-12-18 16:37:08 -08:00
Bill Zissimopoulos
7ed9c56005
Merge pull request #336 from alonsohki/fix-notify-interop-alignment
Fix an alignment problem in the FspFileSystemNotify interop
2020-12-18 15:45:48 -08:00
Bill Zissimopoulos
12fd8942f7
tst: notifyfs: root dir does not have dot entries 2020-12-18 15:19:47 -08:00
Bill Zissimopoulos
3eb1f48174
installer: add notifyfs file system 2020-12-17 15:26:57 -08:00
Bill Zissimopoulos
ac26bde9ee
tst: notifyfs: add file system to demo file notification mechanism 2020-12-17 15:20:02 -08:00
Alberto Alonso
6421dd92a9 Fix an alignment problem in the FspFileSystemNotify interop that would leave a buffer size not aligned to a multiple of 8, and make notify calls fail. 2020-12-02 13:18:42 +02:00
Bill Zissimopoulos
b05d5e286e
dotnet: rename NotifyInfoFilter and NotifyInfoAction 2020-11-27 10:37:22 -08:00
Bill Zissimopoulos
2d0df701e3
Merge pull request #335 from alonsohki/document-notifyinfo-fields
Document the NotifyInfo fields for the .NET interop layer.
2020-11-27 10:28:37 -08:00
Alberto Alonso
2f1a5b98e2 Update NotifyInfoAction and NotifyInfoFilter enum constants for more readability. 2020-11-26 15:00:03 +02:00
Alberto Alonso
21a636aaae Update Contributors.asciidoc 2020-11-24 20:07:31 +02:00
Alberto Alonso
3b90908e01 Document the NotifyInfo fields for the .NET interop layer. 2020-11-24 20:02:02 +02:00
Bill Zissimopoulos
90e86d4592
workflows: update AntiVirus monitor 2020-11-17 09:19:21 -08:00
Bill Zissimopoulos
b3058a5e3e
shared: minimal.h: STRTOINT 2020-11-06 09:41:49 -08:00
Bill Zissimopoulos
3bda3d754e
update changelog 2020-11-04 13:39:34 -08:00
Bill Zissimopoulos
8109b005be
dll: posix: trustPosixOffset 2020-11-03 14:04:27 -08:00
Bill Zissimopoulos
bd0d6638b0
dll: posix: trustPosixOffset 2020-11-03 12:31:13 -08:00
Bill Zissimopoulos
912703cd77
sys: FspBufferUserBuffer: special case Irp->UserBuffer kernel address 2020-10-30 15:39:56 -07:00
Bill Zissimopoulos
90bc12132e
changelog: WinFsp 2020.2 2020-10-30 15:09:17 -07:00
Bill Zissimopoulos
f1cf020272
dll: fuse: allow mount manager mountpoints 2020-10-29 15:28:14 -07:00
Bill Zissimopoulos
2f65a77d34
tst: winfsp-tests: notify_open_change_dotest 2020-10-29 14:16:54 -07:00
Bill Zissimopoulos
4578414a2c
tst: winfsp-tests: WINFSP_TESTS_EXCEPTION_FILTER_DISABLE 2020-10-29 14:16:53 -07:00
Bill Zissimopoulos
f0fd53e3f3
appveyor: user mode dumps 2020-10-29 14:16:51 -07:00
Bill Zissimopoulos
1cc42c9d70
tst: winfsp-tests: UnhandledExceptionFilter 2020-10-27 16:02:49 -07:00
Bill Zissimopoulos
28ac5a1cfe
tst: winfsp-tests: UnhandledExceptionFilter 2020-10-27 15:01:38 -07:00
Bill Zissimopoulos
e1b1284153
tst: winfsp-tests: UnhandledExceptionFilter 2020-10-27 12:38:54 -07:00
Bill Zissimopoulos
5014e8bd35
dotnet: file change notification support 2020-10-23 13:55:36 -07:00
Bill Zissimopoulos
1b7a78edff
inc: fuse: fuse_invalidate 2020-10-22 14:46:13 -07:00
Bill Zissimopoulos
6340811974
dll: fuse: fsp_fuse_notify: handle case-insensitive file systems 2020-10-21 15:45:07 -07:00
Bill Zissimopoulos
cd21d26b93
dll: fuse: fsp_fuse_notify
Correctly compute Windows change notification filter and action
from FUSE change notification action.
2020-10-19 18:17:05 -07:00
Bill Zissimopoulos
d5ab701e3c
tst: winfsp-tests: enable notify_dirnotify_test 2020-10-18 09:11:05 -07:00
Bill Zissimopoulos
8269f57282
tools: run-tests: winfsp-tests-x86-notify 2020-10-17 23:18:30 -07:00
Bill Zissimopoulos
e59a49992a
sys: FspFileNodeInvalidateCachesAndNotifyChangeByName: flush and purge only 2020-10-17 22:06:49 -07:00
Bill Zissimopoulos
10c8c440f9
tst: winfsp-tests: notify_dirnotify_test 2020-10-16 14:27:51 -07:00
Bill Zissimopoulos
f3375fc17f
tst: winfsp-tests: disable notify_open_change_test
This test currently causes leaks on appveyor, but not locally.
Disabling before future investigation.
2020-10-11 10:12:17 -07:00
Bill Zissimopoulos
c1e4b00aa7
tools: run-tests: notify tests 2020-10-10 18:24:32 -07:00
Bill Zissimopoulos
1bb0580a6a
tst: winfsp-tests: add --notify option 2020-10-10 14:30:14 -07:00
Bill Zissimopoulos
e54c2288f7
dll: fuse: fuse_notify 2020-10-10 10:15:36 -07:00
Bill Zissimopoulos
6b4b1dff6c
sys: notify implementation 2020-10-09 15:19:51 -07:00
Bill Zissimopoulos
92b7989999
tst: winfsp-tests: notify testing 2020-10-09 15:05:31 -07:00
Bill Zissimopoulos
f2e2d83b72
tst: winfsp-tests: notify testing 2020-10-09 14:45:14 -07:00
Bill Zissimopoulos
3687df53c6
sys: wait groups and notify implementation 2020-10-09 12:40:49 -07:00
Bill Zissimopoulos
a004e4be10
sys: notify implementation 2020-10-08 20:49:24 -07:00
Bill Zissimopoulos
88edf5723e
sys: notify implementation 2020-10-08 16:56:31 -07:00
Bill Zissimopoulos
7f360827f6
sys: notify implementation 2020-10-08 15:31:41 -07:00
Bill Zissimopoulos
01f91c771d
sys: notify implementation 2020-10-07 17:07:35 -07:00
Bill Zissimopoulos
844fb7171e
inc,dll,sys: notify implementation skeleton 2020-10-06 16:37:33 -07:00
Bill Zissimopoulos
489081b8c2
build: version: 2021 Beta1 2020-10-06 15:50:44 -07:00
Bill Zissimopoulos
c77690e59d
update changelog and version number 2020-10-01 17:13:43 -07:00
Bill Zissimopoulos
32a5b2bc64
tst: winfsp-tests: rename_backslash_test 2020-10-01 11:46:55 -07:00
Bill Zissimopoulos
5045403d85
sys: FspFsvolSetRenameInformation: tolerate trailing backslash on target name 2020-09-28 16:01:38 -07:00
Bill Zissimopoulos
13a52c4ab4
tools: parselog: parse winfsp logs 2020-08-26 18:30:30 -07:00
Bill Zissimopoulos
c18d4f1508
tools: parselog: parse winfsp logs 2020-08-26 16:01:14 -07:00
Bill Zissimopoulos
fcfebb968f
tools: parselog: parse winfsp logs 2020-08-26 14:52:53 -07:00
Bill Zissimopoulos
10053bc759
tst: memfs-fuse3: Makefile: fix build under Cygwin gcc 2020-08-20 16:03:46 -07:00
Bill Zissimopoulos
7985827c73
build: update version number 2020-08-08 10:13:31 -07:00
Bill Zissimopoulos
13146e4854
update Changelog 2020-08-08 10:09:00 -07:00
Bill Zissimopoulos
84e0744c28 sys: FspVolumeTransact: FSP_FSCTL_TRANSACT_INTERNAL
Zero out OutputBuffer on error to avoid confusion for fsext providers.
2020-07-29 22:51:17 -07:00
Bill Zissimopoulos
20e19cb0fc
update Changelog 2020-07-24 12:56:24 -07:00
Bill Zissimopoulos
2326521ef8
appveyor: disable cygfuse x86 build
This improves slow builds.
2020-07-22 15:45:04 -07:00
Bill Zissimopoulos
0296502f24
sys: FspFsvolReadNonCached: acquire FileNode shared
See GitHub issue #291 for discussion
2020-07-22 15:42:06 -07:00
Bill Zissimopoulos
5d0b10d0b6
Changelog: add missing changes for v1.7 2020-07-07 13:56:53 -07:00
Bill Zissimopoulos
5fac25d200
update Changelog 2020-07-04 15:43:34 -07:00
Bill Zissimopoulos
b82aeeadbd
tools: deploy.bat 2020-06-14 14:46:13 -07:00
Bill Zissimopoulos
dcaa24bc52
tools: deploy.bat, debug.bat 2020-06-09 18:09:56 -07:00
Bill Zissimopoulos
7e37fc57f9
doc: container support doc: fix version typo 2020-06-08 23:04:55 -07:00
Bill Zissimopoulos
8efe1f3a1f
doc: container support doc 2020-06-08 22:49:01 -07:00
Bill Zissimopoulos
aa3beba928
sys: silo support 2020-06-05 15:47:19 -07:00
Bill Zissimopoulos
899cd5595d
sys: FspIsNtDdiVersionAvailable 2020-06-01 23:11:33 -07:00
Bill Zissimopoulos
6bcbfd5380
tst: winfsp-tests: disable query_winfsp_tests over --external 2020-05-25 12:58:20 -07:00
Bill Zissimopoulos
a197b99960
tst: winfsp-tests: disable query_winfsp_tests over shares 2020-05-25 11:49:36 -07:00
Bill Zissimopoulos
2ffb8a1c97
sys: FSP_FSCTL_QUERY_WINFSP
The FSP_FSCTL_QUERY_WINFSP code provides a simple method to determine if
the file system backing a file is a WinFsp file system. To use issue a

    DeviceIoControl(Handle, FSP_FSCTL_QUERY_WINFSP, 0, 0, 0, 0, &Bytes, 0)

If the return value is TRUE this is a WinFsp file system.
2020-05-24 21:04:28 -07:00
Bill Zissimopoulos
fc18b70a00
tools: deploy: winfsp checkpoint 2020-05-24 00:18:57 -07:00
Bill Zissimopoulos
191c98bd41
tools: vcvarsall.bat: minor fix 2020-05-21 18:59:01 -07:00
Bill Zissimopoulos
5360f5ca6e
tools: vcvarsall.bat: minor fix 2020-05-21 18:05:21 -07:00
Bill Zissimopoulos
89aaf33b62 tools: deploy: hyper-v support 2020-05-22 01:33:02 +01:00
Bill Zissimopoulos
675ecf2e51 tools: switch default build to latest Visual Studio 2020-05-21 15:51:32 -07:00
Bill Zissimopoulos
b663cfdca5 tools: update ntstatus.bat, winerror.bat for latest SDK's 2020-05-21 15:23:21 -07:00
Bill Zissimopoulos
dcf83b6d64 build: version.properties bump version to 2020.2 Beta2 2020-05-21 15:09:37 -07:00
Bill Zissimopoulos
af52ac3df0 build: version.properties: update for version 2020.1 Gold 2020-05-21 15:05:22 -07:00
Bill Zissimopoulos
33cab186ca build: silence deprecation warnings for FSD 2020-05-19 00:22:45 -07:00
Bill Zissimopoulos
fd4c5326ed
update changelog 2020-04-25 12:43:29 -07:00
Bill Zissimopoulos
7c06ead34c
launcher: ignore bad Stderr setting 2020-04-25 12:32:20 -07:00
Bill Zissimopoulos
768b596a76
launcher: add %P variable (user profile directory) 2020-04-25 11:36:30 -07:00
Bill Zissimopoulos
26630ad7aa
build: use PDBALTPATH 2020-04-25 01:16:22 -07:00
Bill Zissimopoulos
01744e8193
launcher: Stderr registry setting
This commit adds a new Stderr registry setting that can be used to redirect
the standard error output of a launched service instance.
2020-04-25 00:48:40 -07:00
Bill Zissimopoulos
3eb115eb22
launcher: SvcInstanceCreate: refactor to use FspLaunchRegGetRecord 2020-04-24 17:49:29 -07:00
Bill Zissimopoulos
a0801674c4
launcher: SvcInstanceCreateProcess: fix checking wrong handle 2020-04-24 16:04:07 -07:00
Bill Zissimopoulos
98f809345d
doc: update known file system document 2020-04-21 13:38:53 -07:00
Bill Zissimopoulos
0268e51099
dll: launch: registry: support Recovery setting 2020-04-16 16:08:55 -07:00
Bill Zissimopoulos
924d1f9a3e
update changelog 2020-04-15 23:28:42 +01:00
Bill Zissimopoulos
dc3f73bd2f
Merge branch 'pvt-launcher' 2020-04-15 15:10:09 -07:00
Bill Zissimopoulos
e71aea8ad7
dll: fuse: ReadDirectory: log invalid directory entries 2020-04-15 15:07:01 -07:00
Bill Zissimopoulos
9066338220
dll: fuse: ReadDirectory: log invalid directory entries 2020-04-14 22:54:46 -07:00
Bill Zissimopoulos
ca12b5a19d
launcher: error recovery
Service instances can now be restarted when the registry setting `Recovery=1` is set.
2020-04-14 17:12:05 -07:00
Bill Zissimopoulos
94d8c0452f
launcher: eliminate TLS for ClientUserName 2020-04-13 22:31:45 -07:00
Bill Zissimopoulos
b4c39f656c
dll,fuse: allow dir buffer entry invalidation
The FUSE implementation of ReadDirectory issues readdir followed
by a slew of getattr. In the current implementation if a getattr fails
the whole readdir operation fails.

This commit adds the ability to invalidate individual entries in the
directory buffer. Entries for which getattr fails are now marked invalid
rather than fail the overall ReadDirectory operation.

See #292
2020-04-13 15:52:03 -07:00
Bill Zissimopoulos
42fd57904a
sys: FspFsvolReadNonCached: trim ReadLength
During CreateProcess/CreateSection Windows locks the image file (using AcquireFileForNtCreateSection),
gets the image file size and then reads the image file. Unfortunately if the file system (erroneously) reads
past the file size, Windows can bugcheck. This allows a faulty or malicious file system to crash Windows.

This commit adds a check in WinFsp to mitigate this problem.
2020-04-10 19:24:43 -07:00
Bill Zissimopoulos
9d69ae7503
doc: use markdown for API reference 2020-03-23 15:03:22 -07:00
Bill Zissimopoulos
f93cdbfa91
doc: update api reference 2020-03-21 17:35:04 -07:00
Bill Zissimopoulos
b7553925fb
appveyor: build cygfuse 2020-03-21 16:20:51 -07:00
Bill Zissimopoulos
4b5b562307
inc: winfsp_fuse.h: fix memset comment 2020-03-21 15:44:02 -07:00
Bill Zissimopoulos
ad68b36de7
README: internal link to cap.gif 2020-03-10 20:19:05 +02:00
Bill Zissimopoulos
0e8babf69c
appveyor: update location of IfsTest zip file 2020-03-10 20:00:14 +02:00
Bill Zissimopoulos
0e12212838
doc: Home 2020-03-10 19:34:32 +02:00
Bill Zissimopoulos
19b86972d8
doc: WinFsp-Debugging-Setup.asciidoc 2020-03-07 18:44:52 +02:00
Bill Zissimopoulos
403e234895
Merge pull request #288 from benrubson/cygwarn
Mute a GCC warning
2020-03-01 20:43:41 +02:00
benrubson
76ec0420d1 Mute a GCC warning
solves #287
2020-02-29 23:58:51 +01:00
Bill Zissimopoulos
2a6beb2739
workflows: add AntiVirus monitor 2020-02-22 15:08:53 +02:00
Bill Zissimopoulos
1933443e8d
appveyor: allow chocolatey prerelease installs 2020-02-17 08:53:38 +02:00
Bill Zissimopoulos
279b00e195
tools: build.bat: add choco prerelease support 2020-02-16 22:36:10 +02:00
Bill Zissimopoulos
9b6542ab80
update Changelog 2020-02-08 01:14:38 +00:00
Bill Zissimopoulos
dfbab387ab
build: version.properties: bump version to 2020.1 B2 2020-02-07 17:09:25 -08:00
Bill Zissimopoulos
10f4df519c
dotnet: RejectIrpPriorToTransact0 2020-02-07 17:07:50 -08:00
Bill Zissimopoulos
24b5d48fed
add shared/ku/config.h and related changes 2020-02-07 15:40:08 -08:00
Bill Zissimopoulos
0650cabc47
refactor: shared->shared/um, ku->shared/ku 2020-02-07 15:28:25 -08:00
Bill Zissimopoulos
71995a1fcd
dll,sys: FSP_CFG_REJECT_EARLY_IRP
Includes Avast fix for FUSE.
2020-02-07 15:11:24 -08:00
Bill Zissimopoulos
91c36b8f09
dll: FspFileSystemResolveReparsePointsInternal: fix warning 2020-02-07 14:54:09 -08:00
Bill Zissimopoulos
e3c19afb72
update Changelog for 2020.1 B1 2020-02-07 13:40:49 -08:00
Bill Zissimopoulos
799025e8c2
build: version.properties: fix version 2020-02-07 13:33:31 -08:00
Bill Zissimopoulos
896c00a08c
Merge branch 'pvt-reject-irp' 2020-02-07 13:29:19 -08:00
Bill Zissimopoulos
8497855d80
sys: FSP_DEVICE_REJECT_EARLY_IRP macro 2020-02-07 13:22:09 -08:00
Bill Zissimopoulos
52663ec676
dll: FspFileSystemResolveReparsePoints
Fix junction handling.
2020-02-04 15:37:17 -08:00
Bill Zissimopoulos
0901fb6477
inc,sys,tst: FSP_FSCTL_VOLUME_PARAMS::RejectIrpPriorToTransact0 2020-02-03 16:43:15 -08:00
Bill Zissimopoulos
bf6d56ceac
inc,sys,tst: FSP_FSCTL_VOLUME_PARAMS::RejectIrpPriorToTransact0 2020-02-03 16:38:55 -08:00
Bill Zissimopoulos
51350d5a42
inc,sys,tst: FSP_FSCTL_VOLUME_PARAMS::RejectIrpPriorToTransact 2020-02-03 14:59:23 -08:00
Bill Zissimopoulos
9e32fed598
tools: build-choco.bat 2020-01-28 19:47:14 -08:00
Bill Zissimopoulos
8301642e6b
build: bump version to 1.7 2020-01-28 17:44:13 -08:00
Bill Zissimopoulos
0002655782
build: update version: 2020 2020-01-27 14:26:45 -08:00
Bill Zissimopoulos
e0e8d74d01
update changelog 2020-01-27 14:25:12 -08:00
Bill Zissimopoulos
e608920679
Merge pull request #272 from pfrejo/hotfix-1.5
Fixed data corruption when overwriting a file on a Fuse v3 filesystem
2020-01-27 14:14:35 -08:00
Pedro Frejo
dbfbcb547d Fixed data corruption when overwriting a file on a Fuse v3 filesystem
When a file of size "s" is overwritten, forcing "O_APPEND" flag
makes the server file offset to be placed "s" bytes in advance.
This caused subsequent write operations to be paded by "s" zeroes,
thus corrupting the file.
2020-01-23 21:31:56 +01:00
Bill Zissimopoulos
b3dfea8303
tools: fix-source-copyright: fix botched script 2020-01-22 14:35:24 -08:00
Bill Zissimopoulos
3ab0e5a3d3
doc: add kernel mode file systems document 2020-01-16 17:04:23 -08:00
Bill Zissimopoulos
d687ef3a67
update Changelog (PR #270) 2020-01-15 13:39:59 -08:00
Bill Zissimopoulos
6df5ff980f
Merge branch 'hammerg-track_dir_check' 2020-01-15 13:27:19 -08:00
Bill Zissimopoulos
14ac0f8db9
dll: FspFileSystemOpCreate_FileOpenTargetDirectory 2020-01-15 13:26:29 -08:00
Gal Hammer
ac306c2ce1 dll: open as directory when file's parent directory should be opened. 2020-01-05 09:09:05 +02:00
Bill Zissimopoulos
aedf01a384
update source copyright for 2020 2020-01-02 17:50:40 -08:00
Bill Zissimopoulos
0ce8b1c254
build: bump version to 2020.1 B1 2020-01-02 17:46:13 -08:00
Bill Zissimopoulos
4e0690e65f
update Changelog for v1.5 2019-12-31 16:56:59 -08:00
Bill Zissimopoulos
e7b81e4bac
build: bump version to 2019.3 GOLD 2019-12-31 16:55:35 -08:00
Bill Zissimopoulos
9dc774d306 tst: winfsp-tests: ResilientRemoveDirectoryW 2019-12-16 23:07:04 -08:00
Bill Zissimopoulos
26fe1a741b sys: FspPropagateTopFlags: propagate union of flags from top level IRP 2019-12-13 16:42:49 -08:00
Bill Zissimopoulos
efdb6d1c86 build: bump version to 2019.3 B5 2019-12-09 14:36:08 -08:00
Bill Zissimopoulos
b18df6bba8 sys: release rename lock when doing oplock breaks 2019-12-08 14:27:02 -08:00
Bill Zissimopoulos
39aad2b4fa ku: posix: improve kernel mode support 2019-11-18 22:22:32 -08:00
Bill Zissimopoulos
ab1e024965
tools: build.bat: fix winfsp-tests zip file build 2019-11-16 16:05:40 -08:00
Bill Zissimopoulos
5a67c47d0f
update changelog 2019-11-16 14:54:10 -08:00
Bill Zissimopoulos
39c189aff7
sys: fsext: FspFsextProviderTransact 2019-11-16 14:02:44 -08:00
Bill Zissimopoulos
3d9fc467ef
tools: build.bat: winfsp-tests zip file 2019-11-16 07:26:07 +00:00
Bill Zissimopoulos
23b5c67913 shared: minimal.h: eliminate warning on VS2015 builds 2019-11-07 16:08:41 -08:00
Bill Zissimopoulos
4b5478e50c
sys: dirctl: support directory marker as FUSE style next offset 2019-11-05 22:14:16 -08:00
Bill Zissimopoulos
c7fc728ad0
build: bump version 2019-11-04 19:26:45 -08:00
Bill Zissimopoulos
254174b8e9
sys: avoid using FspFsextProvider unnecessarily 2019-11-04 16:30:30 -08:00
Bill Zissimopoulos
5110b3c5a1
sys: dirctl: support directory marker as FUSE style next offset 2019-10-30 16:40:48 -07:00
Bill Zissimopoulos
847eab3da4
tst: memfs-fuse3: #if0 ioctl 2019-10-21 20:21:36 -07:00
Bill Zissimopoulos
5131ed5c01
Merge branch 'bdutro-o_append-fix' 2019-10-21 20:14:02 -07:00
Brett Dutro
b513128cfe In Windows, Go clears any write-related flags when O_APPEND is
specified. This causes WinFSP to think that any O_APPEND requests are
actually read-only. This adds an additional check for the
FILE_APPEND_DATA flag so that we can ensure the request is sent with at
least O_WRONLY and O_APPEND set.
2019-10-21 18:04:26 -05:00
Bill Zissimopoulos
3fe69f2208
installer: add fsext development files 2019-10-18 16:23:27 -07:00
Bill Zissimopoulos
29fd9bf779
sys: fsext: allow multiple providers (up to 4) 2019-10-18 16:00:31 -07:00
Bill Zissimopoulos
3c391ca711
build: bump version to 2019.3 B3 2019-10-16 12:18:24 -07:00
Bill Zissimopoulos
82a8545d8f
tst: memfs-fuse3: fix narrow conversion on x86 builds 2019-10-09 14:42:39 -07:00
Bill Zissimopoulos
79be3e445a
tst: memfs-fuse3: accurately compute current time 2019-10-09 11:39:41 -07:00
Bill Zissimopoulos
b04266e0fe
tools: run-tests: add memfs-fuse3 testing 2019-10-08 04:35:28 +01:00
Bill Zissimopoulos
25adfaec00
update Changelog 2019-10-08 04:30:30 +01:00
Bill Zissimopoulos
ce20747534
tst: memfs-fuse3: testing 2019-10-07 18:32:25 -07:00
Bill Zissimopoulos
d3d75bf977
tst: add memfs-fuse3 file system 2019-10-07 14:24:18 -07:00
Bill Zissimopoulos
6f1f1cda71
update Changelog 2019-10-07 22:17:07 +01:00
Bill Zissimopoulos
21dfeca124
update Changelog 2019-10-07 22:15:29 +01:00
Bill Zissimopoulos
6f585ce63e
Merge pull request #251 from johntyner/feature/remove-fuse-prefix
Remove "FUSE-" prefix from file system name when using FUSE API
2019-10-07 14:05:18 -07:00
John Tyner
8f90305726 add support for setting file system name without 'FUSE-' prefix 2019-10-07 07:05:01 -07:00
John Tyner
490d0577bb Revert "Remove 'FUSE-' prefix from file system name when using fuse interface"
This reverts commit 7d2ff3afeb768b610867861489152e0c31ade16d.
2019-10-07 06:47:02 -07:00
John Tyner
c9d3cb74c7 add John Tyner to contributors 2019-09-25 16:20:50 -07:00
John Tyner
7d2ff3afeb Remove 'FUSE-' prefix from file system name when using fuse interface 2019-09-24 20:04:29 -07:00
Bill Zissimopoulos
c415c87195
dll: FspMountSet, FspMountRemove 2019-09-24 15:34:01 -07:00
Bill Zissimopoulos
d161ca59a7
update Changelog 2019-09-12 05:36:19 +01:00
Bill Zissimopoulos
bc03af3b2a
doc: update FAQ, Known File Systems 2019-09-12 04:54:40 +01:00
Bill Zissimopoulos
ed1543665c
Merge pull request #248 from JohnOberschelp/master
Airfs cleanup after persistence review
2019-09-10 22:32:58 -07:00
John Oberschelp
a99fa512d4
Fixed issues noted at the PR review 2019-09-10 16:00:34 -07:00
John Oberschelp
a6800dd73d
Fixed issues noted at the PR review 2019-09-10 15:59:48 -07:00
John Oberschelp
aa9354773b
Fixed issues noted at the PR review 2019-09-10 15:58:35 -07:00
Bill Zissimopoulos
05b37c744b
sys,dll: only user mode sends MountManager IOCTL's
(except for cleanup in FspMountdevFini)
2019-09-08 17:45:00 -07:00
Bill Zissimopoulos
1d15c9546b
Merge branch 'pvt-sqlfix2' 2019-09-08 11:05:17 -07:00
Bill Zissimopoulos
51b33f02aa
Merge pull request #241 from JohnOberschelp/master
Add persistence to Airfs
2019-09-07 17:40:42 -07:00
Bill Zissimopoulos
97ffa741b2
tst: volpath-test: fix silly mistake 2019-09-07 11:56:34 -07:00
Bill Zissimopoulos
073645db3b
tst: fix tests broken by new mountmgr func 2019-09-07 11:39:06 -07:00
Bill Zissimopoulos
fd9ac1c9e0
appveyor: WDK 1903 hackfix 2019-09-06 20:56:37 -07:00
Bill Zissimopoulos
62b08c3d1e
appveyor: WDK 1903 hackfix 2019-09-07 04:54:39 +01:00
Bill Zissimopoulos
9436fd8402
sys: implement SectorSize queries
- IRP_MJ_QUERY_VOLUME_INFORMATION/FileFsSectorSizeInformation
- IOCTL_STORAGE_QUERY_PROPERTY/StorageAccessAlignmentProperty
2019-09-06 20:52:15 -07:00
Bill Zissimopoulos
de75454d50
sys: FspFsvolDeviceControl: disable mountdev handling on fsvol devices 2019-09-06 15:43:20 -07:00
Bill Zissimopoulos
430d7a5650
sys: FspMountdevMake: use non-repeatable (i.e. non UUIDv5) GUID when non-persistent mountdev 2019-09-06 14:34:33 -07:00
Bill Zissimopoulos
4655926d03
sys, dll: mount manager support 2019-09-06 14:24:00 -07:00
Bill Zissimopoulos
565caebe4c
sys,dll: FspFileSystemSetMountPoint: mount manager support 2019-09-05 19:58:14 -07:00
Bill Zissimopoulos
a47f853beb
sys: mountdev: mount manager support 2019-09-05 09:54:36 -07:00
Bill Zissimopoulos
89ec3e6733
ku: UUID v5 generation 2019-09-04 13:45:53 -07:00
Bill Zissimopoulos
dbdfaeee1f
tst: winfsp-tests: GetVolumePathName testing 2019-08-23 16:00:35 +01:00
John Oberschelp
2c64d59001
Add common.h & persistence.cpp for Airfs to Product.wxs 2019-08-09 15:58:12 -07:00
John Oberschelp
af8c74378e
appveyor: hack to make WDK 1903 work on VS2015 2019-08-07 22:53:21 -07:00
John Oberschelp
19c320350f
Add persistence.cpp and common.h 2019-08-03 17:55:29 -07:00
John Oberschelp
d60b1de430
Add persistence.cpp and common.h 2019-08-03 17:54:26 -07:00
John Oberschelp
6a7b6c77c6
Create common.h 2019-08-03 12:22:57 -07:00
John Oberschelp
16b1b2b349
Create persistence.cpp
Create persistence.cpp to supply functionality needed for volume persistence within a memory-mapped file:
    memory management
    sorted sets
    offsets that don’t use a pointer
2019-08-03 12:19:56 -07:00
John Oberschelp
f181593f49
Add persistence to Airfs
Adds persistence to Airfs; stores the volume in a file.
The interface has changed slightly. Pass...
-N VolumeName ( for example C:\Users\foo\Desktop\test.air )
-n MapName    ( for example Local\Airfs )
... in place of the no longer used...
-n MaxFileNodes
2019-08-03 11:52:47 -07:00
Bill Zissimopoulos
d2f42f4918 update Changelog 2019-07-11 03:17:33 -07:00
Bill Zissimopoulos
a73f1b9559 launcher: path transform language 2019-07-09 13:26:07 -07:00
Bill Zissimopoulos
fb6893968a dll: fuse: add --UserName and --GroupName 2019-07-08 15:12:26 -07:00
Bill Zissimopoulos
c97f2cb660 dotnet: add MountEx and fine-grained timeouts 2019-07-07 12:12:04 -07:00
Bill Zissimopoulos
3a12d928e5 dll: fuse: avoid calling fgetattr on directories 2019-07-01 00:00:37 -07:00
Bill Zissimopoulos
8fa337ae54 sys: fix issues found by static analyzer 2019-06-28 16:19:58 -07:00
Bill Zissimopoulos
7f084787e3 sys: fix issues found by static analyzer 2019-06-28 15:21:36 -07:00
Bill Zissimopoulos
369c0256f3 build: version.properties: update company name 2019-06-25 17:11:01 -07:00
Bill Zissimopoulos
f25983853b tools: build.bat: update cert subject 2019-06-25 17:09:34 -07:00
Bill Zissimopoulos
757e23ded6 ku: kernel-mode testing and fixes 2019-06-24 16:14:03 -07:00
Bill Zissimopoulos
ebb9b8b799 sys: FspVolumeTransact: remove erroneous ASSERT 2019-06-23 11:07:01 -07:00
Bill Zissimopoulos
804bcc3354 sys: FspVolumeTransactFsext:
- only allow ControlCodes with 0xC00 bits set in Function
2019-06-22 15:40:48 -07:00
Bill Zissimopoulos
f5fde4c0bb sys: FspVolumeTransactFsext 2019-06-22 15:18:16 -07:00
Bill Zissimopoulos
dcf7e4c5a6 sys: fsext: FsextProvider testing 2019-06-22 14:30:23 -07:00
Bill Zissimopoulos
adc759447e sys: FspVolumeCreate: fix missing return 2019-06-21 16:37:07 -07:00
Bill Zissimopoulos
f0d7e5b322
Merge pull request #237 from dworkin/feature/async-dotnet
Async I/O for dotnet
2019-06-21 14:48:30 -07:00
Felix A. Croes
bfd8dca62d Delay unmounting until all Slowio tasks are done.
Preventing a crash when unmounting a filesystem with pending Slowio.
2019-06-20 15:49:02 +02:00
Bill Zissimopoulos
79b2f38d87 update README 2019-06-18 21:52:19 -07:00
Bill Zissimopoulos
4ae03629f7 sys: FspFsextProvider: load provider driver 2019-06-18 20:28:59 -07:00
Bill Zissimopoulos
f4496786e5 src: ku: posix.c
- src/ku directory contains shared kernel/user mode code
2019-06-18 16:49:20 -07:00
Bill Zissimopoulos
b637a72ec8 sys: FspFsextProvider 2019-06-18 16:11:38 -07:00
Bill Zissimopoulos
2cd1bddafb sys: FspFsextProvider 2019-06-14 21:22:01 -07:00
Bill Zissimopoulos
6b83748d89 sys: fsext: WIP 2019-06-14 20:53:09 -07:00
Bill Zissimopoulos
ed31a187ac opt/fsext: kernel mode winfsp extension 2019-06-14 18:34:19 -07:00
Bill Zissimopoulos
781deff06f sys: default TransactTimeout changes 2019-06-11 17:53:34 -07:00
Bill Zissimopoulos
3902874ac9 dll: FspFileSystemStartDispatcher
Change default number of threads when ThreadCount==0 is passed.
New min DEFAULT number of threads is 4 and new max DEFAULT number of threads is 16.
The absolute minimum number of threads that any file system dispatcher has remains 2.
2019-06-11 11:51:20 -07:00
Bill Zissimopoulos
8ad77fe62f shared: minimal.h: fix memmove issue in VS 2019 2019-06-06 15:10:25 -07:00
Bill Zissimopoulos
f78b3464ce sys: meta: fix rare memory leak 2019-06-05 20:43:12 -07:00
Felix A. Croes
02fd6906c2 Revert making SeekableReadDirectory virtual.
This would be an API-breaking change that is actually pointless.
Override ReadDirectory instead, as intended.
2019-06-05 09:24:27 +02:00
Felix A. Croes
ce436fc29a Attempt to add a slowio test for memfs-dotnet. 2019-06-04 17:10:33 +02:00
Felix A. Croes
879fa2464f Add asynchronous I/O testing to memfs-dotnet.
Make SeekableReadDirectory virtual, so that it can be overridden.
2019-06-04 15:58:54 +02:00
Felix A. Croes
af7e5432a7 Let the Status argument be a signed integer.
The constants are defined as negative numbers, which would have required
a cast to unsigned for each call.
2019-05-15 14:09:08 +02:00
Felix A. Croes
1d619e0874 Use pointers instead of references.
To avoid copying structs needlessly.
2019-05-14 11:38:55 +02:00
Felix A. Croes
290896b010 Add asyncronous support for dotnet. 2019-05-13 09:47:59 +02:00
Bill Zissimopoulos
c01402443d wslinux support: ATOMIC_CREATE_ECP_CONTEXT 2019-04-27 15:30:57 -07:00
Bill Zissimopoulos
195f3bf92d build: VS2015 - VS2019 round-tripping: LatestTargetPlatformVersion 2019-04-26 09:44:30 -07:00
Bill Zissimopoulos
ae86aeb633 README: WinFsp now builds with VS2015 - VS2019 2019-04-25 17:43:14 -07:00
Bill Zissimopoulos
369da895d3 build: VS2015 - VS2019 round-tripping 2019-04-25 16:43:53 -07:00
Bill Zissimopoulos
17adae481c sys: FspFileNodeOplockCheckAsyncEx: fix stupid mistake in DEBUGTEST code 2019-04-18 23:47:27 -07:00
Bill Zissimopoulos
db34b8c913 update changelog 2019-04-18 20:45:56 -07:00
Bill Zissimopoulos
f6212be687
README: minor fix 2019-04-18 20:38:35 -07:00
Bill Zissimopoulos
7af36d8f78 Merge branch 'master' of https://github.com/billziss-gh/winfsp 2019-04-18 17:46:51 -07:00
Bill Zissimopoulos
f6e49a11c8 .gitignore: add .vs rule 2019-04-18 17:45:11 -07:00
Bill Zissimopoulos
01ca9cef35
README: add info on VS2015 + latest WDK problem 2019-04-18 17:34:02 -07:00
Bill Zissimopoulos
7cb29a4db3 sys: remove unused variables 2019-04-18 17:22:58 -07:00
Bill Zissimopoulos
5523320348 build: fix stampinf cmdline for latest WDK 2019-04-18 17:21:06 -07:00
Bill Zissimopoulos
969651f5f6 sys: improve support for FileStatLxInformation 2019-04-18 15:57:22 -07:00
Bill Zissimopoulos
a08fdccb17 sys: FspSendQueryEaIrp: fix EA related BSOD 2019-04-17 16:04:44 -07:00
Bill Zissimopoulos
859d4250c3 tst: winfsp-tests: wsl: fix WOW64 failure 2019-04-17 15:04:53 -07:00
Bill Zissimopoulos
c6b7b7586e sys: ea: buffers from user mode fs can have zero length 2019-04-17 14:40:06 -07:00
Bill Zissimopoulos
6406246ce2 tools: deploy: fix driver path 2019-04-17 14:39:16 -07:00
Bill Zissimopoulos
9d8ff57be7 Merge branch 'master' into pvt-wsl 2019-04-17 11:28:06 -07:00
Bill Zissimopoulos
2b0d204ff1 sys: FileStatInformation is missing on old WDK's 2019-04-16 21:28:09 -07:00
Bill Zissimopoulos
851d0758d9 sys: define FSP_FILE_STAT*_INFORMATION that are missing on some WDK's 2019-04-16 15:55:13 -07:00
Bill Zissimopoulos
4f444b412e dll: fuse: create_file_mask, create_dir_mask options 2019-04-16 15:16:54 -07:00
Bill Zissimopoulos
e9578b48ce update Changelog 2019-04-16 12:15:32 -07:00
Bill Zissimopoulos
3c3163c41b dll; fuse: rename dot_hidden option to dothidden 2019-04-16 12:11:43 -07:00
Bill Zissimopoulos
8beb534340 dll: fuse: dot_hidden option adds hidden file attribute on dot files 2019-04-15 16:30:00 -07:00
Bill Zissimopoulos
9dcc04f882 tools: update deploy/debug scripts 2019-04-15 15:34:35 -07:00
Bill Zissimopoulos
ce83619728 sys: FileStatLxInformation and friends 2019-04-15 15:04:31 -07:00
Bill Zissimopoulos
04b3675f12 update .gitignore files 2019-04-03 22:39:25 -07:00
Bill Zissimopoulos
6a23f28249 build: bump version number 2019-04-03 22:39:03 -07:00
Bill Zissimopoulos
351b4f5294 sys: fileinfo: fix unnecessary STATUS_BUFFER_TOO_SMALL 2019-04-03 09:52:00 -07:00
Bill Zissimopoulos
ee1ae0370e
build: version.properties: fix product version 2019-03-29 16:38:14 -07:00
Bill Zissimopoulos
1ebceb8214
installer: fix refs to cygfuse 2019-03-29 13:38:19 -07:00
Bill Zissimopoulos
e6bb463444
cygfuse: update packages 2019-03-29 13:03:51 -07:00
Bill Zissimopoulos
86231de113
update changelog 2019-03-29 12:46:13 -07:00
Bill Zissimopoulos
a2cc564400
dll: posix: update upper limit on UID 2019-03-29 12:06:36 -07:00
Bill Zissimopoulos
5239c63274
Contributors: sort names 2019-03-29 11:50:34 -07:00
Bill Zissimopoulos
2d46387faa
Merge pull request #223 from sganis/master
Fixed invalid Sid bug
2019-03-29 11:47:51 -07:00
Bill Zissimopoulos
d2381f3425
tst: passthrough-fuse3: xattr 2019-03-26 17:36:02 -07:00
Bill Zissimopoulos
4e7d2fd204
tst: passthrough-fuse: xattr 2019-03-26 17:25:46 -07:00
San
e6fb014c79 Updated contributors list 2019-03-23 02:57:25 +03:00
Bill Zissimopoulos
574efe3f72
sys: dirctl: add magic constant 4 to EaSize 2019-03-21 21:50:28 -07:00
Bill Zissimopoulos
88896c2fd8
dotnet: interop: FileInfo.EaSize is now a property 2019-03-21 21:42:27 -07:00
Bill Zissimopoulos
46210b0c48
tst: passthrough-dotnet: fix compilation problem 2019-03-21 19:48:06 -07:00
Bill Zissimopoulos
3d646bdf88
tools: run-tests: enable ifstest EA tests 2019-03-21 18:19:01 -07:00
Bill Zissimopoulos
732e6cc38c
grand EaSize patch; passes winfsp-tests and ifstest 2019-03-21 18:14:15 -07:00
Bill Zissimopoulos
b619dbfe97
tst: memfs, memfs-dotnet: EaSize support 2019-03-21 15:05:39 -07:00
Bill Zissimopoulos
948254f083
dotnet: EA support 2019-03-21 15:05:14 -07:00
Bill Zissimopoulos
62b0e889b2
sys: FileEaInformation and EaSize support 2019-03-21 14:05:17 -07:00
Bill Zissimopoulos
8c0957f702
tools: run-tests: EA testing 2019-03-20 19:42:45 -07:00
Bill Zissimopoulos
0dbc3f9f25
tools: run-tests 2019-03-20 19:13:54 -07:00
Bill Zissimopoulos
2d0c8e14be
sys: FspEaBufferFromOriginatingProcessValidate, FspEaBufferFromFileSystemValidate 2019-03-20 19:06:24 -07:00
Bill Zissimopoulos
8c6d037332
dll: fuse: extended attributes support 2019-03-20 14:32:00 -07:00
Bill Zissimopoulos
c23aabe533
sys: ea: return STATUS_INVALID_DEVICE_REQUEST if no ExtendedAttributes 2019-03-20 13:08:20 -07:00
San
6e2b509697 Fixed invalid Sid bug 2019-03-20 09:54:01 +03:00
Bill Zissimopoulos
d2b6c4691e
sys: create: minor fix 2019-03-19 18:36:52 -07:00
Bill Zissimopoulos
ff6421866d
Merge branch 'pvt-xattr' 2019-03-19 18:23:47 -07:00
Bill Zissimopoulos
0664b492c8
inc: fsctl: fix FSP_FSCTL_VOLUME_PARAMS sizes 2019-03-19 16:29:08 -07:00
Bill Zissimopoulos
58fa2a0620
appveyor: troubleshoot 2019-03-19 16:09:57 -07:00
Bill Zissimopoulos
e6d1de1cad
appveyor: troubleshoot 2019-03-19 15:35:53 -07:00
Bill Zissimopoulos
37bcfc888a
tst: memfs-dotnet: testing EA support 2019-03-19 15:27:43 -07:00
Bill Zissimopoulos
ff94a63c37
tst: winfsp-tests: Overwrite: EA support 2019-03-19 14:21:25 -07:00
Bill Zissimopoulos
a830de9d04
sys: create: overwrite EA support 2019-03-19 13:22:35 -07:00
Bill Zissimopoulos
02a650f8d0
sys: ea: return STATUS_EA_CORRUPT_ERROR when appropriate 2019-03-19 11:15:14 -07:00
Bill Zissimopoulos
5c42377c1b
tst: memfs-dotnet: ea support 2019-03-18 18:43:18 -07:00
Bill Zissimopoulos
ad612c535d
tst: memfs-dotnet: ea support 2019-03-18 13:51:58 -07:00
Bill Zissimopoulos
4d4bf92c32
tst: memfs: cosmetic change 2019-03-17 17:17:30 -07:00
Bill Zissimopoulos
7ee289fb13
tst: winfsp-tests: ea 2019-03-17 13:25:29 -07:00
Bill Zissimopoulos
c6e1b15b37
tst: winfsp-tests: ea 2019-03-17 13:13:12 -07:00
Bill Zissimopoulos
1dfbb0d9bf
tst: winfsp-tests: ea 2019-03-17 13:08:12 -07:00
Bill Zissimopoulos
92dfb0be96
tst: winfsp-tests: ea 2019-03-17 12:39:00 -07:00
Bill Zissimopoulos
41c3465f2a
tst: winfsp-tests: ea 2019-03-17 12:21:32 -07:00
Bill Zissimopoulos
9e5d75fadc
sys: util: FspEaBufferAndNamesValid 2019-03-16 13:58:09 -07:00
Bill Zissimopoulos
91568edc45
sys: ea: testing 2019-03-16 00:04:00 -07:00
Bill Zissimopoulos
67bd49d5d4
tst: winfsp-tests: ea_getset_test 2019-03-15 16:43:54 -07:00
Bill Zissimopoulos
cdb1ca22fc
tst: winfsp-tests: ea_getset_test 2019-03-15 15:29:37 -07:00
Bill Zissimopoulos
ef6df51b5e
tst: winfsp-tests: ea_create_test 2019-03-15 14:21:17 -07:00
Bill Zissimopoulos
1aa2353ca6
tst: winfsp-tests: ea_create_test 2019-03-15 14:04:03 -07:00
Bill Zissimopoulos
351285f5c6
tst: winfsp-tests: ea_create_test 2019-03-15 13:44:45 -07:00
Bill Zissimopoulos
c4ef64e31f
tst: winfsp-tests: ea_create_test 2019-03-15 12:47:36 -07:00
Bill Zissimopoulos
5aa06358fc
tst: winfsp-tests: ea_create_test 2019-03-15 12:43:14 -07:00
Bill Zissimopoulos
9fd491fa3d
sys, dll: ea testing 2019-03-15 11:21:11 -07:00
Bill Zissimopoulos
d3efdd9219
dll, sys: FSP_NEXT_EA 2019-03-14 22:04:31 -07:00
Bill Zissimopoulos
d59976bd5d
tst: winfsp-tests: ea_create_test 2019-03-14 21:36:29 -07:00
Bill Zissimopoulos
3553aec992
dotnet: extended attributes support 2019-03-14 15:05:17 -07:00
Bill Zissimopoulos
795caec679
tst: memfs: VolumeParams.ExtendedAttributes 2019-03-13 21:59:27 -07:00
Bill Zissimopoulos
3dd8ae24a8
sys: FspFsvolSetEa: check EaName validity 2019-03-13 21:45:09 -07:00
Bill Zissimopoulos
d8686a7726
tst: memfs: extended attributes support 2019-03-13 21:44:10 -07:00
Bill Zissimopoulos
58c6708123
tools: cloc.bat wraps cloc 2019-03-13 15:15:07 -07:00
Bill Zissimopoulos
b2912460e0
tools: cloc.bat wraps cloc 2019-03-13 15:04:39 -07:00
Bill Zissimopoulos
a811cd2cf8
sys, dll: extended attributes: checkpoint 2019-03-13 14:29:49 -07:00
Bill Zissimopoulos
7ec47f8125
Update README 2019-03-11 17:12:44 -07:00
Bill Zissimopoulos
778f5f70dc
build: remove anycpu configuration 2019-03-11 14:06:29 -07:00
Bill Zissimopoulos
09d9928195
README: add link to WinSpd 2019-03-11 13:08:50 -07:00
Bill Zissimopoulos
e2349fef10
Merge branch 'pvt-fix217' 2019-03-11 13:03:49 -07:00
Bill Zissimopoulos
ad866631b6
Merge pull request #219 from dworkin/read-4g-corruption
Fix read corruption issue.
2019-03-11 13:01:44 -07:00
Felix A. Croes
4cdc8b4d9c Update contributor's agreement. 2019-03-07 09:57:49 +01:00
Felix A. Croes
b350dffe6c Fix 32 bit overflow issue in FspFsvolReadCached.
FspFsvolReadCached takes care not to read beyond the end of the file.
However, the offset check uses a 32 bit comparison, which fails for
files >= 4G.  As a result, reads on a large file will skip blocks at
offset (filesize % 4G), and those blocks will zero-filled.
2019-03-07 09:45:42 +01:00
Bill Zissimopoulos
70dd54e114
sys: write: FspFsvolWriteCached
- double-check that WriteEndOffset is within file bounds
2019-02-28 11:00:47 -08:00
Bill Zissimopoulos
d2de5e996c
update source copyright for 2019 2019-02-28 10:39:31 -08:00
Bill Zissimopoulos
85cdb37f10
bump version to v1.5 2019-02-28 10:30:52 -08:00
Bill Zissimopoulos
c2553e3451
Merge pull request #216 from VidaID/cpp-flushpurge
Make FlushAndPurgeOnCleanup accessible in C++
2019-02-25 14:07:48 -08:00
Colin Atkinson
9cd2f6972b Set FlushAndPurgeOnCleanup in the C++ passthrough 2019-02-25 14:25:56 -05:00
Colin Atkinson
791a2162a3 fix: Make FlushAndPurgeOnCleanup accessible in C++
Adds the appropriate setters and getters to the C++ API.
2019-02-22 11:14:48 -05:00
Bill Zissimopoulos
5d8686b64e
Merge branch 'release/1.4' 2019-02-19 12:17:01 -08:00
Bill Zissimopoulos
41f80d9c24
update changelog 2019-02-19 12:02:11 -08:00
Fritz Elfert
b69ed7e2f0
Fix #213 and a typo in macro FSP_FUSE_CTLCODE_FROM_IOCTL 2019-02-18 12:25:34 -08:00
Bill Zissimopoulos
f214561832
update changelog 2019-02-18 12:23:56 -08:00
Bill Zissimopoulos
35c06fe0ba
bump version to 2019.2 Gold 2019-02-18 12:20:40 -08:00
Bill Zissimopoulos
d1c15b43ca
Merge pull request #214 from felfert/fix-fuse-ioctl
Fix #213 and a typo in macro FSP_FUSE_CTLCODE_FROM_IOCTL
2019-02-12 10:29:55 -08:00
Fritz Elfert
f97b8fcc3a Fix #213 and a typo in macro FSP_FUSE_CTLCODE_FROM_IOCTL 2019-02-12 11:51:07 +01:00
Bill Zissimopoulos
1d701a3560
Merge branch 'release/1.4' 2018-12-10 10:06:36 -08:00
Bill Zissimopoulos
0eb84d68e2
update changelog 2018-12-10 10:06:17 -08:00
Bill Zissimopoulos
750e424ac3
bump version to 2019.1 Gold 2018-12-10 10:05:58 -08:00
Bill Zissimopoulos
58162a8d78
update changelog 2018-12-10 10:03:00 -08:00
Bill Zissimopoulos
d2f6ceaf28
Merge branch 'release/1.4' 2018-12-10 09:36:03 -08:00
Bill Zissimopoulos
b323925d94
update changelog 2018-12-10 09:34:17 -08:00
Bill Zissimopoulos
ab6e07853c
Merge branch 'release/1.4' 2018-12-08 13:56:50 -08:00
Bill Zissimopoulos
3206e3dd15
change version to 2018.2 B4 2018-12-03 13:31:34 -08:00
Bill Zissimopoulos
0f185587c9
dll: np: implement custom Credential Provider logic 2018-11-29 21:05:57 -08:00
Bill Zissimopoulos
e0a6312387
Merge branch 'release/1.4' 2018-11-27 16:27:15 -08:00
Bill Zissimopoulos
5d2705f3f9
Merge branch 'release/1.4' 2018-11-26 14:59:38 -08:00
Bill Zissimopoulos
3119922708
np, launcher: allow RunAs=. registry setting 2018-11-26 13:29:34 -08:00
Bill Zissimopoulos
5d90c35e20
sys: FspFsvrtDeviceControl: STATUS_UNRECOGNIZED_VOLUME
This fixes GitHub issue #177. All credit for the investigation and
suggested workaround goes to @thinkport.
2018-11-21 15:32:25 -08:00
Bill Zissimopoulos
a910385cb1
dll: ensure FspFileSystemFinalize is called 2018-11-21 13:46:50 -08:00
Bill Zissimopoulos
618a59fc0e
dll: ensure FspFileSystemFinalize is called 2018-11-13 10:11:39 -08:00
Bill Zissimopoulos
fcd3aff811
Merge branch 'release/1.4': fix #190 2018-11-06 10:12:45 -08:00
Bill Zissimopoulos
17d687fe7e
tools: run-tests: disable create_readonlydir_test on compat FUSE tests (no FileAttributes) 2018-11-05 14:14:21 -08:00
Bill Zissimopoulos
4deb7b96a9
tools: run-tests: disable create_readonlydir_test on FUSE3 (no FileAttributes) 2018-11-05 12:39:55 -08:00
Bill Zissimopoulos
36ba4ff402
dll: FspAccessCheckEx: fix #190: add test 2018-11-05 11:08:47 -08:00
Bill Zissimopoulos
55955b8514
dll: FspAccessCheckEx: fix #190: add test 2018-11-05 10:45:11 -08:00
Bill Zissimopoulos
1bebbcf634
dll: FspAccessCheckEx: fix #190 2018-10-19 21:53:44 -07:00
Bill Zissimopoulos
a292cd4d73
dll: FspAccessCheckEx: fix #190 2018-10-19 21:41:52 -07:00
Bill Zissimopoulos
74df26a28d
Merge branch 'release/1.4' 2018-10-09 14:32:42 -07:00
Bill Zissimopoulos
0de00e872f
dotnet: ModifySecurityDescriptorEx
Deprecate ModifySecurityDecriptor and introduce
ModifySecurityDescriptorEx. Works around the problem
of clobbering an existing security descriptor when the
native API FspSetSecurityDescriptor fails.
2018-10-08 15:08:07 -07:00
Bill Zissimopoulos
60aee6867c
tools: run-tests: disable getfileattr_test for compat-fuse tests 2018-10-04 14:58:34 -07:00
Bill Zissimopoulos
33eb5d1703
fsbench: file_attr_test 2018-10-04 14:55:58 -07:00
Bill Zissimopoulos
4d49039abe
sys: FspFastIoQueryOpen: access control
Extend the WinFsp kernel-user mode protocol to allow passing
security descriptors that can then be used for access control
during FastIoQueryOpen.
2018-10-04 13:21:29 -07:00
Bill Zissimopoulos
fd9eccbe8b
memfs: AllowOpenInKernelMode==1
The getfileattr_test is expected to fail.
2018-10-03 09:32:14 -07:00
Bill Zissimopoulos
4255d4eec7
tools: run-tests: disable getfileattr_test on file systems that cannot pass it 2018-10-03 09:31:21 -07:00
Bill Zissimopoulos
d813116f77
winfsp-tests: getfileattr_test 2018-10-02 22:35:44 -07:00
Bill Zissimopoulos
a201919291
winfsp-tests: getfileattr_test 2018-10-02 21:44:23 -07:00
Bill Zissimopoulos
1aab4662e5
inc, sys, dotnet: FSP_FSCTL_VOLUME_PARAMS::AllowOpenInKernelMode 2018-10-02 11:47:51 -07:00
Bill Zissimopoulos
02a4d3641e
sys: implement FastIo operations
FspFastIoQueryOpen: return FALSE when RelatedFileObject is not NULL
2018-10-02 11:12:26 -07:00
Bill Zissimopoulos
3dfbdc313b
sys: implement FastIo operations
DEBUGTEST
2018-10-02 11:12:25 -07:00
Bill Zissimopoulos
3a286324ff
sys: implement FastIo operations
FspFastIoQueryOpen
2018-10-02 11:12:25 -07:00
Bill Zissimopoulos
0d849ffcc8
sys: implement FastIo operations
FastIoQueryBasicInfo, FastIoQueryStandardInfo, FastIoQueryNetworkOpenInfo
2018-10-02 11:12:24 -07:00
Bill Zissimopoulos
084f0b5b36
update changelog 2018-10-02 11:10:20 -07:00
Bill Zissimopoulos
901ef5e92f
update changelog 2018-10-01 17:05:14 -07:00
Bill Zissimopoulos
f09597a519
bump version to 2018.2 Gold 2018-10-01 16:57:49 -07:00
Bill Zissimopoulos
a03b480eeb changelog: add note about drweb fix 2018-09-27 12:27:36 -07:00
Bill Zissimopoulos
c9f1c1c60d sys: FspPropagateTopFlags: only touch TopLevelIrp if it looks like a kernel mode address 2018-09-27 09:31:09 -07:00
Bill Zissimopoulos
f32c914ee8 sys: create: FspFsvolCreate
Only check reparse point ECP if running on OS prior to RS4
2018-09-06 18:03:53 -07:00
Bill Zissimopoulos
681eac9cd8 sys: create: FspFsvolCreate
Only check reparse point ECP if running on OS prior to RS4
2018-09-06 17:52:52 -07:00
Bill Zissimopoulos
52f0d1e1d8 Changelog, FAQ: add info about reparse point and case-sensitivity fix 2018-09-06 17:06:51 -07:00
Bill Zissimopoulos
dcf3d612bc sys: create: FspFsvolCreate
Fix file name case after crossing a reparse point as per
http://online.osr.com/ShowThread.cfm?link=287522
2018-09-06 16:40:27 -07:00
Bill Zissimopoulos
4551766f7a sys: create: FspFsvolCreate
Replace FspMainFileOpenCheck with inline code
2018-09-06 13:26:53 -07:00
Bill Zissimopoulos
a168b96b76
changelog: add SetDelete information 2018-09-05 14:28:26 -07:00
Bill Zissimopoulos
4b3d9951bc
changelog: add SetDelete information 2018-09-05 14:26:54 -07:00
Bill Zissimopoulos
79fd87598f dotnet: Interop: fix silly mistake in SetDelete 2018-09-04 15:28:24 -07:00
Bill Zissimopoulos
9851f1b2c8 dotnet: properly handle SetDelete/CanDelete resolution 2018-08-29 20:54:49 -07:00
Bill Zissimopoulos
4725ff41d3 dotnet: FileSystemHost.DeviceControl flag 2018-08-29 17:21:24 -07:00
Bill Zissimopoulos
4756ee2d8a passthrough-dotnet: FlushAndPurgeOnCleanup 2018-08-29 16:45:14 -07:00
Bill Zissimopoulos
25f627f36f passthrough: FlushAndPurgeOnCleanup, SetDelete 2018-08-29 16:44:47 -07:00
Bill Zissimopoulos
24b96e7e1b inc, dll, dotnet: FSP_FILE_SYSTEM_INTERFACE::SetDelete 2018-08-29 15:45:02 -07:00
Bill Zissimopoulos
75ae8daf8f
update commercial disclaimer 2018-08-21 18:09:33 -07:00
Bill Zissimopoulos
999847d8db
Merge pull request #181 from JohnOberschelp/master
Added DeviceIoControl to Airfs
2018-08-01 19:35:03 -07:00
John Oberschelp
773bb12146
Update airfs.cpp 2018-08-01 17:34:24 -07:00
Bill Zissimopoulos
bef5ba7f3b dll: fuse: fix daemonization problem on Cygwin
The new FUSE loop use a Windows event (LoopEvent) to signal loop exit.
Prior to this commit the Windows event was created outside the FUSE
loop and potentially before daemonization (on Cygwin). This means that
the event was created in a different process and
WaitForMultipleObjects was failing with ERROR_ACCESS_DENIED.

This commit ensures that the LoopEvent is created inside the FUSE loop
and therefore in the daemonized process.
2018-07-31 21:02:46 -07:00
Bill Zissimopoulos
eecb7e00e2 fix tabs to spaces 2018-07-31 17:21:40 -07:00
Bill Zissimopoulos
9160f1c4ce cygfuse: fix CRLF to LF 2018-07-31 15:34:29 -07:00
Bill Zissimopoulos
796f97f078 cygfuse: remove exec bit from Makefile 2018-07-31 15:20:26 -07:00
Bill Zissimopoulos
5f1c3b7728 build: bump version 2018-07-31 15:12:50 -07:00
John Oberschelp
f672ae817a
Added DeviceIoControl to Airfs
Added DeviceIoControl code à la Memfs, simplified file allocation code, and cleaned up some white space.
2018-07-31 15:04:08 -07:00
Bill Zissimopoulos
04cf0e04ba
README: change download badges size 2018-07-29 15:37:23 -07:00
Bill Zissimopoulos
f51af55fb3
doc: update winfsp.h apidoc 2018-07-29 15:27:55 -07:00
Bill Zissimopoulos
f9a2780311
README: multiple improvements 2018-07-29 15:05:53 -07:00
Bill Zissimopoulos
43101dfe06 dll: fuse: improve service start/stop messaging 2018-07-29 10:52:01 -07:00
Bill Zissimopoulos
ac5ed1c238 update FAQ 2018-07-28 20:40:33 -07:00
Bill Zissimopoulos
03f0d2bd1a update FAQ 2018-07-28 20:36:07 -07:00
Bill Zissimopoulos
77c18fc59e cygfuse: update with latest headers 2018-07-28 14:28:40 -07:00
Bill Zissimopoulos
77cf7f7398 dll: fuse3: compatibility functions 2018-07-28 14:08:03 -07:00
Bill Zissimopoulos
c61da81475 changelog: FUSE supports multiple in-process file systems 2018-07-28 13:41:51 -07:00
Bill Zissimopoulos
a1b92d9095 dll: fuse: refactoring
Split dll/fuse.c into dll/fuse.c and dll/fuse_loop.c to accommodate
the complicated loop logic due to the last commit.
2018-07-28 13:38:06 -07:00
Bill Zissimopoulos
ae8e4e61f7 dll: fuse: allow multiple FUSE file systems
Refactoring to allow for multiple FUSE file systems within a single
process. Running FUSE file systems as Windows services is still
supported.
2018-07-28 13:13:27 -07:00
Bill Zissimopoulos
e5c424dba1 dll: service: FspServiceLoop
Do not reset FspServiceConsoleModeEvent on reentry.
It should be noted that reentry is not feasible,
because StartServiceCtrlDispatcherW returns
ERROR_SERVICE_ALREADY_RUNNING on reentry.
2018-07-27 11:09:43 -07:00
Bill Zissimopoulos
554f07a50e dll: fuse3: fsp_fuse3_pkgversion: bug fix 2018-07-26 10:17:38 -07:00
Bill Zissimopoulos
bd53b452b2 opt: cygfuse: fuse3: REQUIRES fuse 2018-07-26 10:03:48 -07:00
Bill Zissimopoulos
82cea37036 installer: add FUSE3 for Cygwin 2018-07-25 21:46:38 -07:00
Bill Zissimopoulos
2fcc065421 README: fix link 2018-07-25 21:34:59 -07:00
Bill Zissimopoulos
bf53c00f38 README: add links for project dirs 2018-07-25 21:32:53 -07:00
Bill Zissimopoulos
ec4197d8b7 opt: cygfuse: fix install scripts 2018-07-25 21:23:29 -07:00
Bill Zissimopoulos
897a08700b opt: cygfuse: fuse3 2018-07-25 21:15:16 -07:00
Bill Zissimopoulos
1ace7ffb41 opt: cygfuse: fuse: rename cygport 2018-07-25 20:23:13 -07:00
Bill Zissimopoulos
d7c0657c3d opt: cygfuse: refactoring 2018-07-25 20:13:53 -07:00
Bill Zissimopoulos
5d73687de8
dll: fuse: refactoring 2018-07-25 13:33:15 -07:00
Bill Zissimopoulos
a5bfdcf416
README: add reference to FUSE3 2018-07-25 13:31:42 -07:00
Bill Zissimopoulos
b609435dad
dll: fuse: refactoring 2018-07-25 13:26:36 -07:00
Bill Zissimopoulos
523ccbea02
Merge branch 'pvt-fuse3' 2018-07-25 12:54:54 -07:00
Bill Zissimopoulos
cf699ba441
tools: run-tests: passthrough-fuse3 2018-07-25 11:29:24 -07:00
Bill Zissimopoulos
0d819eb800
dll: fuse3: testing 2018-07-25 10:28:33 -07:00
Bill Zissimopoulos
4a653a8bc0
dll: fuse3: testing 2018-07-25 10:04:23 -07:00
Bill Zissimopoulos
6932d42039
dll: fuse3: testing 2018-07-25 08:54:22 -07:00
Bill Zissimopoulos
77fb2cc1c1
tools: run-tests: enable all winfsp-tests on airfs 2018-07-24 21:54:38 -07:00
Bill Zissimopoulos
500dfe1958
Merge pull request #178 from JohnOberschelp/master
Fixed to pass winfsp-tests and cleanup
2018-07-24 21:52:32 -07:00
John Oberschelp
1b40d8db80
Fixed to pass winfsp-tests and cleanup
Fixed AIRFS_NAMED_STREAMS bugs that caused stream_create_overwrite_test and stream_getstreaminfo_test to fail.
Also tidied up a few things.
2018-07-24 16:22:41 -07:00
Bill Zissimopoulos
307e18fb0d
update changelog 2018-07-20 15:44:10 -07:00
Bill Zissimopoulos
461266382a
changelog: add FUSE3 information 2018-07-20 15:35:12 -07:00
Bill Zissimopoulos
a809b0787e
changelog: add FUSE3 information 2018-07-20 15:34:31 -07:00
Bill Zissimopoulos
ea5e031af2
changelog: add FUSE3 information 2018-07-20 15:17:47 -07:00
Bill Zissimopoulos
558487cd22
installer: passthrough-fuse3 2018-07-20 15:12:22 -07:00
Bill Zissimopoulos
2ff21529d5
tst: passthrough-fuse3 2018-07-20 14:48:25 -07:00
Bill Zissimopoulos
d43c0c2c85
inc: fuse3: fix warnings 2018-07-20 09:37:59 -07:00
Bill Zissimopoulos
eb0f03b17b
build: fuse3: installer and pkg-config 2018-07-20 09:24:22 -07:00
Bill Zissimopoulos
575fe55eb8
dll: fuse3: fsp_fuse3_main_real 2018-07-19 14:24:09 -07:00
Bill Zissimopoulos
b537c61f3b
dll: fuse3: checkpoint 2018-07-19 12:53:03 -07:00
Bill Zissimopoulos
5cd40ff7ff
dll: fuse3: fsp_fuse3_lib_help 2018-07-19 06:39:18 -07:00
Bill Zissimopoulos
753440e837
dll: fuse3: checkpoint 2018-07-19 06:13:48 -07:00
Bill Zissimopoulos
9b79bb24ca
dll: fuse3: checkpoint 2018-07-19 04:27:06 -07:00
Bill Zissimopoulos
931d201527
dll: fuse3: fuse2to3 implementation 2018-07-18 14:48:10 -07:00
Bill Zissimopoulos
ab3f3d2827
dll: fuse3: fuse2to3 implementation 2018-07-18 04:11:20 -07:00
Bill Zissimopoulos
3dc09b2496
dll: fuse: remove dll/fuse/shared.h 2018-07-16 14:21:57 -07:00
Bill Zissimopoulos
27d03d4323
dll: fuse: ENOSYS has different values on Windows vs Cygwin 2018-07-16 09:50:21 -07:00
Bill Zissimopoulos
ad1b53e5a4
dll: fuse: move fsp_fuse_obj_* to sdll/fuse/shared.h 2018-07-16 09:45:38 -07:00
Bill Zissimopoulos
e4077c92e9
dll: fuse: ENOSYS has different values on Windows vs Cygwin 2018-07-16 09:42:15 -07:00
Bill Zissimopoulos
e3290a30bc
fuse3: initial commit 2018-07-16 09:31:32 -07:00
Bill Zissimopoulos
09309f858c
airfs: testing 2018-07-14 12:07:04 -07:00
Bill Zissimopoulos
12baaa6d50
airfs: testing 2018-07-14 11:15:12 -07:00
Bill Zissimopoulos
c584782bc7
airfs: testing 2018-07-14 11:04:10 -07:00
Bill Zissimopoulos
9c4a361c48
airfs: testing as disk file system 2018-07-14 09:16:14 -07:00
Bill Zissimopoulos
c1f4606683
airfs: FspLoad: dynamic loading of WinFsp DLL 2018-07-14 07:38:30 -07:00
Bill Zissimopoulos
f79db6a3db
airfs: installer 2018-07-07 09:38:42 -07:00
Bill Zissimopoulos
9a9a73d4d8
airfs: testing 2018-07-05 23:36:20 +01:00
Bill Zissimopoulos
a56caf3f94
bump version to 2018.2 B2 and update changelog 2018-07-05 15:13:56 -07:00
Bill Zissimopoulos
9b8b3e9cb8
Merge branch 'airfs' 2018-07-05 15:02:15 -07:00
Bill Zissimopoulos
5a8aad60b3
airfs: add notice re: contributions 2018-07-05 14:59:24 -07:00
Bill Zissimopoulos
1906772aa2
airfs: add VS project 2018-07-05 14:45:44 -07:00
Bill Zissimopoulos
ce924d737c
dotnet: rename Api.GetFspVersion to Api.GetVersion 2018-07-05 14:11:51 -07:00
Bill Zissimopoulos
aa50d5a8b9
Contributors: sort names 2018-07-05 21:59:38 +01:00
Bill Zissimopoulos
6ffddf36b5
Merge pull request #176 from FrKaram/Issue174
dotnet: add FlushAndPurgeOnCleanup and FspVersion
2018-07-05 21:55:34 +01:00
Francois Karam
ee4145e947
Update Contributors.asciidoc 2018-07-03 11:20:44 +02:00
FrKaram
fd817e37c9 Updated Contributor Agreement 2018-07-03 10:01:57 +02:00
FrKaram
2056766b4f Indentation again 2018-07-01 13:52:09 +02:00
FrKaram
c73f7099b7 Indentation again 2018-07-01 13:51:17 +02:00
FrKaram
3513f0da5f Correct VS auto-format 2018-07-01 13:50:02 +02:00
FrKaram
c9c62b1831 Fixed Indentation 2018-07-01 13:48:48 +02:00
FrKaram
8422e8121c Fixed identation 2018-07-01 13:46:20 +02:00
FrKaram
88516f371a Fixed indentation 2018-07-01 13:45:47 +02:00
FrKaram
916b4f5c3d Wrongly remove gitignore 2018-07-01 13:35:25 +02:00
FrKaram
a7424c911b Changes following PR remarks 2018-07-01 13:29:52 +02:00
FrKaram
fb8cb8aca9 Added FpsVersion as a static method in FileSystemHost
Added FlushAndPurgeOnCleanup
2018-06-30 20:20:17 +02:00
FrKaram
d0f5ea69a2 Added FlushAndPurgeOnCleanup property in .NET wrapper 2018-06-28 23:01:26 +02:00
Bill Zissimopoulos
fbb81b0463
Merge pull request #173 from JohnOberschelp/master
Create airfs.cpp
2018-06-23 23:19:04 -07:00
John Oberschelp
14a2004437
Create airfs.cpp 2018-06-23 16:36:31 -07:00
Bill Zissimopoulos
d491031fda
bump version to 2018.2 B1 2018-06-19 14:24:24 -07:00
Bill Zissimopoulos
75a3d97c62
Merge branch 'release/1.3' 2018-05-11 10:18:29 -07:00
Bill Zissimopoulos
5f325304d3
tst: memfs: rewrite MemfsFileNameCompare 2018-05-10 19:53:57 -07:00
Bill Zissimopoulos
8727497662
tst: memfs: remove CompareString usage 2018-05-10 12:31:01 -07:00
Bill Zissimopoulos
a2ed9f2b1a
github: update ISSUE_TEMPLATE 2018-05-08 21:44:30 -07:00
Bill Zissimopoulos
fdaf1da778
Merge branch 'pvt-devctl' 2018-05-08 20:49:22 -07:00
Bill Zissimopoulos
1123e7b0ef
dll: fuse: optimize symlinks aways when readlink returns -ENOSYS 2018-05-08 10:51:29 -07:00
Bill Zissimopoulos
06ee833740
dll: fuse: enable DeviceControl 2018-05-07 14:13:24 -07:00
Bill Zissimopoulos
fbcefe6339
dll: fuse: ioctl 2018-05-07 14:05:18 -07:00
Bill Zissimopoulos
637a1dac7e
dotnet: implement Control operation 2018-05-04 14:51:48 -07:00
Bill Zissimopoulos
05f622f2de
inc: winfsp.h: fix Control doc 2018-05-04 14:48:46 -07:00
Bill Zissimopoulos
ef5c947168
update changelog 2018-05-04 14:08:24 -07:00
Bill Zissimopoulos
894ae7b8f3
sys,dll: DeviceControl operation 2018-05-04 13:56:20 -07:00
Bill Zissimopoulos
7aadf259d9
bump version to v1.3 (2018.1) 2018-05-04 05:09:35 +01:00
Bill Zissimopoulos
d54e9a3049
update changelog 2018-05-01 10:38:58 -07:00
Bill Zissimopoulos
7d56b9c23d
dll: fuse: GetSecurityByName: correctly handle "not found" paths with symlinks 2018-04-30 14:18:03 -07:00
Bill Zissimopoulos
deb237f7b0
dll: fuse: fsp_fuse_intf_AddDirInfo: avoid deadlock with ReaddirPlus and symlinks 2018-04-30 13:31:06 -07:00
Bill Zissimopoulos
5ae0804bd2
doc: add EncFS to known file systems 2018-04-27 12:12:25 -07:00
Bill Zissimopoulos
382599e38f
dll: fuse: add ThreadCount option 2018-04-23 15:35:30 -07:00
Bill Zissimopoulos
498ab91123
dll: fuse: replace -oFlushAndPurgeOnCleanup with -oKeepFileCache option 2018-04-23 15:12:30 -07:00
Bill Zissimopoulos
c2f87029d7
sys: FspFileNodeCleanupFlush:
- CcFlushCache now happens during initial Cleanup call
- avoids recursive call into file system during Cleanup completion
2018-04-23 14:30:38 -07:00
Bill Zissimopoulos
157c4bc09a
sys: FspFileNodeCleanupComplete: FlushAndPurgeOnCleanup:
- comment about difference in behavior when DeletePending
2018-04-23 09:57:47 -07:00
Bill Zissimopoulos
4fcaa99d63
sys: FspFileNodeCleanupComplete: FlushAndPurgeOnCleanup:
- handle DeletePending and non-zero PTruncateSize better
2018-04-23 00:33:00 -07:00
Bill Zissimopoulos
d6c3849120
dll: fuse: fix wrong calc of FileInfoTimeout from attr_timeout 2018-04-22 23:42:20 -07:00
Bill Zissimopoulos
ec39d4b888
dll: fuse: DirInfoTimeout, VolumeInfoTimeout options 2018-04-22 23:36:47 -07:00
Bill Zissimopoulos
ebc8c268e5
appveyor: FSP_FSCTL_VOLUME_PARAMS size change compat testing 2018-04-22 11:16:25 -07:00
Bill Zissimopoulos
9501b5771d
inc,sys,tst: FSP_FSCTL_VOLUME_PARAMS: fine-grained timeouts 2018-04-21 11:53:14 -07:00
Bill Zissimopoulos
5d34a3bd8c
dll: fuse: FlushAndPurgeOnCleanup option 2018-04-19 13:04:34 -07:00
Bill Zissimopoulos
5b72b4ad4a
tools: run-tests: FlushAndPurgeOnCleanup 2018-04-19 11:17:41 -07:00
Bill Zissimopoulos
740411d604
tst: FlushAndPurgeOnCleanup: testing 2018-04-19 10:23:15 -07:00
Bill Zissimopoulos
5c3549c6eb
sys: file: FspFileNodeCleanupComplete: FlushAndPurgeOnCleanup 2018-04-18 20:58:19 -07:00
Bill Zissimopoulos
9f56a21c7f
sys: cleanup: minor change 2018-04-18 20:13:08 -07:00
Bill Zissimopoulos
2e7e95df76
appveyor: troubleshoot create_pid_test, rename_pid_test 2018-04-17 16:34:59 -07:00
Bill Zissimopoulos
b2e6c16ba0
update changelog 2018-04-17 13:47:37 -07:00
Bill Zissimopoulos
bd32f54904
Revert "installer: launch MEMFS as LocalService"
This reverts commit a7febb8265de1ded67a7c8cefb41349e83e1e57b.
2018-04-17 13:24:57 -07:00
Bill Zissimopoulos
7908ba09ac
appveyor: troubleshoot rename_pid_test 2018-04-17 13:16:52 -07:00
Bill Zissimopoulos
5713605030
appveyor: troubleshoot create_pid_test 2018-04-17 13:14:34 -07:00
Bill Zissimopoulos
994e232fb3
fuse: add create_umask option 2018-04-17 12:46:13 -07:00
Bill Zissimopoulos
9553bd52c4
update changelog for v1.3B2 (overdue) 2018-04-17 12:26:48 -07:00
Bill Zissimopoulos
1cab0f3975
cygfuse: correctly use cygwin_create_path 2018-03-26 14:11:58 -07:00
Bill Zissimopoulos
499a3d1138
Merge pull request #154 from benrubson/cast
Correct a cast in winfsp_fuse
2018-03-26 13:07:30 -07:00
Ben RUBSON
d29218ba69
Update Contributors.asciidoc 2018-03-26 21:50:37 +02:00
Ben RUBSON
5564a9efae
Correct a cast in winfsp_fuse 2018-03-26 10:36:26 +02:00
Bill Zissimopoulos
750e72e601
installer: add launch.h 2018-01-29 09:16:30 -08:00
Bill Zissimopoulos
9f13c6e915
build: update version to 2018.1 B3 2018-01-29 09:04:17 -08:00
Bill Zissimopoulos
5005dd6f5b
dll: np: NPGetConnection fix and FspNpGetRemoteInfo 2018-01-19 04:58:38 -08:00
Bill Zissimopoulos
f9b6fb8817
build: update version to 2018.1 B2 2018-01-17 17:21:03 -08:00
Bill Zissimopoulos
6b0b4c8b8e
sys: mup: claim \ClassName instead of \ClassName\InstanceName prefix 2018-01-17 15:44:01 -08:00
Bill Zissimopoulos
abb504053b
sys: FspUnload 2018-01-16 18:26:23 -08:00
Bill Zissimopoulos
fb507fc0bc
dll: np: DeviceName 2018-01-16 13:38:49 -08:00
Bill Zissimopoulos
d38afe8d16
sys: shutdown: fix Release build 2018-01-16 11:49:14 -08:00
Bill Zissimopoulos
a4629b8f8b
sys: fsmup device
- This commit introduces the fsmup device, which is a major change in how
network file systems are handled. Previously every network file system's
fsvol device was directly registered with the MUP. Now there is a single
fsmup device that is registered with the MUP; network file systems' fsvol
devices register with fsmup instead. The fsmup device maintains a prefix
table which it uses to demultiplex and forward requests to the appropriate
fsvol device.
- This device change was necessatitated to fix issue #87.
2018-01-16 10:38:52 -08:00
Bill Zissimopoulos
670a38d549
Update ISSUE_TEMPLATE.md 2018-01-11 18:29:56 -08:00
Bill Zissimopoulos
b939f6bd2b
doc: update FAQ doc 2018-01-11 18:27:22 -08:00
Bill Zissimopoulos
3df27f5b28
doc: rename API doc files 2018-01-11 17:25:17 -08:00
Bill Zissimopoulos
7581cece81
doc: rename API doc files 2018-01-11 17:18:33 -08:00
Bill Zissimopoulos
b4f5707e4e
tools: apidoc
doc: launch.h
2018-01-11 17:09:20 -08:00
Bill Zissimopoulos
309827860f
tools: run-tests: extra time for memfs to spin up (LocalService) 2018-01-11 16:39:45 -08:00
Bill Zissimopoulos
2b6b049f86
inc: launch.h: documentation 2018-01-11 16:35:56 -08:00
Bill Zissimopoulos
77f3e064a2
winfsp-tests: launch-test: disable as test is very fragile 2018-01-10 11:01:39 -08:00
Bill Zissimopoulos
f691a7a3c7
dll: FspLaunch*: testing 2018-01-09 23:12:05 -08:00
Bill Zissimopoulos
cc58668ce5
dll: FspLaunchReg*: testing 2018-01-09 22:17:07 -08:00
Bill Zissimopoulos
064d0b94f2
dll: FspLaunchRegSetRecord, FspLaunchRegGetRecord, FspLaunchRegFreeRecord 2018-01-09 17:45:49 -08:00
Bill Zissimopoulos
a48668149b
inc: winfsp/launch.h 2018-01-09 11:38:27 -08:00
Bill Zissimopoulos
b9915dcaa7
update changelog 2018-01-04 19:19:54 -08:00
Bill Zissimopoulos
a7febb8265
installer: launch MEMFS as LocalService 2018-01-04 11:44:29 -08:00
Bill Zissimopoulos
d6aaf0088a
Merge branch 'master' into pvt-launcher 2018-01-04 11:39:31 -08:00
Bill Zissimopoulos
f05af124e7
Merge branch 'felfert-providerorder' 2018-01-04 11:35:00 -08:00
Bill Zissimopoulos
886b7cf9f7
Merge branch 'providerorder' of https://github.com/felfert/winfsp into felfert-providerorder 2018-01-04 11:10:19 -08:00
Bill Zissimopoulos
e111451475
dll: FspLaunch API 2018-01-04 11:08:23 -08:00
Fritz Elfert
0c38f92082 Use FSP_NP_ORDER_FIRST to specify provider order 2018-01-04 01:12:34 +01:00
Bill Zissimopoulos
9bd9cf4fbd
update source copyright notices for 2018 2018-01-03 15:29:38 -08:00
Bill Zissimopoulos
2f026cbc6f
launcher: code cleanup 2018-01-03 14:55:27 -08:00
Fritz Elfert
68d8ade667 Speed up mount operation by putting winfsp network provider at the head of network providers 2017-12-29 18:56:11 +01:00
Bill Zissimopoulos
d9c450ecf4
update Changelog 2017-12-20 13:30:34 -08:00
Bill Zissimopoulos
e6d2ef9274
launcher: new WorkDirectory registry value controls file system work dir 2017-12-19 17:50:26 -08:00
Bill Zissimopoulos
299f371dee
Merge branch 'pvt-launcher2' 2017-12-19 16:48:05 -08:00
Bill Zissimopoulos
bb8aee8673
Sort contributor names (alpha-sort by first name) 2017-12-19 16:26:23 -08:00
Bill Zissimopoulos
08bf8e14ce
Merge branch 'felfert-winfsp#128' 2017-12-19 16:22:37 -08:00
Bill Zissimopoulos
ef1912bd8a
installer: Product.wxs: whitespace fixes 2017-12-19 16:22:12 -08:00
Bill Zissimopoulos
ff155694ce
launcher: can now perform DefineDosDevice in LocalSystem context
dll: uses launcher to DefineDosDevice for LocalService, etc.
2017-12-19 14:49:22 -08:00
Fritz Elfert
e6ed6dbf4f Signed Contributors.asciidoc 2017-12-15 15:30:02 +01:00
Fritz Elfert
f13b98c880 Add WixDependencyExtension and Provides WinFSPprovider 2017-12-15 14:53:06 +01:00
Bill Zissimopoulos
5d3b37122c
launcher: LogonCreateProcess 2017-12-12 14:39:56 -08:00
Bill Zissimopoulos
9d1c892d68
Merge branch 'master' into pvt-launcher2 2017-12-12 14:30:13 -08:00
Bill Zissimopoulos
7008871ed7
Merge branch 'release/1.2' 2017-12-12 13:13:41 -08:00
Bill Zissimopoulos
2a3eabfab2
changelog: v1.2POST1 2017-12-12 10:07:54 -08:00
Bill Zissimopoulos
35255526d3
launcher: work around Win7 CreateProcess problem 2017-12-11 21:40:47 -08:00
Bill Zissimopoulos
b2e474658d
launcher: work around Win7 CreateProcess problem 2017-12-11 21:23:38 -08:00
Bill Zissimopoulos
4fe85222b1
dll: wksid: well known SID's 2017-12-11 15:03:32 -08:00
Bill Zissimopoulos
fd3e5bad43
src: launcher: SvcInstanceAddUserRights:
- users who start a file system can always stop it and get info about it
2017-12-10 14:49:18 -08:00
Bill Zissimopoulos
ea873ece22
src: launcher: LogonCreateProcess: ImpersonateLoggedOnUser 2017-12-09 17:45:10 -08:00
Bill Zissimopoulos
42e01a9b27
src: launcher: RunAs, LogonCreateProcess 2017-12-09 17:00:09 -08:00
Bill Zissimopoulos
c1c9dca94b
build: update version to 2018.1 B1 2017-12-09 11:43:43 -08:00
Bill Zissimopoulos
dcabdff422
.github: add issue and PR templates 2017-12-08 21:53:57 -08:00
Bill Zissimopoulos
a2ec40008f
build: choco: update chocolatey package as per guidelines from chocolatey admin 2017-12-06 16:24:27 -08:00
Bill Zissimopoulos
f3819ba839
tst: passthrough-dotnet: fix ReadDirectoryEntry when running fs over drive root 2017-12-05 18:50:39 -08:00
Bill Zissimopoulos
ead599e337
tst: passthrough-dotnet: handle undoc wildcards in ReadDirectoryEntry
- reported by Pavel Franc over email
2017-12-05 10:32:58 -08:00
Bill Zissimopoulos
eb88f25f40
tst: passthrough-dotnet: Create,Overwrite: set archive bit 2017-12-04 16:24:48 -08:00
Bill Zissimopoulos
c2b066a054
dll: fuse: Create: do not add FILE_ATTRIBUTE_ARCHIVE for directories 2017-12-04 14:16:24 -08:00
Bill Zissimopoulos
266e0f4bab
dll: fuse: call chflags from Create and Overwrite
tst: winfsp-tests: file attributes test
2017-12-04 14:08:44 -08:00
Bill Zissimopoulos
d02030897d
dll: fuse: add O_EXCL during FUSE create op 2017-12-03 19:56:36 -08:00
Bill Zissimopoulos
c87ff75b8f
sys: fix filename length check during query directory operations 2017-12-01 17:01:59 -08:00
Bill Zissimopoulos
2ca33665ef
update changelog 2017-11-29 16:28:21 -08:00
Bill Zissimopoulos
391dcf8a21
build: update version to 1.2 (Gold) 2017-11-29 16:24:19 -08:00
Bill Zissimopoulos
69d68eb22f
launcher: compute user name from client token
dll: np: do not pass user name as launcher argument
2017-11-29 16:20:15 -08:00
Bill Zissimopoulos
d58f4b84a5
opt: cygfuse: update tarballs 2017-11-28 16:53:21 -08:00
Bill Zissimopoulos
61935e4671
tst: passthrough-fuse: gix cygwin build 2017-11-28 16:52:36 -08:00
Bill Zissimopoulos
41838627c0
update README 2017-11-28 15:55:06 -08:00
Bill Zissimopoulos
0b67329fc2
doc: update known file systems 2017-11-28 15:46:07 -08:00
Bill Zissimopoulos
5c962c8fc5
doc: includes notes on backwards compat testing 2017-11-15 15:08:26 -08:00
Bill Zissimopoulos
a9080208d9
tools,tst: backwards compat testing for FUSE layer 2017-11-15 13:41:17 -08:00
Bill Zissimopoulos
3cc9697248
update changelog for v1.2B3 2017-11-15 11:57:53 -08:00
Bill Zissimopoulos
9f45d513ca
build: update version to 2017.2 B3 2017-11-15 11:29:08 -08:00
Bill Zissimopoulos
77349c1330
tst: winfsp-tests: setfileinfo_test, stream_setfileinfo_test:
- perform time tests around UNIX epoch to accommodate 32-bit file systems
2017-11-15 10:48:15 -08:00
Bill Zissimopoulos
7c11a45e6e
tst: passthrough-fuse: setcrtime 2017-11-14 21:55:41 -08:00
Bill Zissimopoulos
48ad297df1
dll: fuse: setcrtime, setchgtime 2017-11-14 21:55:09 -08:00
Bill Zissimopoulos
3d2de57e9d
tst: passthrough-fuse: streamline time calculations 2017-11-14 21:38:20 -08:00
Bill Zissimopoulos
658d873efb
dll: fuse: streamline time calculations 2017-11-14 21:37:50 -08:00
Bill Zissimopoulos
efc93cacd3
tst: passthrough-fuse: BSD flags support 2017-11-14 14:25:17 -08:00
Bill Zissimopoulos
41b54ef57a
tools: run-tests: enable setfileinfo_test for passthrough-fuse 2017-11-14 12:02:19 -08:00
Bill Zissimopoulos
fd662ee848
tst: passthrough-fuse: BSD flags support 2017-11-14 12:01:00 -08:00
Bill Zissimopoulos
895bf67691
dll: fuse: implement BSD flags support 2017-11-14 09:11:51 -08:00
Bill Zissimopoulos
e06fe4153d
dll: fuse: implement BSD flags support 2017-11-13 20:44:49 -08:00
Bill Zissimopoulos
9f2fe92db7
tst: memfs: slowio: improvements 2017-11-03 10:01:27 -07:00
Bill Zissimopoulos
d3f829b2df
tools: run-tests: fsx-memfs-*-slowio 2017-11-02 21:45:08 -07:00
Bill Zissimopoulos
fa4651b3ce
tst: winfsp-tests: enable slowio 2017-11-02 17:36:52 -07:00
Bill Zissimopoulos
5a44e5c04a
tst: memfs: fix pending Write 2017-11-02 16:19:19 -07:00
Bill Zissimopoulos
68122b5c68
tst: winfsp-tests: enable slowiio 2017-11-02 15:59:32 -07:00
Bill Zissimopoulos
b672312c79
tst: memfs: code cleanup and testing 2017-11-02 15:43:14 -07:00
Bill Zissimopoulos
0ab35fde1a tst: memfs: slowio: minor code cleanup 2017-11-01 18:30:36 -07:00
Bill Zissimopoulos
9be2b7a2b9 tst: memfs: slowio 2017-11-01 17:12:29 -07:00
John Oberschelp
39dd7662bd
Update Contributors.asciidoc 2017-11-01 09:58:11 -07:00
John Oberschelp
244afc8a3c
Update memfs-main.c 2017-10-31 15:50:50 -07:00
John Oberschelp
111955db84
Update memfs.cpp 2017-10-31 15:44:24 -07:00
John Oberschelp
76ff8232bc
Update memfs-main.c 2017-10-31 15:42:26 -07:00
John Oberschelp
9a3ac3c7a1
Update memfs.h 2017-10-31 15:39:19 -07:00
John Oberschelp
4adc0d4700
Update memfs-test.c 2017-10-31 15:36:09 -07:00
John Oberschelp
91c714dd53
Update fscrash-main.c 2017-10-31 15:32:12 -07:00
Bill Zissimopoulos
11cb57a0bf dll: np: pass username as argument to launcher 2017-10-27 15:12:18 -07:00
Bill Zissimopoulos
3a8ad9c8d7 sys: QueryDirectory stability:
- FspMetaCacheAddItem now handles exceptions during copy from fs buffer
- FspFsvolQueryDirectoryLengthMax is correct max length for QueryDirectory
2017-10-25 10:44:33 -07:00
Bill Zissimopoulos
fa388e57ad appveyor: add avast testing 2017-10-20 13:54:26 -07:00
Bill Zissimopoulos
1952d0d941 update changelog 2017-10-19 19:18:21 -07:00
Bill Zissimopoulos
1a02438488 sys: dirctl: fix 32-bit builds (after Avast changes) 2017-10-19 17:19:31 -07:00
Bill Zissimopoulos
07f15c236b sys: dirctl: eliminate use of SystemBuffer to work around problems with Avast 2017-10-19 16:49:10 -07:00
Bill Zissimopoulos
93af1be861 update changelog 2017-10-12 10:11:01 -07:00
Bill Zissimopoulos
b52c90f980 update changelog 2017-10-12 10:02:28 -07:00
Bill Zissimopoulos
b154c307b7 version.properties: update build to 2017.2 B2 2017-10-12 09:52:41 -07:00
Bill Zissimopoulos
697063af51 inc: winfsp.h: minor restructuring 2017-10-11 17:17:18 -07:00
Bill Zissimopoulos
436e31da34 dotnet: GetOperationProcessId 2017-10-11 17:07:38 -07:00
Bill Zissimopoulos
92e7dbad21 sys: Create and Rename requests should include the originating process PID 2017-10-11 16:28:50 -07:00
Bill Zissimopoulos
4812f5bbd0 sys: Create and Rename requests should include the originating process PID 2017-10-11 16:25:22 -07:00
John Oberschelp
045a1fa19c Update memfs-test.c 2017-10-09 14:51:18 -07:00
John Oberschelp
c9b2c0460b Update fscrash-main.c 2017-10-09 14:49:50 -07:00
John Oberschelp
1468df78a2 Update memfs.h 2017-10-09 14:48:33 -07:00
John Oberschelp
0fb6299f17 Update memfs-main.c 2017-10-09 14:47:28 -07:00
John Oberschelp
0da43fe2d4 Update memfs.cpp 2017-10-09 14:46:24 -07:00
Bill Zissimopoulos
d824ba464d version.properties: update build to 2017.2 B1 2017-10-01 11:45:23 -07:00
Bill Zissimopoulos
affca267c5 update changelog 2017-10-01 11:39:15 -07:00
Bill Zissimopoulos
4b7684122b dll: fuse: disable GetDirInfoByName when file system is case-insensitive 2017-10-01 11:07:01 -07:00
Bill Zissimopoulos
55eee2efdd dll: GetDirInfoByName: eliminate unnecessary marker check 2017-09-30 12:33:05 -07:00
Bill Zissimopoulos
f8a05eae95 memfs: fix Unicode case-insensitive comparison 2017-09-29 16:27:28 -07:00
Bill Zissimopoulos
9a4f04f46a sys: FspFsvolQueryDirectoryRetry: special handling for when pattern is filename 2017-09-29 15:44:49 -07:00
Bill Zissimopoulos
98334208b9 Revert commit c70089a176e5ba86a8e7fc99d760c4f707722d3e 2017-09-29 15:20:38 -07:00
Bill Zissimopoulos
aae0a5bc74 dll: fuse: GetDirInfoByName 2017-09-28 16:55:45 -07:00
Bill Zissimopoulos
2438ece1cf memfs-dotnet: GetDirInfoByName 2017-09-28 14:41:27 -07:00
Bill Zissimopoulos
487d2449fe dotnet: GetDirInfoByName 2017-09-28 14:11:58 -07:00
Bill Zissimopoulos
6430b386da dll: GetDirInfoByName: properly handle marker for kernel cached directories 2017-09-28 14:05:55 -07:00
Bill Zissimopoulos
c70089a176 sys: FSP_FILE_DESC: DirectoryNoMoreFiles optimization 2017-09-27 18:01:17 -07:00
Bill Zissimopoulos
0dff9a4c07 memfs: GetDirInfoByName 2017-09-27 17:08:41 -07:00
Bill Zissimopoulos
86c0ffa942 fsbench: file_list_single_test, file_list_none_test 2017-09-27 15:59:54 -07:00
Bill Zissimopoulos
5c613b2abd memfs: ReadDirectory: assert(0 == Pattern) 2017-09-26 14:26:57 -07:00
Bill Zissimopoulos
8a099f3faa sys: PassQueryDirectoryFileName 2017-09-26 14:19:27 -07:00
Bill Zissimopoulos
1ac172d2f8 inc,sys: PassQueryDirectoryFileName 2017-09-26 11:51:49 -07:00
Bill Zissimopoulos
34546def3c sys,dll: GetDirInfoByName 2017-09-25 19:46:36 -07:00
Bill Zissimopoulos
3ede1a5c70 memfs-dotnet: fix GetDescendantFileNames 2017-09-25 12:53:08 -07:00
Bill Zissimopoulos
5194536ec3 memfs: fix issue #103 2017-09-25 11:58:20 -07:00
Bill Zissimopoulos
c39bc81299 tools: run-tests: run FSX over passthrough-fuse 2017-09-16 11:00:07 -07:00
Bill Zissimopoulos
18bf6ca666 Merge pull request #107 from saibotu/pr-writesize
Don't decrease FileSize on write
2017-09-16 10:56:34 -07:00
saibotu
7eebdbd74e
Signed CONTRIBUTOR AGREEMENT 2017-09-16 17:41:17 +02:00
saibotu
9a88791f61
dll: fuse: don't decrease FileSize on write 2017-09-15 13:32:08 +02:00
Bill Zissimopoulos
6e578350f4 doc: update file system libraries 2017-09-01 15:20:20 -07:00
Bill Zissimopoulos
81afac9c3a fsptool: usage 2017-07-19 23:33:53 -07:00
Bill Zissimopoulos
10081e1a69 fsptool: perm 2017-07-19 23:28:46 -07:00
Bill Zissimopoulos
8e5c40bbbe fsptool: perm 2017-07-19 23:16:05 -07:00
Bill Zissimopoulos
7745bf4cdc fsptool: usage 2017-07-19 21:55:28 -07:00
Bill Zissimopoulos
c7a779fa98 fsptool: id 2017-07-20 05:29:13 +01:00
Bill Zissimopoulos
3f90d60dc4 fsptool: id 2017-07-19 20:17:25 -07:00
Bill Zissimopoulos
f73cbc0e37 fsptool: id 2017-07-19 17:35:24 -07:00
Bill Zissimopoulos
c88a86f7c7 fsptool: id 2017-07-19 17:26:00 -07:00
Bill Zissimopoulos
dbdbdf07cf fsptool: id 2017-07-19 16:48:00 -07:00
Bill Zissimopoulos
6b2dcaef96 fsptool: getuid, getgid 2017-07-19 16:05:49 -07:00
Bill Zissimopoulos
fcae6ce018 fsptool: update Changelog 2017-07-19 15:38:03 -07:00
Bill Zissimopoulos
690d3e4c8e fsptool: lsvol 2017-07-19 15:22:43 -07:00
Bill Zissimopoulos
af37424ecc fsptool: lsvol 2017-07-19 14:56:32 -07:00
Bill Zissimopoulos
fd53e22f7e fstool: skeleton 2017-07-19 14:16:01 -07:00
Bill Zissimopoulos
3df0fa02ba build: refactor project for fsptool 2017-07-19 12:10:27 -07:00
Bill Zissimopoulos
9484b50cbd changelog: FspFileSystemOperationProcessId 2017-07-18 14:37:46 -07:00
Bill Zissimopoulos
14e6b402fe build: version.properties: MyGitRevision fix 2017-07-14 20:33:59 -07:00
Bill Zissimopoulos
2227429d8e opt: cygfuse: winpid_to_pid 2017-07-13 00:10:03 -07:00
Bill Zissimopoulos
9deb9d5319 dll: fuse: winpid_to_pid 2017-07-12 23:45:40 -07:00
Bill Zissimopoulos
193d5f4e91 tst: originating process id 2017-07-12 22:34:47 -07:00
Bill Zissimopoulos
26485ffbd6 sys: originating process id 2017-07-12 20:54:12 -07:00
Bill Zissimopoulos
7302b4baea dll: originating process id 2017-07-12 20:18:35 -07:00
Bill Zissimopoulos
fc1586eb82 dll: originating process id 2017-07-12 18:53:12 -07:00
Bill Zissimopoulos
637f461a65 sys: FspFileNodeTrySetFileInfoOnOpen 2017-07-11 15:23:03 -07:00
Bill Zissimopoulos
b35bf204db sys: FspFileNodeTrySetFileInfoOnOpen 2017-07-11 14:17:17 -07:00
Bill Zissimopoulos
3073646f29 doc: add link to queued events document 2017-06-21 14:32:18 -07:00
Bill Zissimopoulos
7f9f55de24 add queued events document 2017-06-21 14:19:56 -07:00
Bill Zissimopoulos
bb3f8d37f2 tools: run-tests: disable passthrough-cpp that is no longer included in installer 2017-06-13 11:13:04 -07:00
Bill Zissimopoulos
c72a9f2a05 build: update for release 1.1 2017-06-12 13:42:05 -07:00
Bill Zissimopoulos
9b4ab190e0 installer: do not install C++ layer 2017-06-12 13:33:45 -07:00
Bill Zissimopoulos
010ed909ec doc: update faq 2017-06-12 12:54:06 -07:00
Bill Zissimopoulos
2b4549a50d doc: update service arch doc with information about credentials 2017-06-12 12:40:50 -07:00
Bill Zissimopoulos
98a329e81b tst: memfs: atomically update FileNode::RefCount (issue #93) 2017-06-07 22:22:28 -07:00
Bill Zissimopoulos
8090b7c666 update Changelog 2017-05-22 17:42:55 -07:00
Bill Zissimopoulos
c7d720eaa0 dll: fuse: allows slashes in -o VolumePrefix=PREFIX 2017-05-22 17:02:40 -07:00
Bill Zissimopoulos
8320160d73 build: version.properties: update to v1.1B3 2017-05-22 13:49:59 -07:00
Bill Zissimopoulos
ce057b49b8 update Changelog 2017-05-22 13:30:16 -07:00
Bill Zissimopoulos
a60c989089 update Changelog 2017-05-22 21:25:44 +01:00
Bill Zissimopoulos
0f6371f0d8 tools: run-tests: add fsx and winfstest for memfs-dotnet 2017-05-17 21:07:37 -07:00
Bill Zissimopoulos
1a4bbbe09a cygfuse: fix tabs to spaces 2017-05-17 15:19:36 -07:00
Bill Zissimopoulos
4e891dc2a8 cygfuse: add fuse_exited 2017-05-17 15:13:05 -07:00
Bill Zissimopoulos
18a77d63c3 cygfuse: improve cygfuse initialization 2017-05-17 14:59:31 -07:00
Bill Zissimopoulos
4ea9c6e362 dll: fuse: added -o options for additional WinFsp-FUSE options 2017-05-17 12:11:45 -07:00
Bill Zissimopoulos
9d77c192a8 cygfuse: cygfuse_init_fail now prints message and exits 2017-05-17 10:58:04 -07:00
Bill Zissimopoulos
6d5401d911 cygfuse: add 32-bit package 2017-05-17 00:54:26 -07:00
Bill Zissimopoulos
330d6e79f8 opt: cygfuse: bump release number to 5 2017-05-17 00:05:41 -07:00
Bill Zissimopoulos
ed58b7a63c inc: fuse: fix missing-field-initializers warning 2017-05-16 23:41:02 -07:00
Bill Zissimopoulos
f6853114c1 dll: fuse: implement fuse_exited 2017-05-16 23:26:18 -07:00
Bill Zissimopoulos
8ec7285d32 doc: add rclone to known file systems 2017-05-15 15:12:26 -07:00
Bill Zissimopoulos
c183c0fe89 doc: add rar2fs to the known file systems 2017-05-13 16:37:26 -07:00
Bill Zissimopoulos
38ad8fd27d update README 2017-05-11 13:51:56 -07:00
Bill Zissimopoulos
de85070e73 tst: winfsp-tests: disable internal tests when running with --external 2017-05-11 11:17:57 -07:00
Bill Zissimopoulos
5b8ebd6e1d src: dotnet: minor documentation fixes 2017-05-11 10:38:12 -07:00
Bill Zissimopoulos
db530cb5e5 installer: add dotnet documentation 2017-05-10 23:32:43 -07:00
Bill Zissimopoulos
7cd4d4faab src: dotnet: add documentation 2017-05-10 23:11:42 -07:00
Bill Zissimopoulos
2560a513dc update changelog 2017-05-09 23:12:45 -07:00
Bill Zissimopoulos
1ee95be5d7 src: dotnet: FileSystemBase: GetStreamInfo: bug fix 2017-05-09 23:01:31 -07:00
Bill Zissimopoulos
bd7546559c tst: memfs-dotnet: Create: fix allocation size 2017-05-09 22:02:37 -07:00
Bill Zissimopoulos
d18a2c8b75 tst: memfs-dotnet: ReadDirectoryEntry: properly handle Marker 2017-05-09 17:49:43 -07:00
Bill Zissimopoulos
0ebae0adc1 src: dotnet: FileSystemHost.GetSecurityByName: handle STATUS_REPARSE 2017-05-09 16:58:16 -07:00
Bill Zissimopoulos
d70c49ccd0 tools: run-tests: add memfs-dotnet testing 2017-05-09 00:03:01 -07:00
Bill Zissimopoulos
5846939116 tools: run-tests: add memfs-dotnet testing 2017-05-08 23:11:45 -07:00
Bill Zissimopoulos
f124e74f01 installer: add memfs-dotnet 2017-05-08 22:56:06 -07:00
Bill Zissimopoulos
05abb93e4b tst: memfs-dotnet: fix stream_getstreaminfo_test 2017-05-08 22:17:17 -07:00
Bill Zissimopoulos
5839d46b7a tst: memfs-dotnet: fix stream_create_overwrite_test 2017-05-08 21:57:45 -07:00
Bill Zissimopoulos
bce0d63f7d tst: memfs-dotnet: fix read/write offset copy 2017-05-08 21:53:49 -07:00
Bill Zissimopoulos
14b9f5affc tst: memfs-dotnet: fix rename_caseins_test 2017-05-08 21:45:30 -07:00
Bill Zissimopoulos
035a430470 tst: dotnet: SetSecurity testing 2017-05-08 21:25:25 -07:00
Bill Zissimopoulos
0af9e46e76 src: dotnet: FileSystemBase.ModifySecurityDescriptor 2017-05-08 21:25:03 -07:00
Bill Zissimopoulos
c4530f1252 tst: memfs-dotnet: testing 2017-05-07 17:40:47 -07:00
Bill Zissimopoulos
9f78a17583 tst: memfs-dotnet: reparse points testing 2017-05-07 17:12:08 -07:00
Bill Zissimopoulos
eea0b1bc79 src: dotnet: GetReparseTag 2017-05-07 17:11:39 -07:00
Bill Zissimopoulos
8338a6e066 tst: memfs-dotnet: fix exceptions in SetFileSizeInternal 2017-05-07 16:29:28 -07:00
Bill Zissimopoulos
ddba49dbea tst: memfs-dotnet: remove unnecessary OpenNodeSet 2017-05-07 16:28:49 -07:00
Bill Zissimopoulos
a6ff8a87de tst: memfs-dotnet: ReadDirectory fixes 2017-05-07 15:45:01 -07:00
Bill Zissimopoulos
bf64bcf9ba dotnet: fix problems with FullContext and GCHandle 2017-05-07 15:13:22 -07:00
Bill Zissimopoulos
8c5d9bda20 tst: memfs-dotnet: testing 2017-05-06 23:40:46 -07:00
Bill Zissimopoulos
f1ac28b0aa dotnet: log exceptions 2017-05-06 23:39:58 -07:00
Bill Zissimopoulos
ff725f931d tst: memfs-dotnet: testing 2017-05-06 23:10:40 -07:00
Bill Zissimopoulos
31519ba416 dotnet: bug fixes 2017-05-06 17:01:55 -07:00
Bill Zissimopoulos
0bca8f851c tst: memfs-dotnet: remove dead code 2017-05-06 15:06:29 -07:00
Bill Zissimopoulos
acf175da60 tst: memfs-dotnet: WIP 2017-05-06 14:49:17 -07:00
Bill Zissimopoulos
23eac24c84 dotnet: FileSystemBase.GetStreamEntry 2017-05-06 14:48:56 -07:00
Bill Zissimopoulos
0f9ef3bd51 tst: memfs-dotnet: WIP 2017-05-05 20:30:07 -07:00
Bill Zissimopoulos
2bdd54536e dotnet: reparse point WIP 2017-05-05 20:29:47 -07:00
Bill Zissimopoulos
060ebcca0d tst: memfs-dotnet: WIP 2017-05-05 18:24:17 -07:00
Bill Zissimopoulos
b38a89e485 dotnet: reparse point changes 2017-05-05 18:23:52 -07:00
Bill Zissimopoulos
b5bfeee027 dotnet: FileSystemHost: fixes 2017-05-05 16:15:29 -07:00
Bill Zissimopoulos
f36cacaf84 tst: memfs-dotnet: WIP 2017-05-05 14:47:48 -07:00
Bill Zissimopoulos
4278cec465 tst: memfs-dotnet: WIP 2017-05-05 12:08:32 -07:00
Bill Zissimopoulos
151627091b tst: memfs-dotnet: WIP 2017-05-04 23:00:53 -07:00
Bill Zissimopoulos
2ee3f02928 tst: memfs-dotnet: WIP 2017-05-04 21:56:46 -07:00
Bill Zissimopoulos
d77d3ccccf tools: version-info.bat: toggle executable bit 2017-05-04 15:19:11 -07:00
Bill Zissimopoulos
1e0c91658e doc: add cgofuse to known file systems 2017-04-28 14:52:05 -07:00
Bill Zissimopoulos
568096b560 build: installer: mark as Beta 2017-04-17 16:57:06 -07:00
Bill Zissimopoulos
b2e175a991 build: installer: mark as Beta 2017-04-17 16:54:17 -07:00
Bill Zissimopoulos
757c4f151d Update README to point to latest release 2017-04-17 16:46:44 -07:00
Bill Zissimopoulos
8b71e18972 inc: winfsp.hpp: refactor FileSystem class into FileSystemHost and FileSystemBase 2017-04-17 14:30:07 -07:00
Bill Zissimopoulos
4e7f988371 inc: winfsp.hpp: refactor FileSystem class into FileSystemHost and FileSystemBase 2017-04-17 13:20:07 -07:00
Bill Zissimopoulos
eb04d7ab90 build: installer: add cygfuse 2017-04-16 15:44:55 -07:00
Bill Zissimopoulos
d6c3b7304d Update README with chocolatey linl 2017-04-16 13:03:51 -07:00
Bill Zissimopoulos
1ee563cd13 src: dotnet: refactor FileSystem class into FileSystemHost and FileSystemBase 2017-04-16 11:46:16 -07:00
Bill Zissimopoulos
8787f2c528 inc: winfsp.hpp: FileSystem: ReadDirectoryEntry and friends 2017-04-14 00:01:08 -07:00
Bill Zissimopoulos
4c102ab57c inc: winfsp.hpp: SetDebugLogFile 2017-04-13 22:19:17 -07:00
Bill Zissimopoulos
bf87c539fd inc: winfsp.hpp: Service class improvements 2017-04-13 21:57:07 -07:00
Bill Zissimopoulos
d5802f3a5f inc: winfsp.hpp: improve C++ layer 2017-04-13 18:23:55 -07:00
Bill Zissimopoulos
c144d4d303 src: dotnet: FileSystem: convert Set* methods to properties 2017-04-13 16:33:32 -07:00
Bill Zissimopoulos
9770efde14 build: dotnet: change assembly versioning scheme (fix to 1.0.0.0) 2017-04-13 16:04:13 -07:00
Bill Zissimopoulos
197ce7c30a src: dotnet: check dll version during assembly load 2017-04-12 15:37:19 -07:00
Bill Zissimopoulos
5d8384a508 src: dll: FspFsctlFixServiceSecurity
- fix GetEffectiveRightsFromAclW ERROR_CIRCULAR_DEPENDENCY
2017-04-12 10:50:27 -07:00
Bill Zissimopoulos
8bb46a5f86 doc: update FAQ 2017-04-12 10:02:16 -07:00
Bill Zissimopoulos
a3087cb696 update Changelog 2017-04-12 00:31:13 -07:00
Bill Zissimopoulos
92b1a8c00d update README 2017-04-12 00:11:26 -07:00
Bill Zissimopoulos
bbf641e721 build: installer: add .NET feature 2017-04-11 22:55:09 -07:00
Bill Zissimopoulos
539ab9ce63 tst: passthrough-dotnet: remove EnableRestoreBackupPrivileges 2017-04-11 19:56:47 -07:00
Bill Zissimopoulos
a29390412b tst: passthrough-dotnet: include in test suite 2017-04-11 18:23:56 -07:00
Bill Zissimopoulos
739eb80cfb tst: passthrough-dotnet: EnableBackupRestorePrivileges 2017-04-11 16:46:11 -07:00
Bill Zissimopoulos
f9a470a0f0 tools: run-tests: sample running improvements 2017-04-11 16:03:10 -07:00
Bill Zissimopoulos
44358e118c build: installer: add passthrough-dotnet 2017-04-11 15:13:07 -07:00
Bill Zissimopoulos
2a7ee146f1 update License with reference to winfsp-msil.dll 2017-04-11 14:47:49 -07:00
Bill Zissimopoulos
0ddeb02235 build: dotnet: use older Assembly Linker for publisher policy 2017-04-11 14:43:18 -07:00
Bill Zissimopoulos
26d8ea1c1c build: dotnet: improvements 2017-04-11 14:07:04 -07:00
Bill Zissimopoulos
fa4aaf2fb7 build: installer: add winfsp-msil.dll in installation bin directory 2017-04-11 13:29:31 -07:00
Bill Zissimopoulos
7645a0185b build: dotnet: add version info to publisher policy 2017-04-11 12:01:51 -07:00
Bill Zissimopoulos
dcf38cdf08 build: installer: add .NET assembly and GAC it 2017-04-11 00:39:57 -07:00
Bill Zissimopoulos
c7ca500dd5 build: dotnet: update publisher policy 2017-04-10 23:03:16 -07:00
Bill Zissimopoulos
d9fcc8ca1c build: dotnet: strong name assembly and add publisher policy 2017-04-10 22:51:15 -07:00
Bill Zissimopoulos
259f2bf1c1 tst: passthrough-dotnet: fix security 2017-04-10 21:33:49 -07:00
Bill Zissimopoulos
67711082b0 tst: passthrough-dotnet: testing 2017-04-10 20:08:14 -07:00
Bill Zissimopoulos
f2d98bbf25 tst: passthrough-dotnet: major refactoring and testing 2017-04-10 14:48:26 -07:00
Bill Zissimopoulos
e40505adb5 tst: passthrough-dotnet: minor fix 2017-04-10 10:34:31 -07:00
Bill Zissimopoulos
ac7b7f4a1b tst: passthrough-dotnet: testing 2017-04-10 10:03:59 -07:00
Bill Zissimopoulos
aa53b1e5ef src: dotnet: fix UnmanagedFunctionPointer delegate lifetime 2017-04-09 21:37:04 -07:00
Bill Zissimopoulos
c4b73c8eda tst: passthrough-dotnet: Cleanup: minor fix 2017-04-09 17:58:46 -07:00
Bill Zissimopoulos
332bce6322 src: dotnet: fix Boolean marshalling 2017-04-09 17:37:22 -07:00
Bill Zissimopoulos
5ef1de2647 src: dotnet: fix FspFileSystemMountPointF prototype 2017-04-09 17:01:18 -07:00
Bill Zissimopoulos
de60e76b1d tst: passthrough-dotnet: testing 2017-04-09 02:01:19 -07:00
Bill Zissimopoulos
8f8e8fe086 src: dotnet: testing 2017-04-09 02:01:03 -07:00
Bill Zissimopoulos
0ac9a83026 build: version.properties: update version number 2017-04-08 22:15:49 -07:00
Bill Zissimopoulos
b8c97caec0 tst: passthrough-dotnet: update .gitignore 2017-04-08 22:08:24 -07:00
Bill Zissimopoulos
f9b8bfc020 src: dll,dotnet: add out-of-line API's 2017-04-08 21:13:21 -07:00
Bill Zissimopoulos
f938bf5e3f tst: passthrough-dotnet: ReadDirectory 2017-04-08 18:42:20 -07:00
Bill Zissimopoulos
a0df9babf9 src: dotnet: ReadDirectory helpers 2017-04-08 18:41:00 -07:00
Bill Zissimopoulos
0d9d8ef5a2 tst: passthrough-dotnet: WIP 2017-04-08 11:29:56 -07:00
Bill Zissimopoulos
668948ebc1 src: dll: SetDebugLogFile and other fixes 2017-04-08 11:29:32 -07:00
Bill Zissimopoulos
83c9351d38 tst: passthrough-dotnet: WIP 2017-04-07 22:28:57 -07:00
Bill Zissimopoulos
aa1e32494c src: dotnet: add FspDebugLogSetHandle 2017-04-07 22:28:24 -07:00
Bill Zissimopoulos
6365a553dc src: dotnet: WIP 2017-04-07 22:11:57 -07:00
Bill Zissimopoulos
1245a29be6 src: dotnet: WIP 2017-04-07 16:23:56 -07:00
Bill Zissimopoulos
c79785c2db src: dotnet: WIP 2017-04-07 13:52:26 -07:00
Bill Zissimopoulos
f117a89697 src: dotnet: WIP 2017-04-07 12:35:20 -07:00
Bill Zissimopoulos
33f5b8c05b src: dotnet: WIP 2017-04-07 12:31:51 -07:00
Bill Zissimopoulos
9a02a46cf4 tst: passthrough-dotnet: fix problem with vshost ignore Main return value 2017-04-07 11:03:58 -07:00
Bill Zissimopoulos
4d6fc3c848 src: dotnet: testing 2017-04-07 10:52:52 -07:00
Bill Zissimopoulos
964f2eed69 src: dotnet: Service testing 2017-04-07 10:29:50 -07:00
Bill Zissimopoulos
b45cff2881 tst: passthrough-dotnet: initial commit 2017-04-06 23:49:55 -07:00
Bill Zissimopoulos
f219885939 src: dotnet: testing 2017-04-06 23:48:58 -07:00
Bill Zissimopoulos
0cfc730745 tools: version-info.bat 2017-04-06 15:56:01 -07:00
Bill Zissimopoulos
a3643f8b02 build: reorganize winfsp.net project 2017-04-06 14:12:33 -07:00
Bill Zissimopoulos
de61eaf6b8 src: dotnet: Service improvements 2017-04-06 13:05:31 -07:00
Bill Zissimopoulos
075a2b6e4c build: version.properties: AssemblyVersion 2017-04-05 17:31:11 -07:00
Bill Zissimopoulos
37affbf572 build: version.properties: AssemblyVersion 2017-04-05 17:18:49 -07:00
Bill Zissimopoulos
20b3ecd0cd src: dotnet: WIP 2017-04-05 16:31:38 -07:00
Bill Zissimopoulos
c782c4d668 src: dotnet: add Service class 2017-04-05 16:25:38 -07:00
Bill Zissimopoulos
d545b8df26 src: dotnet: WIP 2017-04-03 17:21:54 -07:00
Bill Zissimopoulos
08e520e0ec src: dotnet: WIP 2017-04-03 17:07:32 -07:00
Bill Zissimopoulos
a5db7a2cca src: dotnet: WIP 2017-04-03 15:27:33 -07:00
Bill Zissimopoulos
74c2494bbd src: dotnet: WIP 2017-04-03 15:15:13 -07:00
Bill Zissimopoulos
858f77cdf7 src: dotnet: WIP 2017-04-03 14:54:26 -07:00
Bill Zissimopoulos
30dae34700 src: dotnet: WIP 2017-04-03 13:52:35 -07:00
Bill Zissimopoulos
36d50facd7 src: dotnet: WIP 2017-04-03 13:42:59 -07:00
Bill Zissimopoulos
55dd8797d8 src: dotnet: WIP 2017-04-03 12:55:08 -07:00
Bill Zissimopoulos
27114184d2 src: dotnet: WIP 2017-04-03 12:06:45 -07:00
Bill Zissimopoulos
1980f511ce src: dotnet: WIP 2017-04-03 11:42:39 -07:00
Bill Zissimopoulos
4cbee05849 src: dotnet: WIP 2017-04-03 10:45:41 -07:00
Bill Zissimopoulos
f2391d99d5 src: dotnet: WIP 2017-04-02 22:40:43 -07:00
Bill Zissimopoulos
fa9ff37de9 src: dotnet: WIP 2017-04-02 16:37:21 -07:00
Bill Zissimopoulos
39b60c1348 src: dotnet: WIP 2017-04-02 16:36:10 -07:00
Bill Zissimopoulos
5bc15a7e54 src: dotnet: FileSystem+NtStatus 2017-04-02 15:38:25 -07:00
Bill Zissimopoulos
81bc200fe7 src: dotnet: WIP 2017-04-02 15:20:31 -07:00
Bill Zissimopoulos
89324d2327 src: dotnet: WIP 2017-04-02 15:13:05 -07:00
Bill Zissimopoulos
47b81a8025 src: dotnet: WIP 2017-04-02 12:43:49 -07:00
Bill Zissimopoulos
02cec420e7 src: dotnet: WIP 2017-04-02 11:44:25 -07:00
Bill Zissimopoulos
8e7e959d8a src: dotnet: WIP 2017-04-02 11:31:06 -07:00
Bill Zissimopoulos
fc51b7cc22 src: dotnet: WIP 2017-04-01 18:00:34 -07:00
Bill Zissimopoulos
ff5850847f src: dotnet: WIP 2017-04-01 16:43:30 -07:00
Bill Zissimopoulos
ab462fb546 src: dotnet: WIP 2017-04-01 16:13:09 -07:00
Bill Zissimopoulos
a5eadc50a7 add .net dll and project 2017-04-01 01:06:40 -07:00
Bill Zissimopoulos
afe7f8d728 inc: winfsp.hpp: add convenience functions in Fsp namespace 2017-03-30 12:16:01 -07:00
Bill Zissimopoulos
c137d49dcd tst: passthrough-cpp: minor fix 2017-03-30 12:08:11 -07:00
Bill Zissimopoulos
b70337bac3 inc: winfsp.hpp: default VolumeParams are same as in C API 2017-03-30 11:50:51 -07:00
Bill Zissimopoulos
c9b5f25ffc tst: passthrough-cpp: minor improvements 2017-03-29 14:40:37 -07:00
Bill Zissimopoulos
96f6c28885 inc: winfsp.hpp: FSP_CPP_EXCEPTION_GUARD 2017-03-29 14:37:19 -07:00
Bill Zissimopoulos
deb8aed91f inc: winfsp.hpp: FSP_CPP_EXCEPTION_GUARD 2017-03-29 14:36:25 -07:00
Bill Zissimopoulos
fac270e596 inc: winfsp: add Service class 2017-03-28 17:32:19 -07:00
Bill Zissimopoulos
0189adac8f src: dll: Service: minor fix 2017-03-28 16:06:52 -07:00
Bill Zissimopoulos
af772d7a86 tools: run-tests: add passthrough-cpp 2017-03-28 10:10:21 -07:00
Bill Zissimopoulos
96554cc0ca tools: run-tests: add passthrough-cpp 2017-03-27 20:55:56 -07:00
Bill Zissimopoulos
ddb3698c89 installer: add winfsp.hpp and passthrough-cpp 2017-03-27 20:15:52 -07:00
Bill Zissimopoulos
9657ae31c3 tst: passthrough-cpp: FspLoad 2017-03-27 17:39:24 -07:00
Bill Zissimopoulos
0795774e9e inc: winfsp.hpp: testing 2017-03-27 17:38:52 -07:00
Bill Zissimopoulos
763f256e1f inc: winfsp.hpp: catch exceptions from file system operations 2017-03-27 16:25:35 -07:00
Bill Zissimopoulos
367f450e30 tst: passthrough-cpp: initial implementation 2017-03-27 13:44:41 -07:00
Bill Zissimopoulos
7afdee7c01 inc: winfsp.hpp: improvements 2017-03-27 13:43:43 -07:00
Bill Zissimopoulos
87c5f19ce1 inc: winfsp.hpp: Fsp::FileSystem::Mount 2017-03-26 23:19:33 -07:00
Bill Zissimopoulos
00d1a3176e inc: winfsp.hpp: initial implementation of a C++ layer 2017-03-26 23:10:22 -07:00
Bill Zissimopoulos
6318e7b0ef doc: update known file systems document 2017-03-24 17:10:23 -07:00
Bill Zissimopoulos
5d23b1fef8 doc: add known file systems document 2017-03-24 17:04:03 -07:00
Bill Zissimopoulos
44fe02d2fd doc: update Home 2017-03-24 16:41:01 -07:00
Bill Zissimopoulos
1f0de20b7f build: choco: update package description 2017-03-20 17:20:40 -07:00
Bill Zissimopoulos
bfd2e106ac build: choco: update package as per chocolatey review instructions 2017-03-20 15:30:33 -07:00
Bill Zissimopoulos
b1848e963f Merge branch 'DuroSoft-fuse-volume-label' 2017-03-19 21:33:53 -07:00
Bill Zissimopoulos
a29611fa2a dll: fuse: improve volname option handling 2017-03-19 18:06:21 -07:00
Bill Zissimopoulos
8a369bd48a Merge branch 'fuse-volume-label' of https://github.com/DuroSoft/winfsp into DuroSoft-fuse-volume-label 2017-03-19 16:59:50 -07:00
Bill Zissimopoulos
9ca7424d27 Revert "appveyor: disable windows defender"
This reverts commit 4f640755bc9b8958b86f0fc113e1ddd2cc950052.
2017-03-19 11:53:44 -07:00
Bill Zissimopoulos
4f640755bc appveyor: disable windows defender 2017-03-19 11:52:14 -07:00
Sam Kelly
c085a91991 add FUSE support for VolumeLabel via "volname" option
* closes #64
2017-03-19 00:40:45 -04:00
Sam Kelly
83cd3cab99 add name to CONTRIBUTORS list 2017-03-19 00:21:39 -04:00
Bill Zissimopoulos
67dff84a13 doc: update faq 2017-03-18 16:04:58 -07:00
Bill Zissimopoulos
c702a86fbf doc: add faq 2017-03-18 16:02:39 -07:00
Bill Zissimopoulos
f335a990af doc: add wiki home 2017-03-18 14:56:49 -07:00
Bill Zissimopoulos
ba68ab845b update Changelog 2017-03-13 15:28:16 -07:00
Bill Zissimopoulos
db0566701e dll: fuse: add fuse_* symbols for programs using FFI 2017-03-13 12:30:25 -07:00
Bill Zissimopoulos
433e62f813 dll: do not export FspFileSystemResolveReparsePointsInternal 2017-03-13 11:46:36 -07:00
Bill Zissimopoulos
6777de6569 update Changelog for v1.0 2017-03-11 16:45:40 -08:00
Bill Zissimopoulos
63ee24235b update Changelog for v1.0 2017-03-11 16:37:55 -08:00
Bill Zissimopoulos
c3eb46813e update Changelog for v1.0 2017-03-11 16:21:46 -08:00
Bill Zissimopoulos
bee0fa79b2 build: choco: rename chocolateyUninstall.ps1 to chocolateyBeforeModify.ps1 to properly handle upgrades 2017-03-11 15:06:48 -08:00
Bill Zissimopoulos
d907bf2769 inc: winfsp: RegGetValueW prototype and disable macro redef warnings 2017-03-11 14:32:12 -08:00
Bill Zissimopoulos
38bcece5ce build: choco: remove MSI after installation 2017-03-10 22:14:16 -08:00
Bill Zissimopoulos
193de36301 dll: fuse: debug output goes to stderr; configurable with -oDebugLog=FILE 2017-03-10 21:57:27 -08:00
Bill Zissimopoulos
c080e86f11 build: choco: add admin tag as per chocolatey validator 2017-03-10 15:23:54 -08:00
Bill Zissimopoulos
79811a2faa appveyor: add -y switch for chocolatey 2017-03-10 10:56:21 -08:00
Bill Zissimopoulos
b1e287727d appveyor: test chocolatey uninstall 2017-03-10 10:54:22 -08:00
Bill Zissimopoulos
2def18e271 build: choco: add chocolateyUninstall.ps1 2017-03-10 10:44:56 -08:00
Bill Zissimopoulos
3ddc2249f6 build: choco: add chocolateyUninstall.ps1 2017-03-10 10:37:19 -08:00
Bill Zissimopoulos
709ead9e06 build: choco: initial chocolatey package implementation 2017-03-09 22:14:50 -08:00
Bill Zissimopoulos
7c574da261 build: version.properties: 2017 Gold 2017-03-09 15:54:46 -08:00
Bill Zissimopoulos
0980365082 dll: fuse: fuse_intf_GetVolumeInfo: return default info when statfs unimplemented 2017-03-09 14:59:01 -08:00
Bill Zissimopoulos
ba46d9fef8 update Changelog, README, etc. 2017-02-25 17:59:37 -08:00
Bill Zissimopoulos
4c0386bf8d sys: hardcode AlwaysUseDoubleBuffering for Reads 2017-02-25 11:22:22 -08:00
Bill Zissimopoulos
6774c34422 sys: FspProcessBufferAcquire: fix silly mistake when using ZwAllocateVirtualMemory 2017-02-23 22:24:32 -08:00
Bill Zissimopoulos
3215d8e26a sys: ProcessBuffer: DEBUGTEST 2017-02-23 20:26:14 -08:00
Bill Zissimopoulos
7911f1354f sys: ProcessBuffer: improvements 2017-02-23 17:39:28 -08:00
Bill Zissimopoulos
28f97c2619 sys: ProcessBuffer: conditional usage 2017-02-23 16:36:21 -08:00
Bill Zissimopoulos
4b43cc590f sys: initial ProcessBuffer implementation 2017-02-23 16:06:55 -08:00
Bill Zissimopoulos
441c45c77f sys: fix a couple of static analysis issues 2017-02-21 15:07:06 -08:00
Bill Zissimopoulos
c246acb2d3 dll: FspVersion 2017-02-17 15:22:31 -08:00
Bill Zissimopoulos
50ed020e16 dll: FspVersion 2017-02-17 15:20:57 -08:00
Bill Zissimopoulos
12704a3a4a dll: FspFileSystemSetMountPointEx and related refactoring 2017-02-16 20:30:39 -08:00
Bill Zissimopoulos
186f7cd9ee dll: fuse: minor fix 2017-02-16 17:26:07 -08:00
Bill Zissimopoulos
50830f0bf2 bump version to 2017 RC3 2017-02-16 17:25:54 -08:00
Bill Zissimopoulos
86025aa30b dll: fuse: fuse_mount: now also accepts cygwin paths 2017-02-16 16:53:06 -08:00
Bill Zissimopoulos
31e6f15eaf tst: passthrough-fuse: FSP_FUSE_CAP_*: testing 2017-02-15 18:07:25 -08:00
Bill Zissimopoulos
5ce6d74e90 tst: passthrough-fuse: FSP_FUSE_CAP_*: testing 2017-02-15 17:26:37 -08:00
Bill Zissimopoulos
02ffa6afb2 tst: passthrough-fuse: ptfs_init 2017-02-13 22:03:39 -08:00
Bill Zissimopoulos
712870ddd9 tst: passthrough-fuse: FSP_FUSE_CAP_* 2017-02-13 21:53:37 -08:00
Bill Zissimopoulos
35d1adb360 dll: fuse: improve SectorSize: handling 2017-02-13 16:21:26 -08:00
Bill Zissimopoulos
3b9f9ce93b dll: fuse: discard unused options 2017-02-13 15:11:09 -08:00
Bill Zissimopoulos
a7c5e4f80c dll: fuse: default FileInfoTimeout is now 1000ms 2017-02-12 13:25:43 -08:00
Bill Zissimopoulos
0b826f04c2 tst: winfsp-tests: exec-test: disable test that fails under shares 2017-02-12 11:49:46 -08:00
Bill Zissimopoulos
69d53b7a28 tst: winfsp-tests: exec-test: disable test that fails under shares 2017-02-12 11:33:56 -08:00
Bill Zissimopoulos
877bd97ba8 tst: winfsp-tests: exec-test 2017-02-12 10:42:14 -08:00
Bill Zissimopoulos
559b7e80a3 tst: winfsp-tests: exec-test 2017-02-12 10:29:30 -08:00
Bill Zissimopoulos
495c78eb25 tst: winfsp-tests: exec-test 2017-02-12 00:26:20 -08:00
Bill Zissimopoulos
cf69d6a08d tst: winfsp-tests: delete_standby_test 2017-02-11 10:07:03 -08:00
Bill Zissimopoulos
0d95bb9b14 tst: winfsp-tests: delete_standby_test: disable parts that fail with shares and passthrough 2017-02-10 23:24:05 -08:00
Bill Zissimopoulos
cf48d19759 tst: winfsp-tests: delete_standby_test: disable portion that fails under a share 2017-02-10 22:19:25 -08:00
Bill Zissimopoulos
14c602ccd8 tst: winfsp-tests: delete_standby_test 2017-02-10 21:31:55 -08:00
Bill Zissimopoulos
2d45082d80 tst: winfsp-tests: delete_standby_test 2017-02-10 19:50:16 -08:00
Bill Zissimopoulos
25cf527af4 tst: winfsp-tests: rename_standby_test 2017-02-10 15:47:44 -08:00
Bill Zissimopoulos
76d081937e tst: winfsp-tests: rename_standby_test 2017-02-10 15:25:36 -08:00
Bill Zissimopoulos
ccd4bb869c Experimental fix for github issue #45 2017-02-10 12:39:53 -08:00
Bill Zissimopoulos
46d5c98926 tst: winfsp-tests: rename_standby_test 2017-02-09 17:38:24 -08:00
Bill Zissimopoulos
1726ca8ccb Update README as per issue #48 2017-02-09 12:06:54 -08:00
Bill Zissimopoulos
b8c257f996 Update README as per issue #48 2017-02-09 12:04:51 -08:00
Bill Zissimopoulos
53e6894298 doc: use asciidoc for winfsp.h reference 2017-02-08 17:36:17 -08:00
Bill Zissimopoulos
10d1ba707e Update README.md 2017-02-08 13:42:49 -08:00
Bill Zissimopoulos
c234e2af2a Update README.md 2017-02-08 13:42:30 -08:00
Bill Zissimopoulos
fa652cdb56 launcher: change registry location 2017-02-07 17:15:41 -08:00
Bill Zissimopoulos
aeaeba0dd6 launcher: change registry location 2017-02-07 14:53:27 -08:00
Bill Zissimopoulos
b299027f6e Update Changelog 2017-02-07 12:48:40 -08:00
Bill Zissimopoulos
5edd9eb548 Update Changelog 2017-02-07 12:45:32 -08:00
Bill Zissimopoulos
fbc24bcca9 Update Changelog 2017-02-07 12:44:59 -08:00
Bill Zissimopoulos
4ef6dcb71d Update README.md 2017-02-07 12:35:14 -08:00
Bill Zissimopoulos
b8f0d08672 Update README.md 2017-02-07 12:32:29 -08:00
Bill Zissimopoulos
5c82044295 Update README.md 2017-02-07 12:26:11 -08:00
Bill Zissimopoulos
e3b5426e45 Update README.md 2017-02-07 12:25:27 -08:00
Bill Zissimopoulos
d34f262c02 Merge branch 'pvt-license-change' into release/1.0 2017-02-07 12:21:48 -08:00
Bill Zissimopoulos
ede72e4c5f tst: passthrough: fix missed FspFileSystemReleaseDirectoryBuffer in case of error 2017-02-06 12:05:30 -08:00
Bill Zissimopoulos
9c4b73dac1 add FLOSS exception to License 2017-02-06 11:51:29 -08:00
Bill Zissimopoulos
9ecfc64178 doc: update tutorial 2017-02-04 15:22:42 -08:00
Bill Zissimopoulos
fbe46d8c81 doc: update tutorial 2017-02-04 14:56:01 -08:00
Bill Zissimopoulos
2a12ed490d tools: run-tests: run mountpoint-drive tests with --resilient 2017-02-03 18:50:39 -08:00
Bill Zissimopoulos
c6d9e68c3f Revert "tst: winfsp-tests: getfileinfo_dotest: CREATE_ALWAYS instead of CREATE_NEW"
This reverts commit dca3cb93f32c3d19526607a613bc762ec8a658d8.
2017-02-03 18:48:55 -08:00
Bill Zissimopoulos
bfc41127d0 sys: FspFsvolCreateSharingViolationOplock: fix problem with missed FspFsvolCreatePostClose 2017-02-03 18:08:11 -08:00
Bill Zissimopoulos
6e70500afc sys: FspFsvolCreateComplete: populate FileNode and FileDesc before name normalization 2017-02-03 17:36:16 -08:00
Bill Zissimopoulos
dca3cb93f3 tst: winfsp-tests: getfileinfo_dotest: CREATE_ALWAYS instead of CREATE_NEW 2017-02-02 22:12:49 -08:00
Bill Zissimopoulos
2f0061b4ba tools: run-tests: sample-passthrough-fuse 2017-02-02 21:44:36 -08:00
Bill Zissimopoulos
3fcef3b0fa tools: run-tests: sample-passthrough-fuse 2017-02-02 21:39:13 -08:00
Bill Zissimopoulos
6a0574e309 tools: run-tests: sample-passthrough-fuse 2017-02-02 17:51:08 -08:00
Bill Zissimopoulos
0c945b67f3 dll: fuse: use -ouid=-1,gid=-1 to specify user/group who mounted file system 2017-02-02 17:06:10 -08:00
Bill Zissimopoulos
25b3e111fa dll: fuse: fuse.pc file renamed to fuse.pc.in 2017-02-02 15:01:22 -08:00
Bill Zissimopoulos
09101129a3 tst: passthrough: EnableBackupRestorePrivileges: minor fix 2017-02-02 14:51:45 -08:00
Bill Zissimopoulos
3700b375a7 tst: passthrough-fuse: on Windows allow the --VolumePrefix option to specify path 2017-02-01 21:37:53 -08:00
Bill Zissimopoulos
22fccdb575 build: bump version to RC2 and files to installer 2017-02-01 16:10:13 -08:00
Bill Zissimopoulos
c4932f7c7e tools: run-tests: include passthrough-fuse sample test 2017-02-01 15:38:46 -08:00
Bill Zissimopoulos
303cadb55d tst: passthrough-fuse: update Makefile to link with CYGFUSE or WinFsp-FUSE 2017-02-01 15:30:51 -08:00
Bill Zissimopoulos
5617d09edc tst: passthrough-fuse:
- When building for Windows (rather than Cygwin or POSIX OS)
allow the syntax C$\Path as an alternative to C:\Path.
2017-02-01 13:35:13 -08:00
Bill Zissimopoulos
eefaad241d doc: update tutorial 2017-01-31 17:29:03 -08:00
Bill Zissimopoulos
11dce32baa doc: update tutorial 2017-01-31 17:21:55 -08:00
Bill Zissimopoulos
3b8396dc27 tst: passthrough: minor fix 2017-01-31 16:53:27 -08:00
Bill Zissimopoulos
da7082030a doc: update tutorial 2017-01-31 16:36:30 -08:00
Bill Zissimopoulos
7425eba8af inc: winfsp.h: FspLoad 2017-01-31 16:07:50 -08:00
Bill Zissimopoulos
acf6ce1008 inc: winfsp.h: FspLoad 2017-01-31 15:56:00 -08:00
Bill Zissimopoulos
06f6c192ed tst: passthrough, passthrough-fuse: WinFspLoad: eliminate RRF_SUBKEY_WOW6432KEY 2017-01-31 15:27:15 -08:00
Bill Zissimopoulos
b7a06c7046 tools: run-tests 2017-01-31 14:52:20 -08:00
Bill Zissimopoulos
edb675d2d4 tools: run-tests 2017-01-31 12:21:46 -08:00
Bill Zissimopoulos
9533815931 update Changelog 2017-01-31 12:19:54 -08:00
Bill Zissimopoulos
fe74fc4013 tools: run-tests: sample testing fix 2017-01-31 11:31:00 -08:00
Bill Zissimopoulos
5bd6c1a122 dll: np: NPAddConnection: check volume access and report success/failure 2017-01-31 11:29:24 -08:00
Bill Zissimopoulos
7b15d32c33 appveyor: sample testing 2017-01-30 23:33:50 -08:00
Bill Zissimopoulos
c186289672 tools: run-tests: sample-passthrough-fuse: add but keep disabled 2017-01-30 23:32:22 -08:00
Bill Zissimopoulos
ff649e05c5 tools: run-tests: sample-passthrough* 2017-01-30 23:10:34 -08:00
Bill Zissimopoulos
9a9d3cd4e8 installer: add passthrough-fuse and fsreg.bat 2017-01-30 16:23:45 -08:00
Bill Zissimopoulos
d1bb65a998 tst: winfsp-tests: add --share-prefix option:
- this accommodates network file systems that have mapped drives
2017-01-30 16:07:44 -08:00
Bill Zissimopoulos
178200fd63 doc: update tutorial 2017-01-30 15:32:48 -08:00
Bill Zissimopoulos
396d9d97d2 tst: passthrough: enable backup/restore privileges if able 2017-01-30 15:22:20 -08:00
Bill Zissimopoulos
1d35069aab doc: update tutorial 2017-01-30 14:41:33 -08:00
Bill Zissimopoulos
4421c82ce0 doc: update tutorial 2017-01-30 14:34:44 -08:00
Bill Zissimopoulos
36f0978971 dll: fuse: allow rename for filenames that differ only in case 2017-01-30 11:59:21 -08:00
Bill Zissimopoulos
dae4bad732 tst: passthrough-fuse: testing 2017-01-29 21:25:50 -08:00
Bill Zissimopoulos
75744571ff dll: debug: fix problem with debug logs under 32-bits 2017-01-29 21:23:44 -08:00
Bill Zissimopoulos
0494726f52 tst: passthrough-fuse: testing 2017-01-29 18:06:56 -08:00
Bill Zissimopoulos
a964ab1b73 dll: fuse: CanDelete bug fix 2017-01-29 17:38:13 -08:00
Bill Zissimopoulos
796010c9fe tst: passthrough-fuse: testing 2017-01-29 17:28:40 -08:00
Bill Zissimopoulos
dc343ecbe5 tst: passthrough-fuse: testing 2017-01-29 17:07:22 -08:00
Bill Zissimopoulos
706fa2cc07 tst: passthrough-fuse: fi_fd, fi_setfd, etc. macros 2017-01-29 16:45:21 -08:00
Bill Zissimopoulos
c0aaebd0a5 tst: passthrough-fuse: windows-posix layer: dirfd 2017-01-29 15:45:36 -08:00
Bill Zissimopoulos
9c2b4e5631 tst: passthrough-fuse: testing 2017-01-29 13:59:29 -08:00
Bill Zissimopoulos
206b85c278 tst: passthrough-fuse: testing 2017-01-29 13:48:29 -08:00
Bill Zissimopoulos
075d1821a2 tst: passthrough-fuse: windows-posix layer 2017-01-29 12:44:18 -08:00
Bill Zissimopoulos
c252382204 tst: passthrough-fuse: windows-posix layer 2017-01-29 12:34:28 -08:00
Bill Zissimopoulos
a91e5b01ab tst: passthrough-fuse: windows-posix layer 2017-01-29 10:29:37 -08:00
Bill Zissimopoulos
473914d45f tst: passthrough-fuse: initial checkin 2017-01-28 22:47:46 -08:00
Bill Zissimopoulos
e12e3630bb doc: update tutorial document 2017-01-28 12:40:42 -08:00
Bill Zissimopoulos
960c627924 tst: passthrough: reorg project 2017-01-28 12:34:10 -08:00
Bill Zissimopoulos
f97ef5704f dll: fuse: reimplement ReadDirectory 2017-01-28 11:49:57 -08:00
Bill Zissimopoulos
41605a3d5a doc: update tutorial 2017-01-27 15:40:04 -08:00
Bill Zissimopoulos
e4f0406c4f tools: fsreg
tst: passthrough: support passing passthrough directory using -u
2017-01-27 13:38:45 -08:00
Bill Zissimopoulos
b5bf84b618 installer: add passthrough sample 2017-01-27 11:10:20 -08:00
Bill Zissimopoulos
3c340345c0 tst: passthrough: PassQueryDirectoryPattern 2017-01-26 23:22:59 -08:00
Bill Zissimopoulos
63c23f382b inc: fsctl: PassQueryDirectoryPattern 2017-01-26 23:09:58 -08:00
Bill Zissimopoulos
de5ef0c81d tst: winfsp-tests: --case-insensitive-cmp 2017-01-26 22:58:49 -08:00
Bill Zissimopoulos
7288605f65 tst: passthrough: use FspFileSystem*DirectoryBuffer API's 2017-01-26 16:39:06 -08:00
Bill Zissimopoulos
55a7864173 dll: FspFileSystem*DirectoryBuffer API's 2017-01-26 16:30:33 -08:00
Bill Zissimopoulos
4fe72ab332 sys,dll: ReadDirectory: add Marker, remove Offset 2017-01-25 10:51:37 -08:00
Bill Zissimopoulos
76a2926116 sys,dll: ReadDirectory: add Marker, remove Offset 2017-01-24 20:20:02 -08:00
Bill Zissimopoulos
7843c73d34 sys,dll: ReadDirectory: add Marker, remove Offset 2017-01-24 18:10:13 -08:00
Bill Zissimopoulos
ebad86387c tst: passthrough: testing 2017-01-23 14:33:07 -08:00
Bill Zissimopoulos
5475c414b3 doc: tutorial: minor fixes 2017-01-23 11:23:19 -08:00
Bill Zissimopoulos
e3e111ab27 doc: add tutorial document 2017-01-23 10:52:26 -08:00
Bill Zissimopoulos
9cd6710438 tst: passthrough: minor fix 2017-01-22 16:47:50 -08:00
Bill Zissimopoulos
a5f8736b1e tst: passthrough: ReadDirectory improvements 2017-01-20 20:47:55 -08:00
Bill Zissimopoulos
2ced698256 tst: passthrough: testing 2017-01-20 17:46:43 -08:00
Bill Zissimopoulos
53a4bdc478 tst: passthrough file system: WIP 2017-01-20 13:16:11 -08:00
Bill Zissimopoulos
eea92e89ef tst: passthrough file system: WIP 2017-01-20 13:05:22 -08:00
Bill Zissimopoulos
d519145f61 tst: passthrough file system: WIP 2017-01-20 12:38:25 -08:00
Bill Zissimopoulos
2809f56217 tst: passthrough file system: WIP 2017-01-20 12:03:06 -08:00
Bill Zissimopoulos
8cb76783ad tst: passthrough file system: WIP 2017-01-20 11:07:39 -08:00
Bill Zissimopoulos
117ab9c3e4 tst: passthrough file system: WIP 2017-01-20 10:38:31 -08:00
Bill Zissimopoulos
61a001baf1 tst: passthrough file system: WIP 2017-01-20 00:28:18 -08:00
Bill Zissimopoulos
d0c700eb0f tst: passthrough file system: WIP 2017-01-20 00:13:54 -08:00
Bill Zissimopoulos
b774aea4f4 tst: passthrough file system: WIP 2017-01-19 23:58:36 -08:00
Bill Zissimopoulos
f8e4c1bbc4 tst: passthrough file system: WIP 2017-01-19 22:44:31 -08:00
Bill Zissimopoulos
3bbff30f14 tst: passthrough file system: skeleton 2017-01-19 17:09:02 -08:00
Bill Zissimopoulos
2fe4e18d9c dll: FspFileSystemPreflight 2017-01-16 18:48:05 -08:00
Bill Zissimopoulos
b65322c2ac dll: FspPathIsDrive: bug fix 2017-01-16 18:21:56 -08:00
Bill Zissimopoulos
7764663386 dll: FspFileSystemPreflight 2017-01-16 14:54:10 -08:00
Bill Zissimopoulos
c6ae62f301 Update README - add installer link 2017-01-09 15:34:17 -08:00
Bill Zissimopoulos
6f22828060 tools: build: ensure that driver.cab is properly signed 2017-01-09 12:56:13 -08:00
Bill Zissimopoulos
7c2de68892 tools: build: create single driver.cab file 2017-01-09 12:37:39 -08:00
Bill Zissimopoulos
4656e8ed26 tools: build: incorporate sysdev signed drivers in build 2017-01-08 00:07:03 -08:00
Bill Zissimopoulos
be98326bbb tools: build: create driver.cab for sysdev 2017-01-07 20:59:36 -08:00
Bill Zissimopoulos
52acc3bc48 update Changelog 2017-01-06 12:47:11 -08:00
Bill Zissimopoulos
f68bc75255 build: include git short hash when versioning 2017-01-06 11:35:10 -08:00
Bill Zissimopoulos
029942bbac Update README 2017-01-05 16:54:46 -08:00
Bill Zissimopoulos
cb0c7def54 update README 2017-01-05 16:45:07 -08:00
Bill Zissimopoulos
5fbd75926b update README 2017-01-05 16:11:49 -08:00
Bill Zissimopoulos
bc9bcefc62 doc: add NTFS compatibility document 2017-01-05 15:56:15 -08:00
Bill Zissimopoulos
a57325e8af update source copyright notices for 2017 2017-01-05 13:56:18 -08:00
Bill Zissimopoulos
466922787d doc: update winfsp.h reference 2017-01-05 13:48:50 -08:00
Bill Zissimopoulos
9dc8aca710 inc: winfsp.h: update source documentation 2017-01-05 13:45:30 -08:00
Bill Zissimopoulos
88aeb83211 doc: fix file name case 2017-01-05 12:54:40 -08:00
Bill Zissimopoulos
a7cee1eafe doc: update testing document 2017-01-05 12:34:06 -08:00
Bill Zissimopoulos
eb0816db56 sys: create: do FspFsvolCreatePostClose when normalized name check fails 2017-01-04 16:26:12 -08:00
Bill Zissimopoulos
51833751d0 appveyor: reenable all jobs 2017-01-04 15:15:14 -08:00
Bill Zissimopoulos
155344ea61 appveyor: memory.dmp test 2017-01-04 15:03:03 -08:00
Bill Zissimopoulos
3874e2a6b5 appveyor: upload perf-tests results as artifact 2017-01-04 14:53:45 -08:00
Bill Zissimopoulos
c5740029f7 appveyor: optimize yml file 2017-01-04 14:41:15 -08:00
Bill Zissimopoulos
9973c4c963 appveyor: optimize yml file 2017-01-04 14:39:12 -08:00
Bill Zissimopoulos
6cfda75447 tools: run-perf-tests: 'self' option changed to 'baseline' 2017-01-04 14:28:52 -08:00
Bill Zissimopoulos
c7d6fc355b tools: run-perf-tests: specialized testing using the self option 2017-01-04 14:26:02 -08:00
Bill Zissimopoulos
b062f8683c appveyor: temporary change 2017-01-04 13:47:50 -08:00
Bill Zissimopoulos
cec5f0be08 appveyor: temporary change 2017-01-04 13:45:23 -08:00
Bill Zissimopoulos
40b61f7667 tools: run-perf-tests: fix 2017-01-04 13:44:22 -08:00
Bill Zissimopoulos
7c383654bd appveyor: perf tests job 2017-01-04 13:07:51 -08:00
Bill Zissimopoulos
9e4e7d4bcf tools: run-tests: ifstest: disable StreamNotifyNameTest 2017-01-03 23:40:49 -08:00
Bill Zissimopoulos
638e5a20b6 sys: FspFileNodeCopyActiveList, FspFileNodeCopyOpenList 2017-01-03 23:14:33 -08:00
Bill Zissimopoulos
95bbb584eb sys: FspFileNodeOpen,FspFileNode: maintain active list 2017-01-03 18:57:00 -08:00
Bill Zissimopoulos
1d8241cba7 sys: FspFileNodeNotifyChange: FILE_NOTIFY_CHANGE_STREAM_WRITE 2017-01-03 12:17:52 -08:00
Bill Zissimopoulos
460726df83 tst: memfs: Cleanup now properly update metadata on MainFileNode 2017-01-03 12:07:52 -08:00
Bill Zissimopoulos
b5cefc59e9 tools: run-tests.bat 2017-01-03 10:43:57 -08:00
Bill Zissimopoulos
e9ca1a8996 tools: run-tests 2017-01-03 10:12:44 -08:00
Bill Zissimopoulos
8c0f609a93 tools: run-tests: ifstest 2017-01-03 00:56:58 -08:00
Bill Zissimopoulos
23eabe5939 sys: FspFsvolFileSystemControlReparsePoint: FSCL_DELETE_REPARSE_POINT 2017-01-03 00:48:12 -08:00
Bill Zissimopoulos
eecca688bc sys: FspFileNodeInvalidateFileInfo: use after setting/deleting reparse point 2017-01-01 12:53:58 -08:00
Bill Zissimopoulos
23d2083d8f sys: FspFsvolFileSystemControlReparsePoint 2017-01-01 11:23:38 -08:00
Bill Zissimopoulos
8d379a4c8b tools: run-tests: ifstest: enable ReparsePoints tests 2016-12-31 23:36:45 -08:00
Bill Zissimopoulos
830985d331 sys: FspFsvolFileSystemControlReparsePoint: STATUS_ACCESS_DENIED 2016-12-31 23:01:40 -08:00
Bill Zissimopoulos
6b37e2ef12 sys: FspFsvolFileSystemControlReparsePointComplete 2016-12-31 21:26:12 -08:00
Bill Zissimopoulos
62dbaf56e3 sys: FspFsvolFileSystemControlReparsePointComplete 2016-12-31 20:50:03 -08:00
Bill Zissimopoulos
d301164609 sys: FspFsvolFileSystemControlReparsePointComplete: STATUS_INVALID_PARAMETER 2016-12-31 16:56:02 -08:00
Bill Zissimopoulos
ada3e1b0e5 tools: run-tests: ifstest: do not output unnamed tests 2016-12-31 16:32:33 -08:00
Bill Zissimopoulos
13d6ec3638 sys: FspFileNodeRenameCheck: allow multiple handles open on the file being renamed 2016-12-31 15:28:26 -08:00
Bill Zissimopoulos
2210561b65 sys: FspIopDispatchComplete: check user mode file system response 2016-12-31 11:22:27 -08:00
Bill Zissimopoulos
1713ce9c9e sys: FSP_STATUS_IGNORE_BIT 2016-12-30 19:48:19 -08:00
Bill Zissimopoulos
8f25dd6cab sys: FspIopCompleteIrpEx:
- only update statistics if we actually have a reference to the DeviceObject
2016-12-30 15:36:06 -08:00
Bill Zissimopoulos
c9485ff214 tools: run-tests: ifstest: add information about disabled tests 2016-12-30 15:03:42 -08:00
Bill Zissimopoulos
5ce1a722b3 tools: run-tests: ifstest: FileInformation tests 2016-12-30 14:43:15 -08:00
Bill Zissimopoulos
27315c1111 sys: FspFsvolQueryInformation,FspFsvolSetInformation:
- return STATUS_INVALID_PARAMETER on volume handles
2016-12-30 14:40:28 -08:00
Bill Zissimopoulos
bd38a39dbd sys: FileHardLinkInformation,FileLinkInformation: return STATUS_NOT_SUPPORTED 2016-12-30 14:14:54 -08:00
Bill Zissimopoulos
766734a8e3 sys: FileAlternateNameInformation: return STATUS_OBJECT_NAME_NOT_FOUND 2016-12-30 13:59:56 -08:00
Bill Zissimopoulos
b242a449b8 tools: run-tests: ifstest: enable FileInformation (not all tests pass yet) 2016-12-30 13:43:17 -08:00
Bill Zissimopoulos
c6a6fdfc36 sys: FSCTL_GET_RETRIEVAL_POINTERS 2016-12-30 13:42:46 -08:00
Bill Zissimopoulos
843d3f0362 sys: FspFsvolSetBasicInformation: invalidate dir caches 2016-12-30 11:01:52 -08:00
Bill Zissimopoulos
5190923c9a sys: FspFsvolQueryDirectoryRetry: on RestartScan do not always reset DirectoryPattern 2016-12-29 15:57:02 -08:00
Bill Zissimopoulos
2f8ac3765d sys: FspFileNodeCleanup:
- Handle the scenario where there are cleaned up, but unclosed streams in the context table.
2016-12-29 14:18:04 -08:00
Bill Zissimopoulos
e4b4e6a1f9 sys: FSP_FILE_NODE::MainFileNode: reference/dereference on create/delete 2016-12-29 13:16:11 -08:00
Bill Zissimopoulos
fa54898c64 appveyor: improvements 2016-12-28 21:50:22 -08:00
Bill Zissimopoulos
2f82d91e1f appveyor: save memory.dmp 2016-12-28 21:30:24 -08:00
Bill Zissimopoulos
7574c39ffb tools: run-tests: check whether ifstest could remove its directories 2016-12-28 17:41:35 -08:00
Bill Zissimopoulos
bdc02c8ab5 tst: memfs: ReadDirectory fix with concurrent deletes 2016-12-28 16:49:21 -08:00
Bill Zissimopoulos
15c16d7070 tools: run-tests: ifstest: enable ChangeNotification 2016-12-27 22:27:13 -08:00
Bill Zissimopoulos
ba312de59b sys: security: change notification 2016-12-27 22:24:42 -08:00
Bill Zissimopoulos
5824a24bf4 sys: FspFileNodeNotifyChange: significant improvements 2016-12-27 21:30:56 -08:00
Bill Zissimopoulos
f0a0787f6b update submodules 2016-12-27 17:07:58 -08:00
Bill Zissimopoulos
c17b84cff2 sys: statistics: fix stupid mistake when having multiple processors 2016-12-27 16:43:53 -08:00
Bill Zissimopoulos
168acb1a1f sys: statistics: implement FSCTL_FILESYSTEM_GET_STATISTICS 2016-12-26 22:45:48 -08:00
Bill Zissimopoulos
c8206751d2 sys,dll: Flush now takes FileInfo parameter 2016-12-26 13:59:53 -08:00
Bill Zissimopoulos
bec91873fe inc: fsctl: HasTrailingBackslash: allows for better checking user mode 2016-12-24 11:28:59 -08:00
Bill Zissimopoulos
9bf0d5d46d tools: run-tests: ifstest: enable CloseCleanupDelete (-UpdateOnCloseTest) 2016-12-23 17:16:07 -08:00
Bill Zissimopoulos
2d85c7bf73 tst: memfs: update parent timestamp on create/delete 2016-12-23 17:12:23 -08:00
Bill Zissimopoulos
ff3436718c sys: FSP_FILE_DESC::DidSetMetadata 2016-12-23 16:26:16 -08:00
Bill Zissimopoulos
69f6f661ba sys,dll: Cleanup, file times overhaul 2016-12-23 15:30:39 -08:00
Bill Zissimopoulos
6e52def53c tools: run-tests: ifstest: enable all tests that pass 2016-12-22 15:59:26 -08:00
Bill Zissimopoulos
2212d021e1 appveyor: run ifstest 2016-12-22 13:23:03 -08:00
Bill Zissimopoulos
7b94f2bebf sys: FspFileNodeSetFileInfo: TruncateOnClose 2016-12-21 16:45:01 -08:00
Bill Zissimopoulos
c897ddd864 sys,dll: Cleanup/TruncateOnClose overhaul 2016-12-21 16:09:24 -08:00
Bill Zissimopoulos
8d6314e2db tst: winfsp-tests: create_allocation_test 2016-12-20 10:56:35 -08:00
Bill Zissimopoulos
eec63332e0 sys: fileinfo: correctly set AllInformation and StandardInformation DeletePending flag 2016-12-19 13:36:11 -08:00
Bill Zissimopoulos
04186ea834 installer: change product name to WinFsp 2017 2016-12-19 10:46:32 -08:00
Bill Zissimopoulos
3adcf70748 sys: disallow creating a ReadOnly and DeleteOnClose file 2016-12-18 21:50:11 -08:00
Bill Zissimopoulos
33e8b5df04 sys,dll: create: correctly handle FILE_SUPERSEDE 2016-12-18 16:56:11 -08:00
Bill Zissimopoulos
154933ecab sys: overwrite: check hidde/system attributes (IFSTEST) 2016-12-18 16:02:32 -08:00
Bill Zissimopoulos
c760cf9563 tst: winfsp-tests: create_namelen_test: disable test in cases that it cannot work 2016-12-18 14:15:08 -08:00
Bill Zissimopoulos
245bba0a17 sys: name: fix warning on x86 builds 2016-12-18 13:35:25 -08:00
Bill Zissimopoulos
3008575bdf tst: winfsp-tests: create_namelen_test 2016-12-18 12:51:57 -08:00
Bill Zissimopoulos
2ce434efbd tst: run-tests: ifstest 2016-12-18 12:04:20 -08:00
Bill Zissimopoulos
94ea4f65f7 sys: FspFileNameIsValid, FspFileNameIsValidPattern: check path component length
tst: memfs: allow filenames to be 512 chars long
2016-12-18 11:51:23 -08:00
Bill Zissimopoulos
c780912810 sys: create: fix status return (IFSTEST) 2016-12-17 12:43:00 -08:00
Bill Zissimopoulos
299605b8fc sys: FILE_ATTRIBUTE_DIRECTORY support 2016-12-17 12:13:53 -08:00
Bill Zissimopoulos
86bccd763c tools: run-tests: ifstest 2016-12-16 23:55:19 -08:00
Bill Zissimopoulos
856d3bdefe tools: run-tests: ifstest 2016-12-16 23:10:13 -08:00
Bill Zissimopoulos
104c830437 tools: run-tests: ifstest 2016-12-16 22:54:40 -08:00
Bill Zissimopoulos
f35a93d1f7 tools: run-tests: ifstest 2016-12-16 20:20:49 -08:00
Bill Zissimopoulos
2d9b1b80fa sys: lockctl: fix hang uncovered by IFSTEST 2016-12-16 16:31:00 -08:00
Bill Zissimopoulos
f1ee19d8dc tst: winfsp-tests: getvolinfo_test: do not do short name testing with shares 2016-12-15 16:52:36 -08:00
Bill Zissimopoulos
671c0c12ab sys: FSCTL_QUERY_PERSISTENT_VOLUME_STATE 2016-12-15 16:15:22 -08:00
Bill Zissimopoulos
6eb2879374 tst: memfs: check FileName length in Create/Open 2016-12-15 14:54:15 -08:00
Bill Zissimopoulos
1e03c1a465 sys: FspFsvolQueryFsAttributeInformation: allow file system to fully specify file system name
tst: memfs: add -F FileSystemName option
2016-12-15 14:26:36 -08:00
Bill Zissimopoulos
b55c20b393 tools: deploy ifstest.bat 2016-12-15 13:08:25 -08:00
Bill Zissimopoulos
406af6901f tools: ifstest 2016-12-15 11:58:38 -08:00
Bill Zissimopoulos
40735c4687 sys: POOL_NX_OPTIN 2016-12-14 15:06:00 -08:00
Bill Zissimopoulos
08c283f2a9 tools: run-tests: reorder tests 2016-12-13 16:15:50 -08:00
Bill Zissimopoulos
4fc740588e tst: memfs: disable test that fails with --oplock option 2016-12-13 15:41:00 -08:00
Bill Zissimopoulos
54050c7e1d tst: memfs: stream_create_overwrite_test 2016-12-13 15:17:22 -08:00
Bill Zissimopoulos
ff08d63a82 sys,dll: Overwrite: named streams are now removed as per NTFS 2016-12-13 14:37:44 -08:00
Bill Zissimopoulos
c37444b0ae tst: memfs: reference counting and descendant enumeration improvements 2016-12-13 13:24:46 -08:00
Bill Zissimopoulos
bbb51b4971 sys,dll: Overwrite now correctly handles AllocationSize 2016-12-13 11:52:32 -08:00
Bill Zissimopoulos
6de998ff98 sys: rename: capture correct security context 2016-12-12 13:20:42 -08:00
Bill Zissimopoulos
4b024ebe74 sys: security: turns out that the AccessToken is not needed 2016-12-10 17:45:36 -08:00
Bill Zissimopoulos
418c454a4a dll: FspSetSecurityDescriptor: turns out that the AccessToken is not needed 2016-12-09 17:43:11 -08:00
Bill Zissimopoulos
0b61c48cd6 inc: fsctl: FSP_FSCTL_TRANSACT_REQ QueryDirectory: CaseSensitive 2016-12-09 15:35:55 -08:00
Bill Zissimopoulos
945509ef93 tools: run-tests: net use test 2016-12-09 14:43:10 -08:00
Bill Zissimopoulos
3a65ce332b dll,launcher: invariant string comparisons 2016-12-09 14:23:53 -08:00
Bill Zissimopoulos
228f9e2708 tst: memfs: MEMFS_REPARSE_POINTS conditional 2016-12-08 18:58:05 -08:00
Bill Zissimopoulos
ee3918436b fix erroneous file permissions 2016-12-08 18:43:49 -08:00
Bill Zissimopoulos
1bb6d2a0e7 installer: register MEMFS to accommodate bigger file sizes and more files 2016-12-08 12:54:22 -08:00
Bill Zissimopoulos
6d1b9e95db inc: winfsp: add comment regarding limitations of ReadDirectory/Offset 2016-12-08 09:18:09 -08:00
Bill Zissimopoulos
1d8d72129d sys: util: fix Delays when retrying MustSucceed allocations 2016-12-07 17:19:26 -08:00
Bill Zissimopoulos
2ad4e30754 inc: fsctl: add FSP_FSCTL_FILE_INFO::HardLinks field 2016-12-07 16:43:55 -08:00
Bill Zissimopoulos
26cba02091 doc: minor fix in performance testing document 2016-12-07 14:47:10 -08:00
Bill Zissimopoulos
3697defd16 doc: update performance testing document 2016-12-06 22:14:39 -08:00
Bill Zissimopoulos
69a22f1044 doc: update WinFsp Testing document 2016-12-06 19:24:59 -08:00
Bill Zissimopoulos
5a49115a66 doc: fix case insensitive file names 2016-12-06 17:48:04 -08:00
Bill Zissimopoulos
82c8b0d00f doc: rename Performance Testing document 2016-12-06 17:36:47 -08:00
Bill Zissimopoulos
d00b5d88af doc: rename documents 2016-12-06 17:25:51 -08:00
Bill Zissimopoulos
6d19176d7c update README 2016-12-06 17:06:44 -08:00
Bill Zissimopoulos
e231b9c662 doc: add winfsp.h documentation in markdown format 2016-12-06 17:04:44 -08:00
Bill Zissimopoulos
025a74e663 rename .adoc files to .asciidoc 2016-12-06 16:57:09 -08:00
Bill Zissimopoulos
834adbdc36 restructure project to accommodate wiki 2016-12-06 16:40:32 -08:00
Bill Zissimopoulos
25c687d5c5 doc; winfsp-ipc: update document 2016-12-06 15:25:59 -08:00
Bill Zissimopoulos
200de2a7f9 doc: winfsp-ipc: WinFsp as IPC Mechanism 2016-12-06 09:50:37 -08:00
Bill Zissimopoulos
8e7c241f32 doc: perf-tests: update Performance Testing document 2016-12-05 16:37:31 -08:00
Bill Zissimopoulos
e530e671a5 doc: perf-tests: update Performance Testing document 2016-12-05 14:50:29 -08:00
Bill Zissimopoulos
d804f5674d tst: fsbench: disable rdwr sector tests as they are too slow 2016-12-05 11:54:59 -08:00
Bill Zissimopoulos
ac6f024715 fsbench: expand on read/write tests and fixes 2016-12-04 14:41:38 -08:00
Bill Zissimopoulos
a1af8ff921 sys: Queued Events and use fin FSP_IOQ 2016-12-03 19:41:26 -08:00
Bill Zissimopoulos
f7ca9f0522 tst: memfs: ReadDirectory im: optimization to improve quadratic behavior 2016-11-30 21:50:44 -08:00
Bill Zissimopoulos
3518d7a8c2 tst: memfs: ReadDirectory improvements 2016-11-30 16:12:00 -08:00
Bill Zissimopoulos
281d92f2bc doc: perf-tests: improve conditional check for AsciidocFX 2016-11-30 10:00:43 -08:00
Bill Zissimopoulos
7769a2c062 doc: perf-tests: typos 2016-11-30 09:43:10 -08:00
Bill Zissimopoulos
595a77bd2e doc: update perf-tests document 2016-11-29 23:42:41 -08:00
Bill Zissimopoulos
6860a6986a doc: update perf-tests document 2016-11-29 23:34:54 -08:00
Bill Zissimopoulos
63e8cf1090 doc: add perf-tests document and supporting files 2016-11-29 22:22:45 -08:00
Bill Zissimopoulos
7bdca634aa tools: run-perf-tests: only iterate 5 times 2016-11-29 12:43:25 -08:00
Bill Zissimopoulos
535babc0d5 tools: run-perf-tests 2016-11-27 16:32:45 -08:00
Bill Zissimopoulos
e86dcde1a1 tst: fsbench: improvements 2016-11-27 11:16:06 -08:00
Bill Zissimopoulos
6e10e0489b tst: fsbench: mmap tests 2016-11-26 22:09:40 -08:00
Bill Zissimopoulos
f82cad712a tst: fsbench: rdwr test 2016-11-26 20:50:35 -08:00
Bill Zissimopoulos
d12234bb01 tst: memfs: improve memory allocation scheme 2016-11-26 20:08:55 -08:00
Bill Zissimopoulos
10a8519294 tst: fsbench: file_open_test, file_overwrite_test 2016-11-26 12:01:01 -08:00
Bill Zissimopoulos
1b6395fc91 tst: fsbench: file_list_test 2016-11-25 15:10:07 -08:00
Bill Zissimopoulos
f1a363b848 tst: fsbench: simple benchmark program 2016-11-25 11:46:21 -08:00
Bill Zissimopoulos
eea1a8fd8b tst: winfsp-tests: disable tests that cannot work under a network share 2016-11-24 17:35:45 -08:00
Bill Zissimopoulos
5444ce7f50 sys: rename: only do MmFlushImageSection when ImageSectionObject is not NULL 2016-11-24 15:09:39 -08:00
Bill Zissimopoulos
29c140b9cd tst: winfsp-tests: delete_pending_test 2016-11-24 13:34:51 -08:00
Bill Zissimopoulos
cdfd60877b tst: winfsp-tests: delete_mmap_test 2016-11-24 13:26:50 -08:00
Bill Zissimopoulos
e7931e28fd tst: make non-essential and long running tests optional 2016-11-23 21:26:21 -08:00
Bill Zissimopoulos
002a0262f7 sys: FspFileNodeOplockCheckAsyncEx: DEBUGTEST 2016-11-23 21:23:57 -08:00
Bill Zissimopoulos
1ffba78a18 tst: winfsp-tests: oplock testing 2016-11-23 16:19:46 -08:00
Bill Zissimopoulos
1d3423d5fb tst: winfsp-tests: oplock testing 2016-11-23 16:11:24 -08:00
Bill Zissimopoulos
a894e4a2af tst: winfsp-tests: oplock testing 2016-11-23 15:41:28 -08:00
Bill Zissimopoulos
b6f084d71f tst: winfsp-tests: oplock testing 2016-11-23 11:46:46 -08:00
Bill Zissimopoulos
ca6d0d2dcf tst: winfsp-tests: disable oplock tests on shares 2016-11-22 22:15:46 -08:00
Bill Zissimopoulos
d6d781355f sys: DEBUGTEST_EX macro: fix 2016-11-22 22:20:14 -08:00
Bill Zissimopoulos
851a6145cd tst: winfsp-tests: oplock testing 2016-11-22 21:20:31 -08:00
Bill Zissimopoulos
aec7b34e13 tst: winfsp-tests: HookDeleteFileW: oplock testing 2016-11-22 20:21:35 -08:00
Bill Zissimopoulos
38006ba553 tst: HookMoveFileExW: fix problem with requesting oplock on same file 2016-11-22 18:30:08 -08:00
Bill Zissimopoulos
ee469b40e7 sys: FspFileNodeRename: handle cleaned up but not closed file 2016-11-22 17:27:52 -08:00
Bill Zissimopoulos
1f385a9ab5 sys: rename: bail early when attempting to replace directory 2016-11-22 15:47:34 -08:00
Bill Zissimopoulos
ba78fbb956 sys: rename: oplock refactoring 2016-11-22 14:18:10 -08:00
Bill Zissimopoulos
8f10ba4fc9 sys: file: GATHER_DESCENDANTS, SCATTER_DESCENDANTS macros 2016-11-22 11:32:40 -08:00
Bill Zissimopoulos
b0a59e42fc tst: add oplock testsuite run and disable some tests according to configuration 2016-11-21 16:45:10 -08:00
Bill Zissimopoulos
2e089b92c5 sys: FspFileNodeCheckBatchOplocksOnAllStreams: fix oplock related deadlock
- fix: initiate oplock break, release FileNode and wait for oplock break completion
2016-11-21 16:28:00 -08:00
Bill Zissimopoulos
37362cb8cc sys: file,wq: make oplock functions paged 2016-11-20 17:52:38 -08:00
Bill Zissimopoulos
127d4cc4eb sys: fsctl: oplock fixes 2016-11-20 15:27:24 -08:00
Bill Zissimopoulos
ce551d4e0d sys: oplock: refactoring/cleanup 2016-11-20 14:08:23 -08:00
Bill Zissimopoulos
53f60a698a tst: winfsp-tests: add oplock option 2016-11-19 22:58:40 -08:00
Bill Zissimopoulos
aa23672b01 sys: fsctl: enable oplock processing 2016-11-18 22:20:03 -08:00
Bill Zissimopoulos
e4de0f0513 sys: oplock: perform stream oplock checks
sys: rename: fix some rename issues
2016-11-18 18:38:15 -08:00
Bill Zissimopoulos
8750451e10 sys: FspFsvolDeviceEnumerateContextByName, FspFileNodeRename: bugfix: properly enumerate/rename streams 2016-11-16 14:34:01 -08:00
Bill Zissimopoulos
358db2a54f sys: oplock: misc fixes and improvements 2016-11-16 13:34:43 -08:00
Bill Zissimopoulos
4294182c1a sys: oplock testing 2016-11-15 17:05:05 -08:00
Bill Zissimopoulos
f17168f2fa sys: oplock testing: DEBUGTEST_EX 2016-11-15 13:17:49 -08:00
Bill Zissimopoulos
959d8537c6 sys: oplock testing 2016-11-14 20:36:51 -08:00
Bill Zissimopoulos
6a48087d5f sys: create: oplock testing 2016-11-14 17:28:53 -08:00
Bill Zissimopoulos
0a59c5d685 tools: add executable bit to batch files 2016-11-14 17:21:00 -08:00
Bill Zissimopoulos
5b1b8288c2 sys: create: FspFsvolCreateOpenOrOverwiteOplock: fix typo 2016-11-14 17:15:09 -08:00
Bill Zissimopoulos
53e2f13e38 sys: FspFileNodeRenameCheck 2016-11-14 11:20:32 -08:00
Bill Zissimopoulos
cb6b10385b sys: rename: oplocks 2016-11-13 22:06:53 -08:00
Bill Zissimopoulos
f49cf412a8 sys: fileinfo: oplocks 2016-11-13 10:45:24 -08:00
Bill Zissimopoulos
764b772731 sys: lockctl, read, write: oplocks 2016-11-12 18:01:27 -08:00
Bill Zissimopoulos
7518a6e418 sys: read, write: oplocks 2016-11-12 13:12:35 -08:00
Bill Zissimopoulos
2772af5478 sys: FspWqOplockPrepare: use work routine 2016-11-12 12:06:28 -08:00
Bill Zissimopoulos
f2535484ea sys: wq: WIP 2016-11-12 11:43:47 -08:00
Bill Zissimopoulos
97ee4fa77f sys: lockctl: oplocks 2016-11-12 11:32:37 -08:00
Bill Zissimopoulos
7c34d738b7 sys: wq: FspWqOplockPrepare, FspWqOplockComplete 2016-11-12 11:31:38 -08:00
Bill Zissimopoulos
93254bede4 sys: lockctl: oplocks 2016-11-11 22:54:09 -08:00
Bill Zissimopoulos
f3894dbc7b sys: cleanup: oplocks 2016-11-11 22:08:14 -08:00
Bill Zissimopoulos
dc684acd41 sys: create: oplocks WIP 2016-11-11 21:34:57 -08:00
Bill Zissimopoulos
69935525da sys: create: oplocks WIP 2016-11-11 17:58:57 -08:00
Bill Zissimopoulos
6ba6e16851 sys: create: oplocks: WIP 2016-11-11 17:06:19 -08:00
Bill Zissimopoulos
d33089331b sys: create: sharing violation oplock checks 2016-11-11 16:53:35 -08:00
Bill Zissimopoulos
74de84aaab sys: create: sharing violation oplock checks 2016-11-11 16:52:21 -08:00
Bill Zissimopoulos
a9b4fd4634 sys: FspFileNodeClose 2016-11-11 10:54:21 -08:00
Bill Zissimopoulos
c6798b3060 sys: create: move some code around 2016-11-11 09:39:17 -08:00
Bill Zissimopoulos
f6e3b8e416 sys: create: oplock: WIP 2016-11-11 09:30:29 -08:00
Bill Zissimopoulos
f05ebd9d20 sys: FspFsvolCreateSharingViolationWork 2016-11-10 18:14:17 -08:00
Bill Zissimopoulos
e50c9ff649 sys: IRP_MJ_CREATE: oplock support 2016-11-10 15:03:58 -08:00
Bill Zissimopoulos
fb70eccc9c sys: IRP_MJ_CREATE: oplock support 2016-11-10 14:54:41 -08:00
Bill Zissimopoulos
7adbd7a56c sys: FspIopSetIrpResponse 2016-11-10 13:20:03 -08:00
Bill Zissimopoulos
55c7384c65 sys: FspIopCreateRequestWorkItem 2016-11-10 12:40:21 -08:00
Bill Zissimopoulos
bc8962d2b6 sys: FspOplockBreakH 2016-11-10 12:29:11 -08:00
Bill Zissimopoulos
2267eadbca sys: disable oplock requests momentarily for testing 2016-11-10 12:12:35 -08:00
Bill Zissimopoulos
154aa28381 sys: FspFsvolFileSystemControlOplock: WIP 2016-11-10 12:11:35 -08:00
Bill Zissimopoulos
2d98cda607 sys: oplocks: WIP 2016-11-10 12:11:14 -08:00
Bill Zissimopoulos
8395b22ddc sys: oplocks: WIP 2016-11-10 12:10:55 -08:00
Bill Zissimopoulos
809505d8a3 appveyor: on_finish: perform verifier_query 2016-11-10 11:47:24 -08:00
Bill Zissimopoulos
9df0920de1 tools: run-tests: always do leak test (even on failures) 2016-11-10 11:47:15 -08:00
Bill Zissimopoulos
c10c7cc672 sys: FspFileNodeClose: ensure that cleanup also happens when Create fails 2016-11-10 11:47:06 -08:00
Bill Zissimopoulos
a0cb134bd3 sys: FspFsvolReadNonCached,FspFsvolWriteNonCached: reuse work Requests 2016-11-10 11:46:16 -08:00
Bill Zissimopoulos
becfd2e1c5 sys: request work item refactoring 2016-11-10 11:45:58 -08:00
Bill Zissimopoulos
1e93f0d10d sys: request work item refactoring 2016-11-10 11:45:38 -08:00
Bill Zissimopoulos
adeb847c7e sys: request work item refactoring 2016-11-10 11:45:17 -08:00
Bill Zissimopoulos
5a83c68f56 sys: request work item refactoring 2016-11-10 11:45:04 -08:00
Bill Zissimopoulos
9d176643c3 sys: driver.h: add static assert for size of FSP_FSCTL_TRANSACT_REQ_HEADER 2016-11-10 11:44:42 -08:00
Bill Zissimopoulos
b1d8192d59 sys: restrict build to Win7 2016-11-10 11:44:26 -08:00
Bill Zissimopoulos
bd3d462bce sys: FspFileNodeSetFileInfo: fix Release build warning 2016-11-06 18:44:58 -08:00
Bill Zissimopoulos
aa2d70d8de sys: FspFileNodeSetFileInfo: make CcSetFileSizes failures benign
tst: fscrash: test huge allocation size failures
2016-11-06 17:15:07 -08:00
Bill Zissimopoulos
31c40d017d sys: create: allow user mode file system to disable caching for individual files 2016-11-04 13:08:10 -07:00
Bill Zissimopoulos
5c8da5518c sys: FspFsvolCreate: clarify comment 2016-11-04 12:22:43 -07:00
Bill Zissimopoulos
a80a9d3d4c doc: update winfsp-testing.adoc 2016-11-04 09:58:01 -07:00
Bill Zissimopoulos
57580e91f5 tools: run-tests: fscrash 2016-11-04 00:32:16 -07:00
Bill Zissimopoulos
1a43619c5e tst: fscrash: WIP 2016-11-04 00:03:30 -07:00
Bill Zissimopoulos
aae6a15e5a tst: fscrash: WIP 2016-11-03 22:31:59 -07:00
Bill Zissimopoulos
f54ce6a65d tst: fscrash: WIP 2016-11-03 21:48:34 -07:00
Bill Zissimopoulos
ab0c2fc25c tst: fscrash: WIP 2016-11-03 20:39:28 -07:00
Bill Zissimopoulos
fd439add27 doc: winfsp-testing: add information about fscrash 2016-11-03 19:53:02 -07:00
Bill Zissimopoulos
8855a2b896 tst: fscrash: WIP 2016-11-03 19:18:53 -07:00
Bill Zissimopoulos
7c41ffd64e tst: fscrash: initial commit 2016-11-03 16:15:32 -07:00
Bill Zissimopoulos
621eb63029 doc: minor fix in winfsp-testing.adoc 2016-11-03 12:42:28 -07:00
Bill Zissimopoulos
f1b96f8a28 doc: add WinFsp Testing Strategy document 2016-11-03 12:39:14 -07:00
Bill Zissimopoulos
4512dac0a9 doc: update Changelog 2016-11-03 09:36:50 -07:00
Bill Zissimopoulos
deee32b743 tools: run-tests: perform leak-test after all WinFsp drives have been unmounted 2016-11-02 22:12:39 -07:00
Bill Zissimopoulos
5f1b723fab tools: run-tests: leak-test 2016-11-02 21:31:28 -07:00
Bill Zissimopoulos
453f1732dc tools: run-tests: leak-test: add output 2016-11-02 21:00:08 -07:00
Bill Zissimopoulos
8c8d669be8 tools: run-tests: leak-test: add output 2016-11-02 20:59:16 -07:00
Bill Zissimopoulos
53077d990a tools: run-tests: leak-test 2016-11-02 20:16:18 -07:00
Bill Zissimopoulos
c665812d76 sys: FspVolumeDelete: perform MmForceSectionClosed on open files
- this removes them from the Mm Standby List
2016-11-02 18:27:38 -07:00
Bill Zissimopoulos
b56379b542 tools: run-tests: simple standby list test 2016-11-02 16:22:47 -07:00
Bill Zissimopoulos
83c1489b92 sys: FspVolumeMountNoLock: dereference FsvrtDeviceObject on success
resolves a VPB/FsvrtDeviceObject leak
2016-11-02 13:00:46 -07:00
Bill Zissimopoulos
3e3aa7651f dll: UmFileContextIsUserContext2, UmFileContextIsFullContext support 2016-11-01 18:49:28 -07:00
Bill Zissimopoulos
ec2cf5106d src: ioctl.i: comment out symbol that does not exist during Debug build on AppVeyor 2016-11-01 16:10:19 -07:00
Bill Zissimopoulos
25322059b3 appveyor: build Debug and Release configurations 2016-11-01 16:03:00 -07:00
Bill Zissimopoulos
a255fa11e7 tst: winfsp-tests: disable FILE_FLAG_NO_BUFFERING mmap test against localhost share (Win8 bug) 2016-11-01 14:56:01 -07:00
Bill Zissimopoulos
dbb8b5d3b9 tst: winfsp-tests: --share option now allows running tests against remote share 2016-11-01 13:32:51 -07:00
Bill Zissimopoulos
4c6a61d2c9 tst: winfsp-tests: refactoring/fixes when running --ntfs/--external tests 2016-11-01 11:13:25 -07:00
Bill Zissimopoulos
ac4828ec11 tools: run-tests: disable rdwr_mmap and reparse_symlink tests which currently fail under redirector/SRV2 2016-10-31 12:18:53 -07:00
Bill Zissimopoulos
e0f163e9ba sys: maintain FO_FILE_MODIFIED bit 2016-10-29 13:04:13 -07:00
Bill Zissimopoulos
9bcd8dcb8e sys: FspIopCompleteIrpEx: handle SRV2 query directory completion 2016-10-28 16:33:54 -07:00
Bill Zissimopoulos
096e5b7eb1 Revert "sys: FspFsvolDirectoryControlComplete: support SRV2 queries"
This reverts commit 7f2426271c2a773527feb6914f9522fbe758201c.
2016-10-28 11:43:26 -07:00
Bill Zissimopoulos
1c85fb94f0 sys: FspFileNodeCleanupComplete, FspFileNodeClose: fix problem with OpenCount handling 2016-10-27 23:57:27 -07:00
Bill Zissimopoulos
4417ebcc92 sys: util: FspSafeMdlCreate: assertion fix 2016-10-27 23:30:16 -07:00
Bill Zissimopoulos
5fa631339d sys: FspFsvolSetRenameInformation: correctly compute Suffix for SRV2 renames 2016-10-27 11:44:43 -07:00
Bill Zissimopoulos
26092211a8 tst: winfsp-tests: --external tests done within a temporary directory 2016-10-26 20:24:57 -07:00
Bill Zissimopoulos
50af8f6444 tools: run-tests: winfsp-tests --external 2016-10-26 16:55:17 -07:00
Bill Zissimopoulos
ee0031f995 sys: FspFsvolQueryInformation: add stub FileEaInformation support 2016-10-26 16:45:18 -07:00
Bill Zissimopoulos
75ff7f2c01 tools: run-tests: add net share tests (currently multiple failures) 2016-10-26 16:03:20 -07:00
Bill Zissimopoulos
3e557e1b65 tools: run-tests: add case-insensitive option when testing dir mounts 2016-10-26 15:09:46 -07:00
Bill Zissimopoulos
79bf651203 tst: winfsp-tests: add WINAPI for Hook* and Resilient* APIs 2016-10-26 15:11:06 -07:00
Bill Zissimopoulos
205a59dbc6 tst: winfsp-tests: ResilientRemoveDirectoryW 2016-10-26 14:36:38 -07:00
Bill Zissimopoulos
8f54152096 tst: winfsp-tests: WIP 2016-10-26 13:59:21 -07:00
Bill Zissimopoulos
5e71992153 tst: winfsp-tests: WIP 2016-10-26 13:40:30 -07:00
Bill Zissimopoulos
dfe45e1be5 tst: winfsp-tests: WIP 2016-10-26 13:27:49 -07:00
Bill Zissimopoulos
ff7a446194 tst: winfsp-tests: WIP 2016-10-26 13:16:27 -07:00
Bill Zissimopoulos
17056b4f3f tst: winfsp-tests: always use CreateDirectoryW 2016-10-26 12:48:30 -07:00
Bill Zissimopoulos
b19621233a tst: winfsp-tests: HookCreateDirectoryW, HookMoveFileExW, HookFindFirstFileW 2016-10-26 12:37:36 -07:00
Bill Zissimopoulos
e07ef0712e tst: winfsp-tests: HookRemoveDirectoryW 2016-10-26 12:08:29 -07:00
Bill Zissimopoulos
0532cee99c tst: winfsp-tests: refactor hooks 2016-10-26 12:02:30 -07:00
Bill Zissimopoulos
b072a1f0da tst: winfsp-tests: add license headers 2016-10-25 20:29:05 -07:00
Bill Zissimopoulos
badaf82462 tst: winfsp-tests: --resilient command line option 2016-10-25 20:19:04 -07:00
Bill Zissimopoulos
3f79b2e46d tst: winfsp-tests: --resilient command line option 2016-10-25 15:35:46 -07:00
Bill Zissimopoulos
319e5d4ee6 tst: winfsp-tests: --resilient command line option 2016-10-25 14:50:12 -07:00
Bill Zissimopoulos
66d5fe98df tst: winfsp-tests: add --ntfs option 2016-10-25 14:03:26 -07:00
Bill Zissimopoulos
8abadf94f3 tst: winfsp-tests: minor fix 2016-10-25 12:52:06 -07:00
Bill Zissimopoulos
728c1b3402 tst: winfsp-tests: add/remove network shares from memfs_start/memfs_stop to properly support test file system 2016-10-25 11:38:26 -07:00
Bill Zissimopoulos
8b31b1018b tst: winfsp-tests: abort messages 2016-10-25 11:15:47 -07:00
Bill Zissimopoulos
310fd23035 tst: winfsp-tests: initial network share support 2016-10-25 11:04:53 -07:00
Bill Zissimopoulos
7f2426271c sys: FspFsvolDirectoryControlComplete: support SRV2 queries 2016-10-23 21:53:45 -07:00
Bill Zissimopoulos
3cfa4156d2 sys: IRP_MN_QUERY_DIRECTORY: prep work to handle non-NULL Irp->MdlAddress 2016-10-23 17:47:57 -07:00
Bill Zissimopoulos
23dadcf8a0 dll,tst: do not add dot entries for root directory 2016-10-23 11:03:44 -07:00
Bill Zissimopoulos
e0b0b1b367 sys: read,write: IRP_MN_MDL improvements 2016-10-22 14:04:31 -07:00
Bill Zissimopoulos
a525e095d3 sys: check Response->IoStatus.Information for Read, Write, QueryDirectory 2016-10-21 21:46:47 -07:00
Bill Zissimopoulos
e16dfd8a43 dll: debug: QueryStreamInformation logging 2016-10-21 21:02:59 -07:00
Bill Zissimopoulos
3bf4140f91 sys,dll: backup/restore privilege support 2016-10-21 19:13:05 -07:00
Bill Zissimopoulos
b194a33406 tst: winfsp-tests: backup/restore privilege testing 2016-10-21 17:43:25 -07:00
Bill Zissimopoulos
0dd452fac1 tools: run-tests: improvements 2016-10-20 18:48:39 -07:00
Bill Zissimopoulos
df11a7d7ff dll: FspAccessCheckEx: fix traverse check problem with reparse points 2016-10-20 18:32:01 -07:00
Bill Zissimopoulos
51d29c172a tools: run-tests: improvements 2016-10-20 17:52:41 -07:00
Bill Zissimopoulos
2803a1b0cf tools: run-tests: correctly test ERRORLEVEL 2016-10-20 16:48:36 -07:00
Bill Zissimopoulos
067a0f1b37 dll: API polishing 2016-10-20 16:32:12 -07:00
Bill Zissimopoulos
03611b6210 sys: FspFsvolSetRenameInformation: when doing an exact case rename do not send it to the user mode file system 2016-10-19 16:15:23 -07:00
Bill Zissimopoulos
2ff60e5e98 tst: memfs: Rename: fix problem when renaming names differing in case only 2016-10-19 15:52:22 -07:00
Bill Zissimopoulos
488993d22b doc: update Changelog 2016-10-19 14:32:00 -07:00
Bill Zissimopoulos
3cba22b9a5 tst: winfsp-tests: replace abort with ABORT in HookCreateFile, etc. 2016-10-19 13:56:15 -07:00
Bill Zissimopoulos
a3e577b091 tst: winfsp-tests: create_notraverse_test: fix security descriptor 2016-10-19 13:55:23 -07:00
Bill Zissimopoulos
9b287fb559 tst: winfsp-tests: create_notraverse_test 2016-10-19 12:40:52 -07:00
Bill Zissimopoulos
f642ea57be dll: FspAccessCheckEx: test access checks without traverse privilege 2016-10-19 11:54:22 -07:00
Bill Zissimopoulos
cb17b7e2e0 dll: FspFileSystemSetMountPoint: testing 2016-10-18 14:08:58 -07:00
Bill Zissimopoulos
82a9c8e80f dll: FspFileSystemSetMountPoint: now supports directories 2016-10-17 21:04:22 -07:00
Bill Zissimopoulos
628dae38d7 case-insensitivity testing 2016-10-17 15:33:23 -07:00
Bill Zissimopoulos
958b5a47a8 installer: include product version in product name 2016-10-17 15:05:45 -07:00
Bill Zissimopoulos
8d38a0dac6 sys,dll: support file name normalization 2016-10-17 14:23:56 -07:00
Bill Zissimopoulos
a653a010ce ext: tlib: fix mistake in cmdline handling introduced in latest change 2016-10-17 13:19:20 -07:00
Bill Zissimopoulos
31eedbddb3 sys: create: OpenTargetDirectory handling moved before the Prepare phase 2016-10-17 11:05:49 -07:00
Bill Zissimopoulos
5bf913045e update submodules 2016-10-16 15:22:19 -07:00
Bill Zissimopoulos
a10a09d4e9 tst: winfsp-tests: dirnotify_test improvements 2016-10-16 14:58:37 -07:00
Bill Zissimopoulos
3e0db6da07 tst: winfsp-tests: dirnotify_test changed to catch filename case problems 2016-10-16 13:30:48 -07:00
Bill Zissimopoulos
77df532ac3 tst: winfsp-tests: getfileinfo_name_test 2016-10-16 13:14:36 -07:00
Bill Zissimopoulos
222da362ec tlib: catch unknown options in tlib_run_tests 2016-10-16 11:27:01 -07:00
Bill Zissimopoulos
3ed7847d84 tst: test case insensitivity
sys: FspFileNameIsValid: $DATA is case insensitive
2016-10-15 19:50:47 -07:00
Bill Zissimopoulos
5773c6eab7 sys: FspFileNodeRename: acquire resource of descendant file nodes when renaming them 2016-10-14 22:47:10 -07:00
Bill Zissimopoulos
5a5a1008de sys: FspFileNameCompare, FspFileNameIsPrefix 2016-10-14 16:01:05 -07:00
Bill Zissimopoulos
32c289fa34 sys: FspFsvolFileSystemControlReparsePoint: replace use of RtlEqualUnicodeString with FspFsvolDeviceVolumePrefixInString 2016-10-14 15:13:52 -07:00
Bill Zissimopoulos
0534225662 sys: canonicalize filename related functions under the name FspFileName* 2016-10-14 14:47:16 -07:00
Bill Zissimopoulos
096b2dabde sys: refactor util.c into strutil.c; introduce FspIsNameInExpression to wrap FsRtlIsNameInExpression 2016-10-14 14:09:54 -07:00
Bill Zissimopoulos
5770f2d901 build: improve build versioning 2016-10-13 14:32:09 -07:00
Bill Zissimopoulos
12e40f908d tst: winfsp-tests: stream_rename_flipflop_test 2016-10-13 00:17:48 -07:00
Bill Zissimopoulos
42745e2239 sys: FspFileNodeRename: correctly handle rename of closed by referenced descendant files 2016-10-12 23:52:54 -07:00
Bill Zissimopoulos
249c1a5cb8 sys: FspFsvolDeviceEnumerateContextByName: fix bug that manifested itself as hanging renames 2016-10-12 20:08:17 -07:00
Bill Zissimopoulos
233904fd51 dll: move STATUS_FILE_IS_A_DIRECTORY collision check to fsop.c from memfs 2016-10-12 12:15:19 -07:00
Bill Zissimopoulos
3e0f2316a7 dll: special case STATUS_OBJECT_NAME_NOT_FOUND and STATUS_OBJECT_NAME_COLLISION to handle open/create via symlink
tst: memfs: support reparse point functionality over a named stream and fix status return on create collision over directory
2016-10-12 11:18:55 -07:00
Bill Zissimopoulos
bd952253fb cosmetic fix 2016-10-11 11:39:17 -07:00
Bill Zissimopoulos
c7780cf7fa license: switch to GPLv3 from AGPLv3 2016-10-10 21:33:27 -07:00
Bill Zissimopoulos
31b54ecc47 dll: FspAccessCheckEx: fix DELETE access check for named streams 2016-10-10 18:04:55 -07:00
Bill Zissimopoulos
4084448bd5 sys,dll: properly implement stream create check 2016-10-10 17:29:16 -07:00
Bill Zissimopoulos
4dc1828e1f update submodules 2016-10-10 15:36:17 -07:00
Bill Zissimopoulos
79b7b66b62 update submodules 2016-10-10 14:46:25 -07:00
Bill Zissimopoulos
612c820630 tst: memfs: add -D option to specify debug log file 2016-10-10 13:25:47 -07:00
Bill Zissimopoulos
e13233ef32 tst: memfs: add -D option to specify debug log file 2016-10-10 13:21:20 -07:00
Bill Zissimopoulos
dd815f3c39 doc: update Changelog 2016-10-10 11:50:34 -07:00
Bill Zissimopoulos
5faafc4d11 doc: update Changelog 2016-10-10 11:49:22 -07:00
Bill Zissimopoulos
78e5d031c0 installer: add RC and GOLD banners 2016-10-09 18:10:52 -07:00
Bill Zissimopoulos
9ef562df15 installer: choose install banner based on MyDevStage project variable 2016-10-09 17:27:33 -07:00
Bill Zissimopoulos
a7cdc815d0 installer: choose install banner based on MyDevStage project variable 2016-10-09 17:10:23 -07:00
Bill Zissimopoulos
bd5e15fe24 sys: FspFileNodeNotifyChange: implement/test stream notifications 2016-10-09 16:08:11 -07:00
Bill Zissimopoulos
214a8406eb art: wix dialog banner 2016-10-08 23:55:52 -07:00
Bill Zissimopoulos
6bd6f0ee35 inc: fsctl: increase request/response size to 16K
dll: remove /Gs[size] switch, fix FspFileSystemResolveReparsePoints to not use more than 4K of stack space
2016-10-08 23:33:59 -07:00
Bill Zissimopoulos
f8cebd1f92 dll: FspDebugLogSetHandle 2016-10-08 18:49:28 -07:00
Bill Zissimopoulos
f8f6d0f1bc tools: run-tests: include stream tests 2016-10-07 12:22:19 -07:00
Bill Zissimopoulos
b06132cb6b tst: winfsp-tests: stream_create_related_test 2016-10-06 20:42:05 -07:00
Bill Zissimopoulos
748c9b6409 tst: winfsp-tests: stream_getstreaminfo_test 2016-10-06 17:20:23 -07:00
Bill Zissimopoulos
bfc7fc5dec tst: winfsp-tests: stream_getstreaminfo_test 2016-10-06 17:06:23 -07:00
Bill Zissimopoulos
03f906f966 sys: FspFsvolQueryDirectoryCopy: minor fix 2016-10-06 16:51:40 -07:00
Bill Zissimopoulos
4b1111fcc5 tst: winfsp-tests: stream_getstreaminfo_test 2016-10-06 15:36:33 -07:00
Bill Zissimopoulos
86ddeed129 tst: memfs: GetStreamInfo 2016-10-06 15:36:09 -07:00
Bill Zissimopoulos
e2d4b36057 sys: FspFsvolQueryStreamInformation* testing 2016-10-06 15:35:40 -07:00
Bill Zissimopoulos
ab2908a9ee sys: FspFileNodeTrySetSecurity, FspFileNodeTrySetDirInfo 2016-10-06 12:41:23 -07:00
Bill Zissimopoulos
fd7b12bb61 tst: memfs: minor fix 2016-10-06 12:13:34 -07:00
Bill Zissimopoulos
eb2000a194 sys: FSP_FILE_NODE: correctly handle FileInfo cache in the presence of streams 2016-10-06 12:13:16 -07:00
Bill Zissimopoulos
e4cabc50c5 tst: winfsp-tests: stream_setfileinfo_test 2016-10-05 18:18:57 -07:00
Bill Zissimopoulos
92dc2feecd sys: use main file security cache 2016-10-05 17:38:16 -07:00
Bill Zissimopoulos
43f333e8a6 sys: FSP_FILE_NODE: change number field access through inline functions 2016-10-05 17:30:50 -07:00
Bill Zissimopoulos
59eb40fd9b tst: winfsp-tests: stream_getsecurity_test 2016-10-05 16:59:54 -07:00
Bill Zissimopoulos
d85d36c94f tst: memfs: MemfsFileNodeMapHasChild: fix problems with streams on directory 2016-10-05 15:21:33 -07:00
Bill Zissimopoulos
27b841faf8 sys: FspFileNodeOpen: refine main file vs stream sharing violations 2016-10-05 14:55:37 -07:00
Bill Zissimopoulos
c6967c737a sys: FspUnicodePathIsValid: check and return stream type 2016-10-05 13:44:32 -07:00
Bill Zissimopoulos
4ccbd1bdf6 tst: winfsp-tests: stream_create_test 2016-10-05 10:48:33 -07:00
Bill Zissimopoulos
0a8b8e8444 sys: create: validate FileName only after FileNode->FileName has been constructed 2016-10-05 10:27:17 -07:00
Bill Zissimopoulos
352450d538 sys: FspMainFileOpen 2016-10-05 00:32:04 -07:00
Bill Zissimopoulos
7e1861a9f5 tst: memfs: GetSecurityByName: fix FileAttributes for streams on directories 2016-10-04 23:00:42 -07:00
Bill Zissimopoulos
860e9db8a7 sys: FspMainFileOpen, FspMainFileClose, FspMainFileOpenCheck 2016-10-04 22:19:41 -07:00
Bill Zissimopoulos
1d435269bd sys: create: correctly compute file name lengths when streams are involved 2016-10-04 11:35:39 -07:00
Bill Zissimopoulos
e58ac1fbde sys,dll: pass NULL security descriptor to user-mode file system during Create 2016-10-03 21:02:43 -07:00
Bill Zissimopoulos
1f0f2fe094 tst: winfsp-tests: stream testing 2016-10-03 20:15:17 -07:00
Bill Zissimopoulos
d7ec331c74 tst: winfsp-tests: stream testing 2016-10-03 20:14:22 -07:00
Bill Zissimopoulos
938c036387 tst: winfsp-tests: stream testing 2016-10-03 18:27:09 -07:00
Bill Zissimopoulos
16f5bd089d tst: winfsp-tests: stream testing 2016-10-03 17:30:30 -07:00
Bill Zissimopoulos
6afea44e31 tst: winfsp-tests: stream testing 2016-10-03 17:13:19 -07:00
Bill Zissimopoulos
2859355fd8 tst: winfsp-tests: stream testing 2016-10-03 16:52:44 -07:00
Bill Zissimopoulos
75012d1301 tst: winfsp-tests: stream testing 2016-10-03 16:40:03 -07:00
Bill Zissimopoulos
8e1512c067 tst: winfsp-tests: stream testing 2016-10-03 16:31:43 -07:00
Bill Zissimopoulos
fa6b621042 tst: winfsp-tests: stream testing 2016-10-03 16:16:09 -07:00
Bill Zissimopoulos
8ffb359f20 tst: winfsp-tests: stream testing 2016-10-03 16:13:17 -07:00
Bill Zissimopoulos
203873ef04 tst: winfsp-tests: stream testing 2016-10-03 16:08:45 -07:00
Bill Zissimopoulos
e73bda3926 tst: winfsp-tests: stream testing 2016-10-03 15:57:34 -07:00
Bill Zissimopoulos
0186b82fea tst: winfsp-tests: stream testing 2016-10-03 15:30:08 -07:00
Bill Zissimopoulos
db38d2f7f8 tst: winfsp-tests: stream testing 2016-10-03 15:19:18 -07:00
Bill Zissimopoulos
016d015fe6 sys: file, callbacks: acquire MainFileNode resources if exists 2016-10-03 14:21:34 -07:00
Bill Zissimopoulos
87b2d4ca4c tst: memfs: MEMFS_NAMED_STREAMS macro 2016-10-03 11:55:39 -07:00
Bill Zissimopoulos
dfd6cbbde1 tst: memfs: support named streams 2016-10-03 10:58:55 -07:00
Bill Zissimopoulos
6a126da51d sys: IRP_MJ_CREATE: handle security descriptor and file attributes correctly for named streams 2016-10-03 10:29:46 -07:00
Bill Zissimopoulos
03df0a9c26 sys: renamed "main stream" to "main file" 2016-10-02 16:57:15 -07:00
Bill Zissimopoulos
5c3a82a074 tst: memfs: Cleanup: remove all named streams on delete 2016-09-28 17:11:30 -07:00
Bill Zissimopoulos
b591015b28 tst: memfs: Cleanup: remove all named streams on delete 2016-09-28 16:59:39 -07:00
Bill Zissimopoulos
fb9b798d3d tst: memfs: implement GetStreamInfo 2016-09-28 16:17:50 -07:00
Bill Zissimopoulos
cc408b71e1 sys: FspFsvolQueryStreamInformationCopy: add stream type ($DATA) to stream names 2016-09-28 16:17:10 -07:00
Bill Zissimopoulos
19a73ca01d update submodules 2016-09-27 17:01:40 -07:00
Bill Zissimopoulos
3992b9ebb1 update submodules 2016-09-27 15:56:29 -07:00
Bill Zissimopoulos
a46c0610c4 tst: memfs: MemfsFileNameHasPrefix: work to support named streams 2016-09-27 15:35:26 -07:00
Bill Zissimopoulos
495fc7a5dc sys: implement named stream open/close and related delete/share access issues 2016-09-27 14:53:59 -07:00
Bill Zissimopoulos
2ba46fdb71 ensure that all source files use UNIX newlines 2016-09-25 21:50:44 -07:00
Bill Zissimopoulos
7cb56bb132 sys: FspUnicodePathIsValid: improvements 2016-09-25 21:38:41 -07:00
Bill Zissimopoulos
687b02c1e6 tools: ntstatus,winerror: lookup status/error codes 2016-09-24 23:55:15 -07:00
Bill Zissimopoulos
218b162d75 update submodules 2016-09-24 22:46:49 -07:00
Bill Zissimopoulos
5e13c8750e sys: FspUnicodePathIsValid, FspUnicodePathIsValidPattern 2016-09-24 22:21:05 -07:00
Bill Zissimopoulos
2e71d2fe14 sys: FspFsvolQueryStreamInformationCopy: improvements 2016-09-24 17:32:35 -07:00
Bill Zissimopoulos
866e4abe10 sys: IRP_MN_QUERY_DIRECTORY: correctly handle STATUS_BUFFER_OVERFLOW cases 2016-09-24 17:16:58 -07:00
Bill Zissimopoulos
7894cc8b7b sys: fileinfo.c: minor comment change 2016-09-24 15:09:15 -07:00
Bill Zissimopoulos
0c810c52fa sys: IRP_MJ_QUERY_INFORMATION: FileStreamInformation 2016-09-24 13:59:02 -07:00
Bill Zissimopoulos
b06e947e0e tst: winfsp-tests: troubleshoot appveyor dirnotify failure 2016-09-21 15:07:51 -07:00
Bill Zissimopoulos
aed134080c inc: fsctl: PostCleanupOnDeleteOnly 2016-09-21 14:22:08 -07:00
Bill Zissimopoulos
3ce490d405 inc: fsctl: UmFileNodeIsUserContext2 2016-09-21 10:40:18 -07:00
Bill Zissimopoulos
76aabecbfb dll: fuse: fstypename, FileSystemName command line options 2016-09-20 21:27:48 -07:00
Bill Zissimopoulos
8eebfe811d sys: FspFsvolQueryFsAttributeInformation: fix buffer overrun error 2016-09-20 20:55:10 -07:00
Bill Zissimopoulos
5798527237 sys: FspFsvolQueryFsAttributeInformation: return full file system name 2016-09-20 16:30:03 -07:00
Bill Zissimopoulos
817beebb63 inc: fsctl: FSP_FSCTL_VOLUME_PARAMS changes:
- increase size of VolumePrefix
- add FileSystemName field (currently unused)
2016-09-20 15:37:42 -07:00
Bill Zissimopoulos
b7a2b5e17a build: bump version to 0.17 2016-09-20 14:26:20 -07:00
Bill Zissimopoulos
20e547c6d0 Merge branch 'master' of https://github.com/billziss-gh/winfsp 2016-09-19 17:25:50 -07:00
Bill Zissimopoulos
d0d0f60033 doc: SSHFS Port Case Study: Step 5: POSIX special files 2016-09-19 17:29:56 -07:00
Bill Zissimopoulos
fbc3d3efce Update Changelog 2016-09-19 15:11:01 -07:00
Bill Zissimopoulos
2c3f177314 tst: winfsp-tests: disable HookCreateFileW for now 2016-09-16 17:34:32 -07:00
Bill Zissimopoulos
91e8bb1229 tst: winfsp-tests: HookCreateFileW 2016-09-16 10:08:16 -07:00
Bill Zissimopoulos
4b48502232 tools: run-tests: correctly test ERRORLEVEL 2016-09-15 21:18:52 -07:00
Bill Zissimopoulos
74af44e2e7 sys: create: FspFsvolCreateNoLock: fix open of network drive root 2016-09-15 20:23:21 -07:00
Bill Zissimopoulos
915279d41d Merge branch 'master' of https://bitbucket.org/billziss/winfsp 2016-09-15 15:30:50 -07:00
Bill Zissimopoulos
316a2940dc sys: write: FspFsvolWriteCached: fix simple but major bug when using FILE_APPEND_DATA 2016-09-15 15:28:55 -07:00
Bill Zissimopoulos
453c1753ab doc: update Changelog 2016-09-15 13:41:18 -07:00
Bill Zissimopoulos
b11b622fc2 doc: Changelog formatting fix 2016-09-15 13:25:59 -07:00
Bill Zissimopoulos
f1ba60e172 doc: update Changelog 2016-09-15 13:09:24 -07:00
Bill Zissimopoulos
7c1b592b84 installer: add public (stripped) symbols 2016-09-15 11:49:42 -07:00
Bill Zissimopoulos
1e88fedb19 src: sys: FspFsvolCreateComplete: minor comment fix 2016-09-15 00:16:25 -07:00
Bill Zissimopoulos
5ecc92f2ba update submodules 2016-09-14 23:46:05 -07:00
Bill Zissimopoulos
5771eedc45 sys,dll: FspFileSystemResolveReparsePoints: use IO_REPARSE_TAG_SYMLINK instead of IO_REPARSE for symlink resolution
- FspFsvolCreateComplete STATUS_REPARSE handling changed to support device-relative symlink reparse points
2016-09-14 22:16:40 -07:00
Bill Zissimopoulos
46a29f663a inc: fsctl: simplify FSP_FSCTL_TRANSACT_RSP Rsp.Create.Reparse 2016-09-14 17:18:59 -07:00
Bill Zissimopoulos
49cd11b34b tst: memfs: GetSecurityByName: reparse point fix 2016-09-14 16:20:21 -07:00
Bill Zissimopoulos
aeff3dc21e dll: debug: add diagnostic information for FileSystemControl requests/responses 2016-09-14 16:17:20 -07:00
Bill Zissimopoulos
b7368336d2 dll: debug: add diagnostic information for FileSystemControl requests/responses 2016-09-14 15:02:40 -07:00
Bill Zissimopoulos
5afe7a5315 tools: run-tests: include reparse point tests 2016-09-14 11:28:34 -07:00
Bill Zissimopoulos
7815b9e2eb dll: fuse: directory symlinks can now be deleted 2016-09-14 10:41:32 -07:00
Bill Zissimopoulos
cbcea380ef dll: fuse: correctly handle NFS_SPECFILE_LNK reparse points, which are in POSIX UTF-16 format 2016-09-14 10:36:52 -07:00
Bill Zissimopoulos
10635db99b dll: fuse: reparse point fixes
- symlinks to directories have the FILE_ATTRIBUTE_DIRECTORY added
- new symlinks/special files are now created with correct uid/gid in fuse_context
2016-09-13 22:17:31 -07:00
Bill Zissimopoulos
cb00f913cc appveyor.yml: the previous version of Visual Studio 2015 is hosed too, so remove :( 2016-09-13 15:49:24 -07:00
Bill Zissimopoulos
c406c89158 appveyor.yml: choose previous version of VS2015 so that AppVeyor builds can complete 2016-09-13 15:45:42 -07:00
Bill Zissimopoulos
f600d51ace dll: fuse: SetReparsePoint testing 2016-09-13 15:17:59 -07:00
Bill Zissimopoulos
7401481d42 dll: fuse: allow opening of reparse points 2016-09-13 14:36:40 -07:00
Bill Zissimopoulos
2d3d92fb2d dll: fuse: reparse point testing 2016-09-13 13:41:09 -07:00
Bill Zissimopoulos
eca93bbdb3 installer: add diag.bat file to installation 2016-09-13 10:24:14 -07:00
Bill Zissimopoulos
5fa0c36c8f dll: relative symbolic link resolution testing 2016-09-13 00:14:35 -07:00
Bill Zissimopoulos
ea2cc54677 dll: relative symbolic link resolution testing 2016-09-12 22:45:47 -07:00
Bill Zissimopoulos
ccec269dd6 dll: relative symbolic link resolution testing 2016-09-12 21:50:25 -07:00
Bill Zissimopoulos
5888e9ab05 dll: relative symbolic link resolution testing 2016-09-12 21:42:02 -07:00
Bill Zissimopoulos
c12b88286d dll: fuse: warning fix 2016-09-12 20:26:14 -07:00
Bill Zissimopoulos
e412d735ed tst: winfsp-tests: reparse_symlink_relative_test 2016-09-12 19:55:35 -07:00
Bill Zissimopoulos
582997b5a4 tst: winfsp-tests: reparse_symlink_large_test 2016-09-12 18:13:25 -07:00
Bill Zissimopoulos
1647702a65 tools: add diag.bat diagnostics batch file 2016-09-12 15:45:48 -07:00
Bill Zissimopoulos
ccf58122a2 sys: FspFsvolFileSystemControlReparsePoint: comments 2016-09-12 15:27:31 -07:00
Bill Zissimopoulos
be8c29114a sys: FspFsvolFileSystemControlReparsePoint: improve computation of TargetOnFileSystem field when MUP is being used 2016-09-12 15:11:45 -07:00
Bill Zissimopoulos
30f2807e2b sys: FspGetDeviceObjectByName: PAGED_CODE() macro 2016-09-11 21:45:32 -07:00
Bill Zissimopoulos
25a2873556 sys: symbolic link testing 2016-09-11 17:18:56 -07:00
Bill Zissimopoulos
bd0acf2289 sys,dll: symbolic link testing 2016-09-11 17:04:01 -07:00
Bill Zissimopoulos
997476f015 sys,launcher: MUP volume prefixes (share names) are now case insensitive 2016-09-11 14:35:56 -07:00
Bill Zissimopoulos
f89c91cd10 sys,dll: SYMLINK_FLAG_RELATIVE 2016-09-11 13:18:54 -07:00
Bill Zissimopoulos
af2cc10c15 sys,dll: reparse point testing 2016-09-10 23:00:55 -07:00
Bill Zissimopoulos
0d25e73364 Submodule secfs.test now pulled from github
- run `git submodule sync` after pull
2016-09-09 22:12:55 -07:00
Bill Zissimopoulos
86d74371aa doc: add Native API vs FUSE document 2016-09-09 21:54:51 -07:00
Bill Zissimopoulos
f32e335855 bump version to 0.16 and update Changelog 2016-09-09 21:45:19 -07:00
Bill Zissimopoulos
165f3ec45d sys,dll: symlink testing 2016-09-09 21:21:24 -07:00
Bill Zissimopoulos
811696d939 sys,dll: reparse point testing 2016-09-09 19:40:37 -07:00
Bill Zissimopoulos
0c07be9628 sys,dll: reparse point testing 2016-09-09 17:21:56 -07:00
Bill Zissimopoulos
5dcbbaa4e7 tst: winfsp-tests: NFS reparse point testing 2016-09-09 15:24:33 -07:00
Bill Zissimopoulos
12b70f661f dll: fuse: nfs reparse point fixes 2016-09-09 15:14:40 -07:00
Bill Zissimopoulos
9b4b5abe48 tst: winfsp-tests: reparse point testing 2016-09-09 14:55:15 -07:00
Bill Zissimopoulos
5cd0dfb1b9 sys: reparse point testing 2016-09-09 14:42:22 -07:00
Bill Zissimopoulos
46ce4b1a6c dll: fuse: properly acquire op guard for reparse point operations 2016-09-09 11:43:49 -07:00
Bill Zissimopoulos
28a20d5199 dll: FspFileSystemOpLeave: bug fix 2016-09-09 11:29:09 -07:00
Bill Zissimopoulos
10ea9a833f dll: fuse: fixes 2016-09-09 11:23:29 -07:00
Bill Zissimopoulos
d9713668aa dll: FspFileSystemCanReplaceReparsePoint: fix 2016-09-09 11:09:41 -07:00
Bill Zissimopoulos
00c0574f1f tst: memfs: minor fix 2016-09-08 11:42:05 -07:00
Bill Zissimopoulos
44c86ff9a4 dll: fuse: use NFS reparse points for POSIX special files 2016-09-08 10:43:01 -07:00
Bill Zissimopoulos
28931f4687 tst: reparse point testing 2016-09-04 12:38:12 -07:00
Bill Zissimopoulos
80e07cead6 sys,dll: reparse point implementation: DeleteReparsePoint 2016-08-26 07:43:25 -07:00
Bill Zissimopoulos
b88b2ec51d dll: acquire exclusive lock during flush volume 2016-08-22 01:04:07 -07:00
Bill Zissimopoulos
82e4dcb4a1 inc: winfsp.h: minor srcdoc fix 2016-08-22 00:54:15 -07:00
Bill Zissimopoulos
34e653a275 dll: fsop: implement FSCTL_DELETE_REPARSE_POINT parameter checking 2016-08-22 00:40:01 -07:00
Bill Zissimopoulos
981e60643f dll: reparse points: allow file system to provide directory symlink behavior 2016-08-22 00:04:49 -07:00
Bill Zissimopoulos
fee75590a8 sys,dll: rename VolumeParams::ReparsePoints* fields 2016-08-21 23:36:09 -07:00
Bill Zissimopoulos
1298dd842d update test submodule 2016-08-21 09:37:16 -07:00
Bill Zissimopoulos
8334daa048 update test submodule 2016-08-21 07:46:56 -07:00
Bill Zissimopoulos
2f73bfa069 dll: reparse point implementation: fixes 2016-08-20 02:47:14 -07:00
Bill Zissimopoulos
d2d2dd5099 inc: winfsp.h: srcdoc corrections 2016-08-20 01:19:07 -07:00
Bill Zissimopoulos
146570dd74 dll: FspFileSystemResolveReparsePoints: return STATUS_OBJECT_PATH_NOT_FOUND when appropriate 2016-08-20 01:11:46 -07:00
Bill Zissimopoulos
f509281be4 dll: fuse: reimplement reparse point support using FspFileSystemFindReparsePoint and FspFileSystemResolveReparsePoints 2016-08-20 01:06:52 -07:00
Bill Zissimopoulos
613a564ca2 tst: memfs: implement reparse points 2016-08-19 23:33:40 -07:00
Bill Zissimopoulos
7ffc60f512 dll: reparse point implementation: WIP 2016-08-19 10:24:03 -07:00
Bill Zissimopoulos
499a0cb866 dll: fuse: GetReparsePoint: return STATUS_NOT_A_REPARSE_POINT when appropriate 2016-08-15 08:05:09 -07:00
Bill Zissimopoulos
edff3054db dll: fuse: disallow deletion of reparse point (which we cannot support) 2016-08-15 07:21:05 -07:00
Bill Zissimopoulos
f7e0362350 sys,dll: reparse point implementation: WIP 2016-08-15 04:53:11 -07:00
Bill Zissimopoulos
7337f3c6cd sys,dll: symbolic link (reparse point) support: WIP 2016-08-04 11:25:35 -07:00
Bill Zissimopoulos
ab278d7b60 Merge branch 'master' into symlink 2016-07-31 00:16:38 -07:00
Bill Zissimopoulos
858df29ba2 Merge branch 'master' of https://github.com/billziss-gh/winfsp 2016-07-28 23:51:34 -07:00
Bill Zissimopoulos
4366866653 launcher: SvcInstanceStart: STATUS_TIMEOUT is not error; handle it correctly 2016-07-28 23:50:49 -07:00
Bill Zissimopoulos
e4b808806c Update README.md 2016-07-28 17:03:47 -07:00
Bill Zissimopoulos
13cee6e019 Update Changelog 2016-07-28 16:54:07 -07:00
Bill Zissimopoulos
35b9cb15a3 tst: do not test for read-only buffer during Write when not on Win8+ 2016-07-28 16:37:49 -07:00
Bill Zissimopoulos
0d8f0f9ac8 Merge branch 'master' of https://bitbucket.org/billziss/winfsp 2016-07-28 14:56:40 -07:00
Bill Zissimopoulos
a4e2ad9dd6 dll: FspFsctlStop: fix problem in call to DeviceIoControl
- The DeviceIoControl was invoked in an incorrect fashion that nevertheless worked in Win64, but not Win32.
2016-07-28 14:56:06 -07:00
Bill Zissimopoulos
9b4318c655 sys: fix request header alignment on 32-bit builds 2016-07-28 09:57:31 -07:00
Bill Zissimopoulos
5827b1fa9c sys: fixes for Win7 x86 2016-07-28 00:03:53 -07:00
Bill Zissimopoulos
913f7ac9cd dll: suppress compiler warning on x86 builds 2016-07-27 16:25:41 -07:00
Bill Zissimopoulos
0e2f46dc90 Define NTDDI_VERSION,_WIN32_WINNT; remove GetOverlappedResultEx
- Ensures that only Vista+ DDI/API's are used
- Project should now run on Win 7
2016-07-27 16:15:28 -07:00
Bill Zissimopoulos
a8d76d3e46 sys, dll: reparse point (symbolic link) support: WIP 2016-07-25 21:27:48 -07:00
Bill Zissimopoulos
380ec074ca sys: ioq: clarify comment 2016-07-23 18:43:02 -07:00
Bill Zissimopoulos
e7cba96c74 Update README 2016-07-21 14:08:00 -07:00
Bill Zissimopoulos
03db443406 Update README 2016-07-20 23:41:55 -07:00
Bill Zissimopoulos
0b65bc7e01 Update README 2016-07-19 21:08:02 -07:00
Bill Zissimopoulos
12e1caaa98 Update README 2016-07-19 21:02:14 -07:00
Bill Zissimopoulos
7a690a789b Update README 2016-07-19 12:21:21 -07:00
Bill Zissimopoulos
8ca419830c art: installer banners 2016-07-17 16:55:12 -07:00
Bill Zissimopoulos
c310d8ea1b art: installer banners 2016-07-17 16:46:54 -07:00
Bill Zissimopoulos
c3ddf73661 art: add installer banners 2016-07-17 16:26:47 -07:00
Bill Zissimopoulos
6b00b8e28a art: add winfsp icon and installer banners 2016-07-17 16:24:21 -07:00
Bill Zissimopoulos
35c722e91b appveyor: enable verifier for FSD 2016-07-15 23:10:44 -07:00
Bill Zissimopoulos
ae8802514b appveyor: enable verifier for FSD 2016-07-15 23:04:45 -07:00
Bill Zissimopoulos
e90aa46a27 build: bump version to 0.15 2016-07-15 22:43:40 -07:00
Bill Zissimopoulos
760cd5e46f opt: cygfuse: bump release number to 3 2016-07-15 17:58:17 -07:00
Bill Zissimopoulos
b36b6c60e2 inc: fuse: allow for future expansion of fsp_fuse_env 2016-07-15 17:52:24 -07:00
Bill Zissimopoulos
e4984bf675 doc: update Changelog 2016-07-15 17:49:08 -07:00
Bill Zissimopoulos
0c8bcd5d7d doc: update Changelog 2016-07-15 17:39:57 -07:00
Bill Zissimopoulos
b5d8cd3ea6 installer: wix: avoid using autogenerated GUID for INSTALLDIR component 2016-07-14 11:13:26 -07:00
Bill Zissimopoulos
af5f409233 dll: np: improve username/password prompts 2016-07-13 23:19:11 -07:00
Bill Zissimopoulos
cffb066d46 ext/test/winfstest: fix build with VS2015 Update 3 2016-07-11 21:21:05 -07:00
Bill Zissimopoulos
804434d836 dll: fuse: respect the uid,gid,umask options which were being ignored 2016-06-30 23:47:01 -07:00
Bill Zissimopoulos
f7595e40b6 dll: np: FSP_NP_CREDENTIAL_MANAGER 2016-06-29 23:31:07 -07:00
Bill Zissimopoulos
669dd07ce2 dll: np: credentials testing 2016-06-29 22:35:00 -07:00
Bill Zissimopoulos
b6fa54d301 update Changelog 2016-06-29 18:09:06 -07:00
Bill Zissimopoulos
342e7e39e2 tst: secret: small program to aid with testing launcher secrets 2016-06-29 16:27:01 -07:00
Bill Zissimopoulos
9dfdd19616 launcher: startWithSecret testing 2016-06-29 16:10:27 -07:00
Bill Zissimopoulos
2c651b1bd8 launcher: check Credentials registry value during svc instance creation 2016-06-29 15:02:15 -07:00
Bill Zissimopoulos
41764f7b41 launcher, launchctl: fixes 2016-06-29 13:05:15 -07:00
Bill Zissimopoulos
08e697c52c launcher: send the password to service instance as UTF-8 2016-06-29 12:34:06 -07:00
Bill Zissimopoulos
66cc043149 dll: np: credentials support 2016-06-29 12:18:53 -07:00
Bill Zissimopoulos
518cd0e8c0 launcher, launchctl: StartWithSecret 2016-06-28 23:09:10 -07:00
Bill Zissimopoulos
c0344f53b0 Merge branch 'master' into launchpass 2016-06-28 12:10:27 -07:00
Bill Zissimopoulos
76445a5403 bump version to 0.14 2016-06-28 12:10:08 -07:00
Bill Zissimopoulos
0577b8febb dll: posix: use the S-1-0-65534 <-> 65534 for the unmapped SID/UID 2016-06-28 11:45:35 -07:00
Bill Zissimopoulos
610a7ac2a6 dll: np: support launcher passwords: WIP 2016-06-28 11:26:25 -07:00
Bill Zissimopoulos
e33fda4d00 doc: Changelog 2016-06-25 16:26:56 -07:00
Bill Zissimopoulos
2151e193dc doc: Changelog 2016-06-25 16:25:14 -07:00
Bill Zissimopoulos
ccfaf04f76 opt: cygfuse: libfuse.dll.a symlink 2016-06-24 22:25:25 -07:00
Bill Zissimopoulos
7e8d9fb986 dll: posix: map unmapped UID to S-1-5-7 (Anonymous) 2016-06-24 16:28:38 -07:00
Bill Zissimopoulos
37b6936ad0 dll: posix: FspNullSid, FspNullUid 2016-06-24 00:19:20 -07:00
Bill Zissimopoulos
3683afe203 dll: posix: FspNullSid, FspNullUid 2016-06-23 23:42:37 -07:00
Bill Zissimopoulos
a3cfc84007 inc,dll: winfsp: FSP_FILE_SYSTEM_INTERFACE
Consolidate SetFileSize/SetAllocationSize
2016-06-23 14:30:01 -07:00
Bill Zissimopoulos
ee5c584614 inc: winfsp: FSP_FILE_SYSTEM_INTERFACE: ensure it has 64 entries 2016-06-23 00:33:18 -07:00
Bill Zissimopoulos
b8b15e8035 dll: FspFileSystemSetMountPoint, FspFileSystemRemoveMountPoint
Ensure that mapped drives get cleaned up even if file system dies
2016-06-22 23:16:22 -07:00
Bill Zissimopoulos
3db09be764 opt: cygfuse: minor fix in fuse.cygport 2016-06-22 11:45:11 -07:00
Bill Zissimopoulos
f2a0eb544e opt: cygfuse: rename cygfuse.cpp to cygfuse.c and fix fork problem 2016-06-22 11:12:33 -07:00
Bill Zissimopoulos
8c1c407b34 opt: cygfuse: undef _WIN32, _WIN64 symbols before including fuse*.h 2016-06-21 21:43:02 -07:00
Bill Zissimopoulos
8dc4225ea1 opt: cygfuse: can build cygport from working tree (make cygport) 2016-06-21 21:17:39 -07:00
Bill Zissimopoulos
ed0b83c84d opt: cygfuse: fuse.cygport now provides primary VERSION 2016-06-21 14:40:18 -07:00
Bill Zissimopoulos
71c68d1e17 opt: cygfuse: fuse.cygport and related changes 2016-06-21 14:16:52 -07:00
Bill Zissimopoulos
053a5f1e4b update README 2016-06-21 10:54:52 -07:00
Bill Zissimopoulos
e5d7f4ee9a opt: cygfuse 2016-06-21 10:50:19 -07:00
Bill Zissimopoulos
d6fb076cad opt: cygfuse 2016-06-21 00:35:36 -07:00
Bill Zissimopoulos
698b711df4 doc: SSHFS Port Case Study: Step 4 2016-06-17 18:17:54 -07:00
Bill Zissimopoulos
842f649f06 update README 2016-06-17 15:28:06 -07:00
Bill Zissimopoulos
b062df9c42 update README 2016-06-17 15:26:57 -07:00
Bill Zissimopoulos
f0385e3c7d update README 2016-06-17 15:24:51 -07:00
Bill Zissimopoulos
10ce221fcc update README and rename Contributors document 2016-06-17 15:20:41 -07:00
Bill Zissimopoulos
3f3092bdae build: update version to 0.13 2016-06-17 15:12:42 -07:00
483 changed files with 93172 additions and 6407 deletions

21
.github/ISSUE_TEMPLATE/bug.md vendored Normal file
View File

@ -0,0 +1,21 @@
---
name: Bug Report
about: File a bug report.
---
## Bug Report
_Provide a descriptive title and a detailed explanation of the problem you are experiencing. Ensure that your issue has not been filed before._
### How to Reproduce
_Provide detailed information on how to reproduce the problem._
### Behaviors
_Provide information on the expected and actual behaviors._
### Environment
- OS version and build: _e.g. 10.0.14393_
- WinFsp version and build: _e.g. 2017.2 or 1.2.17341_

8
.github/ISSUE_TEMPLATE/enhancement.md vendored Normal file
View File

@ -0,0 +1,8 @@
---
name: Enhancement Request
about: File an enhancement request.
---
## Enhancement Request
_Provide a descriptive title and a detailed explanation of the problem the requested enhancement would solve. Ensure that your issue has not been filed before._

8
.github/ISSUE_TEMPLATE/question.md vendored Normal file
View File

@ -0,0 +1,8 @@
---
name: Question
about: Questions are better asked in the WinFsp Google Group. However you may ask a question here.
---
## Question
_Please consider asking questions in the [WinFsp Google Group](https://groups.google.com/forum/#!forum/winfsp) instead. Before asking a question please also consult the [WinFsp Frequently Asked Questions](https://github.com/winfsp/winfsp/wiki/Frequently-Asked-Questions)._

12
.github/PULL_REQUEST_TEMPLATE.md vendored Normal file
View File

@ -0,0 +1,12 @@
(Enter your PR description here.)
----
Before submitting this PR please review this checklist. Ideally all checkmarks should be checked upon submitting. (Use an x inside square brackets like so: [x])
- [ ] **Contributing**: You MUST read and be willing to accept the [CONTRIBUTOR AGREEMENT](https://github.com/winfsp/winfsp/blob/master/Contributors.asciidoc). The agreement gives joint copyright interests in your contributions to you and the original WinFsp author. If you have already accepted the [CONTRIBUTOR AGREEMENT](https://github.com/winfsp/winfsp/blob/master/Contributors.asciidoc) you do not need to do so again.
- [ ] **Topic branch**: Avoid creating the PR off the master branch of your fork. Consider creating a topic branch and request a pull from that. This allows you to add commits to the master branch of your fork without affecting this PR.
- [ ] **No tabs**: Consistently use SPACES everywhere. NO TABS, unless the file format requires it (e.g. Makefile).
- [ ] **Style**: Follow the same code style as the rest of the project.
- [ ] **Tests**: Include tests to the extent that it is possible, especially if you add a new feature.
- [ ] **Quality**: Your design and code should be of high quality and something that you are proud of.

18
.github/workflows/avm.yml vendored Normal file
View File

@ -0,0 +1,18 @@
name: avm
on:
schedule:
- cron: '0 2,8,14,20 * * *'
jobs:
scan:
runs-on: [windows-latest]
steps:
- uses: billziss-gh/avm@v1
with:
files: |
https://github.com/winfsp/winfsp/releases/download/v1.10/winfsp-1.10.22006.msi
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.0/winfsp-2.0.23075.msi

2
.gitmodules vendored
View File

@ -1,3 +1,3 @@
[submodule "ext/test"] [submodule "ext/test"]
path = ext/test path = ext/test
url = https://bitbucket.org/billziss/secfs.test.git url = https://github.com/billziss-gh/secfs.test.git

365
Changelog.md Normal file
View File

@ -0,0 +1,365 @@
# 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.
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.0B2 (2023 Beta2)
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.
- 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.
- 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.0B1 (2023 Beta1)
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.
Some changes that may be 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.
- 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
## v1.12.22339 (2022.2 Update1)
*Note: This release (`v1.12.22339`) is the same as the previous release (`v1.12`) except that: (1) the kernel-mode drivers are now digitally signed only with the Microsoft Attestation signature, and that: (2) no release assets are digitally signed with SHA-1. (This change was necessary to fix a problem in older versions of Windows such as Windows 7.)*
- [NEW] WinFsp now supports mounting as directory using the Mount Manager. Use the syntax `\\.\C:\Path\To\Mount\Directory`.
- [NEW] A new registry setting `MountUseMountmgrFromFSD` has been added. See [WinFsp Registry Settings](https://github.com/winfsp/winfsp/wiki/WinFsp-Registry-Settings) for details.
- [FIX] A problem with Windows containers has been fixed. (GitHub issue #438.)
- [FIX] File systems can now be mounted as directories on ARM64. (GitHub issue #448.)
- [FIX] The passthrough file system now reports correct `IndexNumber`. (GitHub issue #325.)
- [BUILD] Product configuration for the relative paths to the File System Driver, Network Provider and EventLog is now possible via the file `build.version.props` located in `build\VStudio`.
## v1.12 (2022.2)
- [NEW] WinFsp now supports mounting as directory using the Mount Manager. Use the syntax `\\.\C:\Path\To\Mount\Directory`.
- [NEW] A new registry setting `MountUseMountmgrFromFSD` has been added. See [WinFsp Registry Settings](https://github.com/winfsp/winfsp/wiki/WinFsp-Registry-Settings) for details.
- [FIX] A problem with Windows containers has been fixed. (GitHub issue #438.)
- [FIX] File systems can now be mounted as directories on ARM64. (GitHub issue #448.)
- [FIX] The passthrough file system now reports correct `IndexNumber`. (GitHub issue #325.)
- [BUILD] Product configuration for the relative paths to the File System Driver, Network Provider and EventLog is now possible via the file `build.version.props` located in `build\VStudio`.
## v1.12B2 (2022.2 Beta2)
- [NEW] WinFsp now supports mounting as directory using the Mount Manager. Use the syntax `\\.\C:\Path\To\Mount\Directory`.
- [NEW] A new registry setting `MountUseMountmgrFromFSD` has been added. See [WinFsp Registry Settings](https://github.com/winfsp/winfsp/wiki/WinFsp-Registry-Settings) for details.
- [FIX] A problem with Windows containers has been fixed. (GitHub issue #438.)
- [FIX] File systems can now be mounted as directories on ARM64. (GitHub issue #448.)
- [FIX] The passthrough file system now reports correct `IndexNumber`. (GitHub issue #325.)
- [BUILD] Product configuration for the relative paths to the File System Driver, Network Provider and EventLog is now possible via the file `build.version.props` located in `build\VStudio`.
## v1.12B1 (2022.2 Beta1)
- [NEW] WinFsp now supports mounting as directory using the Mount Manager. Use the syntax `\\.\C:\Path\To\Mount\Directory`.
- [NEW] A new registry setting `MountUseMountmgrFromFSD` has been added. See [WinFsp Registry Settings](https://github.com/winfsp/winfsp/wiki/WinFsp-Registry-Settings) for details.
- [BUILD] Product configuration for the relative paths to the File System Driver, Network Provider and EventLog is now possible via the file `build.version.props` located in `build\VStudio`.
## v1.11 (2022+ARM64)
- [NEW] ARM64 support! For details see [WinFsp on ARM64](https://github.com/winfsp/winfsp/wiki/WinFsp-on-ARM64).
- [NEW] A new file system operation has been added to the FUSE API:
```C
int (*getpath)(const char *path, char *buf, size_t size,
struct fuse_file_info *fi);
```
The `getpath` operation allows a case-insensitive file system to report the correct case of a file path. For example, `getpath` can be used to report that the actual path of a file opened as `/PATH/TO/FILE` is really `/Path/To/File`. This capability is important for some Windows file system scenarios and can sometimes result in a performance improvement.
- [NEW] New `ntptfs` sample file system. This is a production quality pass through file system and should be used instead of the original `passthrough` file system that was developed for education purposes only.
- [NEW] Many performance improvements:
- A new `PostDispositionForDirOnly` setting has been added to `FSP_FSCTL_VOLUME_PARAMS`. This allows a file system to declare that it does not want to see `SetInformation/Disposition` requests for files (such requests will still be sent for directories, because a file system is supposed to check if a directory is empty before deletion). This makes file (not directory) deletion faster. This optimization should be safe to enable for most file systems. FUSE file systems get this optimization for free.
- The FSD now implements "fast I/O" reads and writes. Fast I/O is a technique for doing I/O without using IRP's (I/O Request Packets) and can only work for file systems using the cache manager (`FileInfoTimeout==-1`). This results in significant improvement in read/write scenarios.
- The FSD now implements "fast I/O" for "transact" messages. Transact messages are used in the communication protocol between the kernel-mode FSD and the user-mode file system. Fast I/O speeds this communication protocol by as much as 10% in some scenarios. (Fast I/O for transact messages is enabled only when using the new `FSP_IOCTL_TRANSACT` control code, but does not require any other special configuration to be enabled.)
- The FSD per directory cache limit has been increased from 16K to 64K. This should allow for more directory data to be maintained in kernel and reduce round-trips to the user mode file system.
- The user mode directory buffering mechanism (`FspFileSystemAcquireDirectoryBuffer`) has been improved. The mechanism uses the quick-sort algorithm internally which can exhibit bad performance when sorting already sorted data. The quick-sort algorithm has been improved with the use use of median of three partitioning, which alleviates this problem.
- [NEW] A new registry setting under `HKLM\SOFTWARE\WinFsp` (or `HKLM\SOFTWARE\WOW6432Node\WinFsp` on a 64-bit system) called `MountBroadcastDriveChange` has been introduced, which if set to 1 will broadcast an additional "drive change" message to all top-level windows (including Explorer) during mounting and unmounting.
- 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.
- For more details see source code comments at [`FspMountBroadcastDriveChange`](https://github.com/winfsp/winfsp/blob/v1.11B3/src/dll/mount.c#L390-L406).
- [FIX] The WinFsp Network Provider now implements `NPGetUniversalName`. This fixes problems with some apps (e.g. Photos app).
- [FIX] WinFsp-FUSE now supports Azure AD accounts when specifying the `-o uid=-1` option. In addition a new option `-o uidmap=UID:SID` allows the specification of arbitrary UID<->SID or UID<->UserName mappings.
- [FIX] All executables (`*.exe,*.dll,*.sys`) in the WinFsp installation `bin` folder are now signed.
- [FIX] The default value for the registry setting `DistinctPermsForSameOwnerGroup` has been changed from 0 to 1.
- [BUILD] Product configuration (`MyProductName`, etc.) is done by the file `build.version.props` located in `build\VStudio`. This file was previously named `version.properties`.
## v1.11RC1 (2022+ARM64 RC1)
- [NEW] ARM64 support! For details see [WinFsp on ARM64](https://github.com/winfsp/winfsp/wiki/WinFsp-on-ARM64).
- [NEW] A new file system operation has been added to the FUSE API:
```C
int (*getpath)(const char *path, char *buf, size_t size,
struct fuse_file_info *fi);
```
The `getpath` operation allows a case-insensitive file system to report the correct case of a file path. For example, `getpath` can be used to report that the actual path of a file opened as `/PATH/TO/FILE` is really `/Path/To/File`. This capability is important for some Windows file system scenarios and can sometimes result in a performance improvement.
- [NEW] New `ntptfs` sample file system. This is a production quality pass through file system and should be used instead of the original `passthrough` file system that was developed for education purposes only.
- [NEW] Many performance improvements:
- A new `PostDispositionForDirOnly` setting has been added to `FSP_FSCTL_VOLUME_PARAMS`. This allows a file system to declare that it does not want to see `SetInformation/Disposition` requests for files (such requests will still be sent for directories, because a file system is supposed to check if a directory is empty before deletion). This makes file (not directory) deletion faster. This optimization should be safe to enable for most file systems. FUSE file systems get this optimization for free.
- The FSD now implements "fast I/O" reads and writes. Fast I/O is a technique for doing I/O without using IRP's (I/O Request Packets) and can only work for file systems using the cache manager (`FileInfoTimeout==-1`). This results in significant improvement in read/write scenarios.
- The FSD now implements "fast I/O" for "transact" messages. Transact messages are used in the communication protocol between the kernel-mode FSD and the user-mode file system. Fast I/O speeds this communication protocol by as much as 10% in some scenarios. (Fast I/O for transact messages is enabled only when using the new `FSP_IOCTL_TRANSACT` control code, but does not require any other special configuration to be enabled.)
- The FSD per directory cache limit has been increased from 16K to 64K. This should allow for more directory data to be maintained in kernel and reduce round-trips to the user mode file system.
- The user mode directory buffering mechanism (`FspFileSystemAcquireDirectoryBuffer`) has been improved. The mechanism uses the quick-sort algorithm internally which can exhibit bad performance when sorting already sorted data. The quick-sort algorithm has been improved with the use use of median of three partitioning, which alleviates this problem.
- [NEW] A new registry setting under `HKLM\SOFTWARE\WinFsp` (or `HKLM\SOFTWARE\WOW6432Node\WinFsp` on a 64-bit system) called `MountBroadcastDriveChange` has been introduced, which if set to 1 will broadcast an additional "drive change" message to all top-level windows (including Explorer) during mounting and unmounting.
- 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.
- For more details see source code comments at [`FspMountBroadcastDriveChange`](https://github.com/winfsp/winfsp/blob/v1.11B3/src/dll/mount.c#L390-L406).
- [FIX] The WinFsp Network Provider now implements `NPGetUniversalName`. This fixes problems with some apps (e.g. Photos app).
- [FIX] WinFsp-FUSE now supports Azure AD accounts when specifying the `-o uid=-1` option. In addition a new option `-o uidmap=UID:SID` allows the specification of arbitrary UID<->SID or UID<->UserName mappings.
- [FIX] All executables (`*.exe,*.dll,*.sys`) in the WinFsp installation `bin` folder are now signed.
- [FIX] The default value for the registry setting `DistinctPermsForSameOwnerGroup` has been changed from 0 to 1.
- [BUILD] Product configuration (`MyProductName`, etc.) is done by the file `build.version.props` located in `build\VStudio`. This file was previously named `version.properties`.
## v1.11B3 (2022+ARM64 Beta3)
- [NEW] ARM64 support! For details see [WinFsp on ARM64](https://github.com/winfsp/winfsp/wiki/WinFsp-on-ARM64).
- [NEW] A new file system operation has been added to the FUSE API:
```C
int (*getpath)(const char *path, char *buf, size_t size,
struct fuse_file_info *fi);
```
The `getpath` operation allows a case-insensitive file system to report the correct case of a file path. For example, `getpath` can be used to report that the actual path of a file opened as `/PATH/TO/FILE` is really `/Path/To/File`. This capability is important for some Windows file system scenarios and can sometimes result in a performance improvement.
- [NEW] New `ntptfs` sample file system. This is a production quality pass through file system and should be used instead of the original `passthrough` file system that was developed for education purposes only.
- [NEW] Many performance improvements:
- A new `PostDispositionForDirOnly` setting has been added to `FSP_FSCTL_VOLUME_PARAMS`. This allows a file system to declare that it does not want to see `SetInformation/Disposition` requests for files (such requests will still be sent for directories, because a file system is supposed to check if a directory is empty before deletion). This makes file (not directory) deletion faster. This optimization should be safe to enable for most file systems. FUSE file systems get this optimization for free.
- The FSD now implements "fast I/O" reads and writes. Fast I/O is a technique for doing I/O without using IRP's (I/O Request Packets) and can only work for file systems using the cache manager (`FileInfoTimeout==-1`). This results in significant improvement in read/write scenarios.
- The FSD now implements "fast I/O" for "transact" messages. Transact messages are used in the communication protocol between the kernel-mode FSD and the user-mode file system. Fast I/O speeds this communication protocol by as much as 10% in some scenarios. (Fast I/O for transact messages is enabled only when using the new `FSP_IOCTL_TRANSACT` control code, but does not require any other special configuration to be enabled.)
- The FSD per directory cache limit has been increased from 16K to 64K. This should allow for more directory data to be maintained in kernel and reduce round-trips to the user mode file system.
- The user mode directory buffering mechanism (`FspFileSystemAcquireDirectoryBuffer`) has been improved. The mechanism uses the quick-sort algorithm internally which can exhibit bad performance when sorting already sorted data. The quick-sort algorithm has been improved with the use use of median of three partitioning, which alleviates this problem.
- [NEW] A new registry setting under `HKLM\SOFTWARE\WinFsp` (or `HKLM\SOFTWARE\WOW6432Node\WinFsp` on a 64-bit system) called `MountBroadcastDriveChange` has been introduced, which if set to 1 will broadcast an additional "drive change" message to all top-level windows (including Explorer) during mounting and unmounting.
- 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.
- For more details see source code comments at [`FspMountBroadcastDriveChange`](https://github.com/winfsp/winfsp/blob/v1.11B3/src/dll/mount.c#L390-L406).
- [FIX] The WinFsp Network Provider now implements `NPGetUniversalName`. This fixes problems with some apps (e.g. Photos app).
- [FIX] WinFsp-FUSE now supports Azure AD accounts when specifying the `-o uid=-1` option. In addition a new option `-o uidmap=UID:SID` allows the specification of arbitrary UID<->SID or UID<->UserName mappings.
- [FIX] All executables (`*.exe,*.dll,*.sys`) in the WinFsp installation `bin` folder are now signed.
- [FIX] The default value for the registry setting `DistinctPermsForSameOwnerGroup` has been changed from 0 to 1.
- [BUILD] Product configuration (`MyProductName`, etc.) is done by the file `build.version.props` located in `build\VStudio`. This file was previously named `version.properties`.
## v1.11B2 (2022+ARM64 Beta2)
- [NEW] ARM64 support! For details see [WinFsp on ARM64](https://github.com/winfsp/winfsp/wiki/WinFsp-on-ARM64).
- [NEW] A new file system operation has been added to the FUSE API:
```C
int (*getpath)(const char *path, char *buf, size_t size,
struct fuse_file_info *fi);
```
The `getpath` operation allows a case-insensitive file system to report the correct case of a file path. For example, `getpath` can be used to report that the actual path of a file opened as `/PATH/TO/FILE` is really `/Path/To/File`. This capability is important for some Windows file system scenarios and can sometimes result in a performance improvement.
- [NEW] Many performance improvements:
- A new `PostDispositionForDirOnly` setting has been added to `FSP_FSCTL_VOLUME_PARAMS`. This allows a file system to declare that it does not want to see `SetInformation/Disposition` requests for files (such requests will still be sent for directories, because a file system is supposed to check if a directory is empty before deletion). This makes file (not directory) deletion faster. This optimization should be safe to enable for most file systems. FUSE file systems get this optimization for free.
- The FSD now implements "fast I/O" reads and writes. Fast I/O is a technique for doing I/O without using IRP's (I/O Request Packets) and can only work for file systems using the cache manager (`FileInfoTimeout==-1`). This results in significant improvement in read/write scenarios.
- The FSD per directory cache limit has been increased from 16K to 64K. This should allow for more directory data to be maintained in kernel and reduce round-trips to a user mode file system.
- The user mode directory buffering mechanism (`FspFileSystemAcquireDirectoryBuffer`) has been improved. The mechanism uses the quick-sort algorithm internally which can exhibit bad performance when sorting already sorted data. The quick-sort algorithm has been improved with the use use of median of three partitioning, which alleviates this problem.
- [NEW] The default value for the registry setting `DistinctPermsForSameOwnerGroup` has been changed from 0 to 1.
- [NEW] New `ntptfs` sample file system. This is a production quality pass through file system and should be used instead of the original `passthrough` file system that was developed for education purposes only.
- [FIX] The WinFsp Network Provider now implements `NPGetUniversalName`. This fixes problems with some apps (e.g. Photos app).
- [BUILD] Product configuration (`MyProductName`, etc.) is done by the file `build.version.props` located in `build\VStudio`. This file was previously named `version.properties`.
## v1.11B1 (2022+ARM64 Beta1)
- [NEW] ARM64 support! For details see [WinFsp on ARM64](https://github.com/winfsp/winfsp/wiki/WinFsp-on-ARM64).
- [NEW] New `ntptfs` sample file system. This is a production quality pass through file system and should be used instead of the original `passthrough` file system that was developed for education purposes only.
- [NEW] The default value for the registry setting `DistinctPermsForSameOwnerGroup` has been changed from 0 to 1.
- [BUILD] Product configuration (`MyProductName`, etc.) is done by the file `build.version.props` located in `build\VStudio`. This file was previously named `version.properties`.
## v1.10 (2022)
Prior changes are recorded in `doc/archive/Changelog-upto-v1.10.asciidoc`.

View File

@ -54,5 +54,26 @@ This CONTRIBUTOR AGREEMENT applies to any contribution that you make to the WinF
CONTRIBUTOR LIST CONTRIBUTOR LIST
---------------- ----------------
|=== |===
|Bill Zissimopoulos |billziss at navimatics.com |Alberto Alonso |alberto at alonso.xyz
|Ben Rubson |ben.rubson at gmail.com
|Bill Zissimopoulos |billziss at navimatics.com
|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
|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
|Gal Hammer (Red Hat, https://www.redhat.com) |ghammer at redhat.com
|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
|Sam Kelly (DuroSoft Technologies LLC, https://durosoft.com) |sam at durosoft.com
|Santiago Ganis |sganis at gmail.com
|Tobias Urlaub |saibotu at outlook.de
|Victor Gao |victgm at outlook.com
|Zeho Huang |zeho11 at protonmail.com
|=== |===

View File

@ -1,12 +1,39 @@
The WinFsp project is Copyright (C) Bill Zissimopoulos. It is licensed The WinFsp project is Copyright (C) Bill Zissimopoulos. It is licensed
under the terms of the AGPLv3. The full text of this license follows under the terms of the GPLv3.
below. Commercial licensing options are also available: Please contact
As a special exception to GPLv3, Bill Zissimopoulos grants additional
permissions to Free/Libre and Open Source Software ("FLOSS") without requiring
that such software is covered by the GPLv3.
1. Permission to link with a platform specific version of the WinFsp DLL
(one of: winfsp-a64.dll, winfsp-x64.dll, winfsp-x86.dll, winfsp-msil.dll).
2. Permission to distribute unmodified binary releases of the WinFsp
installer (as released by the WinFsp project).
These permissions (and no other) are granted provided that the software:
1. Is distributed under a license that satisfies the Free Software
Definition Version 1.141 (https://www.gnu.org/philosophy/free-sw.en.html)
or the Open Source Definition Version 1.9 (https://opensource.org/osd).
2. Includes the copyright notice "WinFsp - Windows File System Proxy,
Copyright (C) Bill Zissimopoulos" and a link to the WinFsp repository in
its user-interface and any user-facing documentation.
3. Is not linked or distributed with proprietary (non-FLOSS) software.
[You cannot mix FLOSS and proprietary software while using WinFsp under
this special exception.]
Commercial licensing options are also available: Please contact
Bill Zissimopoulos <billziss at navimatics.com>. Bill Zissimopoulos <billziss at navimatics.com>.
The full text of the GPLv3 license follows below.
----------------------------------------------------------------------- -----------------------------------------------------------------------
GNU AFFERO GENERAL PUBLIC LICENSE GNU GENERAL PUBLIC LICENSE
Version 3, 19 November 2007 Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies Everyone is permitted to copy and distribute verbatim copies
@ -14,15 +41,17 @@ Bill Zissimopoulos <billziss at navimatics.com>.
Preamble Preamble
The GNU Affero General Public License is a free, copyleft license for The GNU General Public License is a free, copyleft license for
software and other kinds of works, specifically designed to ensure software and other kinds of works.
cooperation with the community in the case of network server software.
The licenses for most software and other practical works are designed The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast, to take away your freedom to share and change the works. By contrast,
our General Public Licenses are intended to guarantee your freedom to the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free share and change all versions of a program--to make sure it remains free
software for all its users. software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you price. Our General Public Licenses are designed to make sure that you
@ -31,34 +60,44 @@ them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things. free programs, and that you know you can do these things.
Developers that use our General Public Licenses protect your rights To protect your rights, we need to prevent others from denying you
with two steps: (1) assert copyright on the software, and (2) offer these rights or asking you to surrender the rights. Therefore, you have
you this License which gives you legal permission to copy, distribute certain responsibilities if you distribute copies of the software, or if
and/or modify the software. you modify it: responsibilities to respect the freedom of others.
A secondary benefit of defending all users' freedom is that For example, if you distribute copies of such a program, whether
improvements made in alternate versions of the program, if they gratis or for a fee, you must pass on to the recipients the same
receive widespread use, become available for other developers to freedoms that you received. You must make sure that they, too, receive
incorporate. Many developers of free software are heartened and or can get the source code. And you must show them these terms so they
encouraged by the resulting cooperation. However, in the case of know their rights.
software used on network servers, this result may fail to come about.
The GNU General Public License permits making a modified version and
letting the public access it on a server without ever releasing its
source code to the public.
The GNU Affero General Public License is designed specifically to Developers that use the GNU GPL protect your rights with two steps:
ensure that, in such cases, the modified source code becomes available (1) assert copyright on the software, and (2) offer you this License
to the community. It requires the operator of a network server to giving you legal permission to copy, distribute and/or modify it.
provide the source code of the modified version running there to the
users of that server. Therefore, public use of a modified version, on
a publicly accessible server, gives the public access to the source
code of the modified version.
An older license, called the Affero General Public License and For the developers' and authors' protection, the GPL clearly explains
published by Affero, was designed to accomplish similar goals. This is that there is no warranty for this free software. For both users' and
a different license, not a version of the Affero GPL, but Affero has authors' sake, the GPL requires that modified versions be marked as
released a new version of the Affero GPL which permits relicensing under changed, so that their problems will not be attributed erroneously to
this license. authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and The precise terms and conditions for copying, distribution and
modification follow. modification follow.
@ -67,7 +106,7 @@ modification follow.
0. Definitions. 0. Definitions.
"This License" refers to version 3 of the GNU Affero General Public License. "This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of "Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks. works, such as semiconductor masks.
@ -544,45 +583,35 @@ to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program. License would be to refrain entirely from conveying the Program.
13. Remote Network Interaction; Use with the GNU General Public License. 13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, if you modify the
Program, your modified version must prominently offer all users
interacting with it remotely through a computer network (if your version
supports such interaction) an opportunity to receive the Corresponding
Source of your version by providing access to the Corresponding Source
from a network server at no charge, through some standard or customary
means of facilitating copying of software. This Corresponding Source
shall include the Corresponding Source for any work covered by version 3
of the GNU General Public License that is incorporated pursuant to the
following paragraph.
Notwithstanding any other provision of this License, you have Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed permission to link or combine any covered work with a work licensed
under version 3 of the GNU General Public License into a single under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work, License will continue to apply to the part which is the covered work,
but the work with which it is combined will remain governed by version but the special requirements of the GNU Affero General Public License,
3 of the GNU General Public License. section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License. 14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of The Free Software Foundation may publish revised and/or new versions of
the GNU Affero General Public License from time to time. Such new versions the GNU General Public License from time to time. Such new versions will
will be similar in spirit to the present version, but may differ in detail to be similar in spirit to the present version, but may differ in detail to
address new problems or concerns. address new problems or concerns.
Each version is given a distinguishing version number. If the Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU Affero General Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the Foundation. If the Program does not specify a version number of the
GNU Affero General Public License, you may choose any version ever published GNU General Public License, you may choose any version ever published
by the Free Software Foundation. by the Free Software Foundation.
If the Program specifies that a proxy can decide which future If the Program specifies that a proxy can decide which future
versions of the GNU Affero General Public License can be used, that proxy's versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you public statement of acceptance of a version permanently authorizes you
to choose that version for the Program. to choose that version for the Program.
@ -640,29 +669,40 @@ the "copyright" line and a pointer to where the full notice is found.
Copyright (C) <year> <name of author> Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
This program is distributed in the hope that it will be useful, This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU Affero General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail. Also add information on how to contact you by electronic and paper mail.
If your software can interact with users remotely through a computer If the program does terminal interaction, make it output a short
network, you should also make sure that it provides a way for users to notice like this when it starts in an interactive mode:
get its source. For example, if your program is a web application, its
interface could display a "Source" link that leads users to an archive <program> Copyright (C) <year> <name of author>
of the code. There are many ways you could offer source, and different This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
solutions will be better for different programs; see section 13 for the This is free software, and you are welcome to redistribute it
specific requirements. under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school, You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary. if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU AGPL, see For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>. <http://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.

124
README.md
View File

@ -1,38 +1,110 @@
# WinFsp - Windows File System Proxy <h1 align="center">WinFsp &middot; Windows File System Proxy</h1>
WinFsp is a set of software components for Windows computers that allows the creation of user mode file systems. In this sense it is similar to FUSE (Filesystem in Userspace), which provides the same functionality on UNIX-like computers. <p align="center">
<img src="art/winfsp-glow.png" width="128"/>
<br/>
<br/>
<i>WinFsp enables developers to write their own file systems (i.e. "Windows drives") as user mode programs and without any knowledge of Windows kernel programming. It is similar to FUSE (Filesystem in Userspace) for Linux and other UNIX-like computers.</i>
<br/>
<br/>
<a href="https://winfsp.dev"><b>winfsp.dev</b></a>
<br/>
<br/>
<a href="https://github.com/winfsp/winfsp/releases/latest"><img src="https://img.shields.io/github/release/winfsp/winfsp.svg?label=stable&style=for-the-badge&logo=data:image/svg%2bxml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0ODAgNDgwIj48cGF0aCBkPSJNMzg3LjAwMiAyMDEuMDAxQzM3Mi45OTggMTMyLjAwMiAzMTIuOTk4IDgwIDI0MCA4MGMtNTcuOTk4IDAtMTA3Ljk5OCAzMi45OTgtMTMyLjk5OCA4MS4wMDFDNDcuMDAyIDE2Ny4wMDIgMCAyMTcuOTk4IDAgMjgwYzAgNjUuOTk2IDUzLjk5OSAxMjAgMTIwIDEyMGgyNjBjNTUgMCAxMDAtNDUgMTAwLTEwMCAwLTUyLjk5OC00MC45OTYtOTYuMDAxLTkyLjk5OC05OC45OTl6TTIwOCAyNTJ2LTc2aDY0djc2aDY4TDI0MCAzNTIgMTQwIDI1Mmg2OHoiIGZpbGw9IiNmZmYiLz48L3N2Zz4="/></a>
<a href="https://github.com/winfsp/winfsp/releases"><img src="https://img.shields.io/github/release/winfsp/winfsp/all.svg?label=latest&colorB=e52e4b&style=for-the-badge&logo=data:image/svg%2bxml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0ODAgNDgwIj48cGF0aCBkPSJNMzg3LjAwMiAyMDEuMDAxQzM3Mi45OTggMTMyLjAwMiAzMTIuOTk4IDgwIDI0MCA4MGMtNTcuOTk4IDAtMTA3Ljk5OCAzMi45OTgtMTMyLjk5OCA4MS4wMDFDNDcuMDAyIDE2Ny4wMDIgMCAyMTcuOTk4IDAgMjgwYzAgNjUuOTk2IDUzLjk5OSAxMjAgMTIwIDEyMGgyNjBjNTUgMCAxMDAtNDUgMTAwLTEwMCAwLTUyLjk5OC00MC45OTYtOTYuMDAxLTkyLjk5OC05OC45OTl6TTIwOCAyNTJ2LTc2aDY0djc2aDY4TDI0MCAzNTIgMTQwIDI1Mmg2OHoiIGZpbGw9IiNmZmYiLz48L3N2Zz4="/></a>
<a href="https://chocolatey.org/packages/winfsp"><img src="https://img.shields.io/badge/choco-install%20winfsp-black.svg?style=for-the-badge"/></a>
<br/>
<br/>
<img src="doc/cap.gif" width="75%" height="75%"/>
<br/>
<br/>
</p>
Some of the benefits and features of using WinFsp are listed below: <hr/>
* Allows for easy development of file systems in user mode. There are no restrictions on what a process can do in order to implement a file system (other than respond in a timely manner to file system requests). ## Overview
* Support for disk and network based file systems.
* Support for NTFS level security and access control.
* Support for memory mapped files, cached files and the NT cache manager.
* Support for file change notifications.
* Support for file locking.
* Correct NT semantics with respect to file sharing, file deletion and renaming.
To learn more about WinFsp, please visit its website: http://www.secfs.net/winfsp/ WinFsp is a platform that provides development and runtime support for custom file systems on Windows computers. Typically any information or storage may be organized and presented as a file system via WinFsp, with the benefit being that the information can be accessed via the standand Windows file APIs by any Windows application.
## Project Organization The core WinFsp consists of a kernel mode file system driver (FSD) and a user mode DLL. The FSD interfaces with the Windows kernel and handles all interactions necessary to present itself as a file system driver. The DLL interfaces with the FSD and presents an API that can be used to handle file system functions. For example, when an application attempts to open a file, the file system receives an `Open` call with the necessary information.
WinFsp consists of a kernel mode FSD (File System Driver) and a user mode DLL (Dynamic Link Library). The FSD interfaces with NTOS (the Windows kernel) and handles all interactions necessary to present itself as a file system driver to NTOS. The DLL interfaces with the FSD and presents an easy to use API for creating user mode file systems. Using WinFsp to build a file system has many benefits:
The project source code is organized as follows: **Easy development**: Developing kernel mode file systems for Windows is a notoriously difficult task. WinFsp makes file system development relatively painless. This [Tutorial](doc/WinFsp-Tutorial.asciidoc) explains how to build a file system.
* build/VStudio: contains the WinFsp solution and project files. **Stability**: Stable software without any known kernel mode crashes, resource leaks or similar problems. WinFsp owes this stability to its [Design](doc/WinFsp-Design.asciidoc) and its rigorous [Testing Regime](doc/WinFsp-Testing.asciidoc).
* doc: contains the WinFsp license, contributor agreement and additional documentation. The WinFsp design document can be found here.
* ext/tlib: contains a small test library originally from the secfs (Secure Cloud File System) project.
* inc/winfsp: contains public include files to be used when developing a user mode file system.
* src/dll: contains the source code to the WinFsp DLL.
* src/sys: contains the source code to the WinFsp FSD.
* tst/memfs: contains the source code to an example file system written in C++ (memfs).
* tst/winfsp-tests: contains the WinFsp test suite.
## Building **Correctness**: Strives for file system correctness and compatibility with NTFS. For details see the [Compatibility](doc/NTFS-Compatibility.asciidoc) document.
In order to build WinFsp you will need Windows 10 and Visual Studio 2015. You will also need the Windows Driver Kit (WDK) 10. **Performance**: Has excellent performance that rivals or exceeds that of NTFS in many file system scenarios. Read more about its [Performance](doc/WinFsp-Performance-Testing.asciidoc).
## License <p align="center">
<img src="doc/WinFsp-Performance-Testing/file_tests.png" height="300"/>
<img src="doc/WinFsp-Performance-Testing/rdwr_tests.png" height="300"/>
</p>
WinFsp is available under the [AGPLv3](http://www.gnu.org/licenses/agpl-3.0.html) license. If you find the constraints of the AGPLv3 too onerous, a commercial license is also available. Please contact Bill Zissimopoulos <billziss at navimatics.com> for more details. **Wide support**: Supports Windows 7 to Windows 11 and the x86, x64 and ARM64 architectures.
**Flexible API**: Includes Native, FUSE2, FUSE3 and .NET API's.
**Shell integration**: Provides facilities to integrate user mode file systems with the Windows shell. See the [Service Architecture](doc/WinFsp-Service-Architecture.asciidoc) document.
**Self-contained**: Self-contained software without external dependencies.
**Widely used**: Used in many open-source and commercial applications with millions of installations (estimated: the WinFsp project does not track its users).
**Flexible licensing**: Available under the [GPLv3](License.txt) license with a special exception for Free/Libre and Open Source Software. A commercial license is also available. Please contact Bill Zissimopoulos \<billziss at navimatics.com> for more details.
## Installation
Download and run the [WinFsp installer](https://github.com/winfsp/winfsp/releases/latest). In the installer select the option to install the "Developer" files. These include the MEMFS sample file system, but also header and library files that let you develop your own user-mode file system.
<img src="doc/WinFsp-Tutorial/Installer.png" height="290"/>
### Launch a file system for testing
You can test WinFsp by launching MEMFS from the command line:
```
billziss@xps ⟩ ~ ⟩ net use X: \\memfs64\test
The command completed successfully.
billziss@xps ⟩ ~ ⟩ X:
billziss@xps ⟩ X:\ ⟩ echo "hello world" > hello.txt
billziss@xps ⟩ X:\ ⟩ dir
Directory: X:\
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 6/12/2022 5:15 PM 28 hello.txt
billziss@xps ⟩ X:\ ⟩ type hello.txt
hello world
billziss@xps ⟩ X:\ ⟩ cd ~
billziss@xps ⟩ ~ ⟩ net use X: /delete
X: was deleted successfully.
```
MEMFS (and all file systems that use the WinFsp Launcher as documented in the [Service Architecture](doc/WinFsp-Service-Architecture.asciidoc) document) can also be launched from Explorer using the "Map Network Drive" functionality.
## Resources
**Documentation**:
- [Tutorial](doc/WinFsp-Tutorial.asciidoc)
- [API Reference](doc/WinFsp-API-winfsp.h.md)
- [Building](doc/WinFsp-Building.asciidoc)
- [Project wiki](https://github.com/winfsp/winfsp/wiki)
**Discussion**:
- [WinFsp Google Group](https://groups.google.com/forum/#!forum/winfsp)
- [Author's Twitter](https://twitter.com/BZissimopoulos)

View File

@ -1,21 +1,117 @@
version: '{build}' version: '{build}'
skip_tags: true
skip_commits:
files:
- README.md
- Changelog.md
- Contributors.asciidoc
- art/**
- doc/**
environment: environment:
CONFIGURATION: Release # Disable the winfsp-tests built-in exception filter to allow WER to collect dumps.
WINFSP_TESTS_EXCEPTION_FILTER_DISABLE: 1
matrix:
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
CONFIGURATION: Debug
TESTING: Func
DOCKER_TESTING: None
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
CONFIGURATION: Release
TESTING: Func
DOCKER_TESTING: None
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
CONFIGURATION: Release
TESTING: Func
DOCKER_TESTING: None
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
CONFIGURATION: Release
TESTING: Func
DOCKER_TESTING: Func
#- CONFIGURATION: Release
# TESTING: Avast
# DOCKER_TESTING: None
#- CONFIGURATION: Release
# TESTING: Perf
# DOCKER_TESTING: None
init:
- ps: iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
install: install:
# Hack to make WDK 1903 work on VS2015.
# See https://github.com/appveyor-tests/WDK-10.0.14393.0/blob/31cf12217fe0c92b218c70d7027dfe145be4f4cb/appveyor.yml#L7
- ps: |
if ($env:APPVEYOR_BUILD_WORKER_IMAGE -eq "Visual Studio 2015") {
[xml]$targets = get-content "C:\Program Files (x86)\Windows Kits\10\build\WindowsDriver.Common.targets"
$usingTask = $targets.ChildNodes[1].UsingTask | ? {$_.TaskName -eq "ValidateNTTargetVersion"}
$usingTask.AssemblyFile = '$(WDKContentRoot)build\bin\Microsoft.DriverKit.Build.Tasks.16.0.dll'
$targets.Save("C:\Program Files (x86)\Windows Kits\10\build\WindowsDriver.Common.targets")
Add-AppveyorMessage "Hack to make WDK 1903 work on VS2015"
}
# Install .NET SDK on VS2015 image
- ps: |
if ($env:APPVEYOR_BUILD_WORKER_IMAGE -eq "Visual Studio 2015") {
& ([scriptblock]::Create((New-Object System.Net.WebClient).DownloadString('https://dot.net/v1/dotnet-install.ps1'))) -InstallDir "C:\dotnet"
}
# Submodules
- git submodule update --init --recursive - git submodule update --init --recursive
# Kernel and user mode dumps
- if exist %SystemRoot%\memory.dmp del %SystemRoot%\memory.dmp
- if exist C:\projects\LocalDumps rmdir /s/q C:\projects\LocalDumps
- mkdir C:\projects\LocalDumps
- reg add "HKLM\Software\Microsoft\Windows\Windows Error Reporting\LocalDumps" /v DumpFolder /t REG_EXPAND_SZ /d C:\projects\LocalDumps /f
- reg add "HKLM\Software\Microsoft\Windows\Windows Error Reporting\LocalDumps" /v DumpType /t REG_DWORD /d 2 /f
# Boot configuration
- appveyor AddMessage "Change boot configuration and reboot" -Category Information - appveyor AddMessage "Change boot configuration and reboot" -Category Information
- bcdedit /set testsigning on - bcdedit /set testsigning on
- if %TESTING%==Func verifier /standard /driver winfsp-x64.sys & exit 0
- ps: Restart-Computer -Force - ps: Restart-Computer -Force
- ps: Start-Sleep -s 10 - ps: Start-Sleep -s 60
build_script: build_script:
- appveyor AddMessage "Reboot complete" -Category Information - appveyor AddMessage "Reboot complete" -Category Information
- bcdedit | findstr /i "testsigning" # build cygfuse
#- C:\cygwin64\setup-x86_64.exe -qnNd -P cygport
#- C:\cygwin64\bin\bash --login -c "make -C '%CD%\opt\cygfuse' dist"
#- C:\cygwin\setup-x86.exe -qnNd -P cygport
#- C:\cygwin\bin\bash --login -c "make -C '%CD%\opt\cygfuse' dist"
# remove ARM64 project configurations to build in VS2015/VS2017
- if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2015" tools\gensrc\remove-build-arm64.bat
- if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2017" tools\gensrc\remove-build-arm64.bat
# remove .NET library from solution for VS2015 and use the .NET SDK instead
- if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2015" tools\gensrc\remove-build-dotnet.bat build\VStudio
- if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2015" set PATH=C:\dotnet;%PATH%
# build winfsp
- tools\build.bat %CONFIGURATION% - tools\build.bat %CONFIGURATION%
test_script: test_script:
- for %%f in ("build\VStudio\build\%CONFIGURATION%\winfsp-*.msi") do start /wait msiexec /i %%f /qn INSTALLLEVEL=1000 - choco install winfsp -s build\VStudio\build\%CONFIGURATION% -y --pre
- tools\nmake-ext-test.bat %CONFIGURATION% - if %TESTING%==Func appveyor DownloadFile https://winfsp.dev/assets/pvt/Test.Filter.Driver.zip.001
- tools\run-tests.bat %CONFIGURATION% - if %TESTING%==Func appveyor DownloadFile https://winfsp.dev/assets/pvt/Test.Filter.Driver.zip.002
- if %TESTING%==Func 7z x Test.Filter.Driver.zip.001
- if %TESTING%==Func start /wait msiexec /i "Test.Filter.Driver\HCK Filter.Driver Content-x86_en-us.msi" /qn
- if %TESTING%==Func tools\nmake-ext-test.bat %CONFIGURATION%
#- ps: . "C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\gflags.exe" /k +spp *
- if %DOCKER_TESTING%==Func docker run -d --name=Container0 --isolation=process "-vC:\Program Files (x86)\WinFsp:C:\Program Files (x86)\WinFsp:RO" "-vC:\projects:C:\projects:RO" mcr.microsoft.com/windows/servercore:ltsc2019 cmd.exe /c waitfor 7BF47D72F6664550B03248ECFE77C7DD
- if %TESTING%==Func tools\run-tests.bat %CONFIGURATION%
- if %TESTING%==Func tools\run-tests.bat %CONFIGURATION% ifstest
- if %TESTING%==Func tools\run-tests.bat %CONFIGURATION% sample
- if %TESTING%==Func tools\run-tests.bat %CONFIGURATION% compat
- if %TESTING%==Avast choco install avastfreeantivirus && fltmc instances -v "C:"
- if %TESTING%==Avast tools\run-tests.bat %CONFIGURATION% avast-tests
- if %TESTING%==Perf tools\run-perf-tests.bat %CONFIGURATION% baseline > perf-tests.csv && type perf-tests.csv & appveyor PushArtifact perf-tests.csv
- if %DOCKER_TESTING%==Func docker exec Container0 cmd.exe /c C:\projects\winfsp\build\VStudio\build\%CONFIGURATION%\winfsp-tests-x64.exe +*
#- if %DOCKER_TESTING%==Func docker run -d --name=Container1 --isolation=process "-vC:\Program Files (x86)\WinFsp:C:\Program Files (x86)\WinFsp:RO" "-vC:\projects:C:\projects:RO" mcr.microsoft.com/windows/servercore:ltsc2019 cmd.exe /c waitfor 7BF47D72F6664550B03248ECFE77C7DD
#- if %DOCKER_TESTING%==Func docker exec Container1 cmd.exe /c C:\projects\winfsp\build\VStudio\build\%CONFIGURATION%\winfsp-tests-x64.exe +*
- choco uninstall winfsp -y
on_finish:
- verifier /query
- if exist %SystemRoot%\memory.dmp (7z a km.dmp.zip %SystemRoot%\memory.dmp && appveyor PushArtifact km.dmp.zip)
- dir /a/b C:\projects\LocalDumps | findstr "^" && (7z a um.dmp.zip C:\projects\LocalDumps && appveyor PushArtifact um.dmp.zip) || ver>nul
- if exist *.dmp.zip (7z a sym.pdb.zip build\VStudio\build\%CONFIGURATION%\*.pdb && appveyor PushArtifact sym.pdb.zip)
- if exist *.dmp.zip exit 1
#- ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))

BIN
art/winfsp-glow.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
art/winfsp-solid.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
art/winfsp.afdesign Normal file

Binary file not shown.

BIN
art/wixbanner.afdesign Normal file

Binary file not shown.

BIN
art/wixdialog.afdesign Normal file

Binary file not shown.

View File

@ -3,3 +3,7 @@ build
*.suo *.suo
*.vcproj.* *.vcproj.*
*.vcxproj.user *.vcxproj.user
*.csproj.user
*.VC.db
*.VC.opendb
.vs

View File

@ -0,0 +1,33 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MsbuildThisFileDirectory)\build.version.props" />
<ItemDefinitionGroup>
<ClCompile>
<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>
<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>
</ResourceCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(IsKernelModeToolset)'=='true'">
<ClCompile>
<DisableSpecificWarnings>4996</DisableSpecificWarnings>
</ClCompile>
<DriverSign>
<FileDigestAlgorithm>sha256</FileDigestAlgorithm>
</DriverSign>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(DefaultPlatformToolset)'=='v140'">
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(DefaultPlatformToolset)'!='v140'">
<Link>
<GenerateDebugInformation>DebugFull</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<PropertyGroup>
<SpectreMitigation>false</SpectreMitigation>
</PropertyGroup>
</Project>

View File

@ -0,0 +1,76 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<!-- build number: concat 2-digit year with 3-digit day of the year (16-bits until 2066) -->
<MyBuildNumber>$([System.DateTime]::Now.ToString(`yy`))$([System.DateTime]::Now.DayOfYear.ToString(`000`))</MyBuildNumber>
<!-- git revision -->
<MyGitRoot>$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), .git/HEAD))</MyGitRoot>
<MyGitHead Condition=" Exists('$(MyGitRoot)/.git/HEAD')">$([System.IO.File]::ReadAllText($(MyGitRoot)/.git/HEAD).Trim())</MyGitHead>
<MyGitHead Condition="!Exists('$(MyGitRoot)/.git/HEAD')">0000000</MyGitHead>
<MyGitRevision Condition="$(MyGitHead.StartsWith(ref: )) And Exists('$(MyGitRoot)/.git/$(MyGitHead.Substring(5))')">$([System.IO.File]::ReadAllText($(MyGitRoot)/.git/$(MyGitHead.Substring(5))).Trim().Substring(0, 7))</MyGitRevision>
<MyGitRevision Condition="$(MyGitHead.StartsWith(ref: )) And !Exists('$(MyGitRoot)/.git/$(MyGitHead.Substring(5))')">$([System.Text.RegularExpressions.Regex]::Match($([System.IO.File]::ReadAllText($(MyGitRoot)/.git/packed-refs)), '[0-9a-fA-F]{40,}.*$(MyGitHead.Substring(5))').Value.Substring(0, 7))</MyGitRevision>
<MyGitRevision Condition="!$(MyGitHead.StartsWith(ref: ))">$(MyGitHead.Substring(0, 7))</MyGitRevision>
<MyProductName>WinFsp</MyProductName>
<MyProductFileName>winfsp</MyProductFileName>
<MyDescription>Windows File System Proxy</MyDescription>
<MyCompanyName>Navimatics LLC</MyCompanyName>
<MyCopyright>2015-$([System.DateTime]::Now.ToString(`yyyy`)) Bill Zissimopoulos</MyCopyright>
<MyCanonicalVersion>2.1</MyCanonicalVersion>
<MyProductVersion>2024 Beta2</MyProductVersion>
<MyProductStage>Beta</MyProductStage>
<MyCrossCert>DigiCertGlobalG3CodeSigningECCSHA3842021CA1.cer</MyCrossCert>
<MyCertIssuer>DigiCert</MyCertIssuer>
<MyVersion>$(MyCanonicalVersion).$(MyBuildNumber)</MyVersion>
<MyVersionWithCommas>$(MyVersion.Replace('.',',')),0</MyVersionWithCommas>
<MyFullVersion>$(MyCanonicalVersion).$(MyBuildNumber).$(MyGitRevision)</MyFullVersion>
<MyAssemblyPolicyVersion>$(MyCanonicalVersion.Substring(0,$(MyVersion.IndexOf('.')))).0</MyAssemblyPolicyVersion>
<MyAssemblyVersion>$(MyAssemblyPolicyVersion).0.0</MyAssemblyVersion>
<MyProductFileArch Condition="'$(Platform)'=='ARM64'">a64</MyProductFileArch>
<MyProductFileArch Condition="'$(Platform)'=='x64'">x64</MyProductFileArch>
<MyProductFileArch Condition="'$(Platform)'=='Win32'">x86</MyProductFileArch>
<!-- When rebranding WinFsp you MUST change the following GUIDs - use VS "Create GUID" tool -->
<MyFspFsctlDeviceClassGuid>{ 0x6f9d25fa, 0x6dee, 0x4a9d, { 0x80, 0xf5, 0xe9, 0x8e, 0x14, 0xf3, 0x5e, 0x54 } }</MyFspFsctlDeviceClassGuid>
<MyFspFsvrtDeviceClassGuid>{ 0xb48171c3, 0xdd50, 0x4852, { 0x83, 0xa3, 0x34, 0x4c, 0x50, 0xd9, 0x3b, 0x17 } }</MyFspFsvrtDeviceClassGuid>
<!--
Configure paths used for registration via DllRegisterServer:
- MyFsctlRegisterPath: File System Driver registration path
- MyNpRegisterPath: Network Provider registration path
- MyEventLogRegisterPath: Event Log registration path
These paths are assumed to be relative to the location of the WinFsp DLL during
registration: during DLLRegisterServer the DLL uses PathCombineW to combine its own
location with these paths to produce the final locations to be used for registration.
For example, if the DLL location is `C:\Program Files (x86)\WinFsp\bin\winfsp-x64.dll`:
- Combining with the path "." will produce the original DLL location:
`C:\Program Files (x86)\WinFsp\bin\winfsp-x64.dll`
- Combining with the path "..\\NetworkProvider.dll" will produce:
`C:\Program Files (x86)\WinFsp\bin\NetworkProvider.dll`
- For Network Provider registrations only it is allowed to use environment variables
in the path. For example combining the above DLL location with the path
"..\\NetworkProvider-\x25PROCESSOR_ARCHITECTURE\x25.dll" will produce:
`C:\Program Files (x86)\WinFsp\bin\NetworkProvider-%PROCESSOR_ARCHITECTURE%.dll`
(Note that the \x25 escape sequence must be used otherwise the VS build system will
try to interpret the string %PROCESSOR_ARCHITECTURE% as an environment variable during
the build.)
-->
<MyFsctlRegisterPath>"."</MyFsctlRegisterPath>
<MyNpRegisterPath>"."</MyNpRegisterPath>
<MyEventLogRegisterPath>"."</MyEventLogRegisterPath>
</PropertyGroup>
</Project>

View File

@ -0,0 +1,113 @@
<Project>
<PropertyGroup>
<BaseIntermediateOutputPath>$(SolutionDir)build\$(MSBuildProjectName).build\</BaseIntermediateOutputPath>
</PropertyGroup>
<Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), build.common.props))/build.common.props" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<OutputType>Library</OutputType>
<ProjectName>winfsp.net</ProjectName>
<RootNamespace>Fsp</RootNamespace>
<AssemblyName>$(MyProductFileName)-msil</AssemblyName>
<TargetFrameworks>netstandard2.0;net35</TargetFrameworks>
<FileAlignment>512</FileAlignment>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
</PropertyGroup>
<PropertyGroup Condition="'$(TargetFramework)' != 'netstandard2.0'">
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>$(SolutionDir)build\$(Configuration)\</OutputPath>
<IntermediateOutputPath>$(BaseIntermediateOutputPath)$(Configuration)\</IntermediateOutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<DocumentationFile>$(BaseIntermediateOutputPath)$(Configuration)\$(MyProductFileName)-msil.xml</DocumentationFile>
<NoWarn>1591</NoWarn>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>$(SolutionDir)build\$(Configuration)\</OutputPath>
<IntermediateOutputPath>$(BaseIntermediateOutputPath)$(Configuration)\</IntermediateOutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<DocumentationFile>$(BaseIntermediateOutputPath)$(Configuration)\$(MyProductFileName)-msil.xml</DocumentationFile>
<NoWarn>1591</NoWarn>
</PropertyGroup>
<PropertyGroup>
<SignAssembly>true</SignAssembly>
</PropertyGroup>
<PropertyGroup>
<AssemblyOriginatorKeyFile>winfsp.net.snk</AssemblyOriginatorKeyFile>
</PropertyGroup>
<ItemGroup>
<Compile Include="..\..\..\src\dotnet\FileSystemBase+Const.cs">
<Link>FileSystemBase+Const.cs</Link>
</Compile>
<Compile Include="..\..\..\src\dotnet\FileSystemBase.cs">
<Link>FileSystemBase.cs</Link>
</Compile>
<Compile Include="..\..\..\src\dotnet\FileSystemHost.cs">
<Link>FileSystemHost.cs</Link>
</Compile>
<Compile Include="..\..\..\src\dotnet\Interop.cs">
<Link>Interop.cs</Link>
</Compile>
<Compile Include="..\..\..\src\dotnet\Service.cs">
<Link>Service.cs</Link>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="winfsp.net.snk" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">
<PackageReference Include="Microsoft.Win32.Registry">
<Version>5.0.0</Version>
</PackageReference>
<PackageReference Include="System.IO.FileSystem.AccessControl">
<Version>5.0.0</Version>
</PackageReference>
</ItemGroup>
<PropertyGroup>
<AssemblyName>$(MyProductFileName)-msil</AssemblyName>
<AssemblyTitle>$(MyDescription)</AssemblyTitle>
<Product>$(MyProductName)</Product>
<Copyright>$(MyCopyright)</Copyright>
<AssemblyVersion>$(MyAssemblyVersion)</AssemblyVersion>
<FileVersion>$(MyVersion)</FileVersion>
<!-- NuGet metadata -->
<PackageId>$(MyProductFileName).net</PackageId>
<Version>$(MyVersion)</Version>
<Description>$(MyDescription)</Description>
<Authors>$(MyCopyright)</Authors>
<Company>$(MyCompanyName)</Company>
</PropertyGroup>
<PropertyGroup>
<PostBuildEvent>exit /b 0
set TargetName=$(TargetName)
set MyAssemblyPolicyVersion=$(MyAssemblyPolicyVersion)
set MyAssemblyVersion=$(MyAssemblyVersion)
setlocal EnableDelayedExpansion
if exist $(OutDir)policy.$(MyAssemblyPolicyVersion).$(TargetName).config del $(OutDir)policy.$(MyAssemblyPolicyVersion).$(TargetName).config
for /f "delims=" %25%25l in ($(ProjectDir)winfsp.net.policy.config) do (
set line=%25%25l
echo !line! &gt;&gt;$(OutDir)policy.$(MyAssemblyPolicyVersion).$(TargetName).config
)
"$(MSBuildProgramFiles32)\Microsoft SDKs\Windows\v7.0A\Bin\al.exe" /product:"$(MyProductName)" /title:"$(MyDescription)" /company:"$(MyCompanyName)" /copyright:"$(MyCopyright)" /version:"$(MyAssemblyPolicyVersion)" /fileversion:"$(MyVersion)" /link:$(OutDir)policy.$(MyAssemblyPolicyVersion).$(TargetName).config /out:$(OutDir)policy.$(MyAssemblyPolicyVersion).$(TargetName).dll /keyfile:$(ProjectDir)$(ProjectName).snk
</PostBuildEvent>
</PropertyGroup>
<Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" />
</Project>

View File

@ -0,0 +1,10 @@
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="!TargetName!" publicKeyToken="b099876d8fa9b1f3" culture="neutral" />
<bindingRedirect oldVersion="!MyAssemblyPolicyVersion!.0.0-!MyAssemblyVersion!" newVersion="!MyAssemblyVersion!" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>

Binary file not shown.

View File

@ -1,26 +1,75 @@
/** /**
* @file CustomActions.cpp * @file CustomActions.cpp
* *
* @copyright 2015-2016 Bill Zissimopoulos * @copyright 2015-2024 Bill Zissimopoulos
*/ */
/* /*
* This file is part of WinFsp. * This file is part of WinFsp.
* *
* You can redistribute it and/or modify it under the terms of the * You can redistribute it and/or modify it under the terms of the GNU
* GNU Affero General Public License version 3 as published by the * General Public License version 3 as published by the Free Software
* Free Software Foundation. * Foundation.
* *
* Licensees holding a valid commercial license may use this file in * Licensees holding a valid commercial license may use this software
* accordance with the commercial license agreement provided with the * in accordance with the commercial license agreement provided in
* software. * conjunction with the software. The terms and conditions of any such
* commercial license agreement shall govern, supersede, and render
* ineffective any application of the GPLv3 license to this software,
* notwithstanding of any reference thereto in the software or
* associated repository.
*/ */
#define WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN
#include <windows.h> #include <windows.h>
#include <shellapi.h>
#include <msiquery.h> #include <msiquery.h>
#include <wcautil.h> #include <wcautil.h>
#include <strutil.h> #include <strutil.h>
static HINSTANCE DllInstance;
UINT __stdcall InstanceID(MSIHANDLE MsiHandle)
{
#if 0
WCHAR MessageBuf[64];
wsprintfW(MessageBuf, L"PID=%ld", GetCurrentProcessId());
MessageBoxW(0, MessageBuf, L"" __FUNCTION__ " Break", MB_OK);
#endif
HRESULT hr = S_OK;
UINT err = ERROR_SUCCESS;
SYSTEMTIME SystemTime;
WCHAR Result[32+1];
hr = WcaInitialize(MsiHandle, __FUNCTION__);
ExitOnFailure(hr, "Failed to initialize");
WcaLog(LOGMSG_STANDARD, "Initialized");
GetSystemTime(&SystemTime);
wsprintfW(Result, L"%04u%02u%02uT%02u%02u%02uZ",
SystemTime.wYear,
SystemTime.wMonth,
SystemTime.wDay,
SystemTime.wHour,
SystemTime.wMinute,
SystemTime.wSecond);
/*
* Sleep 1 second to ensure timestamp uniqueness.
*
* Note that this assumes that time is monotonic and users do not change time.
* Disable for now as it is assumed that the installation takes more than 1 second to complete.
*/
//Sleep(1000);
WcaSetProperty(L"" __FUNCTION__, Result);
LExit:
err = SUCCEEDED(hr) ? ERROR_SUCCESS : ERROR_INSTALL_FAILURE;
return WcaFinalize(err);
}
UINT __stdcall ServiceRunning(MSIHANDLE MsiHandle) UINT __stdcall ServiceRunning(MSIHANDLE MsiHandle)
{ {
#if 0 #if 0
@ -40,7 +89,7 @@ UINT __stdcall ServiceRunning(MSIHANDLE MsiHandle)
hr = WcaInitialize(MsiHandle, __FUNCTION__); hr = WcaInitialize(MsiHandle, __FUNCTION__);
ExitOnFailure(hr, "Failed to initialize"); ExitOnFailure(hr, "Failed to initialize");
WcaGetProperty(L"" __FUNCTION__, &ServiceName); hr = WcaGetProperty(L"" __FUNCTION__, &ServiceName);
ExitOnFailure(hr, "Failed to get ServiceName"); ExitOnFailure(hr, "Failed to get ServiceName");
WcaLog(LOGMSG_STANDARD, "Initialized: \"%S\"", ServiceName); WcaLog(LOGMSG_STANDARD, "Initialized: \"%S\"", ServiceName);
@ -66,12 +115,390 @@ LExit:
return WcaFinalize(err); return WcaFinalize(err);
} }
UINT __stdcall DeferredAction(MSIHANDLE MsiHandle)
{
#if 0
WCHAR MessageBuf[64];
wsprintfW(MessageBuf, L"PID=%ld", GetCurrentProcessId());
MessageBoxW(0, MessageBuf, L"" __FUNCTION__ " Break", MB_OK);
#endif
HRESULT hr = S_OK;
UINT err = ERROR_SUCCESS;
PWSTR CommandLine = 0;
PWSTR *Argv;
int Argc;
CHAR ProcName[64];
FARPROC Proc;
hr = WcaInitialize(MsiHandle, __FUNCTION__);
ExitOnFailure(hr, "Failed to initialize");
hr = WcaGetProperty(L"CustomActionData", &CommandLine);
ExitOnFailure(hr, "Failed to get CommandLine");
WcaLog(LOGMSG_STANDARD, "Initialized: \"%S\"", CommandLine);
Argv = CommandLineToArgvW(CommandLine, &Argc);
ExitOnNullWithLastError(Argv, hr, "Failed to CommandLineToArgvW");
if (0 < Argc)
{
if (0 == WideCharToMultiByte(CP_UTF8, 0, Argv[0], -1, ProcName, sizeof ProcName, 0, 0))
ExitWithLastError(hr, "Failed to WideCharToMultiByte");
Proc = GetProcAddress(DllInstance, ProcName);
ExitOnNullWithLastError(Proc, hr, "Failed to GetProcAddress");
err = ((HRESULT (*)(int, PWSTR *))Proc)(Argc, Argv);
ExitOnWin32Error(err, hr, "Failed to %s", ProcName);
}
else
{
hr = E_INVALIDARG;
ExitOnFailure(hr, "Failed to get arguments");
}
LExit:
LocalFree(Argv);
ReleaseStr(CommandLine);
err = SUCCEEDED(hr) ? ERROR_SUCCESS : ERROR_INSTALL_FAILURE;
return WcaFinalize(err);
}
static DWORD MakeSymlink(PWSTR Symlink, PWSTR Target);
static DWORD MakeJunction(PWSTR Junction, PWSTR Target);
static DWORD CreateJunction(PWSTR Junction, PWSTR Target);
static DWORD RemoveFile(PWSTR FileName);
DWORD InstallSymlinks(int Argc, PWSTR *Argv)
{
/* usage: InstallSymlinks/InstallJunctions SourceDir TargetDir Name... */
DWORD Result;
BOOL Junctions;
PWSTR SourceDir, TargetDir;
WCHAR SourcePath[MAX_PATH], TargetPath[MAX_PATH];
int SourceDirLen, TargetDirLen, Len;
if (4 > Argc)
{
Result = ERROR_INVALID_PARAMETER;
goto exit;
}
Junctions = 0 == lstrcmpW(L"InstallJunctions", Argv[0]);
SourceDir = Argv[1];
TargetDir = Argv[2];
SourceDirLen = lstrlenW(SourceDir);
TargetDirLen = lstrlenW(TargetDir);
for (int Argi = 3; Argc > Argi; Argi++)
{
Len = lstrlenW(Argv[Argi]);
if (MAX_PATH < SourceDirLen + Len + 1 || MAX_PATH < TargetDirLen + Len + 1)
{
Result = ERROR_FILENAME_EXCED_RANGE;
goto exit;
}
memcpy(SourcePath, SourceDir, SourceDirLen * sizeof(WCHAR));
memcpy(SourcePath + SourceDirLen, Argv[Argi], Len * sizeof(WCHAR));
SourcePath[SourceDirLen + Len] = L'\0';
memcpy(TargetPath, TargetDir, TargetDirLen * sizeof(WCHAR));
memcpy(TargetPath + TargetDirLen, Argv[Argi], Len * sizeof(WCHAR));
TargetPath[TargetDirLen + Len] = L'\0';
if (!Junctions)
Result = MakeSymlink(SourcePath, TargetPath);
else
Result = MakeJunction(SourcePath, TargetPath);
#if 0
WCHAR MessageBuf[1024];
wsprintfW(MessageBuf, L"MakeSymlink(\"%s\", \"%s\") = %lu", SourcePath, TargetPath, Result);
MessageBoxW(0, MessageBuf, L"TRACE", MB_OK);
#endif
if (ERROR_SUCCESS != Result)
goto exit;
}
Result = ERROR_SUCCESS;
exit:
return Result;
}
DWORD InstallJunctions(int Argc, PWSTR *Argv)
{
return InstallSymlinks(Argc, Argv);
}
DWORD RemoveFiles(int Argc, PWSTR *Argv)
{
/* usage: RemoveFiles Dir Name... */
DWORD Result;
PWSTR Dir;
WCHAR Path[MAX_PATH];
int DirLen, Len;
if (3 > Argc)
{
Result = ERROR_INVALID_PARAMETER;
goto exit;
}
Dir = Argv[1];
DirLen = lstrlenW(Dir);
for (int Argi = 2; Argc > Argi; Argi++)
{
Len = lstrlenW(Argv[Argi]);
if (MAX_PATH < DirLen + Len + 1)
{
Result = ERROR_FILENAME_EXCED_RANGE;
goto exit;
}
memcpy(Path, Dir, DirLen * sizeof(WCHAR));
memcpy(Path + DirLen, Argv[Argi], Len * sizeof(WCHAR));
Path[DirLen + Len] = L'\0';
Result = RemoveFile(Path);
#if 0
WCHAR MessageBuf[1024];
wsprintfW(MessageBuf, L"RemoveFile(\"%s\") = %lu", Path, Result);
MessageBoxW(0, MessageBuf, L"TRACE", MB_OK);
#endif
if (ERROR_SUCCESS != Result)
goto exit;
}
Result = ERROR_SUCCESS;
exit:
return Result;
}
static DWORD MakeSymlink(PWSTR Symlink, PWSTR Target)
{
DWORD Result;
DWORD FileAttributes, Flags;
RemoveFile(Symlink);
FileAttributes = GetFileAttributesW(Target);
if (INVALID_FILE_ATTRIBUTES == FileAttributes)
{
Result = GetLastError();
goto exit;
}
Flags = 0 != (FileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? SYMBOLIC_LINK_FLAG_DIRECTORY : 0;
if (!CreateSymbolicLinkW(Symlink, Target, Flags))
{
Result = GetLastError();
RemoveFile(Symlink);
goto exit;
}
Result = ERROR_SUCCESS;
exit:
return Result;
}
static DWORD MakeJunction(PWSTR Junction, PWSTR Target)
{
DWORD Result;
DWORD FileAttributes;
RemoveFile(Junction);
FileAttributes = GetFileAttributesW(Target);
if (INVALID_FILE_ATTRIBUTES == FileAttributes)
{
Result = GetLastError();
goto exit;
}
if (0 == (FileAttributes & FILE_ATTRIBUTE_DIRECTORY))
{
Result = ERROR_DIRECTORY;
goto exit;
}
Result = CreateJunction(Junction, Target);
if (ERROR_SUCCESS != Result)
{
RemoveFile(Junction);
goto exit;
}
Result = ERROR_SUCCESS;
exit:
return Result;
}
static DWORD CreateJunction(PWSTR Junction, PWSTR Target)
{
/*
* The REPARSE_DATA_BUFFER definitions appear to be missing from the user mode headers.
*/
typedef struct _REPARSE_DATA_BUFFER
{
ULONG ReparseTag;
USHORT ReparseDataLength;
USHORT Reserved;
union
{
struct
{
USHORT SubstituteNameOffset;
USHORT SubstituteNameLength;
USHORT PrintNameOffset;
USHORT PrintNameLength;
ULONG Flags;
WCHAR PathBuffer[1];
} SymbolicLinkReparseBuffer;
struct
{
USHORT SubstituteNameOffset;
USHORT SubstituteNameLength;
USHORT PrintNameOffset;
USHORT PrintNameLength;
WCHAR PathBuffer[1];
} MountPointReparseBuffer;
struct
{
UCHAR DataBuffer[1];
} GenericReparseBuffer;
} DUMMYUNIONNAME;
} REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER;
const LONG REPARSE_DATA_BUFFER_HEADER_SIZE =
FIELD_OFFSET(REPARSE_DATA_BUFFER, GenericReparseBuffer);
const DWORD FSCTL_SET_REPARSE_POINT = 0x000900a4;
DWORD Result;
HANDLE Handle = INVALID_HANDLE_VALUE;
USHORT TargetLength, ReparseDataLength;
PREPARSE_DATA_BUFFER ReparseData = 0;
PWSTR PathBuffer;
DWORD Bytes;
if (!(
((L'A' <= Target[0] && Target[0] <= L'Z') || (L'a' <= Target[0] && Target[0] <= L'z')) &&
L':' == Target[1]
))
{
Result = ERROR_INVALID_NAME;
goto exit;
}
Handle = CreateFileW(Junction,
FILE_WRITE_ATTRIBUTES,
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
0,
CREATE_NEW,
FILE_ATTRIBUTE_DIRECTORY |
FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_POSIX_SEMANTICS,
0);
if (INVALID_HANDLE_VALUE == Handle)
{
Result = GetLastError();
goto exit;
}
TargetLength = (USHORT)lstrlenW(Target) * sizeof(WCHAR);
ReparseDataLength = (USHORT)(
FIELD_OFFSET(REPARSE_DATA_BUFFER, MountPointReparseBuffer.PathBuffer) -
FIELD_OFFSET(REPARSE_DATA_BUFFER, MountPointReparseBuffer)) +
4 * sizeof(WCHAR) + 2 * (TargetLength + sizeof(WCHAR));
ReparseData = (PREPARSE_DATA_BUFFER)
HeapAlloc(GetProcessHeap(), 0, REPARSE_DATA_BUFFER_HEADER_SIZE + ReparseDataLength);
if (0 == ReparseData)
{
Result = ERROR_NO_SYSTEM_RESOURCES;
goto exit;
}
ReparseData->ReparseTag = IO_REPARSE_TAG_MOUNT_POINT;
ReparseData->ReparseDataLength = ReparseDataLength;
ReparseData->Reserved = 0;
ReparseData->MountPointReparseBuffer.SubstituteNameOffset = 0;
ReparseData->MountPointReparseBuffer.SubstituteNameLength =
4 * sizeof(WCHAR) + TargetLength;
ReparseData->MountPointReparseBuffer.PrintNameOffset =
ReparseData->MountPointReparseBuffer.SubstituteNameLength + sizeof(WCHAR);
ReparseData->MountPointReparseBuffer.PrintNameLength =
TargetLength;
PathBuffer = ReparseData->MountPointReparseBuffer.PathBuffer;
PathBuffer[0] = L'\\';
PathBuffer[1] = L'?';
PathBuffer[2] = L'?';
PathBuffer[3] = L'\\';
memcpy(PathBuffer + 4, Target, TargetLength);
PathBuffer[4 + TargetLength / sizeof(WCHAR)] = L'\0';
PathBuffer = ReparseData->MountPointReparseBuffer.PathBuffer +
(ReparseData->MountPointReparseBuffer.PrintNameOffset) / sizeof(WCHAR);
memcpy(PathBuffer, Target, TargetLength);
PathBuffer[TargetLength / sizeof(WCHAR)] = L'\0';
if (!DeviceIoControl(Handle, FSCTL_SET_REPARSE_POINT,
ReparseData, REPARSE_DATA_BUFFER_HEADER_SIZE + ReparseData->ReparseDataLength,
0, 0,
&Bytes, 0))
{
Result = GetLastError();
goto exit;
}
Result = ERROR_SUCCESS;
exit:
if (INVALID_HANDLE_VALUE != Handle)
CloseHandle(Handle);
if (0 != ReparseData)
HeapFree(GetProcessHeap(), 0, ReparseData);
return Result;
}
static DWORD RemoveFile(PWSTR FileName)
{
DWORD Result;
if (!RemoveDirectoryW(FileName))
{
Result = GetLastError();
if (ERROR_DIRECTORY != Result)
goto exit;
if (!DeleteFileW(FileName))
{
Result = GetLastError();
goto exit;
}
}
Result = ERROR_SUCCESS;
exit:
return Result;
}
extern "C" extern "C"
BOOL WINAPI DllMain(HINSTANCE Instance, DWORD Reason, PVOID Reserved) BOOL WINAPI DllMain(HINSTANCE Instance, DWORD Reason, PVOID Reserved)
{ {
switch(Reason) switch(Reason)
{ {
case DLL_PROCESS_ATTACH: case DLL_PROCESS_ATTACH:
DllInstance = Instance;
WcaGlobalInitialize(Instance); WcaGlobalInitialize(Instance);
break; break;
case DLL_PROCESS_DETACH: case DLL_PROCESS_DETACH:

View File

@ -1,2 +1,7 @@
EXPORTS EXPORTS
InstanceID
ServiceRunning ServiceRunning
DeferredAction
InstallSymlinks
InstallJunctions
RemoveFiles

View File

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), build.common.props))/build.common.props" />
<ItemGroup Label="ProjectConfigurations"> <ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32"> <ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration> <Configuration>Debug</Configuration>
@ -14,18 +15,18 @@
<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>8.1</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">
<ConfigurationType>DynamicLibrary</ConfigurationType> <ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v140</PlatformToolset> <PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType> <ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v140</PlatformToolset> <PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
</PropertyGroup> </PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
@ -42,21 +43,20 @@
<_ProjectFileVersion>14.0.25123.0</_ProjectFileVersion> <_ProjectFileVersion>14.0.25123.0</_ProjectFileVersion>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\</IntDir>
<LinkIncremental>true</LinkIncremental> <LinkIncremental>true</LinkIncremental>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\</IntDir>
<LinkIncremental>false</LinkIncremental> <LinkIncremental>false</LinkIncremental>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
</PropertyGroup> </PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile> <ClCompile>
<Optimization>Disabled</Optimization> <Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>$(WIX)sdk\VS2015\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>$(WIX)sdk\VS2015\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;CUSTOMACTIONTEST_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;CUSTOMACTIONTEST_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>Default</BasicRuntimeChecks> <BasicRuntimeChecks>Default</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary> <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>NotUsing</PrecompiledHeader> <PrecompiledHeader>NotUsing</PrecompiledHeader>
@ -68,7 +68,6 @@
<AdditionalDependencies>msi.lib;dutil.lib;wcautil.lib;Version.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>msi.lib;dutil.lib;wcautil.lib;Version.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>$(WIX)sdk\VS2015\lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalLibraryDirectories>$(WIX)sdk\VS2015\lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<ModuleDefinitionFile>CustomActions.def</ModuleDefinitionFile> <ModuleDefinitionFile>CustomActions.def</ModuleDefinitionFile>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem> <SubSystem>Windows</SubSystem>
<TargetMachine>MachineX86</TargetMachine> <TargetMachine>MachineX86</TargetMachine>
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries> <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
@ -92,7 +91,6 @@
<AdditionalDependencies>msi.lib;dutil.lib;wcautil.lib;Version.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>msi.lib;dutil.lib;wcautil.lib;Version.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>$(WIX)sdk\VS2015\lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalLibraryDirectories>$(WIX)sdk\VS2015\lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<ModuleDefinitionFile>CustomActions.def</ModuleDefinitionFile> <ModuleDefinitionFile>CustomActions.def</ModuleDefinitionFile>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem> <SubSystem>Windows</SubSystem>
<OptimizeReferences>true</OptimizeReferences> <OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding> <EnableCOMDATFolding>true</EnableCOMDATFolding>

File diff suppressed because it is too large Load Diff

View File

@ -1,13 +1,13 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\version.properties" /> <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), build.common.props))/build.common.props" />
<PropertyGroup> <PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform> <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<ProductVersion>3.10</ProductVersion> <ProductVersion>3.10</ProductVersion>
<ProjectGuid>d53aac39-4c57-4ca5-a4f3-c2b24888c594</ProjectGuid> <ProjectGuid>d53aac39-4c57-4ca5-a4f3-c2b24888c594</ProjectGuid>
<SchemaVersion>2.0</SchemaVersion> <SchemaVersion>2.0</SchemaVersion>
<OutputName>winfsp-$(MyVersion)</OutputName> <OutputName>$(MyProductFileName)-$(MyVersion)</OutputName>
<OutputType>Package</OutputType> <OutputType>Package</OutputType>
<WixTargetsPath Condition=" '$(WixTargetsPath)' == '' AND '$(MSBuildExtensionsPath32)' != '' ">$(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.targets</WixTargetsPath> <WixTargetsPath Condition=" '$(WixTargetsPath)' == '' AND '$(MSBuildExtensionsPath32)' != '' ">$(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.targets</WixTargetsPath>
<WixTargetsPath Condition=" '$(WixTargetsPath)' == '' ">$(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.targets</WixTargetsPath> <WixTargetsPath Condition=" '$(WixTargetsPath)' == '' ">$(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.targets</WixTargetsPath>
@ -16,29 +16,37 @@
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<OutputPath>$(SolutionDir)build\$(Configuration)\</OutputPath> <OutputPath>$(SolutionDir)build\$(Configuration)\</OutputPath>
<IntermediateOutputPath>$(SolutionDir)build\$(Name).build\$(Configuration)\$(Platform)\</IntermediateOutputPath> <IntermediateOutputPath>$(SolutionDir)build\$(Name).build\$(Configuration)\$(Platform)\</IntermediateOutputPath>
<DefineConstants>Debug;MyProductName=$(MyProductName);MyDescription=$(MyDescription);MyCompanyName=$(MyCompanyName);MyCopyright=$(MyCopyright);MyVersion=$(MyVersion)</DefineConstants> <DefineConstants>Debug;MyProductName=$(MyProductName);MyProductFileName=$(MyProductFileName);MyDescription=$(MyDescription);MyCompanyName=$(MyCompanyName);MyCopyright=$(MyCopyright);MyProductVersion=$(MyProductVersion);MyProductStage=$(MyProductStage);MyVersion=$(MyVersion);MyFullVersion=$(MyFullVersion)</DefineConstants>
<SuppressAllWarnings>False</SuppressAllWarnings> <SuppressAllWarnings>False</SuppressAllWarnings>
<Pedantic>True</Pedantic> <Pedantic>True</Pedantic>
<SuppressPdbOutput>True</SuppressPdbOutput> <SuppressPdbOutput>True</SuppressPdbOutput>
<SuppressIces>ICE30</SuppressIces> <SuppressIces>ICE30;ICE61</SuppressIces>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
<OutputPath>$(SolutionDir)build\$(Configuration)\</OutputPath> <OutputPath>$(SolutionDir)build\$(Configuration)\</OutputPath>
<IntermediateOutputPath>$(SolutionDir)build\$(Name).build\$(Configuration)\$(Platform)\</IntermediateOutputPath> <IntermediateOutputPath>$(SolutionDir)build\$(Name).build\$(Configuration)\$(Platform)\</IntermediateOutputPath>
<DefineConstants>MyProductName=$(MyProductName);MyDescription=$(MyDescription);MyCompanyName=$(MyCompanyName);MyCopyright=$(MyCopyright);MyVersion=$(MyVersion)</DefineConstants> <DefineConstants>MyProductName=$(MyProductName);MyProductFileName=$(MyProductFileName);MyDescription=$(MyDescription);MyCompanyName=$(MyCompanyName);MyCopyright=$(MyCopyright);MyProductVersion=$(MyProductVersion);MyProductStage=$(MyProductStage);MyVersion=$(MyVersion);MyFullVersion=$(MyFullVersion)</DefineConstants>
<SuppressAllWarnings>False</SuppressAllWarnings> <SuppressAllWarnings>False</SuppressAllWarnings>
<Pedantic>True</Pedantic> <Pedantic>True</Pedantic>
<SuppressPdbOutput>True</SuppressPdbOutput> <SuppressPdbOutput>True</SuppressPdbOutput>
<SuppressIces>ICE30</SuppressIces> <SuppressIces>ICE30;ICE61</SuppressIces>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Compile Include="Product.wxs" /> <Compile Include="Product.wxs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<WixExtension Include="WixUtilExtension">
<HintPath>$(WixExtDir)\WixUtilExtension.dll</HintPath>
<Name>WixUtilExtension</Name>
</WixExtension>
<WixExtension Include="WixUIExtension"> <WixExtension Include="WixUIExtension">
<HintPath>$(WixExtDir)\WixUIExtension.dll</HintPath> <HintPath>$(WixExtDir)\WixUIExtension.dll</HintPath>
<Name>WixUIExtension</Name> <Name>WixUIExtension</Name>
</WixExtension> </WixExtension>
<WixExtension Include="WixDependencyExtension">
<HintPath>$(WixExtDir)\WixDependencyExtension.dll</HintPath>
<Name>WixDependencyExtension</Name>
</WixExtension>
</ItemGroup> </ItemGroup>
<Import Project="$(WixTargetsPath)" /> <Import Project="$(WixTargetsPath)" />
<!-- <!--

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 451 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 451 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 451 KiB

View File

@ -0,0 +1,267 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), build.common.props))/build.common.props" />
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|ARM64">
<Configuration>Debug</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM64">
<Configuration>Release</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>fsbench</RootNamespace>
<WindowsTargetPlatformVersion>$(LatestTargetPlatformVersion)</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
<TargetName>$(ProjectName)-$(MyProductFileArch)</TargetName>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
<TargetName>$(ProjectName)-$(MyProductFileArch)</TargetName>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
<LinkIncremental>true</LinkIncremental>
<TargetName>$(ProjectName)-$(MyProductFileArch)</TargetName>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
<TargetName>$(ProjectName)-$(MyProductFileArch)</TargetName>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
<TargetName>$(ProjectName)-$(MyProductFileArch)</TargetName>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
<LinkIncremental>false</LinkIncremental>
<TargetName>$(ProjectName)-$(MyProductFileArch)</TargetName>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<AdditionalIncludeDirectories>..\..\..\ext</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<AdditionalDependencies>ntdll.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<AdditionalIncludeDirectories>..\..\..\ext</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<AdditionalDependencies>ntdll.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<AdditionalIncludeDirectories>..\..\..\ext</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<AdditionalDependencies>ntdll.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<AdditionalIncludeDirectories>..\..\..\ext</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>ntdll.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<AdditionalIncludeDirectories>..\..\..\ext</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>ntdll.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<AdditionalIncludeDirectories>..\..\..\ext</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>ntdll.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="..\..\..\ext\tlib\testsuite.c">
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">TurnOffAllWarnings</WarningLevel>
<SDLCheck Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</SDLCheck>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">TurnOffAllWarnings</WarningLevel>
<SDLCheck Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</SDLCheck>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">TurnOffAllWarnings</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">TurnOffAllWarnings</WarningLevel>
<SDLCheck Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</SDLCheck>
<SDLCheck Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">false</SDLCheck>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|x64'">TurnOffAllWarnings</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">TurnOffAllWarnings</WarningLevel>
<SDLCheck Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</SDLCheck>
<SDLCheck Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">false</SDLCheck>
</ClCompile>
<ClCompile Include="..\..\..\tst\fsbench\fsbench.c" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\ext\tlib\testsuite.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Source\tlib">
<UniqueIdentifier>{d76fc01e-0f8d-4596-bdef-c2a5d3fede2e}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\..\tst\fsbench\fsbench.c">
<Filter>Source</Filter>
</ClCompile>
<ClCompile Include="..\..\..\ext\tlib\testsuite.c">
<Filter>Source\tlib</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\ext\tlib\testsuite.h">
<Filter>Source\tlib</Filter>
</ClInclude>
</ItemGroup>
</Project>

View File

@ -0,0 +1,255 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), build.common.props))/build.common.props" />
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|ARM64">
<Configuration>Debug</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM64">
<Configuration>Release</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{10757011-749D-4954-873B-AE38D8145472}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>fscrash</RootNamespace>
<WindowsTargetPlatformVersion>$(LatestTargetPlatformVersion)</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
<TargetName>$(ProjectName)-$(MyProductFileArch)</TargetName>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
<TargetName>$(ProjectName)-$(MyProductFileArch)</TargetName>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
<LinkIncremental>true</LinkIncremental>
<TargetName>$(ProjectName)-$(MyProductFileArch)</TargetName>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
<TargetName>$(ProjectName)-$(MyProductFileArch)</TargetName>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
<TargetName>$(ProjectName)-$(MyProductFileArch)</TargetName>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
<LinkIncremental>false</LinkIncremental>
<TargetName>$(ProjectName)-$(MyProductFileArch)</TargetName>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<AdditionalIncludeDirectories>..\..\..\tst\memfs;..\..\..\inc</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<AdditionalIncludeDirectories>..\..\..\tst\memfs;..\..\..\inc</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<AdditionalIncludeDirectories>..\..\..\tst\memfs;..\..\..\inc</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<AdditionalIncludeDirectories>..\..\..\tst\memfs;..\..\..\inc</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<AdditionalIncludeDirectories>..\..\..\tst\memfs;..\..\..\inc</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<AdditionalIncludeDirectories>..\..\..\tst\memfs;..\..\..\inc</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="..\..\..\tst\fscrash\fscrash-main.c" />
<ClCompile Include="..\..\..\tst\fscrash\fscrash.c" />
<ClCompile Include="..\..\..\tst\memfs\memfs.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\tst\fscrash\fscrash.h" />
<ClInclude Include="..\..\..\tst\memfs\memfs.h" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\winfsp_dll.vcxproj">
<Project>{4a7c0b21-9e10-4c81-92de-1493efcf24eb}</Project>
</ProjectReference>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\..\tst\fscrash\fscrash-main.c">
<Filter>Source</Filter>
</ClCompile>
<ClCompile Include="..\..\..\tst\memfs\memfs.cpp">
<Filter>Source</Filter>
</ClCompile>
<ClCompile Include="..\..\..\tst\fscrash\fscrash.c">
<Filter>Source</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\tst\memfs\memfs.h">
<Filter>Source</Filter>
</ClInclude>
<ClInclude Include="..\..\..\tst\fscrash\fscrash.h">
<Filter>Source</Filter>
</ClInclude>
</ItemGroup>
</Project>

View File

@ -0,0 +1,51 @@
<Project>
<PropertyGroup>
<BaseIntermediateOutputPath>$(SolutionDir)build\$(MSBuildProjectName).build\</BaseIntermediateOutputPath>
</PropertyGroup>
<Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), build.common.props))/build.common.props" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<OutputType>Exe</OutputType>
<ProjectName>memfs-dotnet</ProjectName>
<RootNamespace>memfs</RootNamespace>
<AssemblyName>memfs-dotnet-msil</AssemblyName>
<TargetFramework>net452</TargetFramework>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
</PropertyGroup>
<PropertyGroup>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>$(SolutionDir)build\$(Configuration)\</OutputPath>
<IntermediateOutputPath>$(BaseIntermediateOutputPath)$(Configuration)\</IntermediateOutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>$(SolutionDir)build\$(Configuration)\</OutputPath>
<IntermediateOutputPath>$(BaseIntermediateOutputPath)$(Configuration)\</IntermediateOutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\dotnet\winfsp.net.csproj" />
</ItemGroup>
<ItemGroup>
<Compile Include="..\..\..\tst\memfs-dotnet\Program.cs" />
</ItemGroup>
<Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" />
</Project>

View File

@ -1,10 +1,19 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), build.common.props))/build.common.props" />
<ItemGroup Label="ProjectConfigurations"> <ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|ARM64">
<Configuration>Debug</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|Win32"> <ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration> <Configuration>Debug</Configuration>
<Platform>Win32</Platform> <Platform>Win32</Platform>
</ProjectConfiguration> </ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM64">
<Configuration>Release</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32"> <ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration> <Configuration>Release</Configuration>
<Platform>Win32</Platform> <Platform>Win32</Platform>
@ -22,33 +31,46 @@
<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>8.1</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" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType> <ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries> <UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset> <PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType> <ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset> <PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType> <ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries> <UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset> <PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType> <ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset> <PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
</PropertyGroup> </PropertyGroup>
@ -66,33 +88,51 @@
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup> </ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup> </ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" /> <PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental> <LinkIncremental>true</LinkIncremental>
<TargetName>$(ProjectName)-$(MyProductFileArch)</TargetName>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir> <OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\</IntDir> <IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
<TargetName>$(ProjectName)-$(PlatformTarget)</TargetName>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental> <LinkIncremental>true</LinkIncremental>
<TargetName>$(ProjectName)-$(MyProductFileArch)</TargetName>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir> <OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\</IntDir> <IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
<TargetName>$(ProjectName)-$(PlatformTarget)</TargetName> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
<LinkIncremental>true</LinkIncremental>
<TargetName>$(ProjectName)-$(MyProductFileArch)</TargetName>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental> <LinkIncremental>false</LinkIncremental>
<TargetName>$(ProjectName)-$(MyProductFileArch)</TargetName>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir> <OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\</IntDir> <IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
<TargetName>$(ProjectName)-$(PlatformTarget)</TargetName>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental> <LinkIncremental>false</LinkIncremental>
<TargetName>$(ProjectName)-$(MyProductFileArch)</TargetName>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir> <OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\</IntDir> <IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
<TargetName>$(ProjectName)-$(PlatformTarget)</TargetName> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
<LinkIncremental>false</LinkIncremental>
<TargetName>$(ProjectName)-$(MyProductFileArch)</TargetName>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
</PropertyGroup> </PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile> <ClCompile>
@ -100,14 +140,14 @@
</PrecompiledHeader> </PrecompiledHeader>
<WarningLevel>Level3</WarningLevel> <WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization> <Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>MEMFS_STANDALONE;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck> <SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>..\..\..\src;..\..\..\inc</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>..\..\..\src;..\..\..\inc</AdditionalIncludeDirectories>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary> <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Console</SubSystem> <SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation> <StripPrivateSymbols>$(OutDir)$(TargetName).public.pdb</StripPrivateSymbols>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
@ -116,14 +156,30 @@
</PrecompiledHeader> </PrecompiledHeader>
<WarningLevel>Level3</WarningLevel> <WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization> <Optimization>Disabled</Optimization>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>MEMFS_STANDALONE;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck> <SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>..\..\..\src;..\..\..\inc</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>..\..\..\src;..\..\..\inc</AdditionalIncludeDirectories>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary> <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Console</SubSystem> <SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation> <StripPrivateSymbols>$(OutDir)$(TargetName).public.pdb</StripPrivateSymbols>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>MEMFS_STANDALONE;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>..\..\..\src;..\..\..\inc</AdditionalIncludeDirectories>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<StripPrivateSymbols>$(OutDir)$(TargetName).public.pdb</StripPrivateSymbols>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@ -134,16 +190,17 @@
<Optimization>MaxSpeed</Optimization> <Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking> <FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions> <IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>MEMFS_STANDALONE;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck> <SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>..\..\..\src;..\..\..\inc</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>..\..\..\src;..\..\..\inc</AdditionalIncludeDirectories>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary> <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Console</SubSystem> <SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding> <EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences> <OptimizeReferences>true</OptimizeReferences>
<StripPrivateSymbols>$(OutDir)$(TargetName).public.pdb</StripPrivateSymbols>
<AdditionalOptions>/PDBALTPATH:$(TargetName).pdb %(AdditionalOptions)</AdditionalOptions>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
@ -154,16 +211,38 @@
<Optimization>MaxSpeed</Optimization> <Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking> <FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions> <IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>MEMFS_STANDALONE;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck> <SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>..\..\..\src;..\..\..\inc</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>..\..\..\src;..\..\..\inc</AdditionalIncludeDirectories>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary> <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Console</SubSystem> <SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding> <EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences> <OptimizeReferences>true</OptimizeReferences>
<StripPrivateSymbols>$(OutDir)$(TargetName).public.pdb</StripPrivateSymbols>
<AdditionalOptions>/PDBALTPATH:$(TargetName).pdb %(AdditionalOptions)</AdditionalOptions>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>MEMFS_STANDALONE;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>..\..\..\src;..\..\..\inc</AdditionalIncludeDirectories>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<StripPrivateSymbols>$(OutDir)$(TargetName).public.pdb</StripPrivateSymbols>
<AdditionalOptions>/PDBALTPATH:$(TargetName).pdb %(AdditionalOptions)</AdditionalOptions>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemGroup> <ItemGroup>

View File

@ -1,10 +1,19 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), build.common.props))/build.common.props" />
<ItemGroup Label="ProjectConfigurations"> <ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|ARM64">
<Configuration>Debug</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|Win32"> <ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration> <Configuration>Debug</Configuration>
<Platform>Win32</Platform> <Platform>Win32</Platform>
</ProjectConfiguration> </ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM64">
<Configuration>Release</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32"> <ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration> <Configuration>Release</Configuration>
<Platform>Win32</Platform> <Platform>Win32</Platform>
@ -22,32 +31,45 @@
<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>8.1</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">
<ConfigurationType>Application</ConfigurationType> <ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries> <UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset> <PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType> <ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset> <PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType> <ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries> <UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset> <PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType> <ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset> <PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
</PropertyGroup> </PropertyGroup>
@ -65,33 +87,51 @@
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup> </ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup> </ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" /> <PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental> <LinkIncremental>true</LinkIncremental>
<TargetName>$(ProjectName)-$(MyProductFileArch)</TargetName>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir> <OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\</IntDir> <IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
<TargetName>$(ProjectName)-$(PlatformTarget)</TargetName>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental> <LinkIncremental>true</LinkIncremental>
<TargetName>$(ProjectName)-$(MyProductFileArch)</TargetName>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir> <OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\</IntDir> <IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
<TargetName>$(ProjectName)-$(PlatformTarget)</TargetName> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
<LinkIncremental>true</LinkIncremental>
<TargetName>$(ProjectName)-$(MyProductFileArch)</TargetName>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental> <LinkIncremental>false</LinkIncremental>
<TargetName>$(ProjectName)-$(MyProductFileArch)</TargetName>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir> <OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\</IntDir> <IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
<TargetName>$(ProjectName)-$(PlatformTarget)</TargetName>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental> <LinkIncremental>false</LinkIncremental>
<TargetName>$(ProjectName)-$(MyProductFileArch)</TargetName>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir> <OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\</IntDir> <IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
<TargetName>$(ProjectName)-$(PlatformTarget)</TargetName> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
<LinkIncremental>false</LinkIncremental>
<TargetName>$(ProjectName)-$(MyProductFileArch)</TargetName>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
</PropertyGroup> </PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile> <ClCompile>
@ -106,8 +146,7 @@
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Console</SubSystem> <SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation> <AdditionalDependencies>ntdll.lib;netapi32.lib;dbghelp.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>ntdll.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
@ -123,8 +162,23 @@
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Console</SubSystem> <SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation> <AdditionalDependencies>ntdll.lib;netapi32.lib;dbghelp.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>ntdll.lib;%(AdditionalDependencies)</AdditionalDependencies> </Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>__func__=__FUNCTION__;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>..\..\..\tst\memfs;..\..\..\src;..\..\..\inc;..\..\..\ext</AdditionalIncludeDirectories>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<AdditionalDependencies>ntdll.lib;netapi32.lib;dbghelp.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@ -142,10 +196,9 @@
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Console</SubSystem> <SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding> <EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences> <OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>ntdll.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>ntdll.lib;netapi32.lib;dbghelp.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
@ -163,10 +216,29 @@
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Console</SubSystem> <SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding> <EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences> <OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>ntdll.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>ntdll.lib;netapi32.lib;dbghelp.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>__func__=__FUNCTION__;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>..\..\..\tst\memfs;..\..\..\src;..\..\..\inc;..\..\..\ext</AdditionalIncludeDirectories>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>ntdll.lib;netapi32.lib;dbghelp.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemGroup> <ItemGroup>
@ -174,38 +246,64 @@
<SDLCheck Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</SDLCheck> <SDLCheck Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</SDLCheck>
<SDLCheck Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</SDLCheck> <SDLCheck Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</SDLCheck>
<SDLCheck Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</SDLCheck> <SDLCheck Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</SDLCheck>
<SDLCheck Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">false</SDLCheck>
<SDLCheck Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</SDLCheck> <SDLCheck Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</SDLCheck>
<SDLCheck Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">false</SDLCheck>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">TurnOffAllWarnings</WarningLevel> <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">TurnOffAllWarnings</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">TurnOffAllWarnings</WarningLevel> <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">TurnOffAllWarnings</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">TurnOffAllWarnings</WarningLevel> <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">TurnOffAllWarnings</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">TurnOffAllWarnings</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|x64'">TurnOffAllWarnings</WarningLevel> <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|x64'">TurnOffAllWarnings</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">TurnOffAllWarnings</WarningLevel>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\..\tst\memfs\memfs.cpp" /> <ClCompile Include="..\..\..\tst\memfs\memfs.cpp" />
<ClCompile Include="..\..\..\tst\winfsp-tests\create-test.c" /> <ClCompile Include="..\..\..\tst\winfsp-tests\create-test.c" />
<ClCompile Include="..\..\..\tst\winfsp-tests\devctl-test.c" />
<ClCompile Include="..\..\..\tst\winfsp-tests\dirbuf-test.c" />
<ClCompile Include="..\..\..\tst\winfsp-tests\dirctl-test.c" /> <ClCompile Include="..\..\..\tst\winfsp-tests\dirctl-test.c" />
<ClCompile Include="..\..\..\tst\winfsp-tests\ea-test.c" />
<ClCompile Include="..\..\..\tst\winfsp-tests\eventlog-test.c" /> <ClCompile Include="..\..\..\tst\winfsp-tests\eventlog-test.c" />
<ClCompile Include="..\..\..\tst\winfsp-tests\exec-test.c" />
<ClCompile Include="..\..\..\tst\winfsp-tests\flush-test.c" /> <ClCompile Include="..\..\..\tst\winfsp-tests\flush-test.c" />
<ClCompile Include="..\..\..\tst\winfsp-tests\fuse-opt-test.c" /> <ClCompile Include="..\..\..\tst\winfsp-tests\fuse-opt-test.c" />
<ClCompile Include="..\..\..\tst\winfsp-tests\fuse-test.c" />
<ClCompile Include="..\..\..\tst\winfsp-tests\hooks.c" />
<ClCompile Include="..\..\..\tst\winfsp-tests\info-test.c" /> <ClCompile Include="..\..\..\tst\winfsp-tests\info-test.c" />
<ClCompile Include="..\..\..\tst\winfsp-tests\launch-test.c" />
<ClCompile Include="..\..\..\tst\winfsp-tests\launcher-ptrans-test.c" />
<ClCompile Include="..\..\..\tst\winfsp-tests\lock-test.c" /> <ClCompile Include="..\..\..\tst\winfsp-tests\lock-test.c" />
<ClCompile Include="..\..\..\tst\winfsp-tests\memfs-test.c" /> <ClCompile Include="..\..\..\tst\winfsp-tests\memfs-test.c" />
<ClCompile Include="..\..\..\tst\winfsp-tests\mount-test.c" /> <ClCompile Include="..\..\..\tst\winfsp-tests\mount-test.c" />
<ClCompile Include="..\..\..\tst\winfsp-tests\notify-test.c" />
<ClCompile Include="..\..\..\tst\winfsp-tests\oplock-test.c" />
<ClCompile Include="..\..\..\tst\winfsp-tests\path-test.c" /> <ClCompile Include="..\..\..\tst\winfsp-tests\path-test.c" />
<ClCompile Include="..\..\..\tst\winfsp-tests\posix-test.c" /> <ClCompile Include="..\..\..\tst\winfsp-tests\posix-test.c" />
<ClCompile Include="..\..\..\tst\winfsp-tests\rdwr-test.c" /> <ClCompile Include="..\..\..\tst\winfsp-tests\rdwr-test.c" />
<ClCompile Include="..\..\..\tst\winfsp-tests\reparse-test.c" />
<ClCompile Include="..\..\..\tst\winfsp-tests\resilient.c" />
<ClCompile Include="..\..\..\tst\winfsp-tests\security-test.c" /> <ClCompile Include="..\..\..\tst\winfsp-tests\security-test.c" />
<ClCompile Include="..\..\..\tst\winfsp-tests\stream-tests.c" />
<ClCompile Include="..\..\..\tst\winfsp-tests\timeout-test.c" /> <ClCompile Include="..\..\..\tst\winfsp-tests\timeout-test.c" />
<ClCompile Include="..\..\..\tst\winfsp-tests\loadun-test.c" />
<ClCompile Include="..\..\..\tst\winfsp-tests\uuid5-test.c" />
<ClCompile Include="..\..\..\tst\winfsp-tests\version-test.c" />
<ClCompile Include="..\..\..\tst\winfsp-tests\volpath-test.c" />
<ClCompile Include="..\..\..\tst\winfsp-tests\winfsp-tests.c" /> <ClCompile Include="..\..\..\tst\winfsp-tests\winfsp-tests.c" />
<ClCompile Include="..\..\..\tst\winfsp-tests\wsl-test.c" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="..\..\..\ext\tlib\testsuite.h" /> <ClInclude Include="..\..\..\ext\tlib\testsuite.h" />
<ClInclude Include="..\..\..\tst\memfs\memfs.h" /> <ClInclude Include="..\..\..\tst\memfs\memfs.h" />
<ClInclude Include="..\..\..\tst\winfsp-tests\winfsp-tests.h" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\winfsp_dll.vcxproj"> <ProjectReference Include="..\winfsp_dll.vcxproj">
<Project>{4a7c0b21-9e10-4c81-92de-1493efcf24eb}</Project> <Project>{4a7c0b21-9e10-4c81-92de-1493efcf24eb}</Project>
</ProjectReference> </ProjectReference>
</ItemGroup> </ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\..\..\tst\winfsp-tests\helper\winfsp-tests-helper.rc" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets"> <ImportGroup Label="ExtensionTargets">
</ImportGroup> </ImportGroup>

View File

@ -61,6 +61,60 @@
<ClCompile Include="..\..\..\tst\winfsp-tests\posix-test.c"> <ClCompile Include="..\..\..\tst\winfsp-tests\posix-test.c">
<Filter>Source</Filter> <Filter>Source</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\..\tst\winfsp-tests\reparse-test.c">
<Filter>Source</Filter>
</ClCompile>
<ClCompile Include="..\..\..\tst\winfsp-tests\stream-tests.c">
<Filter>Source</Filter>
</ClCompile>
<ClCompile Include="..\..\..\tst\winfsp-tests\resilient.c">
<Filter>Source</Filter>
</ClCompile>
<ClCompile Include="..\..\..\tst\winfsp-tests\hooks.c">
<Filter>Source</Filter>
</ClCompile>
<ClCompile Include="..\..\..\tst\winfsp-tests\oplock-test.c">
<Filter>Source</Filter>
</ClCompile>
<ClCompile Include="..\..\..\tst\winfsp-tests\dirbuf-test.c">
<Filter>Source</Filter>
</ClCompile>
<ClCompile Include="..\..\..\tst\winfsp-tests\exec-test.c">
<Filter>Source</Filter>
</ClCompile>
<ClCompile Include="..\..\..\tst\winfsp-tests\version-test.c">
<Filter>Source</Filter>
</ClCompile>
<ClCompile Include="..\..\..\tst\winfsp-tests\launch-test.c">
<Filter>Source</Filter>
</ClCompile>
<ClCompile Include="..\..\..\tst\winfsp-tests\devctl-test.c">
<Filter>Source</Filter>
</ClCompile>
<ClCompile Include="..\..\..\tst\winfsp-tests\fuse-test.c">
<Filter>Source</Filter>
</ClCompile>
<ClCompile Include="..\..\..\tst\winfsp-tests\ea-test.c">
<Filter>Source</Filter>
</ClCompile>
<ClCompile Include="..\..\..\tst\winfsp-tests\wsl-test.c">
<Filter>Source</Filter>
</ClCompile>
<ClCompile Include="..\..\..\tst\winfsp-tests\launcher-ptrans-test.c">
<Filter>Source</Filter>
</ClCompile>
<ClCompile Include="..\..\..\tst\winfsp-tests\volpath-test.c">
<Filter>Source</Filter>
</ClCompile>
<ClCompile Include="..\..\..\tst\winfsp-tests\uuid5-test.c">
<Filter>Source</Filter>
</ClCompile>
<ClCompile Include="..\..\..\tst\winfsp-tests\notify-test.c">
<Filter>Source</Filter>
</ClCompile>
<ClCompile Include="..\..\..\tst\winfsp-tests\loadun-test.c">
<Filter>Source</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="..\..\..\ext\tlib\testsuite.h"> <ClInclude Include="..\..\..\ext\tlib\testsuite.h">
@ -69,5 +123,13 @@
<ClInclude Include="..\..\..\tst\memfs\memfs.h"> <ClInclude Include="..\..\..\tst\memfs\memfs.h">
<Filter>Source</Filter> <Filter>Source</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\..\..\tst\winfsp-tests\winfsp-tests.h">
<Filter>Source</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\..\..\tst\winfsp-tests\helper\winfsp-tests-helper.rc">
<Filter>Source</Filter>
</ResourceCompile>
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -1,11 +1,19 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\version.properties" /> <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), build.common.props))/build.common.props" />
<ItemGroup Label="ProjectConfigurations"> <ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|ARM64">
<Configuration>Debug</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|Win32"> <ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration> <Configuration>Debug</Configuration>
<Platform>Win32</Platform> <Platform>Win32</Platform>
</ProjectConfiguration> </ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM64">
<Configuration>Release</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32"> <ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration> <Configuration>Release</Configuration>
<Platform>Win32</Platform> <Platform>Win32</Platform>
@ -20,35 +28,48 @@
</ProjectConfiguration> </ProjectConfiguration>
</ItemGroup> </ItemGroup>
<PropertyGroup Label="Globals"> <PropertyGroup Label="Globals">
<ProjectGuid>{73EAAEDA-557B-48D5-A137-328934720FB4}</ProjectGuid> <ProjectGuid>{1E997BEC-1642-4A5C-B252-852DA094E11E}</ProjectGuid>
<Keyword>Win32Proj</Keyword> <Keyword>Win32Proj</Keyword>
<RootNamespace>launchctl</RootNamespace> <RootNamespace>fsptool</RootNamespace>
<WindowsTargetPlatformVersion>8.1</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">
<ConfigurationType>Application</ConfigurationType> <ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries> <UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset> <PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType> <ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset> <PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType> <ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries> <UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset> <PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType> <ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset> <PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
</PropertyGroup> </PropertyGroup>
@ -66,33 +87,51 @@
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup> </ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup> </ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" /> <PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental> <LinkIncremental>true</LinkIncremental>
<TargetName>$(ProjectName)-$(MyProductFileArch)</TargetName>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir> <OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\</IntDir> <IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
<TargetName>$(ProjectName)-$(PlatformTarget)</TargetName>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental> <LinkIncremental>true</LinkIncremental>
<TargetName>$(ProjectName)-$(MyProductFileArch)</TargetName>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir> <OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\</IntDir> <IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
<TargetName>$(ProjectName)-$(PlatformTarget)</TargetName> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
<LinkIncremental>true</LinkIncremental>
<TargetName>$(ProjectName)-$(MyProductFileArch)</TargetName>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental> <LinkIncremental>false</LinkIncremental>
<TargetName>$(ProjectName)-$(MyProductFileArch)</TargetName>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir> <OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\</IntDir> <IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
<TargetName>$(ProjectName)-$(PlatformTarget)</TargetName>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental> <LinkIncremental>false</LinkIncremental>
<TargetName>$(ProjectName)-$(MyProductFileArch)</TargetName>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir> <OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\</IntDir> <IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
<TargetName>$(ProjectName)-$(PlatformTarget)</TargetName> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
<LinkIncremental>false</LinkIncremental>
<TargetName>$(ProjectName)-$(MyProductFileArch)</TargetName>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
</PropertyGroup> </PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile> <ClCompile>
@ -102,14 +141,14 @@
<Optimization>Disabled</Optimization> <Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>..\..\..\src;..\..\..\inc</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>..\..\..\src;..\..\..\inc</AdditionalIncludeDirectories>
<BufferSecurityCheck>false</BufferSecurityCheck>
<BasicRuntimeChecks>Default</BasicRuntimeChecks> <BasicRuntimeChecks>Default</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary> <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<BufferSecurityCheck>false</BufferSecurityCheck>
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Console</SubSystem> <SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries> <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
<StripPrivateSymbols>$(OutDir)$(TargetName).public.pdb</StripPrivateSymbols>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
@ -120,14 +159,32 @@
<Optimization>Disabled</Optimization> <Optimization>Disabled</Optimization>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>..\..\..\src;..\..\..\inc</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>..\..\..\src;..\..\..\inc</AdditionalIncludeDirectories>
<BufferSecurityCheck>false</BufferSecurityCheck>
<BasicRuntimeChecks>Default</BasicRuntimeChecks> <BasicRuntimeChecks>Default</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary> <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<BufferSecurityCheck>false</BufferSecurityCheck>
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Console</SubSystem> <SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries> <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
<StripPrivateSymbols>$(OutDir)$(TargetName).public.pdb</StripPrivateSymbols>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>..\..\..\src;..\..\..\inc</AdditionalIncludeDirectories>
<BasicRuntimeChecks>Default</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<BufferSecurityCheck>false</BufferSecurityCheck>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
<StripPrivateSymbols>$(OutDir)$(TargetName).public.pdb</StripPrivateSymbols>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@ -140,15 +197,16 @@
<IntrinsicFunctions>true</IntrinsicFunctions> <IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>..\..\..\src;..\..\..\inc</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>..\..\..\src;..\..\..\inc</AdditionalIncludeDirectories>
<BufferSecurityCheck>false</BufferSecurityCheck>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary> <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<BufferSecurityCheck>false</BufferSecurityCheck>
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Console</SubSystem> <SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding> <EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences> <OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries> <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
<StripPrivateSymbols>$(OutDir)$(TargetName).public.pdb</StripPrivateSymbols>
<AdditionalOptions>/PDBALTPATH:$(TargetName).pdb %(AdditionalOptions)</AdditionalOptions>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
@ -161,37 +219,54 @@
<IntrinsicFunctions>true</IntrinsicFunctions> <IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>..\..\..\src;..\..\..\inc</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>..\..\..\src;..\..\..\inc</AdditionalIncludeDirectories>
<BufferSecurityCheck>false</BufferSecurityCheck>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary> <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<BufferSecurityCheck>false</BufferSecurityCheck>
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Console</SubSystem> <SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding> <EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences> <OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries> <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
<StripPrivateSymbols>$(OutDir)$(TargetName).public.pdb</StripPrivateSymbols>
<AdditionalOptions>/PDBALTPATH:$(TargetName).pdb %(AdditionalOptions)</AdditionalOptions>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>..\..\..\src;..\..\..\inc</AdditionalIncludeDirectories>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<BufferSecurityCheck>false</BufferSecurityCheck>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
<StripPrivateSymbols>$(OutDir)$(TargetName).public.pdb</StripPrivateSymbols>
<AdditionalOptions>/PDBALTPATH:$(TargetName).pdb %(AdditionalOptions)</AdditionalOptions>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="..\..\..\src\launcher\launcher.h" />
<ClInclude Include="..\..\..\src\shared\minimal.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\..\src\launcher\launchctl.c" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\..\..\src\launcher\launchctl-version.rc">
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_UNICODE;UNICODE;%(PreprocessorDefinitions);MyProductName=$(MyProductName);MyDescription=$(MyDescription);MyCompanyName=$(MyCompanyName);MyCopyright=$(MyCopyright);MyVersion=$(MyVersion);MyVersionWithCommas=$(MyVersionWithCommas)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_UNICODE;UNICODE;%(PreprocessorDefinitions);MyProductName=$(MyProductName);MyDescription=$(MyDescription);MyCompanyName=$(MyCompanyName);MyCopyright=$(MyCopyright);MyVersion=$(MyVersion);MyVersionWithCommas=$(MyVersionWithCommas)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">_UNICODE;UNICODE;%(PreprocessorDefinitions);MyProductName=$(MyProductName);MyDescription=$(MyDescription);MyCompanyName=$(MyCompanyName);MyCopyright=$(MyCopyright);MyVersion=$(MyVersion);MyVersionWithCommas=$(MyVersionWithCommas)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">_UNICODE;UNICODE;%(PreprocessorDefinitions);MyProductName=$(MyProductName);MyDescription=$(MyDescription);MyCompanyName=$(MyCompanyName);MyCopyright=$(MyCopyright);MyVersion=$(MyVersion);MyVersionWithCommas=$(MyVersionWithCommas)</PreprocessorDefinitions>
</ResourceCompile>
</ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\winfsp_dll.vcxproj"> <ProjectReference Include="..\winfsp_dll.vcxproj">
<Project>{4a7c0b21-9e10-4c81-92de-1493efcf24eb}</Project> <Project>{4a7c0b21-9e10-4c81-92de-1493efcf24eb}</Project>
</ProjectReference> </ProjectReference>
</ItemGroup> </ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\..\src\fsptool\fsptool.c" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\..\..\src\fsptool\fsptool-version.rc" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\src\shared\um\minimal.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets"> <ImportGroup Label="ExtensionTargets">
</ImportGroup> </ImportGroup>

View File

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Source\shared">
<UniqueIdentifier>{bd82112e-6494-4345-b35b-25eae56d5127}</UniqueIdentifier>
</Filter>
<Filter Include="Source\shared\um">
<UniqueIdentifier>{dd21736e-dbea-4f24-8178-1903412e01f2}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\..\src\fsptool\fsptool.c">
<Filter>Source</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\..\..\src\fsptool\fsptool-version.rc">
<Filter>Source</Filter>
</ResourceCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\src\shared\um\minimal.h">
<Filter>Source\shared\um</Filter>
</ClInclude>
</ItemGroup>
</Project>

View File

@ -1,11 +1,19 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\version.properties" /> <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), build.common.props))/build.common.props" />
<ItemGroup Label="ProjectConfigurations"> <ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|ARM64">
<Configuration>Debug</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|Win32"> <ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration> <Configuration>Debug</Configuration>
<Platform>Win32</Platform> <Platform>Win32</Platform>
</ProjectConfiguration> </ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM64">
<Configuration>Release</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32"> <ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration> <Configuration>Release</Configuration>
<Platform>Win32</Platform> <Platform>Win32</Platform>
@ -20,35 +28,48 @@
</ProjectConfiguration> </ProjectConfiguration>
</ItemGroup> </ItemGroup>
<PropertyGroup Label="Globals"> <PropertyGroup Label="Globals">
<ProjectGuid>{A5EFD487-0140-4184-8C54-FFAEC2F85E35}</ProjectGuid> <ProjectGuid>{264A5D09-126F-4760-A3F1-4B3B95C925AA}</ProjectGuid>
<Keyword>Win32Proj</Keyword> <Keyword>Win32Proj</Keyword>
<RootNamespace>launcher</RootNamespace> <RootNamespace>launchctl</RootNamespace>
<WindowsTargetPlatformVersion>8.1</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">
<ConfigurationType>Application</ConfigurationType> <ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries> <UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset> <PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType> <ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset> <PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType> <ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries> <UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset> <PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType> <ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset> <PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
</PropertyGroup> </PropertyGroup>
@ -66,33 +87,51 @@
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup> </ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup> </ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" /> <PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental> <LinkIncremental>true</LinkIncremental>
<TargetName>$(ProjectName)-$(MyProductFileArch)</TargetName>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir> <OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\</IntDir> <IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
<TargetName>$(ProjectName)-$(PlatformTarget)</TargetName>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental> <LinkIncremental>true</LinkIncremental>
<TargetName>$(ProjectName)-$(MyProductFileArch)</TargetName>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir> <OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\</IntDir> <IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
<TargetName>$(ProjectName)-$(PlatformTarget)</TargetName> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
<LinkIncremental>true</LinkIncremental>
<TargetName>$(ProjectName)-$(MyProductFileArch)</TargetName>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental> <LinkIncremental>false</LinkIncremental>
<TargetName>$(ProjectName)-$(MyProductFileArch)</TargetName>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir> <OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\</IntDir> <IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
<TargetName>$(ProjectName)-$(PlatformTarget)</TargetName>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental> <LinkIncremental>false</LinkIncremental>
<TargetName>$(ProjectName)-$(MyProductFileArch)</TargetName>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir> <OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\</IntDir> <IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
<TargetName>$(ProjectName)-$(PlatformTarget)</TargetName> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
<LinkIncremental>false</LinkIncremental>
<TargetName>$(ProjectName)-$(MyProductFileArch)</TargetName>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
</PropertyGroup> </PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile> <ClCompile>
@ -102,14 +141,16 @@
<Optimization>Disabled</Optimization> <Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>..\..\..\src;..\..\..\inc</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>..\..\..\src;..\..\..\inc</AdditionalIncludeDirectories>
<BasicRuntimeChecks>Default</BasicRuntimeChecks>
<BufferSecurityCheck>false</BufferSecurityCheck> <BufferSecurityCheck>false</BufferSecurityCheck>
<BasicRuntimeChecks>Default</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary> <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<AdditionalOptions>
</AdditionalOptions>
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Console</SubSystem> <SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries> <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
<StripPrivateSymbols>$(OutDir)$(TargetName).public.pdb</StripPrivateSymbols>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
@ -120,14 +161,36 @@
<Optimization>Disabled</Optimization> <Optimization>Disabled</Optimization>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>..\..\..\src;..\..\..\inc</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>..\..\..\src;..\..\..\inc</AdditionalIncludeDirectories>
<BasicRuntimeChecks>Default</BasicRuntimeChecks>
<BufferSecurityCheck>false</BufferSecurityCheck> <BufferSecurityCheck>false</BufferSecurityCheck>
<BasicRuntimeChecks>Default</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary> <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<AdditionalOptions>
</AdditionalOptions>
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Console</SubSystem> <SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries> <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
<StripPrivateSymbols>$(OutDir)$(TargetName).public.pdb</StripPrivateSymbols>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>..\..\..\src;..\..\..\inc</AdditionalIncludeDirectories>
<BufferSecurityCheck>false</BufferSecurityCheck>
<BasicRuntimeChecks>Default</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<AdditionalOptions>
</AdditionalOptions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
<StripPrivateSymbols>$(OutDir)$(TargetName).public.pdb</StripPrivateSymbols>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@ -142,13 +205,16 @@
<AdditionalIncludeDirectories>..\..\..\src;..\..\..\inc</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>..\..\..\src;..\..\..\inc</AdditionalIncludeDirectories>
<BufferSecurityCheck>false</BufferSecurityCheck> <BufferSecurityCheck>false</BufferSecurityCheck>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary> <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<AdditionalOptions>
</AdditionalOptions>
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Console</SubSystem> <SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding> <EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences> <OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries> <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
<StripPrivateSymbols>$(OutDir)$(TargetName).public.pdb</StripPrivateSymbols>
<AdditionalOptions>/PDBALTPATH:$(TargetName).pdb %(AdditionalOptions)</AdditionalOptions>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
@ -163,17 +229,54 @@
<AdditionalIncludeDirectories>..\..\..\src;..\..\..\inc</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>..\..\..\src;..\..\..\inc</AdditionalIncludeDirectories>
<BufferSecurityCheck>false</BufferSecurityCheck> <BufferSecurityCheck>false</BufferSecurityCheck>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary> <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<AdditionalOptions>
</AdditionalOptions>
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Console</SubSystem> <SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding> <EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences> <OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries> <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
<StripPrivateSymbols>$(OutDir)$(TargetName).public.pdb</StripPrivateSymbols>
<AdditionalOptions>/PDBALTPATH:$(TargetName).pdb %(AdditionalOptions)</AdditionalOptions>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>..\..\..\src;..\..\..\inc</AdditionalIncludeDirectories>
<BufferSecurityCheck>false</BufferSecurityCheck>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<AdditionalOptions>
</AdditionalOptions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
<StripPrivateSymbols>$(OutDir)$(TargetName).public.pdb</StripPrivateSymbols>
<AdditionalOptions>/PDBALTPATH:$(TargetName).pdb %(AdditionalOptions)</AdditionalOptions>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="..\..\..\src\launcher\launcher.c" /> <ClCompile Include="..\..\..\src\launcher\launchctl.c" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\..\..\src\launcher\launchctl-version.rc">
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ResourceCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\winfsp_dll.vcxproj"> <ProjectReference Include="..\winfsp_dll.vcxproj">
@ -181,16 +284,7 @@
</ProjectReference> </ProjectReference>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="..\..\..\src\launcher\launcher.h" /> <ClInclude Include="..\..\..\src\shared\um\minimal.h" />
<ClInclude Include="..\..\..\src\shared\minimal.h" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\..\..\src\launcher\launcher-version.rc">
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_UNICODE;UNICODE;%(PreprocessorDefinitions);MyProductName=$(MyProductName);MyDescription=$(MyDescription);MyCompanyName=$(MyCompanyName);MyCopyright=$(MyCopyright);MyVersion=$(MyVersion);MyVersionWithCommas=$(MyVersionWithCommas)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_UNICODE;UNICODE;%(PreprocessorDefinitions);MyProductName=$(MyProductName);MyDescription=$(MyDescription);MyCompanyName=$(MyCompanyName);MyCopyright=$(MyCopyright);MyVersion=$(MyVersion);MyVersionWithCommas=$(MyVersionWithCommas)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">_UNICODE;UNICODE;%(PreprocessorDefinitions);MyProductName=$(MyProductName);MyDescription=$(MyDescription);MyCompanyName=$(MyCompanyName);MyCopyright=$(MyCopyright);MyVersion=$(MyVersion);MyVersionWithCommas=$(MyVersionWithCommas)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">_UNICODE;UNICODE;%(PreprocessorDefinitions);MyProductName=$(MyProductName);MyDescription=$(MyDescription);MyCompanyName=$(MyCompanyName);MyCopyright=$(MyCopyright);MyVersion=$(MyVersion);MyVersionWithCommas=$(MyVersionWithCommas)</PreprocessorDefinitions>
</ResourceCompile>
</ItemGroup> </ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets"> <ImportGroup Label="ExtensionTargets">

View File

@ -5,21 +5,13 @@
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions> <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter> </Filter>
<Filter Include="Include"> <Filter Include="Source\shared">
<UniqueIdentifier>{e650819b-355e-455c-81c9-10dc7debe109}</UniqueIdentifier> <UniqueIdentifier>{9f7e57a6-7696-4de2-a9eb-cba60e24d02a}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="Include\shared"> <Filter Include="Source\shared\um">
<UniqueIdentifier>{744edf89-567a-40b7-b6f2-ee2bc7b9f0d9}</UniqueIdentifier> <UniqueIdentifier>{89fa307f-09d4-4373-a07f-49f23c698474}</UniqueIdentifier>
</Filter> </Filter>
</ItemGroup> </ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\src\shared\minimal.h">
<Filter>Include\shared</Filter>
</ClInclude>
<ClInclude Include="..\..\..\src\launcher\launcher.h">
<Filter>Source</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="..\..\..\src\launcher\launchctl.c"> <ClCompile Include="..\..\..\src\launcher\launchctl.c">
<Filter>Source</Filter> <Filter>Source</Filter>
@ -30,4 +22,9 @@
<Filter>Source</Filter> <Filter>Source</Filter>
</ResourceCompile> </ResourceCompile>
</ItemGroup> </ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\src\shared\um\minimal.h">
<Filter>Source\shared\um</Filter>
</ClInclude>
</ItemGroup>
</Project> </Project>

View File

@ -0,0 +1,299 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), build.common.props))/build.common.props" />
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|ARM64">
<Configuration>Debug</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM64">
<Configuration>Release</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{6CDF9411-B852-4EAC-822D-8F930675F17B}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>launcher</RootNamespace>
<WindowsTargetPlatformVersion>$(LatestTargetPlatformVersion)</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
<TargetName>$(ProjectName)-$(MyProductFileArch)</TargetName>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
<TargetName>$(ProjectName)-$(MyProductFileArch)</TargetName>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
<LinkIncremental>true</LinkIncremental>
<TargetName>$(ProjectName)-$(MyProductFileArch)</TargetName>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
<TargetName>$(ProjectName)-$(MyProductFileArch)</TargetName>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
<TargetName>$(ProjectName)-$(MyProductFileArch)</TargetName>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
<LinkIncremental>false</LinkIncremental>
<TargetName>$(ProjectName)-$(MyProductFileArch)</TargetName>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>..\..\..\src;..\..\..\inc</AdditionalIncludeDirectories>
<BasicRuntimeChecks>Default</BasicRuntimeChecks>
<BufferSecurityCheck>false</BufferSecurityCheck>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<AdditionalOptions>
</AdditionalOptions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
<AdditionalDependencies>%(AdditionalDependencies);rpcrt4.lib;userenv.lib</AdditionalDependencies>
<StripPrivateSymbols>$(OutDir)$(TargetName).public.pdb</StripPrivateSymbols>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>..\..\..\src;..\..\..\inc</AdditionalIncludeDirectories>
<BasicRuntimeChecks>Default</BasicRuntimeChecks>
<BufferSecurityCheck>false</BufferSecurityCheck>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<AdditionalOptions>
</AdditionalOptions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
<AdditionalDependencies>%(AdditionalDependencies);rpcrt4.lib;userenv.lib</AdditionalDependencies>
<StripPrivateSymbols>$(OutDir)$(TargetName).public.pdb</StripPrivateSymbols>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>..\..\..\src;..\..\..\inc</AdditionalIncludeDirectories>
<BasicRuntimeChecks>Default</BasicRuntimeChecks>
<BufferSecurityCheck>false</BufferSecurityCheck>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<AdditionalOptions>
</AdditionalOptions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
<AdditionalDependencies>%(AdditionalDependencies);rpcrt4.lib;userenv.lib</AdditionalDependencies>
<StripPrivateSymbols>$(OutDir)$(TargetName).public.pdb</StripPrivateSymbols>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>..\..\..\src;..\..\..\inc</AdditionalIncludeDirectories>
<BufferSecurityCheck>false</BufferSecurityCheck>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<AdditionalOptions>
</AdditionalOptions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
<AdditionalDependencies>%(AdditionalDependencies);rpcrt4.lib;userenv.lib</AdditionalDependencies>
<StripPrivateSymbols>$(OutDir)$(TargetName).public.pdb</StripPrivateSymbols>
<AdditionalOptions>/PDBALTPATH:$(TargetName).pdb %(AdditionalOptions)</AdditionalOptions>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>..\..\..\src;..\..\..\inc</AdditionalIncludeDirectories>
<BufferSecurityCheck>false</BufferSecurityCheck>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<AdditionalOptions>
</AdditionalOptions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
<AdditionalDependencies>%(AdditionalDependencies);rpcrt4.lib;userenv.lib</AdditionalDependencies>
<StripPrivateSymbols>$(OutDir)$(TargetName).public.pdb</StripPrivateSymbols>
<AdditionalOptions>/PDBALTPATH:$(TargetName).pdb %(AdditionalOptions)</AdditionalOptions>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>..\..\..\src;..\..\..\inc</AdditionalIncludeDirectories>
<BufferSecurityCheck>false</BufferSecurityCheck>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<AdditionalOptions>
</AdditionalOptions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
<AdditionalDependencies>%(AdditionalDependencies);rpcrt4.lib;userenv.lib</AdditionalDependencies>
<StripPrivateSymbols>$(OutDir)$(TargetName).public.pdb</StripPrivateSymbols>
<AdditionalOptions>/PDBALTPATH:$(TargetName).pdb %(AdditionalOptions)</AdditionalOptions>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="..\..\..\src\launcher\launcher.c" />
<ClCompile Include="..\..\..\src\launcher\ptrans.c" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\winfsp_dll.vcxproj">
<Project>{4a7c0b21-9e10-4c81-92de-1493efcf24eb}</Project>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\..\..\src\launcher\launcher-version.rc">
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ResourceCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\src\shared\um\minimal.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@ -5,29 +5,29 @@
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions> <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter> </Filter>
<Filter Include="Include"> <Filter Include="Source\shared">
<UniqueIdentifier>{11e7c0f2-7782-43ee-84fa-9e56efbe39de}</UniqueIdentifier> <UniqueIdentifier>{ebc5d08c-dcc6-4889-a482-84cefda188cd}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="Include\shared"> <Filter Include="Source\shared\um">
<UniqueIdentifier>{d83ea433-d9f7-494c-90b9-3a8997483cd9}</UniqueIdentifier> <UniqueIdentifier>{574d211e-3e2c-4551-bc78-4786f33c4093}</UniqueIdentifier>
</Filter> </Filter>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="..\..\..\src\launcher\launcher.c"> <ClCompile Include="..\..\..\src\launcher\launcher.c">
<Filter>Source</Filter> <Filter>Source</Filter>
</ClCompile> </ClCompile>
</ItemGroup> <ClCompile Include="..\..\..\src\launcher\ptrans.c">
<ItemGroup>
<ClInclude Include="..\..\..\src\shared\minimal.h">
<Filter>Include\shared</Filter>
</ClInclude>
<ClInclude Include="..\..\..\src\launcher\launcher.h">
<Filter>Source</Filter> <Filter>Source</Filter>
</ClInclude> </ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ResourceCompile Include="..\..\..\src\launcher\launcher-version.rc"> <ResourceCompile Include="..\..\..\src\launcher\launcher-version.rc">
<Filter>Source</Filter> <Filter>Source</Filter>
</ResourceCompile> </ResourceCompile>
</ItemGroup> </ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\src\shared\um\minimal.h">
<Filter>Source\shared\um</Filter>
</ClInclude>
</ItemGroup>
</Project> </Project>

View File

@ -1,13 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<MyProductName>WinFsp</MyProductName>
<MyDescription>Windows File System Proxy</MyDescription>
<MyCompanyName>Navimatics Corporation</MyCompanyName>
<MyCopyright>2015-2016 Bill Zissimopoulos</MyCopyright>
<!-- build number: concat 2-digit year with 3-digit day of the year (16-bits until 2066) -->
<MyBuildNumber>$([System.DateTime]::Now.ToString(`yy`))$([System.DateTime]::Now.DayOfYear.ToString(`000`))</MyBuildNumber>
<MyVersion>0.12.$(MyBuildNumber)</MyVersion>
<MyVersionWithCommas>$(MyVersion.Replace('.',',')),0</MyVersionWithCommas>
</PropertyGroup>
</Project>

View File

@ -1,7 +1,7 @@
 
Microsoft Visual Studio Solution File, Format Version 12.00 Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14 # Visual Studio 14
VisualStudioVersion = 14.0.25123.0 VisualStudioVersion = 14.0.25420.1
MinimumVisualStudioVersion = 10.0.40219.1 MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "winfsp.dll", "winfsp_dll.vcxproj", "{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "winfsp.dll", "winfsp_dll.vcxproj", "{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}"
ProjectSection(ProjectDependencies) = postProject ProjectSection(ProjectDependencies) = postProject
@ -32,127 +32,282 @@ Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "winfsp_msi", "installer\win
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CustomActions", "installer\CustomActions\CustomActions.vcxproj", "{95C223E6-B5F1-4FD0-9376-41CDBC824445}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CustomActions", "installer\CustomActions\CustomActions.vcxproj", "{95C223E6-B5F1-4FD0-9376-41CDBC824445}"
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "launcher", "launcher", "{FD28A504-431E-49B9-BB8C-DCA0E7019F66}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fscrash", "testing\fscrash.vcxproj", "{10757011-749D-4954-873B-AE38D8145472}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "launcher", "launcher\launcher.vcxproj", "{A5EFD487-0140-4184-8C54-FFAEC2F85E35}"
ProjectSection(ProjectDependencies) = postProject ProjectSection(ProjectDependencies) = postProject
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB} = {4A7C0B21-9E10-4C81-92DE-1493EFCF24EB} {4A7C0B21-9E10-4C81-92DE-1493EFCF24EB} = {4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}
{C85C26BA-8C22-4D30-83DA-46C3548E6332} = {C85C26BA-8C22-4D30-83DA-46C3548E6332} {C85C26BA-8C22-4D30-83DA-46C3548E6332} = {C85C26BA-8C22-4D30-83DA-46C3548E6332}
EndProjectSection EndProjectSection
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "launchctl", "launcher\launchctl.vcxproj", "{73EAAEDA-557B-48D5-A137-328934720FB4}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fsbench", "testing\fsbench.vcxproj", "{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "winfsp.net", "dotnet\winfsp.net.csproj", "{94580219-CC8D-4FE5-A3BE-437B0B3481E1}"
ProjectSection(ProjectDependencies) = postProject ProjectSection(ProjectDependencies) = postProject
{A5EFD487-0140-4184-8C54-FFAEC2F85E35} = {A5EFD487-0140-4184-8C54-FFAEC2F85E35} {4A7C0B21-9E10-4C81-92DE-1493EFCF24EB} = {4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}
{C85C26BA-8C22-4D30-83DA-46C3548E6332} = {C85C26BA-8C22-4D30-83DA-46C3548E6332}
EndProjectSection EndProjectSection
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "dotnet", "dotnet", "{A998CEC4-4B34-43DC-8457-F7761228BA67}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "memfs-dotnet", "testing\memfs-dotnet.csproj", "{4920E350-D496-4652-AE98-6C4208AEC1D8}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tools", "tools", "{04A4762C-FAB9-4196-9AC8-0757F3E8AB79}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "launcher", "tools\launcher.vcxproj", "{6CDF9411-B852-4EAC-822D-8F930675F17B}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "launchctl", "tools\launchctl.vcxproj", "{264A5D09-126F-4760-A3F1-4B3B95C925AA}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fsptool", "tools\fsptool.vcxproj", "{1E997BEC-1642-4A5C-B252-852DA094E11E}"
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|ARM64 = Debug|ARM64
Debug|x64 = Debug|x64 Debug|x64 = Debug|x64
Debug|x86 = Debug|x86 Debug|x86 = Debug|x86
Installer.Debug|ARM64 = Installer.Debug|ARM64
Installer.Debug|x64 = Installer.Debug|x64 Installer.Debug|x64 = Installer.Debug|x64
Installer.Debug|x86 = Installer.Debug|x86 Installer.Debug|x86 = Installer.Debug|x86
Installer.Release|ARM64 = Installer.Release|ARM64
Installer.Release|x64 = Installer.Release|x64 Installer.Release|x64 = Installer.Release|x64
Installer.Release|x86 = Installer.Release|x86 Installer.Release|x86 = Installer.Release|x86
Release|ARM64 = Release|ARM64
Release|x64 = Release|x64 Release|x64 = Release|x64
Release|x86 = Release|x86 Release|x86 = Release|x86
EndGlobalSection EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution GlobalSection(ProjectConfigurationPlatforms) = postSolution
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Debug|ARM64.ActiveCfg = Debug|ARM64
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Debug|ARM64.Build.0 = Debug|ARM64
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Debug|x64.ActiveCfg = Debug|x64 {4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Debug|x64.ActiveCfg = Debug|x64
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Debug|x64.Build.0 = Debug|x64 {4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Debug|x64.Build.0 = Debug|x64
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Debug|x86.ActiveCfg = Debug|Win32 {4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Debug|x86.ActiveCfg = Debug|Win32
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Debug|x86.Build.0 = Debug|Win32 {4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Debug|x86.Build.0 = Debug|Win32
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Installer.Debug|ARM64.ActiveCfg = Debug|ARM64
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Installer.Debug|x64.ActiveCfg = Debug|x64 {4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Installer.Debug|x64.ActiveCfg = Debug|x64
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Installer.Debug|x86.ActiveCfg = Debug|Win32 {4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Installer.Debug|x86.ActiveCfg = Debug|Win32
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Installer.Release|ARM64.ActiveCfg = Release|ARM64
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Installer.Release|x64.ActiveCfg = Release|x64 {4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Installer.Release|x64.ActiveCfg = Release|x64
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Installer.Release|x86.ActiveCfg = Release|Win32 {4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Installer.Release|x86.ActiveCfg = Release|Win32
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Release|ARM64.ActiveCfg = Release|ARM64
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Release|ARM64.Build.0 = Release|ARM64
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Release|x64.ActiveCfg = Release|x64 {4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Release|x64.ActiveCfg = Release|x64
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Release|x64.Build.0 = Release|x64 {4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Release|x64.Build.0 = Release|x64
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Release|x86.ActiveCfg = Release|Win32 {4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Release|x86.ActiveCfg = Release|Win32
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Release|x86.Build.0 = Release|Win32 {4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Release|x86.Build.0 = Release|Win32
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Debug|ARM64.ActiveCfg = Debug|ARM64
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Debug|ARM64.Build.0 = Debug|ARM64
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Debug|x64.ActiveCfg = Debug|x64 {C85C26BA-8C22-4D30-83DA-46C3548E6332}.Debug|x64.ActiveCfg = Debug|x64
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Debug|x64.Build.0 = Debug|x64 {C85C26BA-8C22-4D30-83DA-46C3548E6332}.Debug|x64.Build.0 = Debug|x64
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Debug|x86.ActiveCfg = Debug|Win32 {C85C26BA-8C22-4D30-83DA-46C3548E6332}.Debug|x86.ActiveCfg = Debug|Win32
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Debug|x86.Build.0 = Debug|Win32 {C85C26BA-8C22-4D30-83DA-46C3548E6332}.Debug|x86.Build.0 = Debug|Win32
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Installer.Debug|ARM64.ActiveCfg = Debug|ARM64
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Installer.Debug|x64.ActiveCfg = Debug|x64 {C85C26BA-8C22-4D30-83DA-46C3548E6332}.Installer.Debug|x64.ActiveCfg = Debug|x64
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Installer.Debug|x86.ActiveCfg = Debug|Win32 {C85C26BA-8C22-4D30-83DA-46C3548E6332}.Installer.Debug|x86.ActiveCfg = Debug|Win32
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Installer.Release|ARM64.ActiveCfg = Release|ARM64
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Installer.Release|x64.ActiveCfg = Release|x64 {C85C26BA-8C22-4D30-83DA-46C3548E6332}.Installer.Release|x64.ActiveCfg = Release|x64
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Installer.Release|x86.ActiveCfg = Release|Win32 {C85C26BA-8C22-4D30-83DA-46C3548E6332}.Installer.Release|x86.ActiveCfg = Release|Win32
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Release|ARM64.ActiveCfg = Release|ARM64
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Release|ARM64.Build.0 = Release|ARM64
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Release|x64.ActiveCfg = Release|x64 {C85C26BA-8C22-4D30-83DA-46C3548E6332}.Release|x64.ActiveCfg = Release|x64
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Release|x64.Build.0 = Release|x64 {C85C26BA-8C22-4D30-83DA-46C3548E6332}.Release|x64.Build.0 = Release|x64
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Release|x86.ActiveCfg = Release|Win32 {C85C26BA-8C22-4D30-83DA-46C3548E6332}.Release|x86.ActiveCfg = Release|Win32
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Release|x86.Build.0 = Release|Win32 {C85C26BA-8C22-4D30-83DA-46C3548E6332}.Release|x86.Build.0 = Release|Win32
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Debug|ARM64.ActiveCfg = Debug|ARM64
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Debug|ARM64.Build.0 = Debug|ARM64
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Debug|x64.ActiveCfg = Debug|x64 {262DF8CC-E7A8-4460-A22C-683CBA322C32}.Debug|x64.ActiveCfg = Debug|x64
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Debug|x64.Build.0 = Debug|x64 {262DF8CC-E7A8-4460-A22C-683CBA322C32}.Debug|x64.Build.0 = Debug|x64
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Debug|x86.ActiveCfg = Debug|Win32 {262DF8CC-E7A8-4460-A22C-683CBA322C32}.Debug|x86.ActiveCfg = Debug|Win32
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Debug|x86.Build.0 = Debug|Win32 {262DF8CC-E7A8-4460-A22C-683CBA322C32}.Debug|x86.Build.0 = Debug|Win32
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Installer.Debug|ARM64.ActiveCfg = Debug|ARM64
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Installer.Debug|x64.ActiveCfg = Debug|x64 {262DF8CC-E7A8-4460-A22C-683CBA322C32}.Installer.Debug|x64.ActiveCfg = Debug|x64
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Installer.Debug|x86.ActiveCfg = Debug|Win32 {262DF8CC-E7A8-4460-A22C-683CBA322C32}.Installer.Debug|x86.ActiveCfg = Debug|Win32
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Installer.Release|ARM64.ActiveCfg = Release|ARM64
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Installer.Release|x64.ActiveCfg = Release|x64 {262DF8CC-E7A8-4460-A22C-683CBA322C32}.Installer.Release|x64.ActiveCfg = Release|x64
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Installer.Release|x86.ActiveCfg = Release|Win32 {262DF8CC-E7A8-4460-A22C-683CBA322C32}.Installer.Release|x86.ActiveCfg = Release|Win32
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Release|ARM64.ActiveCfg = Release|ARM64
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Release|ARM64.Build.0 = Release|ARM64
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Release|x64.ActiveCfg = Release|x64 {262DF8CC-E7A8-4460-A22C-683CBA322C32}.Release|x64.ActiveCfg = Release|x64
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Release|x64.Build.0 = Release|x64 {262DF8CC-E7A8-4460-A22C-683CBA322C32}.Release|x64.Build.0 = Release|x64
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Release|x86.ActiveCfg = Release|Win32 {262DF8CC-E7A8-4460-A22C-683CBA322C32}.Release|x86.ActiveCfg = Release|Win32
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Release|x86.Build.0 = Release|Win32 {262DF8CC-E7A8-4460-A22C-683CBA322C32}.Release|x86.Build.0 = Release|Win32
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Debug|ARM64.ActiveCfg = Debug|ARM64
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Debug|ARM64.Build.0 = Debug|ARM64
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Debug|x64.ActiveCfg = Debug|x64 {AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Debug|x64.ActiveCfg = Debug|x64
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Debug|x64.Build.0 = Debug|x64 {AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Debug|x64.Build.0 = Debug|x64
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Debug|x86.ActiveCfg = Debug|Win32 {AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Debug|x86.ActiveCfg = Debug|Win32
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Debug|x86.Build.0 = Debug|Win32 {AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Debug|x86.Build.0 = Debug|Win32
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Installer.Debug|ARM64.ActiveCfg = Debug|ARM64
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Installer.Debug|x64.ActiveCfg = Debug|x64 {AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Installer.Debug|x64.ActiveCfg = Debug|x64
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Installer.Debug|x86.ActiveCfg = Debug|Win32 {AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Installer.Debug|x86.ActiveCfg = Debug|Win32
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Installer.Release|ARM64.ActiveCfg = Release|ARM64
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Installer.Release|x64.ActiveCfg = Release|x64 {AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Installer.Release|x64.ActiveCfg = Release|x64
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Installer.Release|x86.ActiveCfg = Release|Win32 {AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Installer.Release|x86.ActiveCfg = Release|Win32
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Release|ARM64.ActiveCfg = Release|ARM64
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Release|ARM64.Build.0 = Release|ARM64
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Release|x64.ActiveCfg = Release|x64 {AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Release|x64.ActiveCfg = Release|x64
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Release|x64.Build.0 = Release|x64 {AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Release|x64.Build.0 = Release|x64
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Release|x86.ActiveCfg = Release|Win32 {AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Release|x86.ActiveCfg = Release|Win32
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Release|x86.Build.0 = Release|Win32 {AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Release|x86.Build.0 = Release|Win32
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Debug|ARM64.ActiveCfg = Debug|x86
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Debug|x64.ActiveCfg = Debug|x86 {D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Debug|x64.ActiveCfg = Debug|x86
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Debug|x86.ActiveCfg = Debug|x86 {D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Debug|x86.ActiveCfg = Debug|x86
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Installer.Debug|ARM64.ActiveCfg = Release|x86
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Installer.Debug|ARM64.Build.0 = Release|x86
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Installer.Debug|x64.ActiveCfg = Release|x86 {D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Installer.Debug|x64.ActiveCfg = Release|x86
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Installer.Debug|x64.Build.0 = Release|x86 {D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Installer.Debug|x64.Build.0 = Release|x86
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Installer.Debug|x86.ActiveCfg = Debug|x86 {D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Installer.Debug|x86.ActiveCfg = Debug|x86
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Installer.Debug|x86.Build.0 = Debug|x86 {D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Installer.Debug|x86.Build.0 = Debug|x86
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Installer.Release|ARM64.ActiveCfg = Release|x86
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Installer.Release|ARM64.Build.0 = Release|x86
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Installer.Release|x64.ActiveCfg = Release|x86 {D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Installer.Release|x64.ActiveCfg = Release|x86
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Installer.Release|x64.Build.0 = Release|x86 {D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Installer.Release|x64.Build.0 = Release|x86
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Installer.Release|x86.ActiveCfg = Release|x86 {D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Installer.Release|x86.ActiveCfg = Release|x86
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Installer.Release|x86.Build.0 = Release|x86 {D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Installer.Release|x86.Build.0 = Release|x86
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Release|ARM64.ActiveCfg = Release|x86
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Release|x64.ActiveCfg = Release|x86 {D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Release|x64.ActiveCfg = Release|x86
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Release|x86.ActiveCfg = Release|x86 {D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Release|x86.ActiveCfg = Release|x86
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Debug|ARM64.ActiveCfg = Debug|Win32
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Debug|x64.ActiveCfg = Debug|Win32 {95C223E6-B5F1-4FD0-9376-41CDBC824445}.Debug|x64.ActiveCfg = Debug|Win32
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Debug|x86.ActiveCfg = Debug|Win32 {95C223E6-B5F1-4FD0-9376-41CDBC824445}.Debug|x86.ActiveCfg = Debug|Win32
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Installer.Debug|ARM64.ActiveCfg = Debug|Win32
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Installer.Debug|ARM64.Build.0 = Debug|Win32
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Installer.Debug|x64.ActiveCfg = Release|Win32 {95C223E6-B5F1-4FD0-9376-41CDBC824445}.Installer.Debug|x64.ActiveCfg = Release|Win32
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Installer.Debug|x64.Build.0 = Release|Win32 {95C223E6-B5F1-4FD0-9376-41CDBC824445}.Installer.Debug|x64.Build.0 = Release|Win32
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Installer.Debug|x86.ActiveCfg = Debug|Win32 {95C223E6-B5F1-4FD0-9376-41CDBC824445}.Installer.Debug|x86.ActiveCfg = Debug|Win32
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Installer.Debug|x86.Build.0 = Debug|Win32 {95C223E6-B5F1-4FD0-9376-41CDBC824445}.Installer.Debug|x86.Build.0 = Debug|Win32
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Installer.Release|ARM64.ActiveCfg = Release|Win32
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Installer.Release|ARM64.Build.0 = Release|Win32
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Installer.Release|x64.ActiveCfg = Release|Win32 {95C223E6-B5F1-4FD0-9376-41CDBC824445}.Installer.Release|x64.ActiveCfg = Release|Win32
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Installer.Release|x64.Build.0 = Release|Win32 {95C223E6-B5F1-4FD0-9376-41CDBC824445}.Installer.Release|x64.Build.0 = Release|Win32
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Installer.Release|x86.ActiveCfg = Release|Win32 {95C223E6-B5F1-4FD0-9376-41CDBC824445}.Installer.Release|x86.ActiveCfg = Release|Win32
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Installer.Release|x86.Build.0 = Release|Win32 {95C223E6-B5F1-4FD0-9376-41CDBC824445}.Installer.Release|x86.Build.0 = Release|Win32
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Release|ARM64.ActiveCfg = Release|Win32
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Release|x64.ActiveCfg = Release|Win32 {95C223E6-B5F1-4FD0-9376-41CDBC824445}.Release|x64.ActiveCfg = Release|Win32
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Release|x86.ActiveCfg = Release|Win32 {95C223E6-B5F1-4FD0-9376-41CDBC824445}.Release|x86.ActiveCfg = Release|Win32
{A5EFD487-0140-4184-8C54-FFAEC2F85E35}.Debug|x64.ActiveCfg = Debug|x64 {10757011-749D-4954-873B-AE38D8145472}.Debug|ARM64.ActiveCfg = Debug|ARM64
{A5EFD487-0140-4184-8C54-FFAEC2F85E35}.Debug|x64.Build.0 = Debug|x64 {10757011-749D-4954-873B-AE38D8145472}.Debug|ARM64.Build.0 = Debug|ARM64
{A5EFD487-0140-4184-8C54-FFAEC2F85E35}.Debug|x86.ActiveCfg = Debug|Win32 {10757011-749D-4954-873B-AE38D8145472}.Debug|x64.ActiveCfg = Debug|x64
{A5EFD487-0140-4184-8C54-FFAEC2F85E35}.Debug|x86.Build.0 = Debug|Win32 {10757011-749D-4954-873B-AE38D8145472}.Debug|x64.Build.0 = Debug|x64
{A5EFD487-0140-4184-8C54-FFAEC2F85E35}.Installer.Debug|x64.ActiveCfg = Debug|x64 {10757011-749D-4954-873B-AE38D8145472}.Debug|x86.ActiveCfg = Debug|Win32
{A5EFD487-0140-4184-8C54-FFAEC2F85E35}.Installer.Debug|x86.ActiveCfg = Debug|Win32 {10757011-749D-4954-873B-AE38D8145472}.Debug|x86.Build.0 = Debug|Win32
{A5EFD487-0140-4184-8C54-FFAEC2F85E35}.Installer.Release|x64.ActiveCfg = Release|x64 {10757011-749D-4954-873B-AE38D8145472}.Installer.Debug|ARM64.ActiveCfg = Debug|ARM64
{A5EFD487-0140-4184-8C54-FFAEC2F85E35}.Installer.Release|x86.ActiveCfg = Release|Win32 {10757011-749D-4954-873B-AE38D8145472}.Installer.Debug|x64.ActiveCfg = Debug|x64
{A5EFD487-0140-4184-8C54-FFAEC2F85E35}.Release|x64.ActiveCfg = Release|x64 {10757011-749D-4954-873B-AE38D8145472}.Installer.Debug|x86.ActiveCfg = Debug|Win32
{A5EFD487-0140-4184-8C54-FFAEC2F85E35}.Release|x64.Build.0 = Release|x64 {10757011-749D-4954-873B-AE38D8145472}.Installer.Release|ARM64.ActiveCfg = Release|ARM64
{A5EFD487-0140-4184-8C54-FFAEC2F85E35}.Release|x86.ActiveCfg = Release|Win32 {10757011-749D-4954-873B-AE38D8145472}.Installer.Release|x64.ActiveCfg = Release|x64
{A5EFD487-0140-4184-8C54-FFAEC2F85E35}.Release|x86.Build.0 = Release|Win32 {10757011-749D-4954-873B-AE38D8145472}.Installer.Release|x86.ActiveCfg = Release|Win32
{73EAAEDA-557B-48D5-A137-328934720FB4}.Debug|x64.ActiveCfg = Debug|x64 {10757011-749D-4954-873B-AE38D8145472}.Release|ARM64.ActiveCfg = Release|ARM64
{73EAAEDA-557B-48D5-A137-328934720FB4}.Debug|x64.Build.0 = Debug|x64 {10757011-749D-4954-873B-AE38D8145472}.Release|ARM64.Build.0 = Release|ARM64
{73EAAEDA-557B-48D5-A137-328934720FB4}.Debug|x86.ActiveCfg = Debug|Win32 {10757011-749D-4954-873B-AE38D8145472}.Release|x64.ActiveCfg = Release|x64
{73EAAEDA-557B-48D5-A137-328934720FB4}.Debug|x86.Build.0 = Debug|Win32 {10757011-749D-4954-873B-AE38D8145472}.Release|x64.Build.0 = Release|x64
{73EAAEDA-557B-48D5-A137-328934720FB4}.Installer.Debug|x64.ActiveCfg = Debug|x64 {10757011-749D-4954-873B-AE38D8145472}.Release|x86.ActiveCfg = Release|Win32
{73EAAEDA-557B-48D5-A137-328934720FB4}.Installer.Debug|x86.ActiveCfg = Debug|Win32 {10757011-749D-4954-873B-AE38D8145472}.Release|x86.Build.0 = Release|Win32
{73EAAEDA-557B-48D5-A137-328934720FB4}.Installer.Release|x64.ActiveCfg = Release|x64 {C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Debug|ARM64.ActiveCfg = Debug|ARM64
{73EAAEDA-557B-48D5-A137-328934720FB4}.Installer.Release|x86.ActiveCfg = Release|Win32 {C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Debug|ARM64.Build.0 = Debug|ARM64
{73EAAEDA-557B-48D5-A137-328934720FB4}.Release|x64.ActiveCfg = Release|x64 {C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Debug|x64.ActiveCfg = Debug|x64
{73EAAEDA-557B-48D5-A137-328934720FB4}.Release|x64.Build.0 = Release|x64 {C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Debug|x64.Build.0 = Debug|x64
{73EAAEDA-557B-48D5-A137-328934720FB4}.Release|x86.ActiveCfg = Release|Win32 {C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Debug|x86.ActiveCfg = Debug|Win32
{73EAAEDA-557B-48D5-A137-328934720FB4}.Release|x86.Build.0 = Release|Win32 {C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Debug|x86.Build.0 = Debug|Win32
{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Installer.Debug|ARM64.ActiveCfg = Debug|ARM64
{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Installer.Debug|x64.ActiveCfg = Debug|x64
{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Installer.Debug|x86.ActiveCfg = Debug|Win32
{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Installer.Release|ARM64.ActiveCfg = Release|ARM64
{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Installer.Release|x64.ActiveCfg = Release|x64
{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Installer.Release|x86.ActiveCfg = Release|Win32
{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Release|ARM64.ActiveCfg = Release|ARM64
{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Release|ARM64.Build.0 = Release|ARM64
{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Release|x64.ActiveCfg = Release|x64
{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Release|x64.Build.0 = Release|x64
{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Release|x86.ActiveCfg = Release|Win32
{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Release|x86.Build.0 = Release|Win32
{94580219-CC8D-4FE5-A3BE-437B0B3481E1}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{94580219-CC8D-4FE5-A3BE-437B0B3481E1}.Debug|ARM64.Build.0 = Debug|Any CPU
{94580219-CC8D-4FE5-A3BE-437B0B3481E1}.Debug|x64.ActiveCfg = Debug|Any CPU
{94580219-CC8D-4FE5-A3BE-437B0B3481E1}.Debug|x64.Build.0 = Debug|Any CPU
{94580219-CC8D-4FE5-A3BE-437B0B3481E1}.Debug|x86.ActiveCfg = Debug|Any CPU
{94580219-CC8D-4FE5-A3BE-437B0B3481E1}.Debug|x86.Build.0 = Debug|Any CPU
{94580219-CC8D-4FE5-A3BE-437B0B3481E1}.Installer.Debug|ARM64.ActiveCfg = Debug|Any CPU
{94580219-CC8D-4FE5-A3BE-437B0B3481E1}.Installer.Debug|x64.ActiveCfg = Debug|Any CPU
{94580219-CC8D-4FE5-A3BE-437B0B3481E1}.Installer.Debug|x86.ActiveCfg = Debug|Any CPU
{94580219-CC8D-4FE5-A3BE-437B0B3481E1}.Installer.Release|ARM64.ActiveCfg = Release|Any CPU
{94580219-CC8D-4FE5-A3BE-437B0B3481E1}.Installer.Release|x64.ActiveCfg = Release|Any CPU
{94580219-CC8D-4FE5-A3BE-437B0B3481E1}.Installer.Release|x86.ActiveCfg = Release|Any CPU
{94580219-CC8D-4FE5-A3BE-437B0B3481E1}.Release|ARM64.ActiveCfg = Release|Any CPU
{94580219-CC8D-4FE5-A3BE-437B0B3481E1}.Release|ARM64.Build.0 = Release|Any CPU
{94580219-CC8D-4FE5-A3BE-437B0B3481E1}.Release|x64.ActiveCfg = Release|Any CPU
{94580219-CC8D-4FE5-A3BE-437B0B3481E1}.Release|x64.Build.0 = Release|Any CPU
{94580219-CC8D-4FE5-A3BE-437B0B3481E1}.Release|x86.ActiveCfg = Release|Any CPU
{94580219-CC8D-4FE5-A3BE-437B0B3481E1}.Release|x86.Build.0 = Release|Any CPU
{4920E350-D496-4652-AE98-6C4208AEC1D8}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{4920E350-D496-4652-AE98-6C4208AEC1D8}.Debug|ARM64.Build.0 = Debug|Any CPU
{4920E350-D496-4652-AE98-6C4208AEC1D8}.Debug|x64.ActiveCfg = Debug|Any CPU
{4920E350-D496-4652-AE98-6C4208AEC1D8}.Debug|x64.Build.0 = Debug|Any CPU
{4920E350-D496-4652-AE98-6C4208AEC1D8}.Debug|x86.ActiveCfg = Debug|Any CPU
{4920E350-D496-4652-AE98-6C4208AEC1D8}.Debug|x86.Build.0 = Debug|Any CPU
{4920E350-D496-4652-AE98-6C4208AEC1D8}.Installer.Debug|ARM64.ActiveCfg = Debug|Any CPU
{4920E350-D496-4652-AE98-6C4208AEC1D8}.Installer.Debug|x64.ActiveCfg = Debug|Any CPU
{4920E350-D496-4652-AE98-6C4208AEC1D8}.Installer.Debug|x86.ActiveCfg = Debug|Any CPU
{4920E350-D496-4652-AE98-6C4208AEC1D8}.Installer.Release|ARM64.ActiveCfg = Release|Any CPU
{4920E350-D496-4652-AE98-6C4208AEC1D8}.Installer.Release|x64.ActiveCfg = Release|Any CPU
{4920E350-D496-4652-AE98-6C4208AEC1D8}.Installer.Release|x86.ActiveCfg = Release|Any CPU
{4920E350-D496-4652-AE98-6C4208AEC1D8}.Release|ARM64.ActiveCfg = Release|Any CPU
{4920E350-D496-4652-AE98-6C4208AEC1D8}.Release|ARM64.Build.0 = Release|Any CPU
{4920E350-D496-4652-AE98-6C4208AEC1D8}.Release|x64.ActiveCfg = Release|Any CPU
{4920E350-D496-4652-AE98-6C4208AEC1D8}.Release|x64.Build.0 = Release|Any CPU
{4920E350-D496-4652-AE98-6C4208AEC1D8}.Release|x86.ActiveCfg = Release|Any CPU
{4920E350-D496-4652-AE98-6C4208AEC1D8}.Release|x86.Build.0 = Release|Any CPU
{6CDF9411-B852-4EAC-822D-8F930675F17B}.Debug|ARM64.ActiveCfg = Debug|ARM64
{6CDF9411-B852-4EAC-822D-8F930675F17B}.Debug|ARM64.Build.0 = Debug|ARM64
{6CDF9411-B852-4EAC-822D-8F930675F17B}.Debug|x64.ActiveCfg = Debug|x64
{6CDF9411-B852-4EAC-822D-8F930675F17B}.Debug|x64.Build.0 = Debug|x64
{6CDF9411-B852-4EAC-822D-8F930675F17B}.Debug|x86.ActiveCfg = Debug|Win32
{6CDF9411-B852-4EAC-822D-8F930675F17B}.Debug|x86.Build.0 = Debug|Win32
{6CDF9411-B852-4EAC-822D-8F930675F17B}.Installer.Debug|ARM64.ActiveCfg = Debug|ARM64
{6CDF9411-B852-4EAC-822D-8F930675F17B}.Installer.Debug|x64.ActiveCfg = Debug|x64
{6CDF9411-B852-4EAC-822D-8F930675F17B}.Installer.Debug|x86.ActiveCfg = Debug|Win32
{6CDF9411-B852-4EAC-822D-8F930675F17B}.Installer.Release|ARM64.ActiveCfg = Release|ARM64
{6CDF9411-B852-4EAC-822D-8F930675F17B}.Installer.Release|x64.ActiveCfg = Release|x64
{6CDF9411-B852-4EAC-822D-8F930675F17B}.Installer.Release|x86.ActiveCfg = Release|Win32
{6CDF9411-B852-4EAC-822D-8F930675F17B}.Release|ARM64.ActiveCfg = Release|ARM64
{6CDF9411-B852-4EAC-822D-8F930675F17B}.Release|ARM64.Build.0 = Release|ARM64
{6CDF9411-B852-4EAC-822D-8F930675F17B}.Release|x64.ActiveCfg = Release|x64
{6CDF9411-B852-4EAC-822D-8F930675F17B}.Release|x64.Build.0 = Release|x64
{6CDF9411-B852-4EAC-822D-8F930675F17B}.Release|x86.ActiveCfg = Release|Win32
{6CDF9411-B852-4EAC-822D-8F930675F17B}.Release|x86.Build.0 = Release|Win32
{264A5D09-126F-4760-A3F1-4B3B95C925AA}.Debug|ARM64.ActiveCfg = Debug|ARM64
{264A5D09-126F-4760-A3F1-4B3B95C925AA}.Debug|ARM64.Build.0 = Debug|ARM64
{264A5D09-126F-4760-A3F1-4B3B95C925AA}.Debug|x64.ActiveCfg = Debug|x64
{264A5D09-126F-4760-A3F1-4B3B95C925AA}.Debug|x64.Build.0 = Debug|x64
{264A5D09-126F-4760-A3F1-4B3B95C925AA}.Debug|x86.ActiveCfg = Debug|Win32
{264A5D09-126F-4760-A3F1-4B3B95C925AA}.Debug|x86.Build.0 = Debug|Win32
{264A5D09-126F-4760-A3F1-4B3B95C925AA}.Installer.Debug|ARM64.ActiveCfg = Debug|ARM64
{264A5D09-126F-4760-A3F1-4B3B95C925AA}.Installer.Debug|x64.ActiveCfg = Debug|x64
{264A5D09-126F-4760-A3F1-4B3B95C925AA}.Installer.Debug|x86.ActiveCfg = Debug|Win32
{264A5D09-126F-4760-A3F1-4B3B95C925AA}.Installer.Release|ARM64.ActiveCfg = Release|ARM64
{264A5D09-126F-4760-A3F1-4B3B95C925AA}.Installer.Release|x64.ActiveCfg = Release|x64
{264A5D09-126F-4760-A3F1-4B3B95C925AA}.Installer.Release|x86.ActiveCfg = Release|Win32
{264A5D09-126F-4760-A3F1-4B3B95C925AA}.Release|ARM64.ActiveCfg = Release|ARM64
{264A5D09-126F-4760-A3F1-4B3B95C925AA}.Release|ARM64.Build.0 = Release|ARM64
{264A5D09-126F-4760-A3F1-4B3B95C925AA}.Release|x64.ActiveCfg = Release|x64
{264A5D09-126F-4760-A3F1-4B3B95C925AA}.Release|x64.Build.0 = Release|x64
{264A5D09-126F-4760-A3F1-4B3B95C925AA}.Release|x86.ActiveCfg = Release|Win32
{264A5D09-126F-4760-A3F1-4B3B95C925AA}.Release|x86.Build.0 = Release|Win32
{1E997BEC-1642-4A5C-B252-852DA094E11E}.Debug|ARM64.ActiveCfg = Debug|ARM64
{1E997BEC-1642-4A5C-B252-852DA094E11E}.Debug|ARM64.Build.0 = Debug|ARM64
{1E997BEC-1642-4A5C-B252-852DA094E11E}.Debug|x64.ActiveCfg = Debug|x64
{1E997BEC-1642-4A5C-B252-852DA094E11E}.Debug|x64.Build.0 = Debug|x64
{1E997BEC-1642-4A5C-B252-852DA094E11E}.Debug|x86.ActiveCfg = Debug|Win32
{1E997BEC-1642-4A5C-B252-852DA094E11E}.Debug|x86.Build.0 = Debug|Win32
{1E997BEC-1642-4A5C-B252-852DA094E11E}.Installer.Debug|ARM64.ActiveCfg = Debug|ARM64
{1E997BEC-1642-4A5C-B252-852DA094E11E}.Installer.Debug|x64.ActiveCfg = Debug|x64
{1E997BEC-1642-4A5C-B252-852DA094E11E}.Installer.Debug|x86.ActiveCfg = Debug|Win32
{1E997BEC-1642-4A5C-B252-852DA094E11E}.Installer.Release|ARM64.ActiveCfg = Release|ARM64
{1E997BEC-1642-4A5C-B252-852DA094E11E}.Installer.Release|x64.ActiveCfg = Release|x64
{1E997BEC-1642-4A5C-B252-852DA094E11E}.Installer.Release|x86.ActiveCfg = Release|Win32
{1E997BEC-1642-4A5C-B252-852DA094E11E}.Release|ARM64.ActiveCfg = Release|ARM64
{1E997BEC-1642-4A5C-B252-852DA094E11E}.Release|ARM64.Build.0 = Release|ARM64
{1E997BEC-1642-4A5C-B252-852DA094E11E}.Release|x64.ActiveCfg = Release|x64
{1E997BEC-1642-4A5C-B252-852DA094E11E}.Release|x64.Build.0 = Release|x64
{1E997BEC-1642-4A5C-B252-852DA094E11E}.Release|x86.ActiveCfg = Release|Win32
{1E997BEC-1642-4A5C-B252-852DA094E11E}.Release|x86.Build.0 = Release|Win32
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE
@ -162,7 +317,12 @@ Global
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1} = {69439FD1-C07D-4BF1-98DC-3CCFECE53A49} {AA7190E8-877F-4827-8CDD-E0D85F83C8C1} = {69439FD1-C07D-4BF1-98DC-3CCFECE53A49}
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594} = {B464EF06-42AE-4674-81BB-FDDE80204822} {D53AAC39-4C57-4CA5-A4F3-C2B24888C594} = {B464EF06-42AE-4674-81BB-FDDE80204822}
{95C223E6-B5F1-4FD0-9376-41CDBC824445} = {B464EF06-42AE-4674-81BB-FDDE80204822} {95C223E6-B5F1-4FD0-9376-41CDBC824445} = {B464EF06-42AE-4674-81BB-FDDE80204822}
{A5EFD487-0140-4184-8C54-FFAEC2F85E35} = {FD28A504-431E-49B9-BB8C-DCA0E7019F66} {10757011-749D-4954-873B-AE38D8145472} = {69439FD1-C07D-4BF1-98DC-3CCFECE53A49}
{73EAAEDA-557B-48D5-A137-328934720FB4} = {FD28A504-431E-49B9-BB8C-DCA0E7019F66} {C4E1E9E5-0959-488E-8C6A-C327CC81BEFB} = {69439FD1-C07D-4BF1-98DC-3CCFECE53A49}
{94580219-CC8D-4FE5-A3BE-437B0B3481E1} = {A998CEC4-4B34-43DC-8457-F7761228BA67}
{4920E350-D496-4652-AE98-6C4208AEC1D8} = {69439FD1-C07D-4BF1-98DC-3CCFECE53A49}
{6CDF9411-B852-4EAC-822D-8F930675F17B} = {04A4762C-FAB9-4196-9AC8-0757F3E8AB79}
{264A5D09-126F-4760-A3F1-4B3B95C925AA} = {04A4762C-FAB9-4196-9AC8-0757F3E8AB79}
{1E997BEC-1642-4A5C-B252-852DA094E11E} = {04A4762C-FAB9-4196-9AC8-0757F3E8AB79}
EndGlobalSection EndGlobalSection
EndGlobal EndGlobal

View File

@ -1,11 +1,19 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="version.properties" /> <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), build.common.props))/build.common.props" />
<ItemGroup Label="ProjectConfigurations"> <ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|ARM64">
<Configuration>Debug</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|Win32"> <ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration> <Configuration>Debug</Configuration>
<Platform>Win32</Platform> <Platform>Win32</Platform>
</ProjectConfiguration> </ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM64">
<Configuration>Release</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32"> <ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration> <Configuration>Release</Configuration>
<Platform>Win32</Platform> <Platform>Win32</Platform>
@ -20,26 +28,44 @@
</ProjectConfiguration> </ProjectConfiguration>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="..\..\inc\fuse3\fuse.h" />
<ClInclude Include="..\..\inc\fuse3\fuse_common.h" />
<ClInclude Include="..\..\inc\fuse3\fuse_opt.h" />
<ClInclude Include="..\..\inc\fuse3\winfsp_fuse.h" />
<ClInclude Include="..\..\inc\fuse\fuse.h" /> <ClInclude Include="..\..\inc\fuse\fuse.h" />
<ClInclude Include="..\..\inc\fuse\fuse_common.h" /> <ClInclude Include="..\..\inc\fuse\fuse_common.h" />
<ClInclude Include="..\..\inc\fuse\fuse_opt.h" /> <ClInclude Include="..\..\inc\fuse\fuse_opt.h" />
<ClInclude Include="..\..\inc\fuse\winfsp_fuse.h" /> <ClInclude Include="..\..\inc\fuse\winfsp_fuse.h" />
<ClInclude Include="..\..\inc\winfsp\fsctl.h" /> <ClInclude Include="..\..\inc\winfsp\fsctl.h" />
<ClInclude Include="..\..\inc\winfsp\launch.h" />
<ClInclude Include="..\..\inc\winfsp\winfsp.h" /> <ClInclude Include="..\..\inc\winfsp\winfsp.h" />
<ClInclude Include="..\..\inc\winfsp\winfsp.hpp" />
<ClInclude Include="..\..\src\dll\fuse3\library.h" />
<ClInclude Include="..\..\src\dll\fuse\library.h" /> <ClInclude Include="..\..\src\dll\fuse\library.h" />
<ClInclude Include="..\..\src\dll\library.h" /> <ClInclude Include="..\..\src\dll\library.h" />
<ClInclude Include="..\..\src\shared\minimal.h" /> <ClInclude Include="..\..\src\shared\ku\config.h" />
<ClInclude Include="..\..\src\shared\ku\library.h" />
<ClInclude Include="..\..\src\shared\um\minimal.h" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="..\..\src\dll\debug.c" />
<ClCompile Include="..\..\src\dll\dirbuf.c" />
<ClCompile Include="..\..\src\dll\eventlog.c" /> <ClCompile Include="..\..\src\dll\eventlog.c" />
<ClCompile Include="..\..\src\dll\fuse3\fuse2to3.c" />
<ClCompile Include="..\..\src\dll\fuse3\fuse3.c" />
<ClCompile Include="..\..\src\dll\fuse3\fuse3_compat.c" />
<ClCompile Include="..\..\src\dll\fuse\fuse.c" /> <ClCompile Include="..\..\src\dll\fuse\fuse.c" />
<ClCompile Include="..\..\src\dll\fuse\fuse_compat.c" />
<ClCompile Include="..\..\src\dll\fuse\fuse_intf.c" /> <ClCompile Include="..\..\src\dll\fuse\fuse_intf.c" />
<ClCompile Include="..\..\src\dll\fuse\fuse_loop.c" />
<ClCompile Include="..\..\src\dll\fuse\fuse_main.c" /> <ClCompile Include="..\..\src\dll\fuse\fuse_main.c" />
<ClCompile Include="..\..\src\dll\fuse\fuse_opt.c" /> <ClCompile Include="..\..\src\dll\fuse\fuse_opt.c" />
<ClCompile Include="..\..\src\dll\launch.c" />
<ClCompile Include="..\..\src\dll\ldap.c" />
<ClCompile Include="..\..\src\dll\mount.c" />
<ClCompile Include="..\..\src\dll\np.c" /> <ClCompile Include="..\..\src\dll\np.c" />
<ClCompile Include="..\..\src\dll\posix.c" />
<ClCompile Include="..\..\src\dll\security.c" /> <ClCompile Include="..\..\src\dll\security.c" />
<ClCompile Include="..\..\src\dll\debug.c" /> <ClCompile Include="..\..\src\dll\debuglog.c" />
<ClCompile Include="..\..\src\dll\fsctl.c" /> <ClCompile Include="..\..\src\dll\fsctl.c" />
<ClCompile Include="..\..\src\dll\fsop.c" /> <ClCompile Include="..\..\src\dll\fsop.c" />
<ClCompile Include="..\..\src\dll\library.c" /> <ClCompile Include="..\..\src\dll\library.c" />
@ -47,74 +73,136 @@
<ClCompile Include="..\..\src\dll\ntstatus.c" /> <ClCompile Include="..\..\src\dll\ntstatus.c" />
<ClCompile Include="..\..\src\dll\path.c" /> <ClCompile Include="..\..\src\dll\path.c" />
<ClCompile Include="..\..\src\dll\service.c" /> <ClCompile Include="..\..\src\dll\service.c" />
<ClCompile Include="..\..\src\dll\sxs.c" />
<ClCompile Include="..\..\src\dll\util.c" /> <ClCompile Include="..\..\src\dll\util.c" />
<ClCompile Include="..\..\src\dll\wksid.c" />
<ClCompile Include="..\..\src\shared\ku\mountmgr.c" />
<ClCompile Include="..\..\src\shared\ku\posix.c" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<CustomBuild Include="..\..\src\dll\fuse\fuse.pc"> <CustomBuild Include="..\..\src\dll\fuse\fuse.pc.in">
<FileType>Document</FileType> <FileType>Document</FileType>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">echo arch=$(PlatformTarget) &gt;$(OutDir)fuse-$(PlatformTarget).pc <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">echo arch=$(MyProductFileArch) &gt;$(OutDir)fuse-$(MyProductFileArch).pc
copy /b $(OutDir)fuse-$(PlatformTarget).pc + %(FullPath) $(OutDir)fuse-$(PlatformTarget).pc &gt;nul</Command> copy /b $(OutDir)fuse-$(MyProductFileArch).pc + %(FullPath) $(OutDir)fuse-$(MyProductFileArch).pc &gt;nul</Command>
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Writing fuse-$(PlatformTarget).pc</Message> <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Writing fuse-$(MyProductFileArch).pc</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)fuse-$(PlatformTarget).pc</Outputs> <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)fuse-$(MyProductFileArch).pc</Outputs>
<LinkObjects Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkObjects> <LinkObjects Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkObjects>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">echo arch=$(PlatformTarget) &gt;$(OutDir)fuse-$(PlatformTarget).pc <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">echo arch=$(MyProductFileArch) &gt;$(OutDir)fuse-$(MyProductFileArch).pc
copy /b $(OutDir)fuse-$(PlatformTarget).pc + %(FullPath) $(OutDir)fuse-$(PlatformTarget).pc &gt;nul</Command> copy /b $(OutDir)fuse-$(MyProductFileArch).pc + %(FullPath) $(OutDir)fuse-$(MyProductFileArch).pc &gt;nul</Command>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Writing fuse-$(PlatformTarget).pc</Message> <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Writing fuse-$(MyProductFileArch).pc</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)fuse-$(PlatformTarget).pc</Outputs> <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)fuse-$(MyProductFileArch).pc</Outputs>
<LinkObjects Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkObjects> <LinkObjects Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkObjects>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">echo arch=$(PlatformTarget) &gt;$(OutDir)fuse-$(PlatformTarget).pc <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">echo arch=$(MyProductFileArch) &gt;$(OutDir)fuse-$(MyProductFileArch).pc
copy /b $(OutDir)fuse-$(PlatformTarget).pc + %(FullPath) $(OutDir)fuse-$(PlatformTarget).pc &gt;nul</Command> copy /b $(OutDir)fuse-$(MyProductFileArch).pc + %(FullPath) $(OutDir)fuse-$(MyProductFileArch).pc &gt;nul</Command>
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Writing fuse-$(PlatformTarget).pc</Message> <Command Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">echo arch=$(MyProductFileArch) &gt;$(OutDir)fuse-$(MyProductFileArch).pc
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)fuse-$(PlatformTarget).pc</Outputs> copy /b $(OutDir)fuse-$(MyProductFileArch).pc + %(FullPath) $(OutDir)fuse-$(MyProductFileArch).pc &gt;nul</Command>
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Writing fuse-$(MyProductFileArch).pc</Message>
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">Writing fuse-$(MyProductFileArch).pc</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)fuse-$(MyProductFileArch).pc</Outputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">$(OutDir)fuse-$(MyProductFileArch).pc</Outputs>
<LinkObjects Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkObjects> <LinkObjects Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkObjects>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">echo arch=$(PlatformTarget) &gt;$(OutDir)fuse-$(PlatformTarget).pc <LinkObjects Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">false</LinkObjects>
copy /b $(OutDir)fuse-$(PlatformTarget).pc + %(FullPath) $(OutDir)fuse-$(PlatformTarget).pc &gt;nul</Command> <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">echo arch=$(MyProductFileArch) &gt;$(OutDir)fuse-$(MyProductFileArch).pc
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Writing fuse-$(PlatformTarget).pc</Message> copy /b $(OutDir)fuse-$(MyProductFileArch).pc + %(FullPath) $(OutDir)fuse-$(MyProductFileArch).pc &gt;nul</Command>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)fuse-$(PlatformTarget).pc</Outputs> <Command Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">echo arch=$(MyProductFileArch) &gt;$(OutDir)fuse-$(MyProductFileArch).pc
copy /b $(OutDir)fuse-$(MyProductFileArch).pc + %(FullPath) $(OutDir)fuse-$(MyProductFileArch).pc &gt;nul</Command>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Writing fuse-$(MyProductFileArch).pc</Message>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">Writing fuse-$(MyProductFileArch).pc</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)fuse-$(MyProductFileArch).pc</Outputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">$(OutDir)fuse-$(MyProductFileArch).pc</Outputs>
<LinkObjects Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkObjects> <LinkObjects Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkObjects>
<LinkObjects Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">false</LinkObjects>
</CustomBuild>
<CustomBuild Include="..\..\src\dll\fuse3\fuse3.pc.in">
<FileType>Document</FileType>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">echo arch=$(MyProductFileArch) &gt;$(OutDir)fuse3-$(MyProductFileArch).pc
copy /b $(OutDir)fuse3-$(MyProductFileArch).pc + %(FullPath) $(OutDir)fuse3-$(MyProductFileArch).pc &gt;nul</Command>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">echo arch=$(MyProductFileArch) &gt;$(OutDir)fuse3-$(MyProductFileArch).pc
copy /b $(OutDir)fuse3-$(MyProductFileArch).pc + %(FullPath) $(OutDir)fuse3-$(MyProductFileArch).pc &gt;nul</Command>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">echo arch=$(MyProductFileArch) &gt;$(OutDir)fuse3-$(MyProductFileArch).pc
copy /b $(OutDir)fuse3-$(MyProductFileArch).pc + %(FullPath) $(OutDir)fuse3-$(MyProductFileArch).pc &gt;nul</Command>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">echo arch=$(MyProductFileArch) &gt;$(OutDir)fuse3-$(MyProductFileArch).pc
copy /b $(OutDir)fuse3-$(MyProductFileArch).pc + %(FullPath) $(OutDir)fuse3-$(MyProductFileArch).pc &gt;nul</Command>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">echo arch=$(MyProductFileArch) &gt;$(OutDir)fuse3-$(MyProductFileArch).pc
copy /b $(OutDir)fuse3-$(MyProductFileArch).pc + %(FullPath) $(OutDir)fuse3-$(MyProductFileArch).pc &gt;nul</Command>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">echo arch=$(MyProductFileArch) &gt;$(OutDir)fuse3-$(MyProductFileArch).pc
copy /b $(OutDir)fuse3-$(MyProductFileArch).pc + %(FullPath) $(OutDir)fuse3-$(MyProductFileArch).pc &gt;nul</Command>
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Writing fuse3-$(MyProductFileArch).pc</Message>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Writing fuse3-$(MyProductFileArch).pc</Message>
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Writing fuse3-$(MyProductFileArch).pc</Message>
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">Writing fuse3-$(MyProductFileArch).pc</Message>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Writing fuse3-$(MyProductFileArch).pc</Message>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">Writing fuse3-$(MyProductFileArch).pc</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)fuse3-$(MyProductFileArch).pc</Outputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)fuse3-$(MyProductFileArch).pc</Outputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)fuse3-$(MyProductFileArch).pc</Outputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">$(OutDir)fuse3-$(MyProductFileArch).pc</Outputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)fuse3-$(MyProductFileArch).pc</Outputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">$(OutDir)fuse3-$(MyProductFileArch).pc</Outputs>
<LinkObjects Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkObjects>
<LinkObjects Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkObjects>
<LinkObjects Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkObjects>
<LinkObjects Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">false</LinkObjects>
<LinkObjects Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkObjects>
<LinkObjects Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">false</LinkObjects>
</CustomBuild> </CustomBuild>
<None Include="..\..\src\dll\library.def" /> <None Include="..\..\src\dll\library.def" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ResourceCompile Include="..\..\src\dll\eventlog\eventlog.rc" /> <ResourceCompile Include="..\..\src\dll\eventlog\eventlog.rc" />
<ResourceCompile Include="..\..\src\dll\version.rc"> <ResourceCompile Include="..\..\src\dll\version.rc">
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_UNICODE;UNICODE;%(PreprocessorDefinitions);MyProductName=$(MyProductName);MyDescription=$(MyDescription);MyCompanyName=$(MyCompanyName);MyCopyright=$(MyCopyright);MyVersion=$(MyVersion);MyVersionWithCommas=$(MyVersionWithCommas)</PreprocessorDefinitions> <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_UNICODE;UNICODE;%(PreprocessorDefinitions);MyProductName=$(MyProductName);MyDescription=$(MyDescription);MyCompanyName=$(MyCompanyName);MyCopyright=$(MyCopyright);MyVersion=$(MyVersion);MyVersionWithCommas=$(MyVersionWithCommas)</PreprocessorDefinitions> <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">_UNICODE;UNICODE;%(PreprocessorDefinitions);MyProductName=$(MyProductName);MyDescription=$(MyDescription);MyCompanyName=$(MyCompanyName);MyCopyright=$(MyCopyright);MyVersion=$(MyVersion);MyVersionWithCommas=$(MyVersionWithCommas)</PreprocessorDefinitions> <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">_UNICODE;UNICODE;%(PreprocessorDefinitions);MyProductName=$(MyProductName);MyDescription=$(MyDescription);MyCompanyName=$(MyCompanyName);MyCopyright=$(MyCopyright);MyVersion=$(MyVersion);MyVersionWithCommas=$(MyVersionWithCommas)</PreprocessorDefinitions> <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ResourceCompile> </ResourceCompile>
</ItemGroup> </ItemGroup>
<PropertyGroup Label="Globals"> <PropertyGroup Label="Globals">
<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>8.1</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" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType> <ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries> <UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset> <PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType> <ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset> <PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType> <ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries> <UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset> <PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType> <ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset> <PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
</PropertyGroup> </PropertyGroup>
@ -132,33 +220,51 @@ copy /b $(OutDir)fuse-$(PlatformTarget).pc + %(FullPath) $(OutDir)fuse-$(Platfor
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup> </ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup> </ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" /> <PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental> <LinkIncremental>true</LinkIncremental>
<TargetName>$(MyProductFileName)-$(MyProductFileArch)</TargetName>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir> <OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\</IntDir> <IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
<TargetName>$(SolutionName)-$(PlatformTarget)</TargetName>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental> <LinkIncremental>true</LinkIncremental>
<TargetName>$(MyProductFileName)-$(MyProductFileArch)</TargetName>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir> <OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\</IntDir> <IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
<TargetName>$(SolutionName)-$(PlatformTarget)</TargetName> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
<LinkIncremental>true</LinkIncremental>
<TargetName>$(MyProductFileName)-$(MyProductFileArch)</TargetName>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental> <LinkIncremental>false</LinkIncremental>
<TargetName>$(MyProductFileName)-$(MyProductFileArch)</TargetName>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir> <OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\</IntDir> <IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
<TargetName>$(SolutionName)-$(PlatformTarget)</TargetName>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental> <LinkIncremental>false</LinkIncremental>
<TargetName>$(MyProductFileName)-$(MyProductFileArch)</TargetName>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir> <OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\</IntDir> <IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
<TargetName>$(SolutionName)-$(PlatformTarget)</TargetName> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
<LinkIncremental>false</LinkIncremental>
<TargetName>$(MyProductFileName)-$(MyProductFileArch)</TargetName>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
</PropertyGroup> </PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile> <ClCompile>
@ -173,16 +279,18 @@ copy /b $(OutDir)fuse-$(PlatformTarget).pc + %(FullPath) $(OutDir)fuse-$(Platfor
<RuntimeLibrary>MultiThreaded</RuntimeLibrary> <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<BasicRuntimeChecks>Default</BasicRuntimeChecks> <BasicRuntimeChecks>Default</BasicRuntimeChecks>
<BufferSecurityCheck>false</BufferSecurityCheck> <BufferSecurityCheck>false</BufferSecurityCheck>
<AdditionalOptions>
</AdditionalOptions>
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Windows</SubSystem> <SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<ProgramDatabaseFile>$(OutDir)$(TargetFileName).pdb</ProgramDatabaseFile> <ProgramDatabaseFile>$(OutDir)$(TargetFileName).pdb</ProgramDatabaseFile>
<GenerateMapFile>true</GenerateMapFile> <GenerateMapFile>true</GenerateMapFile>
<MapFileName>$(OutDir)$(TargetFileName).map</MapFileName> <MapFileName>$(OutDir)$(TargetFileName).map</MapFileName>
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries> <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
<ModuleDefinitionFile>..\..\src\dll\library.def</ModuleDefinitionFile> <ModuleDefinitionFile>..\..\src\dll\library.def</ModuleDefinitionFile>
<AdditionalDependencies>%(AdditionalDependencies);version.lib</AdditionalDependencies> <AdditionalDependencies>%(AdditionalDependencies);credui.lib;netapi32.lib;rpcrt4.lib;secur32.lib;shlwapi.lib;version.lib;wldap32.lib</AdditionalDependencies>
<StripPrivateSymbols>$(OutDir)$(TargetFileName).public.pdb</StripPrivateSymbols>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
@ -198,16 +306,45 @@ copy /b $(OutDir)fuse-$(PlatformTarget).pc + %(FullPath) $(OutDir)fuse-$(Platfor
<RuntimeLibrary>MultiThreaded</RuntimeLibrary> <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<BasicRuntimeChecks>Default</BasicRuntimeChecks> <BasicRuntimeChecks>Default</BasicRuntimeChecks>
<BufferSecurityCheck>false</BufferSecurityCheck> <BufferSecurityCheck>false</BufferSecurityCheck>
<AdditionalOptions>
</AdditionalOptions>
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Windows</SubSystem> <SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<ProgramDatabaseFile>$(OutDir)$(TargetFileName).pdb</ProgramDatabaseFile> <ProgramDatabaseFile>$(OutDir)$(TargetFileName).pdb</ProgramDatabaseFile>
<GenerateMapFile>true</GenerateMapFile> <GenerateMapFile>true</GenerateMapFile>
<MapFileName>$(OutDir)$(TargetFileName).map</MapFileName> <MapFileName>$(OutDir)$(TargetFileName).map</MapFileName>
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries> <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
<ModuleDefinitionFile>..\..\src\dll\library.def</ModuleDefinitionFile> <ModuleDefinitionFile>..\..\src\dll\library.def</ModuleDefinitionFile>
<AdditionalDependencies>%(AdditionalDependencies);version.lib</AdditionalDependencies> <AdditionalDependencies>%(AdditionalDependencies);credui.lib;netapi32.lib;rpcrt4.lib;secur32.lib;shlwapi.lib;version.lib;wldap32.lib</AdditionalDependencies>
<StripPrivateSymbols>$(OutDir)$(TargetFileName).public.pdb</StripPrivateSymbols>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>_DEBUG;_WINDOWS;_USRDLL;WINFSPDLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>
</SDLCheck>
<AdditionalIncludeDirectories>..\..\src;..\..\inc</AdditionalIncludeDirectories>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<BasicRuntimeChecks>Default</BasicRuntimeChecks>
<BufferSecurityCheck>false</BufferSecurityCheck>
<AdditionalOptions>
</AdditionalOptions>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<ProgramDatabaseFile>$(OutDir)$(TargetFileName).pdb</ProgramDatabaseFile>
<GenerateMapFile>true</GenerateMapFile>
<MapFileName>$(OutDir)$(TargetFileName).map</MapFileName>
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
<ModuleDefinitionFile>..\..\src\dll\library.def</ModuleDefinitionFile>
<AdditionalDependencies>%(AdditionalDependencies);credui.lib;netapi32.lib;rpcrt4.lib;secur32.lib;shlwapi.lib;version.lib;wldap32.lib</AdditionalDependencies>
<StripPrivateSymbols>$(OutDir)$(TargetFileName).public.pdb</StripPrivateSymbols>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@ -224,10 +361,11 @@ copy /b $(OutDir)fuse-$(PlatformTarget).pc + %(FullPath) $(OutDir)fuse-$(Platfor
<AdditionalIncludeDirectories>..\..\src;..\..\inc</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>..\..\src;..\..\inc</AdditionalIncludeDirectories>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary> <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<BufferSecurityCheck>false</BufferSecurityCheck> <BufferSecurityCheck>false</BufferSecurityCheck>
<AdditionalOptions>
</AdditionalOptions>
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Windows</SubSystem> <SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding> <EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences> <OptimizeReferences>true</OptimizeReferences>
<ProgramDatabaseFile>$(OutDir)$(TargetFileName).pdb</ProgramDatabaseFile> <ProgramDatabaseFile>$(OutDir)$(TargetFileName).pdb</ProgramDatabaseFile>
@ -235,7 +373,9 @@ copy /b $(OutDir)fuse-$(PlatformTarget).pc + %(FullPath) $(OutDir)fuse-$(Platfor
<MapFileName>$(OutDir)$(TargetFileName).map</MapFileName> <MapFileName>$(OutDir)$(TargetFileName).map</MapFileName>
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries> <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
<ModuleDefinitionFile>..\..\src\dll\library.def</ModuleDefinitionFile> <ModuleDefinitionFile>..\..\src\dll\library.def</ModuleDefinitionFile>
<AdditionalDependencies>%(AdditionalDependencies);version.lib</AdditionalDependencies> <AdditionalDependencies>%(AdditionalDependencies);credui.lib;netapi32.lib;rpcrt4.lib;secur32.lib;shlwapi.lib;version.lib;wldap32.lib</AdditionalDependencies>
<StripPrivateSymbols>$(OutDir)$(TargetFileName).public.pdb</StripPrivateSymbols>
<AdditionalOptions>/PDBALTPATH:$(TargetFileName).pdb %(AdditionalOptions)</AdditionalOptions>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
@ -252,10 +392,11 @@ copy /b $(OutDir)fuse-$(PlatformTarget).pc + %(FullPath) $(OutDir)fuse-$(Platfor
<AdditionalIncludeDirectories>..\..\src;..\..\inc</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>..\..\src;..\..\inc</AdditionalIncludeDirectories>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary> <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<BufferSecurityCheck>false</BufferSecurityCheck> <BufferSecurityCheck>false</BufferSecurityCheck>
<AdditionalOptions>
</AdditionalOptions>
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Windows</SubSystem> <SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding> <EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences> <OptimizeReferences>true</OptimizeReferences>
<ProgramDatabaseFile>$(OutDir)$(TargetFileName).pdb</ProgramDatabaseFile> <ProgramDatabaseFile>$(OutDir)$(TargetFileName).pdb</ProgramDatabaseFile>
@ -263,7 +404,40 @@ copy /b $(OutDir)fuse-$(PlatformTarget).pc + %(FullPath) $(OutDir)fuse-$(Platfor
<MapFileName>$(OutDir)$(TargetFileName).map</MapFileName> <MapFileName>$(OutDir)$(TargetFileName).map</MapFileName>
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries> <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
<ModuleDefinitionFile>..\..\src\dll\library.def</ModuleDefinitionFile> <ModuleDefinitionFile>..\..\src\dll\library.def</ModuleDefinitionFile>
<AdditionalDependencies>%(AdditionalDependencies);version.lib</AdditionalDependencies> <AdditionalDependencies>%(AdditionalDependencies);credui.lib;netapi32.lib;rpcrt4.lib;secur32.lib;shlwapi.lib;version.lib;wldap32.lib</AdditionalDependencies>
<StripPrivateSymbols>$(OutDir)$(TargetFileName).public.pdb</StripPrivateSymbols>
<AdditionalOptions>/PDBALTPATH:$(TargetFileName).pdb %(AdditionalOptions)</AdditionalOptions>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>NDEBUG;_WINDOWS;_USRDLL;WINFSPDLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>
</SDLCheck>
<AdditionalIncludeDirectories>..\..\src;..\..\inc</AdditionalIncludeDirectories>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<BufferSecurityCheck>false</BufferSecurityCheck>
<AdditionalOptions>
</AdditionalOptions>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<ProgramDatabaseFile>$(OutDir)$(TargetFileName).pdb</ProgramDatabaseFile>
<GenerateMapFile>true</GenerateMapFile>
<MapFileName>$(OutDir)$(TargetFileName).map</MapFileName>
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
<ModuleDefinitionFile>..\..\src\dll\library.def</ModuleDefinitionFile>
<AdditionalDependencies>%(AdditionalDependencies);credui.lib;netapi32.lib;rpcrt4.lib;secur32.lib;shlwapi.lib;version.lib;wldap32.lib</AdditionalDependencies>
<StripPrivateSymbols>$(OutDir)$(TargetFileName).public.pdb</StripPrivateSymbols>
<AdditionalOptions>/PDBALTPATH:$(TargetFileName).pdb %(AdditionalOptions)</AdditionalOptions>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

View File

@ -12,15 +12,27 @@
<Filter Include="Include\winfsp"> <Filter Include="Include\winfsp">
<UniqueIdentifier>{1d6501f4-cebd-4a00-a774-deb782b59fb5}</UniqueIdentifier> <UniqueIdentifier>{1d6501f4-cebd-4a00-a774-deb782b59fb5}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="Include\shared">
<UniqueIdentifier>{c7b83307-0aa0-4593-b2d4-26ff2f1edfc6}</UniqueIdentifier>
</Filter>
<Filter Include="Include\fuse"> <Filter Include="Include\fuse">
<UniqueIdentifier>{0e7ab1b1-bfca-4439-accb-45a909be9cad}</UniqueIdentifier> <UniqueIdentifier>{0e7ab1b1-bfca-4439-accb-45a909be9cad}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="Source\fuse"> <Filter Include="Source\fuse">
<UniqueIdentifier>{518cce17-85cd-489c-b4be-920a84c1d73c}</UniqueIdentifier> <UniqueIdentifier>{518cce17-85cd-489c-b4be-920a84c1d73c}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="Include\fuse3">
<UniqueIdentifier>{12afd2f1-f5ec-4008-b6ef-89cc626019ea}</UniqueIdentifier>
</Filter>
<Filter Include="Source\fuse3">
<UniqueIdentifier>{96091a7b-3923-4a74-9491-3ee230c688f9}</UniqueIdentifier>
</Filter>
<Filter Include="Source\shared">
<UniqueIdentifier>{a099cca5-e40c-4f99-baff-b5399dac5406}</UniqueIdentifier>
</Filter>
<Filter Include="Source\shared\um">
<UniqueIdentifier>{c2e11b62-74a0-41af-9f5b-0846fe81563c}</UniqueIdentifier>
</Filter>
<Filter Include="Source\shared\ku">
<UniqueIdentifier>{7963f853-656a-4fd7-b8df-e586c3fe3dab}</UniqueIdentifier>
</Filter>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="..\..\inc\winfsp\fsctl.h"> <ClInclude Include="..\..\inc\winfsp\fsctl.h">
@ -32,9 +44,6 @@
<ClInclude Include="..\..\src\dll\library.h"> <ClInclude Include="..\..\src\dll\library.h">
<Filter>Source</Filter> <Filter>Source</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\..\src\shared\minimal.h">
<Filter>Include\shared</Filter>
</ClInclude>
<ClInclude Include="..\..\inc\fuse\fuse.h"> <ClInclude Include="..\..\inc\fuse\fuse.h">
<Filter>Include\fuse</Filter> <Filter>Include\fuse</Filter>
</ClInclude> </ClInclude>
@ -50,12 +59,42 @@
<ClInclude Include="..\..\src\dll\fuse\library.h"> <ClInclude Include="..\..\src\dll\fuse\library.h">
<Filter>Source\fuse</Filter> <Filter>Source\fuse</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\..\inc\winfsp\winfsp.hpp">
<Filter>Include\winfsp</Filter>
</ClInclude>
<ClInclude Include="..\..\inc\winfsp\launch.h">
<Filter>Include\winfsp</Filter>
</ClInclude>
<ClInclude Include="..\..\inc\fuse3\fuse.h">
<Filter>Include\fuse3</Filter>
</ClInclude>
<ClInclude Include="..\..\inc\fuse3\fuse_common.h">
<Filter>Include\fuse3</Filter>
</ClInclude>
<ClInclude Include="..\..\inc\fuse3\fuse_opt.h">
<Filter>Include\fuse3</Filter>
</ClInclude>
<ClInclude Include="..\..\inc\fuse3\winfsp_fuse.h">
<Filter>Include\fuse3</Filter>
</ClInclude>
<ClInclude Include="..\..\src\dll\fuse3\library.h">
<Filter>Source\fuse3</Filter>
</ClInclude>
<ClInclude Include="..\..\src\shared\um\minimal.h">
<Filter>Source\shared\um</Filter>
</ClInclude>
<ClInclude Include="..\..\src\shared\ku\library.h">
<Filter>Source\shared\ku</Filter>
</ClInclude>
<ClInclude Include="..\..\src\shared\ku\config.h">
<Filter>Source\shared\ku</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="..\..\src\dll\library.c"> <ClCompile Include="..\..\src\dll\library.c">
<Filter>Source</Filter> <Filter>Source</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\src\dll\debug.c"> <ClCompile Include="..\..\src\dll\debuglog.c">
<Filter>Source</Filter> <Filter>Source</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\src\dll\ntstatus.c"> <ClCompile Include="..\..\src\dll\ntstatus.c">
@ -97,12 +136,51 @@
<ClCompile Include="..\..\src\dll\fuse\fuse_main.c"> <ClCompile Include="..\..\src\dll\fuse\fuse_main.c">
<Filter>Source\fuse</Filter> <Filter>Source\fuse</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\src\dll\posix.c">
<Filter>Source</Filter>
</ClCompile>
<ClCompile Include="..\..\src\dll\fuse\fuse_intf.c"> <ClCompile Include="..\..\src\dll\fuse\fuse_intf.c">
<Filter>Source\fuse</Filter> <Filter>Source\fuse</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\src\dll\dirbuf.c">
<Filter>Source</Filter>
</ClCompile>
<ClCompile Include="..\..\src\dll\fuse\fuse_compat.c">
<Filter>Source\fuse</Filter>
</ClCompile>
<ClCompile Include="..\..\src\dll\wksid.c">
<Filter>Source</Filter>
</ClCompile>
<ClCompile Include="..\..\src\dll\launch.c">
<Filter>Source</Filter>
</ClCompile>
<ClCompile Include="..\..\src\dll\fuse3\fuse3.c">
<Filter>Source\fuse3</Filter>
</ClCompile>
<ClCompile Include="..\..\src\dll\fuse3\fuse2to3.c">
<Filter>Source\fuse3</Filter>
</ClCompile>
<ClCompile Include="..\..\src\dll\fuse\fuse_loop.c">
<Filter>Source\fuse</Filter>
</ClCompile>
<ClCompile Include="..\..\src\dll\fuse3\fuse3_compat.c">
<Filter>Source\fuse3</Filter>
</ClCompile>
<ClCompile Include="..\..\src\dll\mount.c">
<Filter>Source</Filter>
</ClCompile>
<ClCompile Include="..\..\src\shared\ku\posix.c">
<Filter>Source\shared\ku</Filter>
</ClCompile>
<ClCompile Include="..\..\src\dll\ldap.c">
<Filter>Source</Filter>
</ClCompile>
<ClCompile Include="..\..\src\dll\debug.c">
<Filter>Source</Filter>
</ClCompile>
<ClCompile Include="..\..\src\shared\ku\mountmgr.c">
<Filter>Source\shared\ku</Filter>
</ClCompile>
<ClCompile Include="..\..\src\dll\sxs.c">
<Filter>Source</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="..\..\src\dll\library.def"> <None Include="..\..\src\dll\library.def">
@ -118,6 +196,11 @@
</ResourceCompile> </ResourceCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<CustomBuild Include="..\..\src\dll\fuse\fuse.pc" /> <CustomBuild Include="..\..\src\dll\fuse\fuse.pc.in">
<Filter>Source\fuse</Filter>
</CustomBuild>
<CustomBuild Include="..\..\src\dll\fuse3\fuse3.pc.in">
<Filter>Source\fuse3</Filter>
</CustomBuild>
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -1,11 +1,19 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="version.properties" /> <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), build.common.props))/build.common.props" />
<ItemGroup Label="ProjectConfigurations"> <ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|ARM64">
<Configuration>Debug</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|Win32"> <ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration> <Configuration>Debug</Configuration>
<Platform>Win32</Platform> <Platform>Win32</Platform>
</ProjectConfiguration> </ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM64">
<Configuration>Release</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32"> <ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration> <Configuration>Release</Configuration>
<Platform>Win32</Platform> <Platform>Win32</Platform>
@ -34,6 +42,7 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<TargetVersion>Windows10</TargetVersion> <TargetVersion>Windows10</TargetVersion>
<UseDebugLibraries>true</UseDebugLibraries> <UseDebugLibraries>true</UseDebugLibraries>
<KernelBufferOverflowLib>$(DDK_LIB_PATH)\BufferOverflowK.lib</KernelBufferOverflowLib>
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset> <PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
<ConfigurationType>Driver</ConfigurationType> <ConfigurationType>Driver</ConfigurationType>
<DriverType>WDM</DriverType> <DriverType>WDM</DriverType>
@ -41,6 +50,7 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<TargetVersion>Windows10</TargetVersion> <TargetVersion>Windows10</TargetVersion>
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
<KernelBufferOverflowLib>$(DDK_LIB_PATH)\BufferOverflowK.lib</KernelBufferOverflowLib>
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset> <PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
<ConfigurationType>Driver</ConfigurationType> <ConfigurationType>Driver</ConfigurationType>
<DriverType>WDM</DriverType> <DriverType>WDM</DriverType>
@ -48,6 +58,15 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<TargetVersion>Windows10</TargetVersion> <TargetVersion>Windows10</TargetVersion>
<UseDebugLibraries>true</UseDebugLibraries> <UseDebugLibraries>true</UseDebugLibraries>
<KernelBufferOverflowLib>$(DDK_LIB_PATH)\BufferOverflowK.lib</KernelBufferOverflowLib>
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
<ConfigurationType>Driver</ConfigurationType>
<DriverType>WDM</DriverType>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration">
<TargetVersion>Windows10</TargetVersion>
<UseDebugLibraries>true</UseDebugLibraries>
<KernelBufferOverflowLib>$(DDK_LIB_PATH)\BufferOverflowFastFailK.lib</KernelBufferOverflowLib>
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset> <PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
<ConfigurationType>Driver</ConfigurationType> <ConfigurationType>Driver</ConfigurationType>
<DriverType>WDM</DriverType> <DriverType>WDM</DriverType>
@ -55,6 +74,15 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<TargetVersion>Windows10</TargetVersion> <TargetVersion>Windows10</TargetVersion>
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
<KernelBufferOverflowLib>$(DDK_LIB_PATH)\BufferOverflowK.lib</KernelBufferOverflowLib>
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
<ConfigurationType>Driver</ConfigurationType>
<DriverType>WDM</DriverType>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration">
<TargetVersion>Windows10</TargetVersion>
<UseDebugLibraries>false</UseDebugLibraries>
<KernelBufferOverflowLib>$(DDK_LIB_PATH)\BufferOverflowFastFailK.lib</KernelBufferOverflowLib>
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset> <PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
<ConfigurationType>Driver</ConfigurationType> <ConfigurationType>Driver</ConfigurationType>
<DriverType>WDM</DriverType> <DriverType>WDM</DriverType>
@ -69,84 +97,140 @@
<PropertyGroup /> <PropertyGroup />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor> <DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir> <TargetName>$(MyProductFileName)-$(MyProductFileArch)</TargetName>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\</IntDir>
<TargetName>$(SolutionName)-$(PlatformTarget)</TargetName>
<EnableInf2cat>false</EnableInf2cat> <EnableInf2cat>false</EnableInf2cat>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor> <DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir> <TargetName>$(MyProductFileName)-$(MyProductFileArch)</TargetName>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\</IntDir>
<TargetName>$(SolutionName)-$(PlatformTarget)</TargetName>
<EnableInf2cat>false</EnableInf2cat> <EnableInf2cat>false</EnableInf2cat>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor> <DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir> <TargetName>$(MyProductFileName)-$(MyProductFileArch)</TargetName>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\</IntDir>
<TargetName>$(SolutionName)-$(PlatformTarget)</TargetName>
<EnableInf2cat>false</EnableInf2cat> <EnableInf2cat>false</EnableInf2cat>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
<DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
<TargetName>$(MyProductFileName)-$(MyProductFileArch)</TargetName>
<EnableInf2cat>false</EnableInf2cat>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor> <DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir> <TargetName>$(MyProductFileName)-$(MyProductFileArch)</TargetName>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\</IntDir>
<TargetName>$(SolutionName)-$(PlatformTarget)</TargetName>
<EnableInf2cat>false</EnableInf2cat> <EnableInf2cat>false</EnableInf2cat>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
<DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
<TargetName>$(MyProductFileName)-$(MyProductFileArch)</TargetName>
<EnableInf2cat>false</EnableInf2cat>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\</IntDir>
</PropertyGroup> </PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile> <ClCompile>
<AdditionalIncludeDirectories>..\..\src;..\..\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>..\..\src;..\..\opt\fsext\inc;..\..\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions> _X86_=1;i386=1;STD_CALL;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions> _X86_=1;i386=1;STD_CALL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile> </ClCompile>
<Link> <Link>
<AdditionalDependencies>wdmsec.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>cng.lib;wdmsec.lib;%(AdditionalDependencies)</AdditionalDependencies>
<GenerateMapFile>true</GenerateMapFile> <GenerateMapFile>true</GenerateMapFile>
<ProgramDatabaseFile>$(OutDir)$(TargetFileName).pdb</ProgramDatabaseFile> <ProgramDatabaseFile>$(OutDir)$(TargetFileName).pdb</ProgramDatabaseFile>
<MapFileName>$(OutDir)$(TargetFileName).map</MapFileName> <MapFileName>$(OutDir)$(TargetFileName).map</MapFileName>
<StripPrivateSymbols>$(OutDir)$(TargetFileName).public.pdb</StripPrivateSymbols>
<ImportLibrary>$(OutDir)$(TargetName)$(TargetExt).lib</ImportLibrary>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile> <ClCompile>
<AdditionalIncludeDirectories>..\..\src;..\..\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>..\..\src;..\..\opt\fsext\inc;..\..\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions> _X86_=1;i386=1;STD_CALL;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions> _X86_=1;i386=1;STD_CALL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile> </ClCompile>
<Link> <Link>
<AdditionalDependencies>wdmsec.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>cng.lib;wdmsec.lib;%(AdditionalDependencies)</AdditionalDependencies>
<GenerateMapFile>true</GenerateMapFile> <GenerateMapFile>true</GenerateMapFile>
<ProgramDatabaseFile>$(OutDir)$(TargetFileName).pdb</ProgramDatabaseFile> <ProgramDatabaseFile>$(OutDir)$(TargetFileName).pdb</ProgramDatabaseFile>
<MapFileName>$(OutDir)$(TargetFileName).map</MapFileName> <MapFileName>$(OutDir)$(TargetFileName).map</MapFileName>
<StripPrivateSymbols>$(OutDir)$(TargetFileName).public.pdb</StripPrivateSymbols>
<AdditionalOptions>/PDBALTPATH:$(TargetFileName).pdb %(AdditionalOptions)</AdditionalOptions>
<ImportLibrary>$(OutDir)$(TargetName)$(TargetExt).lib</ImportLibrary>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile> <ClCompile>
<AdditionalIncludeDirectories>..\..\src;..\..\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>..\..\src;..\..\opt\fsext\inc;..\..\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions> _WIN64;_AMD64_;AMD64;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions> _WIN64;_AMD64_;AMD64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile> </ClCompile>
<Link> <Link>
<AdditionalDependencies>wdmsec.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>cng.lib;wdmsec.lib;%(AdditionalDependencies)</AdditionalDependencies>
<GenerateMapFile>true</GenerateMapFile> <GenerateMapFile>true</GenerateMapFile>
<ProgramDatabaseFile>$(OutDir)$(TargetFileName).pdb</ProgramDatabaseFile> <ProgramDatabaseFile>$(OutDir)$(TargetFileName).pdb</ProgramDatabaseFile>
<MapFileName>$(OutDir)$(TargetFileName).map</MapFileName> <MapFileName>$(OutDir)$(TargetFileName).map</MapFileName>
<StripPrivateSymbols>$(OutDir)$(TargetFileName).public.pdb</StripPrivateSymbols>
<ImportLibrary>$(OutDir)$(TargetName)$(TargetExt).lib</ImportLibrary>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
<ClCompile>
<AdditionalIncludeDirectories>..\..\src;..\..\opt\fsext\inc;..\..\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions> _WIN64;_ARM64_;ARM64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<AdditionalDependencies>cng.lib;wdmsec.lib;%(AdditionalDependencies)</AdditionalDependencies>
<GenerateMapFile>true</GenerateMapFile>
<ProgramDatabaseFile>$(OutDir)$(TargetFileName).pdb</ProgramDatabaseFile>
<MapFileName>$(OutDir)$(TargetFileName).map</MapFileName>
<StripPrivateSymbols>$(OutDir)$(TargetFileName).public.pdb</StripPrivateSymbols>
<ImportLibrary>$(OutDir)$(TargetName)$(TargetExt).lib</ImportLibrary>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile> <ClCompile>
<AdditionalIncludeDirectories>..\..\src;..\..\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>..\..\src;..\..\opt\fsext\inc;..\..\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions> _WIN64;_AMD64_;AMD64;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions> _WIN64;_AMD64_;AMD64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile> </ClCompile>
<Link> <Link>
<AdditionalDependencies>wdmsec.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>cng.lib;wdmsec.lib;%(AdditionalDependencies)</AdditionalDependencies>
<GenerateMapFile>true</GenerateMapFile> <GenerateMapFile>true</GenerateMapFile>
<ProgramDatabaseFile>$(OutDir)$(TargetFileName).pdb</ProgramDatabaseFile> <ProgramDatabaseFile>$(OutDir)$(TargetFileName).pdb</ProgramDatabaseFile>
<MapFileName>$(OutDir)$(TargetFileName).map</MapFileName> <MapFileName>$(OutDir)$(TargetFileName).map</MapFileName>
<StripPrivateSymbols>$(OutDir)$(TargetFileName).public.pdb</StripPrivateSymbols>
<AdditionalOptions>/PDBALTPATH:$(TargetFileName).pdb %(AdditionalOptions)</AdditionalOptions>
<ImportLibrary>$(OutDir)$(TargetName)$(TargetExt).lib</ImportLibrary>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
<ClCompile>
<AdditionalIncludeDirectories>..\..\src;..\..\opt\fsext\inc;..\..\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions> _WIN64;_ARM64_;ARM64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<AdditionalDependencies>cng.lib;wdmsec.lib;%(AdditionalDependencies)</AdditionalDependencies>
<GenerateMapFile>true</GenerateMapFile>
<ProgramDatabaseFile>$(OutDir)$(TargetFileName).pdb</ProgramDatabaseFile>
<MapFileName>$(OutDir)$(TargetFileName).map</MapFileName>
<StripPrivateSymbols>$(OutDir)$(TargetFileName).public.pdb</StripPrivateSymbols>
<AdditionalOptions>/PDBALTPATH:$(TargetFileName).pdb %(AdditionalOptions)</AdditionalOptions>
<ImportLibrary>$(OutDir)$(TargetName)$(TargetExt).lib</ImportLibrary>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemGroup> <ItemGroup>
<FilesToPackage Include="$(TargetPath)" /> <FilesToPackage Include="$(TargetPath)" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="..\..\src\shared\ku\mountmgr.c" />
<ClCompile Include="..\..\src\shared\ku\posix.c" />
<ClCompile Include="..\..\src\shared\ku\uuid5.c" />
<ClCompile Include="..\..\src\sys\cleanup.c" /> <ClCompile Include="..\..\src\sys\cleanup.c" />
<ClCompile Include="..\..\src\sys\close.c" /> <ClCompile Include="..\..\src\sys\close.c" />
<ClCompile Include="..\..\src\sys\create.c" /> <ClCompile Include="..\..\src\sys\create.c" />
@ -161,13 +245,23 @@
<ClCompile Include="..\..\src\sys\fileinfo.c" /> <ClCompile Include="..\..\src\sys\fileinfo.c" />
<ClCompile Include="..\..\src\sys\flush.c" /> <ClCompile Include="..\..\src\sys\flush.c" />
<ClCompile Include="..\..\src\sys\fsctl.c" /> <ClCompile Include="..\..\src\sys\fsctl.c" />
<ClCompile Include="..\..\src\sys\fsext.c" />
<ClCompile Include="..\..\src\sys\iop.c" /> <ClCompile Include="..\..\src\sys\iop.c" />
<ClCompile Include="..\..\src\sys\ioq.c" /> <ClCompile Include="..\..\src\sys\ioq.c" />
<ClCompile Include="..\..\src\sys\devtimer.c" />
<ClCompile Include="..\..\src\sys\lockctl.c" /> <ClCompile Include="..\..\src\sys\lockctl.c" />
<ClCompile Include="..\..\src\sys\meta.c" /> <ClCompile Include="..\..\src\sys\meta.c" />
<ClCompile Include="..\..\src\sys\mountdev.c" />
<ClCompile Include="..\..\src\sys\mup.c" />
<ClCompile Include="..\..\src\sys\name.c" />
<ClCompile Include="..\..\src\sys\psbuffer.c" />
<ClCompile Include="..\..\src\sys\read.c" /> <ClCompile Include="..\..\src\sys\read.c" />
<ClCompile Include="..\..\src\sys\security.c" /> <ClCompile Include="..\..\src\sys\security.c" />
<ClCompile Include="..\..\src\sys\shutdown.c" /> <ClCompile Include="..\..\src\sys\shutdown.c" />
<ClCompile Include="..\..\src\sys\silo.c" />
<ClCompile Include="..\..\src\sys\statistics.c" />
<ClCompile Include="..\..\src\sys\sxs.c" />
<ClCompile Include="..\..\src\sys\trace.c" />
<ClCompile Include="..\..\src\sys\util.c" /> <ClCompile Include="..\..\src\sys\util.c" />
<ClCompile Include="..\..\src\sys\volinfo.c" /> <ClCompile Include="..\..\src\sys\volinfo.c" />
<ClCompile Include="..\..\src\sys\volume.c" /> <ClCompile Include="..\..\src\sys\volume.c" />
@ -176,16 +270,134 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="..\..\inc\winfsp\fsctl.h" /> <ClInclude Include="..\..\inc\winfsp\fsctl.h" />
<ClInclude Include="..\..\opt\fsext\inc\winfsp\fsext.h" />
<ClInclude Include="..\..\src\shared\ku\config.h" />
<ClInclude Include="..\..\src\shared\ku\library.h" />
<ClInclude Include="..\..\src\sys\driver.h" /> <ClInclude Include="..\..\src\sys\driver.h" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ResourceCompile Include="..\..\src\sys\version.rc"> <ResourceCompile Include="..\..\src\sys\version.rc">
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_X86_=1;i386=1;STD_CALL;%(PreprocessorDefinitions);MyProductName=$(MyProductName);MyDescription=$(MyDescription);MyCompanyName=$(MyCompanyName);MyCopyright=$(MyCopyright);MyVersion=$(MyVersion);MyVersionWithCommas=$(MyVersionWithCommas)</PreprocessorDefinitions> <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_X86_=1;i386=1;STD_CALL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_X86_=1;i386=1;STD_CALL;%(PreprocessorDefinitions);MyProductName=$(MyProductName);MyDescription=$(MyDescription);MyCompanyName=$(MyCompanyName);MyCopyright=$(MyCopyright);MyVersion=$(MyVersion);MyVersionWithCommas=$(MyVersionWithCommas)</PreprocessorDefinitions> <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_X86_=1;i386=1;STD_CALL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">_WIN64;_AMD64_=1;AMD64;%(PreprocessorDefinitions);MyProductName=$(MyProductName);MyDescription=$(MyDescription);MyCompanyName=$(MyCompanyName);MyCopyright=$(MyCopyright);MyVersion=$(MyVersion);MyVersionWithCommas=$(MyVersionWithCommas)</PreprocessorDefinitions> <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">_WIN64;_AMD64_=1;AMD64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">_WIN64;_AMD64_=1;AMD64;%(PreprocessorDefinitions);MyProductName=$(MyProductName);MyDescription=$(MyDescription);MyCompanyName=$(MyCompanyName);MyCopyright=$(MyCopyright);MyVersion=$(MyVersion);MyVersionWithCommas=$(MyVersionWithCommas)</PreprocessorDefinitions> <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">_WIN64;_ARM64_=1;ARM64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">_WIN64;_AMD64_=1;AMD64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">_WIN64;_ARM64_=1;ARM64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ResourceCompile> </ResourceCompile>
</ItemGroup> </ItemGroup>
<ItemGroup>
<CustomBuild Include="..\..\src\sys\driver.inf.in">
<FileType>Document</FileType>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">set DriverFile=$(TargetFileName)
set Provider="$(MyCompanyName)"
set CatalogFile=driver-$(MyProductFileArch).cat
if "$(MyProductFileArch)"=="a64" set ArchDecoration=ntarm64
if "$(MyProductFileArch)"=="x64" set ArchDecoration=ntamd64
if "$(MyProductFileArch)"=="x86" set ArchDecoration=ntx86
setlocal EnableDelayedExpansion
if exist $(OutDir)driver-$(MyProductFileArch).inf del $(OutDir)driver-$(MyProductFileArch).inf
for /f "delims=" %%l in (%(FullPath)) do (
set line=%%l
echo !line! &gt;&gt;$(OutDir)driver-$(MyProductFileArch).inf
)
stampinf -d * -v $(MyVersion) -f $(OutDir)driver-$(MyProductFileArch).inf</Command>
<LinkObjects Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkObjects>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">set DriverFile=$(TargetFileName)
set Provider="$(MyCompanyName)"
set CatalogFile=driver-$(MyProductFileArch).cat
if "$(MyProductFileArch)"=="a64" set ArchDecoration=ntarm64
if "$(MyProductFileArch)"=="x64" set ArchDecoration=ntamd64
if "$(MyProductFileArch)"=="x86" set ArchDecoration=ntx86
setlocal EnableDelayedExpansion
if exist $(OutDir)driver-$(MyProductFileArch).inf del $(OutDir)driver-$(MyProductFileArch).inf
for /f "delims=" %%l in (%(FullPath)) do (
set line=%%l
echo !line! &gt;&gt;$(OutDir)driver-$(MyProductFileArch).inf
)
stampinf -d * -v $(MyVersion) -f $(OutDir)driver-$(MyProductFileArch).inf</Command>
<LinkObjects Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkObjects>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">set DriverFile=$(TargetFileName)
set Provider="$(MyCompanyName)"
set CatalogFile=driver-$(MyProductFileArch).cat
if "$(MyProductFileArch)"=="a64" set ArchDecoration=ntarm64
if "$(MyProductFileArch)"=="x64" set ArchDecoration=ntamd64
if "$(MyProductFileArch)"=="x86" set ArchDecoration=ntx86
setlocal EnableDelayedExpansion
if exist $(OutDir)driver-$(MyProductFileArch).inf del $(OutDir)driver-$(MyProductFileArch).inf
for /f "delims=" %%l in (%(FullPath)) do (
set line=%%l
echo !line! &gt;&gt;$(OutDir)driver-$(MyProductFileArch).inf
)
stampinf -d * -v $(MyVersion) -f $(OutDir)driver-$(MyProductFileArch).inf</Command>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">set DriverFile=$(TargetFileName)
set Provider="$(MyCompanyName)"
set CatalogFile=driver-$(MyProductFileArch).cat
if "$(MyProductFileArch)"=="a64" set ArchDecoration=ntarm64
if "$(MyProductFileArch)"=="x64" set ArchDecoration=ntamd64
if "$(MyProductFileArch)"=="x86" set ArchDecoration=ntx86
setlocal EnableDelayedExpansion
if exist $(OutDir)driver-$(MyProductFileArch).inf del $(OutDir)driver-$(MyProductFileArch).inf
for /f "delims=" %%l in (%(FullPath)) do (
set line=%%l
echo !line! &gt;&gt;$(OutDir)driver-$(MyProductFileArch).inf
)
stampinf -d * -v $(MyVersion) -f $(OutDir)driver-$(MyProductFileArch).inf</Command>
<LinkObjects Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkObjects>
<LinkObjects Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">false</LinkObjects>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">set DriverFile=$(TargetFileName)
set Provider="$(MyCompanyName)"
set CatalogFile=driver-$(MyProductFileArch).cat
if "$(MyProductFileArch)"=="a64" set ArchDecoration=ntarm64
if "$(MyProductFileArch)"=="x64" set ArchDecoration=ntamd64
if "$(MyProductFileArch)"=="x86" set ArchDecoration=ntx86
setlocal EnableDelayedExpansion
if exist $(OutDir)driver-$(MyProductFileArch).inf del $(OutDir)driver-$(MyProductFileArch).inf
for /f "delims=" %%l in (%(FullPath)) do (
set line=%%l
echo !line! &gt;&gt;$(OutDir)driver-$(MyProductFileArch).inf
)
stampinf -d * -v $(MyVersion) -f $(OutDir)driver-$(MyProductFileArch).inf</Command>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">set DriverFile=$(TargetFileName)
set Provider="$(MyCompanyName)"
set CatalogFile=driver-$(MyProductFileArch).cat
if "$(MyProductFileArch)"=="a64" set ArchDecoration=ntarm64
if "$(MyProductFileArch)"=="x64" set ArchDecoration=ntamd64
if "$(MyProductFileArch)"=="x86" set ArchDecoration=ntx86
setlocal EnableDelayedExpansion
if exist $(OutDir)driver-$(MyProductFileArch).inf del $(OutDir)driver-$(MyProductFileArch).inf
for /f "delims=" %%l in (%(FullPath)) do (
set line=%%l
echo !line! &gt;&gt;$(OutDir)driver-$(MyProductFileArch).inf
)
stampinf -d * -v $(MyVersion) -f $(OutDir)driver-$(MyProductFileArch).inf</Command>
<LinkObjects Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkObjects>
<LinkObjects Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">false</LinkObjects>
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Writing driver-$(MyProductFileArch).inf</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)driver-$(MyProductFileArch).inf</Outputs>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Writing driver-$(MyProductFileArch).inf</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)driver-$(MyProductFileArch).inf</Outputs>
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Writing driver-$(MyProductFileArch).inf</Message>
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">Writing driver-$(MyProductFileArch).inf</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)driver-$(MyProductFileArch).inf</Outputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">$(OutDir)driver-$(MyProductFileArch).inf</Outputs>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Writing driver-$(MyProductFileArch).inf</Message>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">Writing driver-$(MyProductFileArch).inf</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)driver-$(MyProductFileArch).inf</Outputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">$(OutDir)driver-$(MyProductFileArch).inf</Outputs>
</CustomBuild>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets"> <ImportGroup Label="ExtensionTargets">
</ImportGroup> </ImportGroup>

View File

@ -12,6 +12,12 @@
<Filter Include="Include\winfsp"> <Filter Include="Include\winfsp">
<UniqueIdentifier>{904f0df1-2fb8-4f84-aa46-fa929488c39a}</UniqueIdentifier> <UniqueIdentifier>{904f0df1-2fb8-4f84-aa46-fa929488c39a}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="Source\shared">
<UniqueIdentifier>{c4db9aa7-9474-4f0b-b38b-343a8a1e5686}</UniqueIdentifier>
</Filter>
<Filter Include="Source\shared\ku">
<UniqueIdentifier>{df147bf8-bbdf-4de7-95ce-1e281925725a}</UniqueIdentifier>
</Filter>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="..\..\src\sys\driver.c"> <ClCompile Include="..\..\src\sys\driver.c">
@ -92,6 +98,45 @@
<ClCompile Include="..\..\src\sys\callbacks.c"> <ClCompile Include="..\..\src\sys\callbacks.c">
<Filter>Source</Filter> <Filter>Source</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\src\sys\name.c">
<Filter>Source</Filter>
</ClCompile>
<ClCompile Include="..\..\src\sys\statistics.c">
<Filter>Source</Filter>
</ClCompile>
<ClCompile Include="..\..\src\sys\psbuffer.c">
<Filter>Source</Filter>
</ClCompile>
<ClCompile Include="..\..\src\sys\mup.c">
<Filter>Source</Filter>
</ClCompile>
<ClCompile Include="..\..\src\sys\fsext.c">
<Filter>Source</Filter>
</ClCompile>
<ClCompile Include="..\..\src\sys\mountdev.c">
<Filter>Source</Filter>
</ClCompile>
<ClCompile Include="..\..\src\shared\ku\posix.c">
<Filter>Source\shared\ku</Filter>
</ClCompile>
<ClCompile Include="..\..\src\shared\ku\uuid5.c">
<Filter>Source\shared\ku</Filter>
</ClCompile>
<ClCompile Include="..\..\src\sys\silo.c">
<Filter>Source</Filter>
</ClCompile>
<ClCompile Include="..\..\src\sys\trace.c">
<Filter>Source</Filter>
</ClCompile>
<ClCompile Include="..\..\src\sys\devtimer.c">
<Filter>Source</Filter>
</ClCompile>
<ClCompile Include="..\..\src\shared\ku\mountmgr.c">
<Filter>Source\shared\ku</Filter>
</ClCompile>
<ClCompile Include="..\..\src\sys\sxs.c">
<Filter>Source</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="..\..\src\sys\driver.h"> <ClInclude Include="..\..\src\sys\driver.h">
@ -100,10 +145,24 @@
<ClInclude Include="..\..\inc\winfsp\fsctl.h"> <ClInclude Include="..\..\inc\winfsp\fsctl.h">
<Filter>Include\winfsp</Filter> <Filter>Include\winfsp</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\..\opt\fsext\inc\winfsp\fsext.h">
<Filter>Include\winfsp</Filter>
</ClInclude>
<ClInclude Include="..\..\src\shared\ku\library.h">
<Filter>Source\shared\ku</Filter>
</ClInclude>
<ClInclude Include="..\..\src\shared\ku\config.h">
<Filter>Source\shared\ku</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ResourceCompile Include="..\..\src\sys\version.rc"> <ResourceCompile Include="..\..\src\sys\version.rc">
<Filter>Source</Filter> <Filter>Source</Filter>
</ResourceCompile> </ResourceCompile>
</ItemGroup> </ItemGroup>
<ItemGroup>
<CustomBuild Include="..\..\src\sys\driver.inf.in">
<Filter>Source</Filter>
</CustomBuild>
</ItemGroup>
</Project> </Project>

3
build/choco/LICENSE.txt Normal file
View File

@ -0,0 +1,3 @@
From: https://github.com/winfsp/winfsp/blob/master/License.txt
LICENSE

View File

@ -0,0 +1,14 @@
VERIFICATION
Verification is intended to assist the Chocolatey moderators and community
in verifying that this package's contents are trustworthy.
WinFsp GitHub repository: https://github.com/winfsp/winfsp
WinFsp MSI releases : https://github.com/winfsp/winfsp/releases
You may use the Windows certutil utility to confirm the hash of the MSI
included in this package against the WinFsp MSI release of the same version.
For example, for WinFsp version 1.0.17072 the command line to use is:
certutil -hashfile winfsp-1.0.17072.msi SHA256
The certutil output of the MSI in this package is included below.

View File

@ -0,0 +1,36 @@
$ErrorActionPreference = 'Stop';
$packageName = 'winfsp'
$softwareName = 'WinFsp*'
$installerType = 'msi'
$silentArgs = '/qn /norestart'
$validExitCodes = @(0, 3010, 1605, 1614, 1641)
[array]$key = Get-UninstallRegistryKey -SoftwareName $softwareName
if ($key.Count -eq 1) {
$key | % {
# The Product Code GUID is all that should be passed for MSI, and very
# FIRST, because it comes directly after /x, which is already set in the
# Uninstall-ChocolateyPackage msiargs (facepalm).
$silentArgs = "$($_.PSChildName) $silentArgs"
# Don't pass anything for file, it is ignored for msi (facepalm number 2)
# Alternatively if you need to pass a path to an msi, determine that and
# use it instead of the above in silentArgs, still very first
$file = ''
Uninstall-ChocolateyPackage `
-PackageName $packageName `
-FileType $installerType `
-SilentArgs "$silentArgs" `
-ValidExitCodes $validExitCodes `
-File "$file"
}
} elseif ($key.Count -eq 0) {
# Write-Warning "$packageName is not installed"
} elseif ($key.Count -gt 1) {
Write-Warning "Too many matching packages found! Package may not be uninstalled."
Write-Warning "Please alert package maintainer the following packages were matched:"
$key | % {Write-Warning "- $_"}
}

View File

@ -0,0 +1,14 @@
$ErrorActionPreference = 'Stop';
$toolsDir = "$(Split-Path -parent $MyInvocation.MyCommand.Definition)"
. "$toolsdir\chocolateyHelper.ps1"
$packageArgs = @{
packageName = 'winfsp'
fileType = 'msi'
file = @(Get-ChildItem $toolsDir -filter winfsp-*.msi)[0].FullName
silentArgs = "/qn /norestart INSTALLLEVEL=1000"
validExitCodes = @(0, 3010, 1641)
}
Install-ChocolateyInstallPackage @packageArgs
Remove-Item -Force $packageArgs.file

View File

@ -0,0 +1,4 @@
$ErrorActionPreference = 'Stop';
$toolsDir = "$(Split-Path -parent $MyInvocation.MyCommand.Definition)"
. "$toolsdir\chocolateyHelper.ps1"

57
build/choco/winfsp.nuspec Normal file
View File

@ -0,0 +1,57 @@
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2015/06/nuspec.xsd">
<metadata>
<id>winfsp</id>
<version>$version$</version>
<packageSourceUrl>https://github.com/winfsp/winfsp/tree/master/build/choco</packageSourceUrl>
<owners>Bill Zissimopoulos</owners>
<title>WinFsp</title>
<authors>Bill Zissimopoulos</authors>
<projectUrl>https://github.com/winfsp/winfsp</projectUrl>
<iconUrl>https://github.com/winfsp/winfsp/raw/master/art/winfsp-solid.png</iconUrl>
<copyright>Bill Zissimopoulos</copyright>
<licenseUrl>https://github.com/winfsp/winfsp/blob/master/License.txt</licenseUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<projectSourceUrl>https://github.com/winfsp/winfsp</projectSourceUrl>
<docsUrl>https://github.com/winfsp/winfsp/tree/master/doc</docsUrl>
<mailingListUrl>https://groups.google.com/forum/#!forum/winfsp</mailingListUrl>
<bugTrackerUrl>https://github.com/winfsp/winfsp/issues</bugTrackerUrl>
<tags>driver filesystem fuse gplv3 windows-kernel admin</tags>
<summary>Windows File System Proxy - FUSE for Windows</summary>
<description>
WinFsp is a set of software components for Windows computers that allows the creation of user mode file systems. In this sense it is similar to FUSE (Filesystem in Userspace), which provides the same functionality on UNIX-like computers.
Some of the benefits of using WinFsp are listed below:
* Very well-tested and stable.
* Very fast.
* Strives for compatibility with NTFS.
* Easy to understand but comprehensive API.
* FUSE compatibility layer for native Windows and Cygwin.
* Signed drivers provided on every release.
* Available under the GPLv3 license with a special exception for Free/Libre and Open Source Software.
To verify installation:
* For 64-bit Windows: `net use m: \\memfs64\share` from the command prompt.
* For 32-bit Windows: `net use m: \\memfs32\share`
* For Cygwin: `net use m: '\\memfs64\share'`
* To delete the drive: `net use m: /delete`
</description>
<releaseNotes>https://github.com/winfsp/winfsp/blob/master/Changelog.md</releaseNotes>
<!--<dependencies>
<dependency id="chocolatey-uninstall.extension" />
</dependencies>-->
</metadata>
<files>
<file src="LICENSE.txt" target="tools" />
<file src="VERIFICATION.txt" target="tools" />
<file src="chocolateyInstall.ps1" target="tools" />
<file src="chocolateyUninstall.ps1" target="tools" />
<file src="chocolateyHelper.ps1" target="tools" />
<file src="winfsp-$MsiVersion$.msi" target="tools" />
</files>
</package>

View File

@ -0,0 +1,67 @@
= Frequently Asked Questions
== General
[qanda]
I am running Windows 7 and I am finding that the installed driver is not signed.::
Your Windows 7 OS is missing SHA-2 Code Signing Support. Make sure it is fully updated.
I cannot run a program located in a WinFsp drive as administrator. I cannot run `regedit.exe` from within a WinFsp drive.::
When running an executable as administrator, the Windows OS seems to require that the name of the file system that is housing the executable is "NTFS". For example, the MEMFS file system with the command line `memfs-x64.exe -i -F NTFS -m X:` works.
Disconnecting (unmapping) a network drive does not work.::
You may have Dokany installed. Dokany installs its own Network Provider DLL that unfortunately interferes with the WinFsp handling of network drives. The solution is to change your system's Network Provider order and ensure that the WinFsp Network Provider runs before the Dokany one. Instructions on how to change the Network Provider order can be found in this https://www.interfacett.com/blogs/changing-the-network-provider-order-in-windows-10/[article].
Why is the DLL not installed in the Windows system directories?::
It is true that this would make it convenient to load the DLL, because the Windows loader looks into the Windows system directories when it loads DLL's. However, in the opinion of the WinFsp author, software that does not ship with the OS should not be installing components in the system directories.
+
There are a few alternative methods to overcome this problem. WinFsp recommends marking the WinFsp DLL as "delay load" and then using `FspLoad` to dynamically load the DLL during process initialization. For more information see the WinFsp Tutorial.
Does WinFsp provide debugging symbols?::
Debugging symbols can be found in the https://github.com/winfsp/winfsp.sym repository.
Is there a maximum number of concurrent file systems?::
WinFsp does not have a hard limit of how many file systems can be created or how many processes can create file systems.
+
As of the commits required to fix issue #55, there is however a hash table inside the FSD that uses PID's (Process ID's) as keys. This hash table currently expects that in general there will not be more than 50 processes creating file systems. However this is not a hard limit.
== FUSE
[qanda]
Which version of FUSE does WinFsp-FUSE support?::
It supports both the FUSE 2.8 and FUSE 3.2 API's. For the FUSE 2.8 API include `<fuse/fuse.h>`. For the FUSE 3.2 API include `<fuse3/fuse.h>`.
FUSE on UNIX systems mounts file systems over an existing directory. When mounting a WinFsp-FUSE file system on a directory, the directory is created and later deleted when the file system goes away. What is the reason for this incompatibility?::
It would be preferrable if WinFsp-FUSE behaved like FUSE on UNIX in this instance. However there are a number of reasons that this is not the case.
+
When mounting over directories in Windows, WinFsp-FUSE uses a special construct called a reparse point. Reparse points are a general mechanism for adding special behavior to files and directories. One of the possible reparse points is the "mountpoint" reparse point (often called "junction"), which converts a directory into a mount point.
+
With this in mind here are the reasons for the current WinFsp-FUSE behavior:
+
- Symmetry with mounting on a drive. On Windows drives are created when the file system comes into existence and deleted when it is gone.
- Inability to mount over a non-empty directory on Windows. On FUSE/UNIX this is possible, but not on Windows because NTFS disallows the creation of (mountpoint) reparse points on non-empty directories.
- Most importantly: inability to guarantee that the mount point will cease to exist if the file system crashes. WinFsp attempts to guarantee that all resources used by a file system will get cleaned up. This is certainly true for the kernel-mode FSD, but an attempt is made to do so also in user mode. For this reason, drive symbolic links are marked as temporary and (importantly for our discussion) mount directories are opened with `FILE_FLAG_DELETE_ON_CLOSE`. There is no way to guarantee the removal of a reparse point in the same way.
I have problems getting permissions to work properly in a WinFsp-FUSE file system. Can you help?::
The WinFsp-FUSE layer includes a built-in command line option that can help: `-o uid=-1`. This instructs the WinFsp-FUSE layer to present all file system files as if they are owned by the user that launched the file system.
+
Alternatives include `-o uid=-1,gid=-1`, which presents files as owned by the user *and* group that launched the file system and `-o uid=-1,gid=11`, which presents files as owned by the user that launched the file system and the group "Authenticated Users". (The `fsptool` utility in the `bin` subdirectory of the WinFsp installation directory can be used to convert Windows accounts/SID's to UID's and vice versa.)

32
doc/Home.md Normal file
View File

@ -0,0 +1,32 @@
# WinFsp - Windows File System Proxy
[[WinFsp-Icon.png]]
Developing file systems is a challenging proposition. Developing file systems for Windows is an order of magnitude more difficult. WinFsp eases the task of writing a new file system for Windows. WinFsp file systems are user mode programs and they can be written in a variety of languages and frameworks.
The documentation available here discusses various aspects of WinFsp.
## Programming
- The [[Tutorial|WinFsp-Tutorial]] describes how to create a simple, but complete file system in C/C++.
- The [[API Reference|WinFsp-API-winfsp.h]] describes the native WinFsp API.
- There is also a FUSE compatibility layer for native Windows and Cygwin. See fuse.h in the source repository.
- This [[document|Native-API-vs-FUSE]] discusses the need for both a native API and FUSE and gives some pointers on which one to choose.
- Since release 2019.3 WinFsp supports development of file systems in kernel mode. This [[document|WinFsp-Kernel-Mode-File-Systems]] discusses how to write such file systems.
## Design
- The [[Design|WinFsp-Design]] document describes the high-level design of WinFsp.
- The [[IPC|WinFsp-as-an-IPC-Mechanism]] document offers insights into the WinFsp Inter-Process Communication mechanism.
- The [[Queued Events|Queued-Events]] document discusses a low-level synchronization primitive that is largely responsible for the excellent performance of the WinFsp IPC mechanism.
- The [[Service Architecture|WinFsp-Service-Architecture]] document discusses how to intergrate a file system into Windows as a service and the reasons to do so.
- The [[SSHFS Port Case Study|SSHFS-Port-Case-Study]] document chronicles the creation of the WinFsp-FUSE compatibility layer and the decisions that led to its design.
## Testing
- The [[Testing|WinFsp-Testing]] document discusses the WinFsp testing strategy and how WinFsp achieves correctness and stability.
- The [[Performance|WinFsp-Performance-Testing]] document compares WinFsp performance against other file systems.
## Compatibility
- The [[Compatibility|NTFS-Compatibility]] document discusses current WinFsp compatibility with NTFS.

View File

@ -0,0 +1,36 @@
= Known File Systems and File System Libraries
This document contains a list of known open-source file systems and file system libraries that run on WinFsp. Please contact the WinFsp project to have your file system solution added to this list.
== 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/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#
- https://github.com/ihaveamac/fuse-3ds[fuse-3ds] - FUSE Filesystem Python scripts for Nintendo 3DS files
- https://github.com/sganis/golddrive[golddrive] - Windows ssh network drive
- https://github.com/winfsp/hubfs[hubfs] - File system for GitHub
- https://github.com/juicedata/juicefs[JuiceFS] - a distributed POSIX file system built on top of Redis and S3
- https://github.com/FrKaram/KS2.Drive[KS2.Drive] - Mount a webDAV/AOS server as a local drive
- https://github.com/winfsp/nfs-win[nfs-win] - NFS for Windows
- https://github.com/winfsp/objfs[objfs] - Object Storage File System
- https://github.com/ncw/rclone[rclone] - rsync for cloud storage
- https://github.com/hasse69/rar2fs[rar2fs] - FUSE file system for reading RAR archives
- https://github.com/billziss-gh/redditfs[redditfs] - ls -l /r/programming
- https://github.com/s3fs-fuse/s3fs-fuse[s3fs-fuse] - FUSE-based file system backed by Amazon S3
- https://github.com/netheril96/securefs[securefs] - Filesystem in userspace (FUSE) with transparent authenticated encryption
- https://github.com/winfsp/sshfs-win[sshfs-win] - SSHFS for Windows
- https://github.com/printpagestopdf/WordpressDrive[WordpressDrive] - Windows Userspace Filesystem based on WinFsp that presents a Wordpress Site as a Windows Drive
- https://github.com/emoose/xbox-winfsp[xbox-winfsp] - Adds native support to Windows for the FATX, STFS & GDFX (aka XGD/XDVDFS) Xbox filesystems.
- https://github.com/UtrechtUniversity/YodaDrive[YodaDrive] - Mount a Yoda drive as a local drive
== File System Libraries
- 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/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
- https://github.com/SnowflakePowered/winfsp-rs[Rust: winfsp-rs] - WinFSP binding for Rust

View File

@ -1,21 +0,0 @@
web: \
web/winfsp-design.html \
web/service-architecture.html \
web/sshfs-port-case-study.html \
web/winfsp.h.html
web/winfsp-design.html:
mkdir -p web
asciidoc -b html4 -a hr= -s -o $@ winfsp-design.adoc
web/service-architecture.html:
mkdir -p web
asciidoc -b html4 -a hr= -s -o $@ service-architecture.adoc
web/sshfs-port-case-study.html:
mkdir -p web
asciidoc -b html4 -a hr= -s -o $@ sshfs-port-case-study.adoc
web/winfsp.h.html:
mkdir -p web
prettydoc -H-O -o web ../inc/winfsp/winfsp.h

View File

@ -0,0 +1,47 @@
= NTFS Compatibility
WinFsp enables the creation of user mode file systems that behave similar to NTFS or FAT. Generic Windows applications that access files on a WinFsp file system cannot and should not be able to determine that it is not a native Windows file system. However specialized applications that access NTFS or FAT specific extensions (such as Defrag) will not work properly on WinFsp file systems.
== Supported features
WinFsp supports the following NTFS features:
- Query and set volume information.
- Open, create, close, delete files and directories.
- Query and set file and directory information.
- Query and set security information (ACL's).
- Read and write files.
- Memory mapped I/O.
- Directory change notifications.
- Lock and unlock files.
- Opportunistic locks.
- Open, create, close, delete, query named streams.
- Reparse points with special support for symbolic links.
- Extended attributes.
- Traditional Windows and POSIX semantics for delete and rename.
== Unsupported features
WinFsp does not support the following NTFS features:
- Hard links. Rather rarely used on Windows. However it might be worthwhile to implement them for WinFsp.
- Short file names. Short file names are a relic of the past. WinFsp made a conscious decision not to support them.
- Paging files. Providing paging file support via a user mode file system is impossible for a number of reasons.
- Object ID's. Opening files by ID (+FILE_OPEN_BY_FILE_ID+) is not supported.
- Volume access. Volume handles can be opened and closed, but volumes cannot be read or written. Such an operation makes little sense for most user mode file systems, that do not store information on disks.
- Sparse files. A user mode file system is free to implement sparse files. However WinFsp does not support any sparse file related FSCTL or information class codes.
- Compressed files. A user mode file system is free to implement compressed files. However WinFsp does not support any compression related FSCTL or information class codes.
- Encrypted files. A user mode file system is free to implement encrypted files. However WinFsp does not support any encryption related FSCTL or information class codes.
- Quotas.
- The Change Journal.
- Defragmentation support.
== Incompatibilities
This section lists incompatibilites with NTFS in those features that they both support:
- WinFsp supports case sensitive and case insensitive file systems. However it does not support case sensitive lookups on a case insensitive file system (+SL_CASE_SENSITIVE+).
- NTFS updates the file size information in the directory entry when a file is cleaned up. WinFsp file systems do not (and probably should not attempt to) replicate this behavior. [Related article: https://blogs.msdn.microsoft.com/oldnewthing/20111226-00/?p=8813]
- NTFS supports change notifications on streams (these are mostly undocumented). WinFsp supports them as well but it differs from NTFS in that it issues a single notification when a file with streams is deleted; NTFS appears to issue one notification per deleted stream.
- WinFsp does not support renaming a stream.
- NTFS allows for enumeration and change notifications of all reparse points by opening a special NTFS-only "directory" that "contains" all reparse points (+\$Extend\$Reparse:$R:$INDEX_ALLOCATION+). WinFsp does not support this feature.

View File

@ -0,0 +1,50 @@
= Native API vs FUSE
This document compares the "native" WinFsp API to the FUSE API and provides a rationale for the existence of both within WinFsp.
== Overview
WinFsp provides two different but conceptually similar API's for the same purpose of implementing a user mode file system:
- The WinFsp API, which is documented in the include file `inc/winfsp/winfsp.h` (and online at https://winfsp.dev/apiref). This API consists of the `FSP_FILE_SYSTEM_INTERFACE` "class" and the `FspFileSystem*` functions.
- The FUSE (high-level) API, which is the well understood API from the FUSE project originally by Miklos Szeredi.
Given the similarities between the two API's some questions naturally arise:
- What are the differences between the two API's?
- Why are both needed?
- What is the target audience for each API?
== Comparison
The primary difference between the two API's is that the WinFsp API is being designed to use all features available to a Windows file system, whereas the FUSE API is being designed (by the FUSE project) to better fit a POSIX file system. For example, a Windows file system can do the following, that cannot be (easily) made available to FUSE:
- Create and manage alternate data streams.
- Manage arbitrary security descriptors (SID's and ACL's vs POSIX permissions).
- Create and manage special files beyond what is supported through FUSE `mknod` (using reparse points).
- Support volume labels.
- Allow the file system to fulfill Read/Write requests using asynchronous I/O.
Furthermore there are other smaller, but still important differences:
- The file deletion model on Windows is different from the FUSE/POSIX model.
- The reparse mechanism (which supports symbolic links) on Windows is quite more powerful (and more complicated) than FUSE/POSIX symbolic links.
- Windows uses UTF-16 for file names, whereas FUSE uses UTF-8, requiring constant conversions between the two.
These and other differences make the creation of the WinFsp FUSE compatibility layer non-trivial and suggest that a native API that more closely resembles the Windows file system model is desirable. At the same time there are hundreds of FUSE (high-level) file systems and having a FUSE compatible API is also very desirable.
== Target Audiences
As mentioned WinFsp provides two different API's; to further complicate matters the FUSE API can be used from both a native Windows application and a Cygwin (POSIX) application. There are then 3 different audiences that the API's cater for:
- The WinFsp API audience. This consists of Windows-only file systems or cross-platform file systems that wish to provide maximum features and/or performance on Windows.
- The FUSE API for native Windows audience. This consists of FUSE file-systems that have had their core file system code ported to Windows, but have not yet been integrated into the operating system. It also includes cross-platform file systems that do not wish to include advanced (non-POSIX) Windows file system features.
- The FUSE API for Cygwin audience. This consists of FUSE file-systems that are ported to Windows/Cygwin with minimal work. For example, the author of this document has ported SSHFS to Cygwin using this API and a minimal SSHFS patch.
For the developer of a new or Windows exclusive file system the recommendation is to use the WinFsp API as it provides support for all features of the Windows file system.
For the developer of a FUSE file system that wishes to port their file system to Windows a natural process may be the following:
- Use the FUSE API for Cygwin to port the file system to Cygwin. In many cases little or no changes to the file system code are required.
- Use the FUSE API for native Windows to port the file system to native Windows. This would require porting the core file system code (i.e. those parts of the file system code that actually manage and organize files). Little to no changes should be required for the file system FUSE layer glue.
- Use the WinFsp API only if the file system requires maximum features and/or performance under Windows.

104
doc/Queued-Events.asciidoc Normal file
View File

@ -0,0 +1,104 @@
= Queued Events - Windows kernel events with IOCP scheduling characteristics
In this article I am discussing _Queued Events_. _Queued Events_ are a Windows kernel synchronization mechanism that I invented for https://github.com/winfsp/winfsp[WinFsp - FUSE for Windows]. _Queued Events_ behave like kernel Synchronization Events (i.e. Win32 auto-reset events), but provide scheduling characteristics similar to those of I/O Completion Ports.
== The Problem
During the later stages of WinFsp development I decided to do some performance testing to understand its behavior and find opportunities for optimization. I found out that WinFsp performed very well in most tested scenarios, but there was one test that seemed to have bad performance for no particular reason.
I ended up profiling this issue using xperf (included in the https://docs.microsoft.com/en-us/windows-hardware/test/wpt/[Windows Performance Toolkit]), which allows for kernel-level profiling. I spent considerable time looking at the profiling results, but could identify no obvious issue with my code.
After a day or two of doing this and being stumped I finally had a lightbulb moment: what if the issue is not with my code, but with how the OS schedules threads? Sure enough I had xperf trace context switches and found that on good runs the OS would context switch my file system threads relatively rarely; on bad runs the OS would context switch my threads excessively.
After contemplating this issue I realized that this was happening because the OS was trying to schedule my threads in a "fair" manner. Windows in general tries to give every thread a chance to run. This can be counter-productive in server-like programs (such as file systems), where all server threads are equivalent and it is actually better to reuse the same thread (if possible) to avoid context switching and other negative effects.
== The Solution
One way of looking at WinFsp is as an IPC (Inter-Process Communication) mechanism. The Windows kernel packages file system operations (open, close, read, write) as IRP's (I/O Request Packets) which it sends to WinFsp. WinFsp places them in an _I/O Queue_; at a later time the threads in a user mode file system retrieve the IRP's from the _I/O Queue_ and service them.
The _I/O Queue_ had gone through multiple iterations, but at the time I was looking at this issue it was using Windows kernel Synchronization Event's (Win32 auto-reset events) for managing threads. The problem was that a wait on a Synchronization Event would be satisfied in a "fair" manner, thus resulting to excessive context switching and bad performance in some circumstances. I needed to find a way to convince Windows to schedule my threads in an "unfair" manner, giving preference to the same thread as much as possible.
I started considering different schemes where I would associate a different event per thread thus being able to wake up the "correct" thread myself and effectively writing my own mini-scheduler. Luckily I had another lightbulb moment: I/O completion ports already do this better than I would ever be able to!
The kernel portion of an I/O Completion Port is called a https://msdn.microsoft.com/en-us/library/windows/hardware/ff549547(v=vs.85).aspx[KQUEUE]. KQUEUE's are (unfortunately) not directly exposed to user mode, however they are at the core of the user mode I/O Completion Ports. KQUEUE's are the main reason I/O Completion Ports are so fast as they provide the following scheduling characteristics:
- They have a Last-In First-Out (LIFO) wait discipline.
- They limit the number of threads that can be satisfied concurrently.
I briefly considered the idea of building _I/O Queues_ directly on top of KQUEUE's, but soon dismissed this idea because _I/O Queues_ are not simple queues but provide additional services, such as IRP cancelation, IRP expiration, etc.
== Queued Events
In an ideal scenario I wanted to continue using my implementation of _I/O Queues_ which had undergone considerable testing and I knew it worked. But somehow I had to convince the Windows kernel to change the scheduling characteristics of Synchronization Events to mirror those of a KQUEUE.
Then I had lightbulb no 3: _Queued Events_ or how to make a queue behave like a Synchronization Event.
Here is how _Queued Events_ work. A _Queued Event_ consists of a KQUEUE and a spin lock. There is also a single dummy item that can be placed in the KQUEUE.
The KQUEUE is guaranteed to contain either 0 or 1 items. When the KQUEUE contains 0 items the _Queued Event_ is considered non-signaled. When the KQUEUE contains 1 items the _Queued Event_ is considered signaled.
ifdef::env-browser[]
[ditaa,file="Queued-Events/states.png"]
--
Non signaled Signaled
+---------------------------+ +---------------------------+
| Queued Event | | Queued Event |
+---------------------------+ +---------------------------+
| | | +---------+ |
| KQUEUE (empty) | | KQUEUE | DUMMY | |
| | | +---------+ |
+---------------------------+ +---------------------------+
--
endif::env-browser[]
ifndef::env-browser[image::Queued-Events/states.png[]]
To transition from the non-signaled to the signaled state, we acquire the spin lock and then insert the dummy item in the KQUEUE using https://msdn.microsoft.com/en-us/library/windows/hardware/ff549570(v=vs.85).aspx[KeInsertQueue]. To transition from the signaled to the non-signaled state, we simply (wait and) remove the dummy item from the KQUEUE using https://msdn.microsoft.com/en-us/library/windows/hardware/ff549605(v=vs.85).aspx[KeRemoveQueue] (without the use of the spin lock).
----
EventSet:
AcquireSpinLock
if (0 == KeReadState()) // if KQUEUE is empty
KeInsertQueue(DUMMY);
ReleaseSpinLock
EventWait:
KeRemoveQueue(); // (wait and) remove item
----
First notice that EventSet is serialized by the use of the spin lock. This guarantees that the dummy item can be only inserted ONCE in the KQUEUE and that the only possible signaled state transitions for EventSet are 0->1 and 1->1. This is how https://msdn.microsoft.com/en-us/library/windows/hardware/ff553253(v=vs.85).aspx[KeSetEvent] works for a Synchronization Event.
Second notice that EventWait is not protected by the spin lock, which means that it can happen at any time including concurrently with EventSet or another EventWait. Notice also that for EventWait the only possible transitions are 1->0 or 0->0 (0->block->0). This is how https://msdn.microsoft.com/en-us/library/windows/hardware/ff553350(v=vs.85).aspx[KeWaitForSingleObject] works for a Synchronization Event.
ifdef::env-browser[]
[ditaa,file="Queued-Events/transitions.png"]
--
Non signaled Signaled
+---------------------------+ +---------------------------+
| Queued Event | | Queued Event |
+---------------------------+ +---------------------------+
| | ---EventSet --> | +---------+ |
| KQUEUE (empty) | | KQUEUE | DUMMY | |
| | <--EventWait--- | +---------+ |
+---------------------------+ +---------------------------+
--
endif::env-browser[]
ifndef::env-browser[image::Queued-Events/transitions.png[]]
We now have to consider what happens when we have one EventSet concurrently with one or more EventWait's:
1. The EventWait(s) happen before https://msdn.microsoft.com/en-us/library/windows/hardware/ff549591(v=vs.85).aspx[KeReadState]. If the KQUEUE has an item one EventWait gets satisfied, otherwise it blocks. In this case KeReadState will read the KQUEUE's state as 0 and KeInsertQueue will insert the dummy item, which will unblock the EventWait.
2. The EventWait(s) happen after KeReadState, but before KeInsertQueue. If the dummy item was already in the KQUEUE the KeReadState test will fail and KeInsertQueue will not be executed, but EventWait will be satisfied immediately. If the dummy item was not in the KQUEUE the KeReadState will succeed and EventWait will momentarily block until KeInsertQueue releases it.
3. The EventWait(s) happen after KeInsertQueue. In this case the dummy item in is the KQUEUE already and one EventWait will be satisfied immediately.
NOTE: _Queued Events_ cannot cleanly support an EventClear operation. The obvious choice of using KeRemoveQueue with a 0 timeout is insufficient because it would associate the current thread with the KQUEUE and that is not desirable. KeRundownQueue cannot be used either because it disassociates all threads from the KQUEUE.
The complete implementation of _Queued Events_ within WinFsp can be found here: https://github.com/winfsp/winfsp/blob/v1.1/src/sys/driver.h#L655-L795
== Queued Events Scheduling Characteristics
Queued Events encapsulate KQUEUE's and therefore inherit their scheduling characteristics:
- They have a Last-In First-Out (LIFO) wait discipline.
- They limit the number of threads that can be satisfied concurrently.
These characteristics are desirable because they reduce the number of context switches thus speeding up the WinFsp IPC implementation. Performance testing immediately after the incorporation of _Queued Events_ into WinFsp showed significant performance improvements; profiling with xperf showed that context switches among file system threads were now a relatively rare event!

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

View File

@ -0,0 +1,266 @@
= SSHFS Port Case Study
This document is a case study in porting SSHFS to Windows and WinFsp. At the time that the document was started WinFsp had a native API, but no FUSE compatible API. The main purpose of the case study was to develop a FUSE compatible API for WinFsp.
== Step 1: Gather Information about SSHFS
The SSHFS project is one of the early FUSE projects. The project was originally written by Miklos Szeredi who is also the author of FUSE. SSHFS provides a file system interface on top of SFTP (Secure File Transfer Protocol).
The project's website is at https://github.com/libfuse/sshfs. A quick perusal of the source code shows that this is a POSIX program, the file `configure.ac` further shows that it depends on GLib and FUSE.
Luckily Cygwin on Windows provides a POSIX interface and it also includes GLib and pkg-config. We are missing FUSE of course. Let's try it anyway:
----
billziss@windows:~/Projects/ext$ git clone https://github.com/libfuse/sshfs.git
Cloning into 'sshfs'...
[snip]
billziss@windows:~/Projects/ext$ cd sshfs/
billziss@windows:~/Projects/ext/sshfs [master]$ autoreconf -i
[snip]
billziss@windows:~/Projects/ext/sshfs [master]$ ./configure
[snip]
configure: error: Package requirements (fuse >= 2.3 glib-2.0 gthread-2.0) were not met:
No package 'fuse' found
----
As expected we get an error because there is no package named FUSE. So let's create one.
== Step 2: Create a FUSE Compatible Package
After a few days of development there exists now an initial FUSE implementation within WinFsp. Most of the FUSE API's from the header files `fuse.h`, `fuse_common.h` and `fuse_opt.h` have been implemented. However none of the `fuse_operations` currently work as the necessary work to translate WinFsp requests to FUSE requests has not happened yet.
=== Challenges
- The FUSE API is old and somewhat hairy. There are multiple versions of it and choosing the right one was not easy. In the end version 2.8 of the API was chosen for implementation.
- The FUSE API uses a number of OS specific types (notably `struct stat`). Sometimes these types have multiple definitions even within the same OS (e.g. `struct stat` and `struct stat64`). For this reason it was decided to define our own `fuse_*` types (e.g. `struct fuse_stat`) instead of relying on the ones that come with MSVC. Care was taken to ensure that these types remain compatible with Cygwin as it is one of our primary target environments.
- The WinFsp DLL does *not* use the MSVCRT and uses its own memory allocator (`HeapAlloc`, `HeapFree`). Even if it used the MSVCRT `malloc`, it does not have access to the Cygwin `malloc`. The FUSE API has a few cases where users are expected to use `free` to deallocate memory (e.g. `fuse_opt_add_opt`). But which `free` is that for a Cygwin program? The Cygwin `free`, the MSVCRT `free` or our own `MemFree`?
+
To solve this problem we use the following pattern: every FUSE API is implemented as a `static inline` function that calls a WinFsp-FUSE API and passes it an extra argument that describes the environment:
+
----
static inline int fuse_opt_add_opt(char **opts, const char *opt)
{
return fsp_fuse_opt_add_opt(fsp_fuse_env(), opts, opt);
}
----
+
The `fsp_fuse_env` function is another `static inline` function that simply "captures" the current environment (things like the environment's `malloc` and `free`).
+
----
...
#elif defined(__CYGWIN__)
...
#define FSP_FUSE_ENV_INIT \
{ \
'C', \
malloc, free, \
fsp_fuse_daemonize, \
fsp_fuse_set_signal_handlers, \
fsp_fuse_remove_signal_handlers,\
}
...
#else
...
static inline struct fsp_fuse_env *fsp_fuse_env(void)
{
static struct fsp_fuse_env env = FSP_FUSE_ENV_INIT;
return &env;
}
----
- The implementation of `fuse_opt` proved an unexpected challenge. The function `fuse_opt_parse` is very flexible, but it also has a lot of quirks. It took a lot of trial and error to arrive at a clean reimplementation.
=== Things that worked rather nicely
- The pattern `fuse_new` / `fuse_loop` / `fuse_destroy` fits nicely to the WinFsp service model: `FspServiceCreate` / `FspServiceLoop` / `FspServiceDelete`. This means that every (high-level) FUSE file system can rather easily be converted into a Windows service if desired.
=== Integrating with Cygwin
It remains to show how to use the WinFsp-FUSE implementation from Cygwin and SSHFS. SSHFS uses `pkg-config` for its build configuration. `Pkg-config` requires a `fuse.pc` file:
----
arch=x64
prefix=${pcfiledir}/..
incdir=${prefix}/inc/fuse
implib=${prefix}/bin/winfsp-${arch}.dll
Name: fuse
Description: WinFsp FUSE compatible API
Version: 2.8
URL: https://winfsp.dev
Libs: "${implib}"
Cflags: -I"${incdir}"
----
The WinFsp installer has been modified to place this file within its installation directory. It remains to point `pkg-config` to the appropriate location (using `PKG_CONFIG_PATH`) and the SSHFS configuration process can now find the FUSE package.
=== SSHFS-Win
The sshfs-win open-source project (work in progress) can be found here: https://bitbucket.org/billziss/sshfs-win
== Step 3: Mapping Windows to POSIX
It would seem that we are now ready to start implementing the `fuse_operations`. However there is another matter that we need to attend to first and that is mapping the Windows file system view of the world to the POSIX one and vice-versa.
=== Mapping Paths
The Windows and POSIX file systems both use paths to address files. The path conventions are different, so we need a technique to convert between the two. This goes beyond a simple translation of the backslash character (`\`) to slash (`/`), because several characters are reserved and cannot be used in a Windows file path, but are legal when used in a POSIX path.
The reserved Windows characters are:
----
< > : " / \ | ? *
any character between 0 and 31
----
POSIX only has two reserved characters: slash (`/`) and `NUL`.
So how do we map between the two? Luckily this problem has been solved before by "Services for Macintosh" (SFM), "Services for UNIX" (SFU) and Gygwin. The solution involves the use of the Unicode "private use area". When mapping a POSIX path to Windows, if we encounter any of the Windows reserved characters we simply map it to the Unicode range U+F000 - U+F0FF. The reverse mapping from Windows to POSIX is obvious.
=== Mapping Security
Mapping Windows security to POSIX (and vice-versa) is a much more interesting (and difficult) problem. We have the following requirements:
- We need a method to map a Windows SID (Security Identifier) to a POSIX uid/gid.
- We need a method to map a Windows ACL (Access Control List) to a POSIX permission set.
- We want any mapping method we come up with to be bijective (to the extent that it is possible).
Luckily "Services for UNIX" (and Cygwin) come to the rescue again. The following Cygwin document describes in great detail a method to map a Windows SID to a POSIX uid/gid that is compatible with SFU: https://cygwin.com/cygwin-ug-net/ntsec.html. A different document from SFU describes how to map a Windows ACL to POSIX permissions: https://technet.microsoft.com/en-us/library/bb463216.aspx.
The mappings provided are not perfect, but they come pretty close. They are also proven as they have been used in SFU and Cygwin for years.
=== WinFsp Implementation
A WinFsp implementation of the above mappings can be found in the file `src/dll/posix.c`.
== Step 4: Implementing FUSE Core
We are now finally ready to implement the `fuse_operations`. This actually proves to be a straightforward mapping of the WinFSP `FSP_FILE_SYSTEM_INTERACE` to `fuse_operations`:
GetVolumeInfo:: Mapped to `statfs`. Volume labels are not supported by FUSE (see below).
SetVolumeLabel:: No equivalent on FUSE, so simply return `STATUS_INVALID_PARAMETER`. One thought is to map this call into a `setxattr("sys.VolumeLabel")` (or similar) call on the root directory (`/`).
GetSecurityByName:: Mapped to `fgetattr`/`getattr`. The returned `stat` information is translated into a Windows security descriptor using `FspPosixMapPermissionsToSecurityDescriptor`.
Create:: This is used to create a new file or directory. If a file is created this is mapped to `create` or `mknod`;`open`. If a directory is created this is mapped to `mkdir`;`opendir` calls (the reason is that on Windows a directory remains open after being created). In some circumstances a `chown` may be issued as well. After the file or directory has been created a `fgetattr`/`getattr` is issued to get `stat` information to return to the FSD.
Open:: This is used to open a new file or directory. First a `fgetattr`/`getattr` is issued. If the file is not a directory it is followed by `open`. If the file is a directory it is followed by `opendir`.
Overwrite:: This is used to overwrite a file when one of the `FILE_OVERWRITE`, `FILE_SUPERSEDE` or `FILE_OVERWRITE_IF` flags has been set. Mapped to `ftruncate`/`truncate`.
Cleanup:: Mapped to `unlink` when deleting a file and `rmdir` when deleting a directory.
Close:: Mapped to `flush`;`release` when closing a file and `releasedir` when closing a directory.
Read:: Mapped to `read`.
Write:: Mapped to `fgetattr`/`getattr` and `write`.
Flush:: Mapped to `fsync` or `fsyncdir`.
GetFileInfo:: Mapped to `fgetattr`/`getattr`.
SetBasicInfo:: Mapped to `utimens`/`utime`.
SetAllocationSize:: Mapped to `fgetattr`/`getattr` followed by `ftruncate`/`truncate`. Note that this call and `SetFileSize` may be consolidated soon in the WinFsp API.
SetFileSize:: Mapped to `fgetattr`/`getattr` followed by `ftruncate`/`truncate`. Note that this call and `SetAllocationSize` may be consolidated soon in the WinFsp API.
CanDelete:: For directories only: mapped to a `getdir`/`readdir` call to determine if they are empty and can therefore be deleted.
Rename:: Mapped to `fgetattr`/`getattr` on the destination file name and `rename`.
GetSecurity:: Mapped to `fgetattr`/`getattr`. The returned `stat` information is translated into a Windows security descriptor using `FspPosixMapPermissionsToSecurityDescriptor`.
SetSecurity:: Mapped to `fgetattr`/`getattr` followed by `chmod` and/or `chown`.
ReadDirectory:: Mapped to `getdir`/`readdir`. Note that because of how the Windows directory enumeration API's work there is a further `fgetattr`/`getattr` per file returned!
=== Some Additional Challenges
Let us now discuss a couple of final challenges in getting a proper FUSE port working under Cygwin: the implementation of `fuse_set_signal_handlers`/`fuse_remove_signal_handlers` and `fuse_daemonize`.
Let us start with `fuse_set_signal_handlers`/`fuse_remove_signal_handlers`. Cygwin supports POSIX signals and we can simply set up signal handlers similar to what libfuse does. However this simple approach does not work within WinFsp, because it uses native API's that Cygwin cannot interrupt with its signal mechanism. For example, the `fuse_loop` FUSE call eventually results in a `WaitForSingleObject` API call that Cygwin cannot interrupt. Even trying with an alertable `WaitForSingleObjectEx` did not work as unfortunately Cygwin does not issue a `QueueUserAPC` when issuing a signal. So we need an alternative mechanism to support signals.
The alternative is to use `sigwait` in a separate thread. `Fsp_fuse_signal_handler` is a WinFsp API that knows how to interrupt that `WaitForSingleObject` (actually it just signals the waited event).
----
static inline void *fsp_fuse_signal_thread(void *psigmask)
{
int sig;
if (0 == sigwait(psigmask, &sig))
fsp_fuse_signal_handler(sig);
return 0;
}
----
Let us now move to `fuse_daemonize`. This FUSE call allows a FUSE file system to become a (UNIX) daemon. This is achieved by using the POSIX fork call, which unfortunately has many limitations in Cygwin. One such limitation (and the one that bit us in WinFsp) is that it does not know how to clone Windows heaps (`HeapAlloc`/`HeapFree`).
Recall that WinFsp uses its own memory allocator (just a thin wrapper around `HeapAlloc`/`HeapFree`). This means that any allocations made prior to the fork() call are doomed after a fork(); with good luck the pointers will point to invalid memory and one will get an Access Violation; with bad luck the pointers will point to valid memory that contains bad data and the program may stumble for a while, just enough to hide the actual cause of the problem.
Luckily there is a rather straightforward work-around: "do not allocate any non-Cygwin resources prior to fork". This is actually possible within WinFsp, because we are already capturing the Cygwin environment and its `malloc`/`free` (see `fsp_fuse_env` in "Step 2"). It is also possible, because the typical FUSE program structure looks like this:
----
fuse_new
fuse_daemonize // do not allocate any non-Cygwin resources prior to this
fuse_loop/fuse_loop_mt // safe to allocate non-Cygwin resources
fuse_destroy
----
With this change `fuse_daemonize` works and allows me to declare the Cygwin portion of the SSHFS port complete!
== Step 5: POSIX special files
Although WinFsp now has a working FUSE implementation there remains an important problem: how to handle POSIX special files such as named pipes (FIFO), devices (CHR, BLK), sockets (SOCK) or symbolic links (LNK).
While Windows has support for symbolic links (LNK) there is no direct support for other POSIX special files. The question then is how to represent such files when they are accessed by Windows. This is especially important to systems like Cygwin that understand POSIX special files and can even create them.
Cygwin normally emulates symbolic links and special files using special shortcut (.lnk) files. However many FUSE file systems support POSIX special files; it is desirable then that applications, like Cygwin, that understand them should be able to create and access them without resorting to hacks like using .lnk files.
The problem was originally mentioned by Herbert Stocker on the Cygwin mailing list:
[quote]
____
The mkfifo system call will have Cygwin create a .lnk file and
WinFsp will forward it as such to the file system process. The
system calls readdir or open will then have the file system
process tell WinFsp that there is a .lnk file and Cygwin will
translate this back to a fifo, so in this sense it does work.
But the file system will see a file (with name *.lnk) where it
should see a pipe (mknod call with \'mode' set to S_IFIFO).
IMHO one could say this is a break of the FUSE API.
Practically it will break:
- File systems that special-treat pipe files (or .lnk files).
- If one uses sshfs to connect to a Linux based server and
issues the command mkfifo foo from Cygwin, the server will
end up with a .lnk file instead of a pipe special file.
- Imagine something like mysqlfs, which stores the stuff in a
database. When you run SQL statements to analyze the data
in the file system, you won't see the pipes as such. Or if
you open the file system from Linux you'll see the .lnk
files.
____
Herbert is of course right. A .lnk file is not a FIFO to any application other than Cygwin. We need a better mechanism for representing special files. One such mechanism is reparse points.
Reparse points can be viewed as a form of special metadata that can be attached to a file or directory. The interesting thing about reparse points is that they can have special meaning to a file system driver (NTFS/WinFsp), a filter driver (e.g. a hierarchical storage system) or even an application (Cygwin).
Symbolic links are already implemented as reparse points on Windows. We could perhaps define a new reparse point type for representing POSIX special files. Turns out that this is unnecessary, because Microsoft has already defined a reparse point type for special files on NFS: https://msdn.microsoft.com/en-us/library/dn617178.aspx
It is a relatively straightforward task then to map reparse point operations into their FUSE equivalents:
GetReparsePoint:: Mapped to `getattr`/`fgetattr` and possibly `readlink` (in the case of a symbolic link). The returned `stat.st_mode` information is transformed to the appropriate reparse point information.
SetReparsePoint:: Mapped to `symlink` or `mknod` depending on whether a symbolic link or other special file is created.

423
doc/WinFsp-API-launch.h.md Normal file
View File

@ -0,0 +1,423 @@
# winfsp/launch.h
WinFsp Launch API.
In order to use the WinFsp Launch API a program must include <winfsp/launch.h>
and link with the winfsp\_x64.dll (or winfsp\_x86.dll) library.
## LAUNCH CONTROL
### Functions
<details>
<summary>
<b>FspLaunchCallLauncherPipe</b> - Call launcher pipe.
</summary>
<blockquote>
<br/>
```c
FSP_API NTSTATUS FspLaunchCallLauncherPipe(
WCHAR Command,
ULONG Argc,
PWSTR *Argv,
ULONG *Argl,
PWSTR Buffer,
PULONG PSize,
PULONG PLauncherError);
```
**Parameters**
- _Command_ \- Launcher command to send. For example, the 'L' launcher command instructs
the launcher to list all running service instances.
- _Argc_ \- Command argument count. May be 0.
- _Argv_ \- Command argument array. May be NULL.
- _Argl_ \- Command argument length array. May be NULL. If this is NULL all command arguments
are assumed to be NULL-terminated strings. It is also possible for specific arguments
to be NULL-terminated; in this case pass -1 in the corresponding Argl position.
- _Buffer_ \- Buffer that receives the command response. May be NULL.
- _PSize_ \- Pointer to a ULONG. On input it contains the size of the Buffer. On output it
contains the number of bytes transferred. May be NULL.
- _PLauncherError_ \- Receives the launcher error if any. This is always a Win32 error code. May not be NULL.
**Return Value**
STATUS\_SUCCESS if the command is sent successfully to the launcher, even if the launcher
returns an error. Other status codes indicate a communication error. Launcher errors are
reported through PLauncherError.
**Discussion**
This function is used to send a command to the launcher and receive a response.
</blockquote>
</details>
<details>
<summary>
<b>FspLaunchCallLauncherPipeEx</b> - Call launcher pipe.
</summary>
<blockquote>
<br/>
```c
FSP_API NTSTATUS FspLaunchCallLauncherPipeEx(
WCHAR Command,
ULONG Argc,
PWSTR *Argv,
ULONG *Argl,
PWSTR Buffer,
PULONG PSize,
BOOLEAN AllowImpersonation,
PULONG PLauncherError);
```
**Parameters**
- _Command_ \- Launcher command to send. For example, the 'L' launcher command instructs
the launcher to list all running service instances.
- _Argc_ \- Command argument count. May be 0.
- _Argv_ \- Command argument array. May be NULL.
- _Argl_ \- Command argument length array. May be NULL. If this is NULL all command arguments
are assumed to be NULL-terminated strings. It is also possible for specific arguments
to be NULL-terminated; in this case pass -1 in the corresponding Argl position.
- _Buffer_ \- Buffer that receives the command response. May be NULL.
- _PSize_ \- Pointer to a ULONG. On input it contains the size of the Buffer. On output it
contains the number of bytes transferred. May be NULL.
- _AllowImpersonation_ \- Allow caller to be impersonated by launcher.
- _PLauncherError_ \- Receives the launcher error if any. This is always a Win32 error code. May not be NULL.
**Return Value**
STATUS\_SUCCESS if the command is sent successfully to the launcher, even if the launcher
returns an error. Other status codes indicate a communication error. Launcher errors are
reported through PLauncherError.
**Discussion**
This function is used to send a command to the launcher and receive a response.
</blockquote>
</details>
<details>
<summary>
<b>FspLaunchGetInfo</b> - Get information about a service instance.
</summary>
<blockquote>
<br/>
```c
FSP_API NTSTATUS FspLaunchGetInfo(
PWSTR ClassName,
PWSTR InstanceName,
PWSTR Buffer,
PULONG PSize,
PULONG PLauncherError);
```
**Parameters**
- _ClassName_ \- Class name of the service instance to stop.
- _InstanceName_ \- Instance name of the service instance to stop.
- _Buffer_ \- Buffer that receives the command response. May be NULL.
- _PSize_ \- Pointer to a ULONG. On input it contains the size of the Buffer. On output it
contains the number of bytes transferred. May be NULL.
- _PLauncherError_ \- Receives the launcher error if any. This is always a Win32 error code. May not be NULL.
**Return Value**
STATUS\_SUCCESS if the command is sent successfully to the launcher, even if the launcher
returns an error. Other status codes indicate a communication error. Launcher errors are
reported through PLauncherError.
**Discussion**
The information is a list of NULL-terminated strings: the class name of the service instance,
the instance name of the service instance and the full command line used to start the service
instance.
</blockquote>
</details>
<details>
<summary>
<b>FspLaunchGetNameList</b> - List service instances.
</summary>
<blockquote>
<br/>
```c
FSP_API NTSTATUS FspLaunchGetNameList(
PWSTR Buffer,
PULONG PSize,
PULONG PLauncherError);
```
**Parameters**
- _Buffer_ \- Buffer that receives the command response. May be NULL.
- _PSize_ \- Pointer to a ULONG. On input it contains the size of the Buffer. On output it
contains the number of bytes transferred. May be NULL.
- _PLauncherError_ \- Receives the launcher error if any. This is always a Win32 error code. May not be NULL.
**Return Value**
STATUS\_SUCCESS if the command is sent successfully to the launcher, even if the launcher
returns an error. Other status codes indicate a communication error. Launcher errors are
reported through PLauncherError.
**Discussion**
The information is a list of pairs of NULL-terminated strings. Each pair contains the class
name and instance name of a service instance. All currently running service instances are
listed.
</blockquote>
</details>
<details>
<summary>
<b>FspLaunchStart</b> - Start a service instance.
</summary>
<blockquote>
<br/>
```c
FSP_API NTSTATUS FspLaunchStart(
PWSTR ClassName,
PWSTR InstanceName,
ULONG Argc,
PWSTR *Argv,
BOOLEAN HasSecret,
PULONG PLauncherError);
```
**Parameters**
- _ClassName_ \- Class name of the service instance to start.
- _InstanceName_ \- Instance name of the service instance to start.
- _Argc_ \- Service instance argument count. May be 0.
- _Argv_ \- Service instance argument array. May be NULL.
- _HasSecret_ \- Whether the last argument in Argv is assumed to be a secret (e.g. password) or not.
Secrets are passed to service instances through standard input rather than the command
line.
- _PLauncherError_ \- Receives the launcher error if any. This is always a Win32 error code. May not be NULL.
**Return Value**
STATUS\_SUCCESS if the command is sent successfully to the launcher, even if the launcher
returns an error. Other status codes indicate a communication error. Launcher errors are
reported through PLauncherError.
</blockquote>
</details>
<details>
<summary>
<b>FspLaunchStartEx</b> - Start a service instance.
</summary>
<blockquote>
<br/>
```c
FSP_API NTSTATUS FspLaunchStartEx(
PWSTR ClassName,
PWSTR InstanceName,
ULONG Argc,
PWSTR *Argv,
BOOLEAN HasSecret,
BOOLEAN AllowImpersonation,
PULONG PLauncherError);
```
**Parameters**
- _ClassName_ \- Class name of the service instance to start.
- _InstanceName_ \- Instance name of the service instance to start.
- _Argc_ \- Service instance argument count. May be 0.
- _Argv_ \- Service instance argument array. May be NULL.
- _HasSecret_ \- Whether the last argument in Argv is assumed to be a secret (e.g. password) or not.
Secrets are passed to service instances through standard input rather than the command
line.
- _AllowImpersonation_ \- Allow caller to be impersonated by launcher.
- _PLauncherError_ \- Receives the launcher error if any. This is always a Win32 error code. May not be NULL.
**Return Value**
STATUS\_SUCCESS if the command is sent successfully to the launcher, even if the launcher
returns an error. Other status codes indicate a communication error. Launcher errors are
reported through PLauncherError.
</blockquote>
</details>
<details>
<summary>
<b>FspLaunchStop</b> - Stop a service instance.
</summary>
<blockquote>
<br/>
```c
FSP_API NTSTATUS FspLaunchStop(
PWSTR ClassName,
PWSTR InstanceName,
PULONG PLauncherError);
```
**Parameters**
- _ClassName_ \- Class name of the service instance to stop.
- _InstanceName_ \- Instance name of the service instance to stop.
- _PLauncherError_ \- Receives the launcher error if any. This is always a Win32 error code. May not be NULL.
**Return Value**
STATUS\_SUCCESS if the command is sent successfully to the launcher, even if the launcher
returns an error. Other status codes indicate a communication error. Launcher errors are
reported through PLauncherError.
</blockquote>
</details>
## SERVICE REGISTRY
### Functions
<details>
<summary>
<b>FspLaunchRegFreeRecord</b> - Free a service registry record.
</summary>
<blockquote>
<br/>
```c
FSP_API VOID FspLaunchRegFreeRecord(
FSP_LAUNCH_REG_RECORD *Record);
```
**Parameters**
- _Record_ \- The service record to free.
**See Also**
- FspLaunchRegGetRecord
</blockquote>
</details>
<details>
<summary>
<b>FspLaunchRegGetRecord</b> - Get a service registry record.
</summary>
<blockquote>
<br/>
```c
FSP_API NTSTATUS FspLaunchRegGetRecord(
PWSTR ClassName,
PWSTR Agent,
FSP_LAUNCH_REG_RECORD **PRecord);
```
**Parameters**
- _ClassName_ \- The service class name.
- _Agent_ \- The name of the agent that is retrieving the service record. This API matches
the supplied Agent against the Agent in the service record and it only returns
the record if they match. Pass NULL to match any Agent.
- _PRecord_ \- Pointer to a record pointer. Memory for the service record will be allocated
and a pointer to it will be stored at this address. This memory must be later
freed using FspLaunchRegFreeRecord.
**Return Value**
STATUS\_SUCCESS or error code.
**See Also**
- FspLaunchRegFreeRecord
</blockquote>
</details>
<details>
<summary>
<b>FspLaunchRegSetRecord</b> - Add/change/delete a service registry record.
</summary>
<blockquote>
<br/>
```c
FSP_API NTSTATUS FspLaunchRegSetRecord(
PWSTR ClassName,
const FSP_LAUNCH_REG_RECORD *Record);
```
**Parameters**
- _ClassName_ \- The service class name.
- _Record_ \- The record to set in the registry. If NULL, the registry record is deleted.
**Return Value**
STATUS\_SUCCESS or error code.
</blockquote>
</details>
### Typedefs
<details>
<summary>
<b>FSP_LAUNCH_REG_RECORD</b> - Service registry record.
</summary>
<blockquote>
<br/>
```c
typedef struct _FSP_LAUNCH_REG_RECORD {
PWSTR Agent;
PWSTR Executable;
PWSTR CommandLine;
PWSTR WorkDirectory;
PWSTR RunAs;
PWSTR Security;
PWSTR AuthPackage;
PWSTR Stderr;
PVOID Reserved0[4];
ULONG JobControl;
ULONG Credentials;
ULONG AuthPackageId;
ULONG Recovery;
ULONG Reserved1[4];
UINT8 Buffer[];
} FSP_LAUNCH_REG_RECORD;
```
</blockquote>
</details>
<br/>
<p align="center">
<sub>
Copyright © 2015-2021 Bill Zissimopoulos
<br/>
Generated with <a href="https://github.com/billziss-gh/prettydoc">prettydoc</a>
</sub>
</p>

2782
doc/WinFsp-API-winfsp.h.md Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,59 @@
= WinFsp Building
This document provides instructions on building WinFsp and describes the WinFsp project structure.
== Building
In order to build WinFsp you will need the following:
* Visual Studio 2019
* Windows Driver Kit (WDK)
* https://wixtoolset.org[Wix toolset]
Use the command `tools\build.bat Release` to produce a full build (including the installer). However the resulting product will not be properly signed and Windows will refuse to load the WinFsp driver, unless you enable testsigning with `bcdedit -set testsigning on`.
Producing a fully functional build requires an EV certificate and a Partner Center for Windows Hardware account. Assuming you have those, the steps to produce a full build are as follows:
* Produce a build signed with your EV certificate using `tools\build.bat Release`.
* Upload the signed `driver.cab` file to Microsoft for "attestation signing".
* Download the now Microsoft-signed `driver.cab` file and extract it into a folder (e.g. `signed-drivers`).
* Re-run the build using `tools\build.bat Release PATH\TO\signed-drivers`
== Versioning
WinFsp versioning (and branding) is controlled by the file `build\VStudio\build.version.props`. See the link:WinFsp-Rebranding.asciidoc[WinFsp Rebranding] document for details.
== Project Structure
The WinFsp project is structured as follows:
* 📁 https://github.com/winfsp/winfsp/tree/master/art[art]: Project logo and other art.
* 📁 https://github.com/winfsp/winfsp/tree/master/build[build]: Project build files.
** 📁 https://github.com/winfsp/winfsp/tree/master/build/choco[choco]: Chocolatey package files.
** 📁 https://github.com/winfsp/winfsp/tree/master/build/VStudio[VStudio]: Visual Studio solution and project files.
* 📁 https://github.com/winfsp/winfsp/tree/master/doc[doc]: Project documentation.
* 📁 https://github.com/winfsp/winfsp/tree/master/ext[ext]: External dependencies.
** 📁 https://github.com/winfsp/winfsp/tree/master/ext/tlib[tlib]: Test library for C originally from the secfs project.
** 📁 https://github.com/winfsp/winfsp/tree/master/ext/test[test]: Submodule containing additional file system testing tools.
* 📁 https://github.com/winfsp/winfsp/tree/master/inc[inc]: Public headers.
** 📁 https://github.com/winfsp/winfsp/tree/master/inc/fuse[fuse]: Public headers for the FUSE compatibility layer.
** 📁 https://github.com/winfsp/winfsp/tree/master/inc/fuse3[fuse3]: Public headers for the FUSE3 compatibility layer.
** 📁 https://github.com/winfsp/winfsp/tree/master/inc/winfsp[winfsp]: Public headers for the WinFsp API.
* 📁 https://github.com/winfsp/winfsp/tree/master/opt[opt]: Additional source code and files.
** 📁 https://github.com/winfsp/winfsp/tree/master/opt/cygfuse[cygfuse]: Source code for the FUSE for Cygwin package.
** 📁 https://github.com/winfsp/winfsp/tree/master/opt/fsext[fsext]: Source code for the fsext package.
* 📁 https://github.com/winfsp/winfsp/tree/master/src[src]: Project source code.
** 📁 https://github.com/winfsp/winfsp/tree/master/src/dll[dll]: Source code for the WinFsp DLL.
*** 📁 https://github.com/winfsp/winfsp/tree/master/src/dll/fuse[fuse]: Source code for the FUSE compatibility layer.
*** 📁 https://github.com/winfsp/winfsp/tree/master/src/dll/fuse3[fuse3]: Source code for the FUSE3 compatibility layer.
** 📁 https://github.com/winfsp/winfsp/tree/master/src/dotnet[dotnet]: Source code for the .NET layer.
** 📁 https://github.com/winfsp/winfsp/tree/master/src/fsptool[fsptool]: Source code for the fsptool command line utility.
** 📁 https://github.com/winfsp/winfsp/tree/master/src/launcher[launcher]: Source code for the launcher and the launchctl utility.
** 📁 https://github.com/winfsp/winfsp/tree/master/src/shared[shared]: Shared source code.
*** 📁 https://github.com/winfsp/winfsp/tree/master/src/shared/ku[ku]: Shared source code for kernel and user mode.
*** 📁 https://github.com/winfsp/winfsp/tree/master/src/shared/um[um]: Shared source code for user mode only.
** 📁 https://github.com/winfsp/winfsp/tree/master/src/sys[sys]: Source code for the WinFsp FSD.
* 📁 https://github.com/winfsp/winfsp/tree/master/tools[tools]: Tools for building and testing WinFsp.
* 📁 https://github.com/winfsp/winfsp/tree/master/tst[tst]: Source code for example file systems and test suites.
** 📁 https://github.com/winfsp/winfsp/tree/master/tst/memfs[memfs]: The MEMFS reference file system.
** 📁 https://github.com/winfsp/winfsp/tree/master/tst/winfsp-tests[winfsp-tests]: The primary WinFsp test suite.

View File

@ -0,0 +1,73 @@
= WinFsp Container Support
WinFsp gained support for Windows Containers in release 2020.2 B1. This document discusses this new functionality and explains how user mode file systems can take advantage of it.
NOTE: WinFsp support for Windows Containers is at this time highly experimental. It may change substantially in the future or eliminated altogether.
== Windows Containers
Containers are a technology for deployment and execution of applications in an isolated environment. Applications deployed inside a container cannot be affected by or affect applications in other containers or in the host operating system.
Containers on Windows provide isolation via one of two modes:
- The _Hyper-V_ isolation mode where a container runs in its own virtual machine and has its own kernel.
- The _process_ isolation mode where a container runs in a "silo" inside the host operating system's kernel. This is the same model used in containers for Linux.
WinFsp supports containers that use the process isolation mode in versions of Windows 10 1809 and later.
=== Server Silos
Containers using the process isolation mode are called _server silos_. Server silos are built on top of kernel job objects that have been extended with additional capabities useful for containers. Most importantly each server silo has its own object namespace root directory that is distinct from the host's object namespace root directory. This allows for all named kernel objects inside a server silo to be isolated from named objects in other server silos or the host.
The Windows kernel provides a number of DDI's (Device Driver Interfaces) to enable kernel drivers to work with server silos. The WinFsp FSD uses these DDI's to monitor silo creation and termination and manage its own devices within the silo's object namespace.
=== Docker
In order to manage containers on Windows a version of Docker for Windows is needed. In order to use server silos and process isolation with Docker the switch `--isolation=process` must be used when creating a container:
----
docker run --isolation=process ...
----
== Containerized User Mode File Systems
The WinFsp 2020.2 B1 release gained the ability for user mode file systems to run inside a server silo container and expose a file system either within the container or to the host operating system. This allows for user mode file systems to be containerized.
There are a few considerations that must be taken into account when deploying a user mode file system in a container:
* When using WinFsp with containers the process isolation mode must be used.
* WinFsp currently supports the Windows Server Core and Windows base images. Work is underway for Nano Server compatibility.
* User mode file systems that run in a container cannot start the FSD, because containers disallow driver loading. (Usually the WinFsp DLL automatically starts the WinFsp FSD when it is not already running, but this is not possible within a container.)
+
To work around this problem start the FSD outside the container. For example, the FSD can be started in the host using the `sc.exe` utility.
+
----
sc.exe start winfsp
----
+
Once the FSD has been started it will monitor server silo creation and termination and will set things up so that containerized user mode file systems will be able to interface with it.
* WinFsp file systems typically use the registry to locate and load the WinFsp DLL (see `FspLoad` in `winfsp/winfsp.h`). However the registry inside a container does not contain any WinFsp entries. The easiest workaround is to hardcode the location of the WinFsp installation within the container, which will also hardcode the location of the WinFsp DLL.
* During development it is sometimes useful to bind mount the WinFsp installation directory into the container. For example:
+
----
docker run -it --rm --isolation=process "-vC:\Program Files (x86)\WinFsp:C:\Program Files (x86)\WinFsp:RO" mcr.microsoft.com/windows/servercore:2004 cmd.exe
----
* When a WinFsp based file system is mounted as a disk file system within a container, it is only visible within that container. For example, the drive `Z:` below and associated file system volume will be accessible only within the container:
+
----
memfs-x64 -i -F NTFS -m Z:
----
* When a WinFsp based file system is mounted as a network file system within a container, the file system becomes accessible **outside** the container via its UNC prefix. For example, while the drive `Y:` below will be accessible only within the container, the file system volume will be accessible from both the container and the host via the UNC prefix `\\memfs\share`.
+
----
memfs-x64 -i -F NTFS -m Y: -u \memfs\share
----
+
The reason that this happens is that server silo containers share the same MUP device object with the host. The MUP (Multiple UNC Provider) is the Windows kernel component responsible for resolving UNC prefixes. It is unclear at this time whether this "leak" from the container to the host via the shared MUP is intentional or whether it is an unintended consequence. I note that the server silo MUP entry in the object namespace is a symbolic link, which suggests that the shared MUP device object was a conscious decision by Microsoft.

View File

@ -0,0 +1,81 @@
= WinFsp Debugging Setup
In this article I will describe the debugging setup used for WinFsp. Note that my debugging setup is somewhat peculiar, because all development and debugging is done on a Mac computer using two Windows virtual machines: one for development and one for debugging! However my description below should work for a one or two virtual machine setup.
WinFsp is being developed on Windows 10 and debugged and tested on Windows 8 (although it should run correctly on Windows Vista and higher). You will need some virtualization software (I use VirtualBox 5), you will also need a fresh installation of Windows and to configure it properly for kernel debugging and running test signed drivers:
* Create a Windows VM with a descriptive name (e.g. Win8DBG). Mine has a single CPU and just 2GB of memory.
* Configure your VM for Host Only Networking. This will be used for WinDbg debugging and for deploying WinFsp.
* Install Windows 8 on Win8DBG. Windows 8 is the minimum version of Windows that supports kernel network debugging.
* I would recommend not to install your virtualization software guest additions to minimize issues with your debugging VM.
* Configure Win8DBG for running test signed drivers:
+
----
bcdedit.exe -set testsigning on
----
* Configure Win8DBG for debugging over the network:
+
----
bcdedit /debug on
bcdedit /dbgsettings net hostip:W.X.Y.Z port:NNNN key:KKKK
----
** Note that if you configure your VM with multiple network adapters you must also specify the correct `busparams` argument. You can find the correct `busparams` from the Windows Device Manager. For example, here are the settings on one of my VM's:
+
----
>bcdedit /dbgsettings
busparams 0.8.0
key 1.1.1.1
debugtype NET
hostip 192.168.56.11
port 50000
dhcp Yes
The operation completed successfully.
----
* Enable DbgPrint on Win8DBG. Create the following key/value in the registry:
+
----
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Debug Print Filter]
"DEFAULT"=dword:0000000f
----
* Create a directory on Win8DBG where you will be deploying WinFsp. I use a subdirectory of the Downloads directory:
+
----
C:\Users\USERNAME\Downloads\winfsp
----
* Make the directory available outside the VM using Windows networking. You can use this new Windows share as an easy means to deploy WinFsp.
+
----
copy build\VStudio\build\Debug\winfsp-x64.sys \\Win8DBG\Users\USERNAME\Downloads\winfsp
----
* Enable Driver Verifier for WinFsp on Win8DBG. The easiest way to do so is to run `verifier` from the command line.
* For faster edit-compile-test cycles I strongly recommend to use your virtualization software snapshot feature. For example, in my Win8DBG VM after I set it up exactly how I wanted it, I took a snapshot while the VM was running. Now whenever I want to test WinFsp, I restart that same snapshot and within 3-4 seconds I have a new VM ready for use. Even more importantly whenever there is a hard crash on the VM (happens a lot when developing Windows drivers) I can simply close the crashed VM and restart a new one.
* On your development machine configure WinDbg to use the Microsoft public symbol servers. From the main menu select File > Symbol File Path and enter:
+
----
SRV*C:\Users\USERNAME\AppData\Local\Temp\SymbolCache*http://msdl.microsoft.com/download/symbols
----
* You can now run WinDbg and from the main menu select File > Kernel Debug, then enter the appropriate port number and key. Alternatively you can use the following windbg command line:
+
----
windbg -k net:port=NNNN,key=KKKK
----
* Checkout the `tools/deploy.bat` and `tools/debug.bat` batch files in the source distribution to see how I deploy and debug WinFsp.
== Debugging a user mode process from kernel mode WinDbg
In order to debug a user mode process from a kernel mode WinDbg session, break into the debugger and issue the following commands:
----
kd> !gflag +ksl
kd> sxe ld MODULE-NAME.exe
----
Restart the debugger and it will break within process creation. You can now set a breakpoint at your process wmain (or main, etc.):
----
kd> bp MODULE_NAME!wmain
----
Restart the debugger and it will stop at your program's entry point.

BIN
doc/WinFsp-Icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

View File

@ -0,0 +1,117 @@
= Developing File Systems in Kernel Mode
Since release 2019.3 WinFsp supports development of file systems in kernel mode. Such file systems are implemented as kernel drivers that use WinFsp as the primary FSD (File System Driver) as well as the software library that they interface with to retrieve and service file system requests. This document discusses how to write such file systems.
== Motivation
The primary goal of WinFsp is to enable the easy creation of *user mode* file systems using an easy to use API. There are however legitimate reasons for wanting to develop a file system as a *kernel mode* driver, but the difficulty of doing so often deters people because Windows kernel file system development is notoriously difficult and has many pitfalls.
Some of the reasons that a kernel mode file system may be preferrable to a user mode one:
* A kernel driver may be able to achieve better performance than user mode processes.
* A kernel driver may be able to access advanced OS features that are not easily available to user mode processes.
* A kernel driver may be able to present an alternative interface than the one presented by WinFsp to user mode processes.
Since release 2019.3 WinFsp supports development of file systems as kernel mode drivers. The primary motivation for this work was to support the https://github.com/billziss-gh/winfuse[WinFuse] project, which exposes the FUSE protocol from the Windows kernel in a way that allows FUSE file systems to interface with it, either directly or via https://github.com/libfuse/libfuse[libfuse]. The support was added in such a way that it is generic enough to be used by other kernel mode file systems.
== Overview
A WinFsp "volume" (file system) is typically created using the `FspFsctlCreateVolume` API. This is simply a wrapper around a `CreateFileW` call on one of the WinFsp control devices, either `WinFsp.Disk` or `WinFsp.Net`. The `CreateFileW` call returns a `HANDLE` to the newly created volume, which acts either as a "disk" or a "network" file system, depending on which control device was used to create it.
User mode file systems interact with the WinFsp FSD via `DeviceIoControl/FSP_FSCTL_TRANSACT` messages on the volume `HANDLE`. (This is usually done indirectly via the WinFsp DLL, which hides this detail behind an easy to use API.)
Since release 2019.3 (v1.5) WinFsp supports the following:
* Registration and on-demand loading of a third party driver when a volume that is destined to be handled by the third party driver is created.
* Forwarding of custom `DeviceIoControl` messages to a third party driver. This allows the third party driver to handle custom `FSCTL` requests directed to a WinFsp volume `HANDLE`.
* Kernel-mode API's (called DDI's) that allow a third party driver to register itself with the FSD and interact with its I/O queues.
Such drivers are called within the WinFsp sources and header/library files by the name of "Fsext Providers" (File System Extension Providers). In the text below we will usually refer to them as simply "Providers".
A Provider is a kernel mode driver that uses the FSD as a frontend file system driver to interface with Windows and implement all the complex details that this entails. The Provider fetches I/O requests from the WinFsp I/O queues and may filter them, transform them into a different protocol (as is the case with WinFuse) or use them to fully implement a file system in kernel mode.
== Provider Development
The WinFsp installer includes a "Kernel Developer" feature. When installed this feature adds header and library files in the `opt\fsext` installation subdirectory.
The primary header file used for Provider development is `<winfsp/fsext.h>` and can be found in `opt\fsext\inc`. Additionally the file `<winfsp/fsctl.h>` found in the `inc` installation subdirectory must be in the compiler's include path.
Providers must also be linked with one of the import libraries that can be found in `opt\fsext\lib`. Use the `winfsp-x64.lib` import library when linking the 64-bit version of a Provider and the `winfsp-x86.lib` import library when linking the 32-bit version of a Provider.
=== Provider DDI's
The `<winfsp/fsext.h>` header file includes definitions for the following important DDI's:
* `FspFsextProviderRegister`: This DDI is used by a Provider to register itself with the FSD. Typically the Provider prepares an `FSP_FSEXT_PROVIDER` structure and calls `FspFsextProviderRegister` in its `DriverEntry` routine. The structure's fields are as follows:
** `Version`: Set to `sizeof(FSP_FSEXT_PROVIDER)`.
** `DeviceTransactCode`: The `DeviceIoControl` code that should be forwarded to the Provider.
*** The code must be defined as follows: `CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 0xC00 + ProviderSpecific, METHOD_BUFFERED, FILE_ANY_ACCESS)`.
*** Please note that this scheme allows for up to 1024 codes. If you want to define a new Provider code I will appreciate it if you email me at `<billziss at navimatics.com>` so that we can keep track of Provider codes, avoid conflicts and see when we need to extend this scheme.
** `DeviceExtensionSize`: The size of private data that the Provider wants for itself in the `DeviceExtension` of the FSD volume's device object.
** `DeviceInit`: Called when a new volume is created. The `DeviceObject` parameter is the volume's device object. The `VolumeParams` are the initial parameters passed to `FspFsctlCreateVolume` and can be modified by the Provider.
** `DeviceFini`: Called when a volume is going away. This usually happens when the volume `HANDLE` is closed.
** `DeviceExpirationRoutine`: Called once a second as part of the FSD's expiration timer. The FSD uses this timer to expire caches, long-pending IRP's, etc. A Provider can use this call for a similar purpose. The `ExpirationTime` parameter contains the current interrupt time as determined by the FSD.
** `DeviceTransact`: Called whenever the FSD receives a `DeviceIoControl` request with the `DeviceTransactCode`. The `Irp` parameter contains the relevant `IRP_MJ_FILE_SYSTEM_CONTROL`.
** `DeviceExtensionOffset`: Set to `0` on input. On successful return from `FspFsextProviderRegister` it will contain the offset to use for accessing the Provider's private data in the `DeviceExtension` of the FSD volume's device object. Given a `DeviceObject`, the data can be accessed as `(PVOID)((PUINT8)DeviceObject->DeviceExtension + Provider.DeviceExtensionOffset)`.
* `FspFsextProviderTransact`: This DDI is used by a Provider to interact with the FSD I/O queues. The `DeviceObject` is the FSD volume's device object. The `FileObject` is the `FILE_OBJECT` that corresponds to the volume `HANDLE` (created by `FspFsctlCreateVolume`). The `Response` is the response to send and can be `NULL`. The `Request` is a pointer that receives a pointer to a new request from the WinFsp I/O queue and can be `NULL`; if the received pointer is not `NULL` it must be freed with `ExFreePool`.
=== Provider I/O
When the FSD receives a file system IRP it is often able to handle and complete it without help from an external user mode or kernel mode file system. However in most cases the IRP has to be seen and acted upon by an external file system. For this reason the FSD preprocesses the IRP and places it in an I/O queue in the form of a "request". At a later time the external file system retrieves the request, processes it and sends back a "response". The FSD uses the response to locate the original IRP, perform any necessary postprocessing and finally complete the IRP.
Providers typically use the `FspFsextProviderTransact` DDI to receive requests and send back responses. Requests are of type `FSP_FSCTL_TRANSACT_REQ` and responses are of type `FSP_FSCTL_TRANSACT_RSP`. Requests have a `Kind` field which describes what kind of file system operation is being requested. The following request kinds are currently defined in `<winfsp/fsctl.h>`:
```
FspFsctlTransactCreateKind,
FspFsctlTransactOverwriteKind,
FspFsctlTransactCleanupKind,
FspFsctlTransactCloseKind,
FspFsctlTransactReadKind,
FspFsctlTransactWriteKind,
FspFsctlTransactQueryInformationKind,
FspFsctlTransactSetInformationKind,
FspFsctlTransactQueryEaKind,
FspFsctlTransactSetEaKind,
FspFsctlTransactFlushBuffersKind,
FspFsctlTransactQueryVolumeInformationKind,
FspFsctlTransactSetVolumeInformationKind,
FspFsctlTransactQueryDirectoryKind,
FspFsctlTransactFileSystemControlKind,
FspFsctlTransactDeviceControlKind,
FspFsctlTransactShutdownKind,
FspFsctlTransactLockControlKind,
FspFsctlTransactQuerySecurityKind,
FspFsctlTransactSetSecurityKind,
FspFsctlTransactQueryStreamInformationKind,
```
When request processing is complete the Provider must prepare a response and send it to the FSD using `FspFsextProviderTransact` as mentioned above. It is particularly important that the Provider initializes the `Kind` and `Hint` fields by copying the values from the corresponding request.
This document does not describe in detail how each request kind is supposed to be handled. For the full details refer to the implementation for the WinFsp DLL in the WinFsp sources: `src/dll/fsop.c`. Although this implementation is for user mode file systems, similar logic and techniques should be used for Providers.
== Provider Registration
Providers are loaded on demand and must be properly registered:
* A provider must be registered as a kernel driver. This can be achieved by using the command `sc create PROVIDER type=kernel binPath=X:\PATH\TO\PROVIDER.SYS` or by using the Service Control Manager API's (`OpenServiceW`, `CreateServiceW`, etc.). You do not need an INF file or to use the Setup API in order to register a Provider driver.
* A provider must be registered under the registry key `HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\WinFsp\Fsext`. Create a string value with name the textual representation of the Provider's transact code (see `DeviceTransactCode`) in `"%08lx"` format and value the Provider's driver name.
For example the WinFuse Provider registers its driver under the name `WinFuse` and adds a registry value of `00093118` -> `WinFuse`.
== Provider Lifetime
Providers are loaded on demand by the FSD during volume creation. This process works as follows:
* During volume creation (e.g. by using `FspFsctlCreateVolume`) a non-zero `FsextControlCode` must be specified in `VolumeParams`.
* If the FSD sees the `FsextControlCode` as non-zero it attempts to find a corresponding Provider driver.
** It first checks an internal mapping of codes to Provider drivers. If the code is found, the FSD proceeds to the `DeviceInit` step below.
** If the code is not found in the internal mapping, the FSD checks the registry under the registry key `HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\WinFsp\Fsext`. If the code is not found the volume creation fails.
** If the code is found the FSD loads the Provider driver using `ZwLoadDriver`. The Provider is supposed to register itself with the FSD during `DriverEntry` by calling `FspFsextProviderRegister`.
** Finally the internal mapping of codes to Providers is rechecked. Assuming that everything worked as intended, the corresponding Provider driver is now loaded and we can proceed to the `DeviceInit` step.
* The FSD proceeds to call the `DeviceInit` callback of the Provider. The Provider can use this call to initialize itself in relation to the new volume device object.
* Assuming that the volume device object is created successfully, the FSD will do the following:
** Forward any `FsextControlCode==DeviceTransactCode` requests that it gets in its `IRP_MJ_FILE_SYSTEM_CONTROL` to the Provider via `DeviceTransact`.
** Call the Provider's `DeviceExpirationRoutine` once a second as part of the FSD's expiration process.
* Eventually the volume device object will be torn down (e.g. because the corresponding `HANDLE` is closed). In this case the FSD will call the Provider's `DeviceFini` callback.
Finally note that once loaded a Provider driver cannot be unloaded (without a reboot).

View File

@ -0,0 +1,163 @@
= Performance Testing
This document presents results from performance testing of WinFsp. These results show that WinFsp has excellent performance that rivals or exceeds that of NTFS in many file system scenarios. Some further optimization opportunities are also identified.
== Summary
Two reference WinFsp file systems, MEMFS and NTPTFS, are compared against NTFS in multiple file system scenarios. MEMFS is an in-memory file system, whereas NTPTFS (NT passthrough file system) is a file system that passes all file system requests onto an underlying NTFS file system.
The test results are summarized in the charts below. The "File Tests" chart summarizes performance of file path namespace manipulations (e.g. creating/deleting files, opening files, listing files, etc.). The "Read/Write Tests" chart summarizes performance of file I/O (e.g. cached read/write, memory mapped I/O, etc.)
The important takeaways are:
- MEMFS is faster than NTFS is most scenarios. This is a somewhat expected result because MEMFS is an in-memory file system, whereas NTFS is a disk file system. However it shows that WinFsp does not add significant overhead and user mode file systems can be fast.
- MEMFS and NTPTFS both outperform NTFS when doing cached file I/O! This is a significant result because doing file I/O is the primary purpose of a file system. It is also an unexpected result at least in the case of NTPTFS, since NTPTFS runs on top of NTFS.
The following sections present the testing methodology used, provide instructions for independent verification, describe the individual tests in detail and provide an explanation for the observed results.
[cols="a,a", frame=none, grid=none]
|===
|image::WinFsp-Performance-Testing/file_tests.png[]
|image::WinFsp-Performance-Testing/rdwr_tests.png[]
|===
== Methodology
A test run consists of performance tests run one after the other (in sequence). The test driver is careful to clear system caches before each test to minimize timing interference between the tests (because we would not want operations performed in test A to affect measurements of test B). Tests are run on an idle computer to minimize interference from third party components.
Each test run is run a number of times (default: 3) against each file system and the smallest time value for the particular test and file system is chosen. The assumption is that even in a seemingly idle system there is some activity that affects the results; the smallest value is the preferred one to use because it reflects the time when there is less or no other system activity.
For the NTFS file system we use the default configuration as it ships with Windows (e.g. 8.3 names are enabled). For the NTPTFS file system we disable anti-virus checks on the lower file system, because it makes no sense for NTPTFS to pay for virus checking twice. (Consider an NTPTFS file system that exposes a lower NTFS directory `C:\t` as an upper drive `X:`. Such a file system would have virus checking applied on file accesses to `X:`, but also to its own accesses to `C:\t`. This is unnecessary and counter-productive.)
Note that the sequential nature of the tests represents a worst case scenario for WinFsp. The reason is that a single file system operation may require a roundtrip to the user mode file system and such a roundtrip requires two process context switches (i.e. address space and thread switches): one context switch to carry the file system request to the user mode file system and one context switch to carry the response back to the originating process. WinFsp performs better when multiple processes issue file system operations concurrently, because multiple requests are queued in its internal queues and multiple requests can be handled in a single context switch.
For more information refer to the link:WinFsp-Performance-Testing/WinFsp-Performance-Testing-Analysis.ipynb[Performance Testing Analysis] notebook. This notebook together with the `run-all-perf-tests.bat` script can be used for replication and independent verification of the results presented in this document.
The test environment for the results presented in this document is as follows:
----
Dell XPS 13 9300
Intel Core i7-1065G7 CPU
32GB 3733MHz LPDDR4x RAM
2TB M.2 PCIe NVMe SSD
Windows 11 (64-bit) Version 21H2 (OS Build 22000.258)
WinFsp 2022+ARM64 Beta3 (v1.11B3)
----
== Results
In the charts below we use consistent coloring and markers to quickly identify a file system. Blue and the letter 'N' is used for NTFS, orange and the letter 'M' is used for MEMFS, green and the letter 'P' is used for NTPTFS.
In bar charts shorter bars are better. In plot charts lower times are better. (Better means that the file system is faster).
=== File Tests
File tests are tests that are performed against the hierarchical path namespace of a file system. These tests measure the performance of creating, opening, overwriting, listing and deleting files.
Measured times for these tests are normalized against the NTFS time (so that the NTFS value is always 1). This allows for easy comparison between file systems across all file tests.
MEMFS has the best performance in most of these tests. NTFS performs better in some tests; these are discussed further below. NTPTFS is last as it has the overhead of both NTFS and WinFsp.
image::WinFsp-Performance-Testing/file_tests.png[]
==== file_create_test
This test measures the performance of creating new files using `CreateFileW(CREATE_NEW)` / `CloseHandle`. MEMFS has the best performance here, while NTFS has worse performance as it has to update its data structures on disk.
image::WinFsp-Performance-Testing/file_create_test.png[]
==== file_open_test
This test measures the performance of opening different files using `CreateFileW(OPEN_EXISTING)` / `CloseHandle`. MEMFS again has the best performance, followed by NTFS and then NTPTFS.
image::WinFsp-Performance-Testing/file_open_test.png[]
==== iter.file_open_test
This test measures the performance of opening the same files repeatedly using `CreateFileW(OPEN_EXISTING)` / `CloseHandle`. NTFS has the best performance, with MEMFS following and NTPTFS a distant third.
This test shows that NTFS does a better job than WinFsp when re-opening a file. The problem is that in most cases the WinFsp API design requires a round-trip to the user mode file system when opening a file. Improving WinFsp performance here would likely require substantial changes to the WinFsp API.
image::WinFsp-Performance-Testing/iter.file_open_test.png[]
==== file_overwrite_test
This test measures the performance of overwriting files using `CreateFileW(CREATE_ALWAYS)` / `CloseHandle`. MEMFS is fastest, followed by NTFS and then NTPTFS.
image::WinFsp-Performance-Testing/file_overwrite_test.png[]
==== file_list_test
This test measures the performance of listing files using `FindFirstFileW` / `FindNextFile` / `FindClose`. MEMFS is again fastest with NTFS and NTPTFS following.
It should be noted that NTFS can perform better in this test, if 8.3 (i.e. short) names are disabled (see `fsutil 8dot3name`). However Microsoft ships NTFS with 8.3 names enabled by default and these tests are performed against the default configuration of NTFS.
image::WinFsp-Performance-Testing/file_list_test.png[]
==== file_list_single_test
This test measures the performance of listing a single file using `FindFirstFileW` / `FindNextFile` / `FindClose`. NTFS has again best performance, with MEMFS following and NTPTFS a distant third.
This test shows that NTFS does a better job than WinFsp at caching directory data. Improving WinFsp performance here would likely require a more aggressive and/or intelligent directory caching scheme than the one used now.
image::WinFsp-Performance-Testing/file_list_single_test.png[]
==== file_delete_test
This test measures the performance of deleting files using `DeleteFileW`. MEMFS has the best performance, followed by NTFS and NTPTFS.
image::WinFsp-Performance-Testing/file_delete_test.png[]
=== Read/Write Tests
Read/write tests are tests that measure the performance of cached, non-cached and memory-mapped I/O.
Measured times for these tests are normalized against the NTFS time (so that the NTFS value is always 1). This allows for easy comparison between file systems across all read/write tests.
MEMFS and NTPTFS outperform NTFS in cached and non-cached I/O tests and have equal performance to NTFS in memory mapped I/O tests. This result may be somewhat counter-intuitive (especially for NTPTFS), but the reasons are explained below.
image::WinFsp-Performance-Testing/rdwr_tests.png[]
==== rdwr_cc_read_page_test
This test measures the performance of cached `ReadFile` with 1 page reads. MEMFS and NTPTFS outperform NTFS by a considerable margin.
Cached reads are satisfied from cache and they can effectively be a "memory copy" from the operating system's buffers into the `ReadFile` buffer. Both WinFsp and NTFS implement NT "fast I/O" and one explanation for the test's result is that the WinFsp "fast I/O" implementation is more performant than the NTFS one.
An alternative explanation is that MEMFS and NTPTFS are simply faster in filling the file system cache when a cache miss occurs. While this may be true for MEMFS (because it maintains file data in user mode memory), it cannot be true for NTPTFS. Recall that the test driver clears system caches prior to running every test, which means that when NTPTFS tries to fill its file system cache for the upper file system, it has to access lower file system data from disk (the same as NTFS).
image::WinFsp-Performance-Testing/rdwr_cc_read_page_test.png[]
==== rdwr_cc_write_page_test
This test measures the performance of cached `WriteFile` with 1 page writes. As in the read case, MEMFS and NTPTFS outperform NTFS albeit with a smaller margin.
Similar comments as for `rdwr_cc_read_page_test` apply.
image::WinFsp-Performance-Testing/rdwr_cc_write_page_test.png[]
==== rdwr_nc_read_page_test
This test measures the performance of non-cached `ReadFile` with 1 page reads. Although MEMFS and NTPTFS have better performance than NTFS, this result is not as interesting, because MEMFS is an in-memory file system and NTPTFS currently implements only cached I/O (this may change in the future). However we include this test for completeness.
image::WinFsp-Performance-Testing/rdwr_nc_read_page_test.png[]
==== rdwr_nc_write_page_test
This test measures the performance of non-cached `WriteFile` with 1 page writes. Again MEMFS and NTPTFS have better performance than NTFS, but similar comments as for `rdwr_nc_read_page_test` apply.
image::WinFsp-Performance-Testing/rdwr_nc_write_page_test.png[]
==== mmap_read_test
This test measures the performance of memory mapped reads. NTFS and WinFsp have identical performance here, which actually makes sense because memory mapped I/O is effectively cached by buffers that are mapped into the address space of the process doing the I/O.
image::WinFsp-Performance-Testing/mmap_read_test.png[]
==== mmap_write_test
This test measures the performance of memory mapped writes. NTFS and WinFsp have again identical performance here. Similar comments as for `mmap_read_test` apply.
image::WinFsp-Performance-Testing/mmap_write_test.png[]

View File

@ -0,0 +1,238 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Performance Testing Analysis\n",
"\n",
"This notebook describes the methodology for analyzing WinFsp performance."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Data Collection\n",
"\n",
"Performance data is collected by running the script `run-all-perf-tests.bat`. This script runs a variety of performance tests against the NTFS, MEMFS and NTPTFS file systems. The tests are run a number of times (default: 3) and the results are saved in CSV files with names `ntfs-N.csv`, `memfs-N.csv` and `ntptfs-N.csv` (where `N` represents the results of test run `N`)."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Data Loading\n",
"\n",
"Data is loaded from all CSV files into a single pandas `DataFrame`. The resulting `DataFrame` has columns `test`, `iter`, `ntfs`, `memfs`, `ntptfs`. With multiple test runs there will be multiple time values for a `test`, `iter`, file system triple; in this case the smallest time value is entered into the `DataFrame`. The assumption is that even in a seemingly idle system there is some activity that affects the results; the smallest value is the preferred one to use because it reflects the time when there is less or no other system activity.\n",
"\n",
"The resulting `DataFrame` will contain data similar to the following:\n",
"\n",
"| test | iter | ntfs | memfs | ntptfs |\n",
"|:------------------|------:|-------:|-------:|-------:|\n",
"| file_create_test | 1000 | 0.20 | 0.06 | 0.28 |\n",
"| file_open_test | 1000 | 0.09 | 0.05 | 0.22 |\n",
"| ... | ... | ... | ... | ... |"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import glob, os\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"import pandas as pd\n",
"\n",
"nameord = [\"ntfs\", \"memfs\", \"ntptfs\"]\n",
"\n",
"datamap = {}\n",
"for f in sorted(glob.iglob(\"*.csv\")):\n",
" datamap.setdefault(f.rsplit(\"-\", maxsplit=1)[0], []).append(f)\n",
"\n",
"df = None\n",
"for n in nameord:\n",
" ndf = None\n",
" for f in datamap[n]:\n",
" df0 = pd.read_csv(f, header=None, names=[\"test\", \"iter\", n])\n",
" if ndf is None:\n",
" ndf = df0\n",
" else:\n",
" ndf = ndf.combine(df0, np.minimum)\n",
" if df is None:\n",
" df = ndf\n",
" else:\n",
" df = df.merge(ndf, how=\"left\")\n",
"#df"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Data Analysis\n",
"\n",
"For each test a plot is drawn that shows how each file system performs in the particular test. This allows for easy comparisons between file systems for a particular test."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"markermap = { \"ntfs\": \"$\\mathtt{N}$\", \"memfs\": \"$\\mathtt{M}$\", \"ntptfs\": \"$\\mathtt{P}$\"}\n",
"for t, tdf in df.groupby(\"test\", sort=False):\n",
" plt.figure(figsize=(10,8), dpi=100, facecolor=\"white\")\n",
" plt.title(t)\n",
" xlabel = \"iter\"\n",
" if t.startswith(\"file_\"):\n",
" xlabel = \"files\"\n",
" for n in nameord:\n",
" tdf.plot(ax=plt.gca(), x=\"iter\", xlabel=xlabel, y=n, ylabel=\"time\", marker=markermap[n], ms=8)\n",
" plt.legend(nameord)\n",
" plt.savefig(t + \".png\")\n",
" #plt.show()\n",
" plt.close()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"![](file_create_test.png)\n",
"![](file_open_test.png)\n",
"![](file_overwrite_test.png)\n",
"![](file_attr_test.png)\n",
"![](file_list_test.png)\n",
"![](file_list_single_test.png)\n",
"![](file_list_none_test.png)\n",
"![](file_delete_test.png)\n",
"![](file_mkdir_test.png)\n",
"![](file_rmdir_test.png)\n",
"\n",
"![](iter.file_open_test.png)\n",
"![](iter.file_attr_test.png)\n",
"![](iter.file_list_single_test.png)\n",
"![](iter.file_list_none_test.png)\n",
"\n",
"![](rdwr_cc_read_large_test.png)\n",
"![](rdwr_cc_read_page_test.png)\n",
"![](rdwr_cc_write_large_test.png)\n",
"![](rdwr_cc_write_page_test.png)\n",
"![](rdwr_nc_read_large_test.png)\n",
"![](rdwr_nc_read_page_test.png)\n",
"![](rdwr_nc_write_large_test.png)\n",
"![](rdwr_nc_write_page_test.png)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### File tests\n",
"\n",
"File tests are tests that are performed against the hierarchical path namespace of a file system. Such tests include `file_create_test`, `file_open_test`, etc. Measured times for these tests are normalized against the `ntfs` time (so that the `ntfs` time value becomes 1) and a single aggregate plot is produced.\n",
"\n",
"This allows for easy comparison between file systems across all file tests."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"fileord = [\"create\", \"open\", \"iter.open\", \"overwrite\", \"list\", \"list_single\", \"delete\"]\n",
"fdf = pd.concat([df[df.iter == 5000], df[df.iter == 50]])\n",
"fdf.test = fdf.test.map(lambda x: x.replace(\"file_\", \"\").replace(\"_test\", \"\"))\n",
"fdf = fdf.set_index(\"test\").loc[fileord]\n",
"fdf.memfs /= fdf.ntfs; fdf.ntptfs /= fdf.ntfs; fdf.ntfs = 1\n",
"plt.figure(figsize=(10,8), dpi=100, facecolor=\"white\")\n",
"plt.suptitle(\"File Tests\", fontweight=\"light\", fontsize=20, y=0.95)\n",
"plt.title(\"(Shorter bars are better)\")\n",
"fdf.plot.barh(ax=plt.gca(), y=nameord).invert_yaxis()\n",
"plt.gca().set(ylabel=None)\n",
"for container in plt.gca().containers:\n",
" plt.gca().bar_label(container, fmt=\"%0.2f\", padding=4.0, fontsize=\"xx-small\")\n",
"plt.savefig(\"file_tests.png\")\n",
"#plt.show()\n",
"plt.close()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"![](file_tests.png)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Read/write tests\n",
"\n",
"Read/write tests are file I/O tests. Such tests include `rdwr_cc_write_page_test`, `rdwr_cc_read_page_test`, etc. As before measured times for these tests are normalized against the `ntfs` time (so that the `ntfs` time value becomes 1) and a single aggregate plot is produced.\n",
"\n",
"This allows for easy comparison between file systems across all read/write tests."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"rdwrord = [\"cc_read_page\", \"cc_write_page\", \"nc_read_page\", \"nc_write_page\", \"mmap_read\", \"mmap_write\"]\n",
"sdf = df[df.iter == 500].copy()\n",
"sdf.test = sdf.test.map(lambda x: x.replace(\"rdwr_\", \"\").replace(\"_test\", \"\"))\n",
"sdf = sdf.set_index(\"test\").loc[rdwrord]\n",
"sdf.memfs /= sdf.ntfs; sdf.ntptfs /= sdf.ntfs; sdf.ntfs = 1\n",
"plt.figure(figsize=(10,8), dpi=100, facecolor=\"white\")\n",
"plt.suptitle(\"Read/Write Tests\", fontweight=\"light\", fontsize=20, y=0.95)\n",
"plt.title(\"(Shorter bars are better)\")\n",
"sdf.plot.barh(ax=plt.gca(), y=nameord).invert_yaxis()\n",
"plt.gca().set(ylabel=None)\n",
"for container in plt.gca().containers:\n",
" plt.gca().bar_label(container, fmt=\"%0.2f\", padding=4.0, fontsize=\"xx-small\")\n",
"plt.savefig(\"rdwr_tests.png\")\n",
"#plt.show()\n",
"plt.close()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"![](rdwr_tests.png)"
]
}
],
"metadata": {
"interpreter": {
"hash": "78f203ba605732dcd419e55e4a2fc56c1449fc8b262db510a48272adb5557637"
},
"kernelspec": {
"display_name": "Python 3.9.7 64-bit ('base': conda)",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.12"
},
"orig_nbformat": 4
},
"nbformat": 4,
"nbformat_minor": 2
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

View File

@ -0,0 +1,120 @@
file_create_test,1000,0.06
file_open_test,1000,0.06
file_overwrite_test,1000,0.06
file_attr_test,1000,0.03
file_list_test,1000,0.06
file_list_single_test,1000,0.12
file_list_none_test,1000,0.12
file_delete_test,1000,0.09
file_mkdir_test,1000,0.06
file_rmdir_test,1000,0.08
file_create_test,2000,0.14
file_open_test,2000,0.11
file_overwrite_test,2000,0.14
file_attr_test,2000,0.08
file_list_test,2000,0.16
file_list_single_test,2000,0.30
file_list_none_test,2000,0.25
file_delete_test,2000,0.17
file_mkdir_test,2000,0.14
file_rmdir_test,2000,0.17
file_create_test,3000,0.20
file_open_test,3000,0.16
file_overwrite_test,3000,0.20
file_attr_test,3000,0.12
file_list_test,3000,0.23
file_list_single_test,3000,0.44
file_list_none_test,3000,0.36
file_delete_test,3000,0.25
file_mkdir_test,3000,0.19
file_rmdir_test,3000,0.27
file_create_test,4000,0.28
file_open_test,4000,0.22
file_overwrite_test,4000,0.27
file_attr_test,4000,0.16
file_list_test,4000,0.31
file_list_single_test,4000,0.61
file_list_none_test,4000,0.52
file_delete_test,4000,0.34
file_mkdir_test,4000,0.25
file_rmdir_test,4000,0.36
file_create_test,5000,0.34
file_open_test,5000,0.27
file_overwrite_test,5000,0.33
file_attr_test,5000,0.22
file_list_test,5000,0.42
file_list_single_test,5000,0.80
file_list_none_test,5000,0.66
file_delete_test,5000,0.42
file_mkdir_test,5000,0.31
file_rmdir_test,5000,0.44
iter.file_open_test,10,0.55
iter.file_attr_test,10,0.41
iter.file_list_single_test,10,0.61
iter.file_list_none_test,10,0.61
iter.file_open_test,20,1.08
iter.file_attr_test,20,0.84
iter.file_list_single_test,20,1.25
iter.file_list_none_test,20,1.20
iter.file_open_test,30,1.62
iter.file_attr_test,30,1.30
iter.file_list_single_test,30,1.92
iter.file_list_none_test,30,1.83
iter.file_open_test,40,2.17
iter.file_attr_test,40,1.72
iter.file_list_single_test,40,2.52
iter.file_list_none_test,40,2.42
iter.file_open_test,50,2.77
iter.file_attr_test,50,2.14
iter.file_list_single_test,50,3.12
iter.file_list_none_test,50,2.98
rdwr_cc_write_page_test,100,0.23
rdwr_cc_read_page_test,100,0.23
rdwr_cc_write_large_test,100,0.06
rdwr_cc_read_large_test,100,0.06
rdwr_cc_write_page_test,200,0.45
rdwr_cc_read_page_test,200,0.45
rdwr_cc_write_large_test,200,0.12
rdwr_cc_read_large_test,200,0.11
rdwr_cc_write_page_test,300,0.66
rdwr_cc_read_page_test,300,0.59
rdwr_cc_write_large_test,300,0.19
rdwr_cc_read_large_test,300,0.19
rdwr_cc_write_page_test,400,0.89
rdwr_cc_read_page_test,400,0.86
rdwr_cc_write_large_test,400,0.25
rdwr_cc_read_large_test,400,0.25
rdwr_cc_write_page_test,500,1.11
rdwr_cc_read_page_test,500,0.91
rdwr_cc_write_large_test,500,0.31
rdwr_cc_read_large_test,500,0.25
rdwr_nc_write_page_test,100,1.81
rdwr_nc_read_page_test,100,1.88
rdwr_nc_write_large_test,100,0.14
rdwr_nc_read_large_test,100,0.16
rdwr_nc_write_page_test,200,3.66
rdwr_nc_read_page_test,200,3.77
rdwr_nc_write_large_test,200,0.30
rdwr_nc_read_large_test,200,0.30
rdwr_nc_write_page_test,300,5.42
rdwr_nc_read_page_test,300,5.66
rdwr_nc_write_large_test,300,0.44
rdwr_nc_read_large_test,300,0.47
rdwr_nc_write_page_test,400,7.28
rdwr_nc_read_page_test,400,7.58
rdwr_nc_write_large_test,400,0.58
rdwr_nc_read_large_test,400,0.61
rdwr_nc_write_page_test,500,9.08
rdwr_nc_read_page_test,500,9.56
rdwr_nc_write_large_test,500,0.81
rdwr_nc_read_large_test,500,0.78
mmap_write_test,100,0.01
mmap_read_test,100,0.06
mmap_write_test,200,0.03
mmap_read_test,200,0.11
mmap_write_test,300,0.05
mmap_read_test,300,0.17
mmap_write_test,400,0.05
mmap_read_test,400,0.22
mmap_write_test,500,0.06
mmap_read_test,500,0.27
1 file_create_test 1000 0.06
2 file_open_test 1000 0.06
3 file_overwrite_test 1000 0.06
4 file_attr_test 1000 0.03
5 file_list_test 1000 0.06
6 file_list_single_test 1000 0.12
7 file_list_none_test 1000 0.12
8 file_delete_test 1000 0.09
9 file_mkdir_test 1000 0.06
10 file_rmdir_test 1000 0.08
11 file_create_test 2000 0.14
12 file_open_test 2000 0.11
13 file_overwrite_test 2000 0.14
14 file_attr_test 2000 0.08
15 file_list_test 2000 0.16
16 file_list_single_test 2000 0.30
17 file_list_none_test 2000 0.25
18 file_delete_test 2000 0.17
19 file_mkdir_test 2000 0.14
20 file_rmdir_test 2000 0.17
21 file_create_test 3000 0.20
22 file_open_test 3000 0.16
23 file_overwrite_test 3000 0.20
24 file_attr_test 3000 0.12
25 file_list_test 3000 0.23
26 file_list_single_test 3000 0.44
27 file_list_none_test 3000 0.36
28 file_delete_test 3000 0.25
29 file_mkdir_test 3000 0.19
30 file_rmdir_test 3000 0.27
31 file_create_test 4000 0.28
32 file_open_test 4000 0.22
33 file_overwrite_test 4000 0.27
34 file_attr_test 4000 0.16
35 file_list_test 4000 0.31
36 file_list_single_test 4000 0.61
37 file_list_none_test 4000 0.52
38 file_delete_test 4000 0.34
39 file_mkdir_test 4000 0.25
40 file_rmdir_test 4000 0.36
41 file_create_test 5000 0.34
42 file_open_test 5000 0.27
43 file_overwrite_test 5000 0.33
44 file_attr_test 5000 0.22
45 file_list_test 5000 0.42
46 file_list_single_test 5000 0.80
47 file_list_none_test 5000 0.66
48 file_delete_test 5000 0.42
49 file_mkdir_test 5000 0.31
50 file_rmdir_test 5000 0.44
51 iter.file_open_test 10 0.55
52 iter.file_attr_test 10 0.41
53 iter.file_list_single_test 10 0.61
54 iter.file_list_none_test 10 0.61
55 iter.file_open_test 20 1.08
56 iter.file_attr_test 20 0.84
57 iter.file_list_single_test 20 1.25
58 iter.file_list_none_test 20 1.20
59 iter.file_open_test 30 1.62
60 iter.file_attr_test 30 1.30
61 iter.file_list_single_test 30 1.92
62 iter.file_list_none_test 30 1.83
63 iter.file_open_test 40 2.17
64 iter.file_attr_test 40 1.72
65 iter.file_list_single_test 40 2.52
66 iter.file_list_none_test 40 2.42
67 iter.file_open_test 50 2.77
68 iter.file_attr_test 50 2.14
69 iter.file_list_single_test 50 3.12
70 iter.file_list_none_test 50 2.98
71 rdwr_cc_write_page_test 100 0.23
72 rdwr_cc_read_page_test 100 0.23
73 rdwr_cc_write_large_test 100 0.06
74 rdwr_cc_read_large_test 100 0.06
75 rdwr_cc_write_page_test 200 0.45
76 rdwr_cc_read_page_test 200 0.45
77 rdwr_cc_write_large_test 200 0.12
78 rdwr_cc_read_large_test 200 0.11
79 rdwr_cc_write_page_test 300 0.66
80 rdwr_cc_read_page_test 300 0.59
81 rdwr_cc_write_large_test 300 0.19
82 rdwr_cc_read_large_test 300 0.19
83 rdwr_cc_write_page_test 400 0.89
84 rdwr_cc_read_page_test 400 0.86
85 rdwr_cc_write_large_test 400 0.25
86 rdwr_cc_read_large_test 400 0.25
87 rdwr_cc_write_page_test 500 1.11
88 rdwr_cc_read_page_test 500 0.91
89 rdwr_cc_write_large_test 500 0.31
90 rdwr_cc_read_large_test 500 0.25
91 rdwr_nc_write_page_test 100 1.81
92 rdwr_nc_read_page_test 100 1.88
93 rdwr_nc_write_large_test 100 0.14
94 rdwr_nc_read_large_test 100 0.16
95 rdwr_nc_write_page_test 200 3.66
96 rdwr_nc_read_page_test 200 3.77
97 rdwr_nc_write_large_test 200 0.30
98 rdwr_nc_read_large_test 200 0.30
99 rdwr_nc_write_page_test 300 5.42
100 rdwr_nc_read_page_test 300 5.66
101 rdwr_nc_write_large_test 300 0.44
102 rdwr_nc_read_large_test 300 0.47
103 rdwr_nc_write_page_test 400 7.28
104 rdwr_nc_read_page_test 400 7.58
105 rdwr_nc_write_large_test 400 0.58
106 rdwr_nc_read_large_test 400 0.61
107 rdwr_nc_write_page_test 500 9.08
108 rdwr_nc_read_page_test 500 9.56
109 rdwr_nc_write_large_test 500 0.81
110 rdwr_nc_read_large_test 500 0.78
111 mmap_write_test 100 0.01
112 mmap_read_test 100 0.06
113 mmap_write_test 200 0.03
114 mmap_read_test 200 0.11
115 mmap_write_test 300 0.05
116 mmap_read_test 300 0.17
117 mmap_write_test 400 0.05
118 mmap_read_test 400 0.22
119 mmap_write_test 500 0.06
120 mmap_read_test 500 0.27

View File

@ -0,0 +1,120 @@
file_create_test,1000,0.06
file_open_test,1000,0.05
file_overwrite_test,1000,0.06
file_attr_test,1000,0.03
file_list_test,1000,0.06
file_list_single_test,1000,0.12
file_list_none_test,1000,0.12
file_delete_test,1000,0.08
file_mkdir_test,1000,0.06
file_rmdir_test,1000,0.08
file_create_test,2000,0.14
file_open_test,2000,0.11
file_overwrite_test,2000,0.14
file_attr_test,2000,0.08
file_list_test,2000,0.14
file_list_single_test,2000,0.30
file_list_none_test,2000,0.27
file_delete_test,2000,0.17
file_mkdir_test,2000,0.14
file_rmdir_test,2000,0.17
file_create_test,3000,0.22
file_open_test,3000,0.16
file_overwrite_test,3000,0.20
file_attr_test,3000,0.12
file_list_test,3000,0.23
file_list_single_test,3000,0.47
file_list_none_test,3000,0.38
file_delete_test,3000,0.27
file_mkdir_test,3000,0.20
file_rmdir_test,3000,0.28
file_create_test,4000,0.42
file_open_test,4000,0.25
file_overwrite_test,4000,0.27
file_attr_test,4000,0.17
file_list_test,4000,0.34
file_list_single_test,4000,0.61
file_list_none_test,4000,0.52
file_delete_test,4000,0.34
file_mkdir_test,4000,0.25
file_rmdir_test,4000,0.36
file_create_test,5000,0.36
file_open_test,5000,0.28
file_overwrite_test,5000,0.34
file_attr_test,5000,0.22
file_list_test,5000,0.44
file_list_single_test,5000,0.78
file_list_none_test,5000,0.64
file_delete_test,5000,0.44
file_mkdir_test,5000,0.31
file_rmdir_test,5000,0.45
iter.file_open_test,10,0.55
iter.file_attr_test,10,0.42
iter.file_list_single_test,10,0.66
iter.file_list_none_test,10,0.61
iter.file_open_test,20,1.08
iter.file_attr_test,20,0.86
iter.file_list_single_test,20,1.26
iter.file_list_none_test,20,1.17
iter.file_open_test,30,1.61
iter.file_attr_test,30,1.28
iter.file_list_single_test,30,1.91
iter.file_list_none_test,30,1.81
iter.file_open_test,40,2.17
iter.file_attr_test,40,1.70
iter.file_list_single_test,40,2.61
iter.file_list_none_test,40,2.41
iter.file_open_test,50,2.70
iter.file_attr_test,50,2.09
iter.file_list_single_test,50,3.17
iter.file_list_none_test,50,2.94
rdwr_cc_write_page_test,100,0.23
rdwr_cc_read_page_test,100,0.22
rdwr_cc_write_large_test,100,0.06
rdwr_cc_read_large_test,100,0.06
rdwr_cc_write_page_test,200,0.44
rdwr_cc_read_page_test,200,0.45
rdwr_cc_write_large_test,200,0.12
rdwr_cc_read_large_test,200,0.12
rdwr_cc_write_page_test,300,0.66
rdwr_cc_read_page_test,300,0.64
rdwr_cc_write_large_test,300,0.19
rdwr_cc_read_large_test,300,0.17
rdwr_cc_write_page_test,400,0.87
rdwr_cc_read_page_test,400,0.73
rdwr_cc_write_large_test,400,0.25
rdwr_cc_read_large_test,400,0.31
rdwr_cc_write_page_test,500,1.09
rdwr_cc_read_page_test,500,1.02
rdwr_cc_write_large_test,500,0.31
rdwr_cc_read_large_test,500,0.39
rdwr_nc_write_page_test,100,1.83
rdwr_nc_read_page_test,100,1.86
rdwr_nc_write_large_test,100,0.16
rdwr_nc_read_large_test,100,0.16
rdwr_nc_write_page_test,200,3.61
rdwr_nc_read_page_test,200,3.81
rdwr_nc_write_large_test,200,0.30
rdwr_nc_read_large_test,200,0.31
rdwr_nc_write_page_test,300,5.50
rdwr_nc_read_page_test,300,5.72
rdwr_nc_write_large_test,300,0.44
rdwr_nc_read_large_test,300,0.47
rdwr_nc_write_page_test,400,7.31
rdwr_nc_read_page_test,400,7.45
rdwr_nc_write_large_test,400,0.59
rdwr_nc_read_large_test,400,0.61
rdwr_nc_write_page_test,500,9.00
rdwr_nc_read_page_test,500,9.42
rdwr_nc_write_large_test,500,0.73
rdwr_nc_read_large_test,500,0.77
mmap_write_test,100,0.01
mmap_read_test,100,0.06
mmap_write_test,200,0.03
mmap_read_test,200,0.11
mmap_write_test,300,0.03
mmap_read_test,300,0.16
mmap_write_test,400,0.05
mmap_read_test,400,0.22
mmap_write_test,500,0.06
mmap_read_test,500,0.27
1 file_create_test 1000 0.06
2 file_open_test 1000 0.05
3 file_overwrite_test 1000 0.06
4 file_attr_test 1000 0.03
5 file_list_test 1000 0.06
6 file_list_single_test 1000 0.12
7 file_list_none_test 1000 0.12
8 file_delete_test 1000 0.08
9 file_mkdir_test 1000 0.06
10 file_rmdir_test 1000 0.08
11 file_create_test 2000 0.14
12 file_open_test 2000 0.11
13 file_overwrite_test 2000 0.14
14 file_attr_test 2000 0.08
15 file_list_test 2000 0.14
16 file_list_single_test 2000 0.30
17 file_list_none_test 2000 0.27
18 file_delete_test 2000 0.17
19 file_mkdir_test 2000 0.14
20 file_rmdir_test 2000 0.17
21 file_create_test 3000 0.22
22 file_open_test 3000 0.16
23 file_overwrite_test 3000 0.20
24 file_attr_test 3000 0.12
25 file_list_test 3000 0.23
26 file_list_single_test 3000 0.47
27 file_list_none_test 3000 0.38
28 file_delete_test 3000 0.27
29 file_mkdir_test 3000 0.20
30 file_rmdir_test 3000 0.28
31 file_create_test 4000 0.42
32 file_open_test 4000 0.25
33 file_overwrite_test 4000 0.27
34 file_attr_test 4000 0.17
35 file_list_test 4000 0.34
36 file_list_single_test 4000 0.61
37 file_list_none_test 4000 0.52
38 file_delete_test 4000 0.34
39 file_mkdir_test 4000 0.25
40 file_rmdir_test 4000 0.36
41 file_create_test 5000 0.36
42 file_open_test 5000 0.28
43 file_overwrite_test 5000 0.34
44 file_attr_test 5000 0.22
45 file_list_test 5000 0.44
46 file_list_single_test 5000 0.78
47 file_list_none_test 5000 0.64
48 file_delete_test 5000 0.44
49 file_mkdir_test 5000 0.31
50 file_rmdir_test 5000 0.45
51 iter.file_open_test 10 0.55
52 iter.file_attr_test 10 0.42
53 iter.file_list_single_test 10 0.66
54 iter.file_list_none_test 10 0.61
55 iter.file_open_test 20 1.08
56 iter.file_attr_test 20 0.86
57 iter.file_list_single_test 20 1.26
58 iter.file_list_none_test 20 1.17
59 iter.file_open_test 30 1.61
60 iter.file_attr_test 30 1.28
61 iter.file_list_single_test 30 1.91
62 iter.file_list_none_test 30 1.81
63 iter.file_open_test 40 2.17
64 iter.file_attr_test 40 1.70
65 iter.file_list_single_test 40 2.61
66 iter.file_list_none_test 40 2.41
67 iter.file_open_test 50 2.70
68 iter.file_attr_test 50 2.09
69 iter.file_list_single_test 50 3.17
70 iter.file_list_none_test 50 2.94
71 rdwr_cc_write_page_test 100 0.23
72 rdwr_cc_read_page_test 100 0.22
73 rdwr_cc_write_large_test 100 0.06
74 rdwr_cc_read_large_test 100 0.06
75 rdwr_cc_write_page_test 200 0.44
76 rdwr_cc_read_page_test 200 0.45
77 rdwr_cc_write_large_test 200 0.12
78 rdwr_cc_read_large_test 200 0.12
79 rdwr_cc_write_page_test 300 0.66
80 rdwr_cc_read_page_test 300 0.64
81 rdwr_cc_write_large_test 300 0.19
82 rdwr_cc_read_large_test 300 0.17
83 rdwr_cc_write_page_test 400 0.87
84 rdwr_cc_read_page_test 400 0.73
85 rdwr_cc_write_large_test 400 0.25
86 rdwr_cc_read_large_test 400 0.31
87 rdwr_cc_write_page_test 500 1.09
88 rdwr_cc_read_page_test 500 1.02
89 rdwr_cc_write_large_test 500 0.31
90 rdwr_cc_read_large_test 500 0.39
91 rdwr_nc_write_page_test 100 1.83
92 rdwr_nc_read_page_test 100 1.86
93 rdwr_nc_write_large_test 100 0.16
94 rdwr_nc_read_large_test 100 0.16
95 rdwr_nc_write_page_test 200 3.61
96 rdwr_nc_read_page_test 200 3.81
97 rdwr_nc_write_large_test 200 0.30
98 rdwr_nc_read_large_test 200 0.31
99 rdwr_nc_write_page_test 300 5.50
100 rdwr_nc_read_page_test 300 5.72
101 rdwr_nc_write_large_test 300 0.44
102 rdwr_nc_read_large_test 300 0.47
103 rdwr_nc_write_page_test 400 7.31
104 rdwr_nc_read_page_test 400 7.45
105 rdwr_nc_write_large_test 400 0.59
106 rdwr_nc_read_large_test 400 0.61
107 rdwr_nc_write_page_test 500 9.00
108 rdwr_nc_read_page_test 500 9.42
109 rdwr_nc_write_large_test 500 0.73
110 rdwr_nc_read_large_test 500 0.77
111 mmap_write_test 100 0.01
112 mmap_read_test 100 0.06
113 mmap_write_test 200 0.03
114 mmap_read_test 200 0.11
115 mmap_write_test 300 0.03
116 mmap_read_test 300 0.16
117 mmap_write_test 400 0.05
118 mmap_read_test 400 0.22
119 mmap_write_test 500 0.06
120 mmap_read_test 500 0.27

View File

@ -0,0 +1,120 @@
file_create_test,1000,0.06
file_open_test,1000,0.05
file_overwrite_test,1000,0.06
file_attr_test,1000,0.03
file_list_test,1000,0.05
file_list_single_test,1000,0.14
file_list_none_test,1000,0.12
file_delete_test,1000,0.08
file_mkdir_test,1000,0.06
file_rmdir_test,1000,0.08
file_create_test,2000,0.14
file_open_test,2000,0.11
file_overwrite_test,2000,0.14
file_attr_test,2000,0.09
file_list_test,2000,0.14
file_list_single_test,2000,0.28
file_list_none_test,2000,0.25
file_delete_test,2000,0.17
file_mkdir_test,2000,0.12
file_rmdir_test,2000,0.17
file_create_test,3000,0.20
file_open_test,3000,0.17
file_overwrite_test,3000,0.20
file_attr_test,3000,0.14
file_list_test,3000,0.25
file_list_single_test,3000,0.44
file_list_none_test,3000,0.36
file_delete_test,3000,0.27
file_mkdir_test,3000,0.19
file_rmdir_test,3000,0.27
file_create_test,4000,0.28
file_open_test,4000,0.22
file_overwrite_test,4000,0.28
file_attr_test,4000,0.17
file_list_test,4000,0.33
file_list_single_test,4000,0.59
file_list_none_test,4000,0.50
file_delete_test,4000,0.34
file_mkdir_test,4000,0.27
file_rmdir_test,4000,0.36
file_create_test,5000,0.37
file_open_test,5000,0.27
file_overwrite_test,5000,0.36
file_attr_test,5000,0.22
file_list_test,5000,0.42
file_list_single_test,5000,0.75
file_list_none_test,5000,0.62
file_delete_test,5000,0.48
file_mkdir_test,5000,0.34
file_rmdir_test,5000,0.45
iter.file_open_test,10,0.53
iter.file_attr_test,10,0.42
iter.file_list_single_test,10,0.61
iter.file_list_none_test,10,0.61
iter.file_open_test,20,1.08
iter.file_attr_test,20,0.81
iter.file_list_single_test,20,1.20
iter.file_list_none_test,20,1.16
iter.file_open_test,30,1.61
iter.file_attr_test,30,1.25
iter.file_list_single_test,30,1.88
iter.file_list_none_test,30,1.81
iter.file_open_test,40,2.14
iter.file_attr_test,40,1.91
iter.file_list_single_test,40,2.66
iter.file_list_none_test,40,2.48
iter.file_open_test,50,2.73
iter.file_attr_test,50,2.14
iter.file_list_single_test,50,3.16
iter.file_list_none_test,50,3.08
rdwr_cc_write_page_test,100,0.23
rdwr_cc_read_page_test,100,0.22
rdwr_cc_write_large_test,100,0.06
rdwr_cc_read_large_test,100,0.06
rdwr_cc_write_page_test,200,0.45
rdwr_cc_read_page_test,200,0.41
rdwr_cc_write_large_test,200,0.12
rdwr_cc_read_large_test,200,0.11
rdwr_cc_write_page_test,300,0.67
rdwr_cc_read_page_test,300,0.62
rdwr_cc_write_large_test,300,0.19
rdwr_cc_read_large_test,300,0.23
rdwr_cc_write_page_test,400,0.87
rdwr_cc_read_page_test,400,0.94
rdwr_cc_write_large_test,400,0.25
rdwr_cc_read_large_test,400,0.33
rdwr_cc_write_page_test,500,1.09
rdwr_cc_read_page_test,500,1.12
rdwr_cc_write_large_test,500,0.31
rdwr_cc_read_large_test,500,0.44
rdwr_nc_write_page_test,100,1.86
rdwr_nc_read_page_test,100,1.94
rdwr_nc_write_large_test,100,0.16
rdwr_nc_read_large_test,100,0.16
rdwr_nc_write_page_test,200,3.66
rdwr_nc_read_page_test,200,3.83
rdwr_nc_write_large_test,200,0.28
rdwr_nc_read_large_test,200,0.30
rdwr_nc_write_page_test,300,5.42
rdwr_nc_read_page_test,300,5.86
rdwr_nc_write_large_test,300,0.45
rdwr_nc_read_large_test,300,0.45
rdwr_nc_write_page_test,400,7.36
rdwr_nc_read_page_test,400,7.56
rdwr_nc_write_large_test,400,0.58
rdwr_nc_read_large_test,400,0.61
rdwr_nc_write_page_test,500,9.09
rdwr_nc_read_page_test,500,9.45
rdwr_nc_write_large_test,500,0.73
rdwr_nc_read_large_test,500,0.75
mmap_write_test,100,0.01
mmap_read_test,100,0.06
mmap_write_test,200,0.03
mmap_read_test,200,0.11
mmap_write_test,300,0.05
mmap_read_test,300,0.16
mmap_write_test,400,0.05
mmap_read_test,400,0.22
mmap_write_test,500,0.06
mmap_read_test,500,0.27
1 file_create_test 1000 0.06
2 file_open_test 1000 0.05
3 file_overwrite_test 1000 0.06
4 file_attr_test 1000 0.03
5 file_list_test 1000 0.05
6 file_list_single_test 1000 0.14
7 file_list_none_test 1000 0.12
8 file_delete_test 1000 0.08
9 file_mkdir_test 1000 0.06
10 file_rmdir_test 1000 0.08
11 file_create_test 2000 0.14
12 file_open_test 2000 0.11
13 file_overwrite_test 2000 0.14
14 file_attr_test 2000 0.09
15 file_list_test 2000 0.14
16 file_list_single_test 2000 0.28
17 file_list_none_test 2000 0.25
18 file_delete_test 2000 0.17
19 file_mkdir_test 2000 0.12
20 file_rmdir_test 2000 0.17
21 file_create_test 3000 0.20
22 file_open_test 3000 0.17
23 file_overwrite_test 3000 0.20
24 file_attr_test 3000 0.14
25 file_list_test 3000 0.25
26 file_list_single_test 3000 0.44
27 file_list_none_test 3000 0.36
28 file_delete_test 3000 0.27
29 file_mkdir_test 3000 0.19
30 file_rmdir_test 3000 0.27
31 file_create_test 4000 0.28
32 file_open_test 4000 0.22
33 file_overwrite_test 4000 0.28
34 file_attr_test 4000 0.17
35 file_list_test 4000 0.33
36 file_list_single_test 4000 0.59
37 file_list_none_test 4000 0.50
38 file_delete_test 4000 0.34
39 file_mkdir_test 4000 0.27
40 file_rmdir_test 4000 0.36
41 file_create_test 5000 0.37
42 file_open_test 5000 0.27
43 file_overwrite_test 5000 0.36
44 file_attr_test 5000 0.22
45 file_list_test 5000 0.42
46 file_list_single_test 5000 0.75
47 file_list_none_test 5000 0.62
48 file_delete_test 5000 0.48
49 file_mkdir_test 5000 0.34
50 file_rmdir_test 5000 0.45
51 iter.file_open_test 10 0.53
52 iter.file_attr_test 10 0.42
53 iter.file_list_single_test 10 0.61
54 iter.file_list_none_test 10 0.61
55 iter.file_open_test 20 1.08
56 iter.file_attr_test 20 0.81
57 iter.file_list_single_test 20 1.20
58 iter.file_list_none_test 20 1.16
59 iter.file_open_test 30 1.61
60 iter.file_attr_test 30 1.25
61 iter.file_list_single_test 30 1.88
62 iter.file_list_none_test 30 1.81
63 iter.file_open_test 40 2.14
64 iter.file_attr_test 40 1.91
65 iter.file_list_single_test 40 2.66
66 iter.file_list_none_test 40 2.48
67 iter.file_open_test 50 2.73
68 iter.file_attr_test 50 2.14
69 iter.file_list_single_test 50 3.16
70 iter.file_list_none_test 50 3.08
71 rdwr_cc_write_page_test 100 0.23
72 rdwr_cc_read_page_test 100 0.22
73 rdwr_cc_write_large_test 100 0.06
74 rdwr_cc_read_large_test 100 0.06
75 rdwr_cc_write_page_test 200 0.45
76 rdwr_cc_read_page_test 200 0.41
77 rdwr_cc_write_large_test 200 0.12
78 rdwr_cc_read_large_test 200 0.11
79 rdwr_cc_write_page_test 300 0.67
80 rdwr_cc_read_page_test 300 0.62
81 rdwr_cc_write_large_test 300 0.19
82 rdwr_cc_read_large_test 300 0.23
83 rdwr_cc_write_page_test 400 0.87
84 rdwr_cc_read_page_test 400 0.94
85 rdwr_cc_write_large_test 400 0.25
86 rdwr_cc_read_large_test 400 0.33
87 rdwr_cc_write_page_test 500 1.09
88 rdwr_cc_read_page_test 500 1.12
89 rdwr_cc_write_large_test 500 0.31
90 rdwr_cc_read_large_test 500 0.44
91 rdwr_nc_write_page_test 100 1.86
92 rdwr_nc_read_page_test 100 1.94
93 rdwr_nc_write_large_test 100 0.16
94 rdwr_nc_read_large_test 100 0.16
95 rdwr_nc_write_page_test 200 3.66
96 rdwr_nc_read_page_test 200 3.83
97 rdwr_nc_write_large_test 200 0.28
98 rdwr_nc_read_large_test 200 0.30
99 rdwr_nc_write_page_test 300 5.42
100 rdwr_nc_read_page_test 300 5.86
101 rdwr_nc_write_large_test 300 0.45
102 rdwr_nc_read_large_test 300 0.45
103 rdwr_nc_write_page_test 400 7.36
104 rdwr_nc_read_page_test 400 7.56
105 rdwr_nc_write_large_test 400 0.58
106 rdwr_nc_read_large_test 400 0.61
107 rdwr_nc_write_page_test 500 9.09
108 rdwr_nc_read_page_test 500 9.45
109 rdwr_nc_write_large_test 500 0.73
110 rdwr_nc_read_large_test 500 0.75
111 mmap_write_test 100 0.01
112 mmap_read_test 100 0.06
113 mmap_write_test 200 0.03
114 mmap_read_test 200 0.11
115 mmap_write_test 300 0.05
116 mmap_read_test 300 0.16
117 mmap_write_test 400 0.05
118 mmap_read_test 400 0.22
119 mmap_write_test 500 0.06
120 mmap_read_test 500 0.27

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

View File

@ -0,0 +1,120 @@
file_create_test,1000,0.20
file_open_test,1000,0.09
file_overwrite_test,1000,0.16
file_attr_test,1000,0.08
file_list_test,1000,0.11
file_list_single_test,1000,0.08
file_list_none_test,1000,0.03
file_delete_test,1000,0.14
file_mkdir_test,1000,0.14
file_rmdir_test,1000,0.12
file_create_test,2000,0.45
file_open_test,2000,0.19
file_overwrite_test,2000,0.38
file_attr_test,2000,0.17
file_list_test,2000,0.22
file_list_single_test,2000,0.16
file_list_none_test,2000,0.06
file_delete_test,2000,0.31
file_mkdir_test,2000,0.30
file_rmdir_test,2000,0.28
file_create_test,3000,0.64
file_open_test,3000,0.28
file_overwrite_test,3000,0.55
file_attr_test,3000,0.25
file_list_test,3000,0.36
file_list_single_test,3000,0.25
file_list_none_test,3000,0.08
file_delete_test,3000,0.50
file_mkdir_test,3000,0.47
file_rmdir_test,3000,0.42
file_create_test,4000,0.83
file_open_test,4000,0.36
file_overwrite_test,4000,0.73
file_attr_test,4000,0.33
file_list_test,4000,0.45
file_list_single_test,4000,0.33
file_list_none_test,4000,0.11
file_delete_test,4000,0.64
file_mkdir_test,4000,0.64
file_rmdir_test,4000,0.53
file_create_test,5000,1.03
file_open_test,5000,0.44
file_overwrite_test,5000,0.92
file_attr_test,5000,0.38
file_list_test,5000,0.56
file_list_single_test,5000,0.39
file_list_none_test,5000,0.14
file_delete_test,5000,0.80
file_mkdir_test,5000,0.73
file_rmdir_test,5000,0.64
iter.file_open_test,10,0.25
iter.file_attr_test,10,0.19
iter.file_list_single_test,10,0.34
iter.file_list_none_test,10,0.27
iter.file_open_test,20,0.42
iter.file_attr_test,20,0.33
iter.file_list_single_test,20,0.59
iter.file_list_none_test,20,0.53
iter.file_open_test,30,0.64
iter.file_attr_test,30,0.50
iter.file_list_single_test,30,0.95
iter.file_list_none_test,30,0.77
iter.file_open_test,40,0.78
iter.file_attr_test,40,0.61
iter.file_list_single_test,40,1.19
iter.file_list_none_test,40,1.03
iter.file_open_test,50,0.98
iter.file_attr_test,50,0.73
iter.file_list_single_test,50,1.47
iter.file_list_none_test,50,1.27
rdwr_cc_write_page_test,100,0.28
rdwr_cc_read_page_test,100,0.27
rdwr_cc_write_large_test,100,0.08
rdwr_cc_read_large_test,100,0.09
rdwr_cc_write_page_test,200,0.56
rdwr_cc_read_page_test,200,0.47
rdwr_cc_write_large_test,200,0.16
rdwr_cc_read_large_test,200,0.20
rdwr_cc_write_page_test,300,0.86
rdwr_cc_read_page_test,300,0.73
rdwr_cc_write_large_test,300,0.23
rdwr_cc_read_large_test,300,0.25
rdwr_cc_write_page_test,400,1.11
rdwr_cc_read_page_test,400,0.95
rdwr_cc_write_large_test,400,0.30
rdwr_cc_read_large_test,400,0.30
rdwr_cc_write_page_test,500,1.39
rdwr_cc_read_page_test,500,1.16
rdwr_cc_write_large_test,500,0.39
rdwr_cc_read_large_test,500,0.33
rdwr_nc_write_page_test,100,4.94
rdwr_nc_read_page_test,100,4.55
rdwr_nc_write_large_test,100,0.48
rdwr_nc_read_large_test,100,0.58
rdwr_nc_write_page_test,200,9.84
rdwr_nc_read_page_test,200,9.17
rdwr_nc_write_large_test,200,0.98
rdwr_nc_read_large_test,200,1.14
rdwr_nc_write_page_test,300,14.62
rdwr_nc_read_page_test,300,13.78
rdwr_nc_write_large_test,300,1.42
rdwr_nc_read_large_test,300,1.74
rdwr_nc_write_page_test,400,19.27
rdwr_nc_read_page_test,400,17.14
rdwr_nc_write_large_test,400,1.89
rdwr_nc_read_large_test,400,2.78
rdwr_nc_write_page_test,500,23.80
rdwr_nc_read_page_test,500,21.61
rdwr_nc_write_large_test,500,2.28
rdwr_nc_read_large_test,500,3.98
mmap_write_test,100,0.01
mmap_read_test,100,0.08
mmap_write_test,200,0.03
mmap_read_test,200,0.12
mmap_write_test,300,0.05
mmap_read_test,300,0.17
mmap_write_test,400,0.05
mmap_read_test,400,0.22
mmap_write_test,500,0.06
mmap_read_test,500,0.27
1 file_create_test 1000 0.20
2 file_open_test 1000 0.09
3 file_overwrite_test 1000 0.16
4 file_attr_test 1000 0.08
5 file_list_test 1000 0.11
6 file_list_single_test 1000 0.08
7 file_list_none_test 1000 0.03
8 file_delete_test 1000 0.14
9 file_mkdir_test 1000 0.14
10 file_rmdir_test 1000 0.12
11 file_create_test 2000 0.45
12 file_open_test 2000 0.19
13 file_overwrite_test 2000 0.38
14 file_attr_test 2000 0.17
15 file_list_test 2000 0.22
16 file_list_single_test 2000 0.16
17 file_list_none_test 2000 0.06
18 file_delete_test 2000 0.31
19 file_mkdir_test 2000 0.30
20 file_rmdir_test 2000 0.28
21 file_create_test 3000 0.64
22 file_open_test 3000 0.28
23 file_overwrite_test 3000 0.55
24 file_attr_test 3000 0.25
25 file_list_test 3000 0.36
26 file_list_single_test 3000 0.25
27 file_list_none_test 3000 0.08
28 file_delete_test 3000 0.50
29 file_mkdir_test 3000 0.47
30 file_rmdir_test 3000 0.42
31 file_create_test 4000 0.83
32 file_open_test 4000 0.36
33 file_overwrite_test 4000 0.73
34 file_attr_test 4000 0.33
35 file_list_test 4000 0.45
36 file_list_single_test 4000 0.33
37 file_list_none_test 4000 0.11
38 file_delete_test 4000 0.64
39 file_mkdir_test 4000 0.64
40 file_rmdir_test 4000 0.53
41 file_create_test 5000 1.03
42 file_open_test 5000 0.44
43 file_overwrite_test 5000 0.92
44 file_attr_test 5000 0.38
45 file_list_test 5000 0.56
46 file_list_single_test 5000 0.39
47 file_list_none_test 5000 0.14
48 file_delete_test 5000 0.80
49 file_mkdir_test 5000 0.73
50 file_rmdir_test 5000 0.64
51 iter.file_open_test 10 0.25
52 iter.file_attr_test 10 0.19
53 iter.file_list_single_test 10 0.34
54 iter.file_list_none_test 10 0.27
55 iter.file_open_test 20 0.42
56 iter.file_attr_test 20 0.33
57 iter.file_list_single_test 20 0.59
58 iter.file_list_none_test 20 0.53
59 iter.file_open_test 30 0.64
60 iter.file_attr_test 30 0.50
61 iter.file_list_single_test 30 0.95
62 iter.file_list_none_test 30 0.77
63 iter.file_open_test 40 0.78
64 iter.file_attr_test 40 0.61
65 iter.file_list_single_test 40 1.19
66 iter.file_list_none_test 40 1.03
67 iter.file_open_test 50 0.98
68 iter.file_attr_test 50 0.73
69 iter.file_list_single_test 50 1.47
70 iter.file_list_none_test 50 1.27
71 rdwr_cc_write_page_test 100 0.28
72 rdwr_cc_read_page_test 100 0.27
73 rdwr_cc_write_large_test 100 0.08
74 rdwr_cc_read_large_test 100 0.09
75 rdwr_cc_write_page_test 200 0.56
76 rdwr_cc_read_page_test 200 0.47
77 rdwr_cc_write_large_test 200 0.16
78 rdwr_cc_read_large_test 200 0.20
79 rdwr_cc_write_page_test 300 0.86
80 rdwr_cc_read_page_test 300 0.73
81 rdwr_cc_write_large_test 300 0.23
82 rdwr_cc_read_large_test 300 0.25
83 rdwr_cc_write_page_test 400 1.11
84 rdwr_cc_read_page_test 400 0.95
85 rdwr_cc_write_large_test 400 0.30
86 rdwr_cc_read_large_test 400 0.30
87 rdwr_cc_write_page_test 500 1.39
88 rdwr_cc_read_page_test 500 1.16
89 rdwr_cc_write_large_test 500 0.39
90 rdwr_cc_read_large_test 500 0.33
91 rdwr_nc_write_page_test 100 4.94
92 rdwr_nc_read_page_test 100 4.55
93 rdwr_nc_write_large_test 100 0.48
94 rdwr_nc_read_large_test 100 0.58
95 rdwr_nc_write_page_test 200 9.84
96 rdwr_nc_read_page_test 200 9.17
97 rdwr_nc_write_large_test 200 0.98
98 rdwr_nc_read_large_test 200 1.14
99 rdwr_nc_write_page_test 300 14.62
100 rdwr_nc_read_page_test 300 13.78
101 rdwr_nc_write_large_test 300 1.42
102 rdwr_nc_read_large_test 300 1.74
103 rdwr_nc_write_page_test 400 19.27
104 rdwr_nc_read_page_test 400 17.14
105 rdwr_nc_write_large_test 400 1.89
106 rdwr_nc_read_large_test 400 2.78
107 rdwr_nc_write_page_test 500 23.80
108 rdwr_nc_read_page_test 500 21.61
109 rdwr_nc_write_large_test 500 2.28
110 rdwr_nc_read_large_test 500 3.98
111 mmap_write_test 100 0.01
112 mmap_read_test 100 0.08
113 mmap_write_test 200 0.03
114 mmap_read_test 200 0.12
115 mmap_write_test 300 0.05
116 mmap_read_test 300 0.17
117 mmap_write_test 400 0.05
118 mmap_read_test 400 0.22
119 mmap_write_test 500 0.06
120 mmap_read_test 500 0.27

View File

@ -0,0 +1,120 @@
file_create_test,1000,0.20
file_open_test,1000,0.09
file_overwrite_test,1000,0.17
file_attr_test,1000,0.08
file_list_test,1000,0.11
file_list_single_test,1000,0.08
file_list_none_test,1000,0.03
file_delete_test,1000,0.16
file_mkdir_test,1000,0.14
file_rmdir_test,1000,0.12
file_create_test,2000,0.42
file_open_test,2000,0.19
file_overwrite_test,2000,0.41
file_attr_test,2000,0.17
file_list_test,2000,0.22
file_list_single_test,2000,0.17
file_list_none_test,2000,0.06
file_delete_test,2000,0.34
file_mkdir_test,2000,0.33
file_rmdir_test,2000,0.28
file_create_test,3000,0.66
file_open_test,3000,0.30
file_overwrite_test,3000,0.59
file_attr_test,3000,0.27
file_list_test,3000,0.36
file_list_single_test,3000,0.28
file_list_none_test,3000,0.09
file_delete_test,3000,0.52
file_mkdir_test,3000,0.48
file_rmdir_test,3000,0.41
file_create_test,4000,0.89
file_open_test,4000,0.36
file_overwrite_test,4000,0.72
file_attr_test,4000,0.34
file_list_test,4000,0.47
file_list_single_test,4000,0.33
file_list_none_test,4000,0.11
file_delete_test,4000,0.66
file_mkdir_test,4000,0.61
file_rmdir_test,4000,0.56
file_create_test,5000,1.01
file_open_test,5000,0.44
file_overwrite_test,5000,0.89
file_attr_test,5000,0.39
file_list_test,5000,0.56
file_list_single_test,5000,0.39
file_list_none_test,5000,0.14
file_delete_test,5000,0.78
file_mkdir_test,5000,0.73
file_rmdir_test,5000,0.64
iter.file_open_test,10,0.25
iter.file_attr_test,10,0.19
iter.file_list_single_test,10,0.33
iter.file_list_none_test,10,0.25
iter.file_open_test,20,0.44
iter.file_attr_test,20,0.33
iter.file_list_single_test,20,0.61
iter.file_list_none_test,20,0.52
iter.file_open_test,30,0.59
iter.file_attr_test,30,0.47
iter.file_list_single_test,30,0.89
iter.file_list_none_test,30,0.81
iter.file_open_test,40,0.84
iter.file_attr_test,40,0.67
iter.file_list_single_test,40,1.17
iter.file_list_none_test,40,1.00
iter.file_open_test,50,0.97
iter.file_attr_test,50,0.73
iter.file_list_single_test,50,1.45
iter.file_list_none_test,50,1.28
rdwr_cc_write_page_test,100,0.25
rdwr_cc_read_page_test,100,0.23
rdwr_cc_write_large_test,100,0.06
rdwr_cc_read_large_test,100,0.08
rdwr_cc_write_page_test,200,0.50
rdwr_cc_read_page_test,200,0.45
rdwr_cc_write_large_test,200,0.12
rdwr_cc_read_large_test,200,0.14
rdwr_cc_write_page_test,300,0.73
rdwr_cc_read_page_test,300,0.70
rdwr_cc_write_large_test,300,0.19
rdwr_cc_read_large_test,300,0.25
rdwr_cc_write_page_test,400,0.98
rdwr_cc_read_page_test,400,0.91
rdwr_cc_write_large_test,400,0.27
rdwr_cc_read_large_test,400,0.34
rdwr_cc_write_page_test,500,1.22
rdwr_cc_read_page_test,500,1.14
rdwr_cc_write_large_test,500,0.33
rdwr_cc_read_large_test,500,0.30
rdwr_nc_write_page_test,100,4.78
rdwr_nc_read_page_test,100,4.28
rdwr_nc_write_large_test,100,0.48
rdwr_nc_read_large_test,100,0.59
rdwr_nc_write_page_test,200,9.44
rdwr_nc_read_page_test,200,8.78
rdwr_nc_write_large_test,200,0.94
rdwr_nc_read_large_test,200,1.16
rdwr_nc_write_page_test,300,14.53
rdwr_nc_read_page_test,300,13.44
rdwr_nc_write_large_test,300,1.50
rdwr_nc_read_large_test,300,1.73
rdwr_nc_write_page_test,400,19.16
rdwr_nc_read_page_test,400,17.14
rdwr_nc_write_large_test,400,1.86
rdwr_nc_read_large_test,400,2.66
rdwr_nc_write_page_test,500,23.55
rdwr_nc_read_page_test,500,21.91
rdwr_nc_write_large_test,500,2.39
rdwr_nc_read_large_test,500,3.36
mmap_write_test,100,0.01
mmap_read_test,100,0.06
mmap_write_test,200,0.03
mmap_read_test,200,0.12
mmap_write_test,300,0.05
mmap_read_test,300,0.19
mmap_write_test,400,0.05
mmap_read_test,400,0.23
mmap_write_test,500,0.08
mmap_read_test,500,0.28
1 file_create_test 1000 0.20
2 file_open_test 1000 0.09
3 file_overwrite_test 1000 0.17
4 file_attr_test 1000 0.08
5 file_list_test 1000 0.11
6 file_list_single_test 1000 0.08
7 file_list_none_test 1000 0.03
8 file_delete_test 1000 0.16
9 file_mkdir_test 1000 0.14
10 file_rmdir_test 1000 0.12
11 file_create_test 2000 0.42
12 file_open_test 2000 0.19
13 file_overwrite_test 2000 0.41
14 file_attr_test 2000 0.17
15 file_list_test 2000 0.22
16 file_list_single_test 2000 0.17
17 file_list_none_test 2000 0.06
18 file_delete_test 2000 0.34
19 file_mkdir_test 2000 0.33
20 file_rmdir_test 2000 0.28
21 file_create_test 3000 0.66
22 file_open_test 3000 0.30
23 file_overwrite_test 3000 0.59
24 file_attr_test 3000 0.27
25 file_list_test 3000 0.36
26 file_list_single_test 3000 0.28
27 file_list_none_test 3000 0.09
28 file_delete_test 3000 0.52
29 file_mkdir_test 3000 0.48
30 file_rmdir_test 3000 0.41
31 file_create_test 4000 0.89
32 file_open_test 4000 0.36
33 file_overwrite_test 4000 0.72
34 file_attr_test 4000 0.34
35 file_list_test 4000 0.47
36 file_list_single_test 4000 0.33
37 file_list_none_test 4000 0.11
38 file_delete_test 4000 0.66
39 file_mkdir_test 4000 0.61
40 file_rmdir_test 4000 0.56
41 file_create_test 5000 1.01
42 file_open_test 5000 0.44
43 file_overwrite_test 5000 0.89
44 file_attr_test 5000 0.39
45 file_list_test 5000 0.56
46 file_list_single_test 5000 0.39
47 file_list_none_test 5000 0.14
48 file_delete_test 5000 0.78
49 file_mkdir_test 5000 0.73
50 file_rmdir_test 5000 0.64
51 iter.file_open_test 10 0.25
52 iter.file_attr_test 10 0.19
53 iter.file_list_single_test 10 0.33
54 iter.file_list_none_test 10 0.25
55 iter.file_open_test 20 0.44
56 iter.file_attr_test 20 0.33
57 iter.file_list_single_test 20 0.61
58 iter.file_list_none_test 20 0.52
59 iter.file_open_test 30 0.59
60 iter.file_attr_test 30 0.47
61 iter.file_list_single_test 30 0.89
62 iter.file_list_none_test 30 0.81
63 iter.file_open_test 40 0.84
64 iter.file_attr_test 40 0.67
65 iter.file_list_single_test 40 1.17
66 iter.file_list_none_test 40 1.00
67 iter.file_open_test 50 0.97
68 iter.file_attr_test 50 0.73
69 iter.file_list_single_test 50 1.45
70 iter.file_list_none_test 50 1.28
71 rdwr_cc_write_page_test 100 0.25
72 rdwr_cc_read_page_test 100 0.23
73 rdwr_cc_write_large_test 100 0.06
74 rdwr_cc_read_large_test 100 0.08
75 rdwr_cc_write_page_test 200 0.50
76 rdwr_cc_read_page_test 200 0.45
77 rdwr_cc_write_large_test 200 0.12
78 rdwr_cc_read_large_test 200 0.14
79 rdwr_cc_write_page_test 300 0.73
80 rdwr_cc_read_page_test 300 0.70
81 rdwr_cc_write_large_test 300 0.19
82 rdwr_cc_read_large_test 300 0.25
83 rdwr_cc_write_page_test 400 0.98
84 rdwr_cc_read_page_test 400 0.91
85 rdwr_cc_write_large_test 400 0.27
86 rdwr_cc_read_large_test 400 0.34
87 rdwr_cc_write_page_test 500 1.22
88 rdwr_cc_read_page_test 500 1.14
89 rdwr_cc_write_large_test 500 0.33
90 rdwr_cc_read_large_test 500 0.30
91 rdwr_nc_write_page_test 100 4.78
92 rdwr_nc_read_page_test 100 4.28
93 rdwr_nc_write_large_test 100 0.48
94 rdwr_nc_read_large_test 100 0.59
95 rdwr_nc_write_page_test 200 9.44
96 rdwr_nc_read_page_test 200 8.78
97 rdwr_nc_write_large_test 200 0.94
98 rdwr_nc_read_large_test 200 1.16
99 rdwr_nc_write_page_test 300 14.53
100 rdwr_nc_read_page_test 300 13.44
101 rdwr_nc_write_large_test 300 1.50
102 rdwr_nc_read_large_test 300 1.73
103 rdwr_nc_write_page_test 400 19.16
104 rdwr_nc_read_page_test 400 17.14
105 rdwr_nc_write_large_test 400 1.86
106 rdwr_nc_read_large_test 400 2.66
107 rdwr_nc_write_page_test 500 23.55
108 rdwr_nc_read_page_test 500 21.91
109 rdwr_nc_write_large_test 500 2.39
110 rdwr_nc_read_large_test 500 3.36
111 mmap_write_test 100 0.01
112 mmap_read_test 100 0.06
113 mmap_write_test 200 0.03
114 mmap_read_test 200 0.12
115 mmap_write_test 300 0.05
116 mmap_read_test 300 0.19
117 mmap_write_test 400 0.05
118 mmap_read_test 400 0.23
119 mmap_write_test 500 0.08
120 mmap_read_test 500 0.28

View File

@ -0,0 +1,120 @@
file_create_test,1000,0.20
file_open_test,1000,0.09
file_overwrite_test,1000,0.17
file_attr_test,1000,0.08
file_list_test,1000,0.11
file_list_single_test,1000,0.08
file_list_none_test,1000,0.03
file_delete_test,1000,0.14
file_mkdir_test,1000,0.14
file_rmdir_test,1000,0.14
file_create_test,2000,0.42
file_open_test,2000,0.19
file_overwrite_test,2000,0.38
file_attr_test,2000,0.19
file_list_test,2000,0.23
file_list_single_test,2000,0.17
file_list_none_test,2000,0.06
file_delete_test,2000,0.33
file_mkdir_test,2000,0.30
file_rmdir_test,2000,0.27
file_create_test,3000,0.64
file_open_test,3000,0.30
file_overwrite_test,3000,0.59
file_attr_test,3000,0.25
file_list_test,3000,0.36
file_list_single_test,3000,0.27
file_list_none_test,3000,0.08
file_delete_test,3000,0.48
file_mkdir_test,3000,0.47
file_rmdir_test,3000,0.42
file_create_test,4000,0.86
file_open_test,4000,0.38
file_overwrite_test,4000,0.73
file_attr_test,4000,0.33
file_list_test,4000,0.48
file_list_single_test,4000,0.33
file_list_none_test,4000,0.11
file_delete_test,4000,0.64
file_mkdir_test,4000,0.62
file_rmdir_test,4000,0.52
file_create_test,5000,1.03
file_open_test,5000,0.44
file_overwrite_test,5000,0.92
file_attr_test,5000,0.38
file_list_test,5000,0.58
file_list_single_test,5000,0.38
file_list_none_test,5000,0.14
file_delete_test,5000,0.80
file_mkdir_test,5000,0.73
file_rmdir_test,5000,0.69
iter.file_open_test,10,0.25
iter.file_attr_test,10,0.19
iter.file_list_single_test,10,0.33
iter.file_list_none_test,10,0.26
iter.file_open_test,20,0.44
iter.file_attr_test,20,0.34
iter.file_list_single_test,20,0.61
iter.file_list_none_test,20,0.52
iter.file_open_test,30,0.61
iter.file_attr_test,30,0.48
iter.file_list_single_test,30,0.88
iter.file_list_none_test,30,0.78
iter.file_open_test,40,0.77
iter.file_attr_test,40,0.61
iter.file_list_single_test,40,1.19
iter.file_list_none_test,40,1.03
iter.file_open_test,50,0.95
iter.file_attr_test,50,0.73
iter.file_list_single_test,50,1.42
iter.file_list_none_test,50,1.28
rdwr_cc_write_page_test,100,0.25
rdwr_cc_read_page_test,100,0.23
rdwr_cc_write_large_test,100,0.08
rdwr_cc_read_large_test,100,0.08
rdwr_cc_write_page_test,200,0.48
rdwr_cc_read_page_test,200,0.45
rdwr_cc_write_large_test,200,0.12
rdwr_cc_read_large_test,200,0.17
rdwr_cc_write_page_test,300,0.73
rdwr_cc_read_page_test,300,0.61
rdwr_cc_write_large_test,300,0.19
rdwr_cc_read_large_test,300,0.23
rdwr_cc_write_page_test,400,0.97
rdwr_cc_read_page_test,400,0.88
rdwr_cc_write_large_test,400,0.27
rdwr_cc_read_large_test,400,0.33
rdwr_cc_write_page_test,500,1.20
rdwr_cc_read_page_test,500,1.14
rdwr_cc_write_large_test,500,0.31
rdwr_cc_read_large_test,500,0.39
rdwr_nc_write_page_test,100,4.76
rdwr_nc_read_page_test,100,4.24
rdwr_nc_write_large_test,100,0.47
rdwr_nc_read_large_test,100,0.56
rdwr_nc_write_page_test,200,9.44
rdwr_nc_read_page_test,200,8.44
rdwr_nc_write_large_test,200,0.94
rdwr_nc_read_large_test,200,1.14
rdwr_nc_write_page_test,300,14.19
rdwr_nc_read_page_test,300,12.70
rdwr_nc_write_large_test,300,1.39
rdwr_nc_read_large_test,300,1.74
rdwr_nc_write_page_test,400,19.20
rdwr_nc_read_page_test,400,17.41
rdwr_nc_write_large_test,400,1.95
rdwr_nc_read_large_test,400,2.53
rdwr_nc_write_page_test,500,24.02
rdwr_nc_read_page_test,500,22.16
rdwr_nc_write_large_test,500,2.42
rdwr_nc_read_large_test,500,3.14
mmap_write_test,100,0.01
mmap_read_test,100,0.08
mmap_write_test,200,0.03
mmap_read_test,200,0.14
mmap_write_test,300,0.05
mmap_read_test,300,0.17
mmap_write_test,400,0.05
mmap_read_test,400,0.22
mmap_write_test,500,0.06
mmap_read_test,500,0.28
1 file_create_test 1000 0.20
2 file_open_test 1000 0.09
3 file_overwrite_test 1000 0.17
4 file_attr_test 1000 0.08
5 file_list_test 1000 0.11
6 file_list_single_test 1000 0.08
7 file_list_none_test 1000 0.03
8 file_delete_test 1000 0.14
9 file_mkdir_test 1000 0.14
10 file_rmdir_test 1000 0.14
11 file_create_test 2000 0.42
12 file_open_test 2000 0.19
13 file_overwrite_test 2000 0.38
14 file_attr_test 2000 0.19
15 file_list_test 2000 0.23
16 file_list_single_test 2000 0.17
17 file_list_none_test 2000 0.06
18 file_delete_test 2000 0.33
19 file_mkdir_test 2000 0.30
20 file_rmdir_test 2000 0.27
21 file_create_test 3000 0.64
22 file_open_test 3000 0.30
23 file_overwrite_test 3000 0.59
24 file_attr_test 3000 0.25
25 file_list_test 3000 0.36
26 file_list_single_test 3000 0.27
27 file_list_none_test 3000 0.08
28 file_delete_test 3000 0.48
29 file_mkdir_test 3000 0.47
30 file_rmdir_test 3000 0.42
31 file_create_test 4000 0.86
32 file_open_test 4000 0.38
33 file_overwrite_test 4000 0.73
34 file_attr_test 4000 0.33
35 file_list_test 4000 0.48
36 file_list_single_test 4000 0.33
37 file_list_none_test 4000 0.11
38 file_delete_test 4000 0.64
39 file_mkdir_test 4000 0.62
40 file_rmdir_test 4000 0.52
41 file_create_test 5000 1.03
42 file_open_test 5000 0.44
43 file_overwrite_test 5000 0.92
44 file_attr_test 5000 0.38
45 file_list_test 5000 0.58
46 file_list_single_test 5000 0.38
47 file_list_none_test 5000 0.14
48 file_delete_test 5000 0.80
49 file_mkdir_test 5000 0.73
50 file_rmdir_test 5000 0.69
51 iter.file_open_test 10 0.25
52 iter.file_attr_test 10 0.19
53 iter.file_list_single_test 10 0.33
54 iter.file_list_none_test 10 0.26
55 iter.file_open_test 20 0.44
56 iter.file_attr_test 20 0.34
57 iter.file_list_single_test 20 0.61
58 iter.file_list_none_test 20 0.52
59 iter.file_open_test 30 0.61
60 iter.file_attr_test 30 0.48
61 iter.file_list_single_test 30 0.88
62 iter.file_list_none_test 30 0.78
63 iter.file_open_test 40 0.77
64 iter.file_attr_test 40 0.61
65 iter.file_list_single_test 40 1.19
66 iter.file_list_none_test 40 1.03
67 iter.file_open_test 50 0.95
68 iter.file_attr_test 50 0.73
69 iter.file_list_single_test 50 1.42
70 iter.file_list_none_test 50 1.28
71 rdwr_cc_write_page_test 100 0.25
72 rdwr_cc_read_page_test 100 0.23
73 rdwr_cc_write_large_test 100 0.08
74 rdwr_cc_read_large_test 100 0.08
75 rdwr_cc_write_page_test 200 0.48
76 rdwr_cc_read_page_test 200 0.45
77 rdwr_cc_write_large_test 200 0.12
78 rdwr_cc_read_large_test 200 0.17
79 rdwr_cc_write_page_test 300 0.73
80 rdwr_cc_read_page_test 300 0.61
81 rdwr_cc_write_large_test 300 0.19
82 rdwr_cc_read_large_test 300 0.23
83 rdwr_cc_write_page_test 400 0.97
84 rdwr_cc_read_page_test 400 0.88
85 rdwr_cc_write_large_test 400 0.27
86 rdwr_cc_read_large_test 400 0.33
87 rdwr_cc_write_page_test 500 1.20
88 rdwr_cc_read_page_test 500 1.14
89 rdwr_cc_write_large_test 500 0.31
90 rdwr_cc_read_large_test 500 0.39
91 rdwr_nc_write_page_test 100 4.76
92 rdwr_nc_read_page_test 100 4.24
93 rdwr_nc_write_large_test 100 0.47
94 rdwr_nc_read_large_test 100 0.56
95 rdwr_nc_write_page_test 200 9.44
96 rdwr_nc_read_page_test 200 8.44
97 rdwr_nc_write_large_test 200 0.94
98 rdwr_nc_read_large_test 200 1.14
99 rdwr_nc_write_page_test 300 14.19
100 rdwr_nc_read_page_test 300 12.70
101 rdwr_nc_write_large_test 300 1.39
102 rdwr_nc_read_large_test 300 1.74
103 rdwr_nc_write_page_test 400 19.20
104 rdwr_nc_read_page_test 400 17.41
105 rdwr_nc_write_large_test 400 1.95
106 rdwr_nc_read_large_test 400 2.53
107 rdwr_nc_write_page_test 500 24.02
108 rdwr_nc_read_page_test 500 22.16
109 rdwr_nc_write_large_test 500 2.42
110 rdwr_nc_read_large_test 500 3.14
111 mmap_write_test 100 0.01
112 mmap_read_test 100 0.08
113 mmap_write_test 200 0.03
114 mmap_read_test 200 0.14
115 mmap_write_test 300 0.05
116 mmap_read_test 300 0.17
117 mmap_write_test 400 0.05
118 mmap_read_test 400 0.22
119 mmap_write_test 500 0.06
120 mmap_read_test 500 0.28

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