Compare commits

..

650 Commits

Author SHA1 Message Date
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
231 changed files with 28879 additions and 2920 deletions

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

79
Changelog.asciidoc Normal file
View File

@ -0,0 +1,79 @@
= Changelog
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

@ -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
(currently winfsp-x64.dll or winfsp-x86.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>.

View File

@ -1,16 +1,23 @@
# WinFsp - Windows File System Proxy
![WinFsp Demo](http://www.secfs.net/winfsp/files/cap.gif)
<a href="https://github.com/billziss-gh/winfsp/releases/download/v1.0RC1/winfsp-1.0.17009.msi"><img src="http://www.secfs.net/winfsp/resources/Download-WinFsp.png" alt="Download WinFsp Installer" width="244" height="34"></a>
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 and features of using WinFsp are listed below:
Some of the benefits of using WinFsp are listed below:
* 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.
* Very well-tested and stable. Read about its [Testing Strategy](doc/WinFsp-Testing.asciidoc).
* Very fast. Read about its [Performance](doc/WinFsp-Performance-Testing.asciidoc).
* Strives for compatibility with NTFS. Read about its [Compatibility](doc/NTFS-Compatibility.asciidoc ).
* Easy to understand but comprehensive API. Consult the [API Reference](http://www.secfs.net/winfsp/apiref/). There is also a simple [Tutorial](doc/WinFsp-Tutorial.asciidoc).
* FUSE compatibility layer for native Windows and Cygwin. See [fuse.h](inc/fuse/fuse.h).
* 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/
@ -21,7 +28,7 @@ WinFsp consists of a kernel mode FSD (File System Driver) and a user mode DLL (D
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.
* doc: The WinFsp design documents and additional documentation 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.
@ -34,10 +41,42 @@ The project source code is organized as follows:
* tst/memfs: Source code to an example file system written in C++ (memfs).
* tst/winfsp-tests: WinFsp test suite.
## 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:
* Windows 10
* Visual Studio 2015
* Windows Driver Kit (WDK) 10
* [Wix toolset](http://wixtoolset.org)
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`. For more information see this [document](http://www.secfs.net/winfsp/develop/debug/).
WinFsp is designed to run on Vista and above. It has been tested on the following platforms so far:
* Windows 7 Enterprise
* Windows 8 Pro
* Windows 10 Pro
* Windows Server 2012
* 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, C#, 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,38 @@
version: '{build}'
environment:
CONFIGURATION: Release
matrix:
- CONFIGURATION: Debug
TESTING: Func
- CONFIGURATION: Release
TESTING: Func
- CONFIGURATION: Release
TESTING: Perf
install:
- git submodule update --init --recursive
- appveyor AddMessage "Change boot configuration and reboot" -Category Information
- bcdedit /set testsigning on
- if %TESTING%==Func verifier /standard /driver winfsp-x64.sys
- if exist %SystemRoot%\memory.dmp del %SystemRoot%\memory.dmp
- ps: Restart-Computer -Force
- ps: Start-Sleep -s 10
- ps: Start-Sleep -s 60
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%
- if %TESTING%==Func appveyor DownloadFile http://www.secfs.net/winfsp/resources/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%==Perf tools\run-perf-tests.bat %CONFIGURATION% baseline > perf-tests.csv && type perf-tests.csv & appveyor PushArtifact perf-tests.csv
- if exist %SystemRoot%\memory.dmp exit 1
on_finish:
- if exist %SystemRoot%\memory.dmp (7z a memory.dmp.zip %SystemRoot%\memory.dmp && appveyor PushArtifact memory.dmp.zip)
- verifier /query

BIN
art/winfsp-outln.afdesign Normal file

Binary file not shown.

BIN
art/winfsp-solid.afdesign Normal file

Binary file not shown.

BIN
art/winfsp-solid.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
art/wixbanner.pxm Normal file

Binary file not shown.

BIN
art/wixdialog.pxm Normal file

Binary file not shown.

View File

@ -1,14 +1,14 @@
/**
* @file CustomActions.cpp
*
* @copyright 2015-2016 Bill Zissimopoulos
* @copyright 2015-2017 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

View File

@ -2,7 +2,7 @@
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product
Id="*"
Name="$(var.MyProductName)"
Name="$(var.MyProductName) $(var.MyProductVersion)"
Manufacturer="$(var.MyCompanyName)"
Version="$(var.MyVersion)"
Language="1033"
@ -17,12 +17,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." />
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="WinFsp.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
@ -40,18 +40,23 @@
<Directory Id="INCDIR" Name="inc" />
<Directory Id="LIBDIR" Name="lib" />
<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]" />
Value="[INSTALLDIR]"
KeyPath="yes" />
</Component>
<Component Id="C.License.txt">
<File Name="License.txt" Source="..\..\..\License.txt" KeyPath="yes" />
</Component>
</DirectoryRef>
<DirectoryRef Id="BINDIR" FileSource="..\build\$(var.Configuration)">
@ -135,6 +140,13 @@
<File Name="launchctl-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 +161,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 +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"
@ -252,6 +264,78 @@
<File Name="memfs-main.c" 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_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>
</DirectoryRef>
<DirectoryRef Id="SYMDIR">
<Component Id="C.winfsp_x64.sys.pdb">
<File Name="winfsp-x64.sys.pdb" Source="..\build\$(var.Configuration)\winfsp-x64.sys.public.pdb" KeyPath="yes" />
</Component>
<Component Id="C.winfsp_x86.sys.pdb">
<File Name="winfsp-x86.sys.pdb" Source="..\build\$(var.Configuration)\winfsp-x86.sys.public.pdb" KeyPath="yes" />
</Component>
<Component Id="C.winfsp_x64.dll.pdb">
<File Name="winfsp-x64.dll.pdb" Source="..\build\$(var.Configuration)\winfsp-x64.dll.public.pdb" KeyPath="yes" />
</Component>
<Component Id="C.winfsp_x86.dll.pdb">
<File Name="winfsp-x86.dll.pdb" Source="..\build\$(var.Configuration)\winfsp-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.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">
@ -267,6 +351,8 @@
<ComponentRef Id="C.launcher_x86.exe.svcinst" />
<ComponentRef Id="C.launchctl_x64.exe" />
<ComponentRef Id="C.launchctl_x86.exe" />
<ComponentRef Id="C.diag.bat" />
<ComponentRef Id="C.fsreg.bat" />
</ComponentGroup>
<ComponentGroup Id="C.WinFsp.inc">
<ComponentRef Id="C.fsctl.h" />
@ -288,12 +374,36 @@
<ComponentRef Id="C.memfs.h" />
<ComponentRef Id="C.memfs.cpp" />
<ComponentRef Id="C.memfs_main.c" />
<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_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" />
</ComponentGroup>
<ComponentGroup Id="C.WinFsp.sym">
<ComponentRef Id="C.winfsp_x64.sys.pdb" />
<ComponentRef Id="C.winfsp_x86.sys.pdb" />
<ComponentRef Id="C.winfsp_x86.dll.pdb" />
<ComponentRef Id="C.winfsp_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.memfs_x64.pdb" />
<ComponentRef Id="C.memfs_x86.pdb" />
</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 +411,7 @@
InstallDefault="local"
Absent="disallow">
<ComponentRef Id="C.INSTALLDIR" />
<ComponentRef Id="C.License.txt" />
<Feature
Id="F.User"
Level="1"
@ -322,9 +433,12 @@
<ComponentGroupRef Id="C.WinFsp.inc" />
<ComponentGroupRef Id="C.WinFsp.lib" />
<ComponentGroupRef Id="C.WinFsp.smp" />
<ComponentGroupRef Id="C.WinFsp.sym" />
</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) -->

View File

@ -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);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);MyDescription=$(MyDescription);MyCompanyName=$(MyCompanyName);MyCopyright=$(MyCopyright);MyProductVersion=$(MyProductVersion);MyProductStage=$(MyProductStage);MyVersion=$(MyVersion);MyFullVersion=$(MyFullVersion)</DefineConstants>
<SuppressAllWarnings>False</SuppressAllWarnings>
<Pedantic>True</Pedantic>
<SuppressPdbOutput>True</SuppressPdbOutput>

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 601 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 601 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 601 KiB

View File

@ -105,11 +105,14 @@
<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 +126,14 @@
<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,6 +148,8 @@
<AdditionalIncludeDirectories>..\..\..\src;..\..\..\inc</AdditionalIncludeDirectories>
<BufferSecurityCheck>false</BufferSecurityCheck>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<AdditionalOptions>
</AdditionalOptions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
@ -149,6 +157,7 @@
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
<StripPrivateSymbols>$(OutDir)$(TargetName).public.pdb</StripPrivateSymbols>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
@ -163,6 +172,8 @@
<AdditionalIncludeDirectories>..\..\..\src;..\..\..\inc</AdditionalIncludeDirectories>
<BufferSecurityCheck>false</BufferSecurityCheck>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<AdditionalOptions>
</AdditionalOptions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
@ -170,6 +181,7 @@
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
<StripPrivateSymbols>$(OutDir)$(TargetName).public.pdb</StripPrivateSymbols>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
@ -181,10 +193,10 @@
</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>

View File

@ -105,11 +105,15 @@
<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</AdditionalDependencies>
<StripPrivateSymbols>$(OutDir)$(TargetName).public.pdb</StripPrivateSymbols>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
@ -123,11 +127,15 @@
<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</AdditionalDependencies>
<StripPrivateSymbols>$(OutDir)$(TargetName).public.pdb</StripPrivateSymbols>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@ -142,6 +150,8 @@
<AdditionalIncludeDirectories>..\..\..\src;..\..\..\inc</AdditionalIncludeDirectories>
<BufferSecurityCheck>false</BufferSecurityCheck>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<AdditionalOptions>
</AdditionalOptions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
@ -149,6 +159,8 @@
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
<AdditionalDependencies>%(AdditionalDependencies);rpcrt4.lib</AdditionalDependencies>
<StripPrivateSymbols>$(OutDir)$(TargetName).public.pdb</StripPrivateSymbols>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
@ -163,6 +175,8 @@
<AdditionalIncludeDirectories>..\..\..\src;..\..\..\inc</AdditionalIncludeDirectories>
<BufferSecurityCheck>false</BufferSecurityCheck>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<AdditionalOptions>
</AdditionalOptions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
@ -170,6 +184,8 @@
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
<AdditionalDependencies>%(AdditionalDependencies);rpcrt4.lib</AdditionalDependencies>
<StripPrivateSymbols>$(OutDir)$(TargetName).public.pdb</StripPrivateSymbols>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
@ -186,10 +202,10 @@
</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>
<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>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

View File

@ -0,0 +1,187 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<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>8.1</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>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v140</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>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v140</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>
<GenerateDebugInformation>true</GenerateDebugInformation>
</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>
<GenerateDebugInformation>true</GenerateDebugInformation>
</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>
<GenerateDebugInformation>true</GenerateDebugInformation>
</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>
<GenerateDebugInformation>true</GenerateDebugInformation>
</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,185 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<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>8.1</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>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v140</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>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v140</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>
<GenerateDebugInformation>true</GenerateDebugInformation>
</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>
<GenerateDebugInformation>true</GenerateDebugInformation>
</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>
<GenerateDebugInformation>true</GenerateDebugInformation>
</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>
<GenerateDebugInformation>true</GenerateDebugInformation>
</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

@ -108,6 +108,7 @@
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<StripPrivateSymbols>$(OutDir)$(TargetName).public.pdb</StripPrivateSymbols>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
@ -124,6 +125,7 @@
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<StripPrivateSymbols>$(OutDir)$(TargetName).public.pdb</StripPrivateSymbols>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@ -144,6 +146,7 @@
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<StripPrivateSymbols>$(OutDir)$(TargetName).public.pdb</StripPrivateSymbols>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
@ -164,6 +167,7 @@
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<StripPrivateSymbols>$(OutDir)$(TargetName).public.pdb</StripPrivateSymbols>
</Link>
</ItemDefinitionGroup>
<ItemGroup>

View File

@ -107,7 +107,7 @@
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>ntdll.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>ntdll.lib;netapi32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
@ -124,7 +124,7 @@
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>ntdll.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>ntdll.lib;netapi32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@ -145,7 +145,7 @@
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>ntdll.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>ntdll.lib;netapi32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
@ -166,7 +166,7 @@
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>ntdll.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>ntdll.lib;netapi32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
@ -182,24 +182,31 @@
</ClCompile>
<ClCompile Include="..\..\..\tst\memfs\memfs.cpp" />
<ClCompile Include="..\..\..\tst\winfsp-tests\create-test.c" />
<ClCompile Include="..\..\..\tst\winfsp-tests\dirbuf-test.c" />
<ClCompile Include="..\..\..\tst\winfsp-tests\dirctl-test.c" />
<ClCompile Include="..\..\..\tst\winfsp-tests\eventlog-test.c" />
<ClCompile Include="..\..\..\tst\winfsp-tests\flush-test.c" />
<ClCompile Include="..\..\..\tst\winfsp-tests\fuse-opt-test.c" />
<ClCompile Include="..\..\..\tst\winfsp-tests\hooks.c" />
<ClCompile Include="..\..\..\tst\winfsp-tests\info-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\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\winfsp-tests.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">

View File

@ -61,6 +61,24 @@
<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>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\ext\tlib\testsuite.h">
@ -69,5 +87,8 @@
<ClInclude Include="..\..\..\tst\memfs\memfs.h">
<Filter>Source</Filter>
</ClInclude>
<ClInclude Include="..\..\..\tst\winfsp-tests\winfsp-tests.h">
<Filter>Source</Filter>
</ClInclude>
</ItemGroup>
</Project>

View File

@ -1,13 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<!-- build number: concat 2-digit year with 3-digit day of the year (16-bits until 2066) -->
<MyBuildNumber>$([System.DateTime]::Now.ToString(`yy`))$([System.DateTime]::Now.DayOfYear.ToString(`000`))</MyBuildNumber>
<!-- git revision -->
<MyGitRoot>$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), .git/HEAD))</MyGitRoot>
<MyGitHead>$([System.IO.File]::ReadAllText($(MyGitRoot)/.git/HEAD).Trim())</MyGitHead>
<MyGitRevision Condition="$(MyGitHead.StartsWith(ref: ))">$([System.IO.File]::ReadAllText($(MyGitRoot)/.git/$(MyGitHead.Substring(5))).Trim().Substring(0, 7))</MyGitRevision>
<MyGitRevision Condition="!$(MyGitHead.StartsWith(ref: ))">$(MyGitHead.Substring(0, 7))</MyGitRevision>
<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>
<MyCopyright>2015-$([System.DateTime]::Now.ToString(`yyyy`)) Bill Zissimopoulos</MyCopyright>
<MyCanonicalVersion>1.0</MyCanonicalVersion>
<MyProductVersion>2017 RC2</MyProductVersion>
<MyProductStage>RC</MyProductStage>
<MyVersion>$(MyCanonicalVersion).$(MyBuildNumber)</MyVersion>
<MyVersionWithCommas>$(MyVersion.Replace('.',',')),0</MyVersionWithCommas>
<MyFullVersion>$(MyCanonicalVersion).$(MyBuildNumber).$(MyGitRevision)</MyFullVersion>
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<PreprocessorDefinitions>NTDDI_VERSION=0x06010000;_WIN32_WINNT=0x0601</PreprocessorDefinitions>
</ClCompile>
<ResourceCompile>
<PreprocessorDefinitions>MyProductName=$(MyProductName);MyDescription=$(MyDescription);MyCompanyName=$(MyCompanyName);MyCopyright=$(MyCopyright);MyProductVersion=$(MyProductVersion);MyProductStage=$(MyProductStage);MyVersion=$(MyVersion);MyVersionWithCommas=$(MyVersionWithCommas);MyFullVersion=$(MyFullVersion)</PreprocessorDefinitions>
</ResourceCompile>
</ItemDefinitionGroup>
</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
@ -45,6 +45,14 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "launchctl", "launcher\launc
{A5EFD487-0140-4184-8C54-FFAEC2F85E35} = {A5EFD487-0140-4184-8C54-FFAEC2F85E35}
EndProjectSection
EndProject
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}") = "fsbench", "testing\fsbench.vcxproj", "{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
@ -153,6 +161,38 @@ Global
{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|x64.Build.0 = Debug|x64
{10757011-749D-4954-873B-AE38D8145472}.Installer.Debug|x86.ActiveCfg = Debug|Win32
{10757011-749D-4954-873B-AE38D8145472}.Installer.Debug|x86.Build.0 = Debug|Win32
{10757011-749D-4954-873B-AE38D8145472}.Installer.Release|x64.ActiveCfg = Release|x64
{10757011-749D-4954-873B-AE38D8145472}.Installer.Release|x64.Build.0 = Release|x64
{10757011-749D-4954-873B-AE38D8145472}.Installer.Release|x86.ActiveCfg = Release|Win32
{10757011-749D-4954-873B-AE38D8145472}.Installer.Release|x86.Build.0 = 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|x64.Build.0 = Debug|x64
{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Installer.Debug|x86.ActiveCfg = Debug|Win32
{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Installer.Debug|x86.Build.0 = Debug|Win32
{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Installer.Release|x64.ActiveCfg = Release|x64
{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Installer.Release|x64.Build.0 = Release|x64
{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Installer.Release|x86.ActiveCfg = Release|Win32
{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Installer.Release|x86.Build.0 = 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
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -164,5 +204,7 @@ Global
{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}
EndGlobalSection
EndGlobal

View File

@ -31,6 +31,7 @@
<ClInclude Include="..\..\src\shared\minimal.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\src\dll\dirbuf.c" />
<ClCompile Include="..\..\src\dll\eventlog.c" />
<ClCompile Include="..\..\src\dll\fuse\fuse.c" />
<ClCompile Include="..\..\src\dll\fuse\fuse_intf.c" />
@ -50,7 +51,7 @@
<ClCompile Include="..\..\src\dll\util.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>
@ -78,10 +79,10 @@ copy /b $(OutDir)fuse-$(PlatformTarget).pc + %(FullPath) $(OutDir)fuse-$(Platfor
<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">
@ -173,6 +174,8 @@ 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>
@ -182,7 +185,8 @@ 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;version.lib</AdditionalDependencies>
<StripPrivateSymbols>$(OutDir)$(TargetFileName).public.pdb</StripPrivateSymbols>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
@ -198,6 +202,8 @@ 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>
@ -207,7 +213,8 @@ 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;version.lib</AdditionalDependencies>
<StripPrivateSymbols>$(OutDir)$(TargetFileName).public.pdb</StripPrivateSymbols>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@ -224,6 +231,8 @@ 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>
@ -235,7 +244,8 @@ 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;version.lib</AdditionalDependencies>
<StripPrivateSymbols>$(OutDir)$(TargetFileName).public.pdb</StripPrivateSymbols>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
@ -252,6 +262,8 @@ 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>
@ -263,7 +275,8 @@ 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;version.lib</AdditionalDependencies>
<StripPrivateSymbols>$(OutDir)$(TargetFileName).public.pdb</StripPrivateSymbols>
</Link>
</ItemDefinitionGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

View File

@ -103,6 +103,9 @@
<ClCompile Include="..\..\src\dll\fuse\fuse_intf.c">
<Filter>Source\fuse</Filter>
</ClCompile>
<ClCompile Include="..\..\src\dll\dirbuf.c">
<Filter>Source</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<None Include="..\..\src\dll\library.def">
@ -118,6 +121,8 @@
</ResourceCompile>
</ItemGroup>
<ItemGroup>
<CustomBuild Include="..\..\src\dll\fuse\fuse.pc" />
<CustomBuild Include="..\..\src\dll\fuse\fuse.pc.in">
<Filter>Source\fuse</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>
@ -105,6 +109,7 @@
<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'">
@ -117,6 +122,7 @@
<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)'=='Debug|x64'">
@ -129,6 +135,7 @@
<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'">
@ -141,6 +148,7 @@
<GenerateMapFile>true</GenerateMapFile>
<ProgramDatabaseFile>$(OutDir)$(TargetFileName).pdb</ProgramDatabaseFile>
<MapFileName>$(OutDir)$(TargetFileName).map</MapFileName>
<StripPrivateSymbols>$(OutDir)$(TargetFileName).public.pdb</StripPrivateSymbols>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
@ -165,9 +173,11 @@
<ClCompile Include="..\..\src\sys\ioq.c" />
<ClCompile Include="..\..\src\sys\lockctl.c" />
<ClCompile Include="..\..\src\sys\meta.c" />
<ClCompile Include="..\..\src\sys\name.c" />
<ClCompile Include="..\..\src\sys\read.c" />
<ClCompile Include="..\..\src\sys\security.c" />
<ClCompile Include="..\..\src\sys\shutdown.c" />
<ClCompile Include="..\..\src\sys\statistics.c" />
<ClCompile Include="..\..\src\sys\util.c" />
<ClCompile Include="..\..\src\sys\volinfo.c" />
<ClCompile Include="..\..\src\sys\volume.c" />
@ -180,12 +190,77 @@
</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 -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 -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 -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 -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

@ -92,6 +92,12 @@
<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>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\src\sys\driver.h">
@ -106,4 +112,9 @@
<Filter>Source</Filter>
</ResourceCompile>
</ItemGroup>
<ItemGroup>
<CustomBuild Include="..\..\src\sys\driver.inf.in">
<Filter>Source</Filter>
</CustomBuild>
</ItemGroup>
</Project>

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

@ -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.

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.

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)

View File

@ -0,0 +1,30 @@
//ntfs
100,0.19
200,0.42
300,0.61
400,0.78
500,0.97
//winfsp-t0
100,1.44
200,2.97
300,4.20
400,5.64
500,6.83
//winfsp-t1
100,1.47
200,3.00
300,4.45
400,5.78
500,7.33
//winfsp-tinf
100,0.28
200,0.58
300,0.87
400,1.12
500,1.48
//dokany
100,2.23
200,4.58
300,6.78
400,9.02
500,11.20
1 //ntfs
2 100,0.19
3 200,0.42
4 300,0.61
5 400,0.78
6 500,0.97
7 //winfsp-t0
8 100,1.44
9 200,2.97
10 300,4.20
11 400,5.64
12 500,6.83
13 //winfsp-t1
14 100,1.47
15 200,3.00
16 300,4.45
17 400,5.78
18 500,7.33
19 //winfsp-tinf
20 100,0.28
21 200,0.58
22 300,0.87
23 400,1.12
24 500,1.48
25 //dokany
26 100,2.23
27 200,4.58
28 300,6.78
29 400,9.02
30 500,11.20

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

View File

@ -0,0 +1,30 @@
//ntfs
100,0.25
200,0.47
300,0.69
400,0.91
500,1.19
//winfsp-t0
100,1.30
200,2.63
300,3.91
400,5.23
500,6.12
//winfsp-t1
100,1.30
200,2.47
300,3.89
400,4.92
500,6.17
//winfsp-tinf
100,0.34
200,0.67
300,1.01
400,1.38
500,1.70
//dokany
100,2.08
200,4.23
300,6.33
400,8.48
500,10.33
1 //ntfs
2 100,0.25
3 200,0.47
4 300,0.69
5 400,0.91
6 500,1.19
7 //winfsp-t0
8 100,1.30
9 200,2.63
10 300,3.91
11 400,5.23
12 500,6.12
13 //winfsp-t1
14 100,1.30
15 200,2.47
16 300,3.89
17 400,4.92
18 500,6.17
19 //winfsp-tinf
20 100,0.34
21 200,0.67
22 300,1.01
23 400,1.38
24 500,1.70
25 //dokany
26 100,2.08
27 200,4.23
28 300,6.33
29 400,8.48
30 500,10.33

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

View File

@ -0,0 +1,30 @@
//ntfs
100,9.38
200,21.39
300,19.56
400,26.11
500,33.05
//winfsp-t0
100,1.33
200,2.64
300,4.06
400,5.42
500,6.41
//winfsp-t1
100,1.38
200,2.78
300,4.23
400,5.52
500,6.94
//winfsp-tinf
100,1.36
200,2.81
300,3.95
400,5.19
500,6.58
//dokany
100,2.22
200,4.34
300,6.34
400,8.67
500,10.59
1 //ntfs
2 100,9.38
3 200,21.39
4 300,19.56
5 400,26.11
6 500,33.05
7 //winfsp-t0
8 100,1.33
9 200,2.64
10 300,4.06
11 400,5.42
12 500,6.41
13 //winfsp-t1
14 100,1.38
15 200,2.78
16 300,4.23
17 400,5.52
18 500,6.94
19 //winfsp-tinf
20 100,1.36
21 200,2.81
22 300,3.95
23 400,5.19
24 500,6.58
25 //dokany
26 100,2.22
27 200,4.34
28 300,6.34
29 400,8.67
30 500,10.59

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

View File

@ -0,0 +1,30 @@
//ntfs
100,7.55
200,14.36
300,21.58
400,28.52
500,35.45
//winfsp-t0
100,1.30
200,2.67
300,3.95
400,5.33
500,6.41
//winfsp-t1
100,1.30
200,2.61
300,3.94
400,5.36
500,6.51
//winfsp-tinf
100,1.31
200,2.56
300,3.86
400,5.11
500,6.42
//dokany
100,2.20
200,4.66
300,6.44
400,8.56
500,10.73
1 //ntfs
2 100,7.55
3 200,14.36
4 300,21.58
5 400,28.52
6 500,35.45
7 //winfsp-t0
8 100,1.30
9 200,2.67
10 300,3.95
11 400,5.33
12 500,6.41
13 //winfsp-t1
14 100,1.30
15 200,2.61
16 300,3.94
17 400,5.36
18 500,6.51
19 //winfsp-tinf
20 100,1.31
21 200,2.56
22 300,3.86
23 400,5.11
24 500,6.42
25 //dokany
26 100,2.20
27 200,4.66
28 300,6.44
29 400,8.56
30 500,10.73

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

View File

@ -0,0 +1,33 @@
//ntfs
rdwr_cc_read_page_test,0.97
rdwr_cc_write_page_test,1.19
rdwr_nc_read_page_test,33.05
rdwr_nc_write_page_test,35.45
mmap_read_test,1.06
mmap_write_test,0.72
//winfsp-t0
rdwr_cc_read_page_test,6.83
rdwr_cc_write_page_test,6.12
rdwr_nc_read_page_test,6.41
rdwr_nc_write_page_test,6.41
mmap_read_test,1.00
mmap_write_test,0.72
//winfsp-t1
rdwr_cc_read_page_test,7.33
rdwr_cc_write_page_test,6.17
rdwr_nc_read_page_test,6.94
rdwr_nc_write_page_test,6.51
mmap_read_test,0.98
mmap_write_test,0.73
//winfsp-tinf
rdwr_cc_read_page_test,1.48
rdwr_cc_write_page_test,1.70
rdwr_nc_read_page_test,6.58
rdwr_nc_write_page_test,6.42
mmap_read_test,0.98
mmap_write_test,0.73
//dokany
rdwr_cc_read_page_test,11.20
rdwr_cc_write_page_test,10.33
rdwr_nc_read_page_test,10.59
rdwr_nc_write_page_test,10.73
1 //ntfs
2 rdwr_cc_read_page_test,0.97
3 rdwr_cc_write_page_test,1.19
4 rdwr_nc_read_page_test,33.05
5 rdwr_nc_write_page_test,35.45
6 mmap_read_test,1.06
7 mmap_write_test,0.72
8 //winfsp-t0
9 rdwr_cc_read_page_test,6.83
10 rdwr_cc_write_page_test,6.12
11 rdwr_nc_read_page_test,6.41
12 rdwr_nc_write_page_test,6.41
13 mmap_read_test,1.00
14 mmap_write_test,0.72
15 //winfsp-t1
16 rdwr_cc_read_page_test,7.33
17 rdwr_cc_write_page_test,6.17
18 rdwr_nc_read_page_test,6.94
19 rdwr_nc_write_page_test,6.51
20 mmap_read_test,0.98
21 mmap_write_test,0.73
22 //winfsp-tinf
23 rdwr_cc_read_page_test,1.48
24 rdwr_cc_write_page_test,1.70
25 rdwr_nc_read_page_test,6.58
26 rdwr_nc_write_page_test,6.42
27 mmap_read_test,0.98
28 mmap_write_test,0.73
29 //dokany
30 rdwr_cc_read_page_test,11.20
31 rdwr_cc_write_page_test,10.33
32 rdwr_nc_read_page_test,10.59
33 rdwr_nc_write_page_test,10.73

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

View File

@ -20,19 +20,21 @@ In order to overcome the issue with launching multiple instances of a particular
Services that wish to be controlled by the WinFsp.Launcher must add themselves under the following registry key:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinFsp.Launcher\Services
HKEY_LOCAL_MACHINE\Software\WinFsp\Services
For example, the MEMFS sample adds the following registry entries under this key:
NOTE: Please note that in a 64-bit system the actual location is `HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\WinFsp\Services`.
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinFsp.Launcher\Services\memfs32]
For example, the MEMFS sample adds the following registry entries in a 64-bit system:
[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\WinFsp\Services\memfs32]
"Executable"="C:\\Program Files (x86)\\WinFsp\\bin\\memfs-x86.exe"
"CommandLine"="-u %1 -m %2"
"CommandLine"="-i -F NTFS -n 65536 -s 67108864 -u %1 -m %2"
"Security"="D:P(A;;RPWPLC;;;WD)"
"JobControl"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinFsp.Launcher\Services\memfs64]
[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\WinFsp\Services\memfs64]
"Executable"="C:\\Program Files (x86)\\WinFsp\\bin\\memfs-x64.exe"
"CommandLine"="-u %1 -m %2"
"CommandLine"="-i -F NTFS -n 65536 -s 67108864 -u %1 -m %2"
"Security"="D:P(A;;RPWPLC;;;WD)"
"JobControl"=dword:00000001
@ -44,4 +46,4 @@ One final note regarding security. Notice the `Security` registry value in the e
WinFsp includes a Network Provider that integrates with Windows and can be used to start and stop user mode file systems from the Windows shell. To achieve this the Network Provider (implemented as part of the WinFsp DLL) works closely with the WinFsp.Launcher service.
For example, if a user uses the Windows Explorer to map `\\memfs64\share` to the `Z:` drive, the Network Provider will instruct the WinFsp.Launcher to start an instance of the memfs64 service with command line `-u \\memfs64\share -m Z:`. When the user disconnects the `Z:` drive, the Network Provider will instruct the WinFsp.Launcher to stop the previously started instance of the memfs64 service.
For example, if a user uses the Windows Explorer to map `\\memfs64\share` to the `Z:` drive, the Network Provider will instruct the WinFsp.Launcher to start an instance of the memfs64 service with command line `-i -F NTFS -n 65536 -s 67108864 -u \\memfs64\share -m Z:`. When the user disconnects the `Z:` drive, the Network Provider will instruct the WinFsp.Launcher to stop the previously started instance of the memfs64 service.

130
doc/WinFsp-Testing.asciidoc Normal file
View File

@ -0,0 +1,130 @@
= WinFsp Testing Strategy
WinFsp maintains quality through rigorous testing under a variety of scenarios. This document discusses its testing strategy.
== Importance of Testing
A file system is a fundamental block of an OS. It provides the primary means for storing persistent information and capturing system state. A file system must not only be reliable and stable when the computer is running, it must also store data in a manner as to eliminate data loss or data corruption. Furthermore a file system must provide semantics that closely adhere to existing standards and conventions for its OS to avoid confusion or even accidental corruption from programs that use it. For these reasons rigorous and extensive testing of a file system is of paramount importance.
WinFsp enables the creation of user mode file systems that fully integrate with the Windows OS. WinFsp is a system component and the user mode file systems that integrate with it also become system components. The need for thorough testing of WinFsp becomes apparent.
== Test Suites
WinFsp currently has the following test suites:
- *Winfsp-tests*: This test suite provides comprehensive testing of WinFsp's capabilities under various scenarios. This includes general Win32 (and NTDLL) file API testing, but also includes WinFsp specific tests, such as incorrectly functioning user mode file systems. The non-WinFsp specific tests are verified against NTFS.
+
This test suite is developed together with WinFsp. It is written in C/C++ and provides a form of gray box testing.
- *Winfstest*: This is another test suite that verifies general file system functionality. It is not WinFsp specific and all its tests pass on NTFS.
+
This test suite is written in Python and C and was originally developed for the secfs.test collection of file system test programs by the WinFsp author. It provides a form of black box testing.
- *IfsTest*: This is Microsoft's Installable File System Test Suite. It is used to verify that WinFsp behavior closely resembles that of NTFS.
+
This test suite is part of the Windows Hardware Lab Kit (HLK). It provides a form of black box testing.
- *FSX*: This is Apple's FSX ported to Windows by the WinFsp author. FSX is very good at finding problems with read/write and memory-mapped I/O.
- *Fscrash*: This is a tool that simulates a faulty or crashing user mode file system. It is used to test the fault tolerance of WinFsp.
+
This test is developed together with WinFsp. It is written in C/C++.
- *Fsbench*: This is a tool that can be used to test the performance of Windows file systems under different scenarios. It can work with any Windows file system and is not specific to WinFsp.
+
This tool is currently developed together with WinFsp. It is written in C.
These test suites and a few smaller tests are run through Continuous Integration testing every time a push is made into the WinFsp repository.
=== Test File System
WinFsp includes a test user mode file system called *MEMFS*. This is a simple in memory file system written in C/C++. MEMFS implements all file system features that WinFsp supports. MEMFS also performs various user mode file system checks during testing, for example, it checks that the buffer received during WRITE calls is read-only.
== Tested Scenarios
The combined test suites exercise the majority of Win32 file API's and a few NTDLL ones. The tested API's include:
- API's to create, open, close files/streams.
- API's to perform file/stream I/O in cached, non-cached, write-through, overlapped, etc. modes.
- API's to perform memory mapped I/O.
- API's to get or set file/stream metadata and security.
- API's to rename or delete files/streams.
- API's to enumerate directories and streams.
- API's that act on reparse points and symbolic links.
These tests are run under a variety of conditions:
- When the file system is a "disk" file system (+FILE_DEVICE_DISK_FILE_SYSTEM+).
- When the file system is a "network" file system (+FILE_DEVICE_NETWORK_FILE_SYSTEM+).
- When the file system is a "disk" file system exposed as a network share (+NetShareAdd+).
- When the file system is mapped as a drive (+DefineDosDeviceW+).
- When the file system is mounted on a directory (using junctions).
- When the file system is case-sensitive or case-insensitive.
- When the process making the API calls lacks the traverse privilege (+SE_CHANGE_NOTIFY_NAME+).
- When the process making the API calls has the backup or restore privilege (+SE_BACKUP_NAME+, +SE_RESTORE_NAME+).
Not all tests apply to all conditions. The test suites will disable/skip tests that do not apply to a particular scenario.
In addition the tests are run both on Debug and Release builds. Debug builds includes numerous ASSERT() statements that test various conditions within the WinFsp code.
=== Coverage
Windows File System Drivers (FSD) run in a variety of conditions that are not always easy to replicate during testing. For example, an FSD may not be able to get locks to perform an operation, in which case it may retry the operation later. Or it may be unable to allocate memory for a MustSucceed task, in which case it may wait a bit and retry.
Such situations may not arise during normal testing. For this reason, WinFsp uses the +DEBUGTEST()+ macro, which takes a single +Percent+ argument. In Release builds this macro always evaluates to +TRUE+. In Debug builds this macro may evaluate to +TRUE+ or +FALSE+ depending on the value of the +Percent+ argument, which specifies the percentage of times that +DEBUGTEST()+ should evaluate to +TRUE+. For example, a +DEBUGTEST(90)+ means that 90% of the time the macro should evaluate to +TRUE+ and 10% of the time it should evaluate to +FALSE+.
The WinFsp FSD uses the +DEBUGTEST()+ macro in various places where an operation may have to be retried. For example, here is how it handles deferred writes:
----
/* should we defer the write? */
Success = DEBUGTEST(90) && CcCanIWrite(FileObject, WriteLength, CanWait, Retrying);
if (!Success)
{
Result = FspWqCreateIrpWorkItem(Irp, FspFsvolWriteCached, 0);
if (NT_SUCCESS(Result))
{
IoMarkIrpPending(Irp);
CcDeferWrite(FileObject, FspFsvolWriteCachedDeferred, Irp, 0, WriteLength, Retrying);
return STATUS_PENDING;
}
/* if we are unable to defer we will go ahead and (try to) service the IRP now! */
}
----
In Release builds the +DEBUGTEST(90)+ macro will evaluate to +TRUE+ and the Cache Manager will be asked directly via +CcCanIWrite+ whether a WRITE should be deferred. In Debug builds the +DEBUGTEST(90)+ macro will evaluate to +FALSE+ sometimes (10% of the time) and the WRITE will be deferred, thus allowing us to test the retry code path.
== Compatibility Testing
WinFsp allows the creation of user mode file systems that exhibit behavior similar to NTFS. This means that Windows applications that use such a file system should not be able to tell the difference between NTFS and the WinFsp-based file system. OTOH specialized applications (such as Defrag) will not work properly on WinFsp file systems.
WinFsp uses the winfsp-tests, winfstest and ifstest test suites for compatibility testing. These test suites verify that WinFsp and NTFS have very similar behavior. There is a separate document that examines the differences between WinFsp and NTFS in more detail.
== Fault Tolerance Testing
User mode file systems are normal user mode processes and as such they may fail in a variety of conditions. For example, a user mode file system may trigger an access violation while servicing a file operation. As another example, the developer of a user mode file system may terminate the file system process forcefully from within a debugger.
In such cases WinFsp is able to recover gracefully and clean up its resources and data structures. This is a fundamental capability of WinFsp and one that must be tested thoroughly.
For this purpose WinFsp is tested using the fscrash tool. Fscrash includes a special version of MEMFS, where file operations can potentially cause a crash. Fscrash also includes a simple test that is run in a loop until the included file system crashes. When the OS kills the process, the WinFsp FSD steps in and cleans up all resources used by the faulty file system. The intent of the test is to verify that WinFsp handles the crash properly, without leaving any leaks and without crashing the OS.
== Verifier
All development and testing of WinFsp is done under the Driver Verifier with standard settings enabled. The Driver Verifier is an invaluable tool for Windows Driver development. It has caught numerous issues within WinFsp, in most cases immediately after the faulty code was written and run for the first time.
=== Leak Testing
One of the most important aspects of the Driver Verifier is that it can track the pool (memory) usage of WinFsp. The WinFsp master test driver uses this to confirm that the WinFsp FSD does not leak memory. At the end of the tests the master test driver unmounts any remaining WinFsp file systems and then verifies that there are zero pool allocations for the WinFsp FSD.
== Performance Testing
The goal of performance testing is to evaluate and understand how software behaves under certain workloads. Performance testing can help identify cases where the software requires too much time or resources. It is also useful to establish a performance baseline to ensure that software performance does not degrade over time.
WinFsp uses a tool called fsbench for this purpose. Fsbench is able to test specific scenarios, for example: "how long does it take to delete 1000 files?" Fsbench has been very useful for WinFsp and has helped improve its performance: in one situation it helped identify quadratic behavior with the MEMFS ReadDirectory operation, in another situation it helped fine tune the performance of the WinFsp I/O Queue.
== Code Analysis
WinFsp is regularly run under the Visual Studio's Code Analyzer. Any issues found are examined and if necessary acted upon.
WinFsp compiles cleanly without any warnings.

1326
doc/WinFsp-Tutorial.asciidoc Normal file

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

View File

@ -0,0 +1,180 @@
= WinFsp as an IPC Mechanism
WinFsp enables the creation of user mode file systems for Windows. At its core WinFsp is also an Inter-Process Communication (IPC) mechanism that uses the familiar file system interface for communication. This document discusses WinFsp from that viewpoint.
== Single File API Request
When a process uses the familiar file API to access a file on Windows, this API request gets packaged into an I/O Request Packet (IRP) and gets routed to the relevant File System Driver (FSD). The usual FSD's in Windows (NTFS, FastFat, etc.) will process the IRP and return a response to the process. For the remainder of this discussion, we will call this process the Originating Process (OP).
In the WinFsp case things are more complicated. WinFsp will forward IRP's to another process, which implements a user mode file system. This process will process the IRP and return a response, which WinFsp will eventually forward to the OP. We will call the process that implements the user mode file system, the File System process (FS).
In the following we will also use the notation [U] to denote user mode processing and [K] to denote kernel mode processing. Additionally because a Context Switch always goes through kernel mode, we will simplify the diagrams and omit this detail when it is not important.
Consider then what happens when an OP issues a synchronous (non-overlapped), non-cached (non-buffered) WriteFile call.
ifdef::env-browser[]
[uml,file="WinFsp-as-an-IPC-Mechanism/synchronous.png"]
--
hide footbox
participant "OP[U]" as OPU
participant "OP[K]" as OPK
participant "FS[K]" as FSK
participant "FS[U]" as FSU
activate OPU
OPU ->OPK: WriteFile
deactivate OPU
activate OPK #Salmon
OPK-->FSK: Context Switch
deactivate OPK
activate FSK #Salmon
FSK ->FSU: TRANSACT Req
deactivate FSK
activate FSU #Salmon
FSU ->FSU: Process
activate FSU
deactivate FSU
FSU ->FSK: TRANSACT Rsp
deactivate FSU
activate FSK #Salmon
FSK-->OPU: Context Switch and Return
deactivate FSK
activate OPU
note over FSK, FSU #Salmon
Salmon color denotes WinFsp processing.
end note
--
endif::env-browser[]
ifndef::env-browser[image::WinFsp-as-an-IPC-Mechanism/synchronous.png[]]
Let us now consider what happens when an OP issues an asynchronous (overlapped), non-cached (non-buffered) WriteFile call. This scenario does not show how the OP receives the WriteFile result.
ifdef::env-browser[]
[uml,file="WinFsp-as-an-IPC-Mechanism/asynchronous.png"]
--
hide footbox
participant "OP[U]" as OPU
participant "OP[K]" as OPK
participant "FS[K]" as FSK
participant "FS[U]" as FSU
activate OPU
OPU ->OPK: WriteFile
deactivate OPU
activate OPK #Salmon
OPK ->OPU: Return
deactivate OPK
activate OPU
OPU ->OPU: Process
activate OPU
deactivate OPU
OPU-->FSK: Context Switch
deactivate OPU
activate FSK #Salmon
FSK ->FSU: TRANSACT Req
deactivate FSK
activate FSU #Salmon
FSU ->FSU: Process
activate FSU
deactivate FSU
FSU ->FSK: TRANSACT Rsp
deactivate FSU
activate FSK #Salmon
FSK-->OPU: Context Switch
deactivate FSK
activate OPU
note over FSK, FSU #Salmon
Salmon color denotes WinFsp processing.
end note
--
endif::env-browser[]
ifndef::env-browser[image::WinFsp-as-an-IPC-Mechanism/asynchronous.png[]]
It should be noted that from the WinFsp perspective both cases look similar. WinFsp processing occurs:
- At *OP[K]* time immediately after receipt of an IRP. An IRP is said to be in the _Pending_ stage at this point.
- At *FS[K]* time after a context switch, but before the TRANSACT call. An IRP is said to be in the _Prepare_ stage at this point.
- At *FS[K]* time after the TRANSACT call. An IRP is said to be in the _Complete_ stage at this point. Upon completion of this stage the IRP will be completed and relinquished to the OS.
- AT *FS[U]* time between the two TRANSACT calls.
The TRANSACT calls are DeviceIoControl requests that the FS issues to WinFsp. A single TRANSACT call can be used to communicate a file system response and retrieve the next file system request.
## Multiple File API Requests
Let us now consider what may happen with two simultaneous API Requests from two different processes. For example, two WriteFile requests for different files.
ifdef::env-browser[]
[uml,file="WinFsp-as-an-IPC-Mechanism/multiple.png"]
--
hide footbox
participant "OP<sub>1</sub>[U]" as OP1U
participant "OP<sub>1</sub>[K]" as OP1K
participant "OP<sub>2</sub>[U]" as OP2U
participant "OP<sub>2</sub>[K]" as OP2K
participant "FS[K]" as FSK
participant "FS[U]" as FSU
activate OP1U
OP1U ->OP1K: WriteFile
deactivate OP1U
activate OP1K #Salmon
OP1K-->OP2U: Context Switch
deactivate OP1K
activate OP2U
OP2U ->OP2K: WriteFile
deactivate OP2U
activate OP2K #Salmon
OP2K-->FSK: Context Switch
deactivate OP2K
activate FSK #Salmon
FSK ->FSU: TRANSACT\nReq<sub>1</sub>
deactivate FSK
activate FSU #Salmon
FSU ->FSU: Process
activate FSU
deactivate FSU
FSU ->FSK: TRANSACT\nRsp<sub>1</sub>
deactivate FSU
activate FSK #Salmon
FSK ->FSU: TRANSACT\nReq<sub>2</sub>
deactivate FSK
activate FSU #Salmon
FSU ->FSU: Process
activate FSU
deactivate FSU
FSU ->FSK: TRANSACT\nRsp<sub>2</sub>
deactivate FSU
activate FSK #Salmon
FSK-->OP1U: Context Switch and Return
deactivate FSK
activate OP1U
OP1U ->OP1U: Process
activate OP1U
deactivate OP1U
OP1U-->OP2U: Context Switch and Return
deactivate OP1U
activate OP2U
note over FSK, FSU #Salmon
Salmon color denotes WinFsp processing.
end note
--
endif::env-browser[]
ifndef::env-browser[image::WinFsp-as-an-IPC-Mechanism/multiple.png[]]
Notice that it is possible for the FS to process multiple file system requests without context switching.
## I/O Queues and Performance
I/O Queues are the fundamental IPC mechanism in WinFsp. The purpose of the I/O Queue is to forward an IRP from the OP to the FS and when FS processing is complete to forward the response back to the OP. I/O Queues are discussed in detail in the WinFsp design document.
WinFsp owes its excellent performance primarily to the design of the I/O Queues. I/O Queues borrow heavily from the design of I/O completion ports and schedule threads in a similar manner:
- They have a Last-In First-Out (LIFO) wait discipline.
- They limit the number of threads that can be satisfied concurrently to the number of processors.
The first property ensures that when an FS thread finishes processing a file system request, it will very likely pick up the next one from the I/O Queue without blocking and context switching to another FS thread. Minimizing context switches results in better performance.
The second property ensures that even if there are multiple file system requests waiting to be serviced in the I/O Queue, it will not schedule more thread than the number of processors. Having more than one threads scheduled on each processor is counter-productive.

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

1817
doc/winfsp.h.markdown Normal file

File diff suppressed because it is too large Load Diff

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

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