Compare commits
650 Commits
Author | SHA1 | Date | |
---|---|---|---|
fa652cdb56 | |||
aeaeba0dd6 | |||
b299027f6e | |||
5edd9eb548 | |||
fbc24bcca9 | |||
4ef6dcb71d | |||
b8f0d08672 | |||
5c82044295 | |||
e3b5426e45 | |||
d34f262c02 | |||
ede72e4c5f | |||
9c4b73dac1 | |||
9ecfc64178 | |||
fbe46d8c81 | |||
2a12ed490d | |||
c6d9e68c3f | |||
bfc41127d0 | |||
6e70500afc | |||
dca3cb93f3 | |||
2f0061b4ba | |||
3fcef3b0fa | |||
6a0574e309 | |||
0c945b67f3 | |||
25b3e111fa | |||
09101129a3 | |||
3700b375a7 | |||
22fccdb575 | |||
c4932f7c7e | |||
303cadb55d | |||
5617d09edc | |||
eefaad241d | |||
11dce32baa | |||
3b8396dc27 | |||
da7082030a | |||
7425eba8af | |||
acf6ce1008 | |||
06f6c192ed | |||
b7a06c7046 | |||
edb675d2d4 | |||
9533815931 | |||
fe74fc4013 | |||
5bd6c1a122 | |||
7b15d32c33 | |||
c186289672 | |||
ff649e05c5 | |||
9a9d3cd4e8 | |||
d1bb65a998 | |||
178200fd63 | |||
396d9d97d2 | |||
1d35069aab | |||
4421c82ce0 | |||
36f0978971 | |||
dae4bad732 | |||
75744571ff | |||
0494726f52 | |||
a964ab1b73 | |||
796010c9fe | |||
dc343ecbe5 | |||
706fa2cc07 | |||
c0aaebd0a5 | |||
9c2b4e5631 | |||
206b85c278 | |||
075d1821a2 | |||
c252382204 | |||
a91e5b01ab | |||
473914d45f | |||
e12e3630bb | |||
960c627924 | |||
f97ef5704f | |||
41605a3d5a | |||
e4f0406c4f | |||
b5bf84b618 | |||
3c340345c0 | |||
63c23f382b | |||
de5ef0c81d | |||
7288605f65 | |||
55a7864173 | |||
4fe72ab332 | |||
76a2926116 | |||
7843c73d34 | |||
ebad86387c | |||
5475c414b3 | |||
e3e111ab27 | |||
9cd6710438 | |||
a5f8736b1e | |||
2ced698256 | |||
53a4bdc478 | |||
eea92e89ef | |||
d519145f61 | |||
2809f56217 | |||
8cb76783ad | |||
117ab9c3e4 | |||
61a001baf1 | |||
d0c700eb0f | |||
b774aea4f4 | |||
f8e4c1bbc4 | |||
3bbff30f14 | |||
2fe4e18d9c | |||
b65322c2ac | |||
7764663386 | |||
c6ae62f301 | |||
6f22828060 | |||
7c2de68892 | |||
4656e8ed26 | |||
be98326bbb | |||
52acc3bc48 | |||
f68bc75255 | |||
029942bbac | |||
cb0c7def54 | |||
5fbd75926b | |||
bc9bcefc62 | |||
a57325e8af | |||
466922787d | |||
9dc8aca710 | |||
88aeb83211 | |||
a7cee1eafe | |||
eb0816db56 | |||
51833751d0 | |||
155344ea61 | |||
3874e2a6b5 | |||
c5740029f7 | |||
9973c4c963 | |||
6cfda75447 | |||
c7d6fc355b | |||
b062f8683c | |||
cec5f0be08 | |||
40b61f7667 | |||
7c383654bd | |||
9e4e7d4bcf | |||
638e5a20b6 | |||
95bbb584eb | |||
1d8241cba7 | |||
460726df83 | |||
b5cefc59e9 | |||
e9ca1a8996 | |||
8c0f609a93 | |||
23eabe5939 | |||
eecca688bc | |||
23d2083d8f | |||
8d379a4c8b | |||
830985d331 | |||
6b37e2ef12 | |||
62dbaf56e3 | |||
d301164609 | |||
ada3e1b0e5 | |||
13d6ec3638 | |||
2210561b65 | |||
1713ce9c9e | |||
8f25dd6cab | |||
c9485ff214 | |||
5ce1a722b3 | |||
27315c1111 | |||
bd38a39dbd | |||
766734a8e3 | |||
b242a449b8 | |||
c6a6fdfc36 | |||
843d3f0362 | |||
5190923c9a | |||
2f8ac3765d | |||
e4b4e6a1f9 | |||
fa54898c64 | |||
2f82d91e1f | |||
7574c39ffb | |||
bdc02c8ab5 | |||
15c16d7070 | |||
ba312de59b | |||
5824a24bf4 | |||
f0a0787f6b | |||
c17b84cff2 | |||
168acb1a1f | |||
c8206751d2 | |||
bec91873fe | |||
9bf0d5d46d | |||
2d85c7bf73 | |||
ff3436718c | |||
69f6f661ba | |||
6e52def53c | |||
2212d021e1 | |||
7b94f2bebf | |||
c897ddd864 | |||
8d6314e2db | |||
eec63332e0 | |||
04186ea834 | |||
3adcf70748 | |||
33e8b5df04 | |||
154933ecab | |||
c760cf9563 | |||
245bba0a17 | |||
3008575bdf | |||
2ce434efbd | |||
94ea4f65f7 | |||
c780912810 | |||
299605b8fc | |||
86bccd763c | |||
856d3bdefe | |||
104c830437 | |||
f35a93d1f7 | |||
2d9b1b80fa | |||
f1ee19d8dc | |||
671c0c12ab | |||
6eb2879374 | |||
1e03c1a465 | |||
b55c20b393 | |||
406af6901f | |||
40735c4687 | |||
08c283f2a9 | |||
4fc740588e | |||
54050c7e1d | |||
ff08d63a82 | |||
c37444b0ae | |||
bbb51b4971 | |||
6de998ff98 | |||
4b024ebe74 | |||
418c454a4a | |||
0b61c48cd6 | |||
945509ef93 | |||
3a65ce332b | |||
228f9e2708 | |||
ee3918436b | |||
1bb6d2a0e7 | |||
6d1b9e95db | |||
1d8d72129d | |||
2ad4e30754 | |||
26cba02091 | |||
3697defd16 | |||
69a22f1044 | |||
5a49115a66 | |||
82c8b0d00f | |||
d00b5d88af | |||
6d19176d7c | |||
e231b9c662 | |||
025a74e663 | |||
834adbdc36 | |||
25c687d5c5 | |||
200de2a7f9 | |||
8e7c241f32 | |||
e530e671a5 | |||
d804f5674d | |||
ac6f024715 | |||
a1af8ff921 | |||
f7ca9f0522 | |||
3518d7a8c2 | |||
281d92f2bc | |||
7769a2c062 | |||
595a77bd2e | |||
6860a6986a | |||
63e8cf1090 | |||
7bdca634aa | |||
535babc0d5 | |||
e86dcde1a1 | |||
6e10e0489b | |||
f82cad712a | |||
d12234bb01 | |||
10a8519294 | |||
1b6395fc91 | |||
f1a363b848 | |||
eea1a8fd8b | |||
5444ce7f50 | |||
29c140b9cd | |||
cdfd60877b | |||
e7931e28fd | |||
002a0262f7 | |||
1ffba78a18 | |||
1d3423d5fb | |||
a894e4a2af | |||
b6f084d71f | |||
ca6d0d2dcf | |||
d6d781355f | |||
851a6145cd | |||
aec7b34e13 | |||
38006ba553 | |||
ee469b40e7 | |||
1f385a9ab5 | |||
ba78fbb956 | |||
8f10ba4fc9 | |||
b0a59e42fc | |||
2e089b92c5 | |||
37362cb8cc | |||
127d4cc4eb | |||
ce551d4e0d | |||
53f60a698a | |||
aa23672b01 | |||
e4de0f0513 | |||
8750451e10 | |||
358db2a54f | |||
4294182c1a | |||
f17168f2fa | |||
959d8537c6 | |||
6a48087d5f | |||
0a59c5d685 | |||
5b1b8288c2 | |||
53e2f13e38 | |||
cb6b10385b | |||
f49cf412a8 | |||
764b772731 | |||
7518a6e418 | |||
2772af5478 | |||
f2535484ea | |||
97ee4fa77f | |||
7c34d738b7 | |||
93254bede4 | |||
f3894dbc7b | |||
dc684acd41 | |||
69935525da | |||
6ba6e16851 | |||
d33089331b | |||
74de84aaab | |||
a9b4fd4634 | |||
c6798b3060 | |||
f6e3b8e416 | |||
f05ebd9d20 | |||
e50c9ff649 | |||
fb70eccc9c | |||
7adbd7a56c | |||
55c7384c65 | |||
bc8962d2b6 | |||
2267eadbca | |||
154aa28381 | |||
2d98cda607 | |||
8395b22ddc | |||
809505d8a3 | |||
9df0920de1 | |||
c10c7cc672 | |||
a0cb134bd3 | |||
becfd2e1c5 | |||
1e93f0d10d | |||
adeb847c7e | |||
5a83c68f56 | |||
9d176643c3 | |||
b1d8192d59 | |||
bd3d462bce | |||
aa2d70d8de | |||
31c40d017d | |||
5c8da5518c | |||
a80a9d3d4c | |||
57580e91f5 | |||
1a43619c5e | |||
aae6a15e5a | |||
f54ce6a65d | |||
ab0c2fc25c | |||
fd439add27 | |||
8855a2b896 | |||
7c41ffd64e | |||
621eb63029 | |||
f1b96f8a28 | |||
4512dac0a9 | |||
deee32b743 | |||
5f1b723fab | |||
453f1732dc | |||
8c8d669be8 | |||
53077d990a | |||
c665812d76 | |||
b56379b542 | |||
83c1489b92 | |||
3e3aa7651f | |||
ec2cf5106d | |||
25322059b3 | |||
a255fa11e7 | |||
dbb8b5d3b9 | |||
4c6a61d2c9 | |||
ac4828ec11 | |||
e0f163e9ba | |||
9bcd8dcb8e | |||
096e5b7eb1 | |||
1c85fb94f0 | |||
4417ebcc92 | |||
5fa631339d | |||
26092211a8 | |||
50af8f6444 | |||
ee0031f995 | |||
75ff7f2c01 | |||
3e557e1b65 | |||
79bf651203 | |||
205a59dbc6 | |||
8f54152096 | |||
5e71992153 | |||
dfe45e1be5 | |||
ff7a446194 | |||
17056b4f3f | |||
b19621233a | |||
e07ef0712e | |||
0532cee99c | |||
b072a1f0da | |||
badaf82462 | |||
3f79b2e46d | |||
319e5d4ee6 | |||
66d5fe98df | |||
8abadf94f3 | |||
728c1b3402 | |||
8b31b1018b | |||
310fd23035 | |||
7f2426271c | |||
3cfa4156d2 | |||
23dadcf8a0 | |||
e0b0b1b367 | |||
a525e095d3 | |||
e16dfd8a43 | |||
3bf4140f91 | |||
b194a33406 | |||
0dd452fac1 | |||
df11a7d7ff | |||
51d29c172a | |||
2803a1b0cf | |||
067a0f1b37 | |||
03611b6210 | |||
2ff60e5e98 | |||
488993d22b | |||
3cba22b9a5 | |||
a3e577b091 | |||
9b287fb559 | |||
f642ea57be | |||
cb17b7e2e0 | |||
82a9c8e80f | |||
628dae38d7 | |||
958b5a47a8 | |||
8d38a0dac6 | |||
a653a010ce | |||
31eedbddb3 | |||
5bf913045e | |||
a10a09d4e9 | |||
3e0db6da07 | |||
77df532ac3 | |||
222da362ec | |||
3ed7847d84 | |||
5773c6eab7 | |||
5a5a1008de | |||
32c289fa34 | |||
0534225662 | |||
096b2dabde | |||
5770f2d901 | |||
12e40f908d | |||
42745e2239 | |||
249c1a5cb8 | |||
233904fd51 | |||
3e0f2316a7 | |||
bd952253fb | |||
c7780cf7fa | |||
31b54ecc47 | |||
4084448bd5 | |||
4dc1828e1f | |||
79b7b66b62 | |||
612c820630 | |||
e13233ef32 | |||
dd815f3c39 | |||
5faafc4d11 | |||
78e5d031c0 | |||
9ef562df15 | |||
a7cdc815d0 | |||
bd5e15fe24 | |||
214a8406eb | |||
6bd6f0ee35 | |||
f8cebd1f92 | |||
f8f6d0f1bc | |||
b06132cb6b | |||
748c9b6409 | |||
bfc7fc5dec | |||
03f906f966 | |||
4b1111fcc5 | |||
86ddeed129 | |||
e2d4b36057 | |||
ab2908a9ee | |||
fd7b12bb61 | |||
eb2000a194 | |||
e4cabc50c5 | |||
92dc2feecd | |||
43f333e8a6 | |||
59eb40fd9b | |||
d85d36c94f | |||
27b841faf8 | |||
c6967c737a | |||
4ccbd1bdf6 | |||
0a8b8e8444 | |||
352450d538 | |||
7e1861a9f5 | |||
860e9db8a7 | |||
1d435269bd | |||
e58ac1fbde | |||
1f0f2fe094 | |||
d7ec331c74 | |||
938c036387 | |||
16f5bd089d | |||
6afea44e31 | |||
2859355fd8 | |||
75012d1301 | |||
8e1512c067 | |||
fa6b621042 | |||
8ffb359f20 | |||
203873ef04 | |||
e73bda3926 | |||
0186b82fea | |||
db38d2f7f8 | |||
016d015fe6 | |||
87b2d4ca4c | |||
dfd6cbbde1 | |||
6a126da51d | |||
03df0a9c26 | |||
5c3a82a074 | |||
b591015b28 | |||
fb9b798d3d | |||
cc408b71e1 | |||
19a73ca01d | |||
3992b9ebb1 | |||
a46c0610c4 | |||
495fc7a5dc | |||
2ba46fdb71 | |||
7cb56bb132 | |||
687b02c1e6 | |||
218b162d75 | |||
5e13c8750e | |||
2e71d2fe14 | |||
866e4abe10 | |||
7894cc8b7b | |||
0c810c52fa | |||
b06e947e0e | |||
aed134080c | |||
3ce490d405 | |||
76aabecbfb | |||
8eebfe811d | |||
5798527237 | |||
817beebb63 | |||
b7a2b5e17a | |||
20e547c6d0 | |||
d0d0f60033 | |||
fbc3d3efce | |||
2c3f177314 | |||
91e8bb1229 | |||
4b48502232 | |||
74af44e2e7 | |||
915279d41d | |||
316a2940dc | |||
453c1753ab | |||
b11b622fc2 | |||
f1ba60e172 | |||
7c1b592b84 | |||
1e88fedb19 | |||
5ecc92f2ba | |||
5771eedc45 | |||
46a29f663a | |||
49cd11b34b | |||
aeff3dc21e | |||
b7368336d2 | |||
5afe7a5315 | |||
7815b9e2eb | |||
cbcea380ef | |||
10635db99b | |||
cb00f913cc | |||
c406c89158 | |||
f600d51ace | |||
7401481d42 | |||
2d3d92fb2d | |||
eca93bbdb3 | |||
5fa0c36c8f | |||
ea2cc54677 | |||
ccec269dd6 | |||
5888e9ab05 | |||
c12b88286d | |||
e412d735ed | |||
582997b5a4 | |||
1647702a65 | |||
ccf58122a2 | |||
be8c29114a | |||
30f2807e2b | |||
25a2873556 | |||
bd0acf2289 | |||
997476f015 | |||
f89c91cd10 | |||
af2cc10c15 | |||
0d25e73364 | |||
86d74371aa | |||
f32e335855 | |||
165f3ec45d | |||
811696d939 | |||
0c07be9628 | |||
5dcbbaa4e7 | |||
12b70f661f | |||
9b4b5abe48 | |||
5cd0dfb1b9 | |||
46ce4b1a6c | |||
28a20d5199 | |||
10ea9a833f | |||
d9713668aa | |||
00c0574f1f | |||
44c86ff9a4 | |||
28931f4687 | |||
80e07cead6 | |||
b88b2ec51d | |||
82e4dcb4a1 | |||
34e653a275 | |||
981e60643f | |||
fee75590a8 | |||
1298dd842d | |||
8334daa048 | |||
2f73bfa069 | |||
d2d2dd5099 | |||
146570dd74 | |||
f509281be4 | |||
613a564ca2 | |||
7ffc60f512 | |||
499a0cb866 | |||
edff3054db | |||
f7e0362350 | |||
7337f3c6cd | |||
ab278d7b60 | |||
858df29ba2 | |||
4366866653 | |||
e4b808806c | |||
13cee6e019 | |||
35b9cb15a3 | |||
0d8f0f9ac8 | |||
a4e2ad9dd6 | |||
9b4318c655 | |||
5827b1fa9c | |||
913f7ac9cd | |||
0e2f46dc90 | |||
a8d76d3e46 | |||
380ec074ca | |||
e7cba96c74 | |||
03db443406 | |||
0b65bc7e01 | |||
12e1caaa98 | |||
7a690a789b | |||
8ca419830c | |||
c310d8ea1b | |||
c3ddf73661 | |||
6b00b8e28a | |||
35c722e91b | |||
ae8802514b | |||
e90aa46a27 | |||
760cd5e46f | |||
b36b6c60e2 | |||
e4984bf675 | |||
0c8bcd5d7d | |||
b5d8cd3ea6 | |||
af5f409233 | |||
cffb066d46 | |||
804434d836 | |||
f7595e40b6 | |||
669dd07ce2 | |||
b6fa54d301 | |||
342e7e39e2 | |||
9dfdd19616 | |||
2c651b1bd8 | |||
41764f7b41 | |||
08e697c52c | |||
66cc043149 | |||
518cd0e8c0 | |||
c0344f53b0 | |||
76445a5403 | |||
0577b8febb | |||
610a7ac2a6 |
2
.gitmodules
vendored
@ -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
@ -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.
|
@ -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>.
|
63
README.md
@ -1,16 +1,23 @@
|
||||
# WinFsp - Windows File System Proxy
|
||||
|
||||

|
||||
|
||||
|
||||
<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.
|
||||
|
59
appveyor.yml
@ -1,21 +1,38 @@
|
||||
version: '{build}'
|
||||
|
||||
environment:
|
||||
CONFIGURATION: Release
|
||||
|
||||
install:
|
||||
- git submodule update --init --recursive
|
||||
- appveyor AddMessage "Change boot configuration and reboot" -Category Information
|
||||
- bcdedit /set testsigning on
|
||||
- ps: Restart-Computer -Force
|
||||
- ps: Start-Sleep -s 10
|
||||
|
||||
build_script:
|
||||
- appveyor AddMessage "Reboot complete" -Category Information
|
||||
- bcdedit | findstr /i "testsigning"
|
||||
- tools\build.bat %CONFIGURATION%
|
||||
|
||||
test_script:
|
||||
- for %%f in ("build\VStudio\build\%CONFIGURATION%\winfsp-*.msi") do start /wait msiexec /i %%f /qn INSTALLLEVEL=1000
|
||||
- tools\nmake-ext-test.bat %CONFIGURATION%
|
||||
- tools\run-tests.bat %CONFIGURATION%
|
||||
version: '{build}'
|
||||
|
||||
environment:
|
||||
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 60
|
||||
|
||||
build_script:
|
||||
- appveyor AddMessage "Reboot complete" -Category Information
|
||||
- tools\build.bat %CONFIGURATION%
|
||||
|
||||
test_script:
|
||||
- for %%f in ("build\VStudio\build\%CONFIGURATION%\winfsp-*.msi") do start /wait msiexec /i %%f /qn INSTALLLEVEL=1000
|
||||
- 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
BIN
art/winfsp-solid.afdesign
Normal file
BIN
art/winfsp-solid.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
art/wixbanner.pxm
Normal file
BIN
art/wixdialog.pxm
Normal 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
|
||||
|
@ -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) -->
|
||||
|
@ -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>
|
||||
|
BIN
build/VStudio/installer/wixbanner.bmp
Normal file
After Width: | Height: | Size: 112 KiB |
BIN
build/VStudio/installer/wixdialog-Beta.bmp
Normal file
After Width: | Height: | Size: 601 KiB |
BIN
build/VStudio/installer/wixdialog-Gold.bmp
Normal file
After Width: | Height: | Size: 601 KiB |
BIN
build/VStudio/installer/wixdialog-RC.bmp
Normal file
After Width: | Height: | Size: 601 KiB |
@ -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>
|
||||
|
@ -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" />
|
||||
|
187
build/VStudio/testing/fsbench.vcxproj
Normal 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>
|
25
build/VStudio/testing/fsbench.vcxproj.filters
Normal 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>
|
185
build/VStudio/testing/fscrash.vcxproj
Normal 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>
|
28
build/VStudio/testing/fscrash.vcxproj.filters
Normal 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>
|
@ -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>
|
||||
|
@ -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">
|
||||
|
@ -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>
|
@ -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>
|
@ -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
|
||||
|
@ -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) >$(OutDir)fuse-$(PlatformTarget).pc
|
||||
copy /b $(OutDir)fuse-$(PlatformTarget).pc + %(FullPath) $(OutDir)fuse-$(PlatformTarget).pc >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" />
|
||||
|
@ -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>
|
@ -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! >>$(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! >>$(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! >>$(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! >>$(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>
|
||||
|
@ -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>
|
@ -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.
|
21
doc/Makefile
@ -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
|
46
doc/NTFS-Compatibility.asciidoc
Normal 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.
|
50
doc/Native-API-vs-FUSE.asciidoc
Normal 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.
|
@ -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.
|
192
doc/WinFsp-Performance-Testing.asciidoc
Normal 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[]]
|
75
doc/WinFsp-Performance-Testing/ORIG/dokany-1.csv
Normal 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
|
|
75
doc/WinFsp-Performance-Testing/ORIG/dokany-2.csv
Normal 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
|
|
85
doc/WinFsp-Performance-Testing/ORIG/ntfs-1.csv
Normal 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
|
|
85
doc/WinFsp-Performance-Testing/ORIG/ntfs-2.csv
Normal 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
|
|
85
doc/WinFsp-Performance-Testing/ORIG/winfsp-t0-1.csv
Normal 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
|
|
85
doc/WinFsp-Performance-Testing/ORIG/winfsp-t0-2.csv
Normal 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
|
|
85
doc/WinFsp-Performance-Testing/ORIG/winfsp-t1-1.csv
Normal 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
|
|
85
doc/WinFsp-Performance-Testing/ORIG/winfsp-t1-2.csv
Normal 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
|
|
85
doc/WinFsp-Performance-Testing/ORIG/winfsp-tinf-1.csv
Normal 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
|
|
85
doc/WinFsp-Performance-Testing/ORIG/winfsp-tinf-2.csv
Normal 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
|
|
30
doc/WinFsp-Performance-Testing/file_create_test.csv
Normal 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
|
|
BIN
doc/WinFsp-Performance-Testing/file_create_test.png
Normal file
After Width: | Height: | Size: 60 KiB |
30
doc/WinFsp-Performance-Testing/file_delete_test.csv
Normal 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
|
|
BIN
doc/WinFsp-Performance-Testing/file_delete_test.png
Normal file
After Width: | Height: | Size: 59 KiB |
30
doc/WinFsp-Performance-Testing/file_list_test.csv
Normal 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
|
|
BIN
doc/WinFsp-Performance-Testing/file_list_test.png
Normal file
After Width: | Height: | Size: 49 KiB |
30
doc/WinFsp-Performance-Testing/file_open_test.csv
Normal 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
|
|
BIN
doc/WinFsp-Performance-Testing/file_open_test.png
Normal file
After Width: | Height: | Size: 55 KiB |
30
doc/WinFsp-Performance-Testing/file_overwrite_test.csv
Normal 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
|
|
BIN
doc/WinFsp-Performance-Testing/file_overwrite_test.png
Normal file
After Width: | Height: | Size: 50 KiB |
30
doc/WinFsp-Performance-Testing/file_tests.csv
Normal 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
|
|
BIN
doc/WinFsp-Performance-Testing/file_tests.png
Normal file
After Width: | Height: | Size: 55 KiB |
24
doc/WinFsp-Performance-Testing/mmap_read_test.csv
Normal 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
|
|
BIN
doc/WinFsp-Performance-Testing/mmap_read_test.png
Normal file
After Width: | Height: | Size: 44 KiB |
24
doc/WinFsp-Performance-Testing/mmap_write_test.csv
Normal 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
|
|
BIN
doc/WinFsp-Performance-Testing/mmap_write_test.png
Normal file
After Width: | Height: | Size: 39 KiB |
74
doc/WinFsp-Performance-Testing/munge.py
Executable 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)
|
30
doc/WinFsp-Performance-Testing/rdwr_cc_read_page_test.csv
Normal 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
|
|
BIN
doc/WinFsp-Performance-Testing/rdwr_cc_read_page_test.png
Normal file
After Width: | Height: | Size: 55 KiB |
30
doc/WinFsp-Performance-Testing/rdwr_cc_write_page_test.csv
Normal 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
|
|
BIN
doc/WinFsp-Performance-Testing/rdwr_cc_write_page_test.png
Normal file
After Width: | Height: | Size: 53 KiB |
30
doc/WinFsp-Performance-Testing/rdwr_nc_read_page_test.csv
Normal 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
|
|
BIN
doc/WinFsp-Performance-Testing/rdwr_nc_read_page_test.png
Normal file
After Width: | Height: | Size: 50 KiB |
30
doc/WinFsp-Performance-Testing/rdwr_nc_write_page_test.csv
Normal 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
|
|
BIN
doc/WinFsp-Performance-Testing/rdwr_nc_write_page_test.png
Normal file
After Width: | Height: | Size: 48 KiB |
33
doc/WinFsp-Performance-Testing/rdwr_tests.csv
Normal 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
|
|
BIN
doc/WinFsp-Performance-Testing/rdwr_tests.png
Normal file
After Width: | Height: | Size: 68 KiB |
@ -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
@ -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
BIN
doc/WinFsp-Tutorial/EntryExit.png
Normal file
After Width: | Height: | Size: 8.1 KiB |
BIN
doc/WinFsp-Tutorial/Explorer.png
Normal file
After Width: | Height: | Size: 46 KiB |
BIN
doc/WinFsp-Tutorial/FirstRun.png
Normal file
After Width: | Height: | Size: 6.5 KiB |
BIN
doc/WinFsp-Tutorial/Installer.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
doc/WinFsp-Tutorial/MissingDll.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
doc/WinFsp-Tutorial/NetUse.png
Normal file
After Width: | Height: | Size: 32 KiB |
BIN
doc/WinFsp-Tutorial/NewProject.png
Normal file
After Width: | Height: | Size: 20 KiB |
180
doc/WinFsp-as-an-IPC-Mechanism.asciidoc
Normal 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.
|
BIN
doc/WinFsp-as-an-IPC-Mechanism/asynchronous.png
Normal file
After Width: | Height: | Size: 42 KiB |
BIN
doc/WinFsp-as-an-IPC-Mechanism/multiple.png
Normal file
After Width: | Height: | Size: 77 KiB |
BIN
doc/WinFsp-as-an-IPC-Mechanism/synchronous.png
Normal file
After Width: | Height: | Size: 37 KiB |
1817
doc/winfsp.h.markdown
Normal file
2
ext/test
@ -1,7 +1,7 @@
|
||||
/**
|
||||
* @file tlib/callstack.c
|
||||
*
|
||||
* @copyright 2014-2015 Bill Zissimopoulos
|
||||
* @copyright 2014-2017 Bill Zissimopoulos
|
||||
*/
|
||||
|
||||
#include <tlib/callstack.h>
|
||||
|
@ -1,7 +1,7 @@
|
||||
/**
|
||||
* @file tlib/callstack.h
|
||||
*
|
||||
* @copyright 2014-2015 Bill Zissimopoulos
|
||||
* @copyright 2014-2017 Bill Zissimopoulos
|
||||
*/
|
||||
|
||||
#ifndef TLIB_CALLSTACK_H_INCLUDED
|
||||
|
@ -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
|
||||
|
@ -1,7 +1,7 @@
|
||||
/**
|
||||
* @file tlib/injected/curlfunc.c
|
||||
*
|
||||
* @copyright 2014-2015 Bill Zissimopoulos
|
||||
* @copyright 2014-2017 Bill Zissimopoulos
|
||||
*/
|
||||
|
||||
#include <tlib/injected/curlfunc.h>
|
||||
|
@ -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
|
||||
|
@ -1,7 +1,7 @@
|
||||
/**
|
||||
* @file tlib/injected/stdfunc.c
|
||||
*
|
||||
* @copyright 2014-2015 Bill Zissimopoulos
|
||||
* @copyright 2014-2017 Bill Zissimopoulos
|
||||
*/
|
||||
|
||||
#include <tlib/injected/stdfunc.h>
|
||||
|
@ -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
|
||||
|