Compare commits

..

1643 Commits

Author SHA1 Message Date
068270fa7f update changelog 2021-06-13 12:40:41 -07:00
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
63f91cc667 build: bump version 2021-06-09 10:13:41 -07:00
6e3e469fcb doc: update known file systems 2021-06-08 12:22:26 -07:00
efcc82b5dd build: update version 2021-06-08 10:38:27 -07:00
cad5e68ac8 art: update logo 2021-06-01 13:49:00 -07:00
6e3a8f70b2 update source copyright to 2021 2021-05-21 15:57:05 -07:00
6bc0fe4ac5 art: update logo 2021-05-21 14:53:52 -07:00
07f097220f changelog: update for v1.10B1 2021-05-21 11:41:35 -07:00
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
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
bde57697f9 Add Paweł Wegner to contributors. 2021-05-15 14:59:10 +02:00
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
a27994289d art: update 2021-05-07 16:50:58 -07:00
3b10145e93 tst: winfsp-tests: disable new tests that fail on passthrough 2021-04-19 13:34:35 -07:00
33c6e7ee61 sys: fix issue #364 2021-04-16 16:43:34 -07:00
d0d67998c1 inc: fsctl.h: fix class guid's when used outside our build system 2021-04-13 15:33:57 -07:00
aa7888effc tools: wixguid.py 2021-04-13 15:22:42 -07:00
3c7e712e57 tools: build.bat: skip choco build for non-WinFsp brands 2021-04-13 14:38:51 -07:00
f8ee12f592 build: fix inadvertently broken DLL build on VS2015 2021-04-12 22:07:04 -07:00
c84d47aa3e doc: WinFsp rebranding document 2021-04-12 21:38:09 -07:00
023c925fb6 WinFsp rebranding support 2021-04-12 17:47:34 -07:00
a7cfabeff8 tools: add batch file that fixes issue #162 2021-04-08 15:00:55 -07:00
d4a70da611 Merge branch 'pvt-tsfix' 2021-04-08 14:06:52 -07:00
50892bfa19 shared: posix: DistinctPermsForSameOwnerGroup 2021-04-06 15:00:31 -07:00
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
9d76495340 update Changlog for v1.9 2021-04-06 13:01:33 -07:00
41c604b0fd update Changelog for v1.9B2 2021-04-06 13:00:30 -07:00
28a9534a65 build: version.properties: bump version 2021-04-06 12:53:33 -07:00
b87c907af8 build: version.properties: bump version 2021-02-02 16:50:52 -08:00
9d5efe5f98 dll: fuse: FileSecurity option 2021-01-25 16:54:59 -08:00
c5b850be35 sys: improve trace functionality 2021-01-25 13:11:10 -08:00
0af0bfbe7c sys: FspFsvolClose: convert CLOSE requests to synchronous when above the IOQ watermark 2021-01-25 12:45:33 -08:00
1dbcae3985 sys: FspTraceNtStatus: fix spelling mistake 2021-01-25 12:44:59 -08:00
a5726c820b sys: add trace functionality 2021-01-13 16:15:06 -08:00
870c54253a Merge pull request #342 from gaotxg/master
Credential: Default do not save password
2021-01-05 19:47:51 -08:00
f9cbbea386 Update Contributors.asciidoc 2021-01-06 10:47:42 +08:00
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
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
2d5d058d2f dll: FspFsctlStartService:make thread safe 2020-12-19 11:05:24 -08:00
a372c6ee40 changelog: add note about notifyfs file systems 2020-12-18 16:57:08 -08:00
c8a5f52fb1 installer: add notifyfs-dotnet file system 2020-12-18 16:47:20 -08:00
40052b143e tst: notifyfs-dotnet: add .NET file system to demo file notification mechanism 2020-12-18 16:39:30 -08:00
8006763367 dotnet: Interop: NotifyInfoInternal: fix FileNameBufOffset 2020-12-18 16:37:08 -08:00
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
12fd8942f7 tst: notifyfs: root dir does not have dot entries 2020-12-18 15:19:47 -08:00
3eb1f48174 installer: add notifyfs file system 2020-12-17 15:26:57 -08:00
ac26bde9ee tst: notifyfs: add file system to demo file notification mechanism 2020-12-17 15:20:02 -08:00
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
b05d5e286e dotnet: rename NotifyInfoFilter and NotifyInfoAction 2020-11-27 10:37:22 -08:00
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
2f1a5b98e2 Update NotifyInfoAction and NotifyInfoFilter enum constants for more readability. 2020-11-26 15:00:03 +02:00
21a636aaae Update Contributors.asciidoc 2020-11-24 20:07:31 +02:00
3b90908e01 Document the NotifyInfo fields for the .NET interop layer. 2020-11-24 20:02:02 +02:00
90e86d4592 workflows: update AntiVirus monitor 2020-11-17 09:19:21 -08:00
b3058a5e3e shared: minimal.h: STRTOINT 2020-11-06 09:41:49 -08:00
3bda3d754e update changelog 2020-11-04 13:39:34 -08:00
8109b005be dll: posix: trustPosixOffset 2020-11-03 14:04:27 -08:00
bd0d6638b0 dll: posix: trustPosixOffset 2020-11-03 12:31:13 -08:00
912703cd77 sys: FspBufferUserBuffer: special case Irp->UserBuffer kernel address 2020-10-30 15:39:56 -07:00
90bc12132e changelog: WinFsp 2020.2 2020-10-30 15:09:17 -07:00
f1cf020272 dll: fuse: allow mount manager mountpoints 2020-10-29 15:28:14 -07:00
2f65a77d34 tst: winfsp-tests: notify_open_change_dotest 2020-10-29 14:16:54 -07:00
4578414a2c tst: winfsp-tests: WINFSP_TESTS_EXCEPTION_FILTER_DISABLE 2020-10-29 14:16:53 -07:00
f0fd53e3f3 appveyor: user mode dumps 2020-10-29 14:16:51 -07:00
1cc42c9d70 tst: winfsp-tests: UnhandledExceptionFilter 2020-10-27 16:02:49 -07:00
28ac5a1cfe tst: winfsp-tests: UnhandledExceptionFilter 2020-10-27 15:01:38 -07:00
e1b1284153 tst: winfsp-tests: UnhandledExceptionFilter 2020-10-27 12:38:54 -07:00
5014e8bd35 dotnet: file change notification support 2020-10-23 13:55:36 -07:00
1b7a78edff inc: fuse: fuse_invalidate 2020-10-22 14:46:13 -07:00
6340811974 dll: fuse: fsp_fuse_notify: handle case-insensitive file systems 2020-10-21 15:45:07 -07:00
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
d5ab701e3c tst: winfsp-tests: enable notify_dirnotify_test 2020-10-18 09:11:05 -07:00
8269f57282 tools: run-tests: winfsp-tests-x86-notify 2020-10-17 23:18:30 -07:00
e59a49992a sys: FspFileNodeInvalidateCachesAndNotifyChangeByName: flush and purge only 2020-10-17 22:06:49 -07:00
10c8c440f9 tst: winfsp-tests: notify_dirnotify_test 2020-10-16 14:27:51 -07:00
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
c1e4b00aa7 tools: run-tests: notify tests 2020-10-10 18:24:32 -07:00
1bb0580a6a tst: winfsp-tests: add --notify option 2020-10-10 14:30:14 -07:00
e54c2288f7 dll: fuse: fuse_notify 2020-10-10 10:15:36 -07:00
6b4b1dff6c sys: notify implementation 2020-10-09 15:19:51 -07:00
92b7989999 tst: winfsp-tests: notify testing 2020-10-09 15:05:31 -07:00
f2e2d83b72 tst: winfsp-tests: notify testing 2020-10-09 14:45:14 -07:00
3687df53c6 sys: wait groups and notify implementation 2020-10-09 12:40:49 -07:00
a004e4be10 sys: notify implementation 2020-10-08 20:49:24 -07:00
88edf5723e sys: notify implementation 2020-10-08 16:56:31 -07:00
7f360827f6 sys: notify implementation 2020-10-08 15:31:41 -07:00
01f91c771d sys: notify implementation 2020-10-07 17:07:35 -07:00
844fb7171e inc,dll,sys: notify implementation skeleton 2020-10-06 16:37:33 -07:00
489081b8c2 build: version: 2021 Beta1 2020-10-06 15:50:44 -07:00
c77690e59d update changelog and version number 2020-10-01 17:13:43 -07:00
32a5b2bc64 tst: winfsp-tests: rename_backslash_test 2020-10-01 11:46:55 -07:00
5045403d85 sys: FspFsvolSetRenameInformation: tolerate trailing backslash on target name 2020-09-28 16:01:38 -07:00
13a52c4ab4 tools: parselog: parse winfsp logs 2020-08-26 18:30:30 -07:00
c18d4f1508 tools: parselog: parse winfsp logs 2020-08-26 16:01:14 -07:00
fcfebb968f tools: parselog: parse winfsp logs 2020-08-26 14:52:53 -07:00
10053bc759 tst: memfs-fuse3: Makefile: fix build under Cygwin gcc 2020-08-20 16:03:46 -07:00
7985827c73 build: update version number 2020-08-08 10:13:31 -07:00
13146e4854 update Changelog 2020-08-08 10:09:00 -07:00
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
20e19cb0fc update Changelog 2020-07-24 12:56:24 -07:00
2326521ef8 appveyor: disable cygfuse x86 build
This improves slow builds.
2020-07-22 15:45:04 -07:00
0296502f24 sys: FspFsvolReadNonCached: acquire FileNode shared
See GitHub issue #291 for discussion
2020-07-22 15:42:06 -07:00
5d0b10d0b6 Changelog: add missing changes for v1.7 2020-07-07 13:56:53 -07:00
5fac25d200 update Changelog 2020-07-04 15:43:34 -07:00
b82aeeadbd tools: deploy.bat 2020-06-14 14:46:13 -07:00
dcaa24bc52 tools: deploy.bat, debug.bat 2020-06-09 18:09:56 -07:00
7e37fc57f9 doc: container support doc: fix version typo 2020-06-08 23:04:55 -07:00
8efe1f3a1f doc: container support doc 2020-06-08 22:49:01 -07:00
aa3beba928 sys: silo support 2020-06-05 15:47:19 -07:00
899cd5595d sys: FspIsNtDdiVersionAvailable 2020-06-01 23:11:33 -07:00
6bcbfd5380 tst: winfsp-tests: disable query_winfsp_tests over --external 2020-05-25 12:58:20 -07:00
a197b99960 tst: winfsp-tests: disable query_winfsp_tests over shares 2020-05-25 11:49:36 -07:00
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
fc18b70a00 tools: deploy: winfsp checkpoint 2020-05-24 00:18:57 -07:00
191c98bd41 tools: vcvarsall.bat: minor fix 2020-05-21 18:59:01 -07:00
5360f5ca6e tools: vcvarsall.bat: minor fix 2020-05-21 18:05:21 -07:00
89aaf33b62 tools: deploy: hyper-v support 2020-05-22 01:33:02 +01:00
675ecf2e51 tools: switch default build to latest Visual Studio 2020-05-21 15:51:32 -07:00
b663cfdca5 tools: update ntstatus.bat, winerror.bat for latest SDK's 2020-05-21 15:23:21 -07:00
dcf83b6d64 build: version.properties bump version to 2020.2 Beta2 2020-05-21 15:09:37 -07:00
af52ac3df0 build: version.properties: update for version 2020.1 Gold 2020-05-21 15:05:22 -07:00
33cab186ca build: silence deprecation warnings for FSD 2020-05-19 00:22:45 -07:00
fd4c5326ed update changelog 2020-04-25 12:43:29 -07:00
7c06ead34c launcher: ignore bad Stderr setting 2020-04-25 12:32:20 -07:00
768b596a76 launcher: add %P variable (user profile directory) 2020-04-25 11:36:30 -07:00
26630ad7aa build: use PDBALTPATH 2020-04-25 01:16:22 -07:00
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
3eb115eb22 launcher: SvcInstanceCreate: refactor to use FspLaunchRegGetRecord 2020-04-24 17:49:29 -07:00
a0801674c4 launcher: SvcInstanceCreateProcess: fix checking wrong handle 2020-04-24 16:04:07 -07:00
98f809345d doc: update known file system document 2020-04-21 13:38:53 -07:00
0268e51099 dll: launch: registry: support Recovery setting 2020-04-16 16:08:55 -07:00
924d1f9a3e update changelog 2020-04-15 23:28:42 +01:00
dc3f73bd2f Merge branch 'pvt-launcher' 2020-04-15 15:10:09 -07:00
e71aea8ad7 dll: fuse: ReadDirectory: log invalid directory entries 2020-04-15 15:07:01 -07:00
9066338220 dll: fuse: ReadDirectory: log invalid directory entries 2020-04-14 22:54:46 -07:00
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
94d8c0452f launcher: eliminate TLS for ClientUserName 2020-04-13 22:31:45 -07:00
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
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
9d69ae7503 doc: use markdown for API reference 2020-03-23 15:03:22 -07:00
f93cdbfa91 doc: update api reference 2020-03-21 17:35:04 -07:00
b7553925fb appveyor: build cygfuse 2020-03-21 16:20:51 -07:00
4b5b562307 inc: winfsp_fuse.h: fix memset comment 2020-03-21 15:44:02 -07:00
ad68b36de7 README: internal link to cap.gif 2020-03-10 20:19:05 +02:00
0e8babf69c appveyor: update location of IfsTest zip file 2020-03-10 20:00:14 +02:00
0e12212838 doc: Home 2020-03-10 19:34:32 +02:00
19b86972d8 doc: WinFsp-Debugging-Setup.asciidoc 2020-03-07 18:44:52 +02:00
403e234895 Merge pull request #288 from benrubson/cygwarn
Mute a GCC warning
2020-03-01 20:43:41 +02:00
76ec0420d1 Mute a GCC warning
solves #287
2020-02-29 23:58:51 +01:00
2a6beb2739 workflows: add AntiVirus monitor 2020-02-22 15:08:53 +02:00
1933443e8d appveyor: allow chocolatey prerelease installs 2020-02-17 08:53:38 +02:00
279b00e195 tools: build.bat: add choco prerelease support 2020-02-16 22:36:10 +02:00
9b6542ab80 update Changelog 2020-02-08 01:14:38 +00:00
dfbab387ab build: version.properties: bump version to 2020.1 B2 2020-02-07 17:09:25 -08:00
10f4df519c dotnet: RejectIrpPriorToTransact0 2020-02-07 17:07:50 -08:00
24b5d48fed add shared/ku/config.h and related changes 2020-02-07 15:40:08 -08:00
0650cabc47 refactor: shared->shared/um, ku->shared/ku 2020-02-07 15:28:25 -08:00
71995a1fcd dll,sys: FSP_CFG_REJECT_EARLY_IRP
Includes Avast fix for FUSE.
2020-02-07 15:11:24 -08:00
91c36b8f09 dll: FspFileSystemResolveReparsePointsInternal: fix warning 2020-02-07 14:54:09 -08:00
e3c19afb72 update Changelog for 2020.1 B1 2020-02-07 13:40:49 -08:00
799025e8c2 build: version.properties: fix version 2020-02-07 13:33:31 -08:00
896c00a08c Merge branch 'pvt-reject-irp' 2020-02-07 13:29:19 -08:00
8497855d80 sys: FSP_DEVICE_REJECT_EARLY_IRP macro 2020-02-07 13:22:09 -08:00
52663ec676 dll: FspFileSystemResolveReparsePoints
Fix junction handling.
2020-02-04 15:37:17 -08:00
0901fb6477 inc,sys,tst: FSP_FSCTL_VOLUME_PARAMS::RejectIrpPriorToTransact0 2020-02-03 16:43:15 -08:00
bf6d56ceac inc,sys,tst: FSP_FSCTL_VOLUME_PARAMS::RejectIrpPriorToTransact0 2020-02-03 16:38:55 -08:00
51350d5a42 inc,sys,tst: FSP_FSCTL_VOLUME_PARAMS::RejectIrpPriorToTransact 2020-02-03 14:59:23 -08:00
9e32fed598 tools: build-choco.bat 2020-01-28 19:47:14 -08:00
8301642e6b build: bump version to 1.7 2020-01-28 17:44:13 -08:00
0002655782 build: update version: 2020 2020-01-27 14:26:45 -08:00
e0e8d74d01 update changelog 2020-01-27 14:25:12 -08:00
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
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
b3dfea8303 tools: fix-source-copyright: fix botched script 2020-01-22 14:35:24 -08:00
3ab0e5a3d3 doc: add kernel mode file systems document 2020-01-16 17:04:23 -08:00
d687ef3a67 update Changelog (PR #270) 2020-01-15 13:39:59 -08:00
6df5ff980f Merge branch 'hammerg-track_dir_check' 2020-01-15 13:27:19 -08:00
14ac0f8db9 dll: FspFileSystemOpCreate_FileOpenTargetDirectory 2020-01-15 13:26:29 -08:00
ac306c2ce1 dll: open as directory when file's parent directory should be opened. 2020-01-05 09:09:05 +02:00
aedf01a384 update source copyright for 2020 2020-01-02 17:50:40 -08:00
0ce8b1c254 build: bump version to 2020.1 B1 2020-01-02 17:46:13 -08:00
4e0690e65f update Changelog for v1.5 2019-12-31 16:56:59 -08:00
e7b81e4bac build: bump version to 2019.3 GOLD 2019-12-31 16:55:35 -08:00
9dc774d306 tst: winfsp-tests: ResilientRemoveDirectoryW 2019-12-16 23:07:04 -08:00
26fe1a741b sys: FspPropagateTopFlags: propagate union of flags from top level IRP 2019-12-13 16:42:49 -08:00
efdb6d1c86 build: bump version to 2019.3 B5 2019-12-09 14:36:08 -08:00
b18df6bba8 sys: release rename lock when doing oplock breaks 2019-12-08 14:27:02 -08:00
39aad2b4fa ku: posix: improve kernel mode support 2019-11-18 22:22:32 -08:00
ab1e024965 tools: build.bat: fix winfsp-tests zip file build 2019-11-16 16:05:40 -08:00
5a67c47d0f update changelog 2019-11-16 14:54:10 -08:00
39c189aff7 sys: fsext: FspFsextProviderTransact 2019-11-16 14:02:44 -08:00
3d9fc467ef tools: build.bat: winfsp-tests zip file 2019-11-16 07:26:07 +00:00
23b5c67913 shared: minimal.h: eliminate warning on VS2015 builds 2019-11-07 16:08:41 -08:00
4b5478e50c sys: dirctl: support directory marker as FUSE style next offset 2019-11-05 22:14:16 -08:00
c7fc728ad0 build: bump version 2019-11-04 19:26:45 -08:00
254174b8e9 sys: avoid using FspFsextProvider unnecessarily 2019-11-04 16:30:30 -08:00
5110b3c5a1 sys: dirctl: support directory marker as FUSE style next offset 2019-10-30 16:40:48 -07:00
847eab3da4 tst: memfs-fuse3: #if0 ioctl 2019-10-21 20:21:36 -07:00
5131ed5c01 Merge branch 'bdutro-o_append-fix' 2019-10-21 20:14:02 -07:00
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
3fe69f2208 installer: add fsext development files 2019-10-18 16:23:27 -07:00
29fd9bf779 sys: fsext: allow multiple providers (up to 4) 2019-10-18 16:00:31 -07:00
3c391ca711 build: bump version to 2019.3 B3 2019-10-16 12:18:24 -07:00
82a8545d8f tst: memfs-fuse3: fix narrow conversion on x86 builds 2019-10-09 14:42:39 -07:00
79be3e445a tst: memfs-fuse3: accurately compute current time 2019-10-09 11:39:41 -07:00
b04266e0fe tools: run-tests: add memfs-fuse3 testing 2019-10-08 04:35:28 +01:00
25adfaec00 update Changelog 2019-10-08 04:30:30 +01:00
ce20747534 tst: memfs-fuse3: testing 2019-10-07 18:32:25 -07:00
d3d75bf977 tst: add memfs-fuse3 file system 2019-10-07 14:24:18 -07:00
6f1f1cda71 update Changelog 2019-10-07 22:17:07 +01:00
21dfeca124 update Changelog 2019-10-07 22:15:29 +01:00
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
8f90305726 add support for setting file system name without 'FUSE-' prefix 2019-10-07 07:05:01 -07:00
490d0577bb Revert "Remove 'FUSE-' prefix from file system name when using fuse interface"
This reverts commit 7d2ff3afeb.
2019-10-07 06:47:02 -07:00
c9d3cb74c7 add John Tyner to contributors 2019-09-25 16:20:50 -07:00
7d2ff3afeb Remove 'FUSE-' prefix from file system name when using fuse interface 2019-09-24 20:04:29 -07:00
c415c87195 dll: FspMountSet, FspMountRemove 2019-09-24 15:34:01 -07:00
d161ca59a7 update Changelog 2019-09-12 05:36:19 +01:00
bc03af3b2a doc: update FAQ, Known File Systems 2019-09-12 04:54:40 +01:00
ed1543665c Merge pull request #248 from JohnOberschelp/master
Airfs cleanup after persistence review
2019-09-10 22:32:58 -07:00
a99fa512d4 Fixed issues noted at the PR review 2019-09-10 16:00:34 -07:00
a6800dd73d Fixed issues noted at the PR review 2019-09-10 15:59:48 -07:00
aa9354773b Fixed issues noted at the PR review 2019-09-10 15:58:35 -07:00
05b37c744b sys,dll: only user mode sends MountManager IOCTL's
(except for cleanup in FspMountdevFini)
2019-09-08 17:45:00 -07:00
1d15c9546b Merge branch 'pvt-sqlfix2' 2019-09-08 11:05:17 -07:00
51b33f02aa Merge pull request #241 from JohnOberschelp/master
Add persistence to Airfs
2019-09-07 17:40:42 -07:00
97ffa741b2 tst: volpath-test: fix silly mistake 2019-09-07 11:56:34 -07:00
073645db3b tst: fix tests broken by new mountmgr func 2019-09-07 11:39:06 -07:00
fd9ac1c9e0 appveyor: WDK 1903 hackfix 2019-09-06 20:56:37 -07:00
62b08c3d1e appveyor: WDK 1903 hackfix 2019-09-07 04:54:39 +01:00
9436fd8402 sys: implement SectorSize queries
- IRP_MJ_QUERY_VOLUME_INFORMATION/FileFsSectorSizeInformation
- IOCTL_STORAGE_QUERY_PROPERTY/StorageAccessAlignmentProperty
2019-09-06 20:52:15 -07:00
de75454d50 sys: FspFsvolDeviceControl: disable mountdev handling on fsvol devices 2019-09-06 15:43:20 -07:00
430d7a5650 sys: FspMountdevMake: use non-repeatable (i.e. non UUIDv5) GUID when non-persistent mountdev 2019-09-06 14:34:33 -07:00
4655926d03 sys, dll: mount manager support 2019-09-06 14:24:00 -07:00
565caebe4c sys,dll: FspFileSystemSetMountPoint: mount manager support 2019-09-05 19:58:14 -07:00
a47f853beb sys: mountdev: mount manager support 2019-09-05 09:54:36 -07:00
89ec3e6733 ku: UUID v5 generation 2019-09-04 13:45:53 -07:00
dbdfaeee1f tst: winfsp-tests: GetVolumePathName testing 2019-08-23 16:00:35 +01:00
2c64d59001 Add common.h & persistence.cpp for Airfs to Product.wxs 2019-08-09 15:58:12 -07:00
af8c74378e appveyor: hack to make WDK 1903 work on VS2015 2019-08-07 22:53:21 -07:00
19c320350f Add persistence.cpp and common.h 2019-08-03 17:55:29 -07:00
d60b1de430 Add persistence.cpp and common.h 2019-08-03 17:54:26 -07:00
6a7b6c77c6 Create common.h 2019-08-03 12:22:57 -07:00
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
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
d2f42f4918 update Changelog 2019-07-11 03:17:33 -07:00
a73f1b9559 launcher: path transform language 2019-07-09 13:26:07 -07:00
fb6893968a dll: fuse: add --UserName and --GroupName 2019-07-08 15:12:26 -07:00
c97f2cb660 dotnet: add MountEx and fine-grained timeouts 2019-07-07 12:12:04 -07:00
3a12d928e5 dll: fuse: avoid calling fgetattr on directories 2019-07-01 00:00:37 -07:00
8fa337ae54 sys: fix issues found by static analyzer 2019-06-28 16:19:58 -07:00
7f084787e3 sys: fix issues found by static analyzer 2019-06-28 15:21:36 -07:00
369c0256f3 build: version.properties: update company name 2019-06-25 17:11:01 -07:00
f25983853b tools: build.bat: update cert subject 2019-06-25 17:09:34 -07:00
757e23ded6 ku: kernel-mode testing and fixes 2019-06-24 16:14:03 -07:00
ebb9b8b799 sys: FspVolumeTransact: remove erroneous ASSERT 2019-06-23 11:07:01 -07:00
804bcc3354 sys: FspVolumeTransactFsext:
- only allow ControlCodes with 0xC00 bits set in Function
2019-06-22 15:40:48 -07:00
f5fde4c0bb sys: FspVolumeTransactFsext 2019-06-22 15:18:16 -07:00
dcf7e4c5a6 sys: fsext: FsextProvider testing 2019-06-22 14:30:23 -07:00
adc759447e sys: FspVolumeCreate: fix missing return 2019-06-21 16:37:07 -07:00
f0d7e5b322 Merge pull request #237 from dworkin/feature/async-dotnet
Async I/O for dotnet
2019-06-21 14:48:30 -07:00
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
79b2f38d87 update README 2019-06-18 21:52:19 -07:00
4ae03629f7 sys: FspFsextProvider: load provider driver 2019-06-18 20:28:59 -07:00
f4496786e5 src: ku: posix.c
- src/ku directory contains shared kernel/user mode code
2019-06-18 16:49:20 -07:00
b637a72ec8 sys: FspFsextProvider 2019-06-18 16:11:38 -07:00
2cd1bddafb sys: FspFsextProvider 2019-06-14 21:22:01 -07:00
6b83748d89 sys: fsext: WIP 2019-06-14 20:53:09 -07:00
ed31a187ac opt/fsext: kernel mode winfsp extension 2019-06-14 18:34:19 -07:00
781deff06f sys: default TransactTimeout changes 2019-06-11 17:53:34 -07:00
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
8ad77fe62f shared: minimal.h: fix memmove issue in VS 2019 2019-06-06 15:10:25 -07:00
f78b3464ce sys: meta: fix rare memory leak 2019-06-05 20:43:12 -07:00
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
ce436fc29a Attempt to add a slowio test for memfs-dotnet. 2019-06-04 17:10:33 +02:00
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
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
1d619e0874 Use pointers instead of references.
To avoid copying structs needlessly.
2019-05-14 11:38:55 +02:00
290896b010 Add asyncronous support for dotnet. 2019-05-13 09:47:59 +02:00
c01402443d wslinux support: ATOMIC_CREATE_ECP_CONTEXT 2019-04-27 15:30:57 -07:00
195f3bf92d build: VS2015 - VS2019 round-tripping: LatestTargetPlatformVersion 2019-04-26 09:44:30 -07:00
ae86aeb633 README: WinFsp now builds with VS2015 - VS2019 2019-04-25 17:43:14 -07:00
369da895d3 build: VS2015 - VS2019 round-tripping 2019-04-25 16:43:53 -07:00
17adae481c sys: FspFileNodeOplockCheckAsyncEx: fix stupid mistake in DEBUGTEST code 2019-04-18 23:47:27 -07:00
db34b8c913 update changelog 2019-04-18 20:45:56 -07:00
f6212be687 README: minor fix 2019-04-18 20:38:35 -07:00
7af36d8f78 Merge branch 'master' of https://github.com/billziss-gh/winfsp 2019-04-18 17:46:51 -07:00
f6e49a11c8 .gitignore: add .vs rule 2019-04-18 17:45:11 -07:00
01ca9cef35 README: add info on VS2015 + latest WDK problem 2019-04-18 17:34:02 -07:00
7cb29a4db3 sys: remove unused variables 2019-04-18 17:22:58 -07:00
5523320348 build: fix stampinf cmdline for latest WDK 2019-04-18 17:21:06 -07:00
969651f5f6 sys: improve support for FileStatLxInformation 2019-04-18 15:57:22 -07:00
a08fdccb17 sys: FspSendQueryEaIrp: fix EA related BSOD 2019-04-17 16:04:44 -07:00
859d4250c3 tst: winfsp-tests: wsl: fix WOW64 failure 2019-04-17 15:04:53 -07:00
c6b7b7586e sys: ea: buffers from user mode fs can have zero length 2019-04-17 14:40:06 -07:00
6406246ce2 tools: deploy: fix driver path 2019-04-17 14:39:16 -07:00
9d8ff57be7 Merge branch 'master' into pvt-wsl 2019-04-17 11:28:06 -07:00
2b0d204ff1 sys: FileStatInformation is missing on old WDK's 2019-04-16 21:28:09 -07:00
851d0758d9 sys: define FSP_FILE_STAT*_INFORMATION that are missing on some WDK's 2019-04-16 15:55:13 -07:00
4f444b412e dll: fuse: create_file_mask, create_dir_mask options 2019-04-16 15:16:54 -07:00
e9578b48ce update Changelog 2019-04-16 12:15:32 -07:00
3c3163c41b dll; fuse: rename dot_hidden option to dothidden 2019-04-16 12:11:43 -07:00
8beb534340 dll: fuse: dot_hidden option adds hidden file attribute on dot files 2019-04-15 16:30:00 -07:00
9dcc04f882 tools: update deploy/debug scripts 2019-04-15 15:34:35 -07:00
ce83619728 sys: FileStatLxInformation and friends 2019-04-15 15:04:31 -07:00
04b3675f12 update .gitignore files 2019-04-03 22:39:25 -07:00
6a23f28249 build: bump version number 2019-04-03 22:39:03 -07:00
351b4f5294 sys: fileinfo: fix unnecessary STATUS_BUFFER_TOO_SMALL 2019-04-03 09:52:00 -07:00
ee1ae0370e build: version.properties: fix product version 2019-03-29 16:38:14 -07:00
1ebceb8214 installer: fix refs to cygfuse 2019-03-29 13:38:19 -07:00
e6bb463444 cygfuse: update packages 2019-03-29 13:03:51 -07:00
86231de113 update changelog 2019-03-29 12:46:13 -07:00
a2cc564400 dll: posix: update upper limit on UID 2019-03-29 12:06:36 -07:00
5239c63274 Contributors: sort names 2019-03-29 11:50:34 -07:00
2d46387faa Merge pull request #223 from sganis/master
Fixed invalid Sid bug
2019-03-29 11:47:51 -07:00
d2381f3425 tst: passthrough-fuse3: xattr 2019-03-26 17:36:02 -07:00
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
574efe3f72 sys: dirctl: add magic constant 4 to EaSize 2019-03-21 21:50:28 -07:00
88896c2fd8 dotnet: interop: FileInfo.EaSize is now a property 2019-03-21 21:42:27 -07:00
46210b0c48 tst: passthrough-dotnet: fix compilation problem 2019-03-21 19:48:06 -07:00
3d646bdf88 tools: run-tests: enable ifstest EA tests 2019-03-21 18:19:01 -07:00
732e6cc38c grand EaSize patch; passes winfsp-tests and ifstest 2019-03-21 18:14:15 -07:00
b619dbfe97 tst: memfs, memfs-dotnet: EaSize support 2019-03-21 15:05:39 -07:00
948254f083 dotnet: EA support 2019-03-21 15:05:14 -07:00
62b0e889b2 sys: FileEaInformation and EaSize support 2019-03-21 14:05:17 -07:00
8c0957f702 tools: run-tests: EA testing 2019-03-20 19:42:45 -07:00
0dbc3f9f25 tools: run-tests 2019-03-20 19:13:54 -07:00
2d0c8e14be sys: FspEaBufferFromOriginatingProcessValidate, FspEaBufferFromFileSystemValidate 2019-03-20 19:06:24 -07:00
8c6d037332 dll: fuse: extended attributes support 2019-03-20 14:32:00 -07:00
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
d2b6c4691e sys: create: minor fix 2019-03-19 18:36:52 -07:00
ff6421866d Merge branch 'pvt-xattr' 2019-03-19 18:23:47 -07:00
0664b492c8 inc: fsctl: fix FSP_FSCTL_VOLUME_PARAMS sizes 2019-03-19 16:29:08 -07:00
58fa2a0620 appveyor: troubleshoot 2019-03-19 16:09:57 -07:00
e6d1de1cad appveyor: troubleshoot 2019-03-19 15:35:53 -07:00
37bcfc888a tst: memfs-dotnet: testing EA support 2019-03-19 15:27:43 -07:00
ff94a63c37 tst: winfsp-tests: Overwrite: EA support 2019-03-19 14:21:25 -07:00
a830de9d04 sys: create: overwrite EA support 2019-03-19 13:22:35 -07:00
02a650f8d0 sys: ea: return STATUS_EA_CORRUPT_ERROR when appropriate 2019-03-19 11:15:14 -07:00
5c42377c1b tst: memfs-dotnet: ea support 2019-03-18 18:43:18 -07:00
ad612c535d tst: memfs-dotnet: ea support 2019-03-18 13:51:58 -07:00
4d4bf92c32 tst: memfs: cosmetic change 2019-03-17 17:17:30 -07:00
7ee289fb13 tst: winfsp-tests: ea 2019-03-17 13:25:29 -07:00
c6e1b15b37 tst: winfsp-tests: ea 2019-03-17 13:13:12 -07:00
1dfbb0d9bf tst: winfsp-tests: ea 2019-03-17 13:08:12 -07:00
92dfb0be96 tst: winfsp-tests: ea 2019-03-17 12:39:00 -07:00
41c3465f2a tst: winfsp-tests: ea 2019-03-17 12:21:32 -07:00
9e5d75fadc sys: util: FspEaBufferAndNamesValid 2019-03-16 13:58:09 -07:00
91568edc45 sys: ea: testing 2019-03-16 00:04:00 -07:00
67bd49d5d4 tst: winfsp-tests: ea_getset_test 2019-03-15 16:43:54 -07:00
cdb1ca22fc tst: winfsp-tests: ea_getset_test 2019-03-15 15:29:37 -07:00
ef6df51b5e tst: winfsp-tests: ea_create_test 2019-03-15 14:21:17 -07:00
1aa2353ca6 tst: winfsp-tests: ea_create_test 2019-03-15 14:04:03 -07:00
351285f5c6 tst: winfsp-tests: ea_create_test 2019-03-15 13:44:45 -07:00
c4ef64e31f tst: winfsp-tests: ea_create_test 2019-03-15 12:47:36 -07:00
5aa06358fc tst: winfsp-tests: ea_create_test 2019-03-15 12:43:14 -07:00
9fd491fa3d sys, dll: ea testing 2019-03-15 11:21:11 -07:00
d3efdd9219 dll, sys: FSP_NEXT_EA 2019-03-14 22:04:31 -07:00
d59976bd5d tst: winfsp-tests: ea_create_test 2019-03-14 21:36:29 -07:00
3553aec992 dotnet: extended attributes support 2019-03-14 15:05:17 -07:00
795caec679 tst: memfs: VolumeParams.ExtendedAttributes 2019-03-13 21:59:27 -07:00
3dd8ae24a8 sys: FspFsvolSetEa: check EaName validity 2019-03-13 21:45:09 -07:00
d8686a7726 tst: memfs: extended attributes support 2019-03-13 21:44:10 -07:00
58c6708123 tools: cloc.bat wraps cloc 2019-03-13 15:15:07 -07:00
b2912460e0 tools: cloc.bat wraps cloc 2019-03-13 15:04:39 -07:00
a811cd2cf8 sys, dll: extended attributes: checkpoint 2019-03-13 14:29:49 -07:00
7ec47f8125 Update README 2019-03-11 17:12:44 -07:00
778f5f70dc build: remove anycpu configuration 2019-03-11 14:06:29 -07:00
09d9928195 README: add link to WinSpd 2019-03-11 13:08:50 -07:00
e2349fef10 Merge branch 'pvt-fix217' 2019-03-11 13:03:49 -07:00
ad866631b6 Merge pull request #219 from dworkin/read-4g-corruption
Fix read corruption issue.
2019-03-11 13:01:44 -07:00
4cdc8b4d9c Update contributor's agreement. 2019-03-07 09:57:49 +01:00
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
70dd54e114 sys: write: FspFsvolWriteCached
- double-check that WriteEndOffset is within file bounds
2019-02-28 11:00:47 -08:00
d2de5e996c update source copyright for 2019 2019-02-28 10:39:31 -08:00
85cdb37f10 bump version to v1.5 2019-02-28 10:30:52 -08:00
c2553e3451 Merge pull request #216 from VidaID/cpp-flushpurge
Make FlushAndPurgeOnCleanup accessible in C++
2019-02-25 14:07:48 -08:00
9cd2f6972b Set FlushAndPurgeOnCleanup in the C++ passthrough 2019-02-25 14:25:56 -05:00
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
5d8686b64e Merge branch 'release/1.4' 2019-02-19 12:17:01 -08:00
41f80d9c24 update changelog 2019-02-19 12:02:11 -08:00
b69ed7e2f0 Fix #213 and a typo in macro FSP_FUSE_CTLCODE_FROM_IOCTL 2019-02-18 12:25:34 -08:00
f214561832 update changelog 2019-02-18 12:23:56 -08:00
35c06fe0ba bump version to 2019.2 Gold 2019-02-18 12:20:40 -08:00
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
f97b8fcc3a Fix #213 and a typo in macro FSP_FUSE_CTLCODE_FROM_IOCTL 2019-02-12 11:51:07 +01:00
1d701a3560 Merge branch 'release/1.4' 2018-12-10 10:06:36 -08:00
0eb84d68e2 update changelog 2018-12-10 10:06:17 -08:00
750e424ac3 bump version to 2019.1 Gold 2018-12-10 10:05:58 -08:00
58162a8d78 update changelog 2018-12-10 10:03:00 -08:00
d2f6ceaf28 Merge branch 'release/1.4' 2018-12-10 09:36:03 -08:00
b323925d94 update changelog 2018-12-10 09:34:17 -08:00
ab6e07853c Merge branch 'release/1.4' 2018-12-08 13:56:50 -08:00
3206e3dd15 change version to 2018.2 B4 2018-12-03 13:31:34 -08:00
0f185587c9 dll: np: implement custom Credential Provider logic 2018-11-29 21:05:57 -08:00
e0a6312387 Merge branch 'release/1.4' 2018-11-27 16:27:15 -08:00
5d2705f3f9 Merge branch 'release/1.4' 2018-11-26 14:59:38 -08:00
3119922708 np, launcher: allow RunAs=. registry setting 2018-11-26 13:29:34 -08:00
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
a910385cb1 dll: ensure FspFileSystemFinalize is called 2018-11-21 13:46:50 -08:00
618a59fc0e dll: ensure FspFileSystemFinalize is called 2018-11-13 10:11:39 -08:00
fcd3aff811 Merge branch 'release/1.4': fix #190 2018-11-06 10:12:45 -08:00
17d687fe7e tools: run-tests: disable create_readonlydir_test on compat FUSE tests (no FileAttributes) 2018-11-05 14:14:21 -08:00
4deb7b96a9 tools: run-tests: disable create_readonlydir_test on FUSE3 (no FileAttributes) 2018-11-05 12:39:55 -08:00
36ba4ff402 dll: FspAccessCheckEx: fix #190: add test 2018-11-05 11:08:47 -08:00
55955b8514 dll: FspAccessCheckEx: fix #190: add test 2018-11-05 10:45:11 -08:00
1bebbcf634 dll: FspAccessCheckEx: fix #190 2018-10-19 21:53:44 -07:00
a292cd4d73 dll: FspAccessCheckEx: fix #190 2018-10-19 21:41:52 -07:00
74df26a28d Merge branch 'release/1.4' 2018-10-09 14:32:42 -07:00
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
60aee6867c tools: run-tests: disable getfileattr_test for compat-fuse tests 2018-10-04 14:58:34 -07:00
33eb5d1703 fsbench: file_attr_test 2018-10-04 14:55:58 -07:00
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
fd9eccbe8b memfs: AllowOpenInKernelMode==1
The getfileattr_test is expected to fail.
2018-10-03 09:32:14 -07:00
4255d4eec7 tools: run-tests: disable getfileattr_test on file systems that cannot pass it 2018-10-03 09:31:21 -07:00
d813116f77 winfsp-tests: getfileattr_test 2018-10-02 22:35:44 -07:00
a201919291 winfsp-tests: getfileattr_test 2018-10-02 21:44:23 -07:00
1aab4662e5 inc, sys, dotnet: FSP_FSCTL_VOLUME_PARAMS::AllowOpenInKernelMode 2018-10-02 11:47:51 -07:00
02a4d3641e sys: implement FastIo operations
FspFastIoQueryOpen: return FALSE when RelatedFileObject is not NULL
2018-10-02 11:12:26 -07:00
3dfbdc313b sys: implement FastIo operations
DEBUGTEST
2018-10-02 11:12:25 -07:00
3a286324ff sys: implement FastIo operations
FspFastIoQueryOpen
2018-10-02 11:12:25 -07:00
0d849ffcc8 sys: implement FastIo operations
FastIoQueryBasicInfo, FastIoQueryStandardInfo, FastIoQueryNetworkOpenInfo
2018-10-02 11:12:24 -07:00
084f0b5b36 update changelog 2018-10-02 11:10:20 -07:00
901ef5e92f update changelog 2018-10-01 17:05:14 -07:00
f09597a519 bump version to 2018.2 Gold 2018-10-01 16:57:49 -07:00
a03b480eeb changelog: add note about drweb fix 2018-09-27 12:27:36 -07:00
c9f1c1c60d sys: FspPropagateTopFlags: only touch TopLevelIrp if it looks like a kernel mode address 2018-09-27 09:31:09 -07:00
f32c914ee8 sys: create: FspFsvolCreate
Only check reparse point ECP if running on OS prior to RS4
2018-09-06 18:03:53 -07:00
681eac9cd8 sys: create: FspFsvolCreate
Only check reparse point ECP if running on OS prior to RS4
2018-09-06 17:52:52 -07:00
52f0d1e1d8 Changelog, FAQ: add info about reparse point and case-sensitivity fix 2018-09-06 17:06:51 -07:00
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
4551766f7a sys: create: FspFsvolCreate
Replace FspMainFileOpenCheck with inline code
2018-09-06 13:26:53 -07:00
a168b96b76 changelog: add SetDelete information 2018-09-05 14:28:26 -07:00
4b3d9951bc changelog: add SetDelete information 2018-09-05 14:26:54 -07:00
79fd87598f dotnet: Interop: fix silly mistake in SetDelete 2018-09-04 15:28:24 -07:00
9851f1b2c8 dotnet: properly handle SetDelete/CanDelete resolution 2018-08-29 20:54:49 -07:00
4725ff41d3 dotnet: FileSystemHost.DeviceControl flag 2018-08-29 17:21:24 -07:00
4756ee2d8a passthrough-dotnet: FlushAndPurgeOnCleanup 2018-08-29 16:45:14 -07:00
25f627f36f passthrough: FlushAndPurgeOnCleanup, SetDelete 2018-08-29 16:44:47 -07:00
24b96e7e1b inc, dll, dotnet: FSP_FILE_SYSTEM_INTERFACE::SetDelete 2018-08-29 15:45:02 -07:00
75ae8daf8f update commercial disclaimer 2018-08-21 18:09:33 -07:00
999847d8db Merge pull request #181 from JohnOberschelp/master
Added DeviceIoControl to Airfs
2018-08-01 19:35:03 -07:00
773bb12146 Update airfs.cpp 2018-08-01 17:34:24 -07:00
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
eecb7e00e2 fix tabs to spaces 2018-07-31 17:21:40 -07:00
9160f1c4ce cygfuse: fix CRLF to LF 2018-07-31 15:34:29 -07:00
796f97f078 cygfuse: remove exec bit from Makefile 2018-07-31 15:20:26 -07:00
5f1c3b7728 build: bump version 2018-07-31 15:12:50 -07:00
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
04cf0e04ba README: change download badges size 2018-07-29 15:37:23 -07:00
f51af55fb3 doc: update winfsp.h apidoc 2018-07-29 15:27:55 -07:00
f9a2780311 README: multiple improvements 2018-07-29 15:05:53 -07:00
43101dfe06 dll: fuse: improve service start/stop messaging 2018-07-29 10:52:01 -07:00
ac5ed1c238 update FAQ 2018-07-28 20:40:33 -07:00
03f0d2bd1a update FAQ 2018-07-28 20:36:07 -07:00
77c18fc59e cygfuse: update with latest headers 2018-07-28 14:28:40 -07:00
77cf7f7398 dll: fuse3: compatibility functions 2018-07-28 14:08:03 -07:00
c61da81475 changelog: FUSE supports multiple in-process file systems 2018-07-28 13:41:51 -07:00
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
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
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
554f07a50e dll: fuse3: fsp_fuse3_pkgversion: bug fix 2018-07-26 10:17:38 -07:00
bd53b452b2 opt: cygfuse: fuse3: REQUIRES fuse 2018-07-26 10:03:48 -07:00
82cea37036 installer: add FUSE3 for Cygwin 2018-07-25 21:46:38 -07:00
2fcc065421 README: fix link 2018-07-25 21:34:59 -07:00
bf53c00f38 README: add links for project dirs 2018-07-25 21:32:53 -07:00
ec4197d8b7 opt: cygfuse: fix install scripts 2018-07-25 21:23:29 -07:00
897a08700b opt: cygfuse: fuse3 2018-07-25 21:15:16 -07:00
1ace7ffb41 opt: cygfuse: fuse: rename cygport 2018-07-25 20:23:13 -07:00
d7c0657c3d opt: cygfuse: refactoring 2018-07-25 20:13:53 -07:00
5d73687de8 dll: fuse: refactoring 2018-07-25 13:33:15 -07:00
a5bfdcf416 README: add reference to FUSE3 2018-07-25 13:31:42 -07:00
b609435dad dll: fuse: refactoring 2018-07-25 13:26:36 -07:00
523ccbea02 Merge branch 'pvt-fuse3' 2018-07-25 12:54:54 -07:00
cf699ba441 tools: run-tests: passthrough-fuse3 2018-07-25 11:29:24 -07:00
0d819eb800 dll: fuse3: testing 2018-07-25 10:28:33 -07:00
4a653a8bc0 dll: fuse3: testing 2018-07-25 10:04:23 -07:00
6932d42039 dll: fuse3: testing 2018-07-25 08:54:22 -07:00
77fb2cc1c1 tools: run-tests: enable all winfsp-tests on airfs 2018-07-24 21:54:38 -07:00
500dfe1958 Merge pull request #178 from JohnOberschelp/master
Fixed to pass winfsp-tests and cleanup
2018-07-24 21:52:32 -07:00
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
307e18fb0d update changelog 2018-07-20 15:44:10 -07:00
461266382a changelog: add FUSE3 information 2018-07-20 15:35:12 -07:00
a809b0787e changelog: add FUSE3 information 2018-07-20 15:34:31 -07:00
ea5e031af2 changelog: add FUSE3 information 2018-07-20 15:17:47 -07:00
558487cd22 installer: passthrough-fuse3 2018-07-20 15:12:22 -07:00
2ff21529d5 tst: passthrough-fuse3 2018-07-20 14:48:25 -07:00
d43c0c2c85 inc: fuse3: fix warnings 2018-07-20 09:37:59 -07:00
eb0f03b17b build: fuse3: installer and pkg-config 2018-07-20 09:24:22 -07:00
575fe55eb8 dll: fuse3: fsp_fuse3_main_real 2018-07-19 14:24:09 -07:00
b537c61f3b dll: fuse3: checkpoint 2018-07-19 12:53:03 -07:00
5cd40ff7ff dll: fuse3: fsp_fuse3_lib_help 2018-07-19 06:39:18 -07:00
753440e837 dll: fuse3: checkpoint 2018-07-19 06:13:48 -07:00
9b79bb24ca dll: fuse3: checkpoint 2018-07-19 04:27:06 -07:00
931d201527 dll: fuse3: fuse2to3 implementation 2018-07-18 14:48:10 -07:00
ab3f3d2827 dll: fuse3: fuse2to3 implementation 2018-07-18 04:11:20 -07:00
3dc09b2496 dll: fuse: remove dll/fuse/shared.h 2018-07-16 14:21:57 -07:00
27d03d4323 dll: fuse: ENOSYS has different values on Windows vs Cygwin 2018-07-16 09:50:21 -07:00
ad1b53e5a4 dll: fuse: move fsp_fuse_obj_* to sdll/fuse/shared.h 2018-07-16 09:45:38 -07:00
e4077c92e9 dll: fuse: ENOSYS has different values on Windows vs Cygwin 2018-07-16 09:42:15 -07:00
e3290a30bc fuse3: initial commit 2018-07-16 09:31:32 -07:00
09309f858c airfs: testing 2018-07-14 12:07:04 -07:00
12baaa6d50 airfs: testing 2018-07-14 11:15:12 -07:00
c584782bc7 airfs: testing 2018-07-14 11:04:10 -07:00
9c4a361c48 airfs: testing as disk file system 2018-07-14 09:16:14 -07:00
c1f4606683 airfs: FspLoad: dynamic loading of WinFsp DLL 2018-07-14 07:38:30 -07:00
f79db6a3db airfs: installer 2018-07-07 09:38:42 -07:00
9a9a73d4d8 airfs: testing 2018-07-05 23:36:20 +01:00
a56caf3f94 bump version to 2018.2 B2 and update changelog 2018-07-05 15:13:56 -07:00
9b8b3e9cb8 Merge branch 'airfs' 2018-07-05 15:02:15 -07:00
5a8aad60b3 airfs: add notice re: contributions 2018-07-05 14:59:24 -07:00
1906772aa2 airfs: add VS project 2018-07-05 14:45:44 -07:00
ce924d737c dotnet: rename Api.GetFspVersion to Api.GetVersion 2018-07-05 14:11:51 -07:00
aa50d5a8b9 Contributors: sort names 2018-07-05 21:59:38 +01:00
6ffddf36b5 Merge pull request #176 from FrKaram/Issue174
dotnet: add FlushAndPurgeOnCleanup and FspVersion
2018-07-05 21:55:34 +01:00
ee4145e947 Update Contributors.asciidoc 2018-07-03 11:20:44 +02:00
fd817e37c9 Updated Contributor Agreement 2018-07-03 10:01:57 +02:00
2056766b4f Indentation again 2018-07-01 13:52:09 +02:00
c73f7099b7 Indentation again 2018-07-01 13:51:17 +02:00
3513f0da5f Correct VS auto-format 2018-07-01 13:50:02 +02:00
c9c62b1831 Fixed Indentation 2018-07-01 13:48:48 +02:00
8422e8121c Fixed identation 2018-07-01 13:46:20 +02:00
88516f371a Fixed indentation 2018-07-01 13:45:47 +02:00
916b4f5c3d Wrongly remove gitignore 2018-07-01 13:35:25 +02:00
a7424c911b Changes following PR remarks 2018-07-01 13:29:52 +02:00
fb8cb8aca9 Added FpsVersion as a static method in FileSystemHost
Added FlushAndPurgeOnCleanup
2018-06-30 20:20:17 +02:00
d0f5ea69a2 Added FlushAndPurgeOnCleanup property in .NET wrapper 2018-06-28 23:01:26 +02:00
fbb81b0463 Merge pull request #173 from JohnOberschelp/master
Create airfs.cpp
2018-06-23 23:19:04 -07:00
14a2004437 Create airfs.cpp 2018-06-23 16:36:31 -07:00
d491031fda bump version to 2018.2 B1 2018-06-19 14:24:24 -07:00
75a3d97c62 Merge branch 'release/1.3' 2018-05-11 10:18:29 -07:00
5f325304d3 tst: memfs: rewrite MemfsFileNameCompare 2018-05-10 19:53:57 -07:00
8727497662 tst: memfs: remove CompareString usage 2018-05-10 12:31:01 -07:00
a2ed9f2b1a github: update ISSUE_TEMPLATE 2018-05-08 21:44:30 -07:00
fdaf1da778 Merge branch 'pvt-devctl' 2018-05-08 20:49:22 -07:00
1123e7b0ef dll: fuse: optimize symlinks aways when readlink returns -ENOSYS 2018-05-08 10:51:29 -07:00
06ee833740 dll: fuse: enable DeviceControl 2018-05-07 14:13:24 -07:00
fbcefe6339 dll: fuse: ioctl 2018-05-07 14:05:18 -07:00
637a1dac7e dotnet: implement Control operation 2018-05-04 14:51:48 -07:00
05f622f2de inc: winfsp.h: fix Control doc 2018-05-04 14:48:46 -07:00
ef5c947168 update changelog 2018-05-04 14:08:24 -07:00
894ae7b8f3 sys,dll: DeviceControl operation 2018-05-04 13:56:20 -07:00
7aadf259d9 bump version to v1.3 (2018.1) 2018-05-04 05:09:35 +01:00
d54e9a3049 update changelog 2018-05-01 10:38:58 -07:00
7d56b9c23d dll: fuse: GetSecurityByName: correctly handle "not found" paths with symlinks 2018-04-30 14:18:03 -07:00
deb237f7b0 dll: fuse: fsp_fuse_intf_AddDirInfo: avoid deadlock with ReaddirPlus and symlinks 2018-04-30 13:31:06 -07:00
5ae0804bd2 doc: add EncFS to known file systems 2018-04-27 12:12:25 -07:00
382599e38f dll: fuse: add ThreadCount option 2018-04-23 15:35:30 -07:00
498ab91123 dll: fuse: replace -oFlushAndPurgeOnCleanup with -oKeepFileCache option 2018-04-23 15:12:30 -07:00
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
157c4bc09a sys: FspFileNodeCleanupComplete: FlushAndPurgeOnCleanup:
- comment about difference in behavior when DeletePending
2018-04-23 09:57:47 -07:00
4fcaa99d63 sys: FspFileNodeCleanupComplete: FlushAndPurgeOnCleanup:
- handle DeletePending and non-zero PTruncateSize better
2018-04-23 00:33:00 -07:00
d6c3849120 dll: fuse: fix wrong calc of FileInfoTimeout from attr_timeout 2018-04-22 23:42:20 -07:00
ec39d4b888 dll: fuse: DirInfoTimeout, VolumeInfoTimeout options 2018-04-22 23:36:47 -07:00
ebc8c268e5 appveyor: FSP_FSCTL_VOLUME_PARAMS size change compat testing 2018-04-22 11:16:25 -07:00
9501b5771d inc,sys,tst: FSP_FSCTL_VOLUME_PARAMS: fine-grained timeouts 2018-04-21 11:53:14 -07:00
5d34a3bd8c dll: fuse: FlushAndPurgeOnCleanup option 2018-04-19 13:04:34 -07:00
5b72b4ad4a tools: run-tests: FlushAndPurgeOnCleanup 2018-04-19 11:17:41 -07:00
740411d604 tst: FlushAndPurgeOnCleanup: testing 2018-04-19 10:23:15 -07:00
5c3549c6eb sys: file: FspFileNodeCleanupComplete: FlushAndPurgeOnCleanup 2018-04-18 20:58:19 -07:00
9f56a21c7f sys: cleanup: minor change 2018-04-18 20:13:08 -07:00
2e7e95df76 appveyor: troubleshoot create_pid_test, rename_pid_test 2018-04-17 16:34:59 -07:00
b2e6c16ba0 update changelog 2018-04-17 13:47:37 -07:00
bd32f54904 Revert "installer: launch MEMFS as LocalService"
This reverts commit a7febb8265.
2018-04-17 13:24:57 -07:00
7908ba09ac appveyor: troubleshoot rename_pid_test 2018-04-17 13:16:52 -07:00
5713605030 appveyor: troubleshoot create_pid_test 2018-04-17 13:14:34 -07:00
994e232fb3 fuse: add create_umask option 2018-04-17 12:46:13 -07:00
9553bd52c4 update changelog for v1.3B2 (overdue) 2018-04-17 12:26:48 -07:00
1cab0f3975 cygfuse: correctly use cygwin_create_path 2018-03-26 14:11:58 -07:00
499a3d1138 Merge pull request #154 from benrubson/cast
Correct a cast in winfsp_fuse
2018-03-26 13:07:30 -07:00
d29218ba69 Update Contributors.asciidoc 2018-03-26 21:50:37 +02:00
5564a9efae Correct a cast in winfsp_fuse 2018-03-26 10:36:26 +02:00
750e72e601 installer: add launch.h 2018-01-29 09:16:30 -08:00
9f13c6e915 build: update version to 2018.1 B3 2018-01-29 09:04:17 -08:00
5005dd6f5b dll: np: NPGetConnection fix and FspNpGetRemoteInfo 2018-01-19 04:58:38 -08:00
f9b6fb8817 build: update version to 2018.1 B2 2018-01-17 17:21:03 -08:00
6b0b4c8b8e sys: mup: claim \ClassName instead of \ClassName\InstanceName prefix 2018-01-17 15:44:01 -08:00
abb504053b sys: FspUnload 2018-01-16 18:26:23 -08:00
fb507fc0bc dll: np: DeviceName 2018-01-16 13:38:49 -08:00
d38afe8d16 sys: shutdown: fix Release build 2018-01-16 11:49:14 -08:00
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
670a38d549 Update ISSUE_TEMPLATE.md 2018-01-11 18:29:56 -08:00
b939f6bd2b doc: update FAQ doc 2018-01-11 18:27:22 -08:00
3df27f5b28 doc: rename API doc files 2018-01-11 17:25:17 -08:00
7581cece81 doc: rename API doc files 2018-01-11 17:18:33 -08:00
b4f5707e4e tools: apidoc
doc: launch.h
2018-01-11 17:09:20 -08:00
309827860f tools: run-tests: extra time for memfs to spin up (LocalService) 2018-01-11 16:39:45 -08:00
2b6b049f86 inc: launch.h: documentation 2018-01-11 16:35:56 -08:00
77f3e064a2 winfsp-tests: launch-test: disable as test is very fragile 2018-01-10 11:01:39 -08:00
f691a7a3c7 dll: FspLaunch*: testing 2018-01-09 23:12:05 -08:00
cc58668ce5 dll: FspLaunchReg*: testing 2018-01-09 22:17:07 -08:00
064d0b94f2 dll: FspLaunchRegSetRecord, FspLaunchRegGetRecord, FspLaunchRegFreeRecord 2018-01-09 17:45:49 -08:00
a48668149b inc: winfsp/launch.h 2018-01-09 11:38:27 -08:00
b9915dcaa7 update changelog 2018-01-04 19:19:54 -08:00
a7febb8265 installer: launch MEMFS as LocalService 2018-01-04 11:44:29 -08:00
d6aaf0088a Merge branch 'master' into pvt-launcher 2018-01-04 11:39:31 -08:00
f05af124e7 Merge branch 'felfert-providerorder' 2018-01-04 11:35:00 -08:00
886b7cf9f7 Merge branch 'providerorder' of https://github.com/felfert/winfsp into felfert-providerorder 2018-01-04 11:10:19 -08:00
e111451475 dll: FspLaunch API 2018-01-04 11:08:23 -08:00
0c38f92082 Use FSP_NP_ORDER_FIRST to specify provider order 2018-01-04 01:12:34 +01:00
9bd9cf4fbd update source copyright notices for 2018 2018-01-03 15:29:38 -08:00
2f026cbc6f launcher: code cleanup 2018-01-03 14:55:27 -08:00
68d8ade667 Speed up mount operation by putting winfsp network provider at the head of network providers 2017-12-29 18:56:11 +01:00
d9c450ecf4 update Changelog 2017-12-20 13:30:34 -08:00
e6d2ef9274 launcher: new WorkDirectory registry value controls file system work dir 2017-12-19 17:50:26 -08:00
299f371dee Merge branch 'pvt-launcher2' 2017-12-19 16:48:05 -08:00
bb8aee8673 Sort contributor names (alpha-sort by first name) 2017-12-19 16:26:23 -08:00
08bf8e14ce Merge branch 'felfert-winfsp#128' 2017-12-19 16:22:37 -08:00
ef1912bd8a installer: Product.wxs: whitespace fixes 2017-12-19 16:22:12 -08:00
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
e6ed6dbf4f Signed Contributors.asciidoc 2017-12-15 15:30:02 +01:00
f13b98c880 Add WixDependencyExtension and Provides WinFSPprovider 2017-12-15 14:53:06 +01:00
5d3b37122c launcher: LogonCreateProcess 2017-12-12 14:39:56 -08:00
9d1c892d68 Merge branch 'master' into pvt-launcher2 2017-12-12 14:30:13 -08:00
7008871ed7 Merge branch 'release/1.2' 2017-12-12 13:13:41 -08:00
2a3eabfab2 changelog: v1.2POST1 2017-12-12 10:07:54 -08:00
35255526d3 launcher: work around Win7 CreateProcess problem 2017-12-11 21:40:47 -08:00
b2e474658d launcher: work around Win7 CreateProcess problem 2017-12-11 21:23:38 -08:00
4fe85222b1 dll: wksid: well known SID's 2017-12-11 15:03:32 -08:00
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
ea873ece22 src: launcher: LogonCreateProcess: ImpersonateLoggedOnUser 2017-12-09 17:45:10 -08:00
42e01a9b27 src: launcher: RunAs, LogonCreateProcess 2017-12-09 17:00:09 -08:00
c1c9dca94b build: update version to 2018.1 B1 2017-12-09 11:43:43 -08:00
dcabdff422 .github: add issue and PR templates 2017-12-08 21:53:57 -08:00
a2ec40008f build: choco: update chocolatey package as per guidelines from chocolatey admin 2017-12-06 16:24:27 -08:00
f3819ba839 tst: passthrough-dotnet: fix ReadDirectoryEntry when running fs over drive root 2017-12-05 18:50:39 -08:00
ead599e337 tst: passthrough-dotnet: handle undoc wildcards in ReadDirectoryEntry
- reported by Pavel Franc over email
2017-12-05 10:32:58 -08:00
eb88f25f40 tst: passthrough-dotnet: Create,Overwrite: set archive bit 2017-12-04 16:24:48 -08:00
c2b066a054 dll: fuse: Create: do not add FILE_ATTRIBUTE_ARCHIVE for directories 2017-12-04 14:16:24 -08:00
266e0f4bab dll: fuse: call chflags from Create and Overwrite
tst: winfsp-tests: file attributes test
2017-12-04 14:08:44 -08:00
d02030897d dll: fuse: add O_EXCL during FUSE create op 2017-12-03 19:56:36 -08:00
c87ff75b8f sys: fix filename length check during query directory operations 2017-12-01 17:01:59 -08:00
2ca33665ef update changelog 2017-11-29 16:28:21 -08:00
391dcf8a21 build: update version to 1.2 (Gold) 2017-11-29 16:24:19 -08:00
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
d58f4b84a5 opt: cygfuse: update tarballs 2017-11-28 16:53:21 -08:00
61935e4671 tst: passthrough-fuse: gix cygwin build 2017-11-28 16:52:36 -08:00
41838627c0 update README 2017-11-28 15:55:06 -08:00
0b67329fc2 doc: update known file systems 2017-11-28 15:46:07 -08:00
5c962c8fc5 doc: includes notes on backwards compat testing 2017-11-15 15:08:26 -08:00
a9080208d9 tools,tst: backwards compat testing for FUSE layer 2017-11-15 13:41:17 -08:00
3cc9697248 update changelog for v1.2B3 2017-11-15 11:57:53 -08:00
9f45d513ca build: update version to 2017.2 B3 2017-11-15 11:29:08 -08:00
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
7c11a45e6e tst: passthrough-fuse: setcrtime 2017-11-14 21:55:41 -08:00
48ad297df1 dll: fuse: setcrtime, setchgtime 2017-11-14 21:55:09 -08:00
3d2de57e9d tst: passthrough-fuse: streamline time calculations 2017-11-14 21:38:20 -08:00
658d873efb dll: fuse: streamline time calculations 2017-11-14 21:37:50 -08:00
efc93cacd3 tst: passthrough-fuse: BSD flags support 2017-11-14 14:25:17 -08:00
41b54ef57a tools: run-tests: enable setfileinfo_test for passthrough-fuse 2017-11-14 12:02:19 -08:00
fd662ee848 tst: passthrough-fuse: BSD flags support 2017-11-14 12:01:00 -08:00
895bf67691 dll: fuse: implement BSD flags support 2017-11-14 09:11:51 -08:00
e06fe4153d dll: fuse: implement BSD flags support 2017-11-13 20:44:49 -08:00
9f2fe92db7 tst: memfs: slowio: improvements 2017-11-03 10:01:27 -07:00
d3f829b2df tools: run-tests: fsx-memfs-*-slowio 2017-11-02 21:45:08 -07:00
fa4651b3ce tst: winfsp-tests: enable slowio 2017-11-02 17:36:52 -07:00
5a44e5c04a tst: memfs: fix pending Write 2017-11-02 16:19:19 -07:00
68122b5c68 tst: winfsp-tests: enable slowiio 2017-11-02 15:59:32 -07:00
b672312c79 tst: memfs: code cleanup and testing 2017-11-02 15:43:14 -07:00
0ab35fde1a tst: memfs: slowio: minor code cleanup 2017-11-01 18:30:36 -07:00
9be2b7a2b9 tst: memfs: slowio 2017-11-01 17:12:29 -07:00
39dd7662bd Update Contributors.asciidoc 2017-11-01 09:58:11 -07:00
244afc8a3c Update memfs-main.c 2017-10-31 15:50:50 -07:00
111955db84 Update memfs.cpp 2017-10-31 15:44:24 -07:00
76ff8232bc Update memfs-main.c 2017-10-31 15:42:26 -07:00
9a3ac3c7a1 Update memfs.h 2017-10-31 15:39:19 -07:00
4adc0d4700 Update memfs-test.c 2017-10-31 15:36:09 -07:00
91c714dd53 Update fscrash-main.c 2017-10-31 15:32:12 -07:00
11cb57a0bf dll: np: pass username as argument to launcher 2017-10-27 15:12:18 -07:00
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
fa388e57ad appveyor: add avast testing 2017-10-20 13:54:26 -07:00
1952d0d941 update changelog 2017-10-19 19:18:21 -07:00
1a02438488 sys: dirctl: fix 32-bit builds (after Avast changes) 2017-10-19 17:19:31 -07:00
07f15c236b sys: dirctl: eliminate use of SystemBuffer to work around problems with Avast 2017-10-19 16:49:10 -07:00
93af1be861 update changelog 2017-10-12 10:11:01 -07:00
b52c90f980 update changelog 2017-10-12 10:02:28 -07:00
b154c307b7 version.properties: update build to 2017.2 B2 2017-10-12 09:52:41 -07:00
697063af51 inc: winfsp.h: minor restructuring 2017-10-11 17:17:18 -07:00
436e31da34 dotnet: GetOperationProcessId 2017-10-11 17:07:38 -07:00
92e7dbad21 sys: Create and Rename requests should include the originating process PID 2017-10-11 16:28:50 -07:00
4812f5bbd0 sys: Create and Rename requests should include the originating process PID 2017-10-11 16:25:22 -07:00
045a1fa19c Update memfs-test.c 2017-10-09 14:51:18 -07:00
c9b2c0460b Update fscrash-main.c 2017-10-09 14:49:50 -07:00
1468df78a2 Update memfs.h 2017-10-09 14:48:33 -07:00
0fb6299f17 Update memfs-main.c 2017-10-09 14:47:28 -07:00
0da43fe2d4 Update memfs.cpp 2017-10-09 14:46:24 -07:00
d824ba464d version.properties: update build to 2017.2 B1 2017-10-01 11:45:23 -07:00
affca267c5 update changelog 2017-10-01 11:39:15 -07:00
4b7684122b dll: fuse: disable GetDirInfoByName when file system is case-insensitive 2017-10-01 11:07:01 -07:00
55eee2efdd dll: GetDirInfoByName: eliminate unnecessary marker check 2017-09-30 12:33:05 -07:00
f8a05eae95 memfs: fix Unicode case-insensitive comparison 2017-09-29 16:27:28 -07:00
9a4f04f46a sys: FspFsvolQueryDirectoryRetry: special handling for when pattern is filename 2017-09-29 15:44:49 -07:00
98334208b9 Revert commit c70089a176 2017-09-29 15:20:38 -07:00
aae0a5bc74 dll: fuse: GetDirInfoByName 2017-09-28 16:55:45 -07:00
2438ece1cf memfs-dotnet: GetDirInfoByName 2017-09-28 14:41:27 -07:00
487d2449fe dotnet: GetDirInfoByName 2017-09-28 14:11:58 -07:00
6430b386da dll: GetDirInfoByName: properly handle marker for kernel cached directories 2017-09-28 14:05:55 -07:00
c70089a176 sys: FSP_FILE_DESC: DirectoryNoMoreFiles optimization 2017-09-27 18:01:17 -07:00
0dff9a4c07 memfs: GetDirInfoByName 2017-09-27 17:08:41 -07:00
86c0ffa942 fsbench: file_list_single_test, file_list_none_test 2017-09-27 15:59:54 -07:00
5c613b2abd memfs: ReadDirectory: assert(0 == Pattern) 2017-09-26 14:26:57 -07:00
8a099f3faa sys: PassQueryDirectoryFileName 2017-09-26 14:19:27 -07:00
1ac172d2f8 inc,sys: PassQueryDirectoryFileName 2017-09-26 11:51:49 -07:00
34546def3c sys,dll: GetDirInfoByName 2017-09-25 19:46:36 -07:00
3ede1a5c70 memfs-dotnet: fix GetDescendantFileNames 2017-09-25 12:53:08 -07:00
5194536ec3 memfs: fix issue #103 2017-09-25 11:58:20 -07:00
c39bc81299 tools: run-tests: run FSX over passthrough-fuse 2017-09-16 11:00:07 -07:00
18bf6ca666 Merge pull request #107 from saibotu/pr-writesize
Don't decrease FileSize on write
2017-09-16 10:56:34 -07:00
7eebdbd74e Signed CONTRIBUTOR AGREEMENT 2017-09-16 17:41:17 +02:00
9a88791f61 dll: fuse: don't decrease FileSize on write 2017-09-15 13:32:08 +02:00
6e578350f4 doc: update file system libraries 2017-09-01 15:20:20 -07:00
81afac9c3a fsptool: usage 2017-07-19 23:33:53 -07:00
10081e1a69 fsptool: perm 2017-07-19 23:28:46 -07:00
8e5c40bbbe fsptool: perm 2017-07-19 23:16:05 -07:00
7745bf4cdc fsptool: usage 2017-07-19 21:55:28 -07:00
c7a779fa98 fsptool: id 2017-07-20 05:29:13 +01:00
3f90d60dc4 fsptool: id 2017-07-19 20:17:25 -07:00
f73cbc0e37 fsptool: id 2017-07-19 17:35:24 -07:00
c88a86f7c7 fsptool: id 2017-07-19 17:26:00 -07:00
dbdbdf07cf fsptool: id 2017-07-19 16:48:00 -07:00
6b2dcaef96 fsptool: getuid, getgid 2017-07-19 16:05:49 -07:00
fcae6ce018 fsptool: update Changelog 2017-07-19 15:38:03 -07:00
690d3e4c8e fsptool: lsvol 2017-07-19 15:22:43 -07:00
af37424ecc fsptool: lsvol 2017-07-19 14:56:32 -07:00
fd53e22f7e fstool: skeleton 2017-07-19 14:16:01 -07:00
3df0fa02ba build: refactor project for fsptool 2017-07-19 12:10:27 -07:00
9484b50cbd changelog: FspFileSystemOperationProcessId 2017-07-18 14:37:46 -07:00
14e6b402fe build: version.properties: MyGitRevision fix 2017-07-14 20:33:59 -07:00
2227429d8e opt: cygfuse: winpid_to_pid 2017-07-13 00:10:03 -07:00
9deb9d5319 dll: fuse: winpid_to_pid 2017-07-12 23:45:40 -07:00
193d5f4e91 tst: originating process id 2017-07-12 22:34:47 -07:00
26485ffbd6 sys: originating process id 2017-07-12 20:54:12 -07:00
7302b4baea dll: originating process id 2017-07-12 20:18:35 -07:00
fc1586eb82 dll: originating process id 2017-07-12 18:53:12 -07:00
637f461a65 sys: FspFileNodeTrySetFileInfoOnOpen 2017-07-11 15:23:03 -07:00
b35bf204db sys: FspFileNodeTrySetFileInfoOnOpen 2017-07-11 14:17:17 -07:00
3073646f29 doc: add link to queued events document 2017-06-21 14:32:18 -07:00
7f9f55de24 add queued events document 2017-06-21 14:19:56 -07:00
bb3f8d37f2 tools: run-tests: disable passthrough-cpp that is no longer included in installer 2017-06-13 11:13:04 -07:00
c72a9f2a05 build: update for release 1.1 2017-06-12 13:42:05 -07:00
9b4ab190e0 installer: do not install C++ layer 2017-06-12 13:33:45 -07:00
010ed909ec doc: update faq 2017-06-12 12:54:06 -07:00
2b4549a50d doc: update service arch doc with information about credentials 2017-06-12 12:40:50 -07:00
98a329e81b tst: memfs: atomically update FileNode::RefCount (issue #93) 2017-06-07 22:22:28 -07:00
8090b7c666 update Changelog 2017-05-22 17:42:55 -07:00
c7d720eaa0 dll: fuse: allows slashes in -o VolumePrefix=PREFIX 2017-05-22 17:02:40 -07:00
8320160d73 build: version.properties: update to v1.1B3 2017-05-22 13:49:59 -07:00
ce057b49b8 update Changelog 2017-05-22 13:30:16 -07:00
a60c989089 update Changelog 2017-05-22 21:25:44 +01:00
0f6371f0d8 tools: run-tests: add fsx and winfstest for memfs-dotnet 2017-05-17 21:07:37 -07:00
1a4bbbe09a cygfuse: fix tabs to spaces 2017-05-17 15:19:36 -07:00
4e891dc2a8 cygfuse: add fuse_exited 2017-05-17 15:13:05 -07:00
18a77d63c3 cygfuse: improve cygfuse initialization 2017-05-17 14:59:31 -07:00
4ea9c6e362 dll: fuse: added -o options for additional WinFsp-FUSE options 2017-05-17 12:11:45 -07:00
9d77c192a8 cygfuse: cygfuse_init_fail now prints message and exits 2017-05-17 10:58:04 -07:00
6d5401d911 cygfuse: add 32-bit package 2017-05-17 00:54:26 -07:00
330d6e79f8 opt: cygfuse: bump release number to 5 2017-05-17 00:05:41 -07:00
ed58b7a63c inc: fuse: fix missing-field-initializers warning 2017-05-16 23:41:02 -07:00
f6853114c1 dll: fuse: implement fuse_exited 2017-05-16 23:26:18 -07:00
8ec7285d32 doc: add rclone to known file systems 2017-05-15 15:12:26 -07:00
c183c0fe89 doc: add rar2fs to the known file systems 2017-05-13 16:37:26 -07:00
38ad8fd27d update README 2017-05-11 13:51:56 -07:00
de85070e73 tst: winfsp-tests: disable internal tests when running with --external 2017-05-11 11:17:57 -07:00
5b8ebd6e1d src: dotnet: minor documentation fixes 2017-05-11 10:38:12 -07:00
db530cb5e5 installer: add dotnet documentation 2017-05-10 23:32:43 -07:00
7cd4d4faab src: dotnet: add documentation 2017-05-10 23:11:42 -07:00
2560a513dc update changelog 2017-05-09 23:12:45 -07:00
1ee95be5d7 src: dotnet: FileSystemBase: GetStreamInfo: bug fix 2017-05-09 23:01:31 -07:00
bd7546559c tst: memfs-dotnet: Create: fix allocation size 2017-05-09 22:02:37 -07:00
d18a2c8b75 tst: memfs-dotnet: ReadDirectoryEntry: properly handle Marker 2017-05-09 17:49:43 -07:00
0ebae0adc1 src: dotnet: FileSystemHost.GetSecurityByName: handle STATUS_REPARSE 2017-05-09 16:58:16 -07:00
d70c49ccd0 tools: run-tests: add memfs-dotnet testing 2017-05-09 00:03:01 -07:00
5846939116 tools: run-tests: add memfs-dotnet testing 2017-05-08 23:11:45 -07:00
f124e74f01 installer: add memfs-dotnet 2017-05-08 22:56:06 -07:00
05abb93e4b tst: memfs-dotnet: fix stream_getstreaminfo_test 2017-05-08 22:17:17 -07:00
5839d46b7a tst: memfs-dotnet: fix stream_create_overwrite_test 2017-05-08 21:57:45 -07:00
bce0d63f7d tst: memfs-dotnet: fix read/write offset copy 2017-05-08 21:53:49 -07:00
14b9f5affc tst: memfs-dotnet: fix rename_caseins_test 2017-05-08 21:45:30 -07:00
035a430470 tst: dotnet: SetSecurity testing 2017-05-08 21:25:25 -07:00
0af9e46e76 src: dotnet: FileSystemBase.ModifySecurityDescriptor 2017-05-08 21:25:03 -07:00
c4530f1252 tst: memfs-dotnet: testing 2017-05-07 17:40:47 -07:00
9f78a17583 tst: memfs-dotnet: reparse points testing 2017-05-07 17:12:08 -07:00
eea0b1bc79 src: dotnet: GetReparseTag 2017-05-07 17:11:39 -07:00
8338a6e066 tst: memfs-dotnet: fix exceptions in SetFileSizeInternal 2017-05-07 16:29:28 -07:00
ddba49dbea tst: memfs-dotnet: remove unnecessary OpenNodeSet 2017-05-07 16:28:49 -07:00
a6ff8a87de tst: memfs-dotnet: ReadDirectory fixes 2017-05-07 15:45:01 -07:00
bf64bcf9ba dotnet: fix problems with FullContext and GCHandle 2017-05-07 15:13:22 -07:00
8c5d9bda20 tst: memfs-dotnet: testing 2017-05-06 23:40:46 -07:00
f1ac28b0aa dotnet: log exceptions 2017-05-06 23:39:58 -07:00
ff725f931d tst: memfs-dotnet: testing 2017-05-06 23:10:40 -07:00
31519ba416 dotnet: bug fixes 2017-05-06 17:01:55 -07:00
0bca8f851c tst: memfs-dotnet: remove dead code 2017-05-06 15:06:29 -07:00
acf175da60 tst: memfs-dotnet: WIP 2017-05-06 14:49:17 -07:00
23eac24c84 dotnet: FileSystemBase.GetStreamEntry 2017-05-06 14:48:56 -07:00
0f9ef3bd51 tst: memfs-dotnet: WIP 2017-05-05 20:30:07 -07:00
2bdd54536e dotnet: reparse point WIP 2017-05-05 20:29:47 -07:00
060ebcca0d tst: memfs-dotnet: WIP 2017-05-05 18:24:17 -07:00
b38a89e485 dotnet: reparse point changes 2017-05-05 18:23:52 -07:00
b5bfeee027 dotnet: FileSystemHost: fixes 2017-05-05 16:15:29 -07:00
f36cacaf84 tst: memfs-dotnet: WIP 2017-05-05 14:47:48 -07:00
4278cec465 tst: memfs-dotnet: WIP 2017-05-05 12:08:32 -07:00
151627091b tst: memfs-dotnet: WIP 2017-05-04 23:00:53 -07:00
2ee3f02928 tst: memfs-dotnet: WIP 2017-05-04 21:56:46 -07:00
d77d3ccccf tools: version-info.bat: toggle executable bit 2017-05-04 15:19:11 -07:00
1e0c91658e doc: add cgofuse to known file systems 2017-04-28 14:52:05 -07:00
568096b560 build: installer: mark as Beta 2017-04-17 16:57:06 -07:00
b2e175a991 build: installer: mark as Beta 2017-04-17 16:54:17 -07:00
757c4f151d Update README to point to latest release 2017-04-17 16:46:44 -07:00
8b71e18972 inc: winfsp.hpp: refactor FileSystem class into FileSystemHost and FileSystemBase 2017-04-17 14:30:07 -07:00
4e7f988371 inc: winfsp.hpp: refactor FileSystem class into FileSystemHost and FileSystemBase 2017-04-17 13:20:07 -07:00
eb04d7ab90 build: installer: add cygfuse 2017-04-16 15:44:55 -07:00
d6c3b7304d Update README with chocolatey linl 2017-04-16 13:03:51 -07:00
1ee563cd13 src: dotnet: refactor FileSystem class into FileSystemHost and FileSystemBase 2017-04-16 11:46:16 -07:00
8787f2c528 inc: winfsp.hpp: FileSystem: ReadDirectoryEntry and friends 2017-04-14 00:01:08 -07:00
4c102ab57c inc: winfsp.hpp: SetDebugLogFile 2017-04-13 22:19:17 -07:00
bf87c539fd inc: winfsp.hpp: Service class improvements 2017-04-13 21:57:07 -07:00
d5802f3a5f inc: winfsp.hpp: improve C++ layer 2017-04-13 18:23:55 -07:00
c144d4d303 src: dotnet: FileSystem: convert Set* methods to properties 2017-04-13 16:33:32 -07:00
9770efde14 build: dotnet: change assembly versioning scheme (fix to 1.0.0.0) 2017-04-13 16:04:13 -07:00
197ce7c30a src: dotnet: check dll version during assembly load 2017-04-12 15:37:19 -07:00
5d8384a508 src: dll: FspFsctlFixServiceSecurity
- fix GetEffectiveRightsFromAclW ERROR_CIRCULAR_DEPENDENCY
2017-04-12 10:50:27 -07:00
8bb46a5f86 doc: update FAQ 2017-04-12 10:02:16 -07:00
a3087cb696 update Changelog 2017-04-12 00:31:13 -07:00
92b1a8c00d update README 2017-04-12 00:11:26 -07:00
bbf641e721 build: installer: add .NET feature 2017-04-11 22:55:09 -07:00
539ab9ce63 tst: passthrough-dotnet: remove EnableRestoreBackupPrivileges 2017-04-11 19:56:47 -07:00
a29390412b tst: passthrough-dotnet: include in test suite 2017-04-11 18:23:56 -07:00
739eb80cfb tst: passthrough-dotnet: EnableBackupRestorePrivileges 2017-04-11 16:46:11 -07:00
f9a470a0f0 tools: run-tests: sample running improvements 2017-04-11 16:03:10 -07:00
44358e118c build: installer: add passthrough-dotnet 2017-04-11 15:13:07 -07:00
2a7ee146f1 update License with reference to winfsp-msil.dll 2017-04-11 14:47:49 -07:00
0ddeb02235 build: dotnet: use older Assembly Linker for publisher policy 2017-04-11 14:43:18 -07:00
26d8ea1c1c build: dotnet: improvements 2017-04-11 14:07:04 -07:00
fa4aaf2fb7 build: installer: add winfsp-msil.dll in installation bin directory 2017-04-11 13:29:31 -07:00
7645a0185b build: dotnet: add version info to publisher policy 2017-04-11 12:01:51 -07:00
dcf38cdf08 build: installer: add .NET assembly and GAC it 2017-04-11 00:39:57 -07:00
c7ca500dd5 build: dotnet: update publisher policy 2017-04-10 23:03:16 -07:00
d9fcc8ca1c build: dotnet: strong name assembly and add publisher policy 2017-04-10 22:51:15 -07:00
259f2bf1c1 tst: passthrough-dotnet: fix security 2017-04-10 21:33:49 -07:00
67711082b0 tst: passthrough-dotnet: testing 2017-04-10 20:08:14 -07:00
f2d98bbf25 tst: passthrough-dotnet: major refactoring and testing 2017-04-10 14:48:26 -07:00
e40505adb5 tst: passthrough-dotnet: minor fix 2017-04-10 10:34:31 -07:00
ac7b7f4a1b tst: passthrough-dotnet: testing 2017-04-10 10:03:59 -07:00
aa53b1e5ef src: dotnet: fix UnmanagedFunctionPointer delegate lifetime 2017-04-09 21:37:04 -07:00
c4b73c8eda tst: passthrough-dotnet: Cleanup: minor fix 2017-04-09 17:58:46 -07:00
332bce6322 src: dotnet: fix Boolean marshalling 2017-04-09 17:37:22 -07:00
5ef1de2647 src: dotnet: fix FspFileSystemMountPointF prototype 2017-04-09 17:01:18 -07:00
de60e76b1d tst: passthrough-dotnet: testing 2017-04-09 02:01:19 -07:00
8f8e8fe086 src: dotnet: testing 2017-04-09 02:01:03 -07:00
0ac9a83026 build: version.properties: update version number 2017-04-08 22:15:49 -07:00
b8c97caec0 tst: passthrough-dotnet: update .gitignore 2017-04-08 22:08:24 -07:00
f9b8bfc020 src: dll,dotnet: add out-of-line API's 2017-04-08 21:13:21 -07:00
f938bf5e3f tst: passthrough-dotnet: ReadDirectory 2017-04-08 18:42:20 -07:00
a0df9babf9 src: dotnet: ReadDirectory helpers 2017-04-08 18:41:00 -07:00
0d9d8ef5a2 tst: passthrough-dotnet: WIP 2017-04-08 11:29:56 -07:00
668948ebc1 src: dll: SetDebugLogFile and other fixes 2017-04-08 11:29:32 -07:00
83c9351d38 tst: passthrough-dotnet: WIP 2017-04-07 22:28:57 -07:00
aa1e32494c src: dotnet: add FspDebugLogSetHandle 2017-04-07 22:28:24 -07:00
6365a553dc src: dotnet: WIP 2017-04-07 22:11:57 -07:00
1245a29be6 src: dotnet: WIP 2017-04-07 16:23:56 -07:00
c79785c2db src: dotnet: WIP 2017-04-07 13:52:26 -07:00
f117a89697 src: dotnet: WIP 2017-04-07 12:35:20 -07:00
33f5b8c05b src: dotnet: WIP 2017-04-07 12:31:51 -07:00
9a02a46cf4 tst: passthrough-dotnet: fix problem with vshost ignore Main return value 2017-04-07 11:03:58 -07:00
4d6fc3c848 src: dotnet: testing 2017-04-07 10:52:52 -07:00
964f2eed69 src: dotnet: Service testing 2017-04-07 10:29:50 -07:00
b45cff2881 tst: passthrough-dotnet: initial commit 2017-04-06 23:49:55 -07:00
f219885939 src: dotnet: testing 2017-04-06 23:48:58 -07:00
0cfc730745 tools: version-info.bat 2017-04-06 15:56:01 -07:00
a3643f8b02 build: reorganize winfsp.net project 2017-04-06 14:12:33 -07:00
de61eaf6b8 src: dotnet: Service improvements 2017-04-06 13:05:31 -07:00
075a2b6e4c build: version.properties: AssemblyVersion 2017-04-05 17:31:11 -07:00
37affbf572 build: version.properties: AssemblyVersion 2017-04-05 17:18:49 -07:00
20b3ecd0cd src: dotnet: WIP 2017-04-05 16:31:38 -07:00
c782c4d668 src: dotnet: add Service class 2017-04-05 16:25:38 -07:00
d545b8df26 src: dotnet: WIP 2017-04-03 17:21:54 -07:00
08e520e0ec src: dotnet: WIP 2017-04-03 17:07:32 -07:00
a5db7a2cca src: dotnet: WIP 2017-04-03 15:27:33 -07:00
74c2494bbd src: dotnet: WIP 2017-04-03 15:15:13 -07:00
858f77cdf7 src: dotnet: WIP 2017-04-03 14:54:26 -07:00
30dae34700 src: dotnet: WIP 2017-04-03 13:52:35 -07:00
36d50facd7 src: dotnet: WIP 2017-04-03 13:42:59 -07:00
55dd8797d8 src: dotnet: WIP 2017-04-03 12:55:08 -07:00
27114184d2 src: dotnet: WIP 2017-04-03 12:06:45 -07:00
1980f511ce src: dotnet: WIP 2017-04-03 11:42:39 -07:00
4cbee05849 src: dotnet: WIP 2017-04-03 10:45:41 -07:00
f2391d99d5 src: dotnet: WIP 2017-04-02 22:40:43 -07:00
fa9ff37de9 src: dotnet: WIP 2017-04-02 16:37:21 -07:00
39b60c1348 src: dotnet: WIP 2017-04-02 16:36:10 -07:00
5bc15a7e54 src: dotnet: FileSystem+NtStatus 2017-04-02 15:38:25 -07:00
81bc200fe7 src: dotnet: WIP 2017-04-02 15:20:31 -07:00
89324d2327 src: dotnet: WIP 2017-04-02 15:13:05 -07:00
47b81a8025 src: dotnet: WIP 2017-04-02 12:43:49 -07:00
02cec420e7 src: dotnet: WIP 2017-04-02 11:44:25 -07:00
8e7e959d8a src: dotnet: WIP 2017-04-02 11:31:06 -07:00
fc51b7cc22 src: dotnet: WIP 2017-04-01 18:00:34 -07:00
ff5850847f src: dotnet: WIP 2017-04-01 16:43:30 -07:00
ab462fb546 src: dotnet: WIP 2017-04-01 16:13:09 -07:00
a5eadc50a7 add .net dll and project 2017-04-01 01:06:40 -07:00
afe7f8d728 inc: winfsp.hpp: add convenience functions in Fsp namespace 2017-03-30 12:16:01 -07:00
c137d49dcd tst: passthrough-cpp: minor fix 2017-03-30 12:08:11 -07:00
b70337bac3 inc: winfsp.hpp: default VolumeParams are same as in C API 2017-03-30 11:50:51 -07:00
c9b5f25ffc tst: passthrough-cpp: minor improvements 2017-03-29 14:40:37 -07:00
96f6c28885 inc: winfsp.hpp: FSP_CPP_EXCEPTION_GUARD 2017-03-29 14:37:19 -07:00
deb8aed91f inc: winfsp.hpp: FSP_CPP_EXCEPTION_GUARD 2017-03-29 14:36:25 -07:00
fac270e596 inc: winfsp: add Service class 2017-03-28 17:32:19 -07:00
0189adac8f src: dll: Service: minor fix 2017-03-28 16:06:52 -07:00
af772d7a86 tools: run-tests: add passthrough-cpp 2017-03-28 10:10:21 -07:00
96554cc0ca tools: run-tests: add passthrough-cpp 2017-03-27 20:55:56 -07:00
ddb3698c89 installer: add winfsp.hpp and passthrough-cpp 2017-03-27 20:15:52 -07:00
9657ae31c3 tst: passthrough-cpp: FspLoad 2017-03-27 17:39:24 -07:00
0795774e9e inc: winfsp.hpp: testing 2017-03-27 17:38:52 -07:00
763f256e1f inc: winfsp.hpp: catch exceptions from file system operations 2017-03-27 16:25:35 -07:00
367f450e30 tst: passthrough-cpp: initial implementation 2017-03-27 13:44:41 -07:00
7afdee7c01 inc: winfsp.hpp: improvements 2017-03-27 13:43:43 -07:00
87c5f19ce1 inc: winfsp.hpp: Fsp::FileSystem::Mount 2017-03-26 23:19:33 -07:00
00d1a3176e inc: winfsp.hpp: initial implementation of a C++ layer 2017-03-26 23:10:22 -07:00
6318e7b0ef doc: update known file systems document 2017-03-24 17:10:23 -07:00
5d23b1fef8 doc: add known file systems document 2017-03-24 17:04:03 -07:00
44fe02d2fd doc: update Home 2017-03-24 16:41:01 -07:00
1f0de20b7f build: choco: update package description 2017-03-20 17:20:40 -07:00
bfd2e106ac build: choco: update package as per chocolatey review instructions 2017-03-20 15:30:33 -07:00
b1848e963f Merge branch 'DuroSoft-fuse-volume-label' 2017-03-19 21:33:53 -07:00
a29611fa2a dll: fuse: improve volname option handling 2017-03-19 18:06:21 -07:00
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
9ca7424d27 Revert "appveyor: disable windows defender"
This reverts commit 4f640755bc.
2017-03-19 11:53:44 -07:00
4f640755bc appveyor: disable windows defender 2017-03-19 11:52:14 -07:00
c085a91991 add FUSE support for VolumeLabel via "volname" option
* closes #64
2017-03-19 00:40:45 -04:00
83cd3cab99 add name to CONTRIBUTORS list 2017-03-19 00:21:39 -04:00
67dff84a13 doc: update faq 2017-03-18 16:04:58 -07:00
c702a86fbf doc: add faq 2017-03-18 16:02:39 -07:00
f335a990af doc: add wiki home 2017-03-18 14:56:49 -07:00
ba68ab845b update Changelog 2017-03-13 15:28:16 -07:00
db0566701e dll: fuse: add fuse_* symbols for programs using FFI 2017-03-13 12:30:25 -07:00
433e62f813 dll: do not export FspFileSystemResolveReparsePointsInternal 2017-03-13 11:46:36 -07:00
6777de6569 update Changelog for v1.0 2017-03-11 16:45:40 -08:00
63ee24235b update Changelog for v1.0 2017-03-11 16:37:55 -08:00
c3eb46813e update Changelog for v1.0 2017-03-11 16:21:46 -08:00
bee0fa79b2 build: choco: rename chocolateyUninstall.ps1 to chocolateyBeforeModify.ps1 to properly handle upgrades 2017-03-11 15:06:48 -08:00
d907bf2769 inc: winfsp: RegGetValueW prototype and disable macro redef warnings 2017-03-11 14:32:12 -08:00
38bcece5ce build: choco: remove MSI after installation 2017-03-10 22:14:16 -08:00
193de36301 dll: fuse: debug output goes to stderr; configurable with -oDebugLog=FILE 2017-03-10 21:57:27 -08:00
c080e86f11 build: choco: add admin tag as per chocolatey validator 2017-03-10 15:23:54 -08:00
79811a2faa appveyor: add -y switch for chocolatey 2017-03-10 10:56:21 -08:00
b1e287727d appveyor: test chocolatey uninstall 2017-03-10 10:54:22 -08:00
2def18e271 build: choco: add chocolateyUninstall.ps1 2017-03-10 10:44:56 -08:00
3ddc2249f6 build: choco: add chocolateyUninstall.ps1 2017-03-10 10:37:19 -08:00
709ead9e06 build: choco: initial chocolatey package implementation 2017-03-09 22:14:50 -08:00
7c574da261 build: version.properties: 2017 Gold 2017-03-09 15:54:46 -08:00
0980365082 dll: fuse: fuse_intf_GetVolumeInfo: return default info when statfs unimplemented 2017-03-09 14:59:01 -08:00
ba46d9fef8 update Changelog, README, etc. 2017-02-25 17:59:37 -08:00
4c0386bf8d sys: hardcode AlwaysUseDoubleBuffering for Reads 2017-02-25 11:22:22 -08:00
6774c34422 sys: FspProcessBufferAcquire: fix silly mistake when using ZwAllocateVirtualMemory 2017-02-23 22:24:32 -08:00
3215d8e26a sys: ProcessBuffer: DEBUGTEST 2017-02-23 20:26:14 -08:00
7911f1354f sys: ProcessBuffer: improvements 2017-02-23 17:39:28 -08:00
28f97c2619 sys: ProcessBuffer: conditional usage 2017-02-23 16:36:21 -08:00
4b43cc590f sys: initial ProcessBuffer implementation 2017-02-23 16:06:55 -08:00
441c45c77f sys: fix a couple of static analysis issues 2017-02-21 15:07:06 -08:00
c246acb2d3 dll: FspVersion 2017-02-17 15:22:31 -08:00
50ed020e16 dll: FspVersion 2017-02-17 15:20:57 -08:00
12704a3a4a dll: FspFileSystemSetMountPointEx and related refactoring 2017-02-16 20:30:39 -08:00
186f7cd9ee dll: fuse: minor fix 2017-02-16 17:26:07 -08:00
50830f0bf2 bump version to 2017 RC3 2017-02-16 17:25:54 -08:00
86025aa30b dll: fuse: fuse_mount: now also accepts cygwin paths 2017-02-16 16:53:06 -08:00
31e6f15eaf tst: passthrough-fuse: FSP_FUSE_CAP_*: testing 2017-02-15 18:07:25 -08:00
5ce6d74e90 tst: passthrough-fuse: FSP_FUSE_CAP_*: testing 2017-02-15 17:26:37 -08:00
02ffa6afb2 tst: passthrough-fuse: ptfs_init 2017-02-13 22:03:39 -08:00
712870ddd9 tst: passthrough-fuse: FSP_FUSE_CAP_* 2017-02-13 21:53:37 -08:00
35d1adb360 dll: fuse: improve SectorSize: handling 2017-02-13 16:21:26 -08:00
3b9f9ce93b dll: fuse: discard unused options 2017-02-13 15:11:09 -08:00
a7c5e4f80c dll: fuse: default FileInfoTimeout is now 1000ms 2017-02-12 13:25:43 -08:00
0b826f04c2 tst: winfsp-tests: exec-test: disable test that fails under shares 2017-02-12 11:49:46 -08:00
69d53b7a28 tst: winfsp-tests: exec-test: disable test that fails under shares 2017-02-12 11:33:56 -08:00
877bd97ba8 tst: winfsp-tests: exec-test 2017-02-12 10:42:14 -08:00
559b7e80a3 tst: winfsp-tests: exec-test 2017-02-12 10:29:30 -08:00
495c78eb25 tst: winfsp-tests: exec-test 2017-02-12 00:26:20 -08:00
cf69d6a08d tst: winfsp-tests: delete_standby_test 2017-02-11 10:07:03 -08:00
0d95bb9b14 tst: winfsp-tests: delete_standby_test: disable parts that fail with shares and passthrough 2017-02-10 23:24:05 -08:00
cf48d19759 tst: winfsp-tests: delete_standby_test: disable portion that fails under a share 2017-02-10 22:19:25 -08:00
14c602ccd8 tst: winfsp-tests: delete_standby_test 2017-02-10 21:31:55 -08:00
2d45082d80 tst: winfsp-tests: delete_standby_test 2017-02-10 19:50:16 -08:00
25cf527af4 tst: winfsp-tests: rename_standby_test 2017-02-10 15:47:44 -08:00
76d081937e tst: winfsp-tests: rename_standby_test 2017-02-10 15:25:36 -08:00
ccd4bb869c Experimental fix for github issue #45 2017-02-10 12:39:53 -08:00
46d5c98926 tst: winfsp-tests: rename_standby_test 2017-02-09 17:38:24 -08:00
1726ca8ccb Update README as per issue #48 2017-02-09 12:06:54 -08:00
b8c257f996 Update README as per issue #48 2017-02-09 12:04:51 -08:00
53e6894298 doc: use asciidoc for winfsp.h reference 2017-02-08 17:36:17 -08:00
10d1ba707e Update README.md 2017-02-08 13:42:49 -08:00
c234e2af2a Update README.md 2017-02-08 13:42:30 -08:00
fa652cdb56 launcher: change registry location 2017-02-07 17:15:41 -08:00
aeaeba0dd6 launcher: change registry location 2017-02-07 14:53:27 -08:00
b299027f6e Update Changelog 2017-02-07 12:48:40 -08:00
5edd9eb548 Update Changelog 2017-02-07 12:45:32 -08:00
fbc24bcca9 Update Changelog 2017-02-07 12:44:59 -08:00
4ef6dcb71d Update README.md 2017-02-07 12:35:14 -08:00
b8f0d08672 Update README.md 2017-02-07 12:32:29 -08:00
5c82044295 Update README.md 2017-02-07 12:26:11 -08:00
e3b5426e45 Update README.md 2017-02-07 12:25:27 -08:00
d34f262c02 Merge branch 'pvt-license-change' into release/1.0 2017-02-07 12:21:48 -08:00
ede72e4c5f tst: passthrough: fix missed FspFileSystemReleaseDirectoryBuffer in case of error 2017-02-06 12:05:30 -08:00
9c4b73dac1 add FLOSS exception to License 2017-02-06 11:51:29 -08:00
9ecfc64178 doc: update tutorial 2017-02-04 15:22:42 -08:00
fbe46d8c81 doc: update tutorial 2017-02-04 14:56:01 -08:00
2a12ed490d tools: run-tests: run mountpoint-drive tests with --resilient 2017-02-03 18:50:39 -08:00
c6d9e68c3f Revert "tst: winfsp-tests: getfileinfo_dotest: CREATE_ALWAYS instead of CREATE_NEW"
This reverts commit dca3cb93f3.
2017-02-03 18:48:55 -08:00
bfc41127d0 sys: FspFsvolCreateSharingViolationOplock: fix problem with missed FspFsvolCreatePostClose 2017-02-03 18:08:11 -08:00
6e70500afc sys: FspFsvolCreateComplete: populate FileNode and FileDesc before name normalization 2017-02-03 17:36:16 -08:00
dca3cb93f3 tst: winfsp-tests: getfileinfo_dotest: CREATE_ALWAYS instead of CREATE_NEW 2017-02-02 22:12:49 -08:00
2f0061b4ba tools: run-tests: sample-passthrough-fuse 2017-02-02 21:44:36 -08:00
3fcef3b0fa tools: run-tests: sample-passthrough-fuse 2017-02-02 21:39:13 -08:00
6a0574e309 tools: run-tests: sample-passthrough-fuse 2017-02-02 17:51:08 -08:00
0c945b67f3 dll: fuse: use -ouid=-1,gid=-1 to specify user/group who mounted file system 2017-02-02 17:06:10 -08:00
25b3e111fa dll: fuse: fuse.pc file renamed to fuse.pc.in 2017-02-02 15:01:22 -08:00
09101129a3 tst: passthrough: EnableBackupRestorePrivileges: minor fix 2017-02-02 14:51:45 -08:00
3700b375a7 tst: passthrough-fuse: on Windows allow the --VolumePrefix option to specify path 2017-02-01 21:37:53 -08:00
22fccdb575 build: bump version to RC2 and files to installer 2017-02-01 16:10:13 -08:00
c4932f7c7e tools: run-tests: include passthrough-fuse sample test 2017-02-01 15:38:46 -08:00
303cadb55d tst: passthrough-fuse: update Makefile to link with CYGFUSE or WinFsp-FUSE 2017-02-01 15:30:51 -08:00
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
eefaad241d doc: update tutorial 2017-01-31 17:29:03 -08:00
11dce32baa doc: update tutorial 2017-01-31 17:21:55 -08:00
3b8396dc27 tst: passthrough: minor fix 2017-01-31 16:53:27 -08:00
da7082030a doc: update tutorial 2017-01-31 16:36:30 -08:00
7425eba8af inc: winfsp.h: FspLoad 2017-01-31 16:07:50 -08:00
acf6ce1008 inc: winfsp.h: FspLoad 2017-01-31 15:56:00 -08:00
06f6c192ed tst: passthrough, passthrough-fuse: WinFspLoad: eliminate RRF_SUBKEY_WOW6432KEY 2017-01-31 15:27:15 -08:00
b7a06c7046 tools: run-tests 2017-01-31 14:52:20 -08:00
edb675d2d4 tools: run-tests 2017-01-31 12:21:46 -08:00
9533815931 update Changelog 2017-01-31 12:19:54 -08:00
fe74fc4013 tools: run-tests: sample testing fix 2017-01-31 11:31:00 -08:00
5bd6c1a122 dll: np: NPAddConnection: check volume access and report success/failure 2017-01-31 11:29:24 -08:00
7b15d32c33 appveyor: sample testing 2017-01-30 23:33:50 -08:00
c186289672 tools: run-tests: sample-passthrough-fuse: add but keep disabled 2017-01-30 23:32:22 -08:00
ff649e05c5 tools: run-tests: sample-passthrough* 2017-01-30 23:10:34 -08:00
9a9d3cd4e8 installer: add passthrough-fuse and fsreg.bat 2017-01-30 16:23:45 -08:00
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
178200fd63 doc: update tutorial 2017-01-30 15:32:48 -08:00
396d9d97d2 tst: passthrough: enable backup/restore privileges if able 2017-01-30 15:22:20 -08:00
1d35069aab doc: update tutorial 2017-01-30 14:41:33 -08:00
4421c82ce0 doc: update tutorial 2017-01-30 14:34:44 -08:00
36f0978971 dll: fuse: allow rename for filenames that differ only in case 2017-01-30 11:59:21 -08:00
dae4bad732 tst: passthrough-fuse: testing 2017-01-29 21:25:50 -08:00
75744571ff dll: debug: fix problem with debug logs under 32-bits 2017-01-29 21:23:44 -08:00
0494726f52 tst: passthrough-fuse: testing 2017-01-29 18:06:56 -08:00
a964ab1b73 dll: fuse: CanDelete bug fix 2017-01-29 17:38:13 -08:00
796010c9fe tst: passthrough-fuse: testing 2017-01-29 17:28:40 -08:00
dc343ecbe5 tst: passthrough-fuse: testing 2017-01-29 17:07:22 -08:00
706fa2cc07 tst: passthrough-fuse: fi_fd, fi_setfd, etc. macros 2017-01-29 16:45:21 -08:00
c0aaebd0a5 tst: passthrough-fuse: windows-posix layer: dirfd 2017-01-29 15:45:36 -08:00
9c2b4e5631 tst: passthrough-fuse: testing 2017-01-29 13:59:29 -08:00
206b85c278 tst: passthrough-fuse: testing 2017-01-29 13:48:29 -08:00
075d1821a2 tst: passthrough-fuse: windows-posix layer 2017-01-29 12:44:18 -08:00
c252382204 tst: passthrough-fuse: windows-posix layer 2017-01-29 12:34:28 -08:00
a91e5b01ab tst: passthrough-fuse: windows-posix layer 2017-01-29 10:29:37 -08:00
473914d45f tst: passthrough-fuse: initial checkin 2017-01-28 22:47:46 -08:00
e12e3630bb doc: update tutorial document 2017-01-28 12:40:42 -08:00
960c627924 tst: passthrough: reorg project 2017-01-28 12:34:10 -08:00
f97ef5704f dll: fuse: reimplement ReadDirectory 2017-01-28 11:49:57 -08:00
41605a3d5a doc: update tutorial 2017-01-27 15:40:04 -08:00
e4f0406c4f tools: fsreg
tst: passthrough: support passing passthrough directory using -u
2017-01-27 13:38:45 -08:00
b5bf84b618 installer: add passthrough sample 2017-01-27 11:10:20 -08:00
3c340345c0 tst: passthrough: PassQueryDirectoryPattern 2017-01-26 23:22:59 -08:00
63c23f382b inc: fsctl: PassQueryDirectoryPattern 2017-01-26 23:09:58 -08:00
de5ef0c81d tst: winfsp-tests: --case-insensitive-cmp 2017-01-26 22:58:49 -08:00
7288605f65 tst: passthrough: use FspFileSystem*DirectoryBuffer API's 2017-01-26 16:39:06 -08:00
55a7864173 dll: FspFileSystem*DirectoryBuffer API's 2017-01-26 16:30:33 -08:00
4fe72ab332 sys,dll: ReadDirectory: add Marker, remove Offset 2017-01-25 10:51:37 -08:00
76a2926116 sys,dll: ReadDirectory: add Marker, remove Offset 2017-01-24 20:20:02 -08:00
7843c73d34 sys,dll: ReadDirectory: add Marker, remove Offset 2017-01-24 18:10:13 -08:00
ebad86387c tst: passthrough: testing 2017-01-23 14:33:07 -08:00
5475c414b3 doc: tutorial: minor fixes 2017-01-23 11:23:19 -08:00
e3e111ab27 doc: add tutorial document 2017-01-23 10:52:26 -08:00
9cd6710438 tst: passthrough: minor fix 2017-01-22 16:47:50 -08:00
a5f8736b1e tst: passthrough: ReadDirectory improvements 2017-01-20 20:47:55 -08:00
2ced698256 tst: passthrough: testing 2017-01-20 17:46:43 -08:00
53a4bdc478 tst: passthrough file system: WIP 2017-01-20 13:16:11 -08:00
eea92e89ef tst: passthrough file system: WIP 2017-01-20 13:05:22 -08:00
d519145f61 tst: passthrough file system: WIP 2017-01-20 12:38:25 -08:00
2809f56217 tst: passthrough file system: WIP 2017-01-20 12:03:06 -08:00
8cb76783ad tst: passthrough file system: WIP 2017-01-20 11:07:39 -08:00
117ab9c3e4 tst: passthrough file system: WIP 2017-01-20 10:38:31 -08:00
61a001baf1 tst: passthrough file system: WIP 2017-01-20 00:28:18 -08:00
d0c700eb0f tst: passthrough file system: WIP 2017-01-20 00:13:54 -08:00
b774aea4f4 tst: passthrough file system: WIP 2017-01-19 23:58:36 -08:00
f8e4c1bbc4 tst: passthrough file system: WIP 2017-01-19 22:44:31 -08:00
3bbff30f14 tst: passthrough file system: skeleton 2017-01-19 17:09:02 -08:00
2fe4e18d9c dll: FspFileSystemPreflight 2017-01-16 18:48:05 -08:00
b65322c2ac dll: FspPathIsDrive: bug fix 2017-01-16 18:21:56 -08:00
7764663386 dll: FspFileSystemPreflight 2017-01-16 14:54:10 -08:00
c6ae62f301 Update README - add installer link 2017-01-09 15:34:17 -08:00
6f22828060 tools: build: ensure that driver.cab is properly signed 2017-01-09 12:56:13 -08:00
7c2de68892 tools: build: create single driver.cab file 2017-01-09 12:37:39 -08:00
4656e8ed26 tools: build: incorporate sysdev signed drivers in build 2017-01-08 00:07:03 -08:00
be98326bbb tools: build: create driver.cab for sysdev 2017-01-07 20:59:36 -08:00
52acc3bc48 update Changelog 2017-01-06 12:47:11 -08:00
f68bc75255 build: include git short hash when versioning 2017-01-06 11:35:10 -08:00
029942bbac Update README 2017-01-05 16:54:46 -08:00
cb0c7def54 update README 2017-01-05 16:45:07 -08:00
5fbd75926b update README 2017-01-05 16:11:49 -08:00
bc9bcefc62 doc: add NTFS compatibility document 2017-01-05 15:56:15 -08:00
a57325e8af update source copyright notices for 2017 2017-01-05 13:56:18 -08:00
466922787d doc: update winfsp.h reference 2017-01-05 13:48:50 -08:00
9dc8aca710 inc: winfsp.h: update source documentation 2017-01-05 13:45:30 -08:00
88aeb83211 doc: fix file name case 2017-01-05 12:54:40 -08:00
a7cee1eafe doc: update testing document 2017-01-05 12:34:06 -08:00
eb0816db56 sys: create: do FspFsvolCreatePostClose when normalized name check fails 2017-01-04 16:26:12 -08:00
51833751d0 appveyor: reenable all jobs 2017-01-04 15:15:14 -08:00
155344ea61 appveyor: memory.dmp test 2017-01-04 15:03:03 -08:00
3874e2a6b5 appveyor: upload perf-tests results as artifact 2017-01-04 14:53:45 -08:00
c5740029f7 appveyor: optimize yml file 2017-01-04 14:41:15 -08:00
9973c4c963 appveyor: optimize yml file 2017-01-04 14:39:12 -08:00
6cfda75447 tools: run-perf-tests: 'self' option changed to 'baseline' 2017-01-04 14:28:52 -08:00
c7d6fc355b tools: run-perf-tests: specialized testing using the self option 2017-01-04 14:26:02 -08:00
b062f8683c appveyor: temporary change 2017-01-04 13:47:50 -08:00
cec5f0be08 appveyor: temporary change 2017-01-04 13:45:23 -08:00
40b61f7667 tools: run-perf-tests: fix 2017-01-04 13:44:22 -08:00
7c383654bd appveyor: perf tests job 2017-01-04 13:07:51 -08:00
9e4e7d4bcf tools: run-tests: ifstest: disable StreamNotifyNameTest 2017-01-03 23:40:49 -08:00
638e5a20b6 sys: FspFileNodeCopyActiveList, FspFileNodeCopyOpenList 2017-01-03 23:14:33 -08:00
95bbb584eb sys: FspFileNodeOpen,FspFileNode: maintain active list 2017-01-03 18:57:00 -08:00
1d8241cba7 sys: FspFileNodeNotifyChange: FILE_NOTIFY_CHANGE_STREAM_WRITE 2017-01-03 12:17:52 -08:00
460726df83 tst: memfs: Cleanup now properly update metadata on MainFileNode 2017-01-03 12:07:52 -08:00
b5cefc59e9 tools: run-tests.bat 2017-01-03 10:43:57 -08:00
e9ca1a8996 tools: run-tests 2017-01-03 10:12:44 -08:00
8c0f609a93 tools: run-tests: ifstest 2017-01-03 00:56:58 -08:00
23eabe5939 sys: FspFsvolFileSystemControlReparsePoint: FSCL_DELETE_REPARSE_POINT 2017-01-03 00:48:12 -08:00
eecca688bc sys: FspFileNodeInvalidateFileInfo: use after setting/deleting reparse point 2017-01-01 12:53:58 -08:00
23d2083d8f sys: FspFsvolFileSystemControlReparsePoint 2017-01-01 11:23:38 -08:00
8d379a4c8b tools: run-tests: ifstest: enable ReparsePoints tests 2016-12-31 23:36:45 -08:00
830985d331 sys: FspFsvolFileSystemControlReparsePoint: STATUS_ACCESS_DENIED 2016-12-31 23:01:40 -08:00
6b37e2ef12 sys: FspFsvolFileSystemControlReparsePointComplete 2016-12-31 21:26:12 -08:00
62dbaf56e3 sys: FspFsvolFileSystemControlReparsePointComplete 2016-12-31 20:50:03 -08:00
d301164609 sys: FspFsvolFileSystemControlReparsePointComplete: STATUS_INVALID_PARAMETER 2016-12-31 16:56:02 -08:00
ada3e1b0e5 tools: run-tests: ifstest: do not output unnamed tests 2016-12-31 16:32:33 -08:00
13d6ec3638 sys: FspFileNodeRenameCheck: allow multiple handles open on the file being renamed 2016-12-31 15:28:26 -08:00
2210561b65 sys: FspIopDispatchComplete: check user mode file system response 2016-12-31 11:22:27 -08:00
1713ce9c9e sys: FSP_STATUS_IGNORE_BIT 2016-12-30 19:48:19 -08:00
8f25dd6cab sys: FspIopCompleteIrpEx:
- only update statistics if we actually have a reference to the DeviceObject
2016-12-30 15:36:06 -08:00
c9485ff214 tools: run-tests: ifstest: add information about disabled tests 2016-12-30 15:03:42 -08:00
5ce1a722b3 tools: run-tests: ifstest: FileInformation tests 2016-12-30 14:43:15 -08:00
27315c1111 sys: FspFsvolQueryInformation,FspFsvolSetInformation:
- return STATUS_INVALID_PARAMETER on volume handles
2016-12-30 14:40:28 -08:00
bd38a39dbd sys: FileHardLinkInformation,FileLinkInformation: return STATUS_NOT_SUPPORTED 2016-12-30 14:14:54 -08:00
766734a8e3 sys: FileAlternateNameInformation: return STATUS_OBJECT_NAME_NOT_FOUND 2016-12-30 13:59:56 -08:00
b242a449b8 tools: run-tests: ifstest: enable FileInformation (not all tests pass yet) 2016-12-30 13:43:17 -08:00
c6a6fdfc36 sys: FSCTL_GET_RETRIEVAL_POINTERS 2016-12-30 13:42:46 -08:00
843d3f0362 sys: FspFsvolSetBasicInformation: invalidate dir caches 2016-12-30 11:01:52 -08:00
5190923c9a sys: FspFsvolQueryDirectoryRetry: on RestartScan do not always reset DirectoryPattern 2016-12-29 15:57:02 -08:00
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
e4b4e6a1f9 sys: FSP_FILE_NODE::MainFileNode: reference/dereference on create/delete 2016-12-29 13:16:11 -08:00
fa54898c64 appveyor: improvements 2016-12-28 21:50:22 -08:00
2f82d91e1f appveyor: save memory.dmp 2016-12-28 21:30:24 -08:00
7574c39ffb tools: run-tests: check whether ifstest could remove its directories 2016-12-28 17:41:35 -08:00
bdc02c8ab5 tst: memfs: ReadDirectory fix with concurrent deletes 2016-12-28 16:49:21 -08:00
15c16d7070 tools: run-tests: ifstest: enable ChangeNotification 2016-12-27 22:27:13 -08:00
ba312de59b sys: security: change notification 2016-12-27 22:24:42 -08:00
5824a24bf4 sys: FspFileNodeNotifyChange: significant improvements 2016-12-27 21:30:56 -08:00
f0a0787f6b update submodules 2016-12-27 17:07:58 -08:00
c17b84cff2 sys: statistics: fix stupid mistake when having multiple processors 2016-12-27 16:43:53 -08:00
168acb1a1f sys: statistics: implement FSCTL_FILESYSTEM_GET_STATISTICS 2016-12-26 22:45:48 -08:00
c8206751d2 sys,dll: Flush now takes FileInfo parameter 2016-12-26 13:59:53 -08:00
bec91873fe inc: fsctl: HasTrailingBackslash: allows for better checking user mode 2016-12-24 11:28:59 -08:00
9bf0d5d46d tools: run-tests: ifstest: enable CloseCleanupDelete (-UpdateOnCloseTest) 2016-12-23 17:16:07 -08:00
2d85c7bf73 tst: memfs: update parent timestamp on create/delete 2016-12-23 17:12:23 -08:00
ff3436718c sys: FSP_FILE_DESC::DidSetMetadata 2016-12-23 16:26:16 -08:00
69f6f661ba sys,dll: Cleanup, file times overhaul 2016-12-23 15:30:39 -08:00
6e52def53c tools: run-tests: ifstest: enable all tests that pass 2016-12-22 15:59:26 -08:00
2212d021e1 appveyor: run ifstest 2016-12-22 13:23:03 -08:00
7b94f2bebf sys: FspFileNodeSetFileInfo: TruncateOnClose 2016-12-21 16:45:01 -08:00
c897ddd864 sys,dll: Cleanup/TruncateOnClose overhaul 2016-12-21 16:09:24 -08:00
8d6314e2db tst: winfsp-tests: create_allocation_test 2016-12-20 10:56:35 -08:00
eec63332e0 sys: fileinfo: correctly set AllInformation and StandardInformation DeletePending flag 2016-12-19 13:36:11 -08:00
04186ea834 installer: change product name to WinFsp 2017 2016-12-19 10:46:32 -08:00
3adcf70748 sys: disallow creating a ReadOnly and DeleteOnClose file 2016-12-18 21:50:11 -08:00
33e8b5df04 sys,dll: create: correctly handle FILE_SUPERSEDE 2016-12-18 16:56:11 -08:00
154933ecab sys: overwrite: check hidde/system attributes (IFSTEST) 2016-12-18 16:02:32 -08:00
c760cf9563 tst: winfsp-tests: create_namelen_test: disable test in cases that it cannot work 2016-12-18 14:15:08 -08:00
245bba0a17 sys: name: fix warning on x86 builds 2016-12-18 13:35:25 -08:00
3008575bdf tst: winfsp-tests: create_namelen_test 2016-12-18 12:51:57 -08:00
2ce434efbd tst: run-tests: ifstest 2016-12-18 12:04:20 -08:00
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
c780912810 sys: create: fix status return (IFSTEST) 2016-12-17 12:43:00 -08:00
299605b8fc sys: FILE_ATTRIBUTE_DIRECTORY support 2016-12-17 12:13:53 -08:00
86bccd763c tools: run-tests: ifstest 2016-12-16 23:55:19 -08:00
856d3bdefe tools: run-tests: ifstest 2016-12-16 23:10:13 -08:00
104c830437 tools: run-tests: ifstest 2016-12-16 22:54:40 -08:00
f35a93d1f7 tools: run-tests: ifstest 2016-12-16 20:20:49 -08:00
2d9b1b80fa sys: lockctl: fix hang uncovered by IFSTEST 2016-12-16 16:31:00 -08:00
f1ee19d8dc tst: winfsp-tests: getvolinfo_test: do not do short name testing with shares 2016-12-15 16:52:36 -08:00
671c0c12ab sys: FSCTL_QUERY_PERSISTENT_VOLUME_STATE 2016-12-15 16:15:22 -08:00
6eb2879374 tst: memfs: check FileName length in Create/Open 2016-12-15 14:54:15 -08:00
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
b55c20b393 tools: deploy ifstest.bat 2016-12-15 13:08:25 -08:00
406af6901f tools: ifstest 2016-12-15 11:58:38 -08:00
40735c4687 sys: POOL_NX_OPTIN 2016-12-14 15:06:00 -08:00
08c283f2a9 tools: run-tests: reorder tests 2016-12-13 16:15:50 -08:00
4fc740588e tst: memfs: disable test that fails with --oplock option 2016-12-13 15:41:00 -08:00
54050c7e1d tst: memfs: stream_create_overwrite_test 2016-12-13 15:17:22 -08:00
ff08d63a82 sys,dll: Overwrite: named streams are now removed as per NTFS 2016-12-13 14:37:44 -08:00
c37444b0ae tst: memfs: reference counting and descendant enumeration improvements 2016-12-13 13:24:46 -08:00
bbb51b4971 sys,dll: Overwrite now correctly handles AllocationSize 2016-12-13 11:52:32 -08:00
6de998ff98 sys: rename: capture correct security context 2016-12-12 13:20:42 -08:00
4b024ebe74 sys: security: turns out that the AccessToken is not needed 2016-12-10 17:45:36 -08:00
418c454a4a dll: FspSetSecurityDescriptor: turns out that the AccessToken is not needed 2016-12-09 17:43:11 -08:00
0b61c48cd6 inc: fsctl: FSP_FSCTL_TRANSACT_REQ QueryDirectory: CaseSensitive 2016-12-09 15:35:55 -08:00
945509ef93 tools: run-tests: net use test 2016-12-09 14:43:10 -08:00
3a65ce332b dll,launcher: invariant string comparisons 2016-12-09 14:23:53 -08:00
228f9e2708 tst: memfs: MEMFS_REPARSE_POINTS conditional 2016-12-08 18:58:05 -08:00
ee3918436b fix erroneous file permissions 2016-12-08 18:43:49 -08:00
1bb6d2a0e7 installer: register MEMFS to accommodate bigger file sizes and more files 2016-12-08 12:54:22 -08:00
6d1b9e95db inc: winfsp: add comment regarding limitations of ReadDirectory/Offset 2016-12-08 09:18:09 -08:00
1d8d72129d sys: util: fix Delays when retrying MustSucceed allocations 2016-12-07 17:19:26 -08:00
2ad4e30754 inc: fsctl: add FSP_FSCTL_FILE_INFO::HardLinks field 2016-12-07 16:43:55 -08:00
26cba02091 doc: minor fix in performance testing document 2016-12-07 14:47:10 -08:00
3697defd16 doc: update performance testing document 2016-12-06 22:14:39 -08:00
69a22f1044 doc: update WinFsp Testing document 2016-12-06 19:24:59 -08:00
5a49115a66 doc: fix case insensitive file names 2016-12-06 17:48:04 -08:00
82c8b0d00f doc: rename Performance Testing document 2016-12-06 17:36:47 -08:00
d00b5d88af doc: rename documents 2016-12-06 17:25:51 -08:00
6d19176d7c update README 2016-12-06 17:06:44 -08:00
e231b9c662 doc: add winfsp.h documentation in markdown format 2016-12-06 17:04:44 -08:00
025a74e663 rename .adoc files to .asciidoc 2016-12-06 16:57:09 -08:00
834adbdc36 restructure project to accommodate wiki 2016-12-06 16:40:32 -08:00
25c687d5c5 doc; winfsp-ipc: update document 2016-12-06 15:25:59 -08:00
200de2a7f9 doc: winfsp-ipc: WinFsp as IPC Mechanism 2016-12-06 09:50:37 -08:00
8e7c241f32 doc: perf-tests: update Performance Testing document 2016-12-05 16:37:31 -08:00
e530e671a5 doc: perf-tests: update Performance Testing document 2016-12-05 14:50:29 -08:00
d804f5674d tst: fsbench: disable rdwr sector tests as they are too slow 2016-12-05 11:54:59 -08:00
ac6f024715 fsbench: expand on read/write tests and fixes 2016-12-04 14:41:38 -08:00
a1af8ff921 sys: Queued Events and use fin FSP_IOQ 2016-12-03 19:41:26 -08:00
f7ca9f0522 tst: memfs: ReadDirectory im: optimization to improve quadratic behavior 2016-11-30 21:50:44 -08:00
3518d7a8c2 tst: memfs: ReadDirectory improvements 2016-11-30 16:12:00 -08:00
281d92f2bc doc: perf-tests: improve conditional check for AsciidocFX 2016-11-30 10:00:43 -08:00
7769a2c062 doc: perf-tests: typos 2016-11-30 09:43:10 -08:00
595a77bd2e doc: update perf-tests document 2016-11-29 23:42:41 -08:00
6860a6986a doc: update perf-tests document 2016-11-29 23:34:54 -08:00
63e8cf1090 doc: add perf-tests document and supporting files 2016-11-29 22:22:45 -08:00
7bdca634aa tools: run-perf-tests: only iterate 5 times 2016-11-29 12:43:25 -08:00
535babc0d5 tools: run-perf-tests 2016-11-27 16:32:45 -08:00
e86dcde1a1 tst: fsbench: improvements 2016-11-27 11:16:06 -08:00
6e10e0489b tst: fsbench: mmap tests 2016-11-26 22:09:40 -08:00
f82cad712a tst: fsbench: rdwr test 2016-11-26 20:50:35 -08:00
d12234bb01 tst: memfs: improve memory allocation scheme 2016-11-26 20:08:55 -08:00
10a8519294 tst: fsbench: file_open_test, file_overwrite_test 2016-11-26 12:01:01 -08:00
1b6395fc91 tst: fsbench: file_list_test 2016-11-25 15:10:07 -08:00
f1a363b848 tst: fsbench: simple benchmark program 2016-11-25 11:46:21 -08:00
eea1a8fd8b tst: winfsp-tests: disable tests that cannot work under a network share 2016-11-24 17:35:45 -08:00
5444ce7f50 sys: rename: only do MmFlushImageSection when ImageSectionObject is not NULL 2016-11-24 15:09:39 -08:00
29c140b9cd tst: winfsp-tests: delete_pending_test 2016-11-24 13:34:51 -08:00
cdfd60877b tst: winfsp-tests: delete_mmap_test 2016-11-24 13:26:50 -08:00
e7931e28fd tst: make non-essential and long running tests optional 2016-11-23 21:26:21 -08:00
002a0262f7 sys: FspFileNodeOplockCheckAsyncEx: DEBUGTEST 2016-11-23 21:23:57 -08:00
1ffba78a18 tst: winfsp-tests: oplock testing 2016-11-23 16:19:46 -08:00
1d3423d5fb tst: winfsp-tests: oplock testing 2016-11-23 16:11:24 -08:00
a894e4a2af tst: winfsp-tests: oplock testing 2016-11-23 15:41:28 -08:00
b6f084d71f tst: winfsp-tests: oplock testing 2016-11-23 11:46:46 -08:00
ca6d0d2dcf tst: winfsp-tests: disable oplock tests on shares 2016-11-22 22:15:46 -08:00
d6d781355f sys: DEBUGTEST_EX macro: fix 2016-11-22 22:20:14 -08:00
851a6145cd tst: winfsp-tests: oplock testing 2016-11-22 21:20:31 -08:00
aec7b34e13 tst: winfsp-tests: HookDeleteFileW: oplock testing 2016-11-22 20:21:35 -08:00
38006ba553 tst: HookMoveFileExW: fix problem with requesting oplock on same file 2016-11-22 18:30:08 -08:00
ee469b40e7 sys: FspFileNodeRename: handle cleaned up but not closed file 2016-11-22 17:27:52 -08:00
1f385a9ab5 sys: rename: bail early when attempting to replace directory 2016-11-22 15:47:34 -08:00
ba78fbb956 sys: rename: oplock refactoring 2016-11-22 14:18:10 -08:00
8f10ba4fc9 sys: file: GATHER_DESCENDANTS, SCATTER_DESCENDANTS macros 2016-11-22 11:32:40 -08:00
b0a59e42fc tst: add oplock testsuite run and disable some tests according to configuration 2016-11-21 16:45:10 -08:00
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
37362cb8cc sys: file,wq: make oplock functions paged 2016-11-20 17:52:38 -08:00
127d4cc4eb sys: fsctl: oplock fixes 2016-11-20 15:27:24 -08:00
ce551d4e0d sys: oplock: refactoring/cleanup 2016-11-20 14:08:23 -08:00
53f60a698a tst: winfsp-tests: add oplock option 2016-11-19 22:58:40 -08:00
aa23672b01 sys: fsctl: enable oplock processing 2016-11-18 22:20:03 -08:00
e4de0f0513 sys: oplock: perform stream oplock checks
sys: rename: fix some rename issues
2016-11-18 18:38:15 -08:00
8750451e10 sys: FspFsvolDeviceEnumerateContextByName, FspFileNodeRename: bugfix: properly enumerate/rename streams 2016-11-16 14:34:01 -08:00
358db2a54f sys: oplock: misc fixes and improvements 2016-11-16 13:34:43 -08:00
4294182c1a sys: oplock testing 2016-11-15 17:05:05 -08:00
f17168f2fa sys: oplock testing: DEBUGTEST_EX 2016-11-15 13:17:49 -08:00
959d8537c6 sys: oplock testing 2016-11-14 20:36:51 -08:00
6a48087d5f sys: create: oplock testing 2016-11-14 17:28:53 -08:00
0a59c5d685 tools: add executable bit to batch files 2016-11-14 17:21:00 -08:00
5b1b8288c2 sys: create: FspFsvolCreateOpenOrOverwiteOplock: fix typo 2016-11-14 17:15:09 -08:00
53e2f13e38 sys: FspFileNodeRenameCheck 2016-11-14 11:20:32 -08:00
cb6b10385b sys: rename: oplocks 2016-11-13 22:06:53 -08:00
f49cf412a8 sys: fileinfo: oplocks 2016-11-13 10:45:24 -08:00
764b772731 sys: lockctl, read, write: oplocks 2016-11-12 18:01:27 -08:00
7518a6e418 sys: read, write: oplocks 2016-11-12 13:12:35 -08:00
2772af5478 sys: FspWqOplockPrepare: use work routine 2016-11-12 12:06:28 -08:00
f2535484ea sys: wq: WIP 2016-11-12 11:43:47 -08:00
97ee4fa77f sys: lockctl: oplocks 2016-11-12 11:32:37 -08:00
7c34d738b7 sys: wq: FspWqOplockPrepare, FspWqOplockComplete 2016-11-12 11:31:38 -08:00
93254bede4 sys: lockctl: oplocks 2016-11-11 22:54:09 -08:00
f3894dbc7b sys: cleanup: oplocks 2016-11-11 22:08:14 -08:00
dc684acd41 sys: create: oplocks WIP 2016-11-11 21:34:57 -08:00
69935525da sys: create: oplocks WIP 2016-11-11 17:58:57 -08:00
6ba6e16851 sys: create: oplocks: WIP 2016-11-11 17:06:19 -08:00
d33089331b sys: create: sharing violation oplock checks 2016-11-11 16:53:35 -08:00
74de84aaab sys: create: sharing violation oplock checks 2016-11-11 16:52:21 -08:00
a9b4fd4634 sys: FspFileNodeClose 2016-11-11 10:54:21 -08:00
c6798b3060 sys: create: move some code around 2016-11-11 09:39:17 -08:00
f6e3b8e416 sys: create: oplock: WIP 2016-11-11 09:30:29 -08:00
f05ebd9d20 sys: FspFsvolCreateSharingViolationWork 2016-11-10 18:14:17 -08:00
e50c9ff649 sys: IRP_MJ_CREATE: oplock support 2016-11-10 15:03:58 -08:00
fb70eccc9c sys: IRP_MJ_CREATE: oplock support 2016-11-10 14:54:41 -08:00
7adbd7a56c sys: FspIopSetIrpResponse 2016-11-10 13:20:03 -08:00
55c7384c65 sys: FspIopCreateRequestWorkItem 2016-11-10 12:40:21 -08:00
bc8962d2b6 sys: FspOplockBreakH 2016-11-10 12:29:11 -08:00
2267eadbca sys: disable oplock requests momentarily for testing 2016-11-10 12:12:35 -08:00
154aa28381 sys: FspFsvolFileSystemControlOplock: WIP 2016-11-10 12:11:35 -08:00
2d98cda607 sys: oplocks: WIP 2016-11-10 12:11:14 -08:00
8395b22ddc sys: oplocks: WIP 2016-11-10 12:10:55 -08:00
809505d8a3 appveyor: on_finish: perform verifier_query 2016-11-10 11:47:24 -08:00
9df0920de1 tools: run-tests: always do leak test (even on failures) 2016-11-10 11:47:15 -08:00
c10c7cc672 sys: FspFileNodeClose: ensure that cleanup also happens when Create fails 2016-11-10 11:47:06 -08:00
a0cb134bd3 sys: FspFsvolReadNonCached,FspFsvolWriteNonCached: reuse work Requests 2016-11-10 11:46:16 -08:00
becfd2e1c5 sys: request work item refactoring 2016-11-10 11:45:58 -08:00
1e93f0d10d sys: request work item refactoring 2016-11-10 11:45:38 -08:00
adeb847c7e sys: request work item refactoring 2016-11-10 11:45:17 -08:00
5a83c68f56 sys: request work item refactoring 2016-11-10 11:45:04 -08:00
9d176643c3 sys: driver.h: add static assert for size of FSP_FSCTL_TRANSACT_REQ_HEADER 2016-11-10 11:44:42 -08:00
b1d8192d59 sys: restrict build to Win7 2016-11-10 11:44:26 -08:00
bd3d462bce sys: FspFileNodeSetFileInfo: fix Release build warning 2016-11-06 18:44:58 -08:00
aa2d70d8de sys: FspFileNodeSetFileInfo: make CcSetFileSizes failures benign
tst: fscrash: test huge allocation size failures
2016-11-06 17:15:07 -08:00
31c40d017d sys: create: allow user mode file system to disable caching for individual files 2016-11-04 13:08:10 -07:00
5c8da5518c sys: FspFsvolCreate: clarify comment 2016-11-04 12:22:43 -07:00
a80a9d3d4c doc: update winfsp-testing.adoc 2016-11-04 09:58:01 -07:00
57580e91f5 tools: run-tests: fscrash 2016-11-04 00:32:16 -07:00
1a43619c5e tst: fscrash: WIP 2016-11-04 00:03:30 -07:00
aae6a15e5a tst: fscrash: WIP 2016-11-03 22:31:59 -07:00
f54ce6a65d tst: fscrash: WIP 2016-11-03 21:48:34 -07:00
ab0c2fc25c tst: fscrash: WIP 2016-11-03 20:39:28 -07:00
fd439add27 doc: winfsp-testing: add information about fscrash 2016-11-03 19:53:02 -07:00
8855a2b896 tst: fscrash: WIP 2016-11-03 19:18:53 -07:00
7c41ffd64e tst: fscrash: initial commit 2016-11-03 16:15:32 -07:00
621eb63029 doc: minor fix in winfsp-testing.adoc 2016-11-03 12:42:28 -07:00
f1b96f8a28 doc: add WinFsp Testing Strategy document 2016-11-03 12:39:14 -07:00
4512dac0a9 doc: update Changelog 2016-11-03 09:36:50 -07:00
deee32b743 tools: run-tests: perform leak-test after all WinFsp drives have been unmounted 2016-11-02 22:12:39 -07:00
5f1b723fab tools: run-tests: leak-test 2016-11-02 21:31:28 -07:00
453f1732dc tools: run-tests: leak-test: add output 2016-11-02 21:00:08 -07:00
8c8d669be8 tools: run-tests: leak-test: add output 2016-11-02 20:59:16 -07:00
53077d990a tools: run-tests: leak-test 2016-11-02 20:16:18 -07:00
c665812d76 sys: FspVolumeDelete: perform MmForceSectionClosed on open files
- this removes them from the Mm Standby List
2016-11-02 18:27:38 -07:00
b56379b542 tools: run-tests: simple standby list test 2016-11-02 16:22:47 -07:00
83c1489b92 sys: FspVolumeMountNoLock: dereference FsvrtDeviceObject on success
resolves a VPB/FsvrtDeviceObject leak
2016-11-02 13:00:46 -07:00
3e3aa7651f dll: UmFileContextIsUserContext2, UmFileContextIsFullContext support 2016-11-01 18:49:28 -07:00
ec2cf5106d src: ioctl.i: comment out symbol that does not exist during Debug build on AppVeyor 2016-11-01 16:10:19 -07:00
25322059b3 appveyor: build Debug and Release configurations 2016-11-01 16:03:00 -07:00
a255fa11e7 tst: winfsp-tests: disable FILE_FLAG_NO_BUFFERING mmap test against localhost share (Win8 bug) 2016-11-01 14:56:01 -07:00
dbb8b5d3b9 tst: winfsp-tests: --share option now allows running tests against remote share 2016-11-01 13:32:51 -07:00
4c6a61d2c9 tst: winfsp-tests: refactoring/fixes when running --ntfs/--external tests 2016-11-01 11:13:25 -07:00
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
e0f163e9ba sys: maintain FO_FILE_MODIFIED bit 2016-10-29 13:04:13 -07:00
9bcd8dcb8e sys: FspIopCompleteIrpEx: handle SRV2 query directory completion 2016-10-28 16:33:54 -07:00
096e5b7eb1 Revert "sys: FspFsvolDirectoryControlComplete: support SRV2 queries"
This reverts commit 7f2426271c.
2016-10-28 11:43:26 -07:00
1c85fb94f0 sys: FspFileNodeCleanupComplete, FspFileNodeClose: fix problem with OpenCount handling 2016-10-27 23:57:27 -07:00
4417ebcc92 sys: util: FspSafeMdlCreate: assertion fix 2016-10-27 23:30:16 -07:00
5fa631339d sys: FspFsvolSetRenameInformation: correctly compute Suffix for SRV2 renames 2016-10-27 11:44:43 -07:00
26092211a8 tst: winfsp-tests: --external tests done within a temporary directory 2016-10-26 20:24:57 -07:00
50af8f6444 tools: run-tests: winfsp-tests --external 2016-10-26 16:55:17 -07:00
ee0031f995 sys: FspFsvolQueryInformation: add stub FileEaInformation support 2016-10-26 16:45:18 -07:00
75ff7f2c01 tools: run-tests: add net share tests (currently multiple failures) 2016-10-26 16:03:20 -07:00
3e557e1b65 tools: run-tests: add case-insensitive option when testing dir mounts 2016-10-26 15:09:46 -07:00
79bf651203 tst: winfsp-tests: add WINAPI for Hook* and Resilient* APIs 2016-10-26 15:11:06 -07:00
205a59dbc6 tst: winfsp-tests: ResilientRemoveDirectoryW 2016-10-26 14:36:38 -07:00
8f54152096 tst: winfsp-tests: WIP 2016-10-26 13:59:21 -07:00
5e71992153 tst: winfsp-tests: WIP 2016-10-26 13:40:30 -07:00
dfe45e1be5 tst: winfsp-tests: WIP 2016-10-26 13:27:49 -07:00
ff7a446194 tst: winfsp-tests: WIP 2016-10-26 13:16:27 -07:00
17056b4f3f tst: winfsp-tests: always use CreateDirectoryW 2016-10-26 12:48:30 -07:00
b19621233a tst: winfsp-tests: HookCreateDirectoryW, HookMoveFileExW, HookFindFirstFileW 2016-10-26 12:37:36 -07:00
e07ef0712e tst: winfsp-tests: HookRemoveDirectoryW 2016-10-26 12:08:29 -07:00
0532cee99c tst: winfsp-tests: refactor hooks 2016-10-26 12:02:30 -07:00
b072a1f0da tst: winfsp-tests: add license headers 2016-10-25 20:29:05 -07:00
badaf82462 tst: winfsp-tests: --resilient command line option 2016-10-25 20:19:04 -07:00
3f79b2e46d tst: winfsp-tests: --resilient command line option 2016-10-25 15:35:46 -07:00
319e5d4ee6 tst: winfsp-tests: --resilient command line option 2016-10-25 14:50:12 -07:00
66d5fe98df tst: winfsp-tests: add --ntfs option 2016-10-25 14:03:26 -07:00
8abadf94f3 tst: winfsp-tests: minor fix 2016-10-25 12:52:06 -07:00
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
8b31b1018b tst: winfsp-tests: abort messages 2016-10-25 11:15:47 -07:00
310fd23035 tst: winfsp-tests: initial network share support 2016-10-25 11:04:53 -07:00
7f2426271c sys: FspFsvolDirectoryControlComplete: support SRV2 queries 2016-10-23 21:53:45 -07:00
3cfa4156d2 sys: IRP_MN_QUERY_DIRECTORY: prep work to handle non-NULL Irp->MdlAddress 2016-10-23 17:47:57 -07:00
23dadcf8a0 dll,tst: do not add dot entries for root directory 2016-10-23 11:03:44 -07:00
e0b0b1b367 sys: read,write: IRP_MN_MDL improvements 2016-10-22 14:04:31 -07:00
a525e095d3 sys: check Response->IoStatus.Information for Read, Write, QueryDirectory 2016-10-21 21:46:47 -07:00
e16dfd8a43 dll: debug: QueryStreamInformation logging 2016-10-21 21:02:59 -07:00
3bf4140f91 sys,dll: backup/restore privilege support 2016-10-21 19:13:05 -07:00
b194a33406 tst: winfsp-tests: backup/restore privilege testing 2016-10-21 17:43:25 -07:00
0dd452fac1 tools: run-tests: improvements 2016-10-20 18:48:39 -07:00
df11a7d7ff dll: FspAccessCheckEx: fix traverse check problem with reparse points 2016-10-20 18:32:01 -07:00
51d29c172a tools: run-tests: improvements 2016-10-20 17:52:41 -07:00
2803a1b0cf tools: run-tests: correctly test ERRORLEVEL 2016-10-20 16:48:36 -07:00
067a0f1b37 dll: API polishing 2016-10-20 16:32:12 -07:00
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
2ff60e5e98 tst: memfs: Rename: fix problem when renaming names differing in case only 2016-10-19 15:52:22 -07:00
488993d22b doc: update Changelog 2016-10-19 14:32:00 -07:00
3cba22b9a5 tst: winfsp-tests: replace abort with ABORT in HookCreateFile, etc. 2016-10-19 13:56:15 -07:00
a3e577b091 tst: winfsp-tests: create_notraverse_test: fix security descriptor 2016-10-19 13:55:23 -07:00
9b287fb559 tst: winfsp-tests: create_notraverse_test 2016-10-19 12:40:52 -07:00
f642ea57be dll: FspAccessCheckEx: test access checks without traverse privilege 2016-10-19 11:54:22 -07:00
cb17b7e2e0 dll: FspFileSystemSetMountPoint: testing 2016-10-18 14:08:58 -07:00
82a9c8e80f dll: FspFileSystemSetMountPoint: now supports directories 2016-10-17 21:04:22 -07:00
628dae38d7 case-insensitivity testing 2016-10-17 15:33:23 -07:00
958b5a47a8 installer: include product version in product name 2016-10-17 15:05:45 -07:00
8d38a0dac6 sys,dll: support file name normalization 2016-10-17 14:23:56 -07:00
a653a010ce ext: tlib: fix mistake in cmdline handling introduced in latest change 2016-10-17 13:19:20 -07:00
31eedbddb3 sys: create: OpenTargetDirectory handling moved before the Prepare phase 2016-10-17 11:05:49 -07:00
5bf913045e update submodules 2016-10-16 15:22:19 -07:00
a10a09d4e9 tst: winfsp-tests: dirnotify_test improvements 2016-10-16 14:58:37 -07:00
3e0db6da07 tst: winfsp-tests: dirnotify_test changed to catch filename case problems 2016-10-16 13:30:48 -07:00
77df532ac3 tst: winfsp-tests: getfileinfo_name_test 2016-10-16 13:14:36 -07:00
222da362ec tlib: catch unknown options in tlib_run_tests 2016-10-16 11:27:01 -07:00
3ed7847d84 tst: test case insensitivity
sys: FspFileNameIsValid: $DATA is case insensitive
2016-10-15 19:50:47 -07:00
5773c6eab7 sys: FspFileNodeRename: acquire resource of descendant file nodes when renaming them 2016-10-14 22:47:10 -07:00
5a5a1008de sys: FspFileNameCompare, FspFileNameIsPrefix 2016-10-14 16:01:05 -07:00
32c289fa34 sys: FspFsvolFileSystemControlReparsePoint: replace use of RtlEqualUnicodeString with FspFsvolDeviceVolumePrefixInString 2016-10-14 15:13:52 -07:00
0534225662 sys: canonicalize filename related functions under the name FspFileName* 2016-10-14 14:47:16 -07:00
096b2dabde sys: refactor util.c into strutil.c; introduce FspIsNameInExpression to wrap FsRtlIsNameInExpression 2016-10-14 14:09:54 -07:00
5770f2d901 build: improve build versioning 2016-10-13 14:32:09 -07:00
12e40f908d tst: winfsp-tests: stream_rename_flipflop_test 2016-10-13 00:17:48 -07:00
42745e2239 sys: FspFileNodeRename: correctly handle rename of closed by referenced descendant files 2016-10-12 23:52:54 -07:00
249c1a5cb8 sys: FspFsvolDeviceEnumerateContextByName: fix bug that manifested itself as hanging renames 2016-10-12 20:08:17 -07:00
233904fd51 dll: move STATUS_FILE_IS_A_DIRECTORY collision check to fsop.c from memfs 2016-10-12 12:15:19 -07:00
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
bd952253fb cosmetic fix 2016-10-11 11:39:17 -07:00
c7780cf7fa license: switch to GPLv3 from AGPLv3 2016-10-10 21:33:27 -07:00
31b54ecc47 dll: FspAccessCheckEx: fix DELETE access check for named streams 2016-10-10 18:04:55 -07:00
4084448bd5 sys,dll: properly implement stream create check 2016-10-10 17:29:16 -07:00
4dc1828e1f update submodules 2016-10-10 15:36:17 -07:00
79b7b66b62 update submodules 2016-10-10 14:46:25 -07:00
612c820630 tst: memfs: add -D option to specify debug log file 2016-10-10 13:25:47 -07:00
e13233ef32 tst: memfs: add -D option to specify debug log file 2016-10-10 13:21:20 -07:00
dd815f3c39 doc: update Changelog 2016-10-10 11:50:34 -07:00
5faafc4d11 doc: update Changelog 2016-10-10 11:49:22 -07:00
78e5d031c0 installer: add RC and GOLD banners 2016-10-09 18:10:52 -07:00
9ef562df15 installer: choose install banner based on MyDevStage project variable 2016-10-09 17:27:33 -07:00
a7cdc815d0 installer: choose install banner based on MyDevStage project variable 2016-10-09 17:10:23 -07:00
bd5e15fe24 sys: FspFileNodeNotifyChange: implement/test stream notifications 2016-10-09 16:08:11 -07:00
214a8406eb art: wix dialog banner 2016-10-08 23:55:52 -07:00
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
f8cebd1f92 dll: FspDebugLogSetHandle 2016-10-08 18:49:28 -07:00
f8f6d0f1bc tools: run-tests: include stream tests 2016-10-07 12:22:19 -07:00
b06132cb6b tst: winfsp-tests: stream_create_related_test 2016-10-06 20:42:05 -07:00
748c9b6409 tst: winfsp-tests: stream_getstreaminfo_test 2016-10-06 17:20:23 -07:00
bfc7fc5dec tst: winfsp-tests: stream_getstreaminfo_test 2016-10-06 17:06:23 -07:00
03f906f966 sys: FspFsvolQueryDirectoryCopy: minor fix 2016-10-06 16:51:40 -07:00
4b1111fcc5 tst: winfsp-tests: stream_getstreaminfo_test 2016-10-06 15:36:33 -07:00
86ddeed129 tst: memfs: GetStreamInfo 2016-10-06 15:36:09 -07:00
e2d4b36057 sys: FspFsvolQueryStreamInformation* testing 2016-10-06 15:35:40 -07:00
ab2908a9ee sys: FspFileNodeTrySetSecurity, FspFileNodeTrySetDirInfo 2016-10-06 12:41:23 -07:00
fd7b12bb61 tst: memfs: minor fix 2016-10-06 12:13:34 -07:00
eb2000a194 sys: FSP_FILE_NODE: correctly handle FileInfo cache in the presence of streams 2016-10-06 12:13:16 -07:00
e4cabc50c5 tst: winfsp-tests: stream_setfileinfo_test 2016-10-05 18:18:57 -07:00
92dc2feecd sys: use main file security cache 2016-10-05 17:38:16 -07:00
43f333e8a6 sys: FSP_FILE_NODE: change number field access through inline functions 2016-10-05 17:30:50 -07:00
59eb40fd9b tst: winfsp-tests: stream_getsecurity_test 2016-10-05 16:59:54 -07:00
d85d36c94f tst: memfs: MemfsFileNodeMapHasChild: fix problems with streams on directory 2016-10-05 15:21:33 -07:00
27b841faf8 sys: FspFileNodeOpen: refine main file vs stream sharing violations 2016-10-05 14:55:37 -07:00
c6967c737a sys: FspUnicodePathIsValid: check and return stream type 2016-10-05 13:44:32 -07:00
4ccbd1bdf6 tst: winfsp-tests: stream_create_test 2016-10-05 10:48:33 -07:00
0a8b8e8444 sys: create: validate FileName only after FileNode->FileName has been constructed 2016-10-05 10:27:17 -07:00
352450d538 sys: FspMainFileOpen 2016-10-05 00:32:04 -07:00
7e1861a9f5 tst: memfs: GetSecurityByName: fix FileAttributes for streams on directories 2016-10-04 23:00:42 -07:00
860e9db8a7 sys: FspMainFileOpen, FspMainFileClose, FspMainFileOpenCheck 2016-10-04 22:19:41 -07:00
1d435269bd sys: create: correctly compute file name lengths when streams are involved 2016-10-04 11:35:39 -07:00
e58ac1fbde sys,dll: pass NULL security descriptor to user-mode file system during Create 2016-10-03 21:02:43 -07:00
1f0f2fe094 tst: winfsp-tests: stream testing 2016-10-03 20:15:17 -07:00
d7ec331c74 tst: winfsp-tests: stream testing 2016-10-03 20:14:22 -07:00
938c036387 tst: winfsp-tests: stream testing 2016-10-03 18:27:09 -07:00
16f5bd089d tst: winfsp-tests: stream testing 2016-10-03 17:30:30 -07:00
6afea44e31 tst: winfsp-tests: stream testing 2016-10-03 17:13:19 -07:00
2859355fd8 tst: winfsp-tests: stream testing 2016-10-03 16:52:44 -07:00
75012d1301 tst: winfsp-tests: stream testing 2016-10-03 16:40:03 -07:00
8e1512c067 tst: winfsp-tests: stream testing 2016-10-03 16:31:43 -07:00
fa6b621042 tst: winfsp-tests: stream testing 2016-10-03 16:16:09 -07:00
8ffb359f20 tst: winfsp-tests: stream testing 2016-10-03 16:13:17 -07:00
203873ef04 tst: winfsp-tests: stream testing 2016-10-03 16:08:45 -07:00
e73bda3926 tst: winfsp-tests: stream testing 2016-10-03 15:57:34 -07:00
0186b82fea tst: winfsp-tests: stream testing 2016-10-03 15:30:08 -07:00
db38d2f7f8 tst: winfsp-tests: stream testing 2016-10-03 15:19:18 -07:00
016d015fe6 sys: file, callbacks: acquire MainFileNode resources if exists 2016-10-03 14:21:34 -07:00
87b2d4ca4c tst: memfs: MEMFS_NAMED_STREAMS macro 2016-10-03 11:55:39 -07:00
dfd6cbbde1 tst: memfs: support named streams 2016-10-03 10:58:55 -07:00
6a126da51d sys: IRP_MJ_CREATE: handle security descriptor and file attributes correctly for named streams 2016-10-03 10:29:46 -07:00
03df0a9c26 sys: renamed "main stream" to "main file" 2016-10-02 16:57:15 -07:00
5c3a82a074 tst: memfs: Cleanup: remove all named streams on delete 2016-09-28 17:11:30 -07:00
b591015b28 tst: memfs: Cleanup: remove all named streams on delete 2016-09-28 16:59:39 -07:00
fb9b798d3d tst: memfs: implement GetStreamInfo 2016-09-28 16:17:50 -07:00
cc408b71e1 sys: FspFsvolQueryStreamInformationCopy: add stream type ($DATA) to stream names 2016-09-28 16:17:10 -07:00
19a73ca01d update submodules 2016-09-27 17:01:40 -07:00
3992b9ebb1 update submodules 2016-09-27 15:56:29 -07:00
a46c0610c4 tst: memfs: MemfsFileNameHasPrefix: work to support named streams 2016-09-27 15:35:26 -07:00
495fc7a5dc sys: implement named stream open/close and related delete/share access issues 2016-09-27 14:53:59 -07:00
2ba46fdb71 ensure that all source files use UNIX newlines 2016-09-25 21:50:44 -07:00
7cb56bb132 sys: FspUnicodePathIsValid: improvements 2016-09-25 21:38:41 -07:00
687b02c1e6 tools: ntstatus,winerror: lookup status/error codes 2016-09-24 23:55:15 -07:00
218b162d75 update submodules 2016-09-24 22:46:49 -07:00
5e13c8750e sys: FspUnicodePathIsValid, FspUnicodePathIsValidPattern 2016-09-24 22:21:05 -07:00
2e71d2fe14 sys: FspFsvolQueryStreamInformationCopy: improvements 2016-09-24 17:32:35 -07:00
866e4abe10 sys: IRP_MN_QUERY_DIRECTORY: correctly handle STATUS_BUFFER_OVERFLOW cases 2016-09-24 17:16:58 -07:00
7894cc8b7b sys: fileinfo.c: minor comment change 2016-09-24 15:09:15 -07:00
0c810c52fa sys: IRP_MJ_QUERY_INFORMATION: FileStreamInformation 2016-09-24 13:59:02 -07:00
b06e947e0e tst: winfsp-tests: troubleshoot appveyor dirnotify failure 2016-09-21 15:07:51 -07:00
aed134080c inc: fsctl: PostCleanupOnDeleteOnly 2016-09-21 14:22:08 -07:00
3ce490d405 inc: fsctl: UmFileNodeIsUserContext2 2016-09-21 10:40:18 -07:00
76aabecbfb dll: fuse: fstypename, FileSystemName command line options 2016-09-20 21:27:48 -07:00
8eebfe811d sys: FspFsvolQueryFsAttributeInformation: fix buffer overrun error 2016-09-20 20:55:10 -07:00
5798527237 sys: FspFsvolQueryFsAttributeInformation: return full file system name 2016-09-20 16:30:03 -07:00
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
b7a2b5e17a build: bump version to 0.17 2016-09-20 14:26:20 -07:00
20e547c6d0 Merge branch 'master' of https://github.com/billziss-gh/winfsp 2016-09-19 17:25:50 -07:00
d0d0f60033 doc: SSHFS Port Case Study: Step 5: POSIX special files 2016-09-19 17:29:56 -07:00
fbc3d3efce Update Changelog 2016-09-19 15:11:01 -07:00
2c3f177314 tst: winfsp-tests: disable HookCreateFileW for now 2016-09-16 17:34:32 -07:00
91e8bb1229 tst: winfsp-tests: HookCreateFileW 2016-09-16 10:08:16 -07:00
4b48502232 tools: run-tests: correctly test ERRORLEVEL 2016-09-15 21:18:52 -07:00
74af44e2e7 sys: create: FspFsvolCreateNoLock: fix open of network drive root 2016-09-15 20:23:21 -07:00
915279d41d Merge branch 'master' of https://bitbucket.org/billziss/winfsp 2016-09-15 15:30:50 -07:00
316a2940dc sys: write: FspFsvolWriteCached: fix simple but major bug when using FILE_APPEND_DATA 2016-09-15 15:28:55 -07:00
453c1753ab doc: update Changelog 2016-09-15 13:41:18 -07:00
b11b622fc2 doc: Changelog formatting fix 2016-09-15 13:25:59 -07:00
f1ba60e172 doc: update Changelog 2016-09-15 13:09:24 -07:00
7c1b592b84 installer: add public (stripped) symbols 2016-09-15 11:49:42 -07:00
1e88fedb19 src: sys: FspFsvolCreateComplete: minor comment fix 2016-09-15 00:16:25 -07:00
5ecc92f2ba update submodules 2016-09-14 23:46:05 -07:00
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
46a29f663a inc: fsctl: simplify FSP_FSCTL_TRANSACT_RSP Rsp.Create.Reparse 2016-09-14 17:18:59 -07:00
49cd11b34b tst: memfs: GetSecurityByName: reparse point fix 2016-09-14 16:20:21 -07:00
aeff3dc21e dll: debug: add diagnostic information for FileSystemControl requests/responses 2016-09-14 16:17:20 -07:00
b7368336d2 dll: debug: add diagnostic information for FileSystemControl requests/responses 2016-09-14 15:02:40 -07:00
5afe7a5315 tools: run-tests: include reparse point tests 2016-09-14 11:28:34 -07:00
7815b9e2eb dll: fuse: directory symlinks can now be deleted 2016-09-14 10:41:32 -07:00
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
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
cb00f913cc appveyor.yml: the previous version of Visual Studio 2015 is hosed too, so remove :( 2016-09-13 15:49:24 -07:00
c406c89158 appveyor.yml: choose previous version of VS2015 so that AppVeyor builds can complete 2016-09-13 15:45:42 -07:00
f600d51ace dll: fuse: SetReparsePoint testing 2016-09-13 15:17:59 -07:00
7401481d42 dll: fuse: allow opening of reparse points 2016-09-13 14:36:40 -07:00
2d3d92fb2d dll: fuse: reparse point testing 2016-09-13 13:41:09 -07:00
eca93bbdb3 installer: add diag.bat file to installation 2016-09-13 10:24:14 -07:00
5fa0c36c8f dll: relative symbolic link resolution testing 2016-09-13 00:14:35 -07:00
ea2cc54677 dll: relative symbolic link resolution testing 2016-09-12 22:45:47 -07:00
ccec269dd6 dll: relative symbolic link resolution testing 2016-09-12 21:50:25 -07:00
5888e9ab05 dll: relative symbolic link resolution testing 2016-09-12 21:42:02 -07:00
c12b88286d dll: fuse: warning fix 2016-09-12 20:26:14 -07:00
e412d735ed tst: winfsp-tests: reparse_symlink_relative_test 2016-09-12 19:55:35 -07:00
582997b5a4 tst: winfsp-tests: reparse_symlink_large_test 2016-09-12 18:13:25 -07:00
1647702a65 tools: add diag.bat diagnostics batch file 2016-09-12 15:45:48 -07:00
ccf58122a2 sys: FspFsvolFileSystemControlReparsePoint: comments 2016-09-12 15:27:31 -07:00
be8c29114a sys: FspFsvolFileSystemControlReparsePoint: improve computation of TargetOnFileSystem field when MUP is being used 2016-09-12 15:11:45 -07:00
30f2807e2b sys: FspGetDeviceObjectByName: PAGED_CODE() macro 2016-09-11 21:45:32 -07:00
25a2873556 sys: symbolic link testing 2016-09-11 17:18:56 -07:00
bd0acf2289 sys,dll: symbolic link testing 2016-09-11 17:04:01 -07:00
997476f015 sys,launcher: MUP volume prefixes (share names) are now case insensitive 2016-09-11 14:35:56 -07:00
f89c91cd10 sys,dll: SYMLINK_FLAG_RELATIVE 2016-09-11 13:18:54 -07:00
af2cc10c15 sys,dll: reparse point testing 2016-09-10 23:00:55 -07:00
0d25e73364 Submodule secfs.test now pulled from github
- run `git submodule sync` after pull
2016-09-09 22:12:55 -07:00
86d74371aa doc: add Native API vs FUSE document 2016-09-09 21:54:51 -07:00
f32e335855 bump version to 0.16 and update Changelog 2016-09-09 21:45:19 -07:00
165f3ec45d sys,dll: symlink testing 2016-09-09 21:21:24 -07:00
811696d939 sys,dll: reparse point testing 2016-09-09 19:40:37 -07:00
0c07be9628 sys,dll: reparse point testing 2016-09-09 17:21:56 -07:00
5dcbbaa4e7 tst: winfsp-tests: NFS reparse point testing 2016-09-09 15:24:33 -07:00
12b70f661f dll: fuse: nfs reparse point fixes 2016-09-09 15:14:40 -07:00
9b4b5abe48 tst: winfsp-tests: reparse point testing 2016-09-09 14:55:15 -07:00
5cd0dfb1b9 sys: reparse point testing 2016-09-09 14:42:22 -07:00
46ce4b1a6c dll: fuse: properly acquire op guard for reparse point operations 2016-09-09 11:43:49 -07:00
28a20d5199 dll: FspFileSystemOpLeave: bug fix 2016-09-09 11:29:09 -07:00
10ea9a833f dll: fuse: fixes 2016-09-09 11:23:29 -07:00
d9713668aa dll: FspFileSystemCanReplaceReparsePoint: fix 2016-09-09 11:09:41 -07:00
00c0574f1f tst: memfs: minor fix 2016-09-08 11:42:05 -07:00
44c86ff9a4 dll: fuse: use NFS reparse points for POSIX special files 2016-09-08 10:43:01 -07:00
28931f4687 tst: reparse point testing 2016-09-04 12:38:12 -07:00
80e07cead6 sys,dll: reparse point implementation: DeleteReparsePoint 2016-08-26 07:43:25 -07:00
b88b2ec51d dll: acquire exclusive lock during flush volume 2016-08-22 01:04:07 -07:00
82e4dcb4a1 inc: winfsp.h: minor srcdoc fix 2016-08-22 00:54:15 -07:00
34e653a275 dll: fsop: implement FSCTL_DELETE_REPARSE_POINT parameter checking 2016-08-22 00:40:01 -07:00
981e60643f dll: reparse points: allow file system to provide directory symlink behavior 2016-08-22 00:04:49 -07:00
fee75590a8 sys,dll: rename VolumeParams::ReparsePoints* fields 2016-08-21 23:36:09 -07:00
1298dd842d update test submodule 2016-08-21 09:37:16 -07:00
8334daa048 update test submodule 2016-08-21 07:46:56 -07:00
2f73bfa069 dll: reparse point implementation: fixes 2016-08-20 02:47:14 -07:00
d2d2dd5099 inc: winfsp.h: srcdoc corrections 2016-08-20 01:19:07 -07:00
146570dd74 dll: FspFileSystemResolveReparsePoints: return STATUS_OBJECT_PATH_NOT_FOUND when appropriate 2016-08-20 01:11:46 -07:00
f509281be4 dll: fuse: reimplement reparse point support using FspFileSystemFindReparsePoint and FspFileSystemResolveReparsePoints 2016-08-20 01:06:52 -07:00
613a564ca2 tst: memfs: implement reparse points 2016-08-19 23:33:40 -07:00
7ffc60f512 dll: reparse point implementation: WIP 2016-08-19 10:24:03 -07:00
499a0cb866 dll: fuse: GetReparsePoint: return STATUS_NOT_A_REPARSE_POINT when appropriate 2016-08-15 08:05:09 -07:00
edff3054db dll: fuse: disallow deletion of reparse point (which we cannot support) 2016-08-15 07:21:05 -07:00
f7e0362350 sys,dll: reparse point implementation: WIP 2016-08-15 04:53:11 -07:00
7337f3c6cd sys,dll: symbolic link (reparse point) support: WIP 2016-08-04 11:25:35 -07:00
ab278d7b60 Merge branch 'master' into symlink 2016-07-31 00:16:38 -07:00
858df29ba2 Merge branch 'master' of https://github.com/billziss-gh/winfsp 2016-07-28 23:51:34 -07:00
4366866653 launcher: SvcInstanceStart: STATUS_TIMEOUT is not error; handle it correctly 2016-07-28 23:50:49 -07:00
e4b808806c Update README.md 2016-07-28 17:03:47 -07:00
13cee6e019 Update Changelog 2016-07-28 16:54:07 -07:00
35b9cb15a3 tst: do not test for read-only buffer during Write when not on Win8+ 2016-07-28 16:37:49 -07:00
0d8f0f9ac8 Merge branch 'master' of https://bitbucket.org/billziss/winfsp 2016-07-28 14:56:40 -07:00
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
9b4318c655 sys: fix request header alignment on 32-bit builds 2016-07-28 09:57:31 -07:00
5827b1fa9c sys: fixes for Win7 x86 2016-07-28 00:03:53 -07:00
913f7ac9cd dll: suppress compiler warning on x86 builds 2016-07-27 16:25:41 -07:00
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
a8d76d3e46 sys, dll: reparse point (symbolic link) support: WIP 2016-07-25 21:27:48 -07:00
380ec074ca sys: ioq: clarify comment 2016-07-23 18:43:02 -07:00
e7cba96c74 Update README 2016-07-21 14:08:00 -07:00
03db443406 Update README 2016-07-20 23:41:55 -07:00
0b65bc7e01 Update README 2016-07-19 21:08:02 -07:00
12e1caaa98 Update README 2016-07-19 21:02:14 -07:00
7a690a789b Update README 2016-07-19 12:21:21 -07:00
8ca419830c art: installer banners 2016-07-17 16:55:12 -07:00
c310d8ea1b art: installer banners 2016-07-17 16:46:54 -07:00
c3ddf73661 art: add installer banners 2016-07-17 16:26:47 -07:00
6b00b8e28a art: add winfsp icon and installer banners 2016-07-17 16:24:21 -07:00
35c722e91b appveyor: enable verifier for FSD 2016-07-15 23:10:44 -07:00
ae8802514b appveyor: enable verifier for FSD 2016-07-15 23:04:45 -07:00
e90aa46a27 build: bump version to 0.15 2016-07-15 22:43:40 -07:00
760cd5e46f opt: cygfuse: bump release number to 3 2016-07-15 17:58:17 -07:00
b36b6c60e2 inc: fuse: allow for future expansion of fsp_fuse_env 2016-07-15 17:52:24 -07:00
e4984bf675 doc: update Changelog 2016-07-15 17:49:08 -07:00
0c8bcd5d7d doc: update Changelog 2016-07-15 17:39:57 -07:00
b5d8cd3ea6 installer: wix: avoid using autogenerated GUID for INSTALLDIR component 2016-07-14 11:13:26 -07:00
af5f409233 dll: np: improve username/password prompts 2016-07-13 23:19:11 -07:00
cffb066d46 ext/test/winfstest: fix build with VS2015 Update 3 2016-07-11 21:21:05 -07:00
804434d836 dll: fuse: respect the uid,gid,umask options which were being ignored 2016-06-30 23:47:01 -07:00
f7595e40b6 dll: np: FSP_NP_CREDENTIAL_MANAGER 2016-06-29 23:31:07 -07:00
669dd07ce2 dll: np: credentials testing 2016-06-29 22:35:00 -07:00
b6fa54d301 update Changelog 2016-06-29 18:09:06 -07:00
342e7e39e2 tst: secret: small program to aid with testing launcher secrets 2016-06-29 16:27:01 -07:00
9dfdd19616 launcher: startWithSecret testing 2016-06-29 16:10:27 -07:00
2c651b1bd8 launcher: check Credentials registry value during svc instance creation 2016-06-29 15:02:15 -07:00
41764f7b41 launcher, launchctl: fixes 2016-06-29 13:05:15 -07:00
08e697c52c launcher: send the password to service instance as UTF-8 2016-06-29 12:34:06 -07:00
66cc043149 dll: np: credentials support 2016-06-29 12:18:53 -07:00
518cd0e8c0 launcher, launchctl: StartWithSecret 2016-06-28 23:09:10 -07:00
c0344f53b0 Merge branch 'master' into launchpass 2016-06-28 12:10:27 -07:00
76445a5403 bump version to 0.14 2016-06-28 12:10:08 -07:00
0577b8febb dll: posix: use the S-1-0-65534 <-> 65534 for the unmapped SID/UID 2016-06-28 11:45:35 -07:00
610a7ac2a6 dll: np: support launcher passwords: WIP 2016-06-28 11:26:25 -07:00
402 changed files with 74933 additions and 5136 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/billziss-gh/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/billziss-gh/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/billziss-gh/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.

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

@ -0,0 +1,16 @@
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/billziss-gh/winfsp/releases/download/v1.6/winfsp-1.6.20027.msi
https://github.com/billziss-gh/winfsp/releases/download/v1.7B1/winfsp-1.7.20038.msi
https://github.com/billziss-gh/winfsp/releases/download/v1.8/winfsp-1.8.20304.msi

2
.gitmodules vendored
View File

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

694
Changelog.asciidoc Normal file
View File

@ -0,0 +1,694 @@
= Changelog
v1.10B2 (2021.1 Beta2)::
Changes since v1.9:
* [NEW] WinFsp now supports rebranding of the build products. This is primarily useful to commercial licensees. See https://github.com/billziss-gh/winfsp/wiki/WinFsp-Rebranding for more information.
* [NEW] WinFsp-FUSE has a new method for determining file access in the case where the user's primary SID (Windows Security Identifier) and group SID are the same (for example, this can happen when someone uses a Microsoft account as their primary login).
** Previously when the user SID and group SID were the same WinFsp-FUSE looked at the UNIX permissions for the owner and the UNIX permissions for the group and used the MOST restrictive permissions, which often resulted in inadvertent "access denied" errors. (For example, if the owner permission was `rw-` and the group permission was `---` the result was `---` and therefore access denied).
** Going forward this behavior will change. The user and group mode permissions will not be considered together even in the case where the user SID and group SID are the same. This will resolve the access denied errors.
** However to preserve backward compatibility (there might be some file systems that rely on the old behavior) we will do so in stages. For release v1.10 (2021.1) there is a new registry setting under `HKLM\SOFTWARE\WinFsp` (or `HKLM\SOFTWARE\WOW6432Node\WinFsp` on a 64-bit system) called `DistinctPermsForSameOwnerGroup`, which if set to 1 will direct WinFsp-FUSE to use the new behavior. The default value is 0 which directs WinFsp-FUSE to use the old behavior. This default will change in a future release.
* [FIX] File share access when overwriting a file (e.g. when using `TRUNCATE_EXISTING`) is now done in a manner compatible with NTFS (previously there were cases when overwriting a file where behavior diverged from the NTFS one). (See GitHub issue #364.)
* [FIX] Fixed a problem in the file system shutdown protocol which resolves an occasional access violation in the user mode file system process. Previously it was possible for a file system to crash when stopping itself using `FspFileSystemStopDispatcher`; this problem has been rectified. (See GitHub issue #369.)
* [FIX] Fixed a problem in the FUSE layer where in some rare circumstances the `release` operation could be called with an uninitialized `path` argument. (See GitHub issue billziss-gh/cgofuse#58 and commit f51bdef53427d1bba688fb6c768792fdc22ffc7b).
* [FIX] The `winfsp.h` header no longer defines `FILE_FULL_EA_INFORMATION` when compiled under mingw. This is because the mingw tool chain already includes a definition of this type. (GitHub PR #371. Thanks @lemourin.)
v1.10B1 (2021.1 Beta1)::
Changes since v1.9:
* [NEW] WinFsp now supports rebranding of the build products. This is primarily useful to commercial licensees. See https://github.com/billziss-gh/winfsp/wiki/WinFsp-Rebranding for more information.
* [NEW] WinFsp-FUSE has a new method for determining file access in the case where the user's primary SID (Windows Security Identifier) and group SID are the same (for example, this can happen when someone uses a Microsoft account as their primary login).
** Previously when the user SID and group SID were the same WinFsp-FUSE looked at the UNIX permissions for the owner and the UNIX permissions for the group and used the MOST restrictive permissions, which often resulted in inadvertent "access denied" errors. (For example, if the owner permission was `rw-` and the group permission was `---` the result was `---` and therefore access denied).
** Going forward this behavior will change. The user and group mode permissions will not be considered together even in the case where the user SID and group SID are the same. This will resolve the access denied errors.
** However to preserve backward compatibility (there might be some file systems that rely on the old behavior) we will do so in stages. For release v1.10 (2021.1) there is a new registry setting under `HKLM\SOFTWARE\WinFsp` (or `HKLM\SOFTWARE\WOW6432Node\WinFsp` on a 64-bit system) called `DistinctPermsForSameOwnerGroup`, which if set to 1 will direct WinFsp-FUSE to use the new behavior. The default value is 0 which directs WinFsp-FUSE to use the old behavior. This default will change in a future release.
* [FIX] File share access when overwriting a file (e.g. when using `TRUNCATE_EXISTING`) is now done in a manner compatible with NTFS (previously there were cases when overwriting a file where behavior diverged from the NTFS one). (See GitHub issue #364.)
* [FIX] Fixed a problem in the file system shutdown protocol which resolves an occasional access violation in the user mode file system process. Previously it was possible for a file system to crash when stopping itself using `FspFileSystemStopDispatcher`; this problem has been rectified. (See GitHub issue #369.)
* [FIX] The `winfsp.h` header no longer defines `FILE_FULL_EA_INFORMATION` when compiled under mingw. This is because the mingw tool chain already includes a definition of this type. (GitHub PR #371. Thanks @lemourin.)
v1.9 (2021)::
Changes since v1.8:
* [NEW] WinFsp now supports file change notifications and cache invalidations. This functionality is offered via the following new API's:
** Native API: `FspFileSystemNotify`
** FUSE API: `fuse_notify`
** .NET API: `FileSystemHost.Notify`
* [NEW] A native file system (notifyfs) and a .NET file system (notifyfs-dotnet) have been added to showcase the new file change notification API.
* [NEW] A new WinFsp-FUSE option `FileSecurity` has been added that allows the complete specification of file security descriptors using SDDL. (See GitHub issue https://github.com/rclone/rclone/issues/4717#issuecomment-767723287.)
* [FIX] The FSD now correctly handles a rare situation where receiving too many CLOSE calls from the OS (e.g. when caching thousands of files) could result in a bogus "insufficient resources" error. (See commit 0af0bfbe7c45e353d693a2a45965d99fa81f2163.)
* [FIX] WinFsp-FUSE correctly maps SID's from trusted domains to POSIX UID's in a multi-domain environment (using the "trustPosixOffset" attribute). Previously WinFsp-FUSE only handled SID's from the primary domain correctly.
* [FIX] WinFsp-FUSE options such as `volname`, `VolumePrefix`, `FileSystemName`, `ExactFileSystemName` are now truncated when too long. (See GitHub issue #311.)
* [FIX] The WinFsp driver is now started in a thread-safe manner if it is not already running. (See GitHub issue billziss-gh/cgofuse#51.)
* [FIX] Credentials entered in the Credentials dialog (when mapping network drives) are no longer saved by default. (See GitHub PR #342. Thanks @gaotxg.)
v1.9B2 (2021 Beta2)::
Changes since v1.8:
* [NEW] WinFsp now supports file change notifications and cache invalidations. This functionality is offered via the following new API's:
** Native API: `FspFileSystemNotify`
** FUSE API: `fuse_notify`
** .NET API: `FileSystemHost.Notify`
* [NEW] A native file system (notifyfs) and a .NET file system (notifyfs-dotnet) have been added to showcase the new file change notification API.
* [NEW] A new WinFsp-FUSE option `FileSecurity` has been added that allows the complete specification of file security descriptors using SDDL. (See GitHub issue https://github.com/rclone/rclone/issues/4717#issuecomment-767723287.)
* [FIX] The FSD now correctly handles a rare situation where receiving too many CLOSE calls from the OS (e.g. when caching thousands of files) could result in a bogus "insufficient resources" error. (See commit 0af0bfbe7c45e353d693a2a45965d99fa81f2163.)
* [FIX] WinFsp-FUSE correctly maps SID's from trusted domains to POSIX UID's in a multi-domain environment (using the "trustPosixOffset" attribute). Previously WinFsp-FUSE only handled SID's from the primary domain correctly.
* [FIX] WinFsp-FUSE options such as `volname`, `VolumePrefix`, `FileSystemName`, `ExactFileSystemName` are now truncated when too long. (See GitHub issue #311.)
* [FIX] The WinFsp driver is now started in a thread-safe manner if it is not already running. (See GitHub issue billziss-gh/cgofuse#51.)
* [FIX] Credentials entered in the Credentials dialog (when mapping network drives) are no longer saved by default. (See GitHub PR #342. Thanks @gaotxg.)
v1.9B1 (2021 Beta1)::
Changes since v1.8:
* [NEW] WinFsp now supports file change notifications and cache invalidations. This functionality is offered via the following new API's:
** Native API: `FspFileSystemNotify`
** FUSE API: `fuse_notify`
** .NET API: `FileSystemHost.Notify`
* [FIX] WinFsp-FUSE correctly maps SID's from trusted domains to POSIX UID's in a multi-domain environment (using the "trustPosixOffset" attribute). Previously WinFsp-FUSE only handled SID's from the primary domain correctly.
v1.8 (2020.2)::
Changes since v1.7:
* [FSD] WinFsp now supports Windows containers. See the link:doc/WinFsp-Container-Support.asciidoc[WinFsp Container Support] document for details.
* [FSD] 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.
* [FSD] A fix regarding concurrency of READs on the same file: WinFsp was supposed to allow concurrent READ requests on the same file (e.g. two concurrent overlapped `ReadFile` requests on the same `HANDLE`) to be handled concurrently by the file system; unfortunately due to a problem in recent versions of WinFsp READ requests on the same file were serialized. This problem has now been fixed. See GitHub issue #291 for more details.
** *NOTE*: It may be that some file system was inadvertently relying on WinFsp's implicit serialization of READs in this case. Please test your file system thoroughly against this version, especially with regard to READ serialization. Related XKCD: https://imgs.xkcd.com/comics/workflow.png
* [FSD] When renaming files or directories NTFS allows the target name to contain a backslash at the end (even for files!) whereas WinFsp did not. This problem has been fixed and a test has been added in `winfsp-tests`.
v1.8B3 (2020.2 B2)::
Changes since v1.7:
* [FSD] WinFsp now supports Windows containers. See the link:doc/WinFsp-Container-Support.asciidoc[WinFsp Container Support] document for details.
* [FSD] 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.
* [FSD] A fix regarding concurrency of READs on the same file: WinFsp was supposed to allow concurrent READ requests on the same file (e.g. two concurrent overlapped `ReadFile` requests on the same `HANDLE`) to be handled concurrently by the file system; unfortunately due to a problem in recent versions of WinFsp READ requests on the same file were serialized. This problem has now been fixed. See GitHub issue #291 for more details.
** *NOTE*: It may be that some file system was inadvertently relying on WinFsp's implicit serialization of READs in this case. Please test your file system thoroughly against this version, especially with regard to READ serialization. Related XKCD: https://imgs.xkcd.com/comics/workflow.png
* [FSD] When renaming files or directories NTFS allows the target name to contain a backslash at the end (even for files!) whereas WinFsp did not. This problem has been fixed and a test has been added in `winfsp-tests`.
v1.8B2 (2020.2 B2)::
Changes since v1.7:
* [FSD] WinFsp now supports Windows containers. See the link:doc/WinFsp-Container-Support.asciidoc[WinFsp Container Support] document for details.
* [FSD] 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.
* [FSD] A fix regarding concurrency of READs on the same file: WinFsp was supposed to allow concurrent READ requests on the same file (e.g. two concurrent overlapped `ReadFile` requests on the same `HANDLE`) to be handled concurrently by the file system; unfortunately due to a problem in recent versions of WinFsp READ requests on the same file were serialized. This problem has now been fixed. See GitHub issue #291 for more details.
** *NOTE*: It may be that some file system was inadvertently relying on WinFsp's implicit serialization of READs in this case. Please test your file system thoroughly against this version, especially with regard to READ serialization. Related XKCD: https://imgs.xkcd.com/comics/workflow.png
v1.8B1 (2020.2 B1)::
Changes since v1.7:
* [FSD] WinFsp now supports Windows containers. See the link:doc/WinFsp-Container-Support.asciidoc[WinFsp Container Support] document for details.
* [FSD] 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.
v1.7 (2020.1)::
Changes since v1.6:
* [FUSE] FUSE invalid directory entries no longer break the entire directory listing. Such invalid directory entries are logged. (GitHub PR #292.)
* [LAUNCH] The Launcher can now restart file systems that have crashed. Set `Recovery=1` in the file system's registry entry.
* [LAUNCH] The Launcher can now redirect file system standard error output. Set `Stderr=PATH` in the file system's registry entry.
* [FIX] Work around a problem in CreateProcess/CreateSection that allowed a faulty or malicious file system to bugcheck Windows.
* [FIX] Work around an incompatibility with Avast Antivirus.
** Native and .NET file systems that experience this problem should set the flag `RejectIrpPriorToTransact0` in `FSP_FSCTL_VOLUME_PARAMS` to `1`. This is only required when mounting on a directory with Avast Antivirus present.
** FUSE file systems do not need to do anything special as this flag is always enabled.
* [FIX] Fix junction (mount point reparse point) handling. (GitHub issue #269.)
v1.7B2 (2020.1 B2)::
Changes since v1.6:
* [FUSE] FUSE invalid directory entries no longer break the entire directory listing. Such invalid directory entries are logged. (GitHub PR #292.)
* [LAUNCH] The Launcher can now restart file systems that have crashed. Set `Recovery=1` in the file system's registry entry.
* [LAUNCH] The Launcher can now redirect file system standard error output. Set `Stderr=PATH` in the file system's registry entry.
* [FIX] Work around a problem in CreateProcess/CreateSection that allowed a faulty or malicious file system to bugcheck Windows.
* [FIX] Work around an incompatibility with Avast Antivirus.
** Native and .NET file systems that experience this problem should set the flag `RejectIrpPriorToTransact0` in `FSP_FSCTL_VOLUME_PARAMS` to `1`. This is only required when mounting on a directory with Avast Antivirus present.
** FUSE file systems do not need to do anything special as this flag is always enabled.
* [FIX] Fix junction (mount point reparse point) handling. (GitHub issue #269.)
v1.7B1 (2020.1 B1)::
Changes since v1.6:
* [FIX] Workaround an incompatibility with Avast Antivirus. (GitHub issue #221.)
* [FIX] Fix junction (mount point reparse point) handling. (GitHub issue #269.)
v1.6 (2020)::
Changes since v1.5:
* [FIX] Do no pass `O_APPEND` flag to FUSE file systems, which would result in data corruption under some circumstances. (See PR #272. Thanks @pfrejo.)
* [FIX] Fix how rename target directories are opened (use `FILE_DIRECTORY_FILE`). (See PR #270. Thanks @hammerg.)
v1.5 (2019.3)::
Changes since v1.4:
* [GEN] WinFsp file systems can now be used by WSLinux. File systems must enable this support by setting the `FSP_FSCTL_VOLUME_PARAMS::WslFeatures` bit. Use the command `sudo mount -t drvfs x: /mnt/x` to mount.
* [GEN] Extended attribute support has been added for all WinFsp API's: native, .NET, FUSE2 and FUSE3.
* [GEN] Mount Manager support has been added and it works for current and new file systems:
** If the file system mountpoint is in the syntax `\\.\X:` then the Mount Manager is used.
** If the file system mountpoint is in the syntax `X:` then `DefineDosDeviceW` is used (i.e. same as today).
** If the file system mountpoint is in the syntax `X:\DIR` then a reparse point is used and the file system is mounted as a directory (i.e. same as today).
** Caveats:
*** It requires Administrator access. This is because opening the `\\.\MountPointManager` device requires Administrator access.
*** It currently works with drives (`\\.\X:`) but not directories (`\\.\X:\DIR`).
*** Mount Manager drives created by WinFsp are transient. WinFsp takes various steps to ensure that this is the case.
*** Mount Manager drives are global and are visible across Terminal Services sessions (they go into the `\GLOBAL??` portion of the NT namespace).
* [FSD] Support for kernel-mode file systems on top of WinFsp has been added. See `FspFsextProvider`. This is in preparation for WinFuse - FUSE for Windows and WSLinux.
* [FSD] FastIO support has been added. FastIO operations are enabled on cache-enabled file systems with the notable exception of `FastIoQueryOpen`, which allows opening files in kernel mode; this operation requires the file system to specify the `FSP_FSCTL_VOLUME_PARAMS::AllowOpenInKernelMode` flag.
* [FSD] Support for `FileFsSectorSizeInformation` and `IOCTL_STORAGE_QUERY_PROPERTY / StorageAccessAlignmentProperty` has been added.
* [DLL] The `FspFileSystemStartDispatcher` default number of threads (`ThreadCount==0`) has been changed. See commit 3902874ac93fe40685d9761f46a96358ba24f24c for more.
* [FUSE] FUSE has new `-o UserName=DOMAIN+USERNAME` and `-o GroupName=DOMAIN+GROUPNAME` options. These function like the `-o uid=UID` and `-o gid=GID` options, but accept Windows user and groups names.
* [FUSE] FUSE has new `-o dothidden` option that is used to add the Windows hidden file attribute to files that start with a dot.
* [FUSE] FUSE has new `-o create_file_umask=nnn` and `-o create_dir_umask=nnn` options that allow for more control than the `-o create_umask=nnn` option.
* [FUSE] FUSE has new `--ExactFileSystemName=FSNAME` option that removes the "FUSE-" prefix from the file system name. (Use with caution: see discussion in PR #251.) (Thanks @johntyner.)
* [.NET] The .NET API now supports asynchronous handling of `Read`, `Write` and `ReadDirectory`. (Thanks @dworkin.)
* [.NET] The .NET API now supports fine-grained timeouts (`VolumeInfoTimeout`, `DirInfoTimeout`, etc).
* [.NET] The .NET API has new method `FileSystemHost.MountEx` that adds a `ThreadCount` parameter.
* [LAUNCH] The Launcher can now rewrite path arguments passed to file systems during launching using "Path Transformation Language". See commit a73f1b95592617ac7484e16c2e642573a4d65644 for more.
* [MEMFS] A new memfs FUSE3 file system written in C++ has been added. See `tst/memfs-fuse3`.
* [AIRFS] John Oberschelp has done some fantastic work adding persistence to the airfs file system. (Thanks @JohnOberschelp.)
* [FIX] Fixes for very large (> 4GiB) files. (Thanks @dworkin.)
* [FIX] A fix for how FUSE handles the return value from `opendir`. (GitHub issue billziss-gh/sshfs-win#54)
* [FIX] A fix for an invalid UID to SID mapping on domains with a lot of users. (Thanks @sganis.)
* [FIX] A fix on the C++ layer. (Thanks @colatkinson.)
* Other fixes and improvements.
v1.5B4 (2019.3 B4)::
Changes since v1.4:
* [GEN] WinFsp file systems can now be used by WSLinux. File systems must enable this support by setting the `FSP_FSCTL_VOLUME_PARAMS::WslFeatures` bit. Use the command `sudo mount -t drvfs x: /mnt/x` to mount.
* [GEN] Extended attribute support has been added for all WinFsp API's: native, .NET, FUSE2 and FUSE3.
* [GEN] Mount Manager support has been added and it works for current and new file systems:
** If the file system mountpoint is in the syntax `\\.\X:` then the Mount Manager is used.
** If the file system mountpoint is in the syntax `X:` then `DefineDosDeviceW` is used (i.e. same as today).
** If the file system mountpoint is in the syntax `X:\DIR` then a reparse point is used and the file system is mounted as a directory (i.e. same as today).
** Caveats:
*** It requires Administrator access. This is because opening the `\\.\MountPointManager` device requires Administrator access.
*** It currently works with drives (`\\.\X:`) but not directories (`\\.\X:\DIR`).
*** Mount Manager drives created by WinFsp are transient. WinFsp takes various steps to ensure that this is the case.
*** Mount Manager drives are global and are visible across Terminal Services sessions (they go into the `\GLOBAL??` portion of the NT namespace).
* [FSD] Support for kernel-mode file systems on top of WinFsp has been added. See `FspFsextProvider`. This is in preparation for WinFuse - FUSE for Windows and WSLinux.
* [FSD] FastIO support has been added. FastIO operations are enabled on cache-enabled file systems with the notable exception of `FastIoQueryOpen`, which allows opening files in kernel mode; this operation requires the file system to specify the `FSP_FSCTL_VOLUME_PARAMS::AllowOpenInKernelMode` flag.
* [FSD] Support for `FileFsSectorSizeInformation` and `IOCTL_STORAGE_QUERY_PROPERTY / StorageAccessAlignmentProperty` has been added.
* [DLL] The `FspFileSystemStartDispatcher` default number of threads (`ThreadCount==0`) has been changed. See commit 3902874ac93fe40685d9761f46a96358ba24f24c for more.
* [FUSE] FUSE has new `-o UserName=DOMAIN+USERNAME` and `-o GroupName=DOMAIN+GROUPNAME` options. These function like the `-o uid=UID` and `-o gid=GID` options, but accept Windows user and groups names.
* [FUSE] FUSE has new `-o dothidden` option that is used to add the Windows hidden file attribute to files that start with a dot.
* [FUSE] FUSE has new `-o create_file_umask=nnn` and `-o create_dir_umask=nnn` options that allow for more control than the `-o create_umask=nnn` option.
* [FUSE] FUSE has new `--ExactFileSystemName=FSNAME` option that removes the "FUSE-" prefix from the file system name. (Use with caution: see discussion in PR #251.) (Thanks @johntyner.)
* [.NET] The .NET API now supports asynchronous handling of `Read`, `Write` and `ReadDirectory`. (Thanks @dworkin.)
* [.NET] The .NET API now supports fine-grained timeouts (`VolumeInfoTimeout`, `DirInfoTimeout`, etc).
* [.NET] The .NET API has new method `FileSystemHost.MountEx` that adds a `ThreadCount` parameter.
* [LAUNCH] The Launcher can now rewrite path arguments passed to file systems during launching using "Path Transformation Language". See commit a73f1b95592617ac7484e16c2e642573a4d65644 for more.
* [MEMFS] A new memfs FUSE3 file system written in C++ has been added. See `tst/memfs-fuse3`.
* [AIRFS] John Oberschelp has done some fantastic work adding persistence to the airfs file system. (Thanks @JohnOberschelp.)
* [FIX] Fixes for very large (> 4GiB) files. (Thanks @dworkin.)
* [FIX] A fix for how FUSE handles the return value from `opendir`. (GitHub issue billziss-gh/sshfs-win#54)
* [FIX] A fix for an invalid UID to SID mapping on domains with a lot of users. (Thanks @sganis.)
* [FIX] A fix on the C++ layer. (Thanks @colatkinson.)
* Other fixes and improvements.
v1.5B3 (2019.3 B3)::
Changes since v1.4:
* [GEN] WinFsp file systems can now be used by WSLinux. Use the command `sudo mount -t drvfs x: /mnt/x` to mount.
* [GEN] Extended attribute support has been added for all WinFsp API's: native, .NET, FUSE2 and FUSE3.
* [GEN] Mount Manager support has been added and it works for current and new file systems:
** If the file system mountpoint is in the syntax `\\.\X:` then the Mount Manager is used.
** If the file system mountpoint is in the syntax `X:` then `DefineDosDeviceW` is used (i.e. same as today).
** If the file system mountpoint is in the syntax `X:\DIR` then a reparse point is used and the file system is mounted as a directory (i.e. same as today).
** Caveats:
*** It requires Administrator access. This is because opening the `\\.\MountPointManager` device requires Administrator access.
*** It currently works with drives (`\\.\X:`) but not directories (`\\.\X:\DIR`).
*** Mount Manager drives created by WinFsp are transient. WinFsp takes various steps to ensure that this is the case.
*** Mount Manager drives are global and are visible across Terminal Services sessions (they go into the `\GLOBAL??` portion of the NT namespace).
* [FSD] Support for kernel-mode file systems on top of WinFsp has been added. See `FspFsextProvider`. This is in preparation for WinFuse - FUSE for Windows and WSLinux.
* [FSD] FastIO support has been added. FastIO operations are enabled on cache-enabled file systems with the notable exception of `FastIoQueryOpen`, which allows opening files in kernel mode; this operation requires the file system to specify the `FSP_FSCTL_VOLUME_PARAMS::AllowOpenInKernelMode` flag.
* [FSD] Support for `FileFsSectorSizeInformation` and `IOCTL_STORAGE_QUERY_PROPERTY / StorageAccessAlignmentProperty` has been added.
* [DLL] The `FspFileSystemStartDispatcher` default number of threads (`ThreadCount==0`) has been changed. See commit 3902874ac93fe40685d9761f46a96358ba24f24c for more.
* [FUSE] FUSE has new `-o UserName=DOMAIN+USERNAME` and `-o GroupName=DOMAIN+GROUPNAME` options. These function like the `-o uid=UID` and `-o gid=GID` options, but accept Windows user and groups names.
* [FUSE] FUSE has new `-o dothidden` option that is used to add the Windows hidden file attribute to files that start with a dot.
* [FUSE] FUSE has new `-o create_file_umask=nnn` and `-o create_dir_umask=nnn` options that allow for more control than the `-o create_umask=nnn` option.
* [FUSE] FUSE has new `--ExactFileSystemName=FSNAME` option that removes the "FUSE-" prefix from the file system name. (Use with caution: see discussion in PR #251.) (Thanks @johntyner.)
* [.NET] The .NET API now supports asynchronous handling of `Read`, `Write` and `ReadDirectory`. (Thanks @dworkin.)
* [.NET] The .NET API now supports fine-grained timeouts (`VolumeInfoTimeout`, `DirInfoTimeout`, etc).
* [.NET] The .NET API has new method `FileSystemHost.MountEx` that adds a `ThreadCount` parameter.
* [LAUNCH] The Launcher can now rewrite path arguments passed to file systems during launching using "Path Transformation Language". See commit a73f1b95592617ac7484e16c2e642573a4d65644 for more.
* [MEMFS] A new memfs FUSE3 file system written in C++ has been added. See `tst/memfs-fuse3`.
* [AIRFS] John Oberschelp has done some fantastic work adding persistence to the airfs file system. (Thanks @JohnOberschelp.)
* [FIX] Fixes for very large (> 4GiB) files. (Thanks @dworkin.)
* [FIX] A fix for how FUSE handles the return value from `opendir`. (GitHub issue billziss-gh/sshfs-win#54)
* [FIX] A fix for an invalid UID to SID mapping on domains with a lot of users. (Thanks @sganis.)
* [FIX] A fix on the C++ layer. (Thanks @colatkinson.)
* Other fixes and improvements.
v1.5B2 (2019.3 B2)::
Changes since v1.4:
* [GEN] WinFsp file systems can now be used by WSLinux. Use the command `sudo mount -t drvfs x: /mnt/x` to mount.
* [GEN] Extended attribute support has been added for all WinFsp API's: native, .NET, FUSE2 and FUSE3.
* [FSD] Support for kernel-mode file systems on top of WinFsp has been added. See `FspFsextProvider`. This is in preparation for WinFuse - FUSE for Windows and WSLinux.
* [FSD] FastIO support has been added. FastIO operations are enabled on cache-enabled file systems with the notable exception of `FastIoQueryOpen`, which allows opening files in kernel mode; this operation requires the file system to specify the `FSP_FSCTL_VOLUME_PARAMS::AllowOpenInKernelMode` flag.
* [DLL] The `FspFileSystemStartDispatcher` default number of threads (`ThreadCount==0`) has been changed. See commit 3902874ac93fe40685d9761f46a96358ba24f24c for more.
* [FUSE] FUSE has new `-o UserName=DOMAIN\USERNAME` and `-o GroupName=DOMAIN\GROUPNAME` options. These function like the `-o uid=UID` and `-o gid=GID` options, but accept Windows user and groups names.
* [FUSE] FUSE has new `-o dothidden` option that is used to add the Windows hidden file attribute to files that start with a dot.
* [FUSE] FUSE has new `-o create_file_umask=nnn` and `-o create_dir_umask=nnn` options that allow for more control than the `-o create_umask=nnn` option.
* [.NET] The .NET API now supports asynchronous handling of `Read`, `Write` and `ReadDirectory`. (Thanks @dworkin.)
* [.NET] The .NET API now supports fine-grained timeouts (`VolumeInfoTimeout`, `DirInfoTimeout`, etc).
* [.NET] The .NET API has new method `FileSystemHost.MountEx` that adds a `ThreadCount` parameter.
* [LAUNCH] The Launcher can now rewrite path arguments passed to file systems during launching using "Path Transformation Language". See commit a73f1b95592617ac7484e16c2e642573a4d65644 for more.
* [FIX] Fixes for very large (> 4GiB) files. (Thanks @dworkin.)
* [FIX] A fix for how FUSE handles the return value from `opendir`. (GitHub issue billziss-gh/sshfs-win#54)
* [FIX] A fix for an invalid UID to SID mapping on domains with a lot of users. (Thanks @sganis.)
* [FIX] A fix on the C++ layer. (Thanks @colatkinson.)
* Other fixes and improvements.
v1.5B1 (2019.3 B1)::
Changes since v1.4:
* Extended attribute support has been added for all WinFsp API's: native, .NET, FUSE2 and FUSE3.
* Initial FastIO support has been added. FastIO operations are enabled on cache-enabled file systems with the notable exception of `FastIoQueryOpen`, which allows opening files in kernel mode; this operation requires the file system to specify the `FSP_FSCTL_VOLUME_PARAMS::AllowOpenInKernelMode` flag.
* Fixes for very large (> 4GiB) files. (Thanks @dworkin.)
* A fix for an invalid UID to SID mapping on domains with a lot of users. (Thanks @sganis.)
* A fix on the C++ layer. (Thanks @colatkinson.)
v1.4.19049 (2019.2)::
Changes since v1.3:
* FUSE3 API (version 3.2) is now available. The FUSE2 API (version 2.8) also remains supported.
* New `Control` file system operation allows sending custom control codes to the file system using the Windows `DeviceIoControl` API. FUSE `ioctl` is also supported.
* New `SetDelete` file system operation can optionally be used instead of `CanDelete`. `SetDelete` or `CanDelete` are used to handle the file "disposition" flag, which determines if a file is marked for deletion. See the relevant documentation for more details.
* `FlushAndPurgeOnCleanup` has now been added to the .NET API. (GitHub PR #176; thanks @FrKaram.)
* The Launcher now supports running file systems under the user account that started them. Use `RunAs="."` in the file system registry entry.
* New sample file system "airfs" contributed by @JohnOberschelp. Airfs is an in-memory file system like Memfs on which it is based on; it has received substantial improvements in how the file name space is maintained and has been modified to use modern C++ techniques by John.
* New sample file system "passthrough-fuse3" passes all operations to an underlying file system. This file system is built using the FUSE3 API. It builds and runs on both Windows and Cygwin.
* The FUSE layer now supports multiple file systems within a single process. This is a long standing problem that has been fixed. (GitHub issue #135.)
* The FSD includes a fix for a Windows problem: that case-sensitive file systems do not work properly when mounted as directories. See FAQ entry #3.
* The FSD includes a fix for a rare but serious problem. (GitHub issue #177. Thanks @thinkport.)
* The FSD includes a fix for an incompatibility with DrWeb Antivirus. (GitHub issue #192)
* The DLL includes a fix for an errorenous `STATUS_ACCESS_DENIED` on read-only directories. (GitHub issue #190. Thanks @alfaunits.)
* The FUSE layer includes a fix for the `ioctl` operation. (GitHub PR #214. Thanks @felfert.)
v1.4 (2019.1)::
Changes since v1.3:
* FUSE3 API (version 3.2) is now available. The FUSE2 API (version 2.8) also remains supported.
* New `Control` file system operation allows sending custom control codes to the file system using the Windows `DeviceIoControl` API. FUSE `ioctl` is also supported.
* New `SetDelete` file system operation can optionally be used instead of `CanDelete`. `SetDelete` or `CanDelete` are used to handle the file "disposition" flag, which determines if a file is marked for deletion. See the relevant documentation for more details.
* `FlushAndPurgeOnCleanup` has now been added to the .NET API. (GitHub PR #176; thanks @FrKaram.)
* The Launcher now supports running file systems under the user account that started them. Use `RunAs="."` in the file system registry entry.
* New sample file system "airfs" contributed by @JohnOberschelp. Airfs is an in-memory file system like Memfs on which it is based on; it has received substantial improvements in how the file name space is maintained and has been modified to use modern C++ techniques by John.
* New sample file system "passthrough-fuse3" passes all operations to an underlying file system. This file system is built using the FUSE3 API. It builds and runs on both Windows and Cygwin.
* The FUSE layer now supports multiple file systems within a single process. This is a long standing problem that has been fixed. (GitHub issue #135.)
* The FSD includes a fix for a Windows problem: that case-sensitive file systems do not work properly when mounted as directories. See FAQ entry #3.
* The FSD includes a fix for a rare but serious problem. (GitHub issue #177. Thanks @thinkport.)
* The FSD includes a fix for an incompatibility with DrWeb Antivirus. (GitHub issue #192)
* The DLL includes a fix for an errorenous `STATUS_ACCESS_DENIED` on read-only directories. (GitHub issue #190. Thanks @alfaunits.)
v1.4B4 (2018.2 B4)::
Changes since v1.3:
* FUSE3 API (version 3.2) is now available. The FUSE2 API (version 2.8) also remains supported.
* New `Control` file system operation allows sending custom control codes to the file system using the Windows `DeviceIoControl` API. FUSE `ioctl` is also supported.
* New `SetDelete` file system operation can optionally be used instead of `CanDelete`. `SetDelete` or `CanDelete` are used to handle the file "disposition" flag, which determines if a file is marked for deletion. See the relevant documentation for more details.
* `FlushAndPurgeOnCleanup` has now been added to the .NET API. (GitHub PR #176; thanks @FrKaram.)
* The Launcher now supports running file systems under the user account that started them. Use `RunAs="."` in the file system registry entry.
* New sample file system "airfs" contributed by @JohnOberschelp. Airfs is an in-memory file system like Memfs on which it is based on; it has received substantial improvements in how the file name space is maintained and has been modified to use modern C++ techniques by John.
* New sample file system "passthrough-fuse3" passes all operations to an underlying file system. This file system is built using the FUSE3 API. It builds and runs on both Windows and Cygwin.
* The FUSE layer now supports multiple file systems within a single process. This is a long standing problem that has been fixed. (GitHub issue #135.)
* The FSD includes a fix for a Windows problem: that case-sensitive file systems do not work properly when mounted as directories. See FAQ entry #3.
* The FSD includes a fix for a rare but serious problem. (GitHub issue #177. Thanks @thinkport.)
* The FSD includes a fix for an incompatibility with DrWeb Antivirus. (GitHub issue #192)
* The DLL includes a fix for an errorenous `STATUS_ACCESS_DENIED` on read-only directories. (GitHub issue #190. Thanks @alfaunits.)
v1.4B3 (2018.2 B3)::
Changes since v1.3:
* FUSE3 API (version 3.2) is now available. The FUSE2 API (version 2.8) also remains supported.
* New `Control` file system operation allows sending custom control codes to the file system using the Windows `DeviceIoControl` API. FUSE `ioctl` is also supported.
* New `SetDelete` file system operation can optionally be used instead of `CanDelete`. `SetDelete` or `CanDelete` are used to handle the file "disposition" flag, which determines if a file is marked for deletion. See the relevant documentation for more details.
* `FlushAndPurgeOnCleanup` has now been added to the .NET API. (GitHub PR #176; thanks @FrKaram.)
* New sample file system "airfs" contributed by @JohnOberschelp. Airfs is an in-memory file system like Memfs on which it is based on; it has received substantial improvements in how the file name space is maintained and has been modified to use modern C++ techniques by John.
* New sample file system "passthrough-fuse3" passes all operations to an underlying file system. This file system is built using the FUSE3 API. It builds and runs on both Windows and Cygwin.
* The FUSE layer now supports multiple file systems within a single process. This is a long standing problem that has been fixed. (GitHub issue #135.)
* The FSD includes an experimental fix for a Windows problem: that case-sensitive file systems do not work properly when mounted as directories. See the relevant FAQ entry.
* The FSD includes a fix for an incompatibility with DrWeb Antivirus. (GitHub issue #192)
v1.4B2 (2018.2 B2)::
Changes since v1.3:
* FUSE3 API (version 3.2) is now available. The FUSE2 API (version 2.8) also remains supported.
* New `Control` file system operation allows sending custom control codes to the file system using the Windows `DeviceIoControl` API. FUSE `ioctl` is also supported.
* `FlushAndPurgeOnCleanup` has now been added to the .NET API. (GitHub PR #176; thanks @FrKaram.)
* New sample file system "airfs" contributed by @JohnOberschelp. Airfs is an in-memory file system like Memfs on which it is based on; it has received substantial improvements in how the file name space is maintained and has been modified to use modern C++ techniques by John.
* New sample file system "passthrough-fuse3" passes all operations to an underlying file system. This file system is built using the FUSE3 API. It builds and runs on both Windows and Cygwin.
* The FUSE layer now supports multiple file systems within a single process. This is a long standing problem that has been fixed. (GitHub issue #135.)
v1.4B1 (2018.2 B1)::
Changes since v1.3:
* New `Control` file system operation allows sending custom control codes to the file system using the Windows `DeviceIoControl` API.
v1.3 (2018.1)::
Changes since v1.2POST1:
* Multiple Launcher changes:
** New `FspLaunch` API. File systems can be started, stopped, queried and listed using `FspLaunchStart`, `FspLaunchStop`, `FspLaunchGetInfo` and `FspLaunchGetNameList`. The API is available in <winfsp/launch.h>
** New Launcher registry settings `RunAs` and `WorkDirectory`. `RunAs` allows the laucher to launch a file system process under the service accounts LocalService and NetworkService. `WorkDirectory` can be used to specify the work directory for a newly launched file system process.
* `FSP_FSCTL_VOLUME_PARAMS::FlushAndPurgeOnCleanup` limits the time that Windows keeps files open after an application has closed them. This purges the cache on the last `CloseHandle`, which is a performance drawback.
** This is now the default behavior on FUSE. To revert to the previous behavior of keeping files open indefinitely use `-o KeepFileCache`.
* `FSP_FSCTL_VOLUME_PARAMS` has been extended with fine-grained timeouts: `VolumeInfoTimeout`, `DirInfoTimeout`, `SecurityTimeout`, `StreamInfoTimeout`. Set `FSP_FSCTL_VOLUME_PARAMS::Version == sizeof(FSP_FSCTL_VOLUME_PARAMS)` to access the new fields.
** New FUSE optons `VolumeInfoTimeout`, `DirInfoTimeout` complement the existing `FileInfoTimeout`.
* The FSD (File System Driver) and its interaction with the Windows MUP (Multiple UNC Provider) has been changed. In practice this eliminates the delays experienced when right-clicking on a WinFsp-backed network drive in the Windows Explorer. (GitHub issue #87.)
* The WinFsp network provider is now added first in the provider order list. Previously it was added last. (GitHub PR #131; thanks @felfert.)
* The WinFsp installer now uses the Wix `Provides` dependency extension to provide a `WinFsp` dependency key. (GitHub PR #129; thanks @felfert.)
* New FUSE `create_umask` option. (GitHub issue #138.)
* Fix C++ compilation error for WinFsp-FUSE. (GitHub PR #154; thanks @benrubson.)
v1.3B3 (2018.1 B3)::
Changes since v1.2POST1:
* Multiple Launcher changes:
** New `FspLaunch` API. File systems can be started, stopped, queried and listed using `FspLaunchStart`, `FspLaunchStop`, `FspLaunchGetInfo` and `FspLaunchGetNameList`. The API is available in <winfsp/launch.h>
** New Launcher registry settings `RunAs` and `WorkDirectory`. `RunAs` allows the laucher to launch a file system process under the service accounts LocalService and NetworkService. `WorkDirectory` can be used to specify the work directory for a newly launched file system process.
* `FSP_FSCTL_VOLUME_PARAMS::FlushAndPurgeOnCleanup` limits the time that Windows keeps files open after an application has closed them. This purges the cache on the last `CloseHandle`, which is a performance drawback.
** This is now the default behavior on FUSE. To revert to the previous behavior of keeping files open indefinitely use `-o KeepFileCache`.
* `FSP_FSCTL_VOLUME_PARAMS` has been extended with fine-grained timeouts: `VolumeInfoTimeout`, `DirInfoTimeout`, `SecurityTimeout`, `StreamInfoTimeout`. Set `FSP_FSCTL_VOLUME_PARAMS::Version == sizeof(FSP_FSCTL_VOLUME_PARAMS)` to access the new fields.
** New FUSE optons `VolumeInfoTimeout`, `DirInfoTimeout` complement the existing `FileInfoTimeout`.
* The FSD (File System Driver) and its interaction with the Windows MUP (Multiple UNC Provider) has been changed. In practice this eliminates the delays experienced when right-clicking on a WinFsp-backed network drive in the Windows Explorer. (GitHub issue #87.)
* The WinFsp network provider is now added first in the provider order list. Previously it was added last. (GitHub PR #131; thanks @felfert.)
* The WinFsp installer now uses the Wix `Provides` dependency extension to provide a `WinFsp` dependency key. (GitHub PR #129; thanks @felfert.)
* New FUSE `create_umask` option. (GitHub issue #138.)
* Fix C++ compilation error for WinFsp-FUSE. (GitHub PR #154; thanks @benrubson.)
* *NOTE*: Prior v1.3 betas run the MEMFS sample file systems under the LocalService account. This is no longer the case: going forward the MEMFS file systems will be running under the LocalSystem account (as in v1.2POST1).
v1.3B2 (2018.1 B2)::
Changes since v1.2POST1:
* Multiple Launcher changes:
** New `FspLaunch` API. File systems can be started, stopped, queried and listed using `FspLaunchStart`, `FspLaunchStop`, `FspLaunchGetInfo` and `FspLaunchGetNameList`.
** New Launcher registry settings `RunAs` and `WorkDirectory`. `RunAs` allows the laucher to launch a file system process under the service accounts LocalService and NetworkService. `WorkDirectory` can be used to specify the work directory for a newly launched file system process.
* The MEMFS sample file systems are now launched under the LocalService account.
* The FSD (File System Driver) and its interaction with the Windows MUP (Multiple UNC Provider) has been changed. In practice this eliminates the delays experienced when right-clicking on a WinFsp-backed network drive in the Windows Explorer. (GitHub issue #87.)
* The WinFsp network provider is now added first in the provider order list. Previously it was added last. (GitHub PR #131; thanks @felfert.)
* The WinFsp installer now uses the Wix `Provides` dependency extension to provide a `WinFsp` dependency key. (GitHub PR #129; thanks @felfert.)
v1.3B1 (2018.1 B1)::
Changes since v1.2POST1:
- The WinFsp Launcher can now be controlled by the new `FspLaunch` API. File systems can be started, stopped, queried and listed using `FspLaunchStart`, `FspLaunchStop`, `FspLaunchGetInfo` and `FspLaunchGetNameList`.
- The WinFsp launcher now supports new registry settings `RunAs` and `WorkDirectory`. `RunAs` allows the laucher to launch a file system process under the service accounts LocalService and NetworkService. `WorkDirectory` can be used to specify the work directory for a newly launched file system process.
- The MEMFS sample file systems are now launched under the LocalService account.
- The WinFsp network provider is now added first in the provider order list. Previously it was added last. (GitHub PR #131; thanks @felfert.)
- The WinFsp installer now uses the Wix `Provides` dependency extension to provide a `WinFsp` dependency key. (GitHub PR #129; thanks @felfert.)
v1.2POST1 (2017.2; issue #127)::
Changes since v1.1:
- WinFsp-FUSE now supports BSD flags (Windows file attributes) during `getattr` and `fgetattr`. It also adds the `chflags` operation. BSD flags support requires use of the `FSP_FUSE_CAP_STAT_EX` capability and the new `struct fuse_stat_ex` which includes an `st_flags` field. If the preprocessor macro `FSP_FUSE_USE_STAT_EX` is defined before inclusion of `<fuse.h>` then `struct fuse_stat` will also be defined to include the `st_flags` field.
- WinFsp-FUSE also adds the following OSXFUSE operations: `setcrtime`, `setchgtime`. These can be used to set the creation (birth) time and change (ctime) time of a file.
- New `GetDirInfoByName` file system operation adds fast queries of directory info by file name rather than pattern [e.g. `FindFirstFileW(L"foobar", FindData)`]. Tests with fsbench showed that such queries are sped up by an order of magnitude when using `GetDirInfoByName` in MEMFS. Case-sensitive FUSE file systems get this optimization for free. The .NET layer also adds `GetDirInfoByName`.
- New `FspFileSystemOperationProcessId` API adds support for getting the originating process ID (PID) during `Create`, `Open` and `Rename` calls. FUSE file systems can now access `fuse_context::pid`. The .NET layer also adds `GetOperationProcessId`.
- New command line tool `fsptool` allows command line access to some WinFsp features.
- The WinFsp launcher now passes the name of the user who launched the file system as a special parameter %U. This is useful to file systems that use the launcher infrastructure, such as SSHFS-Win. [Please note that in earlier betas the user name was passed as parameter %3; the previous method was insecure and is no longer supported.]
- Important GitHub issues fixed: #96, #97, #103, #107, #127
v1.2 (2017.2)::
Changes since v1.1:
- WinFsp-FUSE now supports BSD flags (Windows file attributes) during `getattr` and `fgetattr`. It also adds the `chflags` operation. BSD flags support requires use of the `FSP_FUSE_CAP_STAT_EX` capability and the new `struct fuse_stat_ex` which includes an `st_flags` field. If the preprocessor macro `FSP_FUSE_USE_STAT_EX` is defined before inclusion of `<fuse.h>` then `struct fuse_stat` will also be defined to include the `st_flags` field.
- WinFsp-FUSE also adds the following OSXFUSE operations: `setcrtime`, `setchgtime`. These can be used to set the creation (birth) time and change (ctime) time of a file.
- New `GetDirInfoByName` file system operation adds fast queries of directory info by file name rather than pattern [e.g. `FindFirstFileW(L"foobar", FindData)`]. Tests with fsbench showed that such queries are sped up by an order of magnitude when using `GetDirInfoByName` in MEMFS. Case-sensitive FUSE file systems get this optimization for free. The .NET layer also adds `GetDirInfoByName`.
- New `FspFileSystemOperationProcessId` API adds support for getting the originating process ID (PID) during `Create`, `Open` and `Rename` calls. FUSE file systems can now access `fuse_context::pid`. The .NET layer also adds `GetOperationProcessId`.
- New command line tool `fsptool` allows command line access to some WinFsp features.
- The WinFsp launcher now passes the name of the user who launched the file system as a special parameter %U. This is useful to file systems that use the launcher infrastructure, such as SSHFS-Win. [Please note that in earlier betas the user name was passed as parameter %3; the previous method was insecure and is no longer supported.]
- Important GitHub issues fixed: #96, #97, #103, #107
v1.2B3 (2017.2 B3)::
Changes since v1.1:
- WinFsp-FUSE now supports BSD flags (Windows file attributes) during `getattr` and `fgetattr`. It also adds the `chflags` operation. BSD flags support requires use of the `FSP_FUSE_CAP_STAT_EX` capability and the new `struct fuse_stat_ex` which includes an `st_flags` field. If the preprocessor macro `FSP_FUSE_USE_STAT_EX` is defined before inclusion of `<fuse.h>` then `struct fuse_stat` will also be defined to include the `st_flags` field.
- WinFsp-FUSE also adds the following OSXFUSE operations: `setcrtime`, `setchgtime`. These can be used to set the creation (birth) time and change (ctime) time of a file.
- New `GetDirInfoByName` file system operation adds fast queries of directory info by file name rather than pattern [e.g. `FindFirstFileW(L"foobar", FindData)`]. Tests with fsbench showed that such queries are sped up by an order of magnitude when using `GetDirInfoByName` in MEMFS. Case-sensitive FUSE file systems get this optimization for free. The .NET layer also adds `GetDirInfoByName`.
- New `FspFileSystemOperationProcessId` API adds support for getting the originating process ID (PID) during `Create`, `Open` and `Rename` calls. FUSE file systems can now access `fuse_context::pid`. The .NET layer also adds `GetOperationProcessId`.
- New command line tool `fsptool` allows command line access to some WinFsp features.
- The WinFsp launcher now passes the username of the user who launched the file system as parameter %3. This is useful to file systems that use the launcher infrastructure, such as SSHFS-Win.
- Important GitHub issues fixed: #96, #97, #103, #107
v1.2B2 (2017.2 B2)::
Changes since v1.1:
- New command line tool `fsptool` allows command line access to some WinFsp features.
- New `GetDirInfoByName` file system operation adds fast queries of directory info by file name rather than pattern [e.g. `FindFirstFileW(L"foobar", FindData)`]. Tests with fsbench showed that such queries are sped up by an order of magnitude when using `GetDirInfoByName` in MEMFS. Case-sensitive FUSE file systems get this optimization for free. The .NET layer also adds `GetDirInfoByName`.
- New `FspFileSystemOperationProcessId` API adds support for getting the originating process ID (PID) during `Create`, `Open` and `Rename` calls. FUSE file systems can now access `fuse_context::pid`. The .NET layer also adds `GetOperationProcessId`.
- Important GitHub issues fixed: #96, #97, #103, #107
v1.2B1 (2017.2 B1)::
- New command line tool `fsptool` allows command line access to some WinFsp features.
- New `GetDirInfoByName` file system operation adds fast queries of directory info by file name rather than pattern [e.g. `FindFirstFileW("foobar", FindData)`]. Tests with fsbench showed that such queries are sped up by an order of magnitude when using `GetDirInfoByName` in MEMFS.
- New `FspFileSystemOperationProcessId` API adds support for getting the originating process ID (PID) during `Create`, `Open` and `Rename` calls.
v1.1 (2017.1)::
This release brings some major new components and improvements.
- A .NET layer that allows the creation of file systems in managed mode. This is contained in the new `winfsp-msil.dll`. The new .NET layer is being tested with the WinFsp test suites and Microsoft's ifstest.
- FUSE for Cygwin is now included with the installer.
- FUSE now has a `-ovolname=VOLNAME` parameter that allows setting the volume label. Thanks @samkelly.
- A number of other FUSE improvements have been made (see issue #85).
NOTE: The C++ layer included in the v1.1 beta releases is not part of this release as it is still work in progress. It can be found in `inc/winfsp/winfsp.hpp` in the WinFsp source repository.
v1.1B3 (2017.1 B3)::
v1.1B2 (2017.1 B2)::
v1.1B1 (2017.1 BETA)::
This release brings some major new components and improvements.
- A .NET layer that allows the creation of file systems in managed mode. This is contained in the new `winfsp-msil.dll`. The new .NET layer is being tested with the WinFsp test suites and Microsoft's ifstest.
- A simple C++ layer can be found in `inc/winfsp/winfsp.hpp`.
- FUSE for Cygwin is now included with the installer.
- FUSE now has a `-ovolname=VOLNAME` parameter that allows setting the volume label. Thanks @samkelly.
v1.0::
This is the WinFsp 2017 release! :tada:
- The API is now *FROZEN*. Breaking API changes will receive a major version update (`2.0`). Incremental API changes will receive a minor version update (`1.x`).
- Adds chocolatey package. Try `choco install winfsp` (note: pending approval from chocolatey.org).
- FUSE `-d` output now always goes to stderr. There is also a new `-oDebugLog=FILE` switch to specify a debug output file.
- FUSE now provides a default `statfs` implementation if a file system does not provide one.
- The WinFsp DLL now exports `fuse_*` symbols in addition to the `fsp_fuse_*` symbols. These symbols are for use with programs that use FFI technology such as jnr-fuse and fusepy *ONLY*. They are not supposed to be used by native C/C++ programs. Such programs are supposed to include the `<fuse.h>` headers.
v1.0RC3::
This is the WinFsp 2017 Release Candidate 3, which should be the last Release Candidate according to the current plan. This release fixes a major issue with some file systems and includes a few smaller changes:
- Fixes GitHub issue #55. Prior to this fix it was possible for a rogue process (or faulty file system) to crash Windows using WinFsp. For full details read http://www.osronline.com/showthread.cfm?link=282037[this thread].
- Introduces the `FspFileSystemSetMountPointEx` API, which allows the specification of a security descriptor when mounting over a directory.
- Introduces the `FspVersion` API, which allows the retrieval of the WinFsp DLL version. Currently this reports `0x00010000` (version `1.0`).
- Introduces the `FSP_FUSE_CAP_CASE_INSENSITIVE` and `FSP_FUSE_CAP_READDIR_PLUS` WinFsp-FUSE flags. The `FSP_FUSE_CAP_CASE_INSENSITIVE` flag allows a file system to mark itself as case-insensitive. The `FSP_FUSE_CAP_READDIR_PLUS` flag allows a file system to include full `stat` details when responding to the `readdir` operation (thus avoiding extraneous `getattr` calls).
- When using WinFsp-FUSE over Cygwin, POSIX paths can be used as mountpoints.
- Fixes GitHub issue #45. Prior to this fix, file systems that do not properly implement `Cleanup` (including FUSE file systems) would at times disallow renaming of directories.
v1.0RC2::
This is the WinFsp 2017 Release Candidate 2. Some important changes included below:
- WinFsp is now available under the GPLv3 with a special exception for Free/Libre and Open Source Software.
- The location of the WinFsp launcher registry entries is now `HKEY_LOCAL_MACHINE\Software\WinFsp\Services`. [On Win64 the actual location is `HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\WinFsp\Services`.] This change was necessary to avoid loss of third party file system registry entries during WinFsp uninstallation. [See GitHub issue #31.]
- Despite stating in the previous release that the API has been finalized the `ReadDirectory` `FSP_FILE_SYSTEM_INTERFACE` operation has been changed. Extensive testing with multiple file systems has shown that `ReadDirectory` was hard to implement correctly. The new definition should make implementation easier for most file systems. [See GitHub issue #34.]
- Some API's to facilitate `ReadDirectory` implementation have been added. Look for `FspFileSystem*DirectoryBuffer` symbols.
- The installer now (optionally) installs a sample file system called "passthrough". This is a simple file system that passes all operations to an underlying file system. There is also a tutorial for this file system (in the doc directory).
- The installer now (optionally) installs a sample file system called "passthrough-fuse". This file system performs the same function as the "passthrough" file system, but uses the FUSE compatibility layer. It builds and runs on both Windows and Cygwin.
v1.0RC1::
This is the WinFsp 2017 Release Candidate 1. It has been tested extensively in a variety of scenarios for stability and correct file system semantics. Some of the more important changes:
- API has been polished and finalized.
- Extensively tested against multiple test suites including Microsoft's IfsTest.
- WinFsp I/O Queues (the fundamental WinFsp IPC mechanism) have been improved to work similar to I/O Completion Ports.
- Opportunistic locks have been implemented.
- File system statistics have been implemented.
- Sharing a (disk) file system over the network is supported.
- Case insensitive file systems are supported.
- Directories are supported as mount points.
- Access checks are performed correctly in the absense of the traverse privilege.
- Access checks are performed correctly in the presence of the backup and restore privileges.
v0.17::
This release brings support for named streams.
- Named streams (or alternate data streams) are additional streams of data within a file. When a file gets opened the main (default, unnamed) data stream of a file gets accessed. However NTFS (and now WinFsp) supports multiple data streams per file accessible using the `filename:streamname` syntax.
- WinFsp handles a lot of the hairy details regarding named streams, including sharing checks, pending delete checks, conflicts between the main and named streams, etc.
- User mode file systems that wish to support named streams must set the `FSP_FSCTL_VOLUME_PARAMS::NamedStreams` flag and must also be prepared to handle named streams on `Create`, `Cleanup`, etc. They must also implement the new `FSP_FILE_SYSTEM_INTERFACE::GetStreamInfo` operation. For more information on how to correctly handle named streams refer to the MEMFS sample.
v0.16::
This release brings support for reparse points and symbolic links as well as other minor changes.
- Reparse points are a general mechanism for attaching special behavior to files. Symbolic links in Windows are implemented as reparse points. WinFsp supports any kind of reparse point including symbolic links.
- The WinFsp FUSE implementation supports symbolic links. It also supports POSIX special files (FIFO, SOCK, CHR, BLK) as NFS reparse points (see https://msdn.microsoft.com/en-us/library/dn617178.aspx).
- User mode file systems that wish to support reparse points will have to set the `FSP_FSCTL_VOLUME_PARAMS::ReparsePoints` flag and implement the `FSP_FILE_SYSTEM_INTERFACE` methods `ResolveReparsePoints`, `GetReparsePoint`, `SetReparsePoint`, `DeleteReparsePoint`. More information in this blog article: http://www.secfs.net/winfsp/blog/files/reparse-points-symlinks-api-changes.html
- The installation now includes public symbol files for all WinFsp components shipped.
v0.15::
This is a minor release that brings support for Windows 7 and 32-bit OS'es.
- Fixes a number of issues for Windows 7. Windows 7 is now officially supported.
- Fixes a number of issues with the 32-bit FSD and user mode components. 32-bit versions of Windows are now officially supported.
v0.14::
This release includes support for file systems protected by credentials.
- WinFsp now supports file systems that require username/password to be unlocked (e.g. sshfs/secfs). Such file systems must add a DWORD registry value with name "Credentials" and value 1 under their WinFsp.Launcher service entry. The WinFsp network provider will then prompt for credentials using the `CredUIPromptForWindowsCredentials` API. Credentials can optionally be saved with the Windows Credential Manager.
- WinFsp-FUSE now uses the S-1-0-65534 <--> 65534 mapping for unmapped SID/UID's. The Anonymous SID mapping from the previous release had security issues.
v0.13::
This release includes a Cygwin package, an API change and some other minor changes:
- New Cygwin package includes `cygfuse-2.8.dll` and `libfuse-2.8.dll.a` for easy use in the Cygwin environment. This is currently offered as a separate download.
- Minor but breaking API change: `SetFileSize`/`SetAllocationSize` have been consolidated. Please refer to the documentation for a description of the changes.
- File system drive symbolic links (`DefineDosDeviceW`) now automatically cleaned up even if user mode file system crashes or is terminated forcefully.
- WinFsp-FUSE now maps unmapped UID's to the Anonymous SID (S-1-5-7). See: https://cygwin.com/ml/cygwin/2016-06/msg00359.html
v0.12::
Prior changes are not recorded in this Changelog.

View File

@ -54,5 +54,21 @@ This CONTRIBUTOR AGREEMENT applies to any contribution that you make to the WinF
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
|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
|Paweł Wegner (Google LLC, https://google.com) |lemourin at google.com
|Pedro Frejo (Arpa System, https://arpasystem.com) |pedro.frejo at arpasystem.com
|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
|===

View File

@ -1,12 +1,39 @@
The WinFsp project is Copyright (C) Bill Zissimopoulos. It is licensed
under the terms of the AGPLv3. The full text of this license follows
below. Commercial licensing options are also available: Please contact
under the terms of the GPLv3.
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-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>.
The full text of the GPLv3 license follows below.
-----------------------------------------------------------------------
GNU AFFERO GENERAL PUBLIC LICENSE
Version 3, 19 November 2007
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
@ -14,15 +41,17 @@ Bill Zissimopoulos <billziss at navimatics.com>.
Preamble
The GNU Affero General Public License is a free, copyleft license for
software and other kinds of works, specifically designed to ensure
cooperation with the community in the case of network server software.
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
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
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
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
free programs, and that you know you can do these things.
Developers that use our General Public Licenses protect your rights
with two steps: (1) assert copyright on the software, and (2) offer
you this License which gives you legal permission to copy, distribute
and/or modify the software.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
A secondary benefit of defending all users' freedom is that
improvements made in alternate versions of the program, if they
receive widespread use, become available for other developers to
incorporate. Many developers of free software are heartened and
encouraged by the resulting cooperation. However, in the case of
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.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
The GNU Affero General Public License is designed specifically to
ensure that, in such cases, the modified source code becomes available
to the community. It requires the operator of a network server to
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.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
An older license, called the Affero General Public License and
published by Affero, was designed to accomplish similar goals. This is
a different license, not a version of the Affero GPL, but Affero has
released a new version of the Affero GPL which permits relicensing under
this license.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
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
modification follow.
@ -67,7 +106,7 @@ modification follow.
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
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
License would be to refrain entirely from conveying the Program.
13. Remote Network Interaction; Use with the GNU 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.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
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
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
3 of the GNU General Public License.
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
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
will be similar in spirit to the present version, but may differ in detail to
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
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
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
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.
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
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>
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
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
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/>.
Also add information on how to contact you by electronic and paper mail.
If your software can interact with users remotely through a computer
network, you should also make sure that it provides a way for users to
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
of the code. There are many ways you could offer source, and different
solutions will be better for different programs; see section 13 for the
specific requirements.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
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,
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/>.
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>.

153
README.md
View File

@ -1,43 +1,140 @@
# WinFsp - Windows File System Proxy
<h1 align="center">
<img src="art/winfsp-glow.png" width="256"/>
<br/>
<br/>
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">
<b>Download</b><br>
<a href="https://github.com/billziss-gh/winfsp/releases/latest">
<img src="https://img.shields.io/github/release/billziss-gh/winfsp.svg?label=stable&style=for-the-badge"/>
</a>
<a href="https://github.com/billziss-gh/winfsp/releases">
<img src="https://img.shields.io/github/release/billziss-gh/winfsp/all.svg?label=latest&colorB=e52e4b&style=for-the-badge"/>
</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/>
<a href="https://ci.appveyor.com/project/billziss-gh/winfsp">
<img src="https://img.shields.io/appveyor/ci/billziss-gh/winfsp.svg"/>
</a>
<br/>
<br/>
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.
<br/>
<br/>
<img src="doc/cap.gif" height="450"/>
</p>
Some of the benefits and features of using WinFsp are listed below:
## Benefits
* 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).
* 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.
### Stability
WinFsp is very stable. There are no known kernel mode crashes and it does not suffer from 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).
### Performance
WinFsp outperforms its competition and in many scenarios performs as well as NTFS. Read more about its [Performance](doc/WinFsp-Performance-Testing.asciidoc).
<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>
### Compatibility
WinFsp strives for compatibility with NTFS and file system correctness. For the full details see the [Compatibility](doc/NTFS-Compatibility.asciidoc) document.
### Easy to Use
WinFsp has an easy to use but comprehensive API.
* This simple [Tutorial](doc/WinFsp-Tutorial.asciidoc) explains how to build a file system.
* Consult the [API Reference](http://www.secfs.net/winfsp/apiref/) for native development.
* Includes .NET layer for managed development. See [src/dotnet](src/dotnet).
* Includes FUSE 2.8 compatibility layer: [fuse/fuse.h](inc/fuse/fuse.h)
* Includes FUSE 3.2 compatibility layer: [fuse3/fuse.h](inc/fuse3/fuse.h)
### Other Benefits
* Signed drivers provided on every release.
* Available under the [GPLv3](License.txt) license with a special exception for Free/Libre and Open Source Software.
To learn more about WinFsp, please visit its website: http://www.secfs.net/winfsp/
## Project Organization
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.
The project source code is organized as follows:
* build/VStudio: WinFsp solution and project files.
* doc: WinFsp license, contributor agreement and additional documentation. The WinFsp design documents can be found here.
* ext/tlib: A small test library originally from the secfs (Secure Cloud File System) project.
* ext/test: Submodule pointing to the secfs.test project, which contains a number of tools for testing Windows and POSIX file systems.
* inc/winfsp: Public headers for the WinFsp API.
* inc/fuse: Public headers for the FUSE compatibility layer.
* src/dll: Source code to the WinFsp DLL.
* src/dll/fuse: Source code to the FUSE compatibility layer.
* src/launcher: Source code to the launcher service and the launchctl utility.
* src/sys: Source code to the WinFsp FSD.
* opt/cygfuse: Source code for the Cygwin FUSE package.
* tst/memfs: Source code to an example file system written in C++ (memfs).
* tst/winfsp-tests: WinFsp test suite.
* :file_folder: [build/VStudio](build/VStudio): WinFsp solution and project files.
* :file_folder: [doc](doc): The WinFsp design documents and additional documentation can be found here.
* :file_folder: [ext](ext): External dependencies.
* :file_folder: [ext/tlib](ext/tlib): A small test library originally from the secfs (Secure Cloud File System) project.
* :file_folder: ext/test: Submodule pointing to the secfs.test project, which contains a number of tools for testing Windows and POSIX file systems.
* :file_folder: [inc](inc): Public headers.
* :file_folder: [inc/fuse](inc/fuse): Public headers for the FUSE compatibility layer.
* :file_folder: [inc/fuse3](inc/fuse3): Public headers for the FUSE3 compatibility layer.
* :file_folder: [inc/winfsp](inc/winfsp): Public headers for the WinFsp API.
* :file_folder: [src](src): WinFsp source code.
* :file_folder: [src/dll](src/dll): Source code to the WinFsp DLL.
* :file_folder: [src/dll/fuse](src/dll/fuse): Source code to the FUSE compatibility layer.
* :file_folder: [src/dll/fuse3](src/dll/fuse3): Source code to the FUSE3 compatibility layer.
* :file_folder: [src/dotnet](src/dotnet): Source code to the .NET layer.
* :file_folder: [src/fsptool](src/fsptool): Source code to fsptool command line utility.
* :file_folder: [src/ku](src/ku): Source code that can be used from kernel or user mode.
* :file_folder: [src/launcher](src/launcher): Source code to the launcher service and the launchctl utility.
* :file_folder: [src/sys](src/sys): Source code to the WinFsp FSD.
* :file_folder: [opt/cygfuse](opt/cygfuse): Source code to the FUSE for Cygwin package.
* :file_folder: [tst](tst): Source code to example file systems and test suites.
* :file_folder: [tst/winfsp-tests](tst/winfsp-tests): WinFsp test suite.
* :file_folder: [tools](tools): Various tools for building and testing WinFsp.
## Building
## Building and Running
In order to build WinFsp you will need Windows 10 and Visual Studio 2015. You will also need the Windows Driver Kit (WDK) 10.
In order to build WinFsp you will need the following:
* Visual Studio 2015 - 2019
* Windows Driver Kit (WDK) 10
- **NOTE**: When using the latest WDK (Windows 10.0.18362.1) with Visual Studio 2015 you may get an error about a missing task `ValidateNTTargetVersion`. The fix is to edit the file `\Program Files (x86)\Windows Kits\10\build\WindowsDriver.Common.targets` and modify the `UsingTask` line for `ValidateNTTargetVersion` as follows:
```
<UsingTask TaskName="ValidateNTTargetVersion" AssemblyFile="$(WDKContentRoot)build\bin\Microsoft.DriverKit.Build.Tasks.16.0.dll"/>
```
* [Wix toolset](http://wixtoolset.org)
To fully build WinFsp (including the installer) you must use `tools\build.bat`. By default it builds a Release build, but you can choose either the Debug or Release configuration by using the syntax:
tools\build.bat CONFIGURATION
If you build the driver yourself it will not be signed and Windows will refuse to load it unless you enable "testsigning". You can enable "testsigning" using the command `bcdedit.exe -set testsigning on`. For more information see this [document](doc/WinFsp-Debugging-Setup.asciidoc).
WinFsp is designed to run on Windows 7 and above. It has been tested on the following platforms:
* Windows 7 Enterprise
* Windows 8 Pro
* Windows Server 2012
* Windows 10 Pro
* Windows Server 2016
## How to Help
I am looking for help in the following areas:
* If you have a file system that runs on FUSE please consider porting it to WinFsp. WinFsp has a native API, but it also has a FUSE (high-level) API.
* If you are working with a language other than C/C++ (e.g. Delphi, Java, etc.) and you are interested in porting/wrapping WinFsp I would love to hear from you.
* There are a number of outstanding issues listed in the [GitHub repository](https://github.com/billziss-gh/winfsp/issues). Many of these require knowledge of Windows kernel-mode and an understanding of the internals of WinFsp so they are not for the faint of heart.
In all cases I can provide ideas and/or support.
## Where to Discuss
If you wish to discuss WinFsp there are now two options:
- [WinFsp Google Group](https://groups.google.com/forum/#!forum/winfsp)
- [Author's Twitter](https://twitter.com/BZissimopoulos)
## License
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.
WinFsp is 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.

View File

@ -1,21 +1,72 @@
version: '{build}'
environment:
CONFIGURATION: Release
install:
- git submodule update --init --recursive
- appveyor AddMessage "Change boot configuration and reboot" -Category Information
- bcdedit /set testsigning on
- ps: Restart-Computer -Force
- ps: Start-Sleep -s 10
build_script:
- appveyor AddMessage "Reboot complete" -Category Information
- bcdedit | findstr /i "testsigning"
- tools\build.bat %CONFIGURATION%
test_script:
- for %%f in ("build\VStudio\build\%CONFIGURATION%\winfsp-*.msi") do start /wait msiexec /i %%f /qn INSTALLLEVEL=1000
- tools\nmake-ext-test.bat %CONFIGURATION%
- tools\run-tests.bat %CONFIGURATION%
version: '{build}'
environment:
# Disable the winfsp-tests built-in exception filter to allow WER to collect dumps.
WINFSP_TESTS_EXCEPTION_FILTER_DISABLE: 1
matrix:
- CONFIGURATION: Debug
TESTING: Func
- CONFIGURATION: Release
TESTING: Func
#- CONFIGURATION: Release
# TESTING: Avast
#- CONFIGURATION: Release
# TESTING: Perf
init:
#- ps: iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
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: |
[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")
# Submodules
- 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
- bcdedit /set testsigning on
- if %TESTING%==Func verifier /standard /driver winfsp-x64.sys
- ps: Restart-Computer -Force
- ps: Start-Sleep -s 60
build_script:
- appveyor AddMessage "Reboot complete" -Category Information
# 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"
# build winfsp
- tools\build.bat %CONFIGURATION%
test_script:
- choco install winfsp -s build\VStudio\build\%CONFIGURATION% -y --pre
- if %TESTING%==Func appveyor DownloadFile http://www.secfs.net/Test.Filter.Driver.zip && 7z x Test.Filter.Driver.zip
- 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%
- 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
- 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: 52 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
*.vcproj.*
*.vcxproj.user
*.csproj.user
*.VC.db
*.VC.opendb
.vs

View File

@ -0,0 +1,113 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\version.properties" />
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{94580219-CC8D-4FE5-A3BE-437B0B3481E1}</ProjectGuid>
<OutputType>Library</OutputType>
<ProjectName>winfsp.net</ProjectName>
<RootNamespace>Fsp</RootNamespace>
<AssemblyName>$(MyProductFileName)-msil</AssemblyName>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>$(SolutionDir)build\$(Configuration)\</OutputPath>
<BaseIntermediateOutputPath>$(SolutionDir)build\$(ProjectName).build\</BaseIntermediateOutputPath>
<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>
<BaseIntermediateOutputPath>$(SolutionDir)build\$(ProjectName).build\</BaseIntermediateOutputPath>
<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>
<Reference Include="System" />
</ItemGroup>
<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>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="AfterBuild">
</Target>
-->
<Target Name="BeforeBuild">
<ItemGroup>
<AssemblyInfo Include="using System.Reflection%3b" />
<AssemblyInfo Include="[assembly: AssemblyProduct(&quot;$(MyProductName)&quot;)]" />
<AssemblyInfo Include="[assembly: AssemblyTitle(&quot;$(MyDescription)&quot;)]" />
<AssemblyInfo Include="[assembly: AssemblyCompany(&quot;$(MyCompanyName)&quot;)]" />
<AssemblyInfo Include="[assembly: AssemblyCopyright(&quot;$(MyCopyright)&quot;)]" />
<AssemblyInfo Include="[assembly: AssemblyVersion(&quot;$(MyAssemblyVersion)&quot;)]" />
<AssemblyInfo Include="[assembly: AssemblyFileVersion(&quot;$(MyVersion)&quot;)]" />
</ItemGroup>
<MakeDir Directories="$(IntermediateOutputPath)" />
<WriteLinesToFile File="$(IntermediateOutputPath)AssemblyInfo.cs" Lines="@(AssemblyInfo)" Overwrite="true" />
<ItemGroup>
<Compile Include="$(IntermediateOutputPath)AssemblyInfo.cs" />
<FileWrites Include="$(IntermediateOutputPath)AssemblyInfo.cs" />
</ItemGroup>
</Target>
<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>
</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,18 +1,22 @@
/**
* @file CustomActions.cpp
*
* @copyright 2015-2016 Bill Zissimopoulos
* @copyright 2015-2021 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
*
* You can redistribute it and/or modify it under the terms of the
* GNU Affero General Public License version 3 as published by the
* Free Software Foundation.
* You can redistribute it and/or modify it under the terms of the GNU
* General Public License version 3 as published by the Free Software
* Foundation.
*
* Licensees holding a valid commercial license may use this file in
* accordance with the commercial license agreement provided with the
* software.
* Licensees holding a valid commercial license may use this software
* in accordance with the commercial license agreement provided in
* 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

View File

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\..\version.properties" />
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
@ -14,18 +15,18 @@
<ProjectGuid>{95C223E6-B5F1-4FD0-9376-41CDBC824445}</ProjectGuid>
<RootNamespace>CustomActions</RootNamespace>
<Keyword>Win32Proj</Keyword>
<WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
<WindowsTargetPlatformVersion>$(LatestTargetPlatformVersion)</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
@ -68,7 +69,6 @@
<AdditionalDependencies>msi.lib;dutil.lib;wcautil.lib;Version.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>$(WIX)sdk\VS2015\lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<ModuleDefinitionFile>CustomActions.def</ModuleDefinitionFile>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<TargetMachine>MachineX86</TargetMachine>
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
@ -92,7 +92,6 @@
<AdditionalDependencies>msi.lib;dutil.lib;wcautil.lib;Version.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>$(WIX)sdk\VS2015\lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<ModuleDefinitionFile>CustomActions.def</ModuleDefinitionFile>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>

View File

@ -1,8 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:dep="http://schemas.microsoft.com/wix/DependencyExtension">
<Product
Id="*"
Name="$(var.MyProductName)"
Name="$(var.MyProductName) $(var.MyProductVersion)"
Manufacturer="$(var.MyCompanyName)"
Version="$(var.MyVersion)"
Language="1033"
@ -17,12 +18,12 @@
Disallow="yes"
AllowDowngrades="no"
AllowSameVersionUpgrades="no"
DisallowUpgradeErrorMessage="An older version of [ProductName] is already installed. You must uninstall it before you can install this version."
DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
<Media Id="1" Cabinet="WinFsp.cab" EmbedCab="yes" />
DisallowUpgradeErrorMessage="An older version of $(var.MyProductName) is already installed. You must uninstall it before you can install this version."
DowngradeErrorMessage="A newer version of $(var.MyProductName) is already installed." />
<Media Id="1" Cabinet="$(var.MyProductName).cab" EmbedCab="yes" />
<Property Id="P.LauncherName">$(var.MyProductName).Launcher</Property>
<Property Id="P.LauncherRegistryKey">SYSTEM\\CurrentControlSet\\Services\\$(var.MyProductName).Launcher\\Services</Property>
<Property Id="P.LauncherRegistryKey">Software\$(var.MyProductName)\Services</Property>
<Property Id="P.RegistryKey">Software\$(var.MyProductName)</Property>
<Property Id="INSTALLDIR">
<RegistrySearch
@ -35,53 +36,76 @@
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="INSTALLDIR" Name="WinFsp">
<Directory Id="INSTALLDIR" Name="$(var.MyProductName)">
<Directory Id="BINDIR" Name="bin" />
<Directory Id="INCDIR" Name="inc" />
<Directory Id="LIBDIR" Name="lib" />
<Directory Id="OPTDIR" Name="opt" />
<Directory Id="SMPDIR" Name="samples" />
<Directory Id="SYMDIR" Name="sym" />
</Directory>
</Directory>
</Directory>
<DirectoryRef Id="INSTALLDIR">
<Component Id="C.INSTALLDIR">
<Component Id="C.INSTALLDIR" Guid="{F876F26E-5016-4AC6-93B3-653C0312A6CE}">
<RegistryValue
Root="HKLM"
Key="[P.RegistryKey]"
Name="InstallDir"
Type="string"
Value="[INSTALLDIR]" />
<dep:Provides Key="$(var.MyProductName)" />
</Component>
<Component Id="C.License.txt">
<File Name="License.txt" Source="..\..\..\License.txt" KeyPath="yes" />
</Component>
</DirectoryRef>
<DirectoryRef Id="BINDIR" FileSource="..\build\$(var.Configuration)">
<Component Id="C.winfsp_x64.sys">
<File Name="winfsp-x64.sys" KeyPath="yes" />
<Component Id="C.$(var.MyProductFileName)_x64.sys">
<File Name="$(var.MyProductFileName)-x64.sys" KeyPath="yes" />
</Component>
<Component Id="C.winfsp_x86.sys">
<File Name="winfsp-x86.sys" KeyPath="yes" />
<Component Id="C.$(var.MyProductFileName)_x86.sys">
<File Name="$(var.MyProductFileName)-x86.sys" KeyPath="yes" />
</Component>
<!-- On Win64 register winfsp-x64.dll -->
<Component Id="C.winfsp_x64.dll.selfreg" Guid="F0A67746-1A9C-4976-8EC0-882E9407FA6D">
<File Id="FILE.winfsp_x64.dll.selfreg" Name="winfsp-x64.dll" KeyPath="yes" SelfRegCost="1" />
<!-- On Win64 register $(var.MyProductFileName)-x64.dll -->
<Component Id="C.$(var.MyProductFileName)_x64.dll.selfreg" Guid="F0A67746-1A9C-4976-8EC0-882E9407FA6D">
<File Id="FILE.$(var.MyProductFileName)_x64.dll.selfreg" Name="$(var.MyProductFileName)-x64.dll" KeyPath="yes" SelfRegCost="1" />
<Condition>VersionNT64</Condition>
</Component>
<Component Id="C.winfsp_x86.dll" Guid="950492FB-12F7-4E27-9124-8325A2BC9927">
<File Name="winfsp-x86.dll" KeyPath="yes" />
<Component Id="C.$(var.MyProductFileName)_x86.dll" Guid="950492FB-12F7-4E27-9124-8325A2BC9927">
<File Name="$(var.MyProductFileName)-x86.dll" KeyPath="yes" />
<Condition>VersionNT64</Condition>
</Component>
<!-- On Win32 register winfsp-x86.dll -->
<Component Id="C.winfsp_x64.dll" Guid="4D6E7A8E-0CA6-49BE-B312-1EDADE725756">
<File Name="winfsp-x64.dll" KeyPath="yes" />
<!-- On Win32 register $(var.MyProductFileName)-x86.dll -->
<Component Id="C.$(var.MyProductFileName)_x64.dll" Guid="4D6E7A8E-0CA6-49BE-B312-1EDADE725756">
<File Name="$(var.MyProductFileName)-x64.dll" KeyPath="yes" />
<Condition>NOT VersionNT64</Condition>
</Component>
<Component Id="C.winfsp_x86.dll.selfreg" Guid="F0DEF7A6-AF55-419F-A58A-DF4018C6FA73">
<File Id="FILE.winfsp_x86.dll.selfreg" Name="winfsp-x86.dll" KeyPath="yes" SelfRegCost="1" />
<Component Id="C.$(var.MyProductFileName)_x86.dll.selfreg" Guid="F0DEF7A6-AF55-419F-A58A-DF4018C6FA73">
<File Id="FILE.$(var.MyProductFileName)_x86.dll.selfreg" Name="$(var.MyProductFileName)-x86.dll" KeyPath="yes" SelfRegCost="1" />
<Condition>NOT VersionNT64</Condition>
</Component>
<!-- install assembly -->
<Component Id="C.$(var.MyProductFileName)_msil.dll" Guid="0D8BA6AE-9F87-402B-AE1A-95B0AE3BE179">
<File Id="FILE.$(var.MyProductFileName)_msil.dll" Name="$(var.MyProductFileName)-msil.dll" KeyPath="yes" />
</Component>
<Component Id="C.$(var.MyProductFileName)_msil.xml" Guid="1657F707-C112-454C-91AE-0FDEBBF454AB">
<File Id="FILE.$(var.MyProductFileName)_msil.xml" Name="$(var.MyProductFileName)-msil.xml" KeyPath="yes" />
</Component>
<!--
<Component Id="C.$(var.MyProductFileName)_msil.dll.GAC" Guid="6469467D-8C90-4889-8138-4028F9DA6E85">
<File Id="FILE.$(var.MyProductFileName)_msil.dll.GAC" Name="$(var.MyProductFileName)-msil.dll" KeyPath="yes" Assembly=".net" />
</Component>
<Component Id="C.policy.$(var.MyProductFileName)_msil.dll.GAC">
<File Name="policy.1.0.$(var.MyProductFileName)-msil.dll" KeyPath="yes" Assembly=".net" />
<File Name="policy.1.0.$(var.MyProductFileName)-msil.config" KeyPath="no" />
</Component>
-->
<!-- On Win64 ServiceInstall launcher-x64.exe -->
<Component Id="C.launcher_x64.exe.svcinst">
<File Id="launcher_x64.exe.svcinst" Name="launcher-x64.exe" KeyPath="yes" />
@ -135,6 +159,20 @@
<File Name="launchctl-x86.exe" KeyPath="yes" />
</Component>
<Component Id="C.fsptool_x64.exe" Guid="013FE508-097D-4433-9C60-717F5446E7F4">
<File Name="fsptool-x64.exe" KeyPath="yes" />
</Component>
<Component Id="C.fsptool_x86.exe" Guid="6C16DC2C-E12F-49FB-A665-3AF0475487AD">
<File Name="fsptool-x86.exe" KeyPath="yes" />
</Component>
<Component Id="C.diag.bat">
<File Name="diag.bat" Source="..\..\..\tools\diag.bat" KeyPath="yes" />
</Component>
<Component Id="C.fsreg.bat">
<File Name="fsreg.bat" Source="..\..\..\tools\fsreg.bat" KeyPath="yes" />
</Component>
<Component Id="C.memfs_x64.exe">
<File Name="memfs-x64.exe" KeyPath="yes" />
<RegistryKey
@ -149,7 +187,7 @@
<RegistryValue
Type="string"
Name="CommandLine"
Value="-u %1 -m %2" />
Value="-i -F NTFS -n 65536 -s 67108864 -u %1 -m %2" />
<RegistryValue
Type="string"
Name="Security"
@ -175,7 +213,33 @@
<RegistryValue
Type="string"
Name="CommandLine"
Value="-u %1 -m %2" />
Value="-i -F NTFS -n 65536 -s 67108864 -u %1 -m %2" />
<RegistryValue
Type="string"
Name="Security"
Value="D:P(A;;RPWPLC;;;WD)" />
<RegistryValue
Type="integer"
Name="JobControl"
Value="1" />
</RegistryKey>
</RegistryKey>
</Component>
<Component Id="C.memfs_dotnet_msil.exe">
<File Name="memfs-dotnet-msil.exe" KeyPath="yes" />
<RegistryKey
Root="HKLM"
Key="[P.LauncherRegistryKey]">
<RegistryKey
Key="memfs-dotnet">
<RegistryValue
Type="string"
Name="Executable"
Value="[BINDIR]memfs-dotnet-msil.exe" />
<RegistryValue
Type="string"
Name="CommandLine"
Value="-i -F NTFS -n 65536 -s 67108864 -u %1 -m %2" />
<RegistryValue
Type="string"
Name="Security"
@ -196,6 +260,12 @@
<Component Id="C.winfsp.h">
<File Name="winfsp.h" KeyPath="yes" />
</Component>
<Component Id="C.launch.h">
<File Name="launch.h" KeyPath="yes" />
</Component>
<!--Component Id="C.winfsp.hpp">
<File Name="winfsp.hpp" KeyPath="yes" />
</Component-->
</Directory>
<Directory Id="INCDIR.fuse" Name="fuse">
<Component Id="C.fuse.h">
@ -211,13 +281,27 @@
<File Name="winfsp_fuse.h" KeyPath="yes" />
</Component>
</Directory>
<Directory Id="INCDIR.fuse3" Name="fuse3">
<Component Id="C.fuse3.h">
<File Id="fuse3.h" Name="fuse.h" KeyPath="yes" />
</Component>
<Component Id="C.fuse3_common.h">
<File Id="fuse3_common.h" Name="fuse_common.h" KeyPath="yes" />
</Component>
<Component Id="C.fuse3_opt.h">
<File Id="fuse3_opt.h" Name="fuse_opt.h" KeyPath="yes" />
</Component>
<Component Id="C.winfsp_fuse3.h">
<File Id="winfsp_fuse3.h" Name="winfsp_fuse.h" KeyPath="yes" />
</Component>
</Directory>
</DirectoryRef>
<DirectoryRef Id="LIBDIR" FileSource="..\build\$(var.Configuration)">
<Component Id="C.winfsp_x64.lib">
<File Name="winfsp-x64.lib" KeyPath="yes" />
<Component Id="C.$(var.MyProductFileName)_x64.lib">
<File Name="$(var.MyProductFileName)-x64.lib" KeyPath="yes" />
</Component>
<Component Id="C.winfsp_x86.lib">
<File Name="winfsp-x86.lib" KeyPath="yes" />
<Component Id="C.$(var.MyProductFileName)_x86.lib">
<File Name="$(var.MyProductFileName)-x86.lib" KeyPath="yes" />
</Component>
<!-- On Win64 copy fuse-x64.pc -->
@ -239,6 +323,69 @@
KeyPath="yes" />
<Condition>NOT VersionNT64</Condition>
</Component>
<!-- On Win64 copy fuse3-x64.pc -->
<Component Id="C.fuse3_x64.pc" Guid="FE59E3BA-E5EA-4822-80B1-19A1DE6B62C7">
<File
Id="FILE.fuse3_x64.pc"
Name="fuse3.pc"
Source="..\build\$(var.Configuration)\fuse3-x64.pc"
KeyPath="yes" />
<Condition>VersionNT64</Condition>
</Component>
<!-- On Win32 copy fuse3-x86.pc -->
<Component Id="C.fuse3_x86.pc" Guid="176205D0-07EA-4DFC-947F-18E89ABDAFAB">
<File
Id="FILE.fuse3_x86.pc"
Name="fuse3.pc"
Source="..\build\$(var.Configuration)\fuse3-x86.pc"
KeyPath="yes" />
<Condition>NOT VersionNT64</Condition>
</Component>
</DirectoryRef>
<DirectoryRef Id="OPTDIR">
<Directory Id="OPTDIR.cygfuse" Name="cygfuse" FileSource="..\..\..\opt\cygfuse\dist">
<Directory Id="OPTDIR.cygfuse.x64" Name="x64">
<Component Id="C.fuse.tar.xz.x64">
<File Id="FILE.fuse.tar.xz.x64" Name="fuse-2.8-10.tar.xz" KeyPath="yes" />
</Component>
<Component Id="C.fuse3.tar.xz.x64">
<File Id="FILE.fuse3.tar.xz.x64" Name="fuse3-3.2-2.tar.xz" KeyPath="yes" />
</Component>
</Directory>
<Directory Id="OPTDIR.cygfuse.x86" Name="x86">
<Component Id="C.fuse.tar.xz.x86">
<File Id="FILE.fuse.tar.xz.x86" Name="fuse-2.8-10.tar.xz" KeyPath="yes" />
</Component>
<Component Id="C.fuse3.tar.xz.x86">
<File Id="FILE.fuse3.tar.xz.x86" Name="fuse3-3.2-2.tar.xz" KeyPath="yes" />
</Component>
</Directory>
<Component Id="C.fuse.install.sh">
<File Name="install.sh" KeyPath="yes" />
</Component>
<Component Id="C.fuse.uninstall.sh">
<File Name="uninstall.sh" KeyPath="yes" />
</Component>
</Directory>
<Directory Id="OPTDIR.fsext" Name="fsext" FileSource="..\..\..\opt\fsext">
<Directory Id="OPTDIR.fsext.inc" Name="inc">
<Directory Id="OPTDIR.fsext.inc.winfsp" Name="winfsp">
<Component Id="C.fsext.h">
<File Name="fsext.h" KeyPath="yes" />
</Component>
</Directory>
</Directory>
<Directory Id="OPTDIR.fsext.lib" Name="lib">
<Component Id="C.fsext.winfsp_x64.lib">
<File Id="FILE.fsext.winfsp_x64.lib" Name="winfsp-x64.lib" KeyPath="yes" />
</Component>
<Component Id="C.fsext.winfsp_x86.lib">
<File Id="FILE.fsext.winfsp_x86.lib" Name="winfsp-x86.lib" KeyPath="yes" />
</Component>
</Directory>
</Directory>
</DirectoryRef>
<DirectoryRef Id="SMPDIR" FileSource="..\..\..\tst">
<Directory Id="SMPDIR.memfs" Name="memfs">
@ -252,48 +399,348 @@
<File Name="memfs-main.c" KeyPath="yes" />
</Component>
</Directory>
<Directory Id="SMPDIR.memfs_fuse3" Name="memfs-fuse3">
<Component Id="C.memfs_fuse3.cpp">
<File Name="memfs-fuse3.cpp" KeyPath="yes" />
</Component>
<Component Id="C.memfs_fuse3.compat.h">
<File Id="F.memfs_fuse3.compat.h" Name="compat.h" KeyPath="yes" />
</Component>
<Component Id="C.memfs_fuse3.sln">
<File Name="memfs-fuse3.sln" KeyPath="yes" />
</Component>
<Component Id="C.memfs_fuse3.vcxproj">
<File Name="memfs-fuse3.vcxproj" KeyPath="yes" />
</Component>
<Component Id="C.memfs_fuse3.vcxproj.filters">
<File Name="memfs-fuse3.vcxproj.filters" KeyPath="yes" />
</Component>
<Component Id="C.memfs_fuse3.Makefile">
<File Id="F.memfs_fuse3.Makefile" Name="Makefile" KeyPath="yes" />
</Component>
<Component Id="C.memfs_fuse3.README.md">
<File Id="F.memfsx_fuse3.README.md" Name="README.md" KeyPath="yes" />
</Component>
</Directory>
<Directory Id="SMPDIR.memfs_dotnet" Name="memfs-dotnet">
<Component Id="C.memfs_dotnet.Program.cs">
<File Id="FILE.memfs_dotnet.Program.cs" Name="Program.cs" KeyPath="yes" />
</Component>
</Directory>
<Directory Id="SMPDIR.airfs" Name="airfs">
<Component Id="C.airfs.cpp">
<File Name="airfs.cpp" KeyPath="yes" />
</Component>
<Component Id="C.persistence.cpp">
<File Name="persistence.cpp" KeyPath="yes" />
</Component>
<Component Id="C.common.h">
<File Name="common.h" KeyPath="yes" />
</Component>
<Component Id="C.airfs.sln">
<File Name="airfs.sln" KeyPath="yes" />
</Component>
<Component Id="C.airfs.vcxproj">
<File Name="airfs.vcxproj" KeyPath="yes" />
</Component>
<Component Id="C.airfs.vcxproj.filters">
<File Name="airfs.vcxproj.filters" KeyPath="yes" />
</Component>
</Directory>
<Directory Id="SMPDIR.passthrough" Name="passthrough">
<Component Id="C.passthrough.c">
<File Name="passthrough.c" KeyPath="yes" />
</Component>
<Component Id="C.passthrough.sln">
<File Name="passthrough.sln" KeyPath="yes" />
</Component>
<Component Id="C.passthrough.vcxproj">
<File Name="passthrough.vcxproj" KeyPath="yes" />
</Component>
<Component Id="C.passthrough.vcxproj.filters">
<File Name="passthrough.vcxproj.filters" KeyPath="yes" />
</Component>
</Directory>
<!--Directory Id="SMPDIR.passthrough_cpp" Name="passthrough-cpp">
<Component Id="C.passthrough_cpp.cpp">
<File Name="passthrough-cpp.cpp" KeyPath="yes" />
</Component>
<Component Id="C.passthrough_cpp.sln">
<File Name="passthrough-cpp.sln" KeyPath="yes" />
</Component>
<Component Id="C.passthrough_cpp.vcxproj">
<File Name="passthrough-cpp.vcxproj" KeyPath="yes" />
</Component>
<Component Id="C.passthrough_cpp.vcxproj.filters">
<File Name="passthrough-cpp.vcxproj.filters" KeyPath="yes" />
</Component>
</Directory-->
<Directory Id="SMPDIR.passthrough_fuse" Name="passthrough-fuse">
<Component Id="C.passthrough_fuse.c">
<File Name="passthrough-fuse.c" KeyPath="yes" />
</Component>
<Component Id="C.passthrough_fuse.winposix.c">
<File Name="winposix.c" KeyPath="yes" />
</Component>
<Component Id="C.passthrough_fuse.winposix.h">
<File Name="winposix.h" KeyPath="yes" />
</Component>
<Component Id="C.passthrough_fuse.sln">
<File Name="passthrough-fuse.sln" KeyPath="yes" />
</Component>
<Component Id="C.passthrough_fuse.vcxproj">
<File Name="passthrough-fuse.vcxproj" KeyPath="yes" />
</Component>
<Component Id="C.passthrough_fuse.vcxproj.filters">
<File Name="passthrough-fuse.vcxproj.filters" KeyPath="yes" />
</Component>
<Component Id="C.passthrough_fuse.Makefile">
<File Name="Makefile" KeyPath="yes" />
</Component>
<Component Id="C.passthrough_fuse.README.md">
<File Name="README.md" KeyPath="yes" />
</Component>
</Directory>
<Directory Id="SMPDIR.passthrough_fuse3" Name="passthrough-fuse3">
<Component Id="C.passthrough_fuse3.c">
<File Name="passthrough-fuse3.c" KeyPath="yes" />
</Component>
<Component Id="C.passthrough_fuse3.winposix.c">
<File Id="F.passthrough_fuse3.winposix.c" Name="winposix.c" KeyPath="yes" />
</Component>
<Component Id="C.passthrough_fuse3.winposix.h">
<File Id="F.passthrough_fuse3.winposix.h" Name="winposix.h" KeyPath="yes" />
</Component>
<Component Id="C.passthrough_fuse3.sln">
<File Name="passthrough-fuse3.sln" KeyPath="yes" />
</Component>
<Component Id="C.passthrough_fuse3.vcxproj">
<File Name="passthrough-fuse3.vcxproj" KeyPath="yes" />
</Component>
<Component Id="C.passthrough_fuse3.vcxproj.filters">
<File Name="passthrough-fuse3.vcxproj.filters" KeyPath="yes" />
</Component>
<Component Id="C.passthrough_fuse3.Makefile">
<File Id="F.passthrough_fuse3.Makefile" Name="Makefile" KeyPath="yes" />
</Component>
<Component Id="C.passthrough_fuse3.README.md">
<File Id="F.passthrough_fuse3.README.md" Name="README.md" KeyPath="yes" />
</Component>
</Directory>
<Directory Id="SMPDIR.passthrough_dotnet" Name="passthrough-dotnet">
<Component Id="C.passthrough_dotnet.Program.cs">
<File Id="FILE.passthrough_dotnet.Program.cs" Name="Program.cs" KeyPath="yes" />
</Component>
<Component Id="C.passthrough_dotnet.sln">
<File Name="passthrough-dotnet.sln" KeyPath="yes" />
</Component>
<Component Id="C.passthrough_dotnet.csproj">
<File Name="passthrough-dotnet.csproj" KeyPath="yes" />
</Component>
</Directory>
<Directory Id="SMPDIR.notifyfs" Name="notifyfs">
<Component Id="C.notifyfs.c">
<File Name="notifyfs.c" KeyPath="yes" />
</Component>
<Component Id="C.notifyfs.sln">
<File Name="notifyfs.sln" KeyPath="yes" />
</Component>
<Component Id="C.notifyfs.vcxproj">
<File Name="notifyfs.vcxproj" KeyPath="yes" />
</Component>
<Component Id="C.notifyfs.vcxproj.filters">
<File Name="notifyfs.vcxproj.filters" KeyPath="yes" />
</Component>
</Directory>
<Directory Id="SMPDIR.notifyfs_dotnet" Name="notifyfs-dotnet">
<Component Id="C.notifyfs_dotnet.Program.cs">
<File Id="FILE.notifyfs_dotnet.Program.cs" Name="Program.cs" KeyPath="yes" />
</Component>
<Component Id="C.notifyfs_dotnet.sln">
<File Name="notifyfs-dotnet.sln" KeyPath="yes" />
</Component>
<Component Id="C.notifyfs_dotnet.csproj">
<File Name="notifyfs-dotnet.csproj" KeyPath="yes" />
</Component>
</Directory>
</DirectoryRef>
<DirectoryRef Id="SYMDIR">
<Component Id="C.$(var.MyProductFileName)_x64.sys.pdb">
<File Name="$(var.MyProductFileName)-x64.sys.pdb" Source="..\build\$(var.Configuration)\$(var.MyProductFileName)-x64.sys.public.pdb" KeyPath="yes" />
</Component>
<Component Id="C.$(var.MyProductFileName)_x86.sys.pdb">
<File Name="$(var.MyProductFileName)-x86.sys.pdb" Source="..\build\$(var.Configuration)\$(var.MyProductFileName)-x86.sys.public.pdb" KeyPath="yes" />
</Component>
<Component Id="C.$(var.MyProductFileName)_x64.dll.pdb">
<File Name="$(var.MyProductFileName)-x64.dll.pdb" Source="..\build\$(var.Configuration)\$(var.MyProductFileName)-x64.dll.public.pdb" KeyPath="yes" />
</Component>
<Component Id="C.$(var.MyProductFileName)_x86.dll.pdb">
<File Name="$(var.MyProductFileName)-x86.dll.pdb" Source="..\build\$(var.Configuration)\$(var.MyProductFileName)-x86.dll.public.pdb" KeyPath="yes" />
</Component>
<Component Id="C.launcher_x64.pdb">
<File Name="launcher-x64.pdb" Source="..\build\$(var.Configuration)\launcher-x64.public.pdb" KeyPath="yes" />
</Component>
<Component Id="C.launcher_x86.pdb">
<File Name="launcher-x86.pdb" Source="..\build\$(var.Configuration)\launcher-x86.public.pdb" KeyPath="yes" />
</Component>
<Component Id="C.launchctl_x64.pdb">
<File Name="launchctl-x64.pdb" Source="..\build\$(var.Configuration)\launchctl-x64.public.pdb" KeyPath="yes" />
</Component>
<Component Id="C.launchctl_x86.pdb">
<File Name="launchctl-x86.pdb" Source="..\build\$(var.Configuration)\launchctl-x86.public.pdb" KeyPath="yes" />
</Component>
<Component Id="C.fsptool_x64.pdb">
<File Name="fsptool-x64.pdb" Source="..\build\$(var.Configuration)\fsptool-x64.public.pdb" KeyPath="yes" />
</Component>
<Component Id="C.fsptool_x86.pdb">
<File Name="fsptool-x86.pdb" Source="..\build\$(var.Configuration)\fsptool-x86.public.pdb" KeyPath="yes" />
</Component>
<Component Id="C.memfs_x64.pdb">
<File Name="memfs-x64.pdb" Source="..\build\$(var.Configuration)\memfs-x64.public.pdb" KeyPath="yes" />
</Component>
<Component Id="C.memfs_x86.pdb">
<File Name="memfs-x86.pdb" Source="..\build\$(var.Configuration)\memfs-x86.public.pdb" KeyPath="yes" />
</Component>
</DirectoryRef>
<ComponentGroup Id="C.WinFsp.bin">
<ComponentRef Id="C.winfsp_x64.sys" />
<ComponentRef Id="C.winfsp_x86.sys" />
<ComponentRef Id="C.winfsp_x64.dll.selfreg" />
<ComponentRef Id="C.winfsp_x86.dll" />
<ComponentRef Id="C.winfsp_x64.dll" />
<ComponentRef Id="C.winfsp_x86.dll.selfreg" />
<ComponentGroup Id="C.$(var.MyProductName).bin">
<ComponentRef Id="C.$(var.MyProductFileName)_x64.sys" />
<ComponentRef Id="C.$(var.MyProductFileName)_x86.sys" />
<ComponentRef Id="C.$(var.MyProductFileName)_x64.dll.selfreg" />
<ComponentRef Id="C.$(var.MyProductFileName)_x86.dll" />
<ComponentRef Id="C.$(var.MyProductFileName)_x64.dll" />
<ComponentRef Id="C.$(var.MyProductFileName)_x86.dll.selfreg" />
<ComponentRef Id="C.launcher_x64.exe.svcinst" />
<ComponentRef Id="C.launcher_x86.exe" />
<ComponentRef Id="C.launcher_x64.exe" />
<ComponentRef Id="C.launcher_x86.exe.svcinst" />
<ComponentRef Id="C.launchctl_x64.exe" />
<ComponentRef Id="C.launchctl_x86.exe" />
<ComponentRef Id="C.fsptool_x64.exe" />
<ComponentRef Id="C.fsptool_x86.exe" />
<ComponentRef Id="C.diag.bat" />
<ComponentRef Id="C.fsreg.bat" />
</ComponentGroup>
<ComponentGroup Id="C.WinFsp.inc">
<ComponentGroup Id="C.$(var.MyProductName).inc">
<ComponentRef Id="C.fsctl.h" />
<ComponentRef Id="C.winfsp.h" />
<ComponentRef Id="C.launch.h" />
<!--ComponentRef Id="C.winfsp.hpp" /-->
<ComponentRef Id="C.fuse.h" />
<ComponentRef Id="C.fuse_common.h" />
<ComponentRef Id="C.fuse_opt.h" />
<ComponentRef Id="C.winfsp_fuse.h" />
<ComponentRef Id="C.fuse3.h" />
<ComponentRef Id="C.fuse3_common.h" />
<ComponentRef Id="C.fuse3_opt.h" />
<ComponentRef Id="C.winfsp_fuse3.h" />
</ComponentGroup>
<ComponentGroup Id="C.WinFsp.lib">
<ComponentRef Id="C.winfsp_x64.lib" />
<ComponentRef Id="C.winfsp_x86.lib" />
<ComponentGroup Id="C.$(var.MyProductName).lib">
<ComponentRef Id="C.$(var.MyProductFileName)_x64.lib" />
<ComponentRef Id="C.$(var.MyProductFileName)_x86.lib" />
<ComponentRef Id="C.fuse_x64.pc" />
<ComponentRef Id="C.fuse_x86.pc" />
<ComponentRef Id="C.fuse3_x64.pc" />
<ComponentRef Id="C.fuse3_x86.pc" />
</ComponentGroup>
<ComponentGroup Id="C.WinFsp.smp">
<ComponentGroup Id="C.$(var.MyProductName).opt.fuse">
<ComponentRef Id="C.fuse.tar.xz.x64" />
<ComponentRef Id="C.fuse.tar.xz.x86" />
<ComponentRef Id="C.fuse3.tar.xz.x64" />
<ComponentRef Id="C.fuse3.tar.xz.x86" />
<ComponentRef Id="C.fuse.install.sh" />
<ComponentRef Id="C.fuse.uninstall.sh" />
</ComponentGroup>
<ComponentGroup Id="C.$(var.MyProductName).opt.fsext">
<ComponentRef Id="C.fsext.h" />
<ComponentRef Id="C.fsext.winfsp_x64.lib" />
<ComponentRef Id="C.fsext.winfsp_x86.lib" />
</ComponentGroup>
<ComponentGroup Id="C.$(var.MyProductName).smp">
<ComponentRef Id="C.memfs_x64.exe" />
<ComponentRef Id="C.memfs_x86.exe" />
<ComponentRef Id="C.memfs.h" />
<ComponentRef Id="C.memfs.cpp" />
<ComponentRef Id="C.memfs_main.c" />
<ComponentRef Id="C.memfs_fuse3.cpp" />
<ComponentRef Id="C.memfs_fuse3.compat.h" />
<ComponentRef Id="C.memfs_fuse3.sln" />
<ComponentRef Id="C.memfs_fuse3.vcxproj" />
<ComponentRef Id="C.memfs_fuse3.vcxproj.filters" />
<ComponentRef Id="C.memfs_fuse3.Makefile" />
<ComponentRef Id="C.memfs_fuse3.README.md" />
<ComponentRef Id="C.airfs.cpp" />
<ComponentRef Id="C.persistence.cpp" />
<ComponentRef Id="C.common.h" />
<ComponentRef Id="C.airfs.sln" />
<ComponentRef Id="C.airfs.vcxproj" />
<ComponentRef Id="C.airfs.vcxproj.filters" />
<ComponentRef Id="C.passthrough.c" />
<ComponentRef Id="C.passthrough.sln" />
<ComponentRef Id="C.passthrough.vcxproj" />
<ComponentRef Id="C.passthrough.vcxproj.filters" />
<!--ComponentRef Id="C.passthrough_cpp.cpp" /-->
<!--ComponentRef Id="C.passthrough_cpp.sln" /-->
<!--ComponentRef Id="C.passthrough_cpp.vcxproj" /-->
<!--ComponentRef Id="C.passthrough_cpp.vcxproj.filters" /-->
<ComponentRef Id="C.passthrough_fuse.c" />
<ComponentRef Id="C.passthrough_fuse.winposix.c" />
<ComponentRef Id="C.passthrough_fuse.winposix.h" />
<ComponentRef Id="C.passthrough_fuse.sln" />
<ComponentRef Id="C.passthrough_fuse.vcxproj" />
<ComponentRef Id="C.passthrough_fuse.vcxproj.filters" />
<ComponentRef Id="C.passthrough_fuse.Makefile" />
<ComponentRef Id="C.passthrough_fuse.README.md" />
<ComponentRef Id="C.passthrough_fuse3.c" />
<ComponentRef Id="C.passthrough_fuse3.winposix.c" />
<ComponentRef Id="C.passthrough_fuse3.winposix.h" />
<ComponentRef Id="C.passthrough_fuse3.sln" />
<ComponentRef Id="C.passthrough_fuse3.vcxproj" />
<ComponentRef Id="C.passthrough_fuse3.vcxproj.filters" />
<ComponentRef Id="C.passthrough_fuse3.Makefile" />
<ComponentRef Id="C.passthrough_fuse3.README.md" />
<ComponentRef Id="C.notifyfs.c" />
<ComponentRef Id="C.notifyfs.sln" />
<ComponentRef Id="C.notifyfs.vcxproj" />
<ComponentRef Id="C.notifyfs.vcxproj.filters" />
</ComponentGroup>
<ComponentGroup Id="C.$(var.MyProductName).sym">
<ComponentRef Id="C.$(var.MyProductFileName)_x64.sys.pdb" />
<ComponentRef Id="C.$(var.MyProductFileName)_x86.sys.pdb" />
<ComponentRef Id="C.$(var.MyProductFileName)_x86.dll.pdb" />
<ComponentRef Id="C.$(var.MyProductFileName)_x64.dll.pdb" />
<ComponentRef Id="C.launcher_x86.pdb" />
<ComponentRef Id="C.launcher_x64.pdb" />
<ComponentRef Id="C.launchctl_x64.pdb" />
<ComponentRef Id="C.launchctl_x86.pdb" />
<ComponentRef Id="C.fsptool_x64.pdb" />
<ComponentRef Id="C.fsptool_x86.pdb" />
<ComponentRef Id="C.memfs_x64.pdb" />
<ComponentRef Id="C.memfs_x86.pdb" />
</ComponentGroup>
<ComponentGroup Id="C.$(var.MyProductName).net">
<ComponentRef Id="C.$(var.MyProductFileName)_msil.dll" />
<ComponentRef Id="C.$(var.MyProductFileName)_msil.xml" />
<!--
<ComponentRef Id="C.$(var.MyProductFileName)_msil.dll.GAC" />
<ComponentRef Id="C.policy.$(var.MyProductFileName)_msil.dll.GAC" />
-->
</ComponentGroup>
<ComponentGroup Id="C.$(var.MyProductName).smp.net">
<ComponentRef Id="C.memfs_dotnet_msil.exe" />
<ComponentRef Id="C.memfs_dotnet.Program.cs" />
<ComponentRef Id="C.passthrough_dotnet.Program.cs" />
<ComponentRef Id="C.passthrough_dotnet.sln" />
<ComponentRef Id="C.passthrough_dotnet.csproj" />
<ComponentRef Id="C.notifyfs_dotnet.Program.cs" />
<ComponentRef Id="C.notifyfs_dotnet.sln" />
<ComponentRef Id="C.notifyfs_dotnet.csproj" />
</ComponentGroup>
<Feature
Id="F.Main"
Level="1"
Title="$(var.MyProductName) $(var.MyVersion)"
Title="$(var.MyProductName) $(var.MyProductVersion)"
Description="$(var.MyDescription)"
Display="expand"
ConfigurableDirectory="INSTALLDIR"
@ -301,6 +748,7 @@
InstallDefault="local"
Absent="disallow">
<ComponentRef Id="C.INSTALLDIR" />
<ComponentRef Id="C.License.txt" />
<Feature
Id="F.User"
Level="1"
@ -309,8 +757,21 @@
AllowAdvertise="no"
InstallDefault="local"
Absent="disallow">
<ComponentGroupRef Id="C.WinFsp.bin" />
<ComponentGroupRef Id="C.$(var.MyProductName).bin" />
<ComponentGroupRef Id="C.$(var.MyProductName).net" />
</Feature>
<!--
<Feature
Id="F.Net"
Level="10"
Title=".NET"
Description="The managed $(var.MyProductName) files."
AllowAdvertise="no"
InstallDefault="local"
Absent="allow">
<ComponentGroupRef Id="C.$(var.MyProductName).net" />
</Feature>
-->
<Feature
Id="F.Developer"
Level="1000"
@ -319,12 +780,36 @@
AllowAdvertise="no"
InstallDefault="local"
Absent="allow">
<ComponentGroupRef Id="C.WinFsp.inc" />
<ComponentGroupRef Id="C.WinFsp.lib" />
<ComponentGroupRef Id="C.WinFsp.smp" />
<ComponentGroupRef Id="C.$(var.MyProductName).inc" />
<ComponentGroupRef Id="C.$(var.MyProductName).lib" />
<ComponentGroupRef Id="C.$(var.MyProductName).smp" />
<ComponentGroupRef Id="C.$(var.MyProductName).smp.net" />
<ComponentGroupRef Id="C.$(var.MyProductName).sym" />
</Feature>
<Feature
Id="F.KernelDeveloper"
Level="1000"
Title="Kernel Developer"
Description="Additional files needed for in-kernel development."
AllowAdvertise="no"
InstallDefault="local"
Absent="allow">
<ComponentGroupRef Id="C.$(var.MyProductName).opt.fsext" />
</Feature>
<Feature
Id="F.Cygfuse"
Level="1000"
Title="FUSE for Cygwin"
Description="From a Cygwin prompt change to &lt;InstallDir&gt;/opt/cygfuse and run install.sh."
AllowAdvertise="no"
InstallDefault="local"
Absent="allow">
<ComponentGroupRef Id="C.$(var.MyProductName).opt.fuse" />
</Feature>
</Feature>
<WixVariable Id="WixUIBannerBmp" Value="wixbanner.bmp" />
<WixVariable Id="WixUIDialogBmp" Value="wixdialog-$(var.MyProductStage).bmp" />
<UI Id="FeatureTree">
<UIRef Id="WixUI_FeatureTree" />
<!-- skip the license agreement dialog; higher Order takes priority (weird) -->
@ -367,4 +852,4 @@
</ScheduleReboot>
</InstallExecuteSequence>
</Product>
</Wix>
</Wix>

View File

@ -7,7 +7,7 @@
<ProductVersion>3.10</ProductVersion>
<ProjectGuid>d53aac39-4c57-4ca5-a4f3-c2b24888c594</ProjectGuid>
<SchemaVersion>2.0</SchemaVersion>
<OutputName>winfsp-$(MyVersion)</OutputName>
<OutputName>$(MyProductFileName)-$(MyVersion)</OutputName>
<OutputType>Package</OutputType>
<WixTargetsPath Condition=" '$(WixTargetsPath)' == '' AND '$(MSBuildExtensionsPath32)' != '' ">$(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.targets</WixTargetsPath>
<WixTargetsPath Condition=" '$(WixTargetsPath)' == '' ">$(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.targets</WixTargetsPath>
@ -16,7 +16,7 @@
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<OutputPath>$(SolutionDir)build\$(Configuration)\</OutputPath>
<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>
<Pedantic>True</Pedantic>
<SuppressPdbOutput>True</SuppressPdbOutput>
@ -25,7 +25,7 @@
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
<OutputPath>$(SolutionDir)build\$(Configuration)\</OutputPath>
<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>
<Pedantic>True</Pedantic>
<SuppressPdbOutput>True</SuppressPdbOutput>
@ -39,6 +39,10 @@
<HintPath>$(WixExtDir)\WixUIExtension.dll</HintPath>
<Name>WixUIExtension</Name>
</WixExtension>
<WixExtension Include="WixDependencyExtension">
<HintPath>$(WixExtDir)\WixDependencyExtension.dll</HintPath>
<Name>WixDependencyExtension</Name>
</WixExtension>
</ItemGroup>
<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,184 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\version.properties" />
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</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)'=='Release|x64'" 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 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>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\</IntDir>
<TargetName>$(ProjectName)-$(PlatformTarget)</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\</IntDir>
<TargetName>$(ProjectName)-$(PlatformTarget)</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\</IntDir>
<TargetName>$(ProjectName)-$(PlatformTarget)</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\</IntDir>
<TargetName>$(ProjectName)-$(PlatformTarget)</TargetName>
</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>
</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>
</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>
</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>
</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>
<SDLCheck Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</SDLCheck>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|x64'">TurnOffAllWarnings</WarningLevel>
<SDLCheck Condition="'$(Configuration)|$(Platform)'=='Release|x64'">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,182 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\version.properties" />
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</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)'=='Release|x64'" 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 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>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\</IntDir>
<TargetName>$(ProjectName)-$(PlatformTarget)</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\</IntDir>
<TargetName>$(ProjectName)-$(PlatformTarget)</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\</IntDir>
<TargetName>$(ProjectName)-$(PlatformTarget)</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\</IntDir>
<TargetName>$(ProjectName)-$(PlatformTarget)</TargetName>
</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)'=='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>
<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,63 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{4920E350-D496-4652-AE98-6C4208AEC1D8}</ProjectGuid>
<OutputType>Exe</OutputType>
<ProjectName>memfs-dotnet</ProjectName>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>memfs</RootNamespace>
<AssemblyName>memfs-dotnet-msil</AssemblyName>
<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>$(SolutionDir)build\$(Configuration)\</OutputPath>
<BaseIntermediateOutputPath>$(SolutionDir)build\$(ProjectName).build\</BaseIntermediateOutputPath>
<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>
<BaseIntermediateOutputPath>$(SolutionDir)build\$(ProjectName).build\</BaseIntermediateOutputPath>
<IntermediateOutputPath>$(BaseIntermediateOutputPath)$(Configuration)\</IntermediateOutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
</ItemGroup>
<ItemGroup>
<Compile Include="..\..\..\tst\memfs-dotnet\Program.cs">
<Link>Program.cs</Link>
</Compile>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\dotnet\winfsp.net.csproj">
<Project>{94580219-cc8d-4fe5-a3be-437b0b3481e1}</Project>
<Name>winfsp.net</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\version.properties" />
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
@ -22,33 +23,33 @@
<ProjectGuid>{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>memfs</RootNamespace>
<WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
<WindowsTargetPlatformVersion>$(LatestTargetPlatformVersion)</WindowsTargetPlatformVersion>
<ProjectName>memfs</ProjectName>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<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>v140</PlatformToolset>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
@ -100,14 +101,14 @@
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>MEMFS_STANDALONE;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>..\..\..\src;..\..\..\inc</AdditionalIncludeDirectories>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<StripPrivateSymbols>$(OutDir)$(TargetName).public.pdb</StripPrivateSymbols>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
@ -116,14 +117,14 @@
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>MEMFS_STANDALONE;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>..\..\..\src;..\..\..\inc</AdditionalIncludeDirectories>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<StripPrivateSymbols>$(OutDir)$(TargetName).public.pdb</StripPrivateSymbols>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@ -134,16 +135,17 @@
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>MEMFS_STANDALONE;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>..\..\..\src;..\..\..\inc</AdditionalIncludeDirectories>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<StripPrivateSymbols>$(OutDir)$(TargetName).public.pdb</StripPrivateSymbols>
<AdditionalOptions>/PDBALTPATH:$(TargetName).pdb %(AdditionalOptions)</AdditionalOptions>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
@ -154,16 +156,17 @@
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>MEMFS_STANDALONE;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>..\..\..\src;..\..\..\inc</AdditionalIncludeDirectories>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<StripPrivateSymbols>$(OutDir)$(TargetName).public.pdb</StripPrivateSymbols>
<AdditionalOptions>/PDBALTPATH:$(TargetName).pdb %(AdditionalOptions)</AdditionalOptions>
</Link>
</ItemDefinitionGroup>
<ItemGroup>

View File

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\version.properties" />
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
@ -22,32 +23,32 @@
<ProjectGuid>{262DF8CC-E7A8-4460-A22C-683CBA322C32}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>winfsptests</RootNamespace>
<WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
<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>v140</PlatformToolset>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<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>v140</PlatformToolset>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
@ -106,8 +107,7 @@
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>ntdll.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>ntdll.lib;netapi32.lib;dbghelp.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
@ -123,8 +123,7 @@
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>ntdll.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>ntdll.lib;netapi32.lib;dbghelp.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@ -142,10 +141,9 @@
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>ntdll.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>ntdll.lib;netapi32.lib;dbghelp.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
@ -163,10 +161,9 @@
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>ntdll.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>ntdll.lib;netapi32.lib;dbghelp.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
@ -182,30 +179,51 @@
</ClCompile>
<ClCompile Include="..\..\..\tst\memfs\memfs.cpp" />
<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\ea-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\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\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\memfs-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\posix-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\stream-tests.c" />
<ClCompile Include="..\..\..\tst\winfsp-tests\timeout-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\wsl-test.c" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\ext\tlib\testsuite.h" />
<ClInclude Include="..\..\..\tst\memfs\memfs.h" />
<ClInclude Include="..\..\..\tst\winfsp-tests\winfsp-tests.h" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\winfsp_dll.vcxproj">
<Project>{4a7c0b21-9e10-4c81-92de-1493efcf24eb}</Project>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\..\..\tst\winfsp-tests\helper\winfsp-tests-helper.rc" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>

View File

@ -61,6 +61,57 @@
<ClCompile Include="..\..\..\tst\winfsp-tests\posix-test.c">
<Filter>Source</Filter>
</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>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\ext\tlib\testsuite.h">
@ -69,5 +120,13 @@
<ClInclude Include="..\..\..\tst\memfs\memfs.h">
<Filter>Source</Filter>
</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>
</Project>

View File

@ -0,0 +1,194 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\version.properties" />
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</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>{1E997BEC-1642-4A5C-B252-852DA094E11E}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>fsptool</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)'=='Release|x64'" 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 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>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\</IntDir>
<TargetName>$(ProjectName)-$(PlatformTarget)</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\</IntDir>
<TargetName>$(ProjectName)-$(PlatformTarget)</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\</IntDir>
<TargetName>$(ProjectName)-$(PlatformTarget)</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\</IntDir>
<TargetName>$(ProjectName)-$(PlatformTarget)</TargetName>
</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>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<BufferSecurityCheck>false</BufferSecurityCheck>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
<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>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<BufferSecurityCheck>false</BufferSecurityCheck>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
<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>
<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>
</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>
<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>
</ItemDefinitionGroup>
<ItemGroup>
<ProjectReference Include="..\winfsp_dll.vcxproj">
<Project>{4a7c0b21-9e10-4c81-92de-1493efcf24eb}</Project>
</ProjectReference>
</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" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

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

@ -20,35 +20,35 @@
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{73EAAEDA-557B-48D5-A137-328934720FB4}</ProjectGuid>
<ProjectGuid>{264A5D09-126F-4760-A3F1-4B3B95C925AA}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>launchctl</RootNamespace>
<WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
<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>v140</PlatformToolset>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<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>v140</PlatformToolset>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
@ -105,11 +105,13 @@
<BufferSecurityCheck>false</BufferSecurityCheck>
<BasicRuntimeChecks>Default</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<AdditionalOptions>
</AdditionalOptions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
<StripPrivateSymbols>$(OutDir)$(TargetName).public.pdb</StripPrivateSymbols>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
@ -123,11 +125,13 @@
<BufferSecurityCheck>false</BufferSecurityCheck>
<BasicRuntimeChecks>Default</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<AdditionalOptions>
</AdditionalOptions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
<StripPrivateSymbols>$(OutDir)$(TargetName).public.pdb</StripPrivateSymbols>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@ -142,13 +146,16 @@
<AdditionalIncludeDirectories>..\..\..\src;..\..\..\inc</AdditionalIncludeDirectories>
<BufferSecurityCheck>false</BufferSecurityCheck>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<AdditionalOptions>
</AdditionalOptions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
<StripPrivateSymbols>$(OutDir)$(TargetName).public.pdb</StripPrivateSymbols>
<AdditionalOptions>/PDBALTPATH:$(TargetName).pdb %(AdditionalOptions)</AdditionalOptions>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
@ -163,28 +170,27 @@
<AdditionalIncludeDirectories>..\..\..\src;..\..\..\inc</AdditionalIncludeDirectories>
<BufferSecurityCheck>false</BufferSecurityCheck>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<AdditionalOptions>
</AdditionalOptions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
<StripPrivateSymbols>$(OutDir)$(TargetName).public.pdb</StripPrivateSymbols>
<AdditionalOptions>/PDBALTPATH:$(TargetName).pdb %(AdditionalOptions)</AdditionalOptions>
</Link>
</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>
<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)'=='Release|x64'">_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ResourceCompile>
</ItemGroup>
<ItemGroup>
@ -192,6 +198,9 @@
<Project>{4a7c0b21-9e10-4c81-92de-1493efcf24eb}</Project>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\src\shared\um\minimal.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>

View File

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

View File

@ -20,35 +20,35 @@
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{A5EFD487-0140-4184-8C54-FFAEC2F85E35}</ProjectGuid>
<ProjectGuid>{6CDF9411-B852-4EAC-822D-8F930675F17B}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>launcher</RootNamespace>
<WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
<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>v140</PlatformToolset>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<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>v140</PlatformToolset>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
@ -105,11 +105,14 @@
<BasicRuntimeChecks>Default</BasicRuntimeChecks>
<BufferSecurityCheck>false</BufferSecurityCheck>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<AdditionalOptions>
</AdditionalOptions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
<AdditionalDependencies>%(AdditionalDependencies);rpcrt4.lib;userenv.lib</AdditionalDependencies>
<StripPrivateSymbols>$(OutDir)$(TargetName).public.pdb</StripPrivateSymbols>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
@ -123,11 +126,14 @@
<BasicRuntimeChecks>Default</BasicRuntimeChecks>
<BufferSecurityCheck>false</BufferSecurityCheck>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<AdditionalOptions>
</AdditionalOptions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
<AdditionalDependencies>%(AdditionalDependencies);rpcrt4.lib;userenv.lib</AdditionalDependencies>
<StripPrivateSymbols>$(OutDir)$(TargetName).public.pdb</StripPrivateSymbols>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@ -142,13 +148,17 @@
<AdditionalIncludeDirectories>..\..\..\src;..\..\..\inc</AdditionalIncludeDirectories>
<BufferSecurityCheck>false</BufferSecurityCheck>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<AdditionalOptions>
</AdditionalOptions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
<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'">
@ -163,17 +173,22 @@
<AdditionalIncludeDirectories>..\..\..\src;..\..\..\inc</AdditionalIncludeDirectories>
<BufferSecurityCheck>false</BufferSecurityCheck>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<AdditionalOptions>
</AdditionalOptions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
<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">
@ -181,16 +196,15 @@
</ProjectReference>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\src\launcher\launcher.h" />
<ClInclude Include="..\..\..\src\shared\minimal.h" />
<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)'=='Release|x64'">_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ResourceCompile>
</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>
<ClInclude Include="..\..\..\src\shared\um\minimal.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">

View File

@ -5,29 +5,29 @@
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Include">
<UniqueIdentifier>{11e7c0f2-7782-43ee-84fa-9e56efbe39de}</UniqueIdentifier>
<Filter Include="Source\shared">
<UniqueIdentifier>{ebc5d08c-dcc6-4889-a482-84cefda188cd}</UniqueIdentifier>
</Filter>
<Filter Include="Include\shared">
<UniqueIdentifier>{d83ea433-d9f7-494c-90b9-3a8997483cd9}</UniqueIdentifier>
<Filter Include="Source\shared\um">
<UniqueIdentifier>{574d211e-3e2c-4551-bc78-4786f33c4093}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\..\src\launcher\launcher.c">
<Filter>Source</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\src\shared\minimal.h">
<Filter>Include\shared</Filter>
</ClInclude>
<ClInclude Include="..\..\..\src\launcher\launcher.h">
<ClCompile Include="..\..\..\src\launcher\ptrans.c">
<Filter>Source</Filter>
</ClInclude>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\..\..\src\launcher\launcher-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,13 +1,63 @@
<?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.13.$(MyBuildNumber)</MyVersion>
<!-- git revision -->
<MyGitRoot>$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), .git/HEAD))</MyGitRoot>
<MyGitHead>$([System.IO.File]::ReadAllText($(MyGitRoot)/.git/HEAD).Trim())</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>1.10</MyCanonicalVersion>
<MyProductVersion>2021.1 Beta2</MyProductVersion>
<MyProductStage>Beta</MyProductStage>
<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>
<!-- 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>
</PropertyGroup>
<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)</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)</PreprocessorDefinitions>
</ResourceCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(IsKernelModeToolset)'=='true'">
<ClCompile>
<DisableSpecificWarnings>4996</DisableSpecificWarnings>
</ClCompile>
</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

@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.25123.0
VisualStudioVersion = 14.0.25420.1
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "winfsp.dll", "winfsp_dll.vcxproj", "{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}"
ProjectSection(ProjectDependencies) = postProject
@ -32,19 +32,32 @@ Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "winfsp_msi", "installer\win
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CustomActions", "installer\CustomActions\CustomActions.vcxproj", "{95C223E6-B5F1-4FD0-9376-41CDBC824445}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "launcher", "launcher", "{FD28A504-431E-49B9-BB8C-DCA0E7019F66}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "launcher", "launcher\launcher.vcxproj", "{A5EFD487-0140-4184-8C54-FFAEC2F85E35}"
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fscrash", "testing\fscrash.vcxproj", "{10757011-749D-4954-873B-AE38D8145472}"
ProjectSection(ProjectDependencies) = postProject
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB} = {4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}
{C85C26BA-8C22-4D30-83DA-46C3548E6332} = {C85C26BA-8C22-4D30-83DA-46C3548E6332}
EndProjectSection
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
{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
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
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
@ -129,30 +142,90 @@ Global
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Installer.Release|x86.Build.0 = Release|Win32
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Release|x64.ActiveCfg = Release|Win32
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Release|x86.ActiveCfg = Release|Win32
{A5EFD487-0140-4184-8C54-FFAEC2F85E35}.Debug|x64.ActiveCfg = Debug|x64
{A5EFD487-0140-4184-8C54-FFAEC2F85E35}.Debug|x64.Build.0 = Debug|x64
{A5EFD487-0140-4184-8C54-FFAEC2F85E35}.Debug|x86.ActiveCfg = Debug|Win32
{A5EFD487-0140-4184-8C54-FFAEC2F85E35}.Debug|x86.Build.0 = Debug|Win32
{A5EFD487-0140-4184-8C54-FFAEC2F85E35}.Installer.Debug|x64.ActiveCfg = Debug|x64
{A5EFD487-0140-4184-8C54-FFAEC2F85E35}.Installer.Debug|x86.ActiveCfg = Debug|Win32
{A5EFD487-0140-4184-8C54-FFAEC2F85E35}.Installer.Release|x64.ActiveCfg = Release|x64
{A5EFD487-0140-4184-8C54-FFAEC2F85E35}.Installer.Release|x86.ActiveCfg = Release|Win32
{A5EFD487-0140-4184-8C54-FFAEC2F85E35}.Release|x64.ActiveCfg = Release|x64
{A5EFD487-0140-4184-8C54-FFAEC2F85E35}.Release|x64.Build.0 = Release|x64
{A5EFD487-0140-4184-8C54-FFAEC2F85E35}.Release|x86.ActiveCfg = Release|Win32
{A5EFD487-0140-4184-8C54-FFAEC2F85E35}.Release|x86.Build.0 = Release|Win32
{73EAAEDA-557B-48D5-A137-328934720FB4}.Debug|x64.ActiveCfg = Debug|x64
{73EAAEDA-557B-48D5-A137-328934720FB4}.Debug|x64.Build.0 = Debug|x64
{73EAAEDA-557B-48D5-A137-328934720FB4}.Debug|x86.ActiveCfg = Debug|Win32
{73EAAEDA-557B-48D5-A137-328934720FB4}.Debug|x86.Build.0 = Debug|Win32
{73EAAEDA-557B-48D5-A137-328934720FB4}.Installer.Debug|x64.ActiveCfg = Debug|x64
{73EAAEDA-557B-48D5-A137-328934720FB4}.Installer.Debug|x86.ActiveCfg = Debug|Win32
{73EAAEDA-557B-48D5-A137-328934720FB4}.Installer.Release|x64.ActiveCfg = Release|x64
{73EAAEDA-557B-48D5-A137-328934720FB4}.Installer.Release|x86.ActiveCfg = Release|Win32
{73EAAEDA-557B-48D5-A137-328934720FB4}.Release|x64.ActiveCfg = Release|x64
{73EAAEDA-557B-48D5-A137-328934720FB4}.Release|x64.Build.0 = Release|x64
{73EAAEDA-557B-48D5-A137-328934720FB4}.Release|x86.ActiveCfg = Release|Win32
{73EAAEDA-557B-48D5-A137-328934720FB4}.Release|x86.Build.0 = Release|Win32
{10757011-749D-4954-873B-AE38D8145472}.Debug|x64.ActiveCfg = Debug|x64
{10757011-749D-4954-873B-AE38D8145472}.Debug|x64.Build.0 = Debug|x64
{10757011-749D-4954-873B-AE38D8145472}.Debug|x86.ActiveCfg = Debug|Win32
{10757011-749D-4954-873B-AE38D8145472}.Debug|x86.Build.0 = Debug|Win32
{10757011-749D-4954-873B-AE38D8145472}.Installer.Debug|x64.ActiveCfg = Debug|x64
{10757011-749D-4954-873B-AE38D8145472}.Installer.Debug|x86.ActiveCfg = Debug|Win32
{10757011-749D-4954-873B-AE38D8145472}.Installer.Release|x64.ActiveCfg = Release|x64
{10757011-749D-4954-873B-AE38D8145472}.Installer.Release|x86.ActiveCfg = Release|Win32
{10757011-749D-4954-873B-AE38D8145472}.Release|x64.ActiveCfg = Release|x64
{10757011-749D-4954-873B-AE38D8145472}.Release|x64.Build.0 = Release|x64
{10757011-749D-4954-873B-AE38D8145472}.Release|x86.ActiveCfg = Release|Win32
{10757011-749D-4954-873B-AE38D8145472}.Release|x86.Build.0 = Release|Win32
{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Debug|x64.ActiveCfg = Debug|x64
{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Debug|x64.Build.0 = Debug|x64
{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Debug|x86.ActiveCfg = Debug|Win32
{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Debug|x86.Build.0 = Debug|Win32
{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|x64.ActiveCfg = Release|x64
{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Installer.Release|x86.ActiveCfg = Release|Win32
{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|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|x64.ActiveCfg = Debug|Any CPU
{94580219-CC8D-4FE5-A3BE-437B0B3481E1}.Installer.Debug|x86.ActiveCfg = Debug|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|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|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|x64.ActiveCfg = Debug|Any CPU
{4920E350-D496-4652-AE98-6C4208AEC1D8}.Installer.Debug|x86.ActiveCfg = Debug|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|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|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|x64.ActiveCfg = Debug|x64
{6CDF9411-B852-4EAC-822D-8F930675F17B}.Installer.Debug|x86.ActiveCfg = Debug|Win32
{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|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|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|x64.ActiveCfg = Debug|x64
{264A5D09-126F-4760-A3F1-4B3B95C925AA}.Installer.Debug|x86.ActiveCfg = Debug|Win32
{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|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|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|x64.ActiveCfg = Debug|x64
{1E997BEC-1642-4A5C-B252-852DA094E11E}.Installer.Debug|x86.ActiveCfg = Debug|Win32
{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|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
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -162,7 +235,12 @@ Global
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1} = {69439FD1-C07D-4BF1-98DC-3CCFECE53A49}
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594} = {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}
{73EAAEDA-557B-48D5-A137-328934720FB4} = {FD28A504-431E-49B9-BB8C-DCA0E7019F66}
{10757011-749D-4954-873B-AE38D8145472} = {69439FD1-C07D-4BF1-98DC-3CCFECE53A49}
{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
EndGlobal

View File

@ -20,24 +20,41 @@
</ProjectConfiguration>
</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_common.h" />
<ClInclude Include="..\..\inc\fuse\fuse_opt.h" />
<ClInclude Include="..\..\inc\fuse\winfsp_fuse.h" />
<ClInclude Include="..\..\inc\winfsp\fsctl.h" />
<ClInclude Include="..\..\inc\winfsp\launch.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\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>
<ClCompile Include="..\..\src\dll\dirbuf.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_compat.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_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\posix.c" />
<ClCompile Include="..\..\src\dll\security.c" />
<ClCompile Include="..\..\src\dll\debug.c" />
<ClCompile Include="..\..\src\dll\fsctl.c" />
@ -48,9 +65,11 @@
<ClCompile Include="..\..\src\dll\path.c" />
<ClCompile Include="..\..\src\dll\service.c" />
<ClCompile Include="..\..\src\dll\util.c" />
<ClCompile Include="..\..\src\dll\wksid.c" />
<ClCompile Include="..\..\src\shared\ku\posix.c" />
</ItemGroup>
<ItemGroup>
<CustomBuild Include="..\..\src\dll\fuse\fuse.pc">
<CustomBuild Include="..\..\src\dll\fuse\fuse.pc.in">
<FileType>Document</FileType>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">echo arch=$(PlatformTarget) &gt;$(OutDir)fuse-$(PlatformTarget).pc
copy /b $(OutDir)fuse-$(PlatformTarget).pc + %(FullPath) $(OutDir)fuse-$(PlatformTarget).pc &gt;nul</Command>
@ -73,48 +92,71 @@ copy /b $(OutDir)fuse-$(PlatformTarget).pc + %(FullPath) $(OutDir)fuse-$(Platfor
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)fuse-$(PlatformTarget).pc</Outputs>
<LinkObjects Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkObjects>
</CustomBuild>
<CustomBuild Include="..\..\src\dll\fuse3\fuse3.pc.in">
<FileType>Document</FileType>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">echo arch=$(PlatformTarget) &gt;$(OutDir)fuse3-$(PlatformTarget).pc
copy /b $(OutDir)fuse3-$(PlatformTarget).pc + %(FullPath) $(OutDir)fuse3-$(PlatformTarget).pc &gt;nul</Command>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">echo arch=$(PlatformTarget) &gt;$(OutDir)fuse3-$(PlatformTarget).pc
copy /b $(OutDir)fuse3-$(PlatformTarget).pc + %(FullPath) $(OutDir)fuse3-$(PlatformTarget).pc &gt;nul</Command>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">echo arch=$(PlatformTarget) &gt;$(OutDir)fuse3-$(PlatformTarget).pc
copy /b $(OutDir)fuse3-$(PlatformTarget).pc + %(FullPath) $(OutDir)fuse3-$(PlatformTarget).pc &gt;nul</Command>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">echo arch=$(PlatformTarget) &gt;$(OutDir)fuse3-$(PlatformTarget).pc
copy /b $(OutDir)fuse3-$(PlatformTarget).pc + %(FullPath) $(OutDir)fuse3-$(PlatformTarget).pc &gt;nul</Command>
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Writing fuse3-$(PlatformTarget).pc</Message>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Writing fuse3-$(PlatformTarget).pc</Message>
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Writing fuse3-$(PlatformTarget).pc</Message>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Writing fuse3-$(PlatformTarget).pc</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)fuse3-$(PlatformTarget).pc</Outputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)fuse3-$(PlatformTarget).pc</Outputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)fuse3-$(PlatformTarget).pc</Outputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)fuse3-$(PlatformTarget).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)'=='Release|x64'">false</LinkObjects>
</CustomBuild>
<None Include="..\..\src\dll\library.def" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\..\src\dll\eventlog\eventlog.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)'=='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>
<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)'=='Release|x64'">_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ResourceCompile>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>winfspdll</RootNamespace>
<WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
<WindowsTargetPlatformVersion>$(LatestTargetPlatformVersion)</WindowsTargetPlatformVersion>
<ProjectName>winfsp.dll</ProjectName>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
@ -140,25 +182,25 @@ copy /b $(OutDir)fuse-$(PlatformTarget).pc + %(FullPath) $(OutDir)fuse-$(Platfor
<LinkIncremental>true</LinkIncremental>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\</IntDir>
<TargetName>$(SolutionName)-$(PlatformTarget)</TargetName>
<TargetName>$(MyProductFileName)-$(PlatformTarget)</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\</IntDir>
<TargetName>$(SolutionName)-$(PlatformTarget)</TargetName>
<TargetName>$(MyProductFileName)-$(PlatformTarget)</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\</IntDir>
<TargetName>$(SolutionName)-$(PlatformTarget)</TargetName>
<TargetName>$(MyProductFileName)-$(PlatformTarget)</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\</IntDir>
<TargetName>$(SolutionName)-$(PlatformTarget)</TargetName>
<TargetName>$(MyProductFileName)-$(PlatformTarget)</TargetName>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
@ -173,16 +215,18 @@ copy /b $(OutDir)fuse-$(PlatformTarget).pc + %(FullPath) $(OutDir)fuse-$(Platfor
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<BasicRuntimeChecks>Default</BasicRuntimeChecks>
<BufferSecurityCheck>false</BufferSecurityCheck>
<AdditionalOptions>
</AdditionalOptions>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<ProgramDatabaseFile>$(OutDir)$(TargetFileName).pdb</ProgramDatabaseFile>
<GenerateMapFile>true</GenerateMapFile>
<MapFileName>$(OutDir)$(TargetFileName).map</MapFileName>
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
<ModuleDefinitionFile>..\..\src\dll\library.def</ModuleDefinitionFile>
<AdditionalDependencies>%(AdditionalDependencies);version.lib</AdditionalDependencies>
<AdditionalDependencies>%(AdditionalDependencies);rpcrt4.lib;credui.lib;secur32.lib;version.lib;netapi32.lib;wldap32.lib</AdditionalDependencies>
<StripPrivateSymbols>$(OutDir)$(TargetFileName).public.pdb</StripPrivateSymbols>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
@ -198,16 +242,18 @@ copy /b $(OutDir)fuse-$(PlatformTarget).pc + %(FullPath) $(OutDir)fuse-$(Platfor
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<BasicRuntimeChecks>Default</BasicRuntimeChecks>
<BufferSecurityCheck>false</BufferSecurityCheck>
<AdditionalOptions>
</AdditionalOptions>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<ProgramDatabaseFile>$(OutDir)$(TargetFileName).pdb</ProgramDatabaseFile>
<GenerateMapFile>true</GenerateMapFile>
<MapFileName>$(OutDir)$(TargetFileName).map</MapFileName>
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
<ModuleDefinitionFile>..\..\src\dll\library.def</ModuleDefinitionFile>
<AdditionalDependencies>%(AdditionalDependencies);version.lib</AdditionalDependencies>
<AdditionalDependencies>%(AdditionalDependencies);rpcrt4.lib;credui.lib;secur32.lib;version.lib;netapi32.lib;wldap32.lib</AdditionalDependencies>
<StripPrivateSymbols>$(OutDir)$(TargetFileName).public.pdb</StripPrivateSymbols>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@ -224,10 +270,11 @@ copy /b $(OutDir)fuse-$(PlatformTarget).pc + %(FullPath) $(OutDir)fuse-$(Platfor
<AdditionalIncludeDirectories>..\..\src;..\..\inc</AdditionalIncludeDirectories>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<BufferSecurityCheck>false</BufferSecurityCheck>
<AdditionalOptions>
</AdditionalOptions>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<ProgramDatabaseFile>$(OutDir)$(TargetFileName).pdb</ProgramDatabaseFile>
@ -235,7 +282,9 @@ copy /b $(OutDir)fuse-$(PlatformTarget).pc + %(FullPath) $(OutDir)fuse-$(Platfor
<MapFileName>$(OutDir)$(TargetFileName).map</MapFileName>
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
<ModuleDefinitionFile>..\..\src\dll\library.def</ModuleDefinitionFile>
<AdditionalDependencies>%(AdditionalDependencies);version.lib</AdditionalDependencies>
<AdditionalDependencies>%(AdditionalDependencies);rpcrt4.lib;credui.lib;secur32.lib;version.lib;netapi32.lib;wldap32.lib</AdditionalDependencies>
<StripPrivateSymbols>$(OutDir)$(TargetFileName).public.pdb</StripPrivateSymbols>
<AdditionalOptions>/PDBALTPATH:$(TargetFileName).pdb %(AdditionalOptions)</AdditionalOptions>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
@ -252,10 +301,11 @@ copy /b $(OutDir)fuse-$(PlatformTarget).pc + %(FullPath) $(OutDir)fuse-$(Platfor
<AdditionalIncludeDirectories>..\..\src;..\..\inc</AdditionalIncludeDirectories>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<BufferSecurityCheck>false</BufferSecurityCheck>
<AdditionalOptions>
</AdditionalOptions>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<ProgramDatabaseFile>$(OutDir)$(TargetFileName).pdb</ProgramDatabaseFile>
@ -263,7 +313,9 @@ copy /b $(OutDir)fuse-$(PlatformTarget).pc + %(FullPath) $(OutDir)fuse-$(Platfor
<MapFileName>$(OutDir)$(TargetFileName).map</MapFileName>
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
<ModuleDefinitionFile>..\..\src\dll\library.def</ModuleDefinitionFile>
<AdditionalDependencies>%(AdditionalDependencies);version.lib</AdditionalDependencies>
<AdditionalDependencies>%(AdditionalDependencies);rpcrt4.lib;credui.lib;secur32.lib;version.lib;netapi32.lib;wldap32.lib</AdditionalDependencies>
<StripPrivateSymbols>$(OutDir)$(TargetFileName).public.pdb</StripPrivateSymbols>
<AdditionalOptions>/PDBALTPATH:$(TargetFileName).pdb %(AdditionalOptions)</AdditionalOptions>
</Link>
</ItemDefinitionGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

View File

@ -12,15 +12,27 @@
<Filter Include="Include\winfsp">
<UniqueIdentifier>{1d6501f4-cebd-4a00-a774-deb782b59fb5}</UniqueIdentifier>
</Filter>
<Filter Include="Include\shared">
<UniqueIdentifier>{c7b83307-0aa0-4593-b2d4-26ff2f1edfc6}</UniqueIdentifier>
</Filter>
<Filter Include="Include\fuse">
<UniqueIdentifier>{0e7ab1b1-bfca-4439-accb-45a909be9cad}</UniqueIdentifier>
</Filter>
<Filter Include="Source\fuse">
<UniqueIdentifier>{518cce17-85cd-489c-b4be-920a84c1d73c}</UniqueIdentifier>
</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>
<ClInclude Include="..\..\inc\winfsp\fsctl.h">
@ -32,9 +44,6 @@
<ClInclude Include="..\..\src\dll\library.h">
<Filter>Source</Filter>
</ClInclude>
<ClInclude Include="..\..\src\shared\minimal.h">
<Filter>Include\shared</Filter>
</ClInclude>
<ClInclude Include="..\..\inc\fuse\fuse.h">
<Filter>Include\fuse</Filter>
</ClInclude>
@ -50,6 +59,36 @@
<ClInclude Include="..\..\src\dll\fuse\library.h">
<Filter>Source\fuse</Filter>
</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>
<ClCompile Include="..\..\src\dll\library.c">
@ -97,12 +136,42 @@
<ClCompile Include="..\..\src\dll\fuse\fuse_main.c">
<Filter>Source\fuse</Filter>
</ClCompile>
<ClCompile Include="..\..\src\dll\posix.c">
<Filter>Source</Filter>
</ClCompile>
<ClCompile Include="..\..\src\dll\fuse\fuse_intf.c">
<Filter>Source\fuse</Filter>
</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>
</ItemGroup>
<ItemGroup>
<None Include="..\..\src\dll\library.def">
@ -118,6 +187,11 @@
</ResourceCompile>
</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>
</Project>

View File

@ -34,6 +34,7 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<TargetVersion>Windows10</TargetVersion>
<UseDebugLibraries>true</UseDebugLibraries>
<KernelBufferOverflowLib>$(DDK_LIB_PATH)\BufferOverflowK.lib</KernelBufferOverflowLib>
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
<ConfigurationType>Driver</ConfigurationType>
<DriverType>WDM</DriverType>
@ -41,6 +42,7 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<TargetVersion>Windows10</TargetVersion>
<UseDebugLibraries>false</UseDebugLibraries>
<KernelBufferOverflowLib>$(DDK_LIB_PATH)\BufferOverflowK.lib</KernelBufferOverflowLib>
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
<ConfigurationType>Driver</ConfigurationType>
<DriverType>WDM</DriverType>
@ -48,6 +50,7 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<TargetVersion>Windows10</TargetVersion>
<UseDebugLibraries>true</UseDebugLibraries>
<KernelBufferOverflowLib>$(DDK_LIB_PATH)\BufferOverflowK.lib</KernelBufferOverflowLib>
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
<ConfigurationType>Driver</ConfigurationType>
<DriverType>WDM</DriverType>
@ -55,6 +58,7 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<TargetVersion>Windows10</TargetVersion>
<UseDebugLibraries>false</UseDebugLibraries>
<KernelBufferOverflowLib>$(DDK_LIB_PATH)\BufferOverflowK.lib</KernelBufferOverflowLib>
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
<ConfigurationType>Driver</ConfigurationType>
<DriverType>WDM</DriverType>
@ -71,82 +75,90 @@
<DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\</IntDir>
<TargetName>$(SolutionName)-$(PlatformTarget)</TargetName>
<TargetName>$(MyProductFileName)-$(PlatformTarget)</TargetName>
<EnableInf2cat>false</EnableInf2cat>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\</IntDir>
<TargetName>$(SolutionName)-$(PlatformTarget)</TargetName>
<TargetName>$(MyProductFileName)-$(PlatformTarget)</TargetName>
<EnableInf2cat>false</EnableInf2cat>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\</IntDir>
<TargetName>$(SolutionName)-$(PlatformTarget)</TargetName>
<TargetName>$(MyProductFileName)-$(PlatformTarget)</TargetName>
<EnableInf2cat>false</EnableInf2cat>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\</IntDir>
<TargetName>$(SolutionName)-$(PlatformTarget)</TargetName>
<TargetName>$(MyProductFileName)-$(PlatformTarget)</TargetName>
<EnableInf2cat>false</EnableInf2cat>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<AdditionalIncludeDirectories>..\..\src;..\..\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>..\..\src;..\..\opt\fsext\inc;..\..\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions> _X86_=1;i386=1;STD_CALL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<AdditionalDependencies>wdmsec.lib;%(AdditionalDependencies)</AdditionalDependencies>
<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>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<AdditionalIncludeDirectories>..\..\src;..\..\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>..\..\src;..\..\opt\fsext\inc;..\..\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions> _X86_=1;i386=1;STD_CALL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<AdditionalDependencies>wdmsec.lib;%(AdditionalDependencies)</AdditionalDependencies>
<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>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<AdditionalIncludeDirectories>..\..\src;..\..\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>..\..\src;..\..\opt\fsext\inc;..\..\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions> _WIN64;_AMD64_;AMD64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<AdditionalDependencies>wdmsec.lib;%(AdditionalDependencies)</AdditionalDependencies>
<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>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<AdditionalIncludeDirectories>..\..\src;..\..\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>..\..\src;..\..\opt\fsext\inc;..\..\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions> _WIN64;_AMD64_;AMD64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<AdditionalDependencies>wdmsec.lib;%(AdditionalDependencies)</AdditionalDependencies>
<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>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<FilesToPackage Include="$(TargetPath)" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\src\shared\ku\posix.c" />
<ClCompile Include="..\..\src\shared\ku\uuid5.c" />
<ClCompile Include="..\..\src\sys\cleanup.c" />
<ClCompile Include="..\..\src\sys\close.c" />
<ClCompile Include="..\..\src\sys\create.c" />
@ -161,13 +173,21 @@
<ClCompile Include="..\..\src\sys\fileinfo.c" />
<ClCompile Include="..\..\src\sys\flush.c" />
<ClCompile Include="..\..\src\sys\fsctl.c" />
<ClCompile Include="..\..\src\sys\fsext.c" />
<ClCompile Include="..\..\src\sys\iop.c" />
<ClCompile Include="..\..\src\sys\ioq.c" />
<ClCompile Include="..\..\src\sys\lockctl.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\security.c" />
<ClCompile Include="..\..\src\sys\shutdown.c" />
<ClCompile Include="..\..\src\sys\silo.c" />
<ClCompile Include="..\..\src\sys\statistics.c" />
<ClCompile Include="..\..\src\sys\trace.c" />
<ClCompile Include="..\..\src\sys\util.c" />
<ClCompile Include="..\..\src\sys\volinfo.c" />
<ClCompile Include="..\..\src\sys\volume.c" />
@ -176,16 +196,84 @@
</ItemGroup>
<ItemGroup>
<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" />
</ItemGroup>
<ItemGroup>
<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)'=='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)'=='Debug|x64'">_WIN64;_AMD64_=1;AMD64;%(PreprocessorDefinitions);MyProductName=$(MyProductName);MyDescription=$(MyDescription);MyCompanyName=$(MyCompanyName);MyCopyright=$(MyCopyright);MyVersion=$(MyVersion);MyVersionWithCommas=$(MyVersionWithCommas)</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|Win32'">_X86_=1;i386=1;STD_CALL;%(PreprocessorDefinitions)</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)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">_WIN64;_AMD64_=1;AMD64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ResourceCompile>
</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-$(PlatformTarget).cat
setlocal EnableDelayedExpansion
if exist $(OutDir)driver-$(PlatformTarget).inf del $(OutDir)driver-$(PlatformTarget).inf
for /f "delims=" %%l in (%(FullPath)) do (
set line=%%l
echo !line! &gt;&gt;$(OutDir)driver-$(PlatformTarget).inf
)
stampinf -d * -v $(MyVersion) -f $(OutDir)driver-$(PlatformTarget).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-$(PlatformTarget).cat
setlocal EnableDelayedExpansion
if exist $(OutDir)driver-$(PlatformTarget).inf del $(OutDir)driver-$(PlatformTarget).inf
for /f "delims=" %%l in (%(FullPath)) do (
set line=%%l
echo !line! &gt;&gt;$(OutDir)driver-$(PlatformTarget).inf
)
stampinf -d * -v $(MyVersion) -f $(OutDir)driver-$(PlatformTarget).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-$(PlatformTarget).cat
setlocal EnableDelayedExpansion
if exist $(OutDir)driver-$(PlatformTarget).inf del $(OutDir)driver-$(PlatformTarget).inf
for /f "delims=" %%l in (%(FullPath)) do (
set line=%%l
echo !line! &gt;&gt;$(OutDir)driver-$(PlatformTarget).inf
)
stampinf -d * -v $(MyVersion) -f $(OutDir)driver-$(PlatformTarget).inf</Command>
<LinkObjects Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkObjects>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">set DriverFile=$(TargetFileName)
set Provider="$(MyCompanyName)"
set CatalogFile=driver-$(PlatformTarget).cat
setlocal EnableDelayedExpansion
if exist $(OutDir)driver-$(PlatformTarget).inf del $(OutDir)driver-$(PlatformTarget).inf
for /f "delims=" %%l in (%(FullPath)) do (
set line=%%l
echo !line! &gt;&gt;$(OutDir)driver-$(PlatformTarget).inf
)
stampinf -d * -v $(MyVersion) -f $(OutDir)driver-$(PlatformTarget).inf</Command>
<LinkObjects Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkObjects>
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Writing driver-$(PlatformTarget).inf</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)driver-$(PlatformTarget).inf</Outputs>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Writing driver-$(PlatformTarget).inf</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)driver-$(PlatformTarget).inf</Outputs>
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Writing driver-$(PlatformTarget).inf</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)driver-$(PlatformTarget).inf</Outputs>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Writing driver-$(PlatformTarget).inf</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)driver-$(PlatformTarget).inf</Outputs>
</CustomBuild>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>

View File

@ -12,6 +12,12 @@
<Filter Include="Include\winfsp">
<UniqueIdentifier>{904f0df1-2fb8-4f84-aa46-fa929488c39a}</UniqueIdentifier>
</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>
<ClCompile Include="..\..\src\sys\driver.c">
@ -92,6 +98,36 @@
<ClCompile Include="..\..\src\sys\callbacks.c">
<Filter>Source</Filter>
</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>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\src\sys\driver.h">
@ -100,10 +136,24 @@
<ClInclude Include="..\..\inc\winfsp\fsctl.h">
<Filter>Include\winfsp</Filter>
</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>
<ResourceCompile Include="..\..\src\sys\version.rc">
<Filter>Source</Filter>
</ResourceCompile>
</ItemGroup>
<ItemGroup>
<CustomBuild Include="..\..\src\sys\driver.inf.in">
<Filter>Source</Filter>
</CustomBuild>
</ItemGroup>
</Project>

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

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

View File

@ -0,0 +1,15 @@
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/billziss-gh/winfsp
WinFsp MSI releases : https://github.com/billziss-gh/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/billziss-gh/winfsp/tree/master/build/choco</packageSourceUrl>
<owners>Bill Zissimopoulos</owners>
<title>WinFsp</title>
<authors>Bill Zissimopoulos</authors>
<projectUrl>https://github.com/billziss-gh/winfsp</projectUrl>
<iconUrl>https://github.com/billziss-gh/winfsp/raw/master/art/winfsp-solid.png</iconUrl>
<copyright>Bill Zissimopoulos</copyright>
<licenseUrl>https://github.com/billziss-gh/winfsp/blob/master/License.txt</licenseUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<projectSourceUrl>https://github.com/billziss-gh/winfsp</projectSourceUrl>
<docsUrl>https://github.com/billziss-gh/winfsp/tree/master/doc</docsUrl>
<mailingListUrl>https://groups.google.com/forum/#!forum/winfsp</mailingListUrl>
<bugTrackerUrl>https://github.com/billziss-gh/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/billziss-gh/winfsp/blob/master/Changelog.asciidoc</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

@ -1,16 +0,0 @@
= Changelog
v0.13::
This release includes a Cygwin package, an API change and some other minor changes:
- New Cygwin package includes `cygfuse-2.8.dll` and `libfuse-2.8.dll.a` for easy use in the Cygwin environment. This is currently offered as a separate download.
- Minor but breaking API change: `SetFileSize`/`SetAllocationSize` have been consolidated. Please refer to the documentation for a description of the changes.
- File system drive symbolic links (`DefineDosDeviceW`) now automatically cleaned up even if user mode file system crashes or is terminated forcefully.
- WinFsp-FUSE now maps unmapped UID's to the Anonymous SID (S-1-5-7). See: https://cygwin.com/ml/cygwin/2016-06/msg00359.html
v0.12::
Prior changes are not recorded in this Changelog.

View File

@ -0,0 +1,73 @@
= 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. You need to install the following security advisory that will rectify the problem:
https://technet.microsoft.com/en-us/library/security/3033929.aspx
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 http://blogs.interfacett.com/changing-the-network-provider-order-in-windows-10[article].
Case-sensitive file systems do not work properly when mounted as a directory.::
This is fixed as of WinFsp 2018.2 B3.
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?::
Public debugging symbols are already included in the installer. You need to install the "Developer" feature; the symbols can be found in the `sym` directory under the WinFsp installation directory.
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.
WinFsp-FUSE does not have the ability to support multiple file systems from within the same process. Why?::
This is supported as of WinFsp 2018.2 B2.
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,32 @@
= 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/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/billziss-gh/hubfs[hubfs] - File system for GitHub
- https://github.com/FrKaram/KS2.Drive[KS2.Drive] - Mount a webDAV/AOS server as a local drive
- https://github.com/billziss-gh/nfs-win[nfs-win] - NFS for Windows
- https://github.com/billziss-gh/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/netheril96/securefs[securefs] - Filesystem in userspace (FUSE) with transparent authenticated encryption
- https://github.com/billziss-gh/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/billziss-gh/cgofuse[Go: cgofuse] - Cross-platform FUSE library for Go
- https://github.com/DuroSoft/fuse-bindings[Nodejs: fuse-bindings] - Fully maintained FUSE bindings for Node that aims to cover the entire FUSE api
- https://github.com/SerCeMan/jnr-fuse[Java: jnr-fuse] - FUSE implementation in Java 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

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,46 @@
= 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.
== 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.
- Extended attributes. Although popular with POSIX file systems, they are severely hampered and rarely used on Windows. They are also not exposed via the Win32 API.
- 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 http://www.secfs.net/winfsp/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.

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

@ -0,0 +1,105 @@
= 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/billziss-gh/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/billziss-gh/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

@ -1,6 +1,6 @@
= SSHFS Port Case Study
This document is a case study in porting SSHFS to Windows and WinFsp. At the time of this writing WinFsp has a native API, but no FUSE compatible API. The main purpose of this case study is to develop a FUSE compatible API for WinFsp.
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
@ -215,3 +215,52 @@ 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.

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

@ -0,0 +1,421 @@
# 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;
PVOID Reserved0[5];
ULONG JobControl;
ULONG Credentials;
ULONG AuthPackageId;
ULONG Reserved1[5];
UINT8 Buffer[];
} FSP_LAUNCH_REG_RECORD;
```
</blockquote>
</details>
<br/>
<p align="center">
<sub>
Copyright © 2015-2020 Bill Zissimopoulos
<br/>
Generated with <a href="https://github.com/billziss-gh/prettydoc">prettydoc</a>
</sub>
</p>

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

File diff suppressed because it is too large Load Diff

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,192 @@
= Performance Testing
:caption:
This document discusses performance testing for WinFsp. The goal of this performance testing is to discover optimization opportunities for WinFsp and compare its performance to that of NTFS and Dokany.
== Executive Summary
This performance testing shows that WinFsp has excellent performance in all tested scenarios. It outperforms NTFS in most scenarios (an unfair comparison as NTFS is a disk file system and WinFsp is tested with an in-memory file system). It also outperforms Dokany in all scenarios, often by an order of magnitude.
ifdef::env-browser[chart::bar[data-uri="WinFsp-Performance-Testing/file_tests.csv",file="WinFsp-Performance-Testing/file_tests.png",opt="y-label=time"]]
ifndef::env-browser[image::WinFsp-Performance-Testing/file_tests.png[]]
ifdef::env-browser[chart::bar[data-uri="WinFsp-Performance-Testing/rdwr_tests.csv",file="WinFsp-Performance-Testing/rdwr_tests.png",opt="y-label=time"]]
ifndef::env-browser[image::WinFsp-Performance-Testing/rdwr_tests.png[]]
== Fsbench
All testing was performed using a new performance test suite developed as part of WinFsp, called https://github.com/billziss-gh/winfsp/blob/master/tst/fsbench/fsbench.c[fsbench]. Fsbench was developed because it allows the creation of tests that are important to file system developers; for example, it can answer questions of the type: "how long does it take to delete 1000 files" or "how long does it take to list a directory with 10000 files in it".
Fsbench is based on the https://github.com/billziss-gh/winfsp/tree/master/ext/tlib[tlib] library, originally from the *secfs* project. Tlib is usually used to develop regression test suites in C/C++, but can be also used to create performance tests.
Fsbench currently includes the following tests:
[width="100%",cols="20%,60%,20%",options="header"]
|===
|Test |Measures performance of |Parameters
|file_create_test |CreateFileW(CREATE_NEW) / CloseHandle |file count
|file_open_test |CreateFileW(OPEN_EXISTING) / CloseHandle |file count
|file_overwrite_test|CreateFileW(CREATE_ALWAYS) / CloseHandle with existing files|file count
|file_list_test |FindFirstFileW / FindNextFile / FindClose |iterations
|file_delete_test |DeleteFileW |file count
|file_mkdir_test |CreateDirectoryW |file count
|file_rmdir_test |RemoveDirectoryW |file count
|rdwr_cc_write_page_test |WriteFile (1 page; cached) |iterations
|rdwr_cc_read_page_test |ReadFile (1 page; cached) |iterations
|rdwr_nc_write_page_test |WriteFile (1 page; non-cached) |iterations
|rdwr_nc_read_page_test |ReadFile (1 page; non-cached) |iterations
|rdwr_cc_write_large_test |WriteFile (16 pages; cached) |iterations
|rdwr_cc_read_large_test |ReadFile (16 pages; cached) |iterations
|rdwr_nc_write_large_test |WriteFile (16 pages; non-cached) |iterations
|rdwr_nc_read_large_test |ReadFile (16 pages; non-cached) |iterations
|mmap_write_test |Memory mapped write test |iterations
|mmap_write_test |Memory mapped read test |iterations
|===
== Tested File Systems
=== NTFS
The comparison to NTFS is very important to establish a baseline. It is also very misleading because NTFS is a disk file system and MEMFS (either the WinFsp or Dokany variants) is an in memory file system. The tests will show that MEMFS is faster than NTFS. This should not be taken to mean that we are trying to make the (obvious) claim that an in memory file system is faster than a disk file system, but to show that the approach of writing a file system in user mode is a valid proposition and can be efficient.
=== WinFsp/MEMFS
MEMFS is the file system used to test WinFsp and shipped as a sample bundled with the WinFsp installer. MEMFS is a simple in memory file system and as such is very fast under most conditions. This is desirable because our goal with this performance testing is to measure the speed of the WinFsp system components rather the performance of a complex user mode file system. MEMFS has minimal overhead and is ideal for this purpose.
WinFsp/MEMFS can be run in different configurations, which enable or disable WinFsp caching features. The tested configurations were:
- An infinite FileInfoTimeout, which enables caching of metadata and data.
- A FileInfoTimeout of 1s (second), which enables caching of metadata but disables caching of data.
- A FileInfoTimeout of 0, which completely disables caching.
The WinFsp git commit at the time of testing was d804f5674d76f11ea86d14f4bcb1157e6e40e719.
=== Dokany/MEMFS
To achieve fairness when comparing Dokany to WinFsp the MEMFS file system has been ported to Dokany. Substantial care was taken to ensure that WinFsp/MEMFS and Dokany/MEMFS perform equally well, so that the performance of the Dokany FSD and user-mode components can be measured and compared accurately.
The Dokany/MEMFS project has its own https://github.com/billziss-gh/memfs-dokany[repository]. The project comes without a license, which means that it may not be used for any purpose other than as a reference.
The Dokany version used for testing was 1.0.1. The Dokany/MEMFS git commit was 27a678d7c0d5ee2fb3fb2ecc8e38210857ae941c.
== Test Environment
Tests were performed on an idle computer/VM. There was a reboot of both the computer and VM before each file system was tested. Each test was run twice and the smaller time value chosen. The assumption is that even in a seemingly idle desktop system there is some activity which will affect the results; the smaller value is the preferred one to use because it reflects the time when there is less or no other activity.
The test environment was as follows:
----
MacBook Pro (Retina, 13-inch, Early 2015)
3.1 GHz Intel Core i7
16 GB 1867 MHz DDR3
500 GB SSD
VirtualBox Version 5.0.20 r106931
1 CPU
4 GB RAM
80 GB Dynamically allocated differencing storage
Windows 10 (64-bit) Version 1511 (OS Build 10586.420)
----
== Test Results
In the graphs below we use consistent coloring to quickly identify a file system. Red is used for NTFS, yellow for WinFsp/MEMFS with a FileInfoTimeout of 0, green for WinFsp/MEMFS with a FileInfoTimeout of 1, light blue for WinFsp/MEMFS with an infinite FileInfoTimeout and deep blue for Dokany/MEMFS.
In all tests lower times are better (the file system is faster).
=== File Tests
These tests measure the performance of creating, opening, overwriting and listing files and directories.
==== file_create_test
This test measures the performance of CreateFileW(CREATE_NEW) / CloseHandle. WinFsp has the best performance here. Dokany follows and NTFS is last as it has to actually update its data structures on disk.
ifdef::env-browser[chart::line[data-uri="WinFsp-Performance-Testing/file_create_test.csv",file="WinFsp-Performance-Testing/file_create_test.png",opt="x-label=file count,y-label=time"]]
ifndef::env-browser[image::WinFsp-Performance-Testing/file_create_test.png[]]
==== file_open_test
This test measures the performance of CreateFileW(OPEN_EXISTING) / CloseHandle. WinFsp again has the best (although uneven) performance, followed by NTFS and then Dokany.
WinFsp appears to have very uneven performance here. In particular notice that opening 1000 files is slower than opening 2000 files, which makes no sense! I suspect that the test observes an initial acquisition of resouces when the test first starts, which is not necessary when the test runs for 2000 files at a later time. This uneven performance should probably be investigated in the future.
ifdef::env-browser[chart::line[data-uri="WinFsp-Performance-Testing/file_open_test.csv",file="WinFsp-Performance-Testing/file_open_test.png",opt="x-label=file count,y-label=time"]]
ifndef::env-browser[image::WinFsp-Performance-Testing/file_open_test.png[]]
==== file_overwrite_test
This test measures the performance of CreateFileW(CREATE_ALWAYS) / CloseHandle. WinFsp is fastest, followed by NTFS and then Dokany.
ifdef::env-browser[chart::line[data-uri="WinFsp-Performance-Testing/file_overwrite_test.csv",file="WinFsp-Performance-Testing/file_overwrite_test.png",opt="x-label=file count,y-label=time"]]
ifndef::env-browser[image::WinFsp-Performance-Testing/file_overwrite_test.png[]]
==== file_list_test
This test measures the performance of FindFirstFileW / FindNextFile / FindClose. NTFS wins this scenario, likely because it can satisfy the list operation from cache. WinFsp has overall good performance. Dokany appears to show slightly quadratic performance in this scenario.
ifdef::env-browser[chart::line[data-uri="WinFsp-Performance-Testing/file_list_test.csv",file="WinFsp-Performance-Testing/file_list_test.png",opt="x-label=file count,y-label=time"]]
ifndef::env-browser[image::WinFsp-Performance-Testing/file_list_test.png[]]
==== file_delete_test
This test measures the performance of DeleteFileW. WinFsp has the best performance, followed by Dokany and NTFS with very similar performance.
ifdef::env-browser[chart::line[data-uri="WinFsp-Performance-Testing/file_delete_test.csv",file="WinFsp-Performance-Testing/file_delete_test.png",opt="x-label=file count,y-label=time"]]
ifndef::env-browser[image::WinFsp-Performance-Testing/file_delete_test.png[]]
=== Read/Write Tests
These tests measure the performance of cached, non-cached and memory-mapped I/O.
==== rdwr_cc_write_page_test
This test measures the performance of cached WriteFile with 1 page writes. NTFS and WinFsp with an infinite FileInfoTimeout have the best performance, with a clear edge to NTFS (likely because of its use of FastIO, which WinFsp does not currently support). WinFsp with a FileInfoTimeout of 0 or 1 performance is next, because WinFsp does not use the NTOS Cache Manager in this scenario. Dokany performance is last.
ifdef::env-browser[chart::line[data-uri="WinFsp-Performance-Testing/rdwr_cc_write_page_test.csv",file="WinFsp-Performance-Testing/rdwr_cc_write_page_test.png",opt="x-label=iterations,y-label=time"]]
ifndef::env-browser[image::WinFsp-Performance-Testing/rdwr_cc_write_page_test.png[]]
==== rdwr_cc_read_page_test
This test measures the performance of cached ReadFile with 1 page reads. The results here are very similar to the rdwr_cc_write_page_test case and similar comments apply.
ifdef::env-browser[chart::line[data-uri="WinFsp-Performance-Testing/rdwr_cc_read_page_test.csv",file="WinFsp-Performance-Testing/rdwr_cc_read_page_test.png",opt="x-label=iterations,y-label=time"]]
ifndef::env-browser[image::WinFsp-Performance-Testing/rdwr_cc_read_page_test.png[]]
==== rdwr_nc_write_page_test
This test measures the performance of non-cached WriteFile with 1 page writes. WinFsp has the best performance, followed by Dokany. NTFS shows bad performance, which of course make sense as we are asking it to write all data to the disk.
ifdef::env-browser[chart::line[data-uri="WinFsp-Performance-Testing/rdwr_nc_write_page_test.csv",file="WinFsp-Performance-Testing/rdwr_nc_write_page_test.png",opt="x-label=iterations,y-label=time"]]
ifndef::env-browser[image::WinFsp-Performance-Testing/rdwr_nc_write_page_test.png[]]
==== rdwr_nc_read_page_test
This test measures the performance of non-cached ReadFile with 1 page reads. The results here are very similar to the rdwr_nc_write_page_test case and similar comments apply.
ifdef::env-browser[chart::line[data-uri="WinFsp-Performance-Testing/rdwr_nc_read_page_test.csv",file="WinFsp-Performance-Testing/rdwr_nc_read_page_test.png",opt="x-label=iterations,y-label=time"]]
ifndef::env-browser[image::WinFsp-Performance-Testing/rdwr_nc_read_page_test.png[]]
==== mmap_write_test
This test measures the performance of memory mapped writes. NTFS and WinFsp seem to have identical performance here, which actually makes sense because memory mapped I/O is effectively always cached and most of the actual I/O is done asynchronously by the system.
There are no results for Dokany as it seems to (still) not support memory mapped files:
----
Y:\>c:\Users\billziss\Projects\winfsp\build\VStudio\build\Release\fsbench-x64.exe --mmap=100 mmap*
mmap_write_test........................ KO
ASSERT(0 != Mapping) failed at fsbench.c:226:mmap_dotest
----
ifdef::env-browser[chart::line[data-uri="WinFsp-Performance-Testing/mmap_write_test.csv",file="WinFsp-Performance-Testing/mmap_write_test.png",opt="x-label=iterations,y-label=time"]]
ifndef::env-browser[image::WinFsp-Performance-Testing/mmap_write_test.png[]]
==== mmap_read_test
This test measures the performance of memory mapped reads. Again NTFS and WinFsp seem to have identical performance here.
There are no results for Dokany as it faces the same issue as with mmap_write_test.
ifdef::env-browser[chart::line[data-uri="WinFsp-Performance-Testing/mmap_read_test.csv",file="WinFsp-Performance-Testing/mmap_read_test.png",opt="x-label=iterations,y-label=time"]]
ifndef::env-browser[image::WinFsp-Performance-Testing/mmap_read_test.png[]]

View File

@ -0,0 +1,75 @@
file_create_test,1000,0.28
file_open_test,1000,0.14
file_overwrite_test,1000,0.33
file_list_test,1000,0.16
file_delete_test,1000,0.17
file_mkdir_test,1000,0.08
file_rmdir_test,1000,0.14
file_create_test,2000,0.67
file_open_test,2000,0.27
file_overwrite_test,2000,0.69
file_list_test,2000,0.36
file_delete_test,2000,0.36
file_mkdir_test,2000,0.33
file_rmdir_test,2000,0.23
file_create_test,3000,0.91
file_open_test,3000,0.42
file_overwrite_test,3000,1.03
file_list_test,3000,0.64
file_delete_test,3000,0.56
file_mkdir_test,3000,0.52
file_rmdir_test,3000,0.34
file_create_test,4000,1.25
file_open_test,4000,0.55
file_overwrite_test,4000,1.34
file_list_test,4000,0.97
file_delete_test,4000,0.72
file_mkdir_test,4000,0.66
file_rmdir_test,4000,0.47
file_create_test,5000,1.87
file_open_test,5000,0.67
file_overwrite_test,5000,1.64
file_list_test,5000,1.38
file_delete_test,5000,0.91
file_mkdir_test,5000,0.83
file_rmdir_test,5000,0.59
rdwr_cc_write_page_test,100,2.19
rdwr_cc_read_page_test,100,2.31
rdwr_cc_write_large_test,100,0.33
rdwr_cc_read_large_test,100,0.28
rdwr_cc_write_page_test,200,4.33
rdwr_cc_read_page_test,200,4.58
rdwr_cc_write_large_test,200,0.59
rdwr_cc_read_large_test,200,0.59
rdwr_cc_write_page_test,300,6.37
rdwr_cc_read_page_test,300,7.00
rdwr_cc_write_large_test,300,0.91
rdwr_cc_read_large_test,300,0.89
rdwr_cc_write_page_test,400,8.59
rdwr_cc_read_page_test,400,9.34
rdwr_cc_write_large_test,400,1.22
rdwr_cc_read_large_test,400,1.17
rdwr_cc_write_page_test,500,10.70
rdwr_cc_read_page_test,500,11.47
rdwr_cc_write_large_test,500,1.47
rdwr_cc_read_large_test,500,1.45
rdwr_nc_write_page_test,100,2.20
rdwr_nc_read_page_test,100,2.22
rdwr_nc_write_large_test,100,0.36
rdwr_nc_read_large_test,100,0.30
rdwr_nc_write_page_test,200,4.72
rdwr_nc_read_page_test,200,4.48
rdwr_nc_write_large_test,200,0.63
rdwr_nc_read_large_test,200,0.58
rdwr_nc_write_page_test,300,6.53
rdwr_nc_read_page_test,300,6.56
rdwr_nc_write_large_test,300,0.91
rdwr_nc_read_large_test,300,0.84
rdwr_nc_write_page_test,400,9.05
rdwr_nc_read_page_test,400,8.67
rdwr_nc_write_large_test,400,1.22
rdwr_nc_read_large_test,400,1.13
rdwr_nc_write_page_test,500,11.45
rdwr_nc_read_page_test,500,10.86
rdwr_nc_write_large_test,500,1.50
rdwr_nc_read_large_test,500,1.44
1 file_create_test 1000 0.28
2 file_open_test 1000 0.14
3 file_overwrite_test 1000 0.33
4 file_list_test 1000 0.16
5 file_delete_test 1000 0.17
6 file_mkdir_test 1000 0.08
7 file_rmdir_test 1000 0.14
8 file_create_test 2000 0.67
9 file_open_test 2000 0.27
10 file_overwrite_test 2000 0.69
11 file_list_test 2000 0.36
12 file_delete_test 2000 0.36
13 file_mkdir_test 2000 0.33
14 file_rmdir_test 2000 0.23
15 file_create_test 3000 0.91
16 file_open_test 3000 0.42
17 file_overwrite_test 3000 1.03
18 file_list_test 3000 0.64
19 file_delete_test 3000 0.56
20 file_mkdir_test 3000 0.52
21 file_rmdir_test 3000 0.34
22 file_create_test 4000 1.25
23 file_open_test 4000 0.55
24 file_overwrite_test 4000 1.34
25 file_list_test 4000 0.97
26 file_delete_test 4000 0.72
27 file_mkdir_test 4000 0.66
28 file_rmdir_test 4000 0.47
29 file_create_test 5000 1.87
30 file_open_test 5000 0.67
31 file_overwrite_test 5000 1.64
32 file_list_test 5000 1.38
33 file_delete_test 5000 0.91
34 file_mkdir_test 5000 0.83
35 file_rmdir_test 5000 0.59
36 rdwr_cc_write_page_test 100 2.19
37 rdwr_cc_read_page_test 100 2.31
38 rdwr_cc_write_large_test 100 0.33
39 rdwr_cc_read_large_test 100 0.28
40 rdwr_cc_write_page_test 200 4.33
41 rdwr_cc_read_page_test 200 4.58
42 rdwr_cc_write_large_test 200 0.59
43 rdwr_cc_read_large_test 200 0.59
44 rdwr_cc_write_page_test 300 6.37
45 rdwr_cc_read_page_test 300 7.00
46 rdwr_cc_write_large_test 300 0.91
47 rdwr_cc_read_large_test 300 0.89
48 rdwr_cc_write_page_test 400 8.59
49 rdwr_cc_read_page_test 400 9.34
50 rdwr_cc_write_large_test 400 1.22
51 rdwr_cc_read_large_test 400 1.17
52 rdwr_cc_write_page_test 500 10.70
53 rdwr_cc_read_page_test 500 11.47
54 rdwr_cc_write_large_test 500 1.47
55 rdwr_cc_read_large_test 500 1.45
56 rdwr_nc_write_page_test 100 2.20
57 rdwr_nc_read_page_test 100 2.22
58 rdwr_nc_write_large_test 100 0.36
59 rdwr_nc_read_large_test 100 0.30
60 rdwr_nc_write_page_test 200 4.72
61 rdwr_nc_read_page_test 200 4.48
62 rdwr_nc_write_large_test 200 0.63
63 rdwr_nc_read_large_test 200 0.58
64 rdwr_nc_write_page_test 300 6.53
65 rdwr_nc_read_page_test 300 6.56
66 rdwr_nc_write_large_test 300 0.91
67 rdwr_nc_read_large_test 300 0.84
68 rdwr_nc_write_page_test 400 9.05
69 rdwr_nc_read_page_test 400 8.67
70 rdwr_nc_write_large_test 400 1.22
71 rdwr_nc_read_large_test 400 1.13
72 rdwr_nc_write_page_test 500 11.45
73 rdwr_nc_read_page_test 500 10.86
74 rdwr_nc_write_large_test 500 1.50
75 rdwr_nc_read_large_test 500 1.44

View File

@ -0,0 +1,75 @@
file_create_test,1000,0.28
file_open_test,1000,0.15
file_overwrite_test,1000,0.33
file_list_test,1000,0.16
file_delete_test,1000,0.19
file_mkdir_test,1000,0.08
file_rmdir_test,1000,0.13
file_create_test,2000,0.69
file_open_test,2000,0.27
file_overwrite_test,2000,0.67
file_list_test,2000,0.37
file_delete_test,2000,0.36
file_mkdir_test,2000,0.33
file_rmdir_test,2000,0.25
file_create_test,3000,0.92
file_open_test,3000,0.41
file_overwrite_test,3000,1.08
file_list_test,3000,0.66
file_delete_test,3000,0.56
file_mkdir_test,3000,0.48
file_rmdir_test,3000,0.38
file_create_test,4000,1.31
file_open_test,4000,0.61
file_overwrite_test,4000,1.38
file_list_test,4000,1.00
file_delete_test,4000,0.73
file_mkdir_test,4000,0.66
file_rmdir_test,4000,0.53
file_create_test,5000,1.64
file_open_test,5000,0.67
file_overwrite_test,5000,1.67
file_list_test,5000,1.38
file_delete_test,5000,0.91
file_mkdir_test,5000,0.98
file_rmdir_test,5000,0.66
rdwr_cc_write_page_test,100,2.08
rdwr_cc_read_page_test,100,2.23
rdwr_cc_write_large_test,100,0.33
rdwr_cc_read_large_test,100,0.28
rdwr_cc_write_page_test,200,4.23
rdwr_cc_read_page_test,200,4.63
rdwr_cc_write_large_test,200,0.61
rdwr_cc_read_large_test,200,0.58
rdwr_cc_write_page_test,300,6.33
rdwr_cc_read_page_test,300,6.78
rdwr_cc_write_large_test,300,0.92
rdwr_cc_read_large_test,300,0.86
rdwr_cc_write_page_test,400,8.48
rdwr_cc_read_page_test,400,9.02
rdwr_cc_write_large_test,400,1.20
rdwr_cc_read_large_test,400,1.16
rdwr_cc_write_page_test,500,10.33
rdwr_cc_read_page_test,500,11.20
rdwr_cc_write_large_test,500,1.53
rdwr_cc_read_large_test,500,1.47
rdwr_nc_write_page_test,100,2.23
rdwr_nc_read_page_test,100,2.22
rdwr_nc_write_large_test,100,0.31
rdwr_nc_read_large_test,100,0.30
rdwr_nc_write_page_test,200,4.66
rdwr_nc_read_page_test,200,4.34
rdwr_nc_write_large_test,200,0.61
rdwr_nc_read_large_test,200,0.63
rdwr_nc_write_page_test,300,6.44
rdwr_nc_read_page_test,300,6.34
rdwr_nc_write_large_test,300,0.92
rdwr_nc_read_large_test,300,0.84
rdwr_nc_write_page_test,400,8.56
rdwr_nc_read_page_test,400,8.78
rdwr_nc_write_large_test,400,1.26
rdwr_nc_read_large_test,400,1.11
rdwr_nc_write_page_test,500,10.73
rdwr_nc_read_page_test,500,10.59
rdwr_nc_write_large_test,500,1.53
rdwr_nc_read_large_test,500,1.41
1 file_create_test 1000 0.28
2 file_open_test 1000 0.15
3 file_overwrite_test 1000 0.33
4 file_list_test 1000 0.16
5 file_delete_test 1000 0.19
6 file_mkdir_test 1000 0.08
7 file_rmdir_test 1000 0.13
8 file_create_test 2000 0.69
9 file_open_test 2000 0.27
10 file_overwrite_test 2000 0.67
11 file_list_test 2000 0.37
12 file_delete_test 2000 0.36
13 file_mkdir_test 2000 0.33
14 file_rmdir_test 2000 0.25
15 file_create_test 3000 0.92
16 file_open_test 3000 0.41
17 file_overwrite_test 3000 1.08
18 file_list_test 3000 0.66
19 file_delete_test 3000 0.56
20 file_mkdir_test 3000 0.48
21 file_rmdir_test 3000 0.38
22 file_create_test 4000 1.31
23 file_open_test 4000 0.61
24 file_overwrite_test 4000 1.38
25 file_list_test 4000 1.00
26 file_delete_test 4000 0.73
27 file_mkdir_test 4000 0.66
28 file_rmdir_test 4000 0.53
29 file_create_test 5000 1.64
30 file_open_test 5000 0.67
31 file_overwrite_test 5000 1.67
32 file_list_test 5000 1.38
33 file_delete_test 5000 0.91
34 file_mkdir_test 5000 0.98
35 file_rmdir_test 5000 0.66
36 rdwr_cc_write_page_test 100 2.08
37 rdwr_cc_read_page_test 100 2.23
38 rdwr_cc_write_large_test 100 0.33
39 rdwr_cc_read_large_test 100 0.28
40 rdwr_cc_write_page_test 200 4.23
41 rdwr_cc_read_page_test 200 4.63
42 rdwr_cc_write_large_test 200 0.61
43 rdwr_cc_read_large_test 200 0.58
44 rdwr_cc_write_page_test 300 6.33
45 rdwr_cc_read_page_test 300 6.78
46 rdwr_cc_write_large_test 300 0.92
47 rdwr_cc_read_large_test 300 0.86
48 rdwr_cc_write_page_test 400 8.48
49 rdwr_cc_read_page_test 400 9.02
50 rdwr_cc_write_large_test 400 1.20
51 rdwr_cc_read_large_test 400 1.16
52 rdwr_cc_write_page_test 500 10.33
53 rdwr_cc_read_page_test 500 11.20
54 rdwr_cc_write_large_test 500 1.53
55 rdwr_cc_read_large_test 500 1.47
56 rdwr_nc_write_page_test 100 2.23
57 rdwr_nc_read_page_test 100 2.22
58 rdwr_nc_write_large_test 100 0.31
59 rdwr_nc_read_large_test 100 0.30
60 rdwr_nc_write_page_test 200 4.66
61 rdwr_nc_read_page_test 200 4.34
62 rdwr_nc_write_large_test 200 0.61
63 rdwr_nc_read_large_test 200 0.63
64 rdwr_nc_write_page_test 300 6.44
65 rdwr_nc_read_page_test 300 6.34
66 rdwr_nc_write_large_test 300 0.92
67 rdwr_nc_read_large_test 300 0.84
68 rdwr_nc_write_page_test 400 8.56
69 rdwr_nc_read_page_test 400 8.78
70 rdwr_nc_write_large_test 400 1.26
71 rdwr_nc_read_large_test 400 1.11
72 rdwr_nc_write_page_test 500 10.73
73 rdwr_nc_read_page_test 500 10.59
74 rdwr_nc_write_large_test 500 1.53
75 rdwr_nc_read_large_test 500 1.41

View File

@ -0,0 +1,85 @@
file_create_test,1000,0.92
file_open_test,1000,0.08
file_overwrite_test,1000,0.19
file_list_test,1000,0.08
file_delete_test,1000,0.19
file_mkdir_test,1000,0.16
file_rmdir_test,1000,0.11
file_create_test,2000,1.45
file_open_test,2000,0.17
file_overwrite_test,2000,0.38
file_list_test,2000,0.16
file_delete_test,2000,0.39
file_mkdir_test,2000,0.25
file_rmdir_test,2000,0.28
file_create_test,3000,1.11
file_open_test,3000,0.23
file_overwrite_test,3000,0.72
file_list_test,3000,0.23
file_delete_test,3000,0.56
file_mkdir_test,3000,0.56
file_rmdir_test,3000,0.36
file_create_test,4000,1.45
file_open_test,4000,0.36
file_overwrite_test,4000,0.97
file_list_test,4000,0.33
file_delete_test,4000,0.77
file_mkdir_test,4000,0.48
file_rmdir_test,4000,0.47
file_create_test,5000,2.47
file_open_test,5000,0.45
file_overwrite_test,5000,1.23
file_list_test,5000,0.41
file_delete_test,5000,1.03
file_mkdir_test,5000,0.70
file_rmdir_test,5000,0.70
rdwr_cc_write_page_test,100,0.25
rdwr_cc_read_page_test,100,0.19
rdwr_cc_write_large_test,100,0.09
rdwr_cc_read_large_test,100,0.08
rdwr_cc_write_page_test,200,0.47
rdwr_cc_read_page_test,200,0.52
rdwr_cc_write_large_test,200,0.22
rdwr_cc_read_large_test,200,0.16
rdwr_cc_write_page_test,300,0.72
rdwr_cc_read_page_test,300,0.62
rdwr_cc_write_large_test,300,0.30
rdwr_cc_read_large_test,300,0.23
rdwr_cc_write_page_test,400,0.92
rdwr_cc_read_page_test,400,0.88
rdwr_cc_write_large_test,400,0.41
rdwr_cc_read_large_test,400,0.31
rdwr_cc_write_page_test,500,1.20
rdwr_cc_read_page_test,500,0.97
rdwr_cc_write_large_test,500,0.50
rdwr_cc_read_large_test,500,0.39
rdwr_nc_write_page_test,100,7.56
rdwr_nc_read_page_test,100,10.14
rdwr_nc_write_large_test,100,0.88
rdwr_nc_read_large_test,100,0.56
rdwr_nc_write_page_test,200,14.36
rdwr_nc_read_page_test,200,21.39
rdwr_nc_write_large_test,200,1.72
rdwr_nc_read_large_test,200,1.34
rdwr_nc_write_page_test,300,21.86
rdwr_nc_read_page_test,300,19.56
rdwr_nc_write_large_test,300,2.53
rdwr_nc_read_large_test,300,1.64
rdwr_nc_write_page_test,400,28.52
rdwr_nc_read_page_test,400,26.11
rdwr_nc_write_large_test,400,3.42
rdwr_nc_read_large_test,400,2.22
rdwr_nc_write_page_test,500,35.45
rdwr_nc_read_page_test,500,33.05
rdwr_nc_write_large_test,500,4.33
rdwr_nc_read_large_test,500,2.77
mmap_write_test,100,0.16
mmap_read_test,100,0.20
mmap_write_test,200,0.30
mmap_read_test,200,0.39
mmap_write_test,300,0.44
mmap_read_test,300,0.59
mmap_write_test,400,0.58
mmap_read_test,400,0.78
mmap_write_test,500,0.72
mmap_read_test,500,1.06
1 file_create_test 1000 0.92
2 file_open_test 1000 0.08
3 file_overwrite_test 1000 0.19
4 file_list_test 1000 0.08
5 file_delete_test 1000 0.19
6 file_mkdir_test 1000 0.16
7 file_rmdir_test 1000 0.11
8 file_create_test 2000 1.45
9 file_open_test 2000 0.17
10 file_overwrite_test 2000 0.38
11 file_list_test 2000 0.16
12 file_delete_test 2000 0.39
13 file_mkdir_test 2000 0.25
14 file_rmdir_test 2000 0.28
15 file_create_test 3000 1.11
16 file_open_test 3000 0.23
17 file_overwrite_test 3000 0.72
18 file_list_test 3000 0.23
19 file_delete_test 3000 0.56
20 file_mkdir_test 3000 0.56
21 file_rmdir_test 3000 0.36
22 file_create_test 4000 1.45
23 file_open_test 4000 0.36
24 file_overwrite_test 4000 0.97
25 file_list_test 4000 0.33
26 file_delete_test 4000 0.77
27 file_mkdir_test 4000 0.48
28 file_rmdir_test 4000 0.47
29 file_create_test 5000 2.47
30 file_open_test 5000 0.45
31 file_overwrite_test 5000 1.23
32 file_list_test 5000 0.41
33 file_delete_test 5000 1.03
34 file_mkdir_test 5000 0.70
35 file_rmdir_test 5000 0.70
36 rdwr_cc_write_page_test 100 0.25
37 rdwr_cc_read_page_test 100 0.19
38 rdwr_cc_write_large_test 100 0.09
39 rdwr_cc_read_large_test 100 0.08
40 rdwr_cc_write_page_test 200 0.47
41 rdwr_cc_read_page_test 200 0.52
42 rdwr_cc_write_large_test 200 0.22
43 rdwr_cc_read_large_test 200 0.16
44 rdwr_cc_write_page_test 300 0.72
45 rdwr_cc_read_page_test 300 0.62
46 rdwr_cc_write_large_test 300 0.30
47 rdwr_cc_read_large_test 300 0.23
48 rdwr_cc_write_page_test 400 0.92
49 rdwr_cc_read_page_test 400 0.88
50 rdwr_cc_write_large_test 400 0.41
51 rdwr_cc_read_large_test 400 0.31
52 rdwr_cc_write_page_test 500 1.20
53 rdwr_cc_read_page_test 500 0.97
54 rdwr_cc_write_large_test 500 0.50
55 rdwr_cc_read_large_test 500 0.39
56 rdwr_nc_write_page_test 100 7.56
57 rdwr_nc_read_page_test 100 10.14
58 rdwr_nc_write_large_test 100 0.88
59 rdwr_nc_read_large_test 100 0.56
60 rdwr_nc_write_page_test 200 14.36
61 rdwr_nc_read_page_test 200 21.39
62 rdwr_nc_write_large_test 200 1.72
63 rdwr_nc_read_large_test 200 1.34
64 rdwr_nc_write_page_test 300 21.86
65 rdwr_nc_read_page_test 300 19.56
66 rdwr_nc_write_large_test 300 2.53
67 rdwr_nc_read_large_test 300 1.64
68 rdwr_nc_write_page_test 400 28.52
69 rdwr_nc_read_page_test 400 26.11
70 rdwr_nc_write_large_test 400 3.42
71 rdwr_nc_read_large_test 400 2.22
72 rdwr_nc_write_page_test 500 35.45
73 rdwr_nc_read_page_test 500 33.05
74 rdwr_nc_write_large_test 500 4.33
75 rdwr_nc_read_large_test 500 2.77
76 mmap_write_test 100 0.16
77 mmap_read_test 100 0.20
78 mmap_write_test 200 0.30
79 mmap_read_test 200 0.39
80 mmap_write_test 300 0.44
81 mmap_read_test 300 0.59
82 mmap_write_test 400 0.58
83 mmap_read_test 400 0.78
84 mmap_write_test 500 0.72
85 mmap_read_test 500 1.06

View File

@ -0,0 +1,85 @@
file_create_test,1000,0.97
file_open_test,1000,0.08
file_overwrite_test,1000,0.19
file_list_test,1000,0.08
file_delete_test,1000,0.19
file_mkdir_test,1000,0.13
file_rmdir_test,1000,0.13
file_create_test,2000,1.38
file_open_test,2000,0.23
file_overwrite_test,2000,0.36
file_list_test,2000,0.17
file_delete_test,2000,0.41
file_mkdir_test,2000,0.25
file_rmdir_test,2000,0.36
file_create_test,3000,1.34
file_open_test,3000,0.28
file_overwrite_test,3000,0.78
file_list_test,3000,0.27
file_delete_test,3000,0.59
file_mkdir_test,3000,0.36
file_rmdir_test,3000,0.36
file_create_test,4000,1.33
file_open_test,4000,0.36
file_overwrite_test,4000,1.06
file_list_test,4000,0.33
file_delete_test,4000,0.81
file_mkdir_test,4000,0.67
file_rmdir_test,4000,0.41
file_create_test,5000,1.94
file_open_test,5000,0.48
file_overwrite_test,5000,1.14
file_list_test,5000,0.44
file_delete_test,5000,1.06
file_mkdir_test,5000,0.87
file_rmdir_test,5000,0.59
rdwr_cc_write_page_test,100,0.25
rdwr_cc_read_page_test,100,0.19
rdwr_cc_write_large_test,100,0.11
rdwr_cc_read_large_test,100,0.08
rdwr_cc_write_page_test,200,0.61
rdwr_cc_read_page_test,200,0.42
rdwr_cc_write_large_test,200,0.22
rdwr_cc_read_large_test,200,0.25
rdwr_cc_write_page_test,300,0.69
rdwr_cc_read_page_test,300,0.61
rdwr_cc_write_large_test,300,0.28
rdwr_cc_read_large_test,300,0.22
rdwr_cc_write_page_test,400,0.91
rdwr_cc_read_page_test,400,0.78
rdwr_cc_write_large_test,400,0.38
rdwr_cc_read_large_test,400,0.28
rdwr_cc_write_page_test,500,1.19
rdwr_cc_read_page_test,500,1.03
rdwr_cc_write_large_test,500,0.48
rdwr_cc_read_large_test,500,0.36
rdwr_nc_write_page_test,100,7.55
rdwr_nc_read_page_test,100,9.38
rdwr_nc_write_large_test,100,0.86
rdwr_nc_read_large_test,100,0.58
rdwr_nc_write_page_test,200,15.69
rdwr_nc_read_page_test,200,21.78
rdwr_nc_write_large_test,200,1.73
rdwr_nc_read_large_test,200,1.16
rdwr_nc_write_page_test,300,21.58
rdwr_nc_read_page_test,300,21.92
rdwr_nc_write_large_test,300,2.59
rdwr_nc_read_large_test,300,1.84
rdwr_nc_write_page_test,400,28.91
rdwr_nc_read_page_test,400,26.31
rdwr_nc_write_large_test,400,3.38
rdwr_nc_read_large_test,400,2.20
rdwr_nc_write_page_test,500,36.69
rdwr_nc_read_page_test,500,33.52
rdwr_nc_write_large_test,500,4.36
rdwr_nc_read_large_test,500,2.80
mmap_write_test,100,0.16
mmap_read_test,100,0.19
mmap_write_test,200,0.31
mmap_read_test,200,0.39
mmap_write_test,300,0.44
mmap_read_test,300,0.58
mmap_write_test,400,0.59
mmap_read_test,400,0.78
mmap_write_test,500,0.72
mmap_read_test,500,1.09
1 file_create_test 1000 0.97
2 file_open_test 1000 0.08
3 file_overwrite_test 1000 0.19
4 file_list_test 1000 0.08
5 file_delete_test 1000 0.19
6 file_mkdir_test 1000 0.13
7 file_rmdir_test 1000 0.13
8 file_create_test 2000 1.38
9 file_open_test 2000 0.23
10 file_overwrite_test 2000 0.36
11 file_list_test 2000 0.17
12 file_delete_test 2000 0.41
13 file_mkdir_test 2000 0.25
14 file_rmdir_test 2000 0.36
15 file_create_test 3000 1.34
16 file_open_test 3000 0.28
17 file_overwrite_test 3000 0.78
18 file_list_test 3000 0.27
19 file_delete_test 3000 0.59
20 file_mkdir_test 3000 0.36
21 file_rmdir_test 3000 0.36
22 file_create_test 4000 1.33
23 file_open_test 4000 0.36
24 file_overwrite_test 4000 1.06
25 file_list_test 4000 0.33
26 file_delete_test 4000 0.81
27 file_mkdir_test 4000 0.67
28 file_rmdir_test 4000 0.41
29 file_create_test 5000 1.94
30 file_open_test 5000 0.48
31 file_overwrite_test 5000 1.14
32 file_list_test 5000 0.44
33 file_delete_test 5000 1.06
34 file_mkdir_test 5000 0.87
35 file_rmdir_test 5000 0.59
36 rdwr_cc_write_page_test 100 0.25
37 rdwr_cc_read_page_test 100 0.19
38 rdwr_cc_write_large_test 100 0.11
39 rdwr_cc_read_large_test 100 0.08
40 rdwr_cc_write_page_test 200 0.61
41 rdwr_cc_read_page_test 200 0.42
42 rdwr_cc_write_large_test 200 0.22
43 rdwr_cc_read_large_test 200 0.25
44 rdwr_cc_write_page_test 300 0.69
45 rdwr_cc_read_page_test 300 0.61
46 rdwr_cc_write_large_test 300 0.28
47 rdwr_cc_read_large_test 300 0.22
48 rdwr_cc_write_page_test 400 0.91
49 rdwr_cc_read_page_test 400 0.78
50 rdwr_cc_write_large_test 400 0.38
51 rdwr_cc_read_large_test 400 0.28
52 rdwr_cc_write_page_test 500 1.19
53 rdwr_cc_read_page_test 500 1.03
54 rdwr_cc_write_large_test 500 0.48
55 rdwr_cc_read_large_test 500 0.36
56 rdwr_nc_write_page_test 100 7.55
57 rdwr_nc_read_page_test 100 9.38
58 rdwr_nc_write_large_test 100 0.86
59 rdwr_nc_read_large_test 100 0.58
60 rdwr_nc_write_page_test 200 15.69
61 rdwr_nc_read_page_test 200 21.78
62 rdwr_nc_write_large_test 200 1.73
63 rdwr_nc_read_large_test 200 1.16
64 rdwr_nc_write_page_test 300 21.58
65 rdwr_nc_read_page_test 300 21.92
66 rdwr_nc_write_large_test 300 2.59
67 rdwr_nc_read_large_test 300 1.84
68 rdwr_nc_write_page_test 400 28.91
69 rdwr_nc_read_page_test 400 26.31
70 rdwr_nc_write_large_test 400 3.38
71 rdwr_nc_read_large_test 400 2.20
72 rdwr_nc_write_page_test 500 36.69
73 rdwr_nc_read_page_test 500 33.52
74 rdwr_nc_write_large_test 500 4.36
75 rdwr_nc_read_large_test 500 2.80
76 mmap_write_test 100 0.16
77 mmap_read_test 100 0.19
78 mmap_write_test 200 0.31
79 mmap_read_test 200 0.39
80 mmap_write_test 300 0.44
81 mmap_read_test 300 0.58
82 mmap_write_test 400 0.59
83 mmap_read_test 400 0.78
84 mmap_write_test 500 0.72
85 mmap_read_test 500 1.09

View File

@ -0,0 +1,85 @@
file_create_test,1000,0.20
file_open_test,1000,0.08
file_overwrite_test,1000,0.06
file_list_test,1000,0.11
file_delete_test,1000,0.09
file_mkdir_test,1000,0.06
file_rmdir_test,1000,0.08
file_create_test,2000,0.48
file_open_test,2000,0.11
file_overwrite_test,2000,0.11
file_list_test,2000,0.23
file_delete_test,2000,0.19
file_mkdir_test,2000,0.09
file_rmdir_test,2000,0.14
file_create_test,3000,0.61
file_open_test,3000,0.30
file_overwrite_test,3000,0.17
file_list_test,3000,0.33
file_delete_test,3000,0.27
file_mkdir_test,3000,0.41
file_rmdir_test,3000,0.20
file_create_test,4000,0.64
file_open_test,4000,0.23
file_overwrite_test,4000,0.25
file_list_test,4000,0.47
file_delete_test,4000,0.48
file_mkdir_test,4000,0.53
file_rmdir_test,4000,0.27
file_create_test,5000,1.08
file_open_test,5000,0.28
file_overwrite_test,5000,0.30
file_list_test,5000,0.61
file_delete_test,5000,0.52
file_mkdir_test,5000,0.66
file_rmdir_test,5000,0.39
rdwr_cc_write_page_test,100,1.30
rdwr_cc_read_page_test,100,1.44
rdwr_cc_write_large_test,100,0.17
rdwr_cc_read_large_test,100,0.17
rdwr_cc_write_page_test,200,2.67
rdwr_cc_read_page_test,200,2.97
rdwr_cc_write_large_test,200,0.33
rdwr_cc_read_large_test,200,0.39
rdwr_cc_write_page_test,300,4.00
rdwr_cc_read_page_test,300,4.42
rdwr_cc_write_large_test,300,0.48
rdwr_cc_read_large_test,300,0.50
rdwr_cc_write_page_test,400,5.36
rdwr_cc_read_page_test,400,5.86
rdwr_cc_write_large_test,400,0.63
rdwr_cc_read_large_test,400,0.66
rdwr_cc_write_page_test,500,6.55
rdwr_cc_read_page_test,500,7.05
rdwr_cc_write_large_test,500,0.89
rdwr_cc_read_large_test,500,0.89
rdwr_nc_write_page_test,100,1.33
rdwr_nc_read_page_test,100,1.33
rdwr_nc_write_large_test,100,0.16
rdwr_nc_read_large_test,100,0.16
rdwr_nc_write_page_test,200,2.67
rdwr_nc_read_page_test,200,2.67
rdwr_nc_write_large_test,200,0.31
rdwr_nc_read_large_test,200,0.33
rdwr_nc_write_page_test,300,4.01
rdwr_nc_read_page_test,300,4.06
rdwr_nc_write_large_test,300,0.48
rdwr_nc_read_large_test,300,0.47
rdwr_nc_write_page_test,400,5.44
rdwr_nc_read_page_test,400,5.42
rdwr_nc_write_large_test,400,0.63
rdwr_nc_read_large_test,400,0.66
rdwr_nc_write_page_test,500,6.41
rdwr_nc_read_page_test,500,6.56
rdwr_nc_write_large_test,500,0.83
rdwr_nc_read_large_test,500,0.78
mmap_write_test,100,0.14
mmap_read_test,100,0.20
mmap_write_test,200,0.30
mmap_read_test,200,0.39
mmap_write_test,300,0.45
mmap_read_test,300,0.59
mmap_write_test,400,0.56
mmap_read_test,400,0.83
mmap_write_test,500,0.72
mmap_read_test,500,1.00
1 file_create_test 1000 0.20
2 file_open_test 1000 0.08
3 file_overwrite_test 1000 0.06
4 file_list_test 1000 0.11
5 file_delete_test 1000 0.09
6 file_mkdir_test 1000 0.06
7 file_rmdir_test 1000 0.08
8 file_create_test 2000 0.48
9 file_open_test 2000 0.11
10 file_overwrite_test 2000 0.11
11 file_list_test 2000 0.23
12 file_delete_test 2000 0.19
13 file_mkdir_test 2000 0.09
14 file_rmdir_test 2000 0.14
15 file_create_test 3000 0.61
16 file_open_test 3000 0.30
17 file_overwrite_test 3000 0.17
18 file_list_test 3000 0.33
19 file_delete_test 3000 0.27
20 file_mkdir_test 3000 0.41
21 file_rmdir_test 3000 0.20
22 file_create_test 4000 0.64
23 file_open_test 4000 0.23
24 file_overwrite_test 4000 0.25
25 file_list_test 4000 0.47
26 file_delete_test 4000 0.48
27 file_mkdir_test 4000 0.53
28 file_rmdir_test 4000 0.27
29 file_create_test 5000 1.08
30 file_open_test 5000 0.28
31 file_overwrite_test 5000 0.30
32 file_list_test 5000 0.61
33 file_delete_test 5000 0.52
34 file_mkdir_test 5000 0.66
35 file_rmdir_test 5000 0.39
36 rdwr_cc_write_page_test 100 1.30
37 rdwr_cc_read_page_test 100 1.44
38 rdwr_cc_write_large_test 100 0.17
39 rdwr_cc_read_large_test 100 0.17
40 rdwr_cc_write_page_test 200 2.67
41 rdwr_cc_read_page_test 200 2.97
42 rdwr_cc_write_large_test 200 0.33
43 rdwr_cc_read_large_test 200 0.39
44 rdwr_cc_write_page_test 300 4.00
45 rdwr_cc_read_page_test 300 4.42
46 rdwr_cc_write_large_test 300 0.48
47 rdwr_cc_read_large_test 300 0.50
48 rdwr_cc_write_page_test 400 5.36
49 rdwr_cc_read_page_test 400 5.86
50 rdwr_cc_write_large_test 400 0.63
51 rdwr_cc_read_large_test 400 0.66
52 rdwr_cc_write_page_test 500 6.55
53 rdwr_cc_read_page_test 500 7.05
54 rdwr_cc_write_large_test 500 0.89
55 rdwr_cc_read_large_test 500 0.89
56 rdwr_nc_write_page_test 100 1.33
57 rdwr_nc_read_page_test 100 1.33
58 rdwr_nc_write_large_test 100 0.16
59 rdwr_nc_read_large_test 100 0.16
60 rdwr_nc_write_page_test 200 2.67
61 rdwr_nc_read_page_test 200 2.67
62 rdwr_nc_write_large_test 200 0.31
63 rdwr_nc_read_large_test 200 0.33
64 rdwr_nc_write_page_test 300 4.01
65 rdwr_nc_read_page_test 300 4.06
66 rdwr_nc_write_large_test 300 0.48
67 rdwr_nc_read_large_test 300 0.47
68 rdwr_nc_write_page_test 400 5.44
69 rdwr_nc_read_page_test 400 5.42
70 rdwr_nc_write_large_test 400 0.63
71 rdwr_nc_read_large_test 400 0.66
72 rdwr_nc_write_page_test 500 6.41
73 rdwr_nc_read_page_test 500 6.56
74 rdwr_nc_write_large_test 500 0.83
75 rdwr_nc_read_large_test 500 0.78
76 mmap_write_test 100 0.14
77 mmap_read_test 100 0.20
78 mmap_write_test 200 0.30
79 mmap_read_test 200 0.39
80 mmap_write_test 300 0.45
81 mmap_read_test 300 0.59
82 mmap_write_test 400 0.56
83 mmap_read_test 400 0.83
84 mmap_write_test 500 0.72
85 mmap_read_test 500 1.00

View File

@ -0,0 +1,85 @@
file_create_test,1000,0.20
file_open_test,1000,0.06
file_overwrite_test,1000,0.05
file_list_test,1000,0.11
file_delete_test,1000,0.09
file_mkdir_test,1000,0.05
file_rmdir_test,1000,0.08
file_create_test,2000,0.47
file_open_test,2000,0.13
file_overwrite_test,2000,0.11
file_list_test,2000,0.22
file_delete_test,2000,0.19
file_mkdir_test,2000,0.11
file_rmdir_test,2000,0.14
file_create_test,3000,0.59
file_open_test,3000,0.27
file_overwrite_test,3000,0.17
file_list_test,3000,0.34
file_delete_test,3000,0.27
file_mkdir_test,3000,0.41
file_rmdir_test,3000,0.20
file_create_test,4000,0.62
file_open_test,4000,0.22
file_overwrite_test,4000,0.41
file_list_test,4000,0.47
file_delete_test,4000,0.34
file_mkdir_test,4000,0.55
file_rmdir_test,4000,0.28
file_create_test,5000,1.08
file_open_test,5000,0.28
file_overwrite_test,5000,0.30
file_list_test,5000,0.61
file_delete_test,5000,0.45
file_mkdir_test,5000,0.67
file_rmdir_test,5000,0.34
rdwr_cc_write_page_test,100,1.36
rdwr_cc_read_page_test,100,1.47
rdwr_cc_write_large_test,100,0.17
rdwr_cc_read_large_test,100,0.17
rdwr_cc_write_page_test,200,2.63
rdwr_cc_read_page_test,200,3.00
rdwr_cc_write_large_test,200,0.31
rdwr_cc_read_large_test,200,0.34
rdwr_cc_write_page_test,300,3.91
rdwr_cc_read_page_test,300,4.20
rdwr_cc_write_large_test,300,0.50
rdwr_cc_read_large_test,300,0.52
rdwr_cc_write_page_test,400,5.23
rdwr_cc_read_page_test,400,5.64
rdwr_cc_write_large_test,400,0.72
rdwr_cc_read_large_test,400,0.66
rdwr_cc_write_page_test,500,6.12
rdwr_cc_read_page_test,500,6.83
rdwr_cc_write_large_test,500,0.80
rdwr_cc_read_large_test,500,0.83
rdwr_nc_write_page_test,100,1.30
rdwr_nc_read_page_test,100,1.36
rdwr_nc_write_large_test,100,0.16
rdwr_nc_read_large_test,100,0.20
rdwr_nc_write_page_test,200,2.73
rdwr_nc_read_page_test,200,2.64
rdwr_nc_write_large_test,200,0.31
rdwr_nc_read_large_test,200,0.31
rdwr_nc_write_page_test,300,3.95
rdwr_nc_read_page_test,300,4.06
rdwr_nc_write_large_test,300,0.48
rdwr_nc_read_large_test,300,0.48
rdwr_nc_write_page_test,400,5.33
rdwr_nc_read_page_test,400,5.47
rdwr_nc_write_large_test,400,0.64
rdwr_nc_read_large_test,400,0.64
rdwr_nc_write_page_test,500,6.48
rdwr_nc_read_page_test,500,6.41
rdwr_nc_write_large_test,500,0.81
rdwr_nc_read_large_test,500,0.81
mmap_write_test,100,0.14
mmap_read_test,100,0.20
mmap_write_test,200,0.30
mmap_read_test,200,0.39
mmap_write_test,300,0.45
mmap_read_test,300,0.59
mmap_write_test,400,0.64
mmap_read_test,400,0.77
mmap_write_test,500,0.73
mmap_read_test,500,1.00
1 file_create_test 1000 0.20
2 file_open_test 1000 0.06
3 file_overwrite_test 1000 0.05
4 file_list_test 1000 0.11
5 file_delete_test 1000 0.09
6 file_mkdir_test 1000 0.05
7 file_rmdir_test 1000 0.08
8 file_create_test 2000 0.47
9 file_open_test 2000 0.13
10 file_overwrite_test 2000 0.11
11 file_list_test 2000 0.22
12 file_delete_test 2000 0.19
13 file_mkdir_test 2000 0.11
14 file_rmdir_test 2000 0.14
15 file_create_test 3000 0.59
16 file_open_test 3000 0.27
17 file_overwrite_test 3000 0.17
18 file_list_test 3000 0.34
19 file_delete_test 3000 0.27
20 file_mkdir_test 3000 0.41
21 file_rmdir_test 3000 0.20
22 file_create_test 4000 0.62
23 file_open_test 4000 0.22
24 file_overwrite_test 4000 0.41
25 file_list_test 4000 0.47
26 file_delete_test 4000 0.34
27 file_mkdir_test 4000 0.55
28 file_rmdir_test 4000 0.28
29 file_create_test 5000 1.08
30 file_open_test 5000 0.28
31 file_overwrite_test 5000 0.30
32 file_list_test 5000 0.61
33 file_delete_test 5000 0.45
34 file_mkdir_test 5000 0.67
35 file_rmdir_test 5000 0.34
36 rdwr_cc_write_page_test 100 1.36
37 rdwr_cc_read_page_test 100 1.47
38 rdwr_cc_write_large_test 100 0.17
39 rdwr_cc_read_large_test 100 0.17
40 rdwr_cc_write_page_test 200 2.63
41 rdwr_cc_read_page_test 200 3.00
42 rdwr_cc_write_large_test 200 0.31
43 rdwr_cc_read_large_test 200 0.34
44 rdwr_cc_write_page_test 300 3.91
45 rdwr_cc_read_page_test 300 4.20
46 rdwr_cc_write_large_test 300 0.50
47 rdwr_cc_read_large_test 300 0.52
48 rdwr_cc_write_page_test 400 5.23
49 rdwr_cc_read_page_test 400 5.64
50 rdwr_cc_write_large_test 400 0.72
51 rdwr_cc_read_large_test 400 0.66
52 rdwr_cc_write_page_test 500 6.12
53 rdwr_cc_read_page_test 500 6.83
54 rdwr_cc_write_large_test 500 0.80
55 rdwr_cc_read_large_test 500 0.83
56 rdwr_nc_write_page_test 100 1.30
57 rdwr_nc_read_page_test 100 1.36
58 rdwr_nc_write_large_test 100 0.16
59 rdwr_nc_read_large_test 100 0.20
60 rdwr_nc_write_page_test 200 2.73
61 rdwr_nc_read_page_test 200 2.64
62 rdwr_nc_write_large_test 200 0.31
63 rdwr_nc_read_large_test 200 0.31
64 rdwr_nc_write_page_test 300 3.95
65 rdwr_nc_read_page_test 300 4.06
66 rdwr_nc_write_large_test 300 0.48
67 rdwr_nc_read_large_test 300 0.48
68 rdwr_nc_write_page_test 400 5.33
69 rdwr_nc_read_page_test 400 5.47
70 rdwr_nc_write_large_test 400 0.64
71 rdwr_nc_read_large_test 400 0.64
72 rdwr_nc_write_page_test 500 6.48
73 rdwr_nc_read_page_test 500 6.41
74 rdwr_nc_write_large_test 500 0.81
75 rdwr_nc_read_large_test 500 0.81
76 mmap_write_test 100 0.14
77 mmap_read_test 100 0.20
78 mmap_write_test 200 0.30
79 mmap_read_test 200 0.39
80 mmap_write_test 300 0.45
81 mmap_read_test 300 0.59
82 mmap_write_test 400 0.64
83 mmap_read_test 400 0.77
84 mmap_write_test 500 0.73
85 mmap_read_test 500 1.00

View File

@ -0,0 +1,85 @@
file_create_test,1000,0.06
file_open_test,1000,0.16
file_overwrite_test,1000,0.05
file_list_test,1000,0.09
file_delete_test,1000,0.08
file_mkdir_test,1000,0.05
file_rmdir_test,1000,0.08
file_create_test,2000,0.42
file_open_test,2000,0.09
file_overwrite_test,2000,0.08
file_list_test,2000,0.22
file_delete_test,2000,0.14
file_mkdir_test,2000,0.09
file_rmdir_test,2000,0.13
file_create_test,3000,0.58
file_open_test,3000,0.22
file_overwrite_test,3000,0.25
file_list_test,3000,0.36
file_delete_test,3000,0.22
file_mkdir_test,3000,0.39
file_rmdir_test,3000,0.17
file_create_test,4000,0.59
file_open_test,4000,0.19
file_overwrite_test,4000,0.17
file_list_test,4000,0.58
file_delete_test,4000,0.33
file_mkdir_test,4000,0.55
file_rmdir_test,4000,0.22
file_create_test,5000,0.95
file_open_test,5000,0.22
file_overwrite_test,5000,0.23
file_list_test,5000,0.59
file_delete_test,5000,0.34
file_mkdir_test,5000,0.66
file_rmdir_test,5000,0.28
rdwr_cc_write_page_test,100,1.37
rdwr_cc_read_page_test,100,1.47
rdwr_cc_write_large_test,100,0.16
rdwr_cc_read_large_test,100,0.17
rdwr_cc_write_page_test,200,2.47
rdwr_cc_read_page_test,200,3.00
rdwr_cc_write_large_test,200,0.31
rdwr_cc_read_large_test,200,0.34
rdwr_cc_write_page_test,300,3.89
rdwr_cc_read_page_test,300,4.45
rdwr_cc_write_large_test,300,0.47
rdwr_cc_read_large_test,300,0.50
rdwr_cc_write_page_test,400,4.92
rdwr_cc_read_page_test,400,5.78
rdwr_cc_write_large_test,400,0.61
rdwr_cc_read_large_test,400,0.67
rdwr_cc_write_page_test,500,6.17
rdwr_cc_read_page_test,500,7.33
rdwr_cc_write_large_test,500,0.78
rdwr_cc_read_large_test,500,0.95
rdwr_nc_write_page_test,100,1.30
rdwr_nc_read_page_test,100,1.39
rdwr_nc_write_large_test,100,0.19
rdwr_nc_read_large_test,100,0.17
rdwr_nc_write_page_test,200,2.61
rdwr_nc_read_page_test,200,2.80
rdwr_nc_write_large_test,200,0.31
rdwr_nc_read_large_test,200,0.34
rdwr_nc_write_page_test,300,3.94
rdwr_nc_read_page_test,300,4.23
rdwr_nc_write_large_test,300,0.48
rdwr_nc_read_large_test,300,0.50
rdwr_nc_write_page_test,400,5.36
rdwr_nc_read_page_test,400,5.52
rdwr_nc_write_large_test,400,0.63
rdwr_nc_read_large_test,400,0.69
rdwr_nc_write_page_test,500,6.51
rdwr_nc_read_page_test,500,7.00
rdwr_nc_write_large_test,500,0.81
rdwr_nc_read_large_test,500,0.81
mmap_write_test,100,0.16
mmap_read_test,100,0.19
mmap_write_test,200,0.31
mmap_read_test,200,0.39
mmap_write_test,300,0.44
mmap_read_test,300,0.59
mmap_write_test,400,0.59
mmap_read_test,400,0.78
mmap_write_test,500,0.73
mmap_read_test,500,0.98
1 file_create_test 1000 0.06
2 file_open_test 1000 0.16
3 file_overwrite_test 1000 0.05
4 file_list_test 1000 0.09
5 file_delete_test 1000 0.08
6 file_mkdir_test 1000 0.05
7 file_rmdir_test 1000 0.08
8 file_create_test 2000 0.42
9 file_open_test 2000 0.09
10 file_overwrite_test 2000 0.08
11 file_list_test 2000 0.22
12 file_delete_test 2000 0.14
13 file_mkdir_test 2000 0.09
14 file_rmdir_test 2000 0.13
15 file_create_test 3000 0.58
16 file_open_test 3000 0.22
17 file_overwrite_test 3000 0.25
18 file_list_test 3000 0.36
19 file_delete_test 3000 0.22
20 file_mkdir_test 3000 0.39
21 file_rmdir_test 3000 0.17
22 file_create_test 4000 0.59
23 file_open_test 4000 0.19
24 file_overwrite_test 4000 0.17
25 file_list_test 4000 0.58
26 file_delete_test 4000 0.33
27 file_mkdir_test 4000 0.55
28 file_rmdir_test 4000 0.22
29 file_create_test 5000 0.95
30 file_open_test 5000 0.22
31 file_overwrite_test 5000 0.23
32 file_list_test 5000 0.59
33 file_delete_test 5000 0.34
34 file_mkdir_test 5000 0.66
35 file_rmdir_test 5000 0.28
36 rdwr_cc_write_page_test 100 1.37
37 rdwr_cc_read_page_test 100 1.47
38 rdwr_cc_write_large_test 100 0.16
39 rdwr_cc_read_large_test 100 0.17
40 rdwr_cc_write_page_test 200 2.47
41 rdwr_cc_read_page_test 200 3.00
42 rdwr_cc_write_large_test 200 0.31
43 rdwr_cc_read_large_test 200 0.34
44 rdwr_cc_write_page_test 300 3.89
45 rdwr_cc_read_page_test 300 4.45
46 rdwr_cc_write_large_test 300 0.47
47 rdwr_cc_read_large_test 300 0.50
48 rdwr_cc_write_page_test 400 4.92
49 rdwr_cc_read_page_test 400 5.78
50 rdwr_cc_write_large_test 400 0.61
51 rdwr_cc_read_large_test 400 0.67
52 rdwr_cc_write_page_test 500 6.17
53 rdwr_cc_read_page_test 500 7.33
54 rdwr_cc_write_large_test 500 0.78
55 rdwr_cc_read_large_test 500 0.95
56 rdwr_nc_write_page_test 100 1.30
57 rdwr_nc_read_page_test 100 1.39
58 rdwr_nc_write_large_test 100 0.19
59 rdwr_nc_read_large_test 100 0.17
60 rdwr_nc_write_page_test 200 2.61
61 rdwr_nc_read_page_test 200 2.80
62 rdwr_nc_write_large_test 200 0.31
63 rdwr_nc_read_large_test 200 0.34
64 rdwr_nc_write_page_test 300 3.94
65 rdwr_nc_read_page_test 300 4.23
66 rdwr_nc_write_large_test 300 0.48
67 rdwr_nc_read_large_test 300 0.50
68 rdwr_nc_write_page_test 400 5.36
69 rdwr_nc_read_page_test 400 5.52
70 rdwr_nc_write_large_test 400 0.63
71 rdwr_nc_read_large_test 400 0.69
72 rdwr_nc_write_page_test 500 6.51
73 rdwr_nc_read_page_test 500 7.00
74 rdwr_nc_write_large_test 500 0.81
75 rdwr_nc_read_large_test 500 0.81
76 mmap_write_test 100 0.16
77 mmap_read_test 100 0.19
78 mmap_write_test 200 0.31
79 mmap_read_test 200 0.39
80 mmap_write_test 300 0.44
81 mmap_read_test 300 0.59
82 mmap_write_test 400 0.59
83 mmap_read_test 400 0.78
84 mmap_write_test 500 0.73
85 mmap_read_test 500 0.98

View File

@ -0,0 +1,85 @@
file_create_test,1000,0.08
file_open_test,1000,0.16
file_overwrite_test,1000,0.05
file_list_test,1000,0.11
file_delete_test,1000,0.06
file_mkdir_test,1000,0.16
file_rmdir_test,1000,0.06
file_create_test,2000,0.36
file_open_test,2000,0.09
file_overwrite_test,2000,0.09
file_list_test,2000,0.20
file_delete_test,2000,0.16
file_mkdir_test,2000,0.09
file_rmdir_test,2000,0.12
file_create_test,3000,0.58
file_open_test,3000,0.20
file_overwrite_test,3000,0.16
file_list_test,3000,0.33
file_delete_test,3000,0.22
file_mkdir_test,3000,0.41
file_rmdir_test,3000,0.17
file_create_test,4000,0.58
file_open_test,4000,0.17
file_overwrite_test,4000,0.20
file_list_test,4000,0.44
file_delete_test,4000,0.38
file_mkdir_test,4000,0.59
file_rmdir_test,4000,0.25
file_create_test,5000,0.97
file_open_test,5000,0.22
file_overwrite_test,5000,0.22
file_list_test,5000,0.61
file_delete_test,5000,0.36
file_mkdir_test,5000,0.69
file_rmdir_test,5000,0.30
rdwr_cc_write_page_test,100,1.30
rdwr_cc_read_page_test,100,1.53
rdwr_cc_write_large_test,100,0.17
rdwr_cc_read_large_test,100,0.17
rdwr_cc_write_page_test,200,2.62
rdwr_cc_read_page_test,200,3.06
rdwr_cc_write_large_test,200,0.31
rdwr_cc_read_large_test,200,0.34
rdwr_cc_write_page_test,300,3.89
rdwr_cc_read_page_test,300,4.50
rdwr_cc_write_large_test,300,0.50
rdwr_cc_read_large_test,300,0.59
rdwr_cc_write_page_test,400,5.14
rdwr_cc_read_page_test,400,5.94
rdwr_cc_write_large_test,400,0.62
rdwr_cc_read_large_test,400,0.70
rdwr_cc_write_page_test,500,6.25
rdwr_cc_read_page_test,500,7.33
rdwr_cc_write_large_test,500,0.81
rdwr_cc_read_large_test,500,0.83
rdwr_nc_write_page_test,100,1.34
rdwr_nc_read_page_test,100,1.38
rdwr_nc_write_large_test,100,0.19
rdwr_nc_read_large_test,100,0.16
rdwr_nc_write_page_test,200,2.67
rdwr_nc_read_page_test,200,2.78
rdwr_nc_write_large_test,200,0.38
rdwr_nc_read_large_test,200,0.33
rdwr_nc_write_page_test,300,3.98
rdwr_nc_read_page_test,300,4.44
rdwr_nc_write_large_test,300,0.52
rdwr_nc_read_large_test,300,0.50
rdwr_nc_write_page_test,400,5.36
rdwr_nc_read_page_test,400,5.69
rdwr_nc_write_large_test,400,0.66
rdwr_nc_read_large_test,400,0.67
rdwr_nc_write_page_test,500,6.66
rdwr_nc_read_page_test,500,6.94
rdwr_nc_write_large_test,500,0.81
rdwr_nc_read_large_test,500,0.81
mmap_write_test,100,0.14
mmap_read_test,100,0.20
mmap_write_test,200,0.31
mmap_read_test,200,0.39
mmap_write_test,300,0.44
mmap_read_test,300,0.59
mmap_write_test,400,0.59
mmap_read_test,400,0.78
mmap_write_test,500,0.75
mmap_read_test,500,0.98
1 file_create_test 1000 0.08
2 file_open_test 1000 0.16
3 file_overwrite_test 1000 0.05
4 file_list_test 1000 0.11
5 file_delete_test 1000 0.06
6 file_mkdir_test 1000 0.16
7 file_rmdir_test 1000 0.06
8 file_create_test 2000 0.36
9 file_open_test 2000 0.09
10 file_overwrite_test 2000 0.09
11 file_list_test 2000 0.20
12 file_delete_test 2000 0.16
13 file_mkdir_test 2000 0.09
14 file_rmdir_test 2000 0.12
15 file_create_test 3000 0.58
16 file_open_test 3000 0.20
17 file_overwrite_test 3000 0.16
18 file_list_test 3000 0.33
19 file_delete_test 3000 0.22
20 file_mkdir_test 3000 0.41
21 file_rmdir_test 3000 0.17
22 file_create_test 4000 0.58
23 file_open_test 4000 0.17
24 file_overwrite_test 4000 0.20
25 file_list_test 4000 0.44
26 file_delete_test 4000 0.38
27 file_mkdir_test 4000 0.59
28 file_rmdir_test 4000 0.25
29 file_create_test 5000 0.97
30 file_open_test 5000 0.22
31 file_overwrite_test 5000 0.22
32 file_list_test 5000 0.61
33 file_delete_test 5000 0.36
34 file_mkdir_test 5000 0.69
35 file_rmdir_test 5000 0.30
36 rdwr_cc_write_page_test 100 1.30
37 rdwr_cc_read_page_test 100 1.53
38 rdwr_cc_write_large_test 100 0.17
39 rdwr_cc_read_large_test 100 0.17
40 rdwr_cc_write_page_test 200 2.62
41 rdwr_cc_read_page_test 200 3.06
42 rdwr_cc_write_large_test 200 0.31
43 rdwr_cc_read_large_test 200 0.34
44 rdwr_cc_write_page_test 300 3.89
45 rdwr_cc_read_page_test 300 4.50
46 rdwr_cc_write_large_test 300 0.50
47 rdwr_cc_read_large_test 300 0.59
48 rdwr_cc_write_page_test 400 5.14
49 rdwr_cc_read_page_test 400 5.94
50 rdwr_cc_write_large_test 400 0.62
51 rdwr_cc_read_large_test 400 0.70
52 rdwr_cc_write_page_test 500 6.25
53 rdwr_cc_read_page_test 500 7.33
54 rdwr_cc_write_large_test 500 0.81
55 rdwr_cc_read_large_test 500 0.83
56 rdwr_nc_write_page_test 100 1.34
57 rdwr_nc_read_page_test 100 1.38
58 rdwr_nc_write_large_test 100 0.19
59 rdwr_nc_read_large_test 100 0.16
60 rdwr_nc_write_page_test 200 2.67
61 rdwr_nc_read_page_test 200 2.78
62 rdwr_nc_write_large_test 200 0.38
63 rdwr_nc_read_large_test 200 0.33
64 rdwr_nc_write_page_test 300 3.98
65 rdwr_nc_read_page_test 300 4.44
66 rdwr_nc_write_large_test 300 0.52
67 rdwr_nc_read_large_test 300 0.50
68 rdwr_nc_write_page_test 400 5.36
69 rdwr_nc_read_page_test 400 5.69
70 rdwr_nc_write_large_test 400 0.66
71 rdwr_nc_read_large_test 400 0.67
72 rdwr_nc_write_page_test 500 6.66
73 rdwr_nc_read_page_test 500 6.94
74 rdwr_nc_write_large_test 500 0.81
75 rdwr_nc_read_large_test 500 0.81
76 mmap_write_test 100 0.14
77 mmap_read_test 100 0.20
78 mmap_write_test 200 0.31
79 mmap_read_test 200 0.39
80 mmap_write_test 300 0.44
81 mmap_read_test 300 0.59
82 mmap_write_test 400 0.59
83 mmap_read_test 400 0.78
84 mmap_write_test 500 0.75
85 mmap_read_test 500 0.98

View File

@ -0,0 +1,85 @@
file_create_test,1000,0.06
file_open_test,1000,0.17
file_overwrite_test,1000,0.05
file_list_test,1000,0.11
file_delete_test,1000,0.06
file_mkdir_test,1000,0.05
file_rmdir_test,1000,0.06
file_create_test,2000,0.44
file_open_test,2000,0.08
file_overwrite_test,2000,0.09
file_list_test,2000,0.22
file_delete_test,2000,0.14
file_mkdir_test,2000,0.09
file_rmdir_test,2000,0.14
file_create_test,3000,0.56
file_open_test,3000,0.20
file_overwrite_test,3000,0.14
file_list_test,3000,0.33
file_delete_test,3000,0.20
file_mkdir_test,3000,0.41
file_rmdir_test,3000,0.16
file_create_test,4000,0.59
file_open_test,4000,0.16
file_overwrite_test,4000,0.19
file_list_test,4000,0.47
file_delete_test,4000,0.31
file_mkdir_test,4000,0.66
file_rmdir_test,4000,0.23
file_create_test,5000,0.98
file_open_test,5000,0.22
file_overwrite_test,5000,0.22
file_list_test,5000,0.59
file_delete_test,5000,0.36
file_mkdir_test,5000,0.66
file_rmdir_test,5000,0.31
rdwr_cc_write_page_test,100,0.34
rdwr_cc_read_page_test,100,0.28
rdwr_cc_write_large_test,100,0.11
rdwr_cc_read_large_test,100,0.08
rdwr_cc_write_page_test,200,0.67
rdwr_cc_read_page_test,200,0.58
rdwr_cc_write_large_test,200,0.22
rdwr_cc_read_large_test,200,0.22
rdwr_cc_write_page_test,300,1.01
rdwr_cc_read_page_test,300,0.88
rdwr_cc_write_large_test,300,0.34
rdwr_cc_read_large_test,300,0.25
rdwr_cc_write_page_test,400,1.38
rdwr_cc_read_page_test,400,1.12
rdwr_cc_write_large_test,400,0.42
rdwr_cc_read_large_test,400,0.33
rdwr_cc_write_page_test,500,1.70
rdwr_cc_read_page_test,500,1.48
rdwr_cc_write_large_test,500,0.64
rdwr_cc_read_large_test,500,0.44
rdwr_nc_write_page_test,100,1.31
rdwr_nc_read_page_test,100,1.36
rdwr_nc_write_large_test,100,0.17
rdwr_nc_read_large_test,100,0.16
rdwr_nc_write_page_test,200,2.56
rdwr_nc_read_page_test,200,2.81
rdwr_nc_write_large_test,200,0.33
rdwr_nc_read_large_test,200,0.31
rdwr_nc_write_page_test,300,3.86
rdwr_nc_read_page_test,300,3.95
rdwr_nc_write_large_test,300,0.47
rdwr_nc_read_large_test,300,0.48
rdwr_nc_write_page_test,400,5.11
rdwr_nc_read_page_test,400,5.19
rdwr_nc_write_large_test,400,0.64
rdwr_nc_read_large_test,400,0.64
rdwr_nc_write_page_test,500,6.42
rdwr_nc_read_page_test,500,6.58
rdwr_nc_write_large_test,500,0.78
rdwr_nc_read_large_test,500,0.78
mmap_write_test,100,0.16
mmap_read_test,100,0.20
mmap_write_test,200,0.30
mmap_read_test,200,0.39
mmap_write_test,300,0.44
mmap_read_test,300,0.59
mmap_write_test,400,0.59
mmap_read_test,400,0.78
mmap_write_test,500,0.75
mmap_read_test,500,1.03
1 file_create_test 1000 0.06
2 file_open_test 1000 0.17
3 file_overwrite_test 1000 0.05
4 file_list_test 1000 0.11
5 file_delete_test 1000 0.06
6 file_mkdir_test 1000 0.05
7 file_rmdir_test 1000 0.06
8 file_create_test 2000 0.44
9 file_open_test 2000 0.08
10 file_overwrite_test 2000 0.09
11 file_list_test 2000 0.22
12 file_delete_test 2000 0.14
13 file_mkdir_test 2000 0.09
14 file_rmdir_test 2000 0.14
15 file_create_test 3000 0.56
16 file_open_test 3000 0.20
17 file_overwrite_test 3000 0.14
18 file_list_test 3000 0.33
19 file_delete_test 3000 0.20
20 file_mkdir_test 3000 0.41
21 file_rmdir_test 3000 0.16
22 file_create_test 4000 0.59
23 file_open_test 4000 0.16
24 file_overwrite_test 4000 0.19
25 file_list_test 4000 0.47
26 file_delete_test 4000 0.31
27 file_mkdir_test 4000 0.66
28 file_rmdir_test 4000 0.23
29 file_create_test 5000 0.98
30 file_open_test 5000 0.22
31 file_overwrite_test 5000 0.22
32 file_list_test 5000 0.59
33 file_delete_test 5000 0.36
34 file_mkdir_test 5000 0.66
35 file_rmdir_test 5000 0.31
36 rdwr_cc_write_page_test 100 0.34
37 rdwr_cc_read_page_test 100 0.28
38 rdwr_cc_write_large_test 100 0.11
39 rdwr_cc_read_large_test 100 0.08
40 rdwr_cc_write_page_test 200 0.67
41 rdwr_cc_read_page_test 200 0.58
42 rdwr_cc_write_large_test 200 0.22
43 rdwr_cc_read_large_test 200 0.22
44 rdwr_cc_write_page_test 300 1.01
45 rdwr_cc_read_page_test 300 0.88
46 rdwr_cc_write_large_test 300 0.34
47 rdwr_cc_read_large_test 300 0.25
48 rdwr_cc_write_page_test 400 1.38
49 rdwr_cc_read_page_test 400 1.12
50 rdwr_cc_write_large_test 400 0.42
51 rdwr_cc_read_large_test 400 0.33
52 rdwr_cc_write_page_test 500 1.70
53 rdwr_cc_read_page_test 500 1.48
54 rdwr_cc_write_large_test 500 0.64
55 rdwr_cc_read_large_test 500 0.44
56 rdwr_nc_write_page_test 100 1.31
57 rdwr_nc_read_page_test 100 1.36
58 rdwr_nc_write_large_test 100 0.17
59 rdwr_nc_read_large_test 100 0.16
60 rdwr_nc_write_page_test 200 2.56
61 rdwr_nc_read_page_test 200 2.81
62 rdwr_nc_write_large_test 200 0.33
63 rdwr_nc_read_large_test 200 0.31
64 rdwr_nc_write_page_test 300 3.86
65 rdwr_nc_read_page_test 300 3.95
66 rdwr_nc_write_large_test 300 0.47
67 rdwr_nc_read_large_test 300 0.48
68 rdwr_nc_write_page_test 400 5.11
69 rdwr_nc_read_page_test 400 5.19
70 rdwr_nc_write_large_test 400 0.64
71 rdwr_nc_read_large_test 400 0.64
72 rdwr_nc_write_page_test 500 6.42
73 rdwr_nc_read_page_test 500 6.58
74 rdwr_nc_write_large_test 500 0.78
75 rdwr_nc_read_large_test 500 0.78
76 mmap_write_test 100 0.16
77 mmap_read_test 100 0.20
78 mmap_write_test 200 0.30
79 mmap_read_test 200 0.39
80 mmap_write_test 300 0.44
81 mmap_read_test 300 0.59
82 mmap_write_test 400 0.59
83 mmap_read_test 400 0.78
84 mmap_write_test 500 0.75
85 mmap_read_test 500 1.03

View File

@ -0,0 +1,85 @@
file_create_test,1000,0.06
file_open_test,1000,0.16
file_overwrite_test,1000,0.05
file_list_test,1000,0.11
file_delete_test,1000,0.06
file_mkdir_test,1000,0.05
file_rmdir_test,1000,0.06
file_create_test,2000,0.44
file_open_test,2000,0.08
file_overwrite_test,2000,0.09
file_list_test,2000,0.20
file_delete_test,2000,0.16
file_mkdir_test,2000,0.09
file_rmdir_test,2000,0.13
file_create_test,3000,0.58
file_open_test,3000,0.22
file_overwrite_test,3000,0.13
file_list_test,3000,0.34
file_delete_test,3000,0.22
file_mkdir_test,3000,0.39
file_rmdir_test,3000,0.17
file_create_test,4000,0.61
file_open_test,4000,0.17
file_overwrite_test,4000,0.19
file_list_test,4000,0.44
file_delete_test,4000,0.27
file_mkdir_test,4000,0.67
file_rmdir_test,4000,0.22
file_create_test,5000,0.97
file_open_test,5000,0.20
file_overwrite_test,5000,0.23
file_list_test,5000,0.61
file_delete_test,5000,0.33
file_mkdir_test,5000,0.67
file_rmdir_test,5000,0.28
rdwr_cc_write_page_test,100,0.36
rdwr_cc_read_page_test,100,0.30
rdwr_cc_write_large_test,100,0.12
rdwr_cc_read_large_test,100,0.08
rdwr_cc_write_page_test,200,0.69
rdwr_cc_read_page_test,200,0.58
rdwr_cc_write_large_test,200,0.30
rdwr_cc_read_large_test,200,0.23
rdwr_cc_write_page_test,300,1.02
rdwr_cc_read_page_test,300,0.87
rdwr_cc_write_large_test,300,0.34
rdwr_cc_read_large_test,300,0.23
rdwr_cc_write_page_test,400,1.41
rdwr_cc_read_page_test,400,1.14
rdwr_cc_write_large_test,400,0.47
rdwr_cc_read_large_test,400,0.33
rdwr_cc_write_page_test,500,1.73
rdwr_cc_read_page_test,500,1.50
rdwr_cc_write_large_test,500,0.53
rdwr_cc_read_large_test,500,0.41
rdwr_nc_write_page_test,100,1.33
rdwr_nc_read_page_test,100,1.44
rdwr_nc_write_large_test,100,0.17
rdwr_nc_read_large_test,100,0.17
rdwr_nc_write_page_test,200,2.75
rdwr_nc_read_page_test,200,2.94
rdwr_nc_write_large_test,200,0.38
rdwr_nc_read_large_test,200,0.33
rdwr_nc_write_page_test,300,3.94
rdwr_nc_read_page_test,300,4.17
rdwr_nc_write_large_test,300,0.48
rdwr_nc_read_large_test,300,0.56
rdwr_nc_write_page_test,400,5.25
rdwr_nc_read_page_test,400,5.58
rdwr_nc_write_large_test,400,0.63
rdwr_nc_read_large_test,400,0.64
rdwr_nc_write_page_test,500,6.52
rdwr_nc_read_page_test,500,6.78
rdwr_nc_write_large_test,500,0.80
rdwr_nc_read_large_test,500,0.80
mmap_write_test,100,0.17
mmap_read_test,100,0.20
mmap_write_test,200,0.30
mmap_read_test,200,0.41
mmap_write_test,300,0.44
mmap_read_test,300,0.61
mmap_write_test,400,0.61
mmap_read_test,400,0.78
mmap_write_test,500,0.73
mmap_read_test,500,0.98
1 file_create_test 1000 0.06
2 file_open_test 1000 0.16
3 file_overwrite_test 1000 0.05
4 file_list_test 1000 0.11
5 file_delete_test 1000 0.06
6 file_mkdir_test 1000 0.05
7 file_rmdir_test 1000 0.06
8 file_create_test 2000 0.44
9 file_open_test 2000 0.08
10 file_overwrite_test 2000 0.09
11 file_list_test 2000 0.20
12 file_delete_test 2000 0.16
13 file_mkdir_test 2000 0.09
14 file_rmdir_test 2000 0.13
15 file_create_test 3000 0.58
16 file_open_test 3000 0.22
17 file_overwrite_test 3000 0.13
18 file_list_test 3000 0.34
19 file_delete_test 3000 0.22
20 file_mkdir_test 3000 0.39
21 file_rmdir_test 3000 0.17
22 file_create_test 4000 0.61
23 file_open_test 4000 0.17
24 file_overwrite_test 4000 0.19
25 file_list_test 4000 0.44
26 file_delete_test 4000 0.27
27 file_mkdir_test 4000 0.67
28 file_rmdir_test 4000 0.22
29 file_create_test 5000 0.97
30 file_open_test 5000 0.20
31 file_overwrite_test 5000 0.23
32 file_list_test 5000 0.61
33 file_delete_test 5000 0.33
34 file_mkdir_test 5000 0.67
35 file_rmdir_test 5000 0.28
36 rdwr_cc_write_page_test 100 0.36
37 rdwr_cc_read_page_test 100 0.30
38 rdwr_cc_write_large_test 100 0.12
39 rdwr_cc_read_large_test 100 0.08
40 rdwr_cc_write_page_test 200 0.69
41 rdwr_cc_read_page_test 200 0.58
42 rdwr_cc_write_large_test 200 0.30
43 rdwr_cc_read_large_test 200 0.23
44 rdwr_cc_write_page_test 300 1.02
45 rdwr_cc_read_page_test 300 0.87
46 rdwr_cc_write_large_test 300 0.34
47 rdwr_cc_read_large_test 300 0.23
48 rdwr_cc_write_page_test 400 1.41
49 rdwr_cc_read_page_test 400 1.14
50 rdwr_cc_write_large_test 400 0.47
51 rdwr_cc_read_large_test 400 0.33
52 rdwr_cc_write_page_test 500 1.73
53 rdwr_cc_read_page_test 500 1.50
54 rdwr_cc_write_large_test 500 0.53
55 rdwr_cc_read_large_test 500 0.41
56 rdwr_nc_write_page_test 100 1.33
57 rdwr_nc_read_page_test 100 1.44
58 rdwr_nc_write_large_test 100 0.17
59 rdwr_nc_read_large_test 100 0.17
60 rdwr_nc_write_page_test 200 2.75
61 rdwr_nc_read_page_test 200 2.94
62 rdwr_nc_write_large_test 200 0.38
63 rdwr_nc_read_large_test 200 0.33
64 rdwr_nc_write_page_test 300 3.94
65 rdwr_nc_read_page_test 300 4.17
66 rdwr_nc_write_large_test 300 0.48
67 rdwr_nc_read_large_test 300 0.56
68 rdwr_nc_write_page_test 400 5.25
69 rdwr_nc_read_page_test 400 5.58
70 rdwr_nc_write_large_test 400 0.63
71 rdwr_nc_read_large_test 400 0.64
72 rdwr_nc_write_page_test 500 6.52
73 rdwr_nc_read_page_test 500 6.78
74 rdwr_nc_write_large_test 500 0.80
75 rdwr_nc_read_large_test 500 0.80
76 mmap_write_test 100 0.17
77 mmap_read_test 100 0.20
78 mmap_write_test 200 0.30
79 mmap_read_test 200 0.41
80 mmap_write_test 300 0.44
81 mmap_read_test 300 0.61
82 mmap_write_test 400 0.61
83 mmap_read_test 400 0.78
84 mmap_write_test 500 0.73
85 mmap_read_test 500 0.98

View File

@ -0,0 +1,30 @@
//ntfs
1000,0.92
2000,1.38
3000,1.11
4000,1.33
5000,1.94
//winfsp-t0
1000,0.20
2000,0.47
3000,0.59
4000,0.62
5000,1.08
//winfsp-t1
1000,0.06
2000,0.36
3000,0.58
4000,0.58
5000,0.95
//winfsp-tinf
1000,0.06
2000,0.44
3000,0.56
4000,0.59
5000,0.97
//dokany
1000,0.28
2000,0.67
3000,0.91
4000,1.25
5000,1.64
1 //ntfs
2 1000,0.92
3 2000,1.38
4 3000,1.11
5 4000,1.33
6 5000,1.94
7 //winfsp-t0
8 1000,0.20
9 2000,0.47
10 3000,0.59
11 4000,0.62
12 5000,1.08
13 //winfsp-t1
14 1000,0.06
15 2000,0.36
16 3000,0.58
17 4000,0.58
18 5000,0.95
19 //winfsp-tinf
20 1000,0.06
21 2000,0.44
22 3000,0.56
23 4000,0.59
24 5000,0.97
25 //dokany
26 1000,0.28
27 2000,0.67
28 3000,0.91
29 4000,1.25
30 5000,1.64

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

View File

@ -0,0 +1,30 @@
//ntfs
1000,0.19
2000,0.39
3000,0.56
4000,0.77
5000,1.03
//winfsp-t0
1000,0.09
2000,0.19
3000,0.27
4000,0.34
5000,0.45
//winfsp-t1
1000,0.06
2000,0.14
3000,0.22
4000,0.33
5000,0.34
//winfsp-tinf
1000,0.06
2000,0.14
3000,0.20
4000,0.27
5000,0.33
//dokany
1000,0.17
2000,0.36
3000,0.56
4000,0.72
5000,0.91
1 //ntfs
2 1000,0.19
3 2000,0.39
4 3000,0.56
5 4000,0.77
6 5000,1.03
7 //winfsp-t0
8 1000,0.09
9 2000,0.19
10 3000,0.27
11 4000,0.34
12 5000,0.45
13 //winfsp-t1
14 1000,0.06
15 2000,0.14
16 3000,0.22
17 4000,0.33
18 5000,0.34
19 //winfsp-tinf
20 1000,0.06
21 2000,0.14
22 3000,0.20
23 4000,0.27
24 5000,0.33
25 //dokany
26 1000,0.17
27 2000,0.36
28 3000,0.56
29 4000,0.72
30 5000,0.91

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

View File

@ -0,0 +1,30 @@
//ntfs
1000,0.08
2000,0.16
3000,0.23
4000,0.33
5000,0.41
//winfsp-t0
1000,0.11
2000,0.22
3000,0.33
4000,0.47
5000,0.61
//winfsp-t1
1000,0.09
2000,0.20
3000,0.33
4000,0.44
5000,0.59
//winfsp-tinf
1000,0.11
2000,0.20
3000,0.33
4000,0.44
5000,0.59
//dokany
1000,0.16
2000,0.36
3000,0.64
4000,0.97
5000,1.38
1 //ntfs
2 1000,0.08
3 2000,0.16
4 3000,0.23
5 4000,0.33
6 5000,0.41
7 //winfsp-t0
8 1000,0.11
9 2000,0.22
10 3000,0.33
11 4000,0.47
12 5000,0.61
13 //winfsp-t1
14 1000,0.09
15 2000,0.20
16 3000,0.33
17 4000,0.44
18 5000,0.59
19 //winfsp-tinf
20 1000,0.11
21 2000,0.20
22 3000,0.33
23 4000,0.44
24 5000,0.59
25 //dokany
26 1000,0.16
27 2000,0.36
28 3000,0.64
29 4000,0.97
30 5000,1.38

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

View File

@ -0,0 +1,30 @@
//ntfs
1000,0.08
2000,0.17
3000,0.23
4000,0.36
5000,0.45
//winfsp-t0
1000,0.06
2000,0.11
3000,0.27
4000,0.22
5000,0.28
//winfsp-t1
1000,0.16
2000,0.09
3000,0.20
4000,0.17
5000,0.22
//winfsp-tinf
1000,0.16
2000,0.08
3000,0.20
4000,0.16
5000,0.20
//dokany
1000,0.14
2000,0.27
3000,0.41
4000,0.55
5000,0.67
1 //ntfs
2 1000,0.08
3 2000,0.17
4 3000,0.23
5 4000,0.36
6 5000,0.45
7 //winfsp-t0
8 1000,0.06
9 2000,0.11
10 3000,0.27
11 4000,0.22
12 5000,0.28
13 //winfsp-t1
14 1000,0.16
15 2000,0.09
16 3000,0.20
17 4000,0.17
18 5000,0.22
19 //winfsp-tinf
20 1000,0.16
21 2000,0.08
22 3000,0.20
23 4000,0.16
24 5000,0.20
25 //dokany
26 1000,0.14
27 2000,0.27
28 3000,0.41
29 4000,0.55
30 5000,0.67

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

View File

@ -0,0 +1,30 @@
//ntfs
1000,0.19
2000,0.36
3000,0.72
4000,0.97
5000,1.14
//winfsp-t0
1000,0.05
2000,0.11
3000,0.17
4000,0.25
5000,0.30
//winfsp-t1
1000,0.05
2000,0.08
3000,0.16
4000,0.17
5000,0.22
//winfsp-tinf
1000,0.05
2000,0.09
3000,0.13
4000,0.19
5000,0.22
//dokany
1000,0.33
2000,0.67
3000,1.03
4000,1.34
5000,1.64
1 //ntfs
2 1000,0.19
3 2000,0.36
4 3000,0.72
5 4000,0.97
6 5000,1.14
7 //winfsp-t0
8 1000,0.05
9 2000,0.11
10 3000,0.17
11 4000,0.25
12 5000,0.30
13 //winfsp-t1
14 1000,0.05
15 2000,0.08
16 3000,0.16
17 4000,0.17
18 5000,0.22
19 //winfsp-tinf
20 1000,0.05
21 2000,0.09
22 3000,0.13
23 4000,0.19
24 5000,0.22
25 //dokany
26 1000,0.33
27 2000,0.67
28 3000,1.03
29 4000,1.34
30 5000,1.64

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

View File

@ -0,0 +1,30 @@
//ntfs
file_create_test,1.94
file_open_test,0.45
file_overwrite_test,1.14
file_list_test,0.41
file_delete_test,1.03
//winfsp-t0
file_create_test,1.08
file_open_test,0.28
file_overwrite_test,0.30
file_list_test,0.61
file_delete_test,0.45
//winfsp-t1
file_create_test,0.95
file_open_test,0.22
file_overwrite_test,0.22
file_list_test,0.59
file_delete_test,0.34
//winfsp-tinf
file_create_test,0.97
file_open_test,0.20
file_overwrite_test,0.22
file_list_test,0.59
file_delete_test,0.33
//dokany
file_create_test,1.64
file_open_test,0.67
file_overwrite_test,1.64
file_list_test,1.38
file_delete_test,0.91
1 //ntfs
2 file_create_test,1.94
3 file_open_test,0.45
4 file_overwrite_test,1.14
5 file_list_test,0.41
6 file_delete_test,1.03
7 //winfsp-t0
8 file_create_test,1.08
9 file_open_test,0.28
10 file_overwrite_test,0.30
11 file_list_test,0.61
12 file_delete_test,0.45
13 //winfsp-t1
14 file_create_test,0.95
15 file_open_test,0.22
16 file_overwrite_test,0.22
17 file_list_test,0.59
18 file_delete_test,0.34
19 //winfsp-tinf
20 file_create_test,0.97
21 file_open_test,0.20
22 file_overwrite_test,0.22
23 file_list_test,0.59
24 file_delete_test,0.33
25 //dokany
26 file_create_test,1.64
27 file_open_test,0.67
28 file_overwrite_test,1.64
29 file_list_test,1.38
30 file_delete_test,0.91

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

View File

@ -0,0 +1,24 @@
//ntfs
100,0.19
200,0.39
300,0.58
400,0.78
500,1.06
//winfsp-t0
100,0.20
200,0.39
300,0.59
400,0.77
500,1.00
//winfsp-t1
100,0.19
200,0.39
300,0.59
400,0.78
500,0.98
//winfsp-tinf
100,0.20
200,0.39
300,0.59
400,0.78
500,0.98
1 //ntfs
2 100,0.19
3 200,0.39
4 300,0.58
5 400,0.78
6 500,1.06
7 //winfsp-t0
8 100,0.20
9 200,0.39
10 300,0.59
11 400,0.77
12 500,1.00
13 //winfsp-t1
14 100,0.19
15 200,0.39
16 300,0.59
17 400,0.78
18 500,0.98
19 //winfsp-tinf
20 100,0.20
21 200,0.39
22 300,0.59
23 400,0.78
24 500,0.98

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

View File

@ -0,0 +1,24 @@
//ntfs
100,0.16
200,0.30
300,0.44
400,0.58
500,0.72
//winfsp-t0
100,0.14
200,0.30
300,0.45
400,0.56
500,0.72
//winfsp-t1
100,0.14
200,0.31
300,0.44
400,0.59
500,0.73
//winfsp-tinf
100,0.16
200,0.30
300,0.44
400,0.59
500,0.73
1 //ntfs
2 100,0.16
3 200,0.30
4 300,0.44
5 400,0.58
6 500,0.72
7 //winfsp-t0
8 100,0.14
9 200,0.30
10 300,0.45
11 400,0.56
12 500,0.72
13 //winfsp-t1
14 100,0.14
15 200,0.31
16 300,0.44
17 400,0.59
18 500,0.73
19 //winfsp-tinf
20 100,0.16
21 200,0.30
22 300,0.44
23 400,0.59
24 500,0.73

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

View File

@ -0,0 +1,74 @@
#!/usr/bin/python
# usage: ./munge.py ORIG/*.csv
# munge CSV files into a format that asciidocFX understands
import csv, os, sys
snames = ["ntfs", "winfsp-t0", "winfsp-t1", "winfsp-tinf", "dokany"]
file_tnames = [
"file_create_test",
"file_open_test",
"file_overwrite_test",
"file_list_test",
"file_delete_test"]
#"file_mkdir_test",
#"file_rmdir_test"]
rdwr_tnames = [
"rdwr_cc_read_page_test",
"rdwr_cc_write_page_test",
"rdwr_nc_read_page_test",
"rdwr_nc_write_page_test",
"mmap_read_test",
"mmap_write_test"]
tnames = file_tnames + rdwr_tnames
aggregate = min
tests = {}
for arg in sys.argv[1:]:
name = os.path.splitext(os.path.basename(arg))[0]
if name[-1].isdigit() and name[-2] == '-':
name = name[:-2]
with open(arg, "r") as fin:
for row in csv.reader(fin):
tests.\
setdefault(row[0], {}).\
setdefault(name, {}).\
setdefault(int(row[1]), []).\
append(float(row[2]))
if False:
for tname in (tnames if tnames else sorted(tests.keys())):
print "%s:" % tname
test = tests[tname]
for sname in (snames if snames else sorted(test.keys())):
if sname not in test:
continue
print " %s:" % sname
series = test[sname]
for param in sorted(series.keys()):
print " %s: %s -> %.2f" % (param, series[param], aggregate(series[param]))
else:
for tname in (tnames if tnames else sorted(tests.keys())):
with open(tname + ".csv", "w") as fout:
test = tests[tname]
for sname in (snames if snames else sorted(test.keys())):
if sname not in test:
continue
fout.write("//%s\r\n" % sname)
series = test[sname]
for param in sorted(series.keys()):
fout.write("%s,%.2f\r\n" % (param, aggregate(series[param])))
def master_write(fname, tnames):
with open(fname + ".csv", "w") as fout:
for sname in snames:
fout.write("//%s\r\n" % sname)
for tname in (tnames if tnames else sorted(tests.keys())):
test = tests[tname]
if sname not in test:
continue
series = test[sname]
param = max(series.keys())
fout.write("%s,%.2f\r\n" % (tname, aggregate(series[param])))
master_write("file_tests", file_tnames)
master_write("rdwr_tests", rdwr_tnames)

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