Compare commits
788 Commits
baseline-p
...
v1.4
Author | SHA1 | Date | |
---|---|---|---|
0eb84d68e2 | |||
750e424ac3 | |||
58162a8d78 | |||
b323925d94 | |||
3206e3dd15 | |||
0f185587c9 | |||
3119922708 | |||
5d90c35e20 | |||
a910385cb1 | |||
17d687fe7e | |||
4deb7b96a9 | |||
36ba4ff402 | |||
55955b8514 | |||
1bebbcf634 | |||
a292cd4d73 | |||
0de00e872f | |||
084f0b5b36 | |||
901ef5e92f | |||
f09597a519 | |||
a03b480eeb | |||
c9f1c1c60d | |||
f32c914ee8 | |||
681eac9cd8 | |||
52f0d1e1d8 | |||
dcf3d612bc | |||
4551766f7a | |||
a168b96b76 | |||
4b3d9951bc | |||
79fd87598f | |||
9851f1b2c8 | |||
4725ff41d3 | |||
4756ee2d8a | |||
25f627f36f | |||
24b96e7e1b | |||
75ae8daf8f | |||
999847d8db | |||
773bb12146 | |||
bef5ba7f3b | |||
eecb7e00e2 | |||
9160f1c4ce | |||
796f97f078 | |||
5f1c3b7728 | |||
f672ae817a | |||
04cf0e04ba | |||
f51af55fb3 | |||
f9a2780311 | |||
43101dfe06 | |||
ac5ed1c238 | |||
03f0d2bd1a | |||
77c18fc59e | |||
77cf7f7398 | |||
c61da81475 | |||
a1b92d9095 | |||
ae8e4e61f7 | |||
e5c424dba1 | |||
554f07a50e | |||
bd53b452b2 | |||
82cea37036 | |||
2fcc065421 | |||
bf53c00f38 | |||
ec4197d8b7 | |||
897a08700b | |||
1ace7ffb41 | |||
d7c0657c3d | |||
5d73687de8 | |||
a5bfdcf416 | |||
b609435dad | |||
523ccbea02 | |||
cf699ba441 | |||
0d819eb800 | |||
4a653a8bc0 | |||
6932d42039 | |||
77fb2cc1c1 | |||
500dfe1958 | |||
1b40d8db80 | |||
307e18fb0d | |||
461266382a | |||
a809b0787e | |||
ea5e031af2 | |||
558487cd22 | |||
2ff21529d5 | |||
d43c0c2c85 | |||
eb0f03b17b | |||
575fe55eb8 | |||
b537c61f3b | |||
5cd40ff7ff | |||
753440e837 | |||
9b79bb24ca | |||
931d201527 | |||
ab3f3d2827 | |||
3dc09b2496 | |||
27d03d4323 | |||
ad1b53e5a4 | |||
e4077c92e9 | |||
e3290a30bc | |||
09309f858c | |||
12baaa6d50 | |||
c584782bc7 | |||
9c4a361c48 | |||
c1f4606683 | |||
f79db6a3db | |||
9a9a73d4d8 | |||
a56caf3f94 | |||
9b8b3e9cb8 | |||
5a8aad60b3 | |||
1906772aa2 | |||
ce924d737c | |||
aa50d5a8b9 | |||
6ffddf36b5 | |||
ee4145e947 | |||
fd817e37c9 | |||
2056766b4f | |||
c73f7099b7 | |||
3513f0da5f | |||
c9c62b1831 | |||
8422e8121c | |||
88516f371a | |||
916b4f5c3d | |||
a7424c911b | |||
fb8cb8aca9 | |||
d0f5ea69a2 | |||
fbb81b0463 | |||
14a2004437 | |||
d491031fda | |||
75a3d97c62 | |||
5f325304d3 | |||
8727497662 | |||
a2ed9f2b1a | |||
fdaf1da778 | |||
1123e7b0ef | |||
06ee833740 | |||
fbcefe6339 | |||
637a1dac7e | |||
05f622f2de | |||
ef5c947168 | |||
894ae7b8f3 | |||
7aadf259d9 | |||
d54e9a3049 | |||
7d56b9c23d | |||
deb237f7b0 | |||
5ae0804bd2 | |||
382599e38f | |||
498ab91123 | |||
c2f87029d7 | |||
157c4bc09a | |||
4fcaa99d63 | |||
d6c3849120 | |||
ec39d4b888 | |||
ebc8c268e5 | |||
9501b5771d | |||
5d34a3bd8c | |||
5b72b4ad4a | |||
740411d604 | |||
5c3549c6eb | |||
9f56a21c7f | |||
2e7e95df76 | |||
b2e6c16ba0 | |||
bd32f54904 | |||
7908ba09ac | |||
5713605030 | |||
994e232fb3 | |||
9553bd52c4 | |||
1cab0f3975 | |||
499a3d1138 | |||
d29218ba69 | |||
5564a9efae | |||
750e72e601 | |||
9f13c6e915 | |||
5005dd6f5b | |||
f9b6fb8817 | |||
6b0b4c8b8e | |||
abb504053b | |||
fb507fc0bc | |||
d38afe8d16 | |||
a4629b8f8b | |||
670a38d549 | |||
b939f6bd2b | |||
3df27f5b28 | |||
7581cece81 | |||
b4f5707e4e | |||
309827860f | |||
2b6b049f86 | |||
77f3e064a2 | |||
f691a7a3c7 | |||
cc58668ce5 | |||
064d0b94f2 | |||
a48668149b | |||
b9915dcaa7 | |||
a7febb8265 | |||
d6aaf0088a | |||
f05af124e7 | |||
886b7cf9f7 | |||
e111451475 | |||
0c38f92082 | |||
9bd9cf4fbd | |||
2f026cbc6f | |||
68d8ade667 | |||
d9c450ecf4 | |||
e6d2ef9274 | |||
299f371dee | |||
bb8aee8673 | |||
08bf8e14ce | |||
ef1912bd8a | |||
ff155694ce | |||
e6ed6dbf4f | |||
f13b98c880 | |||
5d3b37122c | |||
9d1c892d68 | |||
7008871ed7 | |||
2a3eabfab2 | |||
35255526d3 | |||
b2e474658d | |||
4fe85222b1 | |||
fd3e5bad43 | |||
ea873ece22 | |||
42e01a9b27 | |||
c1c9dca94b | |||
dcabdff422 | |||
a2ec40008f | |||
f3819ba839 | |||
ead599e337 | |||
eb88f25f40 | |||
c2b066a054 | |||
266e0f4bab | |||
d02030897d | |||
c87ff75b8f | |||
2ca33665ef | |||
391dcf8a21 | |||
69d68eb22f | |||
d58f4b84a5 | |||
61935e4671 | |||
41838627c0 | |||
0b67329fc2 | |||
5c962c8fc5 | |||
a9080208d9 | |||
3cc9697248 | |||
9f45d513ca | |||
77349c1330 | |||
7c11a45e6e | |||
48ad297df1 | |||
3d2de57e9d | |||
658d873efb | |||
efc93cacd3 | |||
41b54ef57a | |||
fd662ee848 | |||
895bf67691 | |||
e06fe4153d | |||
9f2fe92db7 | |||
d3f829b2df | |||
fa4651b3ce | |||
5a44e5c04a | |||
68122b5c68 | |||
b672312c79 | |||
0ab35fde1a | |||
9be2b7a2b9 | |||
39dd7662bd | |||
244afc8a3c | |||
111955db84 | |||
76ff8232bc | |||
9a3ac3c7a1 | |||
4adc0d4700 | |||
91c714dd53 | |||
11cb57a0bf | |||
3a8ad9c8d7 | |||
fa388e57ad | |||
1952d0d941 | |||
1a02438488 | |||
07f15c236b | |||
93af1be861 | |||
b52c90f980 | |||
b154c307b7 | |||
697063af51 | |||
436e31da34 | |||
92e7dbad21 | |||
4812f5bbd0 | |||
045a1fa19c | |||
c9b2c0460b | |||
1468df78a2 | |||
0fb6299f17 | |||
0da43fe2d4 | |||
d824ba464d | |||
affca267c5 | |||
4b7684122b | |||
55eee2efdd | |||
f8a05eae95 | |||
9a4f04f46a | |||
98334208b9 | |||
aae0a5bc74 | |||
2438ece1cf | |||
487d2449fe | |||
6430b386da | |||
c70089a176 | |||
0dff9a4c07 | |||
86c0ffa942 | |||
5c613b2abd | |||
8a099f3faa | |||
1ac172d2f8 | |||
34546def3c | |||
3ede1a5c70 | |||
5194536ec3 | |||
c39bc81299 | |||
18bf6ca666 | |||
7eebdbd74e | |||
9a88791f61 | |||
6e578350f4 | |||
81afac9c3a | |||
10081e1a69 | |||
8e5c40bbbe | |||
7745bf4cdc | |||
c7a779fa98 | |||
3f90d60dc4 | |||
f73cbc0e37 | |||
c88a86f7c7 | |||
dbdbdf07cf | |||
6b2dcaef96 | |||
fcae6ce018 | |||
690d3e4c8e | |||
af37424ecc | |||
fd53e22f7e | |||
3df0fa02ba | |||
9484b50cbd | |||
14e6b402fe | |||
2227429d8e | |||
9deb9d5319 | |||
193d5f4e91 | |||
26485ffbd6 | |||
7302b4baea | |||
fc1586eb82 | |||
637f461a65 | |||
b35bf204db | |||
3073646f29 | |||
7f9f55de24 | |||
bb3f8d37f2 | |||
c72a9f2a05 | |||
9b4ab190e0 | |||
010ed909ec | |||
2b4549a50d | |||
98a329e81b | |||
8090b7c666 | |||
c7d720eaa0 | |||
8320160d73 | |||
ce057b49b8 | |||
a60c989089 | |||
0f6371f0d8 | |||
1a4bbbe09a | |||
4e891dc2a8 | |||
18a77d63c3 | |||
4ea9c6e362 | |||
9d77c192a8 | |||
6d5401d911 | |||
330d6e79f8 | |||
ed58b7a63c | |||
f6853114c1 | |||
8ec7285d32 | |||
c183c0fe89 | |||
38ad8fd27d | |||
de85070e73 | |||
5b8ebd6e1d | |||
db530cb5e5 | |||
7cd4d4faab | |||
2560a513dc | |||
1ee95be5d7 | |||
bd7546559c | |||
d18a2c8b75 | |||
0ebae0adc1 | |||
d70c49ccd0 | |||
5846939116 | |||
f124e74f01 | |||
05abb93e4b | |||
5839d46b7a | |||
bce0d63f7d | |||
14b9f5affc | |||
035a430470 | |||
0af9e46e76 | |||
c4530f1252 | |||
9f78a17583 | |||
eea0b1bc79 | |||
8338a6e066 | |||
ddba49dbea | |||
a6ff8a87de | |||
bf64bcf9ba | |||
8c5d9bda20 | |||
f1ac28b0aa | |||
ff725f931d | |||
31519ba416 | |||
0bca8f851c | |||
acf175da60 | |||
23eac24c84 | |||
0f9ef3bd51 | |||
2bdd54536e | |||
060ebcca0d | |||
b38a89e485 | |||
b5bfeee027 | |||
f36cacaf84 | |||
4278cec465 | |||
151627091b | |||
2ee3f02928 | |||
d77d3ccccf | |||
1e0c91658e | |||
568096b560 | |||
b2e175a991 | |||
757c4f151d | |||
8b71e18972 | |||
4e7f988371 | |||
eb04d7ab90 | |||
d6c3b7304d | |||
1ee563cd13 | |||
8787f2c528 | |||
4c102ab57c | |||
bf87c539fd | |||
d5802f3a5f | |||
c144d4d303 | |||
9770efde14 | |||
197ce7c30a | |||
5d8384a508 | |||
8bb46a5f86 | |||
a3087cb696 | |||
92b1a8c00d | |||
bbf641e721 | |||
539ab9ce63 | |||
a29390412b | |||
739eb80cfb | |||
f9a470a0f0 | |||
44358e118c | |||
2a7ee146f1 | |||
0ddeb02235 | |||
26d8ea1c1c | |||
fa4aaf2fb7 | |||
7645a0185b | |||
dcf38cdf08 | |||
c7ca500dd5 | |||
d9fcc8ca1c | |||
259f2bf1c1 | |||
67711082b0 | |||
f2d98bbf25 | |||
e40505adb5 | |||
ac7b7f4a1b | |||
aa53b1e5ef | |||
c4b73c8eda | |||
332bce6322 | |||
5ef1de2647 | |||
de60e76b1d | |||
8f8e8fe086 | |||
0ac9a83026 | |||
b8c97caec0 | |||
f9b8bfc020 | |||
f938bf5e3f | |||
a0df9babf9 | |||
0d9d8ef5a2 | |||
668948ebc1 | |||
83c9351d38 | |||
aa1e32494c | |||
6365a553dc | |||
1245a29be6 | |||
c79785c2db | |||
f117a89697 | |||
33f5b8c05b | |||
9a02a46cf4 | |||
4d6fc3c848 | |||
964f2eed69 | |||
b45cff2881 | |||
f219885939 | |||
0cfc730745 | |||
a3643f8b02 | |||
de61eaf6b8 | |||
075a2b6e4c | |||
37affbf572 | |||
20b3ecd0cd | |||
c782c4d668 | |||
d545b8df26 | |||
08e520e0ec | |||
a5db7a2cca | |||
74c2494bbd | |||
858f77cdf7 | |||
30dae34700 | |||
36d50facd7 | |||
55dd8797d8 | |||
27114184d2 | |||
1980f511ce | |||
4cbee05849 | |||
f2391d99d5 | |||
fa9ff37de9 | |||
39b60c1348 | |||
5bc15a7e54 | |||
81bc200fe7 | |||
89324d2327 | |||
47b81a8025 | |||
02cec420e7 | |||
8e7e959d8a | |||
fc51b7cc22 | |||
ff5850847f | |||
ab462fb546 | |||
a5eadc50a7 | |||
afe7f8d728 | |||
c137d49dcd | |||
b70337bac3 | |||
c9b5f25ffc | |||
96f6c28885 | |||
deb8aed91f | |||
fac270e596 | |||
0189adac8f | |||
af772d7a86 | |||
96554cc0ca | |||
ddb3698c89 | |||
9657ae31c3 | |||
0795774e9e | |||
763f256e1f | |||
367f450e30 | |||
7afdee7c01 | |||
87c5f19ce1 | |||
00d1a3176e | |||
6318e7b0ef | |||
5d23b1fef8 | |||
44fe02d2fd | |||
1f0de20b7f | |||
bfd2e106ac | |||
b1848e963f | |||
a29611fa2a | |||
8a369bd48a | |||
9ca7424d27 | |||
4f640755bc | |||
c085a91991 | |||
83cd3cab99 | |||
67dff84a13 | |||
c702a86fbf | |||
f335a990af | |||
ba68ab845b | |||
db0566701e | |||
433e62f813 | |||
6777de6569 | |||
63ee24235b | |||
c3eb46813e | |||
bee0fa79b2 | |||
d907bf2769 | |||
38bcece5ce | |||
193de36301 | |||
c080e86f11 | |||
79811a2faa | |||
b1e287727d | |||
2def18e271 | |||
3ddc2249f6 | |||
709ead9e06 | |||
7c574da261 | |||
0980365082 | |||
ba46d9fef8 | |||
4c0386bf8d | |||
6774c34422 | |||
3215d8e26a | |||
7911f1354f | |||
28f97c2619 | |||
4b43cc590f | |||
441c45c77f | |||
c246acb2d3 | |||
50ed020e16 | |||
12704a3a4a | |||
186f7cd9ee | |||
50830f0bf2 | |||
86025aa30b | |||
31e6f15eaf | |||
5ce6d74e90 | |||
02ffa6afb2 | |||
712870ddd9 | |||
35d1adb360 | |||
3b9f9ce93b | |||
a7c5e4f80c | |||
0b826f04c2 | |||
69d53b7a28 | |||
877bd97ba8 | |||
559b7e80a3 | |||
495c78eb25 | |||
cf69d6a08d | |||
0d95bb9b14 | |||
cf48d19759 | |||
14c602ccd8 | |||
2d45082d80 | |||
25cf527af4 | |||
76d081937e | |||
ccd4bb869c | |||
46d5c98926 | |||
1726ca8ccb | |||
b8c257f996 | |||
53e6894298 | |||
10d1ba707e | |||
c234e2af2a | |||
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 |
21
.github/ISSUE_TEMPLATE/bug.md
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
---
|
||||||
|
name: Bug Report
|
||||||
|
about: File a bug report.
|
||||||
|
---
|
||||||
|
|
||||||
|
## Bug Report
|
||||||
|
|
||||||
|
_Provide a descriptive title and a detailed explanation of the problem you are experiencing. Ensure that your issue has not been filed before._
|
||||||
|
|
||||||
|
### How to Reproduce
|
||||||
|
|
||||||
|
_Provide detailed information on how to reproduce the problem._
|
||||||
|
|
||||||
|
### Behaviors
|
||||||
|
|
||||||
|
_Provide information on the expected and actual behaviors._
|
||||||
|
|
||||||
|
### Environment
|
||||||
|
|
||||||
|
- OS version and build: _e.g. 10.0.14393_
|
||||||
|
- WinFsp version and build: _e.g. 2017.2 or 1.2.17341_
|
8
.github/ISSUE_TEMPLATE/enhancement.md
vendored
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
name: Enhancement Request
|
||||||
|
about: File an enhancement request.
|
||||||
|
---
|
||||||
|
|
||||||
|
## Enhancement Request
|
||||||
|
|
||||||
|
_Provide a descriptive title and a detailed explanation of the problem the requested enhancement would solve. Ensure that your issue has not been filed before._
|
8
.github/ISSUE_TEMPLATE/question.md
vendored
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
name: Question
|
||||||
|
about: Questions are better asked in the WinFsp Google Group. However you may ask a question here.
|
||||||
|
---
|
||||||
|
|
||||||
|
## Question
|
||||||
|
|
||||||
|
_Please consider asking questions in the [WinFsp Google Group](https://groups.google.com/forum/#!forum/winfsp) instead. Before asking a question please also consult the [WinFsp Frequently Asked Questions](https://github.com/billziss-gh/winfsp/wiki/Frequently-Asked-Questions)._
|
12
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
(Enter your PR description here.)
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
Before submitting this PR please review this checklist. Ideally all checkmarks should be checked upon submitting. (Use an x inside square brackets like so: [x])
|
||||||
|
|
||||||
|
- [ ] **Contributing**: You MUST read and be willing to accept the [CONTRIBUTOR AGREEMENT](https://github.com/billziss-gh/winfsp/blob/master/Contributors.asciidoc). The agreement gives joint copyright interests in your contributions to you and the original WinFsp author. If you have already accepted the [CONTRIBUTOR AGREEMENT](https://github.com/billziss-gh/winfsp/blob/master/Contributors.asciidoc) you do not need to do so again.
|
||||||
|
- [ ] **Topic branch**: Avoid creating the PR off the master branch of your fork. Consider creating a topic branch and request a pull from that. This allows you to add commits to the master branch of your fork without affecting this PR.
|
||||||
|
- [ ] **No tabs**: Consistently use SPACES everywhere. NO TABS, unless the file format requires it (e.g. Makefile).
|
||||||
|
- [ ] **Style**: Follow the same code style as the rest of the project.
|
||||||
|
- [ ] **Tests**: Include tests to the extent that it is possible, especially if you add a new feature.
|
||||||
|
- [ ] **Quality**: Your design and code should be of high quality and something that you are proud of.
|
@ -1,11 +1,263 @@
|
|||||||
= Changelog
|
= Changelog
|
||||||
|
|
||||||
|
|
||||||
|
v1.4 (2019.1)::
|
||||||
|
|
||||||
|
Changes since v1.3:
|
||||||
|
|
||||||
|
* FUSE3 API (version 3.2) is now available. The FUSE2 API (version 2.8) also remains supported.
|
||||||
|
* New `Control` file system operation allows sending custom control codes to the file system using the Windows `DeviceIoControl` API. FUSE `ioctl` is also supported.
|
||||||
|
* New `SetDelete` file system operation can optionally be used instead of `CanDelete`. `SetDelete` or `CanDelete` are used to handle the file "disposition" flag, which determines if a file is marked for deletion. See the relevant documentation for more details.
|
||||||
|
* `FlushAndPurgeOnCleanup` has now been added to the .NET API. (GitHub PR #176; thanks @FrKaram.)
|
||||||
|
* The Launcher now supports running file systems under the user account that started them. Use `RunAs="."` in the file system registry entry.
|
||||||
|
* New sample file system "airfs" contributed by @JohnOberschelp. Airfs is an in-memory file system like Memfs on which it is based on; it has received substantial improvements in how the file name space is maintained and has been modified to use modern C++ techniques by John.
|
||||||
|
* New sample file system "passthrough-fuse3" passes all operations to an underlying file system. This file system is built using the FUSE3 API. It builds and runs on both Windows and Cygwin.
|
||||||
|
* The FUSE layer now supports multiple file systems within a single process. This is a long standing problem that has been fixed. (GitHub issue #135.)
|
||||||
|
* The FSD includes a fix for a Windows problem: that case-sensitive file systems do not work properly when mounted as directories. See FAQ entry #3.
|
||||||
|
* The FSD includes a fix for a rare but serious problem. (GitHub issue #177. Thanks @thinkport.)
|
||||||
|
* The FSD includes a fix for an incompatibility with DrWeb Antivirus. (GitHub issue #192)
|
||||||
|
* The DLL includes a fix for an errorenous `STATUS_ACCESS_DENIED` on read-only directories. (GitHub issue #190. Thanks @alfaunits.)
|
||||||
|
|
||||||
|
|
||||||
|
v1.4B4 (2018.2 B4)::
|
||||||
|
|
||||||
|
Changes since v1.3:
|
||||||
|
|
||||||
|
* FUSE3 API (version 3.2) is now available. The FUSE2 API (version 2.8) also remains supported.
|
||||||
|
* New `Control` file system operation allows sending custom control codes to the file system using the Windows `DeviceIoControl` API. FUSE `ioctl` is also supported.
|
||||||
|
* New `SetDelete` file system operation can optionally be used instead of `CanDelete`. `SetDelete` or `CanDelete` are used to handle the file "disposition" flag, which determines if a file is marked for deletion. See the relevant documentation for more details.
|
||||||
|
* `FlushAndPurgeOnCleanup` has now been added to the .NET API. (GitHub PR #176; thanks @FrKaram.)
|
||||||
|
* The Launcher now supports running file systems under the user account that started them. Use `RunAs="."` in the file system registry entry.
|
||||||
|
* New sample file system "airfs" contributed by @JohnOberschelp. Airfs is an in-memory file system like Memfs on which it is based on; it has received substantial improvements in how the file name space is maintained and has been modified to use modern C++ techniques by John.
|
||||||
|
* New sample file system "passthrough-fuse3" passes all operations to an underlying file system. This file system is built using the FUSE3 API. It builds and runs on both Windows and Cygwin.
|
||||||
|
* The FUSE layer now supports multiple file systems within a single process. This is a long standing problem that has been fixed. (GitHub issue #135.)
|
||||||
|
* The FSD includes a fix for a Windows problem: that case-sensitive file systems do not work properly when mounted as directories. See FAQ entry #3.
|
||||||
|
* The FSD includes a fix for a rare but serious problem. (GitHub issue #177. Thanks @thinkport.)
|
||||||
|
* The FSD includes a fix for an incompatibility with DrWeb Antivirus. (GitHub issue #192)
|
||||||
|
* The DLL includes a fix for an errorenous `STATUS_ACCESS_DENIED` on read-only directories. (GitHub issue #190. Thanks @alfaunits.)
|
||||||
|
|
||||||
|
|
||||||
|
v1.4B3 (2018.2 B3)::
|
||||||
|
|
||||||
|
Changes since v1.3:
|
||||||
|
|
||||||
|
* FUSE3 API (version 3.2) is now available. The FUSE2 API (version 2.8) also remains supported.
|
||||||
|
* New `Control` file system operation allows sending custom control codes to the file system using the Windows `DeviceIoControl` API. FUSE `ioctl` is also supported.
|
||||||
|
* New `SetDelete` file system operation can optionally be used instead of `CanDelete`. `SetDelete` or `CanDelete` are used to handle the file "disposition" flag, which determines if a file is marked for deletion. See the relevant documentation for more details.
|
||||||
|
* `FlushAndPurgeOnCleanup` has now been added to the .NET API. (GitHub PR #176; thanks @FrKaram.)
|
||||||
|
* New sample file system "airfs" contributed by @JohnOberschelp. Airfs is an in-memory file system like Memfs on which it is based on; it has received substantial improvements in how the file name space is maintained and has been modified to use modern C++ techniques by John.
|
||||||
|
* New sample file system "passthrough-fuse3" passes all operations to an underlying file system. This file system is built using the FUSE3 API. It builds and runs on both Windows and Cygwin.
|
||||||
|
* The FUSE layer now supports multiple file systems within a single process. This is a long standing problem that has been fixed. (GitHub issue #135.)
|
||||||
|
* The FSD includes an experimental fix for a Windows problem: that case-sensitive file systems do not work properly when mounted as directories. See the relevant FAQ entry.
|
||||||
|
* The FSD includes a fix for an incompatibility with DrWeb Antivirus. (GitHub issue #192)
|
||||||
|
|
||||||
|
|
||||||
|
v1.4B2 (2018.2 B2)::
|
||||||
|
|
||||||
|
Changes since v1.3:
|
||||||
|
|
||||||
|
* FUSE3 API (version 3.2) is now available. The FUSE2 API (version 2.8) also remains supported.
|
||||||
|
* New `Control` file system operation allows sending custom control codes to the file system using the Windows `DeviceIoControl` API. FUSE `ioctl` is also supported.
|
||||||
|
* `FlushAndPurgeOnCleanup` has now been added to the .NET API. (GitHub PR #176; thanks @FrKaram.)
|
||||||
|
* New sample file system "airfs" contributed by @JohnOberschelp. Airfs is an in-memory file system like Memfs on which it is based on; it has received substantial improvements in how the file name space is maintained and has been modified to use modern C++ techniques by John.
|
||||||
|
* New sample file system "passthrough-fuse3" passes all operations to an underlying file system. This file system is built using the FUSE3 API. It builds and runs on both Windows and Cygwin.
|
||||||
|
* The FUSE layer now supports multiple file systems within a single process. This is a long standing problem that has been fixed. (GitHub issue #135.)
|
||||||
|
|
||||||
|
|
||||||
|
v1.4B1 (2018.2 B1)::
|
||||||
|
|
||||||
|
Changes since v1.3:
|
||||||
|
|
||||||
|
* New `Control` file system operation allows sending custom control codes to the file system using the Windows `DeviceIoControl` API.
|
||||||
|
|
||||||
|
|
||||||
|
v1.3 (2018.1)::
|
||||||
|
|
||||||
|
Changes since v1.2POST1:
|
||||||
|
|
||||||
|
* Multiple Launcher changes:
|
||||||
|
** New `FspLaunch` API. File systems can be started, stopped, queried and listed using `FspLaunchStart`, `FspLaunchStop`, `FspLaunchGetInfo` and `FspLaunchGetNameList`. The API is available in <winfsp/launch.h>
|
||||||
|
** New Launcher registry settings `RunAs` and `WorkDirectory`. `RunAs` allows the laucher to launch a file system process under the service accounts LocalService and NetworkService. `WorkDirectory` can be used to specify the work directory for a newly launched file system process.
|
||||||
|
* `FSP_FSCTL_VOLUME_PARAMS::FlushAndPurgeOnCleanup` limits the time that Windows keeps files open after an application has closed them. This purges the cache on the last `CloseHandle`, which is a performance drawback.
|
||||||
|
** This is now the default behavior on FUSE. To revert to the previous behavior of keeping files open indefinitely use `-o KeepFileCache`.
|
||||||
|
* `FSP_FSCTL_VOLUME_PARAMS` has been extended with fine-grained timeouts: `VolumeInfoTimeout`, `DirInfoTimeout`, `SecurityTimeout`, `StreamInfoTimeout`. Set `FSP_FSCTL_VOLUME_PARAMS::Version == sizeof(FSP_FSCTL_VOLUME_PARAMS)` to access the new fields.
|
||||||
|
** New FUSE optons `VolumeInfoTimeout`, `DirInfoTimeout` complement the existing `FileInfoTimeout`.
|
||||||
|
* The FSD (File System Driver) and its interaction with the Windows MUP (Multiple UNC Provider) has been changed. In practice this eliminates the delays experienced when right-clicking on a WinFsp-backed network drive in the Windows Explorer. (GitHub issue #87.)
|
||||||
|
* The WinFsp network provider is now added first in the provider order list. Previously it was added last. (GitHub PR #131; thanks @felfert.)
|
||||||
|
* The WinFsp installer now uses the Wix `Provides` dependency extension to provide a `WinFsp` dependency key. (GitHub PR #129; thanks @felfert.)
|
||||||
|
* New FUSE `create_umask` option. (GitHub issue #138.)
|
||||||
|
* Fix C++ compilation error for WinFsp-FUSE. (GitHub PR #154; thanks @benrubson.)
|
||||||
|
|
||||||
|
|
||||||
|
v1.3B3 (2018.1 B3)::
|
||||||
|
|
||||||
|
Changes since v1.2POST1:
|
||||||
|
|
||||||
|
* Multiple Launcher changes:
|
||||||
|
** New `FspLaunch` API. File systems can be started, stopped, queried and listed using `FspLaunchStart`, `FspLaunchStop`, `FspLaunchGetInfo` and `FspLaunchGetNameList`. The API is available in <winfsp/launch.h>
|
||||||
|
** New Launcher registry settings `RunAs` and `WorkDirectory`. `RunAs` allows the laucher to launch a file system process under the service accounts LocalService and NetworkService. `WorkDirectory` can be used to specify the work directory for a newly launched file system process.
|
||||||
|
* `FSP_FSCTL_VOLUME_PARAMS::FlushAndPurgeOnCleanup` limits the time that Windows keeps files open after an application has closed them. This purges the cache on the last `CloseHandle`, which is a performance drawback.
|
||||||
|
** This is now the default behavior on FUSE. To revert to the previous behavior of keeping files open indefinitely use `-o KeepFileCache`.
|
||||||
|
* `FSP_FSCTL_VOLUME_PARAMS` has been extended with fine-grained timeouts: `VolumeInfoTimeout`, `DirInfoTimeout`, `SecurityTimeout`, `StreamInfoTimeout`. Set `FSP_FSCTL_VOLUME_PARAMS::Version == sizeof(FSP_FSCTL_VOLUME_PARAMS)` to access the new fields.
|
||||||
|
** New FUSE optons `VolumeInfoTimeout`, `DirInfoTimeout` complement the existing `FileInfoTimeout`.
|
||||||
|
* The FSD (File System Driver) and its interaction with the Windows MUP (Multiple UNC Provider) has been changed. In practice this eliminates the delays experienced when right-clicking on a WinFsp-backed network drive in the Windows Explorer. (GitHub issue #87.)
|
||||||
|
* The WinFsp network provider is now added first in the provider order list. Previously it was added last. (GitHub PR #131; thanks @felfert.)
|
||||||
|
* The WinFsp installer now uses the Wix `Provides` dependency extension to provide a `WinFsp` dependency key. (GitHub PR #129; thanks @felfert.)
|
||||||
|
* New FUSE `create_umask` option. (GitHub issue #138.)
|
||||||
|
* Fix C++ compilation error for WinFsp-FUSE. (GitHub PR #154; thanks @benrubson.)
|
||||||
|
* *NOTE*: Prior v1.3 betas run the MEMFS sample file systems under the LocalService account. This is no longer the case: going forward the MEMFS file systems will be running under the LocalSystem account (as in v1.2POST1).
|
||||||
|
|
||||||
|
|
||||||
|
v1.3B2 (2018.1 B2)::
|
||||||
|
|
||||||
|
Changes since v1.2POST1:
|
||||||
|
|
||||||
|
* Multiple Launcher changes:
|
||||||
|
** New `FspLaunch` API. File systems can be started, stopped, queried and listed using `FspLaunchStart`, `FspLaunchStop`, `FspLaunchGetInfo` and `FspLaunchGetNameList`.
|
||||||
|
** New Launcher registry settings `RunAs` and `WorkDirectory`. `RunAs` allows the laucher to launch a file system process under the service accounts LocalService and NetworkService. `WorkDirectory` can be used to specify the work directory for a newly launched file system process.
|
||||||
|
* The MEMFS sample file systems are now launched under the LocalService account.
|
||||||
|
* The FSD (File System Driver) and its interaction with the Windows MUP (Multiple UNC Provider) has been changed. In practice this eliminates the delays experienced when right-clicking on a WinFsp-backed network drive in the Windows Explorer. (GitHub issue #87.)
|
||||||
|
* The WinFsp network provider is now added first in the provider order list. Previously it was added last. (GitHub PR #131; thanks @felfert.)
|
||||||
|
* The WinFsp installer now uses the Wix `Provides` dependency extension to provide a `WinFsp` dependency key. (GitHub PR #129; thanks @felfert.)
|
||||||
|
|
||||||
|
|
||||||
|
v1.3B1 (2018.1 B1)::
|
||||||
|
|
||||||
|
Changes since v1.2POST1:
|
||||||
|
|
||||||
|
- The WinFsp Launcher can now be controlled by the new `FspLaunch` API. File systems can be started, stopped, queried and listed using `FspLaunchStart`, `FspLaunchStop`, `FspLaunchGetInfo` and `FspLaunchGetNameList`.
|
||||||
|
- The WinFsp launcher now supports new registry settings `RunAs` and `WorkDirectory`. `RunAs` allows the laucher to launch a file system process under the service accounts LocalService and NetworkService. `WorkDirectory` can be used to specify the work directory for a newly launched file system process.
|
||||||
|
- The MEMFS sample file systems are now launched under the LocalService account.
|
||||||
|
- The WinFsp network provider is now added first in the provider order list. Previously it was added last. (GitHub PR #131; thanks @felfert.)
|
||||||
|
- The WinFsp installer now uses the Wix `Provides` dependency extension to provide a `WinFsp` dependency key. (GitHub PR #129; thanks @felfert.)
|
||||||
|
|
||||||
|
|
||||||
|
v1.2POST1 (2017.2; issue #127)::
|
||||||
|
|
||||||
|
Changes since v1.1:
|
||||||
|
|
||||||
|
- WinFsp-FUSE now supports BSD flags (Windows file attributes) during `getattr` and `fgetattr`. It also adds the `chflags` operation. BSD flags support requires use of the `FSP_FUSE_CAP_STAT_EX` capability and the new `struct fuse_stat_ex` which includes an `st_flags` field. If the preprocessor macro `FSP_FUSE_USE_STAT_EX` is defined before inclusion of `<fuse.h>` then `struct fuse_stat` will also be defined to include the `st_flags` field.
|
||||||
|
- WinFsp-FUSE also adds the following OSXFUSE operations: `setcrtime`, `setchgtime`. These can be used to set the creation (birth) time and change (ctime) time of a file.
|
||||||
|
- New `GetDirInfoByName` file system operation adds fast queries of directory info by file name rather than pattern [e.g. `FindFirstFileW(L"foobar", FindData)`]. Tests with fsbench showed that such queries are sped up by an order of magnitude when using `GetDirInfoByName` in MEMFS. Case-sensitive FUSE file systems get this optimization for free. The .NET layer also adds `GetDirInfoByName`.
|
||||||
|
- New `FspFileSystemOperationProcessId` API adds support for getting the originating process ID (PID) during `Create`, `Open` and `Rename` calls. FUSE file systems can now access `fuse_context::pid`. The .NET layer also adds `GetOperationProcessId`.
|
||||||
|
- New command line tool `fsptool` allows command line access to some WinFsp features.
|
||||||
|
- The WinFsp launcher now passes the name of the user who launched the file system as a special parameter %U. This is useful to file systems that use the launcher infrastructure, such as SSHFS-Win. [Please note that in earlier betas the user name was passed as parameter %3; the previous method was insecure and is no longer supported.]
|
||||||
|
- Important GitHub issues fixed: #96, #97, #103, #107, #127
|
||||||
|
|
||||||
|
|
||||||
|
v1.2 (2017.2)::
|
||||||
|
|
||||||
|
Changes since v1.1:
|
||||||
|
|
||||||
|
- WinFsp-FUSE now supports BSD flags (Windows file attributes) during `getattr` and `fgetattr`. It also adds the `chflags` operation. BSD flags support requires use of the `FSP_FUSE_CAP_STAT_EX` capability and the new `struct fuse_stat_ex` which includes an `st_flags` field. If the preprocessor macro `FSP_FUSE_USE_STAT_EX` is defined before inclusion of `<fuse.h>` then `struct fuse_stat` will also be defined to include the `st_flags` field.
|
||||||
|
- WinFsp-FUSE also adds the following OSXFUSE operations: `setcrtime`, `setchgtime`. These can be used to set the creation (birth) time and change (ctime) time of a file.
|
||||||
|
- New `GetDirInfoByName` file system operation adds fast queries of directory info by file name rather than pattern [e.g. `FindFirstFileW(L"foobar", FindData)`]. Tests with fsbench showed that such queries are sped up by an order of magnitude when using `GetDirInfoByName` in MEMFS. Case-sensitive FUSE file systems get this optimization for free. The .NET layer also adds `GetDirInfoByName`.
|
||||||
|
- New `FspFileSystemOperationProcessId` API adds support for getting the originating process ID (PID) during `Create`, `Open` and `Rename` calls. FUSE file systems can now access `fuse_context::pid`. The .NET layer also adds `GetOperationProcessId`.
|
||||||
|
- New command line tool `fsptool` allows command line access to some WinFsp features.
|
||||||
|
- The WinFsp launcher now passes the name of the user who launched the file system as a special parameter %U. This is useful to file systems that use the launcher infrastructure, such as SSHFS-Win. [Please note that in earlier betas the user name was passed as parameter %3; the previous method was insecure and is no longer supported.]
|
||||||
|
- Important GitHub issues fixed: #96, #97, #103, #107
|
||||||
|
|
||||||
|
|
||||||
|
v1.2B3 (2017.2 B3)::
|
||||||
|
|
||||||
|
Changes since v1.1:
|
||||||
|
|
||||||
|
- WinFsp-FUSE now supports BSD flags (Windows file attributes) during `getattr` and `fgetattr`. It also adds the `chflags` operation. BSD flags support requires use of the `FSP_FUSE_CAP_STAT_EX` capability and the new `struct fuse_stat_ex` which includes an `st_flags` field. If the preprocessor macro `FSP_FUSE_USE_STAT_EX` is defined before inclusion of `<fuse.h>` then `struct fuse_stat` will also be defined to include the `st_flags` field.
|
||||||
|
- WinFsp-FUSE also adds the following OSXFUSE operations: `setcrtime`, `setchgtime`. These can be used to set the creation (birth) time and change (ctime) time of a file.
|
||||||
|
- New `GetDirInfoByName` file system operation adds fast queries of directory info by file name rather than pattern [e.g. `FindFirstFileW(L"foobar", FindData)`]. Tests with fsbench showed that such queries are sped up by an order of magnitude when using `GetDirInfoByName` in MEMFS. Case-sensitive FUSE file systems get this optimization for free. The .NET layer also adds `GetDirInfoByName`.
|
||||||
|
- New `FspFileSystemOperationProcessId` API adds support for getting the originating process ID (PID) during `Create`, `Open` and `Rename` calls. FUSE file systems can now access `fuse_context::pid`. The .NET layer also adds `GetOperationProcessId`.
|
||||||
|
- New command line tool `fsptool` allows command line access to some WinFsp features.
|
||||||
|
- The WinFsp launcher now passes the username of the user who launched the file system as parameter %3. This is useful to file systems that use the launcher infrastructure, such as SSHFS-Win.
|
||||||
|
- Important GitHub issues fixed: #96, #97, #103, #107
|
||||||
|
|
||||||
|
|
||||||
|
v1.2B2 (2017.2 B2)::
|
||||||
|
|
||||||
|
Changes since v1.1:
|
||||||
|
|
||||||
|
- New command line tool `fsptool` allows command line access to some WinFsp features.
|
||||||
|
- New `GetDirInfoByName` file system operation adds fast queries of directory info by file name rather than pattern [e.g. `FindFirstFileW(L"foobar", FindData)`]. Tests with fsbench showed that such queries are sped up by an order of magnitude when using `GetDirInfoByName` in MEMFS. Case-sensitive FUSE file systems get this optimization for free. The .NET layer also adds `GetDirInfoByName`.
|
||||||
|
- New `FspFileSystemOperationProcessId` API adds support for getting the originating process ID (PID) during `Create`, `Open` and `Rename` calls. FUSE file systems can now access `fuse_context::pid`. The .NET layer also adds `GetOperationProcessId`.
|
||||||
|
- Important GitHub issues fixed: #96, #97, #103, #107
|
||||||
|
|
||||||
|
|
||||||
|
v1.2B1 (2017.2 B1)::
|
||||||
|
|
||||||
|
- New command line tool `fsptool` allows command line access to some WinFsp features.
|
||||||
|
- New `GetDirInfoByName` file system operation adds fast queries of directory info by file name rather than pattern [e.g. `FindFirstFileW("foobar", FindData)`]. Tests with fsbench showed that such queries are sped up by an order of magnitude when using `GetDirInfoByName` in MEMFS.
|
||||||
|
- New `FspFileSystemOperationProcessId` API adds support for getting the originating process ID (PID) during `Create`, `Open` and `Rename` calls.
|
||||||
|
|
||||||
|
|
||||||
|
v1.1 (2017.1)::
|
||||||
|
|
||||||
|
This release brings some major new components and improvements.
|
||||||
|
|
||||||
|
- A .NET layer that allows the creation of file systems in managed mode. This is contained in the new `winfsp-msil.dll`. The new .NET layer is being tested with the WinFsp test suites and Microsoft's ifstest.
|
||||||
|
- FUSE for Cygwin is now included with the installer.
|
||||||
|
- FUSE now has a `-ovolname=VOLNAME` parameter that allows setting the volume label. Thanks @samkelly.
|
||||||
|
- A number of other FUSE improvements have been made (see issue #85).
|
||||||
|
|
||||||
|
NOTE: The C++ layer included in the v1.1 beta releases is not part of this release as it is still work in progress. It can be found in `inc/winfsp/winfsp.hpp` in the WinFsp source repository.
|
||||||
|
|
||||||
|
|
||||||
|
v1.1B3 (2017.1 B3)::
|
||||||
|
|
||||||
|
v1.1B2 (2017.1 B2)::
|
||||||
|
|
||||||
|
v1.1B1 (2017.1 BETA)::
|
||||||
|
|
||||||
|
This release brings some major new components and improvements.
|
||||||
|
|
||||||
|
- A .NET layer that allows the creation of file systems in managed mode. This is contained in the new `winfsp-msil.dll`. The new .NET layer is being tested with the WinFsp test suites and Microsoft's ifstest.
|
||||||
|
- A simple C++ layer can be found in `inc/winfsp/winfsp.hpp`.
|
||||||
|
- FUSE for Cygwin is now included with the installer.
|
||||||
|
- FUSE now has a `-ovolname=VOLNAME` parameter that allows setting the volume label. Thanks @samkelly.
|
||||||
|
|
||||||
|
|
||||||
|
v1.0::
|
||||||
|
|
||||||
|
This is the WinFsp 2017 release! :tada:
|
||||||
|
|
||||||
|
- The API is now *FROZEN*. Breaking API changes will receive a major version update (`2.0`). Incremental API changes will receive a minor version update (`1.x`).
|
||||||
|
- Adds chocolatey package. Try `choco install winfsp` (note: pending approval from chocolatey.org).
|
||||||
|
- FUSE `-d` output now always goes to stderr. There is also a new `-oDebugLog=FILE` switch to specify a debug output file.
|
||||||
|
- FUSE now provides a default `statfs` implementation if a file system does not provide one.
|
||||||
|
- The WinFsp DLL now exports `fuse_*` symbols in addition to the `fsp_fuse_*` symbols. These symbols are for use with programs that use FFI technology such as jnr-fuse and fusepy *ONLY*. They are not supposed to be used by native C/C++ programs. Such programs are supposed to include the `<fuse.h>` headers.
|
||||||
|
|
||||||
|
|
||||||
|
v1.0RC3::
|
||||||
|
|
||||||
|
This is the WinFsp 2017 Release Candidate 3, which should be the last Release Candidate according to the current plan. This release fixes a major issue with some file systems and includes a few smaller changes:
|
||||||
|
|
||||||
|
- Fixes GitHub issue #55. Prior to this fix it was possible for a rogue process (or faulty file system) to crash Windows using WinFsp. For full details read http://www.osronline.com/showthread.cfm?link=282037[this thread].
|
||||||
|
- Introduces the `FspFileSystemSetMountPointEx` API, which allows the specification of a security descriptor when mounting over a directory.
|
||||||
|
- Introduces the `FspVersion` API, which allows the retrieval of the WinFsp DLL version. Currently this reports `0x00010000` (version `1.0`).
|
||||||
|
- Introduces the `FSP_FUSE_CAP_CASE_INSENSITIVE` and `FSP_FUSE_CAP_READDIR_PLUS` WinFsp-FUSE flags. The `FSP_FUSE_CAP_CASE_INSENSITIVE` flag allows a file system to mark itself as case-insensitive. The `FSP_FUSE_CAP_READDIR_PLUS` flag allows a file system to include full `stat` details when responding to the `readdir` operation (thus avoiding extraneous `getattr` calls).
|
||||||
|
- When using WinFsp-FUSE over Cygwin, POSIX paths can be used as mountpoints.
|
||||||
|
- Fixes GitHub issue #45. Prior to this fix, file systems that do not properly implement `Cleanup` (including FUSE file systems) would at times disallow renaming of directories.
|
||||||
|
|
||||||
|
|
||||||
|
v1.0RC2::
|
||||||
|
|
||||||
|
This is the WinFsp 2017 Release Candidate 2. Some important changes included below:
|
||||||
|
|
||||||
|
- WinFsp is now available under the GPLv3 with a special exception for Free/Libre and Open Source Software.
|
||||||
|
- The location of the WinFsp launcher registry entries is now `HKEY_LOCAL_MACHINE\Software\WinFsp\Services`. [On Win64 the actual location is `HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\WinFsp\Services`.] This change was necessary to avoid loss of third party file system registry entries during WinFsp uninstallation. [See GitHub issue #31.]
|
||||||
|
- Despite stating in the previous release that the API has been finalized the `ReadDirectory` `FSP_FILE_SYSTEM_INTERFACE` operation has been changed. Extensive testing with multiple file systems has shown that `ReadDirectory` was hard to implement correctly. The new definition should make implementation easier for most file systems. [See GitHub issue #34.]
|
||||||
|
- Some API's to facilitate `ReadDirectory` implementation have been added. Look for `FspFileSystem*DirectoryBuffer` symbols.
|
||||||
|
- The installer now (optionally) installs a sample file system called "passthrough". This is a simple file system that passes all operations to an underlying file system. There is also a tutorial for this file system (in the doc directory).
|
||||||
|
- The installer now (optionally) installs a sample file system called "passthrough-fuse". This file system performs the same function as the "passthrough" file system, but uses the FUSE compatibility layer. It builds and runs on both Windows and Cygwin.
|
||||||
|
|
||||||
|
|
||||||
v1.0RC1::
|
v1.0RC1::
|
||||||
|
|
||||||
This is the first Release Candidate. It has been tested for robustness and correct file system semantics in a variety of scenarios. Some of the more important changes:
|
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.
|
- 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.
|
- Sharing a (disk) file system over the network is supported.
|
||||||
- Case insensitive file systems are supported.
|
- Case insensitive file systems are supported.
|
||||||
- Directories are supported as mount points.
|
- Directories are supported as mount points.
|
||||||
|
@ -54,5 +54,11 @@ This CONTRIBUTOR AGREEMENT applies to any contribution that you make to the WinF
|
|||||||
CONTRIBUTOR LIST
|
CONTRIBUTOR LIST
|
||||||
----------------
|
----------------
|
||||||
|===
|
|===
|
||||||
|Bill Zissimopoulos |billziss at navimatics.com
|
|Ben Rubson |ben.rubson at gmail.com
|
||||||
|
|Bill Zissimopoulos |billziss at navimatics.com
|
||||||
|
|Francois Karam (KS2, http://www.ks2.fr) |francois.karam at ks2.fr
|
||||||
|
|Fritz Elfert |fritz-github at fritz-elfert.de
|
||||||
|
|John Oberschelp |john at oberschelp.net
|
||||||
|
|Sam Kelly (DuroSoft Technologies LLC, https://durosoft.com) |sam at durosoft.com
|
||||||
|
|Tobias Urlaub |saibotu at outlook.de
|
||||||
|===
|
|===
|
||||||
|
31
License.txt
@ -1,8 +1,35 @@
|
|||||||
The WinFsp project is Copyright (C) Bill Zissimopoulos. It is licensed
|
The WinFsp project is Copyright (C) Bill Zissimopoulos. It is licensed
|
||||||
under the terms of the GPLv3. The full text of this license follows
|
under the terms of the GPLv3.
|
||||||
below. Commercial licensing options are also available: Please contact
|
|
||||||
|
As a special exception to GPLv3, Bill Zissimopoulos grants additional
|
||||||
|
permissions to Free/Libre and Open Source Software ("FLOSS") without requiring
|
||||||
|
that such software is covered by the GPLv3.
|
||||||
|
|
||||||
|
1. Permission to link with a platform specific version of the WinFsp DLL
|
||||||
|
(one of: winfsp-x64.dll, winfsp-x86.dll, winfsp-msil.dll).
|
||||||
|
|
||||||
|
2. Permission to distribute unmodified binary releases of the WinFsp
|
||||||
|
installer (as released by the WinFsp project).
|
||||||
|
|
||||||
|
These permissions (and no other) are granted provided that the software:
|
||||||
|
|
||||||
|
1. Is distributed under a license that satisfies the Free Software
|
||||||
|
Definition Version 1.141 (https://www.gnu.org/philosophy/free-sw.en.html)
|
||||||
|
or the Open Source Definition Version 1.9 (https://opensource.org/osd).
|
||||||
|
|
||||||
|
2. Includes the copyright notice "WinFsp - Windows File System Proxy,
|
||||||
|
Copyright (C) Bill Zissimopoulos" and a link to the WinFsp repository in
|
||||||
|
its user-interface and any user-facing documentation.
|
||||||
|
|
||||||
|
3. Is not linked or distributed with proprietary (non-FLOSS) software.
|
||||||
|
[You cannot mix FLOSS and proprietary software while using WinFsp under
|
||||||
|
this special exception.]
|
||||||
|
|
||||||
|
Commercial licensing options are also available: Please contact
|
||||||
Bill Zissimopoulos <billziss at navimatics.com>.
|
Bill Zissimopoulos <billziss at navimatics.com>.
|
||||||
|
|
||||||
|
The full text of the GPLv3 license follows below.
|
||||||
|
|
||||||
-----------------------------------------------------------------------
|
-----------------------------------------------------------------------
|
||||||
|
|
||||||
GNU GENERAL PUBLIC LICENSE
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
134
README.md
@ -1,66 +1,134 @@
|
|||||||
# WinFsp - Windows File System Proxy
|
<h1 align="center">
|
||||||
|
WinFsp · Windows File System Proxy
|
||||||
|
<a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fgithub.com%2Fbillziss-gh%2Fwinfsp&text=Do%20you%20want%20to%20write%20a%20file%20system%20on%20Windows%3F%20WinFsp%20is%20well%20tested%2C%20very%20fast%20and%20easy%20to%20use%21&hashtags=windows%2Cfilesystem">
|
||||||
|
<img src="https://img.shields.io/twitter/url/http/shields.io.svg?style=social&label=Share"/>
|
||||||
|
</a>
|
||||||
|
</h1>
|
||||||
|
|
||||||

|
<p align="center">
|
||||||
|
<b>Download</b><br>
|
||||||
|
<a href="https://github.com/billziss-gh/winfsp/releases/latest">
|
||||||
|
<img src="https://img.shields.io/github/release/billziss-gh/winfsp.svg?label=stable&style=for-the-badge"/>
|
||||||
|
</a>
|
||||||
|
<a href="https://github.com/billziss-gh/winfsp/releases">
|
||||||
|
<img src="https://img.shields.io/github/release/billziss-gh/winfsp/all.svg?label=latest&colorB=e52e4b&style=for-the-badge"/>
|
||||||
|
</a>
|
||||||
|
<a href="https://chocolatey.org/packages/winfsp">
|
||||||
|
<img src="https://img.shields.io/badge/choco-install%20winfsp-black.svg?style=for-the-badge"/>
|
||||||
|
</a>
|
||||||
|
<br/>
|
||||||
|
<b>Quick Links</b><br/>
|
||||||
|
<a href="#benefits">Benefits</a> |
|
||||||
|
<a href="https://github.com/billziss-gh/winfsp/wiki">Wiki</a> |
|
||||||
|
<a href="https://groups.google.com/forum/#!forum/winfsp">Questions</a> |
|
||||||
|
<a href="https://twitter.com/BZissimopoulos">Author's Twitter</a>
|
||||||
|
<br/>
|
||||||
|
<br/>
|
||||||
|
<a href="https://ci.appveyor.com/project/billziss-gh/winfsp">
|
||||||
|
<img src="https://img.shields.io/appveyor/ci/billziss-gh/winfsp.svg"/>
|
||||||
|
</a>
|
||||||
|
<br/>
|
||||||
|
<br/>
|
||||||
|
</p>
|
||||||
|
|
||||||
WinFsp is a set of software components for Windows computers that allows the creation of user mode file systems. In this sense it is similar to FUSE (Filesystem in Userspace), which provides the same functionality on UNIX-like computers.
|
<p align="center">
|
||||||
|
WinFsp is a set of software components for Windows computers that allows the creation of user mode file systems. In this sense it is similar to FUSE (Filesystem in Userspace), which provides the same functionality on UNIX-like computers.
|
||||||
|
<br/>
|
||||||
|
<br/>
|
||||||
|
<img src="http://www.secfs.net/winfsp/files/cap.gif" height="450"/>
|
||||||
|
</p>
|
||||||
|
|
||||||
Some of the benefits and features of using WinFsp are listed below:
|
## Benefits
|
||||||
|
|
||||||
* Allows for easy development of file systems in user mode. There are no restrictions on what a process can do in order to implement a file system (other than respond in a timely manner to file system requests).
|
### Stability
|
||||||
* Support for disk and network based file systems.
|
|
||||||
* Support for NTFS level security and access control.
|
WinFsp is very stable. There are no known kernel mode crashes and it does not suffer from resource leaks or similar problems. WinFsp owes this stability to its [Design](doc/WinFsp-Design.asciidoc) and its rigorous [Testing Regime](doc/WinFsp-Testing.asciidoc).
|
||||||
* Support for memory mapped files, cached files and the NT cache manager.
|
|
||||||
* Support for file change notifications.
|
### Performance
|
||||||
* Support for file locking.
|
|
||||||
* Correct NT semantics with respect to file sharing, file deletion and renaming.
|
WinFsp outperforms its competition and in many scenarios performs as well as NTFS. Read more about its [Performance](doc/WinFsp-Performance-Testing.asciidoc).
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<img src="doc/WinFsp-Performance-Testing/file_tests.png" height="300"/>
|
||||||
|
<img src="doc/WinFsp-Performance-Testing/rdwr_tests.png" height="300"/>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
### Compatibility
|
||||||
|
|
||||||
|
WinFsp strives for compatibility with NTFS and file system correctness. For the full details see the [Compatibility](doc/NTFS-Compatibility.asciidoc) document.
|
||||||
|
|
||||||
|
### Easy to Use
|
||||||
|
|
||||||
|
WinFsp has an easy to use but comprehensive API.
|
||||||
|
|
||||||
|
* This simple [Tutorial](doc/WinFsp-Tutorial.asciidoc) explains how to build a file system.
|
||||||
|
* Consult the [API Reference](http://www.secfs.net/winfsp/apiref/) for native development.
|
||||||
|
* Includes .NET layer for managed development. See [src/dotnet](src/dotnet).
|
||||||
|
* Includes FUSE 2.8 compatibility layer: [fuse/fuse.h](inc/fuse/fuse.h)
|
||||||
|
* Includes FUSE 3.2 compatibility layer: [fuse3/fuse.h](inc/fuse3/fuse.h)
|
||||||
|
|
||||||
|
### Other Benefits
|
||||||
|
|
||||||
|
* Signed drivers provided on every release.
|
||||||
|
* Available under the [GPLv3](License.txt) license with a special exception for Free/Libre and Open Source Software.
|
||||||
|
|
||||||
To learn more about WinFsp, please visit its website: http://www.secfs.net/winfsp/
|
To learn more about WinFsp, please visit its website: http://www.secfs.net/winfsp/
|
||||||
|
|
||||||
## Project Organization
|
## Project Organization
|
||||||
|
|
||||||
WinFsp consists of a kernel mode FSD (File System Driver) and a user mode DLL (Dynamic Link Library). The FSD interfaces with NTOS (the Windows kernel) and handles all interactions necessary to present itself as a file system driver to NTOS. The DLL interfaces with the FSD and presents an easy to use API for creating user mode file systems.
|
|
||||||
|
|
||||||
The project source code is organized as follows:
|
The project source code is organized as follows:
|
||||||
|
|
||||||
* build/VStudio: WinFsp solution and project files.
|
* :file_folder: [build/VStudio](build/VStudio): WinFsp solution and project files.
|
||||||
* doc: The WinFsp design documents and additional documentation can be found here.
|
* :file_folder: [doc](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.
|
* :file_folder: [ext](ext): External dependencies.
|
||||||
* ext/test: Submodule pointing to the secfs.test project, which contains a number of tools for testing Windows and POSIX file systems.
|
* :file_folder: [ext/tlib](ext/tlib): A small test library originally from the secfs (Secure Cloud File System) project.
|
||||||
* inc/winfsp: Public headers for the WinFsp API.
|
* :file_folder: ext/test: Submodule pointing to the secfs.test project, which contains a number of tools for testing Windows and POSIX file systems.
|
||||||
* inc/fuse: Public headers for the FUSE compatibility layer.
|
* :file_folder: [inc](inc): Public headers.
|
||||||
* src/dll: Source code to the WinFsp DLL.
|
* :file_folder: [inc/fuse](inc/fuse): Public headers for the FUSE compatibility layer.
|
||||||
* src/dll/fuse: Source code to the FUSE compatibility layer.
|
* :file_folder: [inc/fuse3](inc/fuse3): Public headers for the FUSE3 compatibility layer.
|
||||||
* src/launcher: Source code to the launcher service and the launchctl utility.
|
* :file_folder: [inc/winfsp](inc/winfsp): Public headers for the WinFsp API.
|
||||||
* src/sys: Source code to the WinFsp FSD.
|
* :file_folder: [src](src): WinFsp source code.
|
||||||
* opt/cygfuse: Source code for the Cygwin FUSE package.
|
* :file_folder: [src/dll](src/dll): Source code to the WinFsp DLL.
|
||||||
* tst/memfs: Source code to an example file system written in C++ (memfs).
|
* :file_folder: [src/dll/fuse](src/dll/fuse): Source code to the FUSE compatibility layer.
|
||||||
* tst/winfsp-tests: WinFsp test suite.
|
* :file_folder: [src/dll/fuse3](src/dll/fuse3): Source code to the FUSE3 compatibility layer.
|
||||||
|
* :file_folder: [src/dotnet](src/dotnet): Source code to the .NET layer.
|
||||||
|
* :file_folder: [src/fsptool](src/fsptool): Source code to fsptool command line utility.
|
||||||
|
* :file_folder: [src/launcher](src/launcher): Source code to the launcher service and the launchctl utility.
|
||||||
|
* :file_folder: [src/sys](src/sys): Source code to the WinFsp FSD.
|
||||||
|
* :file_folder: [opt/cygfuse](opt/cygfuse): Source code to the FUSE for Cygwin package.
|
||||||
|
* :file_folder: [tst](tst): Source code to example file systems and test suites.
|
||||||
|
* :file_folder: [tst/winfsp-tests](tst/winfsp-tests): WinFsp test suite.
|
||||||
|
* :file_folder: [tools](tools): Various tools for building and testing WinFsp.
|
||||||
|
|
||||||
## Building and Running
|
## Building and Running
|
||||||
|
|
||||||
In order to build WinFsp you will need the following:
|
In order to build WinFsp you will need the following:
|
||||||
|
|
||||||
* Windows 10
|
|
||||||
* Visual Studio 2015
|
* Visual Studio 2015
|
||||||
* Windows Driver Kit (WDK) 10
|
* Windows Driver Kit (WDK) 10
|
||||||
* [Wix toolset](http://wixtoolset.org)
|
* [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/).
|
To fully build WinFsp (including the installer) you must use `tools\build.bat`. By default it builds a Release build, but you can choose either the Debug or Release configuration by using the syntax:
|
||||||
|
|
||||||
WinFsp is designed to run on Vista and above. It has been tested on the following platforms so far:
|
tools\build.bat CONFIGURATION
|
||||||
|
|
||||||
|
If you build the driver yourself it will not be signed and Windows will refuse to load it unless you enable "testsigning". You can enable "testsigning" using the command `bcdedit.exe -set testsigning on`. For more information see this [document](http://www.secfs.net/winfsp/develop/debug/).
|
||||||
|
|
||||||
|
WinFsp is designed to run on Windows 7 and above. It has been tested on the following platforms:
|
||||||
|
|
||||||
* Windows 7 Enterprise
|
* Windows 7 Enterprise
|
||||||
* Windows 8 Pro
|
* Windows 8 Pro
|
||||||
* Windows 10 Pro
|
|
||||||
* Windows Server 2012
|
* Windows Server 2012
|
||||||
|
* Windows 10 Pro
|
||||||
|
* Windows Server 2016
|
||||||
|
|
||||||
## How to Help
|
## How to Help
|
||||||
|
|
||||||
I am looking for help in the following areas:
|
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 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.
|
* If you are working with a language other than C/C++ (e.g. Delphi, Java, etc.) and you are interested in porting/wrapping WinFsp I would love to hear from you.
|
||||||
* There are a number of outstanding issues listed in the [GitHub repository](https://github.com/billziss-gh/winfsp/issues) ~~[BitBucket repository](https://bitbucket.org/billziss/winfsp/issues?status=new&status=open)~~. 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. If you decide to tackle any of those please coordinate with me as I am actively working on that issue list.
|
* 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.
|
In all cases I can provide ideas and/or support.
|
||||||
|
|
||||||
@ -73,4 +141,4 @@ If you wish to discuss WinFsp there are now two options:
|
|||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
WinFsp is available under the [GPLv3](http://www.gnu.org/licenses/gpl-3.0.html) license. If you find the constraints of the GPLv3 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.
|
||||||
|
15
appveyor.yml
@ -2,8 +2,14 @@ version: '{build}'
|
|||||||
|
|
||||||
environment:
|
environment:
|
||||||
matrix:
|
matrix:
|
||||||
|
- CONFIGURATION: Debug
|
||||||
|
TESTING: Func
|
||||||
- CONFIGURATION: Release
|
- CONFIGURATION: Release
|
||||||
TESTING: Perf
|
TESTING: Func
|
||||||
|
#- CONFIGURATION: Release
|
||||||
|
# TESTING: Avast
|
||||||
|
#- CONFIGURATION: Release
|
||||||
|
# TESTING: Perf
|
||||||
|
|
||||||
install:
|
install:
|
||||||
- git submodule update --init --recursive
|
- git submodule update --init --recursive
|
||||||
@ -19,13 +25,18 @@ build_script:
|
|||||||
- tools\build.bat %CONFIGURATION%
|
- tools\build.bat %CONFIGURATION%
|
||||||
|
|
||||||
test_script:
|
test_script:
|
||||||
- for %%f in ("build\VStudio\build\%CONFIGURATION%\winfsp-*.msi") do start /wait msiexec /i %%f /qn INSTALLLEVEL=1000
|
- choco install winfsp -s build\VStudio\build\%CONFIGURATION% -y
|
||||||
- if %TESTING%==Func appveyor DownloadFile http://www.secfs.net/winfsp/resources/Test.Filter.Driver.zip && 7z x Test.Filter.Driver.zip
|
- 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 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\nmake-ext-test.bat %CONFIGURATION%
|
||||||
- if %TESTING%==Func tools\run-tests.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% ifstest
|
||||||
|
- if %TESTING%==Func tools\run-tests.bat %CONFIGURATION% sample
|
||||||
|
- if %TESTING%==Func tools\run-tests.bat %CONFIGURATION% compat
|
||||||
|
- if %TESTING%==Avast choco install avastfreeantivirus && fltmc instances -v "C:"
|
||||||
|
- if %TESTING%==Avast tools\run-tests.bat %CONFIGURATION% avast-tests
|
||||||
- if %TESTING%==Perf tools\run-perf-tests.bat %CONFIGURATION% baseline > perf-tests.csv && type perf-tests.csv & appveyor PushArtifact perf-tests.csv
|
- if %TESTING%==Perf tools\run-perf-tests.bat %CONFIGURATION% baseline > perf-tests.csv && type perf-tests.csv & appveyor PushArtifact perf-tests.csv
|
||||||
|
- choco uninstall winfsp -y
|
||||||
- if exist %SystemRoot%\memory.dmp exit 1
|
- if exist %SystemRoot%\memory.dmp exit 1
|
||||||
|
|
||||||
on_finish:
|
on_finish:
|
||||||
|
1
build/VStudio/.gitignore
vendored
@ -3,3 +3,4 @@ build
|
|||||||
*.suo
|
*.suo
|
||||||
*.vcproj.*
|
*.vcproj.*
|
||||||
*.vcxproj.user
|
*.vcxproj.user
|
||||||
|
*.csproj.user
|
||||||
|
113
build/VStudio/dotnet/winfsp.net.csproj
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<Import Project="..\version.properties" />
|
||||||
|
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<ProjectGuid>{94580219-CC8D-4FE5-A3BE-437B0B3481E1}</ProjectGuid>
|
||||||
|
<OutputType>Library</OutputType>
|
||||||
|
<ProjectName>winfsp.net</ProjectName>
|
||||||
|
<RootNamespace>Fsp</RootNamespace>
|
||||||
|
<AssemblyName>winfsp-msil</AssemblyName>
|
||||||
|
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
|
||||||
|
<FileAlignment>512</FileAlignment>
|
||||||
|
<TargetFrameworkProfile />
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<Optimize>false</Optimize>
|
||||||
|
<OutputPath>$(SolutionDir)build\$(Configuration)\</OutputPath>
|
||||||
|
<BaseIntermediateOutputPath>$(SolutionDir)build\$(ProjectName).build\</BaseIntermediateOutputPath>
|
||||||
|
<IntermediateOutputPath>$(BaseIntermediateOutputPath)$(Configuration)\</IntermediateOutputPath>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||||
|
<DocumentationFile>$(BaseIntermediateOutputPath)$(Configuration)\winfsp-msil.xml</DocumentationFile>
|
||||||
|
<NoWarn>1591</NoWarn>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<OutputPath>$(SolutionDir)build\$(Configuration)\</OutputPath>
|
||||||
|
<BaseIntermediateOutputPath>$(SolutionDir)build\$(ProjectName).build\</BaseIntermediateOutputPath>
|
||||||
|
<IntermediateOutputPath>$(BaseIntermediateOutputPath)$(Configuration)\</IntermediateOutputPath>
|
||||||
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||||
|
<DocumentationFile>$(BaseIntermediateOutputPath)$(Configuration)\winfsp-msil.xml</DocumentationFile>
|
||||||
|
<NoWarn>1591</NoWarn>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup>
|
||||||
|
<SignAssembly>true</SignAssembly>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup>
|
||||||
|
<AssemblyOriginatorKeyFile>winfsp.net.snk</AssemblyOriginatorKeyFile>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="System" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="..\..\..\src\dotnet\FileSystemBase+Const.cs">
|
||||||
|
<Link>FileSystemBase+Const.cs</Link>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="..\..\..\src\dotnet\FileSystemBase.cs">
|
||||||
|
<Link>FileSystemBase.cs</Link>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="..\..\..\src\dotnet\FileSystemHost.cs">
|
||||||
|
<Link>FileSystemHost.cs</Link>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="..\..\..\src\dotnet\Interop.cs">
|
||||||
|
<Link>Interop.cs</Link>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="..\..\..\src\dotnet\Service.cs">
|
||||||
|
<Link>Service.cs</Link>
|
||||||
|
</Compile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="winfsp.net.snk" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||||
|
Other similar extension points exist, see Microsoft.Common.targets.
|
||||||
|
<Target Name="AfterBuild">
|
||||||
|
</Target>
|
||||||
|
-->
|
||||||
|
<Target Name="BeforeBuild">
|
||||||
|
<ItemGroup>
|
||||||
|
<AssemblyInfo Include="using System.Reflection%3b" />
|
||||||
|
<AssemblyInfo Include="[assembly: AssemblyProduct("$(MyProductName)")]" />
|
||||||
|
<AssemblyInfo Include="[assembly: AssemblyTitle("$(MyDescription)")]" />
|
||||||
|
<AssemblyInfo Include="[assembly: AssemblyCompany("$(MyCompanyName)")]" />
|
||||||
|
<AssemblyInfo Include="[assembly: AssemblyCopyright("$(MyCopyright)")]" />
|
||||||
|
<AssemblyInfo Include="[assembly: AssemblyVersion("$(MyAssemblyVersion)")]" />
|
||||||
|
<AssemblyInfo Include="[assembly: AssemblyFileVersion("$(MyVersion)")]" />
|
||||||
|
</ItemGroup>
|
||||||
|
<MakeDir Directories="$(IntermediateOutputPath)" />
|
||||||
|
<WriteLinesToFile File="$(IntermediateOutputPath)AssemblyInfo.cs" Lines="@(AssemblyInfo)" Overwrite="true" />
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="$(IntermediateOutputPath)AssemblyInfo.cs" />
|
||||||
|
<FileWrites Include="$(IntermediateOutputPath)AssemblyInfo.cs" />
|
||||||
|
</ItemGroup>
|
||||||
|
</Target>
|
||||||
|
<PropertyGroup>
|
||||||
|
<PostBuildEvent>exit /b 0
|
||||||
|
|
||||||
|
set TargetName=$(TargetName)
|
||||||
|
set MyAssemblyPolicyVersion=$(MyAssemblyPolicyVersion)
|
||||||
|
set MyAssemblyVersion=$(MyAssemblyVersion)
|
||||||
|
|
||||||
|
setlocal EnableDelayedExpansion
|
||||||
|
if exist $(OutDir)policy.$(MyAssemblyPolicyVersion).$(TargetName).config del $(OutDir)policy.$(MyAssemblyPolicyVersion).$(TargetName).config
|
||||||
|
for /f "delims=" %25%25l in ($(ProjectDir)winfsp.net.policy.config) do (
|
||||||
|
set line=%25%25l
|
||||||
|
echo !line! >>$(OutDir)policy.$(MyAssemblyPolicyVersion).$(TargetName).config
|
||||||
|
)
|
||||||
|
|
||||||
|
"$(MSBuildProgramFiles32)\Microsoft SDKs\Windows\v7.0A\Bin\al.exe" /product:"$(MyProductName)" /title:"$(MyDescription)" /company:"$(MyCompanyName)" /copyright:"$(MyCopyright)" /version:"$(MyAssemblyPolicyVersion)" /fileversion:"$(MyVersion)" /link:$(OutDir)policy.$(MyAssemblyPolicyVersion).$(TargetName).config /out:$(OutDir)policy.$(MyAssemblyPolicyVersion).$(TargetName).dll /keyfile:$(ProjectDir)$(ProjectName).snk
|
||||||
|
</PostBuildEvent>
|
||||||
|
</PropertyGroup>
|
||||||
|
</Project>
|
10
build/VStudio/dotnet/winfsp.net.policy.config
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<configuration>
|
||||||
|
<runtime>
|
||||||
|
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="!TargetName!" publicKeyToken="b099876d8fa9b1f3" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="!MyAssemblyPolicyVersion!.0.0-!MyAssemblyVersion!" newVersion="!MyAssemblyVersion!" />
|
||||||
|
</dependentAssembly>
|
||||||
|
</assemblyBinding>
|
||||||
|
</runtime>
|
||||||
|
</configuration>
|
BIN
build/VStudio/dotnet/winfsp.net.snk
Normal file
@ -1,7 +1,7 @@
|
|||||||
/**
|
/**
|
||||||
* @file CustomActions.cpp
|
* @file CustomActions.cpp
|
||||||
*
|
*
|
||||||
* @copyright 2015-2016 Bill Zissimopoulos
|
* @copyright 2015-2018 Bill Zissimopoulos
|
||||||
*/
|
*/
|
||||||
/*
|
/*
|
||||||
* This file is part of WinFsp.
|
* This file is part of WinFsp.
|
||||||
@ -10,9 +10,13 @@
|
|||||||
* General Public License version 3 as published by the Free Software
|
* General Public License version 3 as published by the Free Software
|
||||||
* Foundation.
|
* Foundation.
|
||||||
*
|
*
|
||||||
* Licensees holding a valid commercial license may use this file in
|
* Licensees holding a valid commercial license may use this software
|
||||||
* accordance with the commercial license agreement provided with the
|
* in accordance with the commercial license agreement provided in
|
||||||
* software.
|
* conjunction with the software. The terms and conditions of any such
|
||||||
|
* commercial license agreement shall govern, supersede, and render
|
||||||
|
* ineffective any application of the GPLv3 license to this software,
|
||||||
|
* notwithstanding of any reference thereto in the software or
|
||||||
|
* associated repository.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define WIN32_LEAN_AND_MEAN
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
|
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
|
||||||
|
xmlns:dep="http://schemas.microsoft.com/wix/DependencyExtension">
|
||||||
<Product
|
<Product
|
||||||
Id="*"
|
Id="*"
|
||||||
Name="$(var.MyProductName) $(var.MyProductVersion)"
|
Name="$(var.MyProductName) $(var.MyProductVersion)"
|
||||||
@ -22,7 +23,7 @@
|
|||||||
<Media Id="1" Cabinet="WinFsp.cab" EmbedCab="yes" />
|
<Media Id="1" Cabinet="WinFsp.cab" EmbedCab="yes" />
|
||||||
|
|
||||||
<Property Id="P.LauncherName">$(var.MyProductName).Launcher</Property>
|
<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="P.RegistryKey">Software\$(var.MyProductName)</Property>
|
||||||
<Property Id="INSTALLDIR">
|
<Property Id="INSTALLDIR">
|
||||||
<RegistrySearch
|
<RegistrySearch
|
||||||
@ -39,6 +40,7 @@
|
|||||||
<Directory Id="BINDIR" Name="bin" />
|
<Directory Id="BINDIR" Name="bin" />
|
||||||
<Directory Id="INCDIR" Name="inc" />
|
<Directory Id="INCDIR" Name="inc" />
|
||||||
<Directory Id="LIBDIR" Name="lib" />
|
<Directory Id="LIBDIR" Name="lib" />
|
||||||
|
<Directory Id="OPTDIR" Name="opt" />
|
||||||
<Directory Id="SMPDIR" Name="samples" />
|
<Directory Id="SMPDIR" Name="samples" />
|
||||||
<Directory Id="SYMDIR" Name="sym" />
|
<Directory Id="SYMDIR" Name="sym" />
|
||||||
</Directory>
|
</Directory>
|
||||||
@ -52,8 +54,11 @@
|
|||||||
Key="[P.RegistryKey]"
|
Key="[P.RegistryKey]"
|
||||||
Name="InstallDir"
|
Name="InstallDir"
|
||||||
Type="string"
|
Type="string"
|
||||||
Value="[INSTALLDIR]"
|
Value="[INSTALLDIR]" />
|
||||||
KeyPath="yes" />
|
<dep:Provides Key="WinFsp" />
|
||||||
|
</Component>
|
||||||
|
<Component Id="C.License.txt">
|
||||||
|
<File Name="License.txt" Source="..\..\..\License.txt" KeyPath="yes" />
|
||||||
</Component>
|
</Component>
|
||||||
</DirectoryRef>
|
</DirectoryRef>
|
||||||
<DirectoryRef Id="BINDIR" FileSource="..\build\$(var.Configuration)">
|
<DirectoryRef Id="BINDIR" FileSource="..\build\$(var.Configuration)">
|
||||||
@ -84,6 +89,23 @@
|
|||||||
<Condition>NOT VersionNT64</Condition>
|
<Condition>NOT VersionNT64</Condition>
|
||||||
</Component>
|
</Component>
|
||||||
|
|
||||||
|
<!-- install assembly -->
|
||||||
|
<Component Id="C.winfsp_msil.dll" Guid="0D8BA6AE-9F87-402B-AE1A-95B0AE3BE179">
|
||||||
|
<File Id="FILE.winfsp_msil.dll" Name="winfsp-msil.dll" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
<Component Id="C.winfsp_msil.xml" Guid="1657F707-C112-454C-91AE-0FDEBBF454AB">
|
||||||
|
<File Id="FILE.winfsp_msil.xml" Name="winfsp-msil.xml" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
<!--
|
||||||
|
<Component Id="C.winfsp_msil.dll.GAC" Guid="6469467D-8C90-4889-8138-4028F9DA6E85">
|
||||||
|
<File Id="FILE.winfsp_msil.dll.GAC" Name="winfsp-msil.dll" KeyPath="yes" Assembly=".net" />
|
||||||
|
</Component>
|
||||||
|
<Component Id="C.policy.winfsp_msil.dll.GAC">
|
||||||
|
<File Name="policy.1.0.winfsp-msil.dll" KeyPath="yes" Assembly=".net" />
|
||||||
|
<File Name="policy.1.0.winfsp-msil.config" KeyPath="no" />
|
||||||
|
</Component>
|
||||||
|
-->
|
||||||
|
|
||||||
<!-- On Win64 ServiceInstall launcher-x64.exe -->
|
<!-- On Win64 ServiceInstall launcher-x64.exe -->
|
||||||
<Component Id="C.launcher_x64.exe.svcinst">
|
<Component Id="C.launcher_x64.exe.svcinst">
|
||||||
<File Id="launcher_x64.exe.svcinst" Name="launcher-x64.exe" KeyPath="yes" />
|
<File Id="launcher_x64.exe.svcinst" Name="launcher-x64.exe" KeyPath="yes" />
|
||||||
@ -137,9 +159,19 @@
|
|||||||
<File Name="launchctl-x86.exe" KeyPath="yes" />
|
<File Name="launchctl-x86.exe" KeyPath="yes" />
|
||||||
</Component>
|
</Component>
|
||||||
|
|
||||||
|
<Component Id="C.fsptool_x64.exe" Guid="013FE508-097D-4433-9C60-717F5446E7F4">
|
||||||
|
<File Name="fsptool-x64.exe" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
<Component Id="C.fsptool_x86.exe" Guid="6C16DC2C-E12F-49FB-A665-3AF0475487AD">
|
||||||
|
<File Name="fsptool-x86.exe" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
|
||||||
<Component Id="C.diag.bat">
|
<Component Id="C.diag.bat">
|
||||||
<File Name="diag.bat" Source="..\..\..\tools\diag.bat" KeyPath="yes" />
|
<File Name="diag.bat" Source="..\..\..\tools\diag.bat" KeyPath="yes" />
|
||||||
</Component>
|
</Component>
|
||||||
|
<Component Id="C.fsreg.bat">
|
||||||
|
<File Name="fsreg.bat" Source="..\..\..\tools\fsreg.bat" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
|
||||||
<Component Id="C.memfs_x64.exe">
|
<Component Id="C.memfs_x64.exe">
|
||||||
<File Name="memfs-x64.exe" KeyPath="yes" />
|
<File Name="memfs-x64.exe" KeyPath="yes" />
|
||||||
@ -155,7 +187,7 @@
|
|||||||
<RegistryValue
|
<RegistryValue
|
||||||
Type="string"
|
Type="string"
|
||||||
Name="CommandLine"
|
Name="CommandLine"
|
||||||
Value="-i -n 65536 -s 67108864 -u %1 -m %2" />
|
Value="-i -F NTFS -n 65536 -s 67108864 -u %1 -m %2" />
|
||||||
<RegistryValue
|
<RegistryValue
|
||||||
Type="string"
|
Type="string"
|
||||||
Name="Security"
|
Name="Security"
|
||||||
@ -181,7 +213,33 @@
|
|||||||
<RegistryValue
|
<RegistryValue
|
||||||
Type="string"
|
Type="string"
|
||||||
Name="CommandLine"
|
Name="CommandLine"
|
||||||
Value="-i -n 65536 -s 67108864 -u %1 -m %2" />
|
Value="-i -F NTFS -n 65536 -s 67108864 -u %1 -m %2" />
|
||||||
|
<RegistryValue
|
||||||
|
Type="string"
|
||||||
|
Name="Security"
|
||||||
|
Value="D:P(A;;RPWPLC;;;WD)" />
|
||||||
|
<RegistryValue
|
||||||
|
Type="integer"
|
||||||
|
Name="JobControl"
|
||||||
|
Value="1" />
|
||||||
|
</RegistryKey>
|
||||||
|
</RegistryKey>
|
||||||
|
</Component>
|
||||||
|
<Component Id="C.memfs_dotnet_msil.exe">
|
||||||
|
<File Name="memfs-dotnet-msil.exe" KeyPath="yes" />
|
||||||
|
<RegistryKey
|
||||||
|
Root="HKLM"
|
||||||
|
Key="[P.LauncherRegistryKey]">
|
||||||
|
<RegistryKey
|
||||||
|
Key="memfs-dotnet">
|
||||||
|
<RegistryValue
|
||||||
|
Type="string"
|
||||||
|
Name="Executable"
|
||||||
|
Value="[BINDIR]memfs-dotnet-msil.exe" />
|
||||||
|
<RegistryValue
|
||||||
|
Type="string"
|
||||||
|
Name="CommandLine"
|
||||||
|
Value="-i -F NTFS -n 65536 -s 67108864 -u %1 -m %2" />
|
||||||
<RegistryValue
|
<RegistryValue
|
||||||
Type="string"
|
Type="string"
|
||||||
Name="Security"
|
Name="Security"
|
||||||
@ -202,6 +260,12 @@
|
|||||||
<Component Id="C.winfsp.h">
|
<Component Id="C.winfsp.h">
|
||||||
<File Name="winfsp.h" KeyPath="yes" />
|
<File Name="winfsp.h" KeyPath="yes" />
|
||||||
</Component>
|
</Component>
|
||||||
|
<Component Id="C.launch.h">
|
||||||
|
<File Name="launch.h" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
<!--Component Id="C.winfsp.hpp">
|
||||||
|
<File Name="winfsp.hpp" KeyPath="yes" />
|
||||||
|
</Component-->
|
||||||
</Directory>
|
</Directory>
|
||||||
<Directory Id="INCDIR.fuse" Name="fuse">
|
<Directory Id="INCDIR.fuse" Name="fuse">
|
||||||
<Component Id="C.fuse.h">
|
<Component Id="C.fuse.h">
|
||||||
@ -217,6 +281,20 @@
|
|||||||
<File Name="winfsp_fuse.h" KeyPath="yes" />
|
<File Name="winfsp_fuse.h" KeyPath="yes" />
|
||||||
</Component>
|
</Component>
|
||||||
</Directory>
|
</Directory>
|
||||||
|
<Directory Id="INCDIR.fuse3" Name="fuse3">
|
||||||
|
<Component Id="C.fuse3.h">
|
||||||
|
<File Id="fuse3.h" Name="fuse.h" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
<Component Id="C.fuse3_common.h">
|
||||||
|
<File Id="fuse3_common.h" Name="fuse_common.h" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
<Component Id="C.fuse3_opt.h">
|
||||||
|
<File Id="fuse3_opt.h" Name="fuse_opt.h" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
<Component Id="C.winfsp_fuse3.h">
|
||||||
|
<File Id="winfsp_fuse3.h" Name="winfsp_fuse.h" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
</Directory>
|
||||||
</DirectoryRef>
|
</DirectoryRef>
|
||||||
<DirectoryRef Id="LIBDIR" FileSource="..\build\$(var.Configuration)">
|
<DirectoryRef Id="LIBDIR" FileSource="..\build\$(var.Configuration)">
|
||||||
<Component Id="C.winfsp_x64.lib">
|
<Component Id="C.winfsp_x64.lib">
|
||||||
@ -245,6 +323,52 @@
|
|||||||
KeyPath="yes" />
|
KeyPath="yes" />
|
||||||
<Condition>NOT VersionNT64</Condition>
|
<Condition>NOT VersionNT64</Condition>
|
||||||
</Component>
|
</Component>
|
||||||
|
|
||||||
|
<!-- On Win64 copy fuse3-x64.pc -->
|
||||||
|
<Component Id="C.fuse3_x64.pc" Guid="FE59E3BA-E5EA-4822-80B1-19A1DE6B62C7">
|
||||||
|
<File
|
||||||
|
Id="FILE.fuse3_x64.pc"
|
||||||
|
Name="fuse3.pc"
|
||||||
|
Source="..\build\$(var.Configuration)\fuse3-x64.pc"
|
||||||
|
KeyPath="yes" />
|
||||||
|
<Condition>VersionNT64</Condition>
|
||||||
|
</Component>
|
||||||
|
|
||||||
|
<!-- On Win32 copy fuse3-x86.pc -->
|
||||||
|
<Component Id="C.fuse3_x86.pc" Guid="176205D0-07EA-4DFC-947F-18E89ABDAFAB">
|
||||||
|
<File
|
||||||
|
Id="FILE.fuse3_x86.pc"
|
||||||
|
Name="fuse3.pc"
|
||||||
|
Source="..\build\$(var.Configuration)\fuse3-x86.pc"
|
||||||
|
KeyPath="yes" />
|
||||||
|
<Condition>NOT VersionNT64</Condition>
|
||||||
|
</Component>
|
||||||
|
</DirectoryRef>
|
||||||
|
<DirectoryRef Id="OPTDIR">
|
||||||
|
<Directory Id="OPTDIR.cygfuse" Name="cygfuse" FileSource="..\..\..\opt\cygfuse\dist">
|
||||||
|
<Directory Id="OPTDIR.cygfuse.x64" Name="x64">
|
||||||
|
<Component Id="C.fuse.tar.xz.x64">
|
||||||
|
<File Id="FILE.fuse.tar.xz.x64" Name="fuse-2.8-9.tar.xz" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
<Component Id="C.fuse3.tar.xz.x64">
|
||||||
|
<File Id="FILE.fuse3.tar.xz.x64" Name="fuse3-3.2-1.tar.xz" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
</Directory>
|
||||||
|
<Directory Id="OPTDIR.cygfuse.x86" Name="x86">
|
||||||
|
<Component Id="C.fuse.tar.xz.x86">
|
||||||
|
<File Id="FILE.fuse.tar.xz.x86" Name="fuse-2.8-9.tar.xz" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
<Component Id="C.fuse3.tar.xz.x86">
|
||||||
|
<File Id="FILE.fuse3.tar.xz.x86" Name="fuse3-3.2-1.tar.xz" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
</Directory>
|
||||||
|
<Component Id="C.fuse.install.sh">
|
||||||
|
<File Name="install.sh" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
<Component Id="C.fuse.uninstall.sh">
|
||||||
|
<File Name="uninstall.sh" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
</Directory>
|
||||||
</DirectoryRef>
|
</DirectoryRef>
|
||||||
<DirectoryRef Id="SMPDIR" FileSource="..\..\..\tst">
|
<DirectoryRef Id="SMPDIR" FileSource="..\..\..\tst">
|
||||||
<Directory Id="SMPDIR.memfs" Name="memfs">
|
<Directory Id="SMPDIR.memfs" Name="memfs">
|
||||||
@ -258,6 +382,116 @@
|
|||||||
<File Name="memfs-main.c" KeyPath="yes" />
|
<File Name="memfs-main.c" KeyPath="yes" />
|
||||||
</Component>
|
</Component>
|
||||||
</Directory>
|
</Directory>
|
||||||
|
<Directory Id="SMPDIR.memfs_dotnet" Name="memfs-dotnet">
|
||||||
|
<Component Id="C.memfs_dotnet.Program.cs">
|
||||||
|
<File Id="FILE.memfs_dotnet.Program.cs" Name="Program.cs" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
</Directory>
|
||||||
|
<Directory Id="SMPDIR.airfs" Name="airfs">
|
||||||
|
<Component Id="C.airfs.cpp">
|
||||||
|
<File Name="airfs.cpp" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
<Component Id="C.airfs.sln">
|
||||||
|
<File Name="airfs.sln" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
<Component Id="C.airfs.vcxproj">
|
||||||
|
<File Name="airfs.vcxproj" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
<Component Id="C.airfs.vcxproj.filters">
|
||||||
|
<File Name="airfs.vcxproj.filters" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
</Directory>
|
||||||
|
<Directory Id="SMPDIR.passthrough" Name="passthrough">
|
||||||
|
<Component Id="C.passthrough.c">
|
||||||
|
<File Name="passthrough.c" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
<Component Id="C.passthrough.sln">
|
||||||
|
<File Name="passthrough.sln" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
<Component Id="C.passthrough.vcxproj">
|
||||||
|
<File Name="passthrough.vcxproj" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
<Component Id="C.passthrough.vcxproj.filters">
|
||||||
|
<File Name="passthrough.vcxproj.filters" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
</Directory>
|
||||||
|
<!--Directory Id="SMPDIR.passthrough_cpp" Name="passthrough-cpp">
|
||||||
|
<Component Id="C.passthrough_cpp.cpp">
|
||||||
|
<File Name="passthrough-cpp.cpp" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
<Component Id="C.passthrough_cpp.sln">
|
||||||
|
<File Name="passthrough-cpp.sln" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
<Component Id="C.passthrough_cpp.vcxproj">
|
||||||
|
<File Name="passthrough-cpp.vcxproj" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
<Component Id="C.passthrough_cpp.vcxproj.filters">
|
||||||
|
<File Name="passthrough-cpp.vcxproj.filters" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
</Directory-->
|
||||||
|
<Directory Id="SMPDIR.passthrough_fuse" Name="passthrough-fuse">
|
||||||
|
<Component Id="C.passthrough_fuse.c">
|
||||||
|
<File Name="passthrough-fuse.c" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
<Component Id="C.passthrough_fuse.winposix.c">
|
||||||
|
<File Name="winposix.c" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
<Component Id="C.passthrough_fuse.winposix.h">
|
||||||
|
<File Name="winposix.h" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
<Component Id="C.passthrough_fuse.sln">
|
||||||
|
<File Name="passthrough-fuse.sln" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
<Component Id="C.passthrough_fuse.vcxproj">
|
||||||
|
<File Name="passthrough-fuse.vcxproj" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
<Component Id="C.passthrough_fuse.vcxproj.filters">
|
||||||
|
<File Name="passthrough-fuse.vcxproj.filters" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
<Component Id="C.passthrough_fuse.Makefile">
|
||||||
|
<File Name="Makefile" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
<Component Id="C.passthrough_fuse.README.md">
|
||||||
|
<File Name="README.md" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
</Directory>
|
||||||
|
<Directory Id="SMPDIR.passthrough_fuse3" Name="passthrough-fuse3">
|
||||||
|
<Component Id="C.passthrough_fuse3.c">
|
||||||
|
<File Name="passthrough-fuse3.c" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
<Component Id="C.passthrough_fuse3.winposix.c">
|
||||||
|
<File Id="F.passthrough_fuse3.winposix.c" Name="winposix.c" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
<Component Id="C.passthrough_fuse3.winposix.h">
|
||||||
|
<File Id="F.passthrough_fuse3.winposix.h" Name="winposix.h" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
<Component Id="C.passthrough_fuse3.sln">
|
||||||
|
<File Name="passthrough-fuse3.sln" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
<Component Id="C.passthrough_fuse3.vcxproj">
|
||||||
|
<File Name="passthrough-fuse3.vcxproj" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
<Component Id="C.passthrough_fuse3.vcxproj.filters">
|
||||||
|
<File Name="passthrough-fuse3.vcxproj.filters" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
<Component Id="C.passthrough_fuse3.Makefile">
|
||||||
|
<File Id="F.passthrough_fuse3.Makefile" Name="Makefile" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
<Component Id="C.passthrough_fuse3.README.md">
|
||||||
|
<File Id="F.passthrough_fuse3.README.md" Name="README.md" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
</Directory>
|
||||||
|
<Directory Id="SMPDIR.passthrough_dotnet" Name="passthrough-dotnet">
|
||||||
|
<Component Id="C.passthrough_dotnet.Program.cs">
|
||||||
|
<File Id="FILE.passthrough_dotnet.Program.cs" Name="Program.cs" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
<Component Id="C.passthrough_dotnet.sln">
|
||||||
|
<File Name="passthrough-dotnet.sln" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
<Component Id="C.passthrough_dotnet.csproj">
|
||||||
|
<File Name="passthrough-dotnet.csproj" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
</Directory>
|
||||||
</DirectoryRef>
|
</DirectoryRef>
|
||||||
<DirectoryRef Id="SYMDIR">
|
<DirectoryRef Id="SYMDIR">
|
||||||
<Component Id="C.winfsp_x64.sys.pdb">
|
<Component Id="C.winfsp_x64.sys.pdb">
|
||||||
@ -284,6 +518,12 @@
|
|||||||
<Component Id="C.launchctl_x86.pdb">
|
<Component Id="C.launchctl_x86.pdb">
|
||||||
<File Name="launchctl-x86.pdb" Source="..\build\$(var.Configuration)\launchctl-x86.public.pdb" KeyPath="yes" />
|
<File Name="launchctl-x86.pdb" Source="..\build\$(var.Configuration)\launchctl-x86.public.pdb" KeyPath="yes" />
|
||||||
</Component>
|
</Component>
|
||||||
|
<Component Id="C.fsptool_x64.pdb">
|
||||||
|
<File Name="fsptool-x64.pdb" Source="..\build\$(var.Configuration)\fsptool-x64.public.pdb" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
<Component Id="C.fsptool_x86.pdb">
|
||||||
|
<File Name="fsptool-x86.pdb" Source="..\build\$(var.Configuration)\fsptool-x86.public.pdb" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
<Component Id="C.memfs_x64.pdb">
|
<Component Id="C.memfs_x64.pdb">
|
||||||
<File Name="memfs-x64.pdb" Source="..\build\$(var.Configuration)\memfs-x64.public.pdb" KeyPath="yes" />
|
<File Name="memfs-x64.pdb" Source="..\build\$(var.Configuration)\memfs-x64.public.pdb" KeyPath="yes" />
|
||||||
</Component>
|
</Component>
|
||||||
@ -305,21 +545,40 @@
|
|||||||
<ComponentRef Id="C.launcher_x86.exe.svcinst" />
|
<ComponentRef Id="C.launcher_x86.exe.svcinst" />
|
||||||
<ComponentRef Id="C.launchctl_x64.exe" />
|
<ComponentRef Id="C.launchctl_x64.exe" />
|
||||||
<ComponentRef Id="C.launchctl_x86.exe" />
|
<ComponentRef Id="C.launchctl_x86.exe" />
|
||||||
|
<ComponentRef Id="C.fsptool_x64.exe" />
|
||||||
|
<ComponentRef Id="C.fsptool_x86.exe" />
|
||||||
<ComponentRef Id="C.diag.bat" />
|
<ComponentRef Id="C.diag.bat" />
|
||||||
|
<ComponentRef Id="C.fsreg.bat" />
|
||||||
</ComponentGroup>
|
</ComponentGroup>
|
||||||
<ComponentGroup Id="C.WinFsp.inc">
|
<ComponentGroup Id="C.WinFsp.inc">
|
||||||
<ComponentRef Id="C.fsctl.h" />
|
<ComponentRef Id="C.fsctl.h" />
|
||||||
<ComponentRef Id="C.winfsp.h" />
|
<ComponentRef Id="C.winfsp.h" />
|
||||||
|
<ComponentRef Id="C.launch.h" />
|
||||||
|
<!--ComponentRef Id="C.winfsp.hpp" /-->
|
||||||
<ComponentRef Id="C.fuse.h" />
|
<ComponentRef Id="C.fuse.h" />
|
||||||
<ComponentRef Id="C.fuse_common.h" />
|
<ComponentRef Id="C.fuse_common.h" />
|
||||||
<ComponentRef Id="C.fuse_opt.h" />
|
<ComponentRef Id="C.fuse_opt.h" />
|
||||||
<ComponentRef Id="C.winfsp_fuse.h" />
|
<ComponentRef Id="C.winfsp_fuse.h" />
|
||||||
|
<ComponentRef Id="C.fuse3.h" />
|
||||||
|
<ComponentRef Id="C.fuse3_common.h" />
|
||||||
|
<ComponentRef Id="C.fuse3_opt.h" />
|
||||||
|
<ComponentRef Id="C.winfsp_fuse3.h" />
|
||||||
</ComponentGroup>
|
</ComponentGroup>
|
||||||
<ComponentGroup Id="C.WinFsp.lib">
|
<ComponentGroup Id="C.WinFsp.lib">
|
||||||
<ComponentRef Id="C.winfsp_x64.lib" />
|
<ComponentRef Id="C.winfsp_x64.lib" />
|
||||||
<ComponentRef Id="C.winfsp_x86.lib" />
|
<ComponentRef Id="C.winfsp_x86.lib" />
|
||||||
<ComponentRef Id="C.fuse_x64.pc" />
|
<ComponentRef Id="C.fuse_x64.pc" />
|
||||||
<ComponentRef Id="C.fuse_x86.pc" />
|
<ComponentRef Id="C.fuse_x86.pc" />
|
||||||
|
<ComponentRef Id="C.fuse3_x64.pc" />
|
||||||
|
<ComponentRef Id="C.fuse3_x86.pc" />
|
||||||
|
</ComponentGroup>
|
||||||
|
<ComponentGroup Id="C.WinFsp.opt.fuse">
|
||||||
|
<ComponentRef Id="C.fuse.tar.xz.x64" />
|
||||||
|
<ComponentRef Id="C.fuse.tar.xz.x86" />
|
||||||
|
<ComponentRef Id="C.fuse3.tar.xz.x64" />
|
||||||
|
<ComponentRef Id="C.fuse3.tar.xz.x86" />
|
||||||
|
<ComponentRef Id="C.fuse.install.sh" />
|
||||||
|
<ComponentRef Id="C.fuse.uninstall.sh" />
|
||||||
</ComponentGroup>
|
</ComponentGroup>
|
||||||
<ComponentGroup Id="C.WinFsp.smp">
|
<ComponentGroup Id="C.WinFsp.smp">
|
||||||
<ComponentRef Id="C.memfs_x64.exe" />
|
<ComponentRef Id="C.memfs_x64.exe" />
|
||||||
@ -327,6 +586,34 @@
|
|||||||
<ComponentRef Id="C.memfs.h" />
|
<ComponentRef Id="C.memfs.h" />
|
||||||
<ComponentRef Id="C.memfs.cpp" />
|
<ComponentRef Id="C.memfs.cpp" />
|
||||||
<ComponentRef Id="C.memfs_main.c" />
|
<ComponentRef Id="C.memfs_main.c" />
|
||||||
|
<ComponentRef Id="C.airfs.cpp" />
|
||||||
|
<ComponentRef Id="C.airfs.sln" />
|
||||||
|
<ComponentRef Id="C.airfs.vcxproj" />
|
||||||
|
<ComponentRef Id="C.airfs.vcxproj.filters" />
|
||||||
|
<ComponentRef Id="C.passthrough.c" />
|
||||||
|
<ComponentRef Id="C.passthrough.sln" />
|
||||||
|
<ComponentRef Id="C.passthrough.vcxproj" />
|
||||||
|
<ComponentRef Id="C.passthrough.vcxproj.filters" />
|
||||||
|
<!--ComponentRef Id="C.passthrough_cpp.cpp" /-->
|
||||||
|
<!--ComponentRef Id="C.passthrough_cpp.sln" /-->
|
||||||
|
<!--ComponentRef Id="C.passthrough_cpp.vcxproj" /-->
|
||||||
|
<!--ComponentRef Id="C.passthrough_cpp.vcxproj.filters" /-->
|
||||||
|
<ComponentRef Id="C.passthrough_fuse.c" />
|
||||||
|
<ComponentRef Id="C.passthrough_fuse.winposix.c" />
|
||||||
|
<ComponentRef Id="C.passthrough_fuse.winposix.h" />
|
||||||
|
<ComponentRef Id="C.passthrough_fuse.sln" />
|
||||||
|
<ComponentRef Id="C.passthrough_fuse.vcxproj" />
|
||||||
|
<ComponentRef Id="C.passthrough_fuse.vcxproj.filters" />
|
||||||
|
<ComponentRef Id="C.passthrough_fuse.Makefile" />
|
||||||
|
<ComponentRef Id="C.passthrough_fuse.README.md" />
|
||||||
|
<ComponentRef Id="C.passthrough_fuse3.c" />
|
||||||
|
<ComponentRef Id="C.passthrough_fuse3.winposix.c" />
|
||||||
|
<ComponentRef Id="C.passthrough_fuse3.winposix.h" />
|
||||||
|
<ComponentRef Id="C.passthrough_fuse3.sln" />
|
||||||
|
<ComponentRef Id="C.passthrough_fuse3.vcxproj" />
|
||||||
|
<ComponentRef Id="C.passthrough_fuse3.vcxproj.filters" />
|
||||||
|
<ComponentRef Id="C.passthrough_fuse3.Makefile" />
|
||||||
|
<ComponentRef Id="C.passthrough_fuse3.README.md" />
|
||||||
</ComponentGroup>
|
</ComponentGroup>
|
||||||
<ComponentGroup Id="C.WinFsp.sym">
|
<ComponentGroup Id="C.WinFsp.sym">
|
||||||
<ComponentRef Id="C.winfsp_x64.sys.pdb" />
|
<ComponentRef Id="C.winfsp_x64.sys.pdb" />
|
||||||
@ -337,9 +624,26 @@
|
|||||||
<ComponentRef Id="C.launcher_x64.pdb" />
|
<ComponentRef Id="C.launcher_x64.pdb" />
|
||||||
<ComponentRef Id="C.launchctl_x64.pdb" />
|
<ComponentRef Id="C.launchctl_x64.pdb" />
|
||||||
<ComponentRef Id="C.launchctl_x86.pdb" />
|
<ComponentRef Id="C.launchctl_x86.pdb" />
|
||||||
|
<ComponentRef Id="C.fsptool_x64.pdb" />
|
||||||
|
<ComponentRef Id="C.fsptool_x86.pdb" />
|
||||||
<ComponentRef Id="C.memfs_x64.pdb" />
|
<ComponentRef Id="C.memfs_x64.pdb" />
|
||||||
<ComponentRef Id="C.memfs_x86.pdb" />
|
<ComponentRef Id="C.memfs_x86.pdb" />
|
||||||
</ComponentGroup>
|
</ComponentGroup>
|
||||||
|
<ComponentGroup Id="C.WinFsp.net">
|
||||||
|
<ComponentRef Id="C.winfsp_msil.dll" />
|
||||||
|
<ComponentRef Id="C.winfsp_msil.xml" />
|
||||||
|
<!--
|
||||||
|
<ComponentRef Id="C.winfsp_msil.dll.GAC" />
|
||||||
|
<ComponentRef Id="C.policy.winfsp_msil.dll.GAC" />
|
||||||
|
-->
|
||||||
|
</ComponentGroup>
|
||||||
|
<ComponentGroup Id="C.WinFsp.smp.net">
|
||||||
|
<ComponentRef Id="C.memfs_dotnet_msil.exe" />
|
||||||
|
<ComponentRef Id="C.memfs_dotnet.Program.cs" />
|
||||||
|
<ComponentRef Id="C.passthrough_dotnet.Program.cs" />
|
||||||
|
<ComponentRef Id="C.passthrough_dotnet.sln" />
|
||||||
|
<ComponentRef Id="C.passthrough_dotnet.csproj" />
|
||||||
|
</ComponentGroup>
|
||||||
|
|
||||||
<Feature
|
<Feature
|
||||||
Id="F.Main"
|
Id="F.Main"
|
||||||
@ -352,6 +656,7 @@
|
|||||||
InstallDefault="local"
|
InstallDefault="local"
|
||||||
Absent="disallow">
|
Absent="disallow">
|
||||||
<ComponentRef Id="C.INSTALLDIR" />
|
<ComponentRef Id="C.INSTALLDIR" />
|
||||||
|
<ComponentRef Id="C.License.txt" />
|
||||||
<Feature
|
<Feature
|
||||||
Id="F.User"
|
Id="F.User"
|
||||||
Level="1"
|
Level="1"
|
||||||
@ -361,7 +666,20 @@
|
|||||||
InstallDefault="local"
|
InstallDefault="local"
|
||||||
Absent="disallow">
|
Absent="disallow">
|
||||||
<ComponentGroupRef Id="C.WinFsp.bin" />
|
<ComponentGroupRef Id="C.WinFsp.bin" />
|
||||||
|
<ComponentGroupRef Id="C.WinFsp.net" />
|
||||||
</Feature>
|
</Feature>
|
||||||
|
<!--
|
||||||
|
<Feature
|
||||||
|
Id="F.Net"
|
||||||
|
Level="10"
|
||||||
|
Title=".NET"
|
||||||
|
Description="The managed $(var.MyProductName) files."
|
||||||
|
AllowAdvertise="no"
|
||||||
|
InstallDefault="local"
|
||||||
|
Absent="allow">
|
||||||
|
<ComponentGroupRef Id="C.WinFsp.net" />
|
||||||
|
</Feature>
|
||||||
|
-->
|
||||||
<Feature
|
<Feature
|
||||||
Id="F.Developer"
|
Id="F.Developer"
|
||||||
Level="1000"
|
Level="1000"
|
||||||
@ -373,8 +691,19 @@
|
|||||||
<ComponentGroupRef Id="C.WinFsp.inc" />
|
<ComponentGroupRef Id="C.WinFsp.inc" />
|
||||||
<ComponentGroupRef Id="C.WinFsp.lib" />
|
<ComponentGroupRef Id="C.WinFsp.lib" />
|
||||||
<ComponentGroupRef Id="C.WinFsp.smp" />
|
<ComponentGroupRef Id="C.WinFsp.smp" />
|
||||||
|
<ComponentGroupRef Id="C.WinFsp.smp.net" />
|
||||||
<ComponentGroupRef Id="C.WinFsp.sym" />
|
<ComponentGroupRef Id="C.WinFsp.sym" />
|
||||||
</Feature>
|
</Feature>
|
||||||
|
<Feature
|
||||||
|
Id="F.Cygfuse"
|
||||||
|
Level="1000"
|
||||||
|
Title="FUSE for Cygwin"
|
||||||
|
Description="From a Cygwin prompt change to <InstallDir>/opt/cygfuse and run install.sh."
|
||||||
|
AllowAdvertise="no"
|
||||||
|
InstallDefault="local"
|
||||||
|
Absent="allow">
|
||||||
|
<ComponentGroupRef Id="C.WinFsp.opt.fuse" />
|
||||||
|
</Feature>
|
||||||
</Feature>
|
</Feature>
|
||||||
|
|
||||||
<WixVariable Id="WixUIBannerBmp" Value="wixbanner.bmp" />
|
<WixVariable Id="WixUIBannerBmp" Value="wixbanner.bmp" />
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
|
||||||
<OutputPath>$(SolutionDir)build\$(Configuration)\</OutputPath>
|
<OutputPath>$(SolutionDir)build\$(Configuration)\</OutputPath>
|
||||||
<IntermediateOutputPath>$(SolutionDir)build\$(Name).build\$(Configuration)\$(Platform)\</IntermediateOutputPath>
|
<IntermediateOutputPath>$(SolutionDir)build\$(Name).build\$(Configuration)\$(Platform)\</IntermediateOutputPath>
|
||||||
<DefineConstants>Debug;MyProductName=$(MyProductName);MyDescription=$(MyDescription);MyCompanyName=$(MyCompanyName);MyCopyright=$(MyCopyright);MyProductVersion=$(MyProductVersion);MyProductStage=$(MyProductStage);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>
|
<SuppressAllWarnings>False</SuppressAllWarnings>
|
||||||
<Pedantic>True</Pedantic>
|
<Pedantic>True</Pedantic>
|
||||||
<SuppressPdbOutput>True</SuppressPdbOutput>
|
<SuppressPdbOutput>True</SuppressPdbOutput>
|
||||||
@ -25,7 +25,7 @@
|
|||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
|
||||||
<OutputPath>$(SolutionDir)build\$(Configuration)\</OutputPath>
|
<OutputPath>$(SolutionDir)build\$(Configuration)\</OutputPath>
|
||||||
<IntermediateOutputPath>$(SolutionDir)build\$(Name).build\$(Configuration)\$(Platform)\</IntermediateOutputPath>
|
<IntermediateOutputPath>$(SolutionDir)build\$(Name).build\$(Configuration)\$(Platform)\</IntermediateOutputPath>
|
||||||
<DefineConstants>MyProductName=$(MyProductName);MyDescription=$(MyDescription);MyCompanyName=$(MyCompanyName);MyCopyright=$(MyCopyright);MyProductVersion=$(MyProductVersion);MyProductStage=$(MyProductStage);MyVersion=$(MyVersion)</DefineConstants>
|
<DefineConstants>MyProductName=$(MyProductName);MyDescription=$(MyDescription);MyCompanyName=$(MyCompanyName);MyCopyright=$(MyCopyright);MyProductVersion=$(MyProductVersion);MyProductStage=$(MyProductStage);MyVersion=$(MyVersion);MyFullVersion=$(MyFullVersion)</DefineConstants>
|
||||||
<SuppressAllWarnings>False</SuppressAllWarnings>
|
<SuppressAllWarnings>False</SuppressAllWarnings>
|
||||||
<Pedantic>True</Pedantic>
|
<Pedantic>True</Pedantic>
|
||||||
<SuppressPdbOutput>True</SuppressPdbOutput>
|
<SuppressPdbOutput>True</SuppressPdbOutput>
|
||||||
@ -39,6 +39,10 @@
|
|||||||
<HintPath>$(WixExtDir)\WixUIExtension.dll</HintPath>
|
<HintPath>$(WixExtDir)\WixUIExtension.dll</HintPath>
|
||||||
<Name>WixUIExtension</Name>
|
<Name>WixUIExtension</Name>
|
||||||
</WixExtension>
|
</WixExtension>
|
||||||
|
<WixExtension Include="WixDependencyExtension">
|
||||||
|
<HintPath>$(WixExtDir)\WixDependencyExtension.dll</HintPath>
|
||||||
|
<Name>WixDependencyExtension</Name>
|
||||||
|
</WixExtension>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(WixTargetsPath)" />
|
<Import Project="$(WixTargetsPath)" />
|
||||||
<!--
|
<!--
|
||||||
|
63
build/VStudio/testing/memfs-dotnet.csproj
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<ProjectGuid>{4920E350-D496-4652-AE98-6C4208AEC1D8}</ProjectGuid>
|
||||||
|
<OutputType>Exe</OutputType>
|
||||||
|
<ProjectName>memfs-dotnet</ProjectName>
|
||||||
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
|
<RootNamespace>memfs</RootNamespace>
|
||||||
|
<AssemblyName>memfs-dotnet-msil</AssemblyName>
|
||||||
|
<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
|
||||||
|
<FileAlignment>512</FileAlignment>
|
||||||
|
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<Optimize>false</Optimize>
|
||||||
|
<OutputPath>$(SolutionDir)build\$(Configuration)\</OutputPath>
|
||||||
|
<BaseIntermediateOutputPath>$(SolutionDir)build\$(ProjectName).build\</BaseIntermediateOutputPath>
|
||||||
|
<IntermediateOutputPath>$(BaseIntermediateOutputPath)$(Configuration)\</IntermediateOutputPath>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
<Prefer32Bit>false</Prefer32Bit>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<OutputPath>$(SolutionDir)build\$(Configuration)\</OutputPath>
|
||||||
|
<BaseIntermediateOutputPath>$(SolutionDir)build\$(ProjectName).build\</BaseIntermediateOutputPath>
|
||||||
|
<IntermediateOutputPath>$(BaseIntermediateOutputPath)$(Configuration)\</IntermediateOutputPath>
|
||||||
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="System" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="..\..\..\tst\memfs-dotnet\Program.cs">
|
||||||
|
<Link>Program.cs</Link>
|
||||||
|
</Compile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\dotnet\winfsp.net.csproj">
|
||||||
|
<Project>{94580219-cc8d-4fe5-a3be-437b0b3481e1}</Project>
|
||||||
|
<Name>winfsp.net</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||||
|
Other similar extension points exist, see Microsoft.Common.targets.
|
||||||
|
<Target Name="BeforeBuild">
|
||||||
|
</Target>
|
||||||
|
<Target Name="AfterBuild">
|
||||||
|
</Target>
|
||||||
|
-->
|
||||||
|
</Project>
|
@ -182,12 +182,17 @@
|
|||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\..\tst\memfs\memfs.cpp" />
|
<ClCompile Include="..\..\..\tst\memfs\memfs.cpp" />
|
||||||
<ClCompile Include="..\..\..\tst\winfsp-tests\create-test.c" />
|
<ClCompile Include="..\..\..\tst\winfsp-tests\create-test.c" />
|
||||||
|
<ClCompile Include="..\..\..\tst\winfsp-tests\devctl-test.c" />
|
||||||
|
<ClCompile Include="..\..\..\tst\winfsp-tests\dirbuf-test.c" />
|
||||||
<ClCompile Include="..\..\..\tst\winfsp-tests\dirctl-test.c" />
|
<ClCompile Include="..\..\..\tst\winfsp-tests\dirctl-test.c" />
|
||||||
<ClCompile Include="..\..\..\tst\winfsp-tests\eventlog-test.c" />
|
<ClCompile Include="..\..\..\tst\winfsp-tests\eventlog-test.c" />
|
||||||
|
<ClCompile Include="..\..\..\tst\winfsp-tests\exec-test.c" />
|
||||||
<ClCompile Include="..\..\..\tst\winfsp-tests\flush-test.c" />
|
<ClCompile Include="..\..\..\tst\winfsp-tests\flush-test.c" />
|
||||||
<ClCompile Include="..\..\..\tst\winfsp-tests\fuse-opt-test.c" />
|
<ClCompile Include="..\..\..\tst\winfsp-tests\fuse-opt-test.c" />
|
||||||
|
<ClCompile Include="..\..\..\tst\winfsp-tests\fuse-test.c" />
|
||||||
<ClCompile Include="..\..\..\tst\winfsp-tests\hooks.c" />
|
<ClCompile Include="..\..\..\tst\winfsp-tests\hooks.c" />
|
||||||
<ClCompile Include="..\..\..\tst\winfsp-tests\info-test.c" />
|
<ClCompile Include="..\..\..\tst\winfsp-tests\info-test.c" />
|
||||||
|
<ClCompile Include="..\..\..\tst\winfsp-tests\launch-test.c" />
|
||||||
<ClCompile Include="..\..\..\tst\winfsp-tests\lock-test.c" />
|
<ClCompile Include="..\..\..\tst\winfsp-tests\lock-test.c" />
|
||||||
<ClCompile Include="..\..\..\tst\winfsp-tests\memfs-test.c" />
|
<ClCompile Include="..\..\..\tst\winfsp-tests\memfs-test.c" />
|
||||||
<ClCompile Include="..\..\..\tst\winfsp-tests\mount-test.c" />
|
<ClCompile Include="..\..\..\tst\winfsp-tests\mount-test.c" />
|
||||||
@ -200,6 +205,7 @@
|
|||||||
<ClCompile Include="..\..\..\tst\winfsp-tests\security-test.c" />
|
<ClCompile Include="..\..\..\tst\winfsp-tests\security-test.c" />
|
||||||
<ClCompile Include="..\..\..\tst\winfsp-tests\stream-tests.c" />
|
<ClCompile Include="..\..\..\tst\winfsp-tests\stream-tests.c" />
|
||||||
<ClCompile Include="..\..\..\tst\winfsp-tests\timeout-test.c" />
|
<ClCompile Include="..\..\..\tst\winfsp-tests\timeout-test.c" />
|
||||||
|
<ClCompile Include="..\..\..\tst\winfsp-tests\version-test.c" />
|
||||||
<ClCompile Include="..\..\..\tst\winfsp-tests\winfsp-tests.c" />
|
<ClCompile Include="..\..\..\tst\winfsp-tests\winfsp-tests.c" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
@ -212,6 +218,9 @@
|
|||||||
<Project>{4a7c0b21-9e10-4c81-92de-1493efcf24eb}</Project>
|
<Project>{4a7c0b21-9e10-4c81-92de-1493efcf24eb}</Project>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ResourceCompile Include="..\..\..\tst\winfsp-tests\helper\winfsp-tests-helper.rc" />
|
||||||
|
</ItemGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
|
@ -76,6 +76,24 @@
|
|||||||
<ClCompile Include="..\..\..\tst\winfsp-tests\oplock-test.c">
|
<ClCompile Include="..\..\..\tst\winfsp-tests\oplock-test.c">
|
||||||
<Filter>Source</Filter>
|
<Filter>Source</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\..\tst\winfsp-tests\dirbuf-test.c">
|
||||||
|
<Filter>Source</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\..\tst\winfsp-tests\exec-test.c">
|
||||||
|
<Filter>Source</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\..\tst\winfsp-tests\version-test.c">
|
||||||
|
<Filter>Source</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\..\tst\winfsp-tests\launch-test.c">
|
||||||
|
<Filter>Source</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\..\tst\winfsp-tests\devctl-test.c">
|
||||||
|
<Filter>Source</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\..\tst\winfsp-tests\fuse-test.c">
|
||||||
|
<Filter>Source</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\..\ext\tlib\testsuite.h">
|
<ClInclude Include="..\..\..\ext\tlib\testsuite.h">
|
||||||
@ -88,4 +106,9 @@
|
|||||||
<Filter>Source</Filter>
|
<Filter>Source</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ResourceCompile Include="..\..\..\tst\winfsp-tests\helper\winfsp-tests-helper.rc">
|
||||||
|
<Filter>Source</Filter>
|
||||||
|
</ResourceCompile>
|
||||||
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
193
build/VStudio/tools/fsptool.vcxproj
Normal file
@ -0,0 +1,193 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<Import Project="..\version.properties" />
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Debug|x64">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|x64">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectGuid>{1E997BEC-1642-4A5C-B252-852DA094E11E}</ProjectGuid>
|
||||||
|
<Keyword>Win32Proj</Keyword>
|
||||||
|
<RootNamespace>fsptool</RootNamespace>
|
||||||
|
<WindowsTargetPlatformVersion>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>
|
||||||
|
<AdditionalIncludeDirectories>..\..\..\src;..\..\..\inc</AdditionalIncludeDirectories>
|
||||||
|
<BasicRuntimeChecks>Default</BasicRuntimeChecks>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||||
|
</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'">
|
||||||
|
<ClCompile>
|
||||||
|
<PrecompiledHeader>
|
||||||
|
</PrecompiledHeader>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<AdditionalIncludeDirectories>..\..\..\src;..\..\..\inc</AdditionalIncludeDirectories>
|
||||||
|
<BasicRuntimeChecks>Default</BasicRuntimeChecks>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
|
||||||
|
<StripPrivateSymbols>$(OutDir)$(TargetName).public.pdb</StripPrivateSymbols>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<PrecompiledHeader>
|
||||||
|
</PrecompiledHeader>
|
||||||
|
<Optimization>MaxSpeed</Optimization>
|
||||||
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
|
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<AdditionalIncludeDirectories>..\..\..\src;..\..\..\inc</AdditionalIncludeDirectories>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
|
||||||
|
<StripPrivateSymbols>$(OutDir)$(TargetName).public.pdb</StripPrivateSymbols>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<ClCompile>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<PrecompiledHeader>
|
||||||
|
</PrecompiledHeader>
|
||||||
|
<Optimization>MaxSpeed</Optimization>
|
||||||
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
|
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<AdditionalIncludeDirectories>..\..\..\src;..\..\..\inc</AdditionalIncludeDirectories>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
|
||||||
|
<StripPrivateSymbols>$(OutDir)$(TargetName).public.pdb</StripPrivateSymbols>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\winfsp_dll.vcxproj">
|
||||||
|
<Project>{4a7c0b21-9e10-4c81-92de-1493efcf24eb}</Project>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\..\..\src\fsptool\fsptool.c" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ResourceCompile Include="..\..\..\src\fsptool\fsptool-version.rc" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
23
build/VStudio/tools/fsptool.vcxproj.filters
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
<?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="Include">
|
||||||
|
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||||
|
<Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||||
|
</Filter>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\..\..\src\fsptool\fsptool.c">
|
||||||
|
<Filter>Source</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ResourceCompile Include="..\..\..\src\fsptool\fsptool-version.rc">
|
||||||
|
<Filter>Source</Filter>
|
||||||
|
</ResourceCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
@ -20,7 +20,7 @@
|
|||||||
</ProjectConfiguration>
|
</ProjectConfiguration>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<PropertyGroup Label="Globals">
|
<PropertyGroup Label="Globals">
|
||||||
<ProjectGuid>{73EAAEDA-557B-48D5-A137-328934720FB4}</ProjectGuid>
|
<ProjectGuid>{264A5D09-126F-4760-A3F1-4B3B95C925AA}</ProjectGuid>
|
||||||
<Keyword>Win32Proj</Keyword>
|
<Keyword>Win32Proj</Keyword>
|
||||||
<RootNamespace>launchctl</RootNamespace>
|
<RootNamespace>launchctl</RootNamespace>
|
||||||
<WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
|
<WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
|
||||||
@ -185,7 +185,6 @@
|
|||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\..\src\launcher\launcher.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\shared\minimal.h" />
|
<ClInclude Include="..\..\..\src\shared\minimal.h" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
@ -193,10 +192,10 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ResourceCompile Include="..\..\..\src\launcher\launchctl-version.rc">
|
<ResourceCompile Include="..\..\..\src\launcher\launchctl-version.rc">
|
||||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_UNICODE;UNICODE;%(PreprocessorDefinitions);MyProductName=$(MyProductName);MyDescription=$(MyDescription);MyCompanyName=$(MyCompanyName);MyCopyright=$(MyCopyright);MyProductVersion=$(MyProductVersion);MyProductStage=$(MyProductStage);MyVersion=$(MyVersion);MyVersionWithCommas=$(MyVersionWithCommas)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_UNICODE;UNICODE;%(PreprocessorDefinitions);MyProductName=$(MyProductName);MyDescription=$(MyDescription);MyCompanyName=$(MyCompanyName);MyCopyright=$(MyCopyright);MyProductVersion=$(MyProductVersion);MyProductStage=$(MyProductStage);MyVersion=$(MyVersion);MyVersionWithCommas=$(MyVersionWithCommas)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">_UNICODE;UNICODE;%(PreprocessorDefinitions);MyProductName=$(MyProductName);MyDescription=$(MyDescription);MyCompanyName=$(MyCompanyName);MyCopyright=$(MyCopyright);MyProductVersion=$(MyProductVersion);MyProductStage=$(MyProductStage);MyVersion=$(MyVersion);MyVersionWithCommas=$(MyVersionWithCommas)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">_UNICODE;UNICODE;%(PreprocessorDefinitions);MyProductName=$(MyProductName);MyDescription=$(MyDescription);MyCompanyName=$(MyCompanyName);MyCopyright=$(MyCopyright);MyProductVersion=$(MyProductVersion);MyProductStage=$(MyProductStage);MyVersion=$(MyVersion);MyVersionWithCommas=$(MyVersionWithCommas)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
</ResourceCompile>
|
</ResourceCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
@ -16,9 +16,6 @@
|
|||||||
<ClInclude Include="..\..\..\src\shared\minimal.h">
|
<ClInclude Include="..\..\..\src\shared\minimal.h">
|
||||||
<Filter>Include\shared</Filter>
|
<Filter>Include\shared</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\..\src\launcher\launcher.h">
|
|
||||||
<Filter>Source</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="..\..\..\src\launcher\launchctl.c">
|
<ClCompile Include="..\..\..\src\launcher\launchctl.c">
|
@ -20,7 +20,7 @@
|
|||||||
</ProjectConfiguration>
|
</ProjectConfiguration>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<PropertyGroup Label="Globals">
|
<PropertyGroup Label="Globals">
|
||||||
<ProjectGuid>{A5EFD487-0140-4184-8C54-FFAEC2F85E35}</ProjectGuid>
|
<ProjectGuid>{6CDF9411-B852-4EAC-822D-8F930675F17B}</ProjectGuid>
|
||||||
<Keyword>Win32Proj</Keyword>
|
<Keyword>Win32Proj</Keyword>
|
||||||
<RootNamespace>launcher</RootNamespace>
|
<RootNamespace>launcher</RootNamespace>
|
||||||
<WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
|
<WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
|
||||||
@ -112,7 +112,7 @@
|
|||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
|
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
|
||||||
<AdditionalDependencies>%(AdditionalDependencies);rpcrt4.lib</AdditionalDependencies>
|
<AdditionalDependencies>%(AdditionalDependencies);rpcrt4.lib;userenv.lib</AdditionalDependencies>
|
||||||
<StripPrivateSymbols>$(OutDir)$(TargetName).public.pdb</StripPrivateSymbols>
|
<StripPrivateSymbols>$(OutDir)$(TargetName).public.pdb</StripPrivateSymbols>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
@ -134,7 +134,7 @@
|
|||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
|
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
|
||||||
<AdditionalDependencies>%(AdditionalDependencies);rpcrt4.lib</AdditionalDependencies>
|
<AdditionalDependencies>%(AdditionalDependencies);rpcrt4.lib;userenv.lib</AdditionalDependencies>
|
||||||
<StripPrivateSymbols>$(OutDir)$(TargetName).public.pdb</StripPrivateSymbols>
|
<StripPrivateSymbols>$(OutDir)$(TargetName).public.pdb</StripPrivateSymbols>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
@ -159,7 +159,7 @@
|
|||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
|
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
|
||||||
<AdditionalDependencies>%(AdditionalDependencies);rpcrt4.lib</AdditionalDependencies>
|
<AdditionalDependencies>%(AdditionalDependencies);rpcrt4.lib;userenv.lib</AdditionalDependencies>
|
||||||
<StripPrivateSymbols>$(OutDir)$(TargetName).public.pdb</StripPrivateSymbols>
|
<StripPrivateSymbols>$(OutDir)$(TargetName).public.pdb</StripPrivateSymbols>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
@ -184,7 +184,7 @@
|
|||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
|
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
|
||||||
<AdditionalDependencies>%(AdditionalDependencies);rpcrt4.lib</AdditionalDependencies>
|
<AdditionalDependencies>%(AdditionalDependencies);rpcrt4.lib;userenv.lib</AdditionalDependencies>
|
||||||
<StripPrivateSymbols>$(OutDir)$(TargetName).public.pdb</StripPrivateSymbols>
|
<StripPrivateSymbols>$(OutDir)$(TargetName).public.pdb</StripPrivateSymbols>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
@ -197,15 +197,14 @@
|
|||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\..\src\launcher\launcher.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\shared\minimal.h" />
|
<ClInclude Include="..\..\..\src\shared\minimal.h" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ResourceCompile Include="..\..\..\src\launcher\launcher-version.rc">
|
<ResourceCompile Include="..\..\..\src\launcher\launcher-version.rc">
|
||||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_UNICODE;UNICODE;%(PreprocessorDefinitions);MyProductName=$(MyProductName);MyDescription=$(MyDescription);MyCompanyName=$(MyCompanyName);MyCopyright=$(MyCopyright);MyProductVersion=$(MyProductVersion);MyProductStage=$(MyProductStage);MyVersion=$(MyVersion);MyVersionWithCommas=$(MyVersionWithCommas)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_UNICODE;UNICODE;%(PreprocessorDefinitions);MyProductName=$(MyProductName);MyDescription=$(MyDescription);MyCompanyName=$(MyCompanyName);MyCopyright=$(MyCopyright);MyProductVersion=$(MyProductVersion);MyProductStage=$(MyProductStage);MyVersion=$(MyVersion);MyVersionWithCommas=$(MyVersionWithCommas)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">_UNICODE;UNICODE;%(PreprocessorDefinitions);MyProductName=$(MyProductName);MyDescription=$(MyDescription);MyCompanyName=$(MyCompanyName);MyCopyright=$(MyCopyright);MyProductVersion=$(MyProductVersion);MyProductStage=$(MyProductStage);MyVersion=$(MyVersion);MyVersionWithCommas=$(MyVersionWithCommas)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">_UNICODE;UNICODE;%(PreprocessorDefinitions);MyProductName=$(MyProductName);MyDescription=$(MyDescription);MyCompanyName=$(MyCompanyName);MyCopyright=$(MyCopyright);MyProductVersion=$(MyProductVersion);MyProductStage=$(MyProductStage);MyVersion=$(MyVersion);MyVersionWithCommas=$(MyVersionWithCommas)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
</ResourceCompile>
|
</ResourceCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
@ -21,9 +21,6 @@
|
|||||||
<ClInclude Include="..\..\..\src\shared\minimal.h">
|
<ClInclude Include="..\..\..\src\shared\minimal.h">
|
||||||
<Filter>Include\shared</Filter>
|
<Filter>Include\shared</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\..\src\launcher\launcher.h">
|
|
||||||
<Filter>Source</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ResourceCompile Include="..\..\..\src\launcher\launcher-version.rc">
|
<ResourceCompile Include="..\..\..\src\launcher\launcher-version.rc">
|
@ -1,26 +1,40 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<PropertyGroup>
|
<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: )) And Exists('$(MyGitRoot)/.git/$(MyGitHead.Substring(5))')">$([System.IO.File]::ReadAllText($(MyGitRoot)/.git/$(MyGitHead.Substring(5))).Trim().Substring(0, 7))</MyGitRevision>
|
||||||
|
<MyGitRevision Condition="$(MyGitHead.StartsWith(ref: )) And !Exists('$(MyGitRoot)/.git/$(MyGitHead.Substring(5))')">$([System.Text.RegularExpressions.Regex]::Match($([System.IO.File]::ReadAllText($(MyGitRoot)/.git/packed-refs)), '[0-9a-fA-F]{40,}.*$(MyGitHead.Substring(5))').Value.Substring(0, 7))</MyGitRevision>
|
||||||
|
<MyGitRevision Condition="!$(MyGitHead.StartsWith(ref: ))">$(MyGitHead.Substring(0, 7))</MyGitRevision>
|
||||||
|
|
||||||
<MyProductName>WinFsp</MyProductName>
|
<MyProductName>WinFsp</MyProductName>
|
||||||
<MyDescription>Windows File System Proxy</MyDescription>
|
<MyDescription>Windows File System Proxy</MyDescription>
|
||||||
<MyCompanyName>Navimatics Corporation</MyCompanyName>
|
<MyCompanyName>Navimatics Corporation</MyCompanyName>
|
||||||
<MyCopyright>2015-$([System.DateTime]::Now.ToString(`yyyy`)) Bill Zissimopoulos</MyCopyright>
|
<MyCopyright>2015-$([System.DateTime]::Now.ToString(`yyyy`)) Bill Zissimopoulos</MyCopyright>
|
||||||
|
|
||||||
<MyCanonicalVersion>1.0</MyCanonicalVersion>
|
<MyCanonicalVersion>1.4</MyCanonicalVersion>
|
||||||
|
|
||||||
<MyProductVersion>$(MyCanonicalVersion) RC1</MyProductVersion>
|
<MyProductVersion>2019.1</MyProductVersion>
|
||||||
<MyProductStage>RC</MyProductStage>
|
<MyProductStage>Gold</MyProductStage>
|
||||||
|
|
||||||
<!-- 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>$(MyCanonicalVersion).$(MyBuildNumber)</MyVersion>
|
<MyVersion>$(MyCanonicalVersion).$(MyBuildNumber)</MyVersion>
|
||||||
<MyVersionWithCommas>$(MyVersion.Replace('.',',')),0</MyVersionWithCommas>
|
<MyVersionWithCommas>$(MyVersion.Replace('.',',')),0</MyVersionWithCommas>
|
||||||
|
<MyFullVersion>$(MyCanonicalVersion).$(MyBuildNumber).$(MyGitRevision)</MyFullVersion>
|
||||||
|
|
||||||
|
<MyAssemblyPolicyVersion>$(MyCanonicalVersion.Substring(0,$(MyVersion.IndexOf('.')))).0</MyAssemblyPolicyVersion>
|
||||||
|
<MyAssemblyVersion>$(MyAssemblyPolicyVersion).0.0</MyAssemblyVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemDefinitionGroup>
|
<ItemDefinitionGroup>
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<PreprocessorDefinitions>NTDDI_VERSION=0x06010000;_WIN32_WINNT=0x0601</PreprocessorDefinitions>
|
<PreprocessorDefinitions>NTDDI_VERSION=0x06010000;_WIN32_WINNT=0x0601</PreprocessorDefinitions>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ResourceCompile>
|
||||||
|
<PreprocessorDefinitions>MyProductName=$(MyProductName);MyDescription=$(MyDescription);MyCompanyName=$(MyCompanyName);MyCopyright=$(MyCopyright);MyProductVersion=$(MyProductVersion);MyProductStage=$(MyProductStage);MyVersion=$(MyVersion);MyVersionWithCommas=$(MyVersionWithCommas);MyFullVersion=$(MyFullVersion)</PreprocessorDefinitions>
|
||||||
|
</ResourceCompile>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
</Project>
|
</Project>
|
@ -32,19 +32,6 @@ Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "winfsp_msi", "installer\win
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CustomActions", "installer\CustomActions\CustomActions.vcxproj", "{95C223E6-B5F1-4FD0-9376-41CDBC824445}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CustomActions", "installer\CustomActions\CustomActions.vcxproj", "{95C223E6-B5F1-4FD0-9376-41CDBC824445}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "launcher", "launcher", "{FD28A504-431E-49B9-BB8C-DCA0E7019F66}"
|
|
||||||
EndProject
|
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "launcher", "launcher\launcher.vcxproj", "{A5EFD487-0140-4184-8C54-FFAEC2F85E35}"
|
|
||||||
ProjectSection(ProjectDependencies) = postProject
|
|
||||||
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB} = {4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}
|
|
||||||
{C85C26BA-8C22-4D30-83DA-46C3548E6332} = {C85C26BA-8C22-4D30-83DA-46C3548E6332}
|
|
||||||
EndProjectSection
|
|
||||||
EndProject
|
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "launchctl", "launcher\launchctl.vcxproj", "{73EAAEDA-557B-48D5-A137-328934720FB4}"
|
|
||||||
ProjectSection(ProjectDependencies) = postProject
|
|
||||||
{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}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fscrash", "testing\fscrash.vcxproj", "{10757011-749D-4954-873B-AE38D8145472}"
|
||||||
ProjectSection(ProjectDependencies) = postProject
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB} = {4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}
|
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB} = {4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}
|
||||||
@ -53,146 +40,256 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fscrash", "testing\fscrash.
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fsbench", "testing\fsbench.vcxproj", "{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fsbench", "testing\fsbench.vcxproj", "{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "winfsp.net", "dotnet\winfsp.net.csproj", "{94580219-CC8D-4FE5-A3BE-437B0B3481E1}"
|
||||||
|
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("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "dotnet", "dotnet", "{A998CEC4-4B34-43DC-8457-F7761228BA67}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "memfs-dotnet", "testing\memfs-dotnet.csproj", "{4920E350-D496-4652-AE98-6C4208AEC1D8}"
|
||||||
|
EndProject
|
||||||
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tools", "tools", "{04A4762C-FAB9-4196-9AC8-0757F3E8AB79}"
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "launcher", "tools\launcher.vcxproj", "{6CDF9411-B852-4EAC-822D-8F930675F17B}"
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "launchctl", "tools\launchctl.vcxproj", "{264A5D09-126F-4760-A3F1-4B3B95C925AA}"
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fsptool", "tools\fsptool.vcxproj", "{1E997BEC-1642-4A5C-B252-852DA094E11E}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Any CPU = Debug|Any CPU
|
||||||
Debug|x64 = Debug|x64
|
Debug|x64 = Debug|x64
|
||||||
Debug|x86 = Debug|x86
|
Debug|x86 = Debug|x86
|
||||||
|
Installer.Debug|Any CPU = Installer.Debug|Any CPU
|
||||||
Installer.Debug|x64 = Installer.Debug|x64
|
Installer.Debug|x64 = Installer.Debug|x64
|
||||||
Installer.Debug|x86 = Installer.Debug|x86
|
Installer.Debug|x86 = Installer.Debug|x86
|
||||||
|
Installer.Release|Any CPU = Installer.Release|Any CPU
|
||||||
Installer.Release|x64 = Installer.Release|x64
|
Installer.Release|x64 = Installer.Release|x64
|
||||||
Installer.Release|x86 = Installer.Release|x86
|
Installer.Release|x86 = Installer.Release|x86
|
||||||
|
Release|Any CPU = Release|Any CPU
|
||||||
Release|x64 = Release|x64
|
Release|x64 = Release|x64
|
||||||
Release|x86 = Release|x86
|
Release|x86 = Release|x86
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Debug|Any CPU.ActiveCfg = Debug|Win32
|
||||||
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Debug|x64.ActiveCfg = Debug|x64
|
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Debug|x64.Build.0 = Debug|x64
|
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Debug|x64.Build.0 = Debug|x64
|
||||||
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Debug|x86.ActiveCfg = Debug|Win32
|
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Debug|x86.ActiveCfg = Debug|Win32
|
||||||
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Debug|x86.Build.0 = Debug|Win32
|
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Debug|x86.Build.0 = Debug|Win32
|
||||||
|
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Installer.Debug|Any CPU.ActiveCfg = Release|Win32
|
||||||
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Installer.Debug|x64.ActiveCfg = Debug|x64
|
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Installer.Debug|x64.ActiveCfg = Debug|x64
|
||||||
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Installer.Debug|x86.ActiveCfg = Debug|Win32
|
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Installer.Debug|x86.ActiveCfg = Debug|Win32
|
||||||
|
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Installer.Release|Any CPU.ActiveCfg = Release|Win32
|
||||||
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Installer.Release|x64.ActiveCfg = Release|x64
|
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Installer.Release|x64.ActiveCfg = Release|x64
|
||||||
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Installer.Release|x86.ActiveCfg = Release|Win32
|
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Installer.Release|x86.ActiveCfg = Release|Win32
|
||||||
|
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Release|Any CPU.ActiveCfg = Release|Win32
|
||||||
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Release|x64.ActiveCfg = Release|x64
|
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Release|x64.ActiveCfg = Release|x64
|
||||||
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Release|x64.Build.0 = Release|x64
|
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Release|x64.Build.0 = Release|x64
|
||||||
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Release|x86.ActiveCfg = Release|Win32
|
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Release|x86.ActiveCfg = Release|Win32
|
||||||
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Release|x86.Build.0 = Release|Win32
|
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Release|x86.Build.0 = Release|Win32
|
||||||
|
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Debug|Any CPU.ActiveCfg = Debug|Win32
|
||||||
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Debug|x64.ActiveCfg = Debug|x64
|
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Debug|x64.Build.0 = Debug|x64
|
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Debug|x64.Build.0 = Debug|x64
|
||||||
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Debug|x86.ActiveCfg = Debug|Win32
|
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Debug|x86.ActiveCfg = Debug|Win32
|
||||||
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Debug|x86.Build.0 = Debug|Win32
|
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Debug|x86.Build.0 = Debug|Win32
|
||||||
|
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Installer.Debug|Any CPU.ActiveCfg = Release|Win32
|
||||||
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Installer.Debug|x64.ActiveCfg = Debug|x64
|
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Installer.Debug|x64.ActiveCfg = Debug|x64
|
||||||
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Installer.Debug|x86.ActiveCfg = Debug|Win32
|
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Installer.Debug|x86.ActiveCfg = Debug|Win32
|
||||||
|
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Installer.Release|Any CPU.ActiveCfg = Release|Win32
|
||||||
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Installer.Release|x64.ActiveCfg = Release|x64
|
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Installer.Release|x64.ActiveCfg = Release|x64
|
||||||
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Installer.Release|x86.ActiveCfg = Release|Win32
|
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Installer.Release|x86.ActiveCfg = Release|Win32
|
||||||
|
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Release|Any CPU.ActiveCfg = Release|Win32
|
||||||
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Release|x64.ActiveCfg = Release|x64
|
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Release|x64.ActiveCfg = Release|x64
|
||||||
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Release|x64.Build.0 = Release|x64
|
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Release|x64.Build.0 = Release|x64
|
||||||
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Release|x86.ActiveCfg = Release|Win32
|
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Release|x86.ActiveCfg = Release|Win32
|
||||||
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Release|x86.Build.0 = Release|Win32
|
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Release|x86.Build.0 = Release|Win32
|
||||||
|
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Debug|Any CPU.ActiveCfg = Debug|Win32
|
||||||
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Debug|x64.ActiveCfg = Debug|x64
|
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Debug|x64.Build.0 = Debug|x64
|
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Debug|x64.Build.0 = Debug|x64
|
||||||
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Debug|x86.ActiveCfg = Debug|Win32
|
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Debug|x86.ActiveCfg = Debug|Win32
|
||||||
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Debug|x86.Build.0 = Debug|Win32
|
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Debug|x86.Build.0 = Debug|Win32
|
||||||
|
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Installer.Debug|Any CPU.ActiveCfg = Release|Win32
|
||||||
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Installer.Debug|x64.ActiveCfg = Debug|x64
|
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Installer.Debug|x64.ActiveCfg = Debug|x64
|
||||||
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Installer.Debug|x86.ActiveCfg = Debug|Win32
|
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Installer.Debug|x86.ActiveCfg = Debug|Win32
|
||||||
|
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Installer.Release|Any CPU.ActiveCfg = Release|Win32
|
||||||
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Installer.Release|x64.ActiveCfg = Release|x64
|
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Installer.Release|x64.ActiveCfg = Release|x64
|
||||||
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Installer.Release|x86.ActiveCfg = Release|Win32
|
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Installer.Release|x86.ActiveCfg = Release|Win32
|
||||||
|
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Release|Any CPU.ActiveCfg = Release|Win32
|
||||||
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Release|x64.ActiveCfg = Release|x64
|
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Release|x64.ActiveCfg = Release|x64
|
||||||
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Release|x64.Build.0 = Release|x64
|
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Release|x64.Build.0 = Release|x64
|
||||||
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Release|x86.ActiveCfg = Release|Win32
|
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Release|x86.ActiveCfg = Release|Win32
|
||||||
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Release|x86.Build.0 = Release|Win32
|
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Release|x86.Build.0 = Release|Win32
|
||||||
|
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Debug|Any CPU.ActiveCfg = Debug|Win32
|
||||||
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Debug|x64.ActiveCfg = Debug|x64
|
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Debug|x64.Build.0 = Debug|x64
|
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Debug|x64.Build.0 = Debug|x64
|
||||||
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Debug|x86.ActiveCfg = Debug|Win32
|
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Debug|x86.ActiveCfg = Debug|Win32
|
||||||
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Debug|x86.Build.0 = Debug|Win32
|
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Debug|x86.Build.0 = Debug|Win32
|
||||||
|
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Installer.Debug|Any CPU.ActiveCfg = Release|Win32
|
||||||
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Installer.Debug|x64.ActiveCfg = Debug|x64
|
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Installer.Debug|x64.ActiveCfg = Debug|x64
|
||||||
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Installer.Debug|x86.ActiveCfg = Debug|Win32
|
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Installer.Debug|x86.ActiveCfg = Debug|Win32
|
||||||
|
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Installer.Release|Any CPU.ActiveCfg = Release|Win32
|
||||||
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Installer.Release|x64.ActiveCfg = Release|x64
|
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Installer.Release|x64.ActiveCfg = Release|x64
|
||||||
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Installer.Release|x86.ActiveCfg = Release|Win32
|
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Installer.Release|x86.ActiveCfg = Release|Win32
|
||||||
|
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Release|Any CPU.ActiveCfg = Release|Win32
|
||||||
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Release|x64.ActiveCfg = Release|x64
|
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Release|x64.ActiveCfg = Release|x64
|
||||||
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Release|x64.Build.0 = Release|x64
|
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Release|x64.Build.0 = Release|x64
|
||||||
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Release|x86.ActiveCfg = Release|Win32
|
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Release|x86.ActiveCfg = Release|Win32
|
||||||
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Release|x86.Build.0 = Release|Win32
|
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Release|x86.Build.0 = Release|Win32
|
||||||
|
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Debug|Any CPU.ActiveCfg = Debug|x86
|
||||||
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Debug|x64.ActiveCfg = Debug|x86
|
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Debug|x64.ActiveCfg = Debug|x86
|
||||||
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Debug|x86.ActiveCfg = Debug|x86
|
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Debug|x86.ActiveCfg = Debug|x86
|
||||||
|
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Installer.Debug|Any CPU.ActiveCfg = Release|x86
|
||||||
|
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Installer.Debug|Any CPU.Build.0 = Release|x86
|
||||||
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Installer.Debug|x64.ActiveCfg = Release|x86
|
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Installer.Debug|x64.ActiveCfg = Release|x86
|
||||||
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Installer.Debug|x64.Build.0 = Release|x86
|
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Installer.Debug|x64.Build.0 = Release|x86
|
||||||
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Installer.Debug|x86.ActiveCfg = Debug|x86
|
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Installer.Debug|x86.ActiveCfg = Debug|x86
|
||||||
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Installer.Debug|x86.Build.0 = Debug|x86
|
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Installer.Debug|x86.Build.0 = Debug|x86
|
||||||
|
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Installer.Release|Any CPU.ActiveCfg = Release|x86
|
||||||
|
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Installer.Release|Any CPU.Build.0 = Release|x86
|
||||||
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Installer.Release|x64.ActiveCfg = Release|x86
|
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Installer.Release|x64.ActiveCfg = Release|x86
|
||||||
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Installer.Release|x64.Build.0 = Release|x86
|
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Installer.Release|x64.Build.0 = Release|x86
|
||||||
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Installer.Release|x86.ActiveCfg = Release|x86
|
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Installer.Release|x86.ActiveCfg = Release|x86
|
||||||
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Installer.Release|x86.Build.0 = Release|x86
|
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Installer.Release|x86.Build.0 = Release|x86
|
||||||
|
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Release|Any CPU.ActiveCfg = Release|x86
|
||||||
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Release|x64.ActiveCfg = Release|x86
|
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Release|x64.ActiveCfg = Release|x86
|
||||||
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Release|x86.ActiveCfg = Release|x86
|
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Release|x86.ActiveCfg = Release|x86
|
||||||
|
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Debug|Any CPU.ActiveCfg = Debug|Win32
|
||||||
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Debug|x64.ActiveCfg = Debug|Win32
|
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Debug|x64.ActiveCfg = Debug|Win32
|
||||||
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Debug|x86.ActiveCfg = Debug|Win32
|
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Debug|x86.ActiveCfg = Debug|Win32
|
||||||
|
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Installer.Debug|Any CPU.ActiveCfg = Release|Win32
|
||||||
|
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Installer.Debug|Any CPU.Build.0 = Release|Win32
|
||||||
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Installer.Debug|x64.ActiveCfg = Release|Win32
|
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Installer.Debug|x64.ActiveCfg = Release|Win32
|
||||||
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Installer.Debug|x64.Build.0 = Release|Win32
|
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Installer.Debug|x64.Build.0 = Release|Win32
|
||||||
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Installer.Debug|x86.ActiveCfg = Debug|Win32
|
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Installer.Debug|x86.ActiveCfg = Debug|Win32
|
||||||
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Installer.Debug|x86.Build.0 = Debug|Win32
|
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Installer.Debug|x86.Build.0 = Debug|Win32
|
||||||
|
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Installer.Release|Any CPU.ActiveCfg = Release|Win32
|
||||||
|
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Installer.Release|Any CPU.Build.0 = Release|Win32
|
||||||
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Installer.Release|x64.ActiveCfg = Release|Win32
|
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Installer.Release|x64.ActiveCfg = Release|Win32
|
||||||
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Installer.Release|x64.Build.0 = Release|Win32
|
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Installer.Release|x64.Build.0 = Release|Win32
|
||||||
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Installer.Release|x86.ActiveCfg = Release|Win32
|
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Installer.Release|x86.ActiveCfg = Release|Win32
|
||||||
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Installer.Release|x86.Build.0 = Release|Win32
|
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Installer.Release|x86.Build.0 = Release|Win32
|
||||||
|
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Release|Any CPU.ActiveCfg = Release|Win32
|
||||||
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Release|x64.ActiveCfg = Release|Win32
|
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Release|x64.ActiveCfg = Release|Win32
|
||||||
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Release|x86.ActiveCfg = Release|Win32
|
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Release|x86.ActiveCfg = Release|Win32
|
||||||
{A5EFD487-0140-4184-8C54-FFAEC2F85E35}.Debug|x64.ActiveCfg = Debug|x64
|
{10757011-749D-4954-873B-AE38D8145472}.Debug|Any CPU.ActiveCfg = Debug|Win32
|
||||||
{A5EFD487-0140-4184-8C54-FFAEC2F85E35}.Debug|x64.Build.0 = Debug|x64
|
|
||||||
{A5EFD487-0140-4184-8C54-FFAEC2F85E35}.Debug|x86.ActiveCfg = Debug|Win32
|
|
||||||
{A5EFD487-0140-4184-8C54-FFAEC2F85E35}.Debug|x86.Build.0 = Debug|Win32
|
|
||||||
{A5EFD487-0140-4184-8C54-FFAEC2F85E35}.Installer.Debug|x64.ActiveCfg = Debug|x64
|
|
||||||
{A5EFD487-0140-4184-8C54-FFAEC2F85E35}.Installer.Debug|x86.ActiveCfg = Debug|Win32
|
|
||||||
{A5EFD487-0140-4184-8C54-FFAEC2F85E35}.Installer.Release|x64.ActiveCfg = Release|x64
|
|
||||||
{A5EFD487-0140-4184-8C54-FFAEC2F85E35}.Installer.Release|x86.ActiveCfg = Release|Win32
|
|
||||||
{A5EFD487-0140-4184-8C54-FFAEC2F85E35}.Release|x64.ActiveCfg = Release|x64
|
|
||||||
{A5EFD487-0140-4184-8C54-FFAEC2F85E35}.Release|x64.Build.0 = Release|x64
|
|
||||||
{A5EFD487-0140-4184-8C54-FFAEC2F85E35}.Release|x86.ActiveCfg = Release|Win32
|
|
||||||
{A5EFD487-0140-4184-8C54-FFAEC2F85E35}.Release|x86.Build.0 = Release|Win32
|
|
||||||
{73EAAEDA-557B-48D5-A137-328934720FB4}.Debug|x64.ActiveCfg = Debug|x64
|
|
||||||
{73EAAEDA-557B-48D5-A137-328934720FB4}.Debug|x64.Build.0 = Debug|x64
|
|
||||||
{73EAAEDA-557B-48D5-A137-328934720FB4}.Debug|x86.ActiveCfg = Debug|Win32
|
|
||||||
{73EAAEDA-557B-48D5-A137-328934720FB4}.Debug|x86.Build.0 = Debug|Win32
|
|
||||||
{73EAAEDA-557B-48D5-A137-328934720FB4}.Installer.Debug|x64.ActiveCfg = Debug|x64
|
|
||||||
{73EAAEDA-557B-48D5-A137-328934720FB4}.Installer.Debug|x86.ActiveCfg = Debug|Win32
|
|
||||||
{73EAAEDA-557B-48D5-A137-328934720FB4}.Installer.Release|x64.ActiveCfg = Release|x64
|
|
||||||
{73EAAEDA-557B-48D5-A137-328934720FB4}.Installer.Release|x86.ActiveCfg = Release|Win32
|
|
||||||
{73EAAEDA-557B-48D5-A137-328934720FB4}.Release|x64.ActiveCfg = Release|x64
|
|
||||||
{73EAAEDA-557B-48D5-A137-328934720FB4}.Release|x64.Build.0 = Release|x64
|
|
||||||
{73EAAEDA-557B-48D5-A137-328934720FB4}.Release|x86.ActiveCfg = Release|Win32
|
|
||||||
{73EAAEDA-557B-48D5-A137-328934720FB4}.Release|x86.Build.0 = Release|Win32
|
|
||||||
{10757011-749D-4954-873B-AE38D8145472}.Debug|x64.ActiveCfg = Debug|x64
|
{10757011-749D-4954-873B-AE38D8145472}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
{10757011-749D-4954-873B-AE38D8145472}.Debug|x64.Build.0 = 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.ActiveCfg = Debug|Win32
|
||||||
{10757011-749D-4954-873B-AE38D8145472}.Debug|x86.Build.0 = Debug|Win32
|
{10757011-749D-4954-873B-AE38D8145472}.Debug|x86.Build.0 = Debug|Win32
|
||||||
|
{10757011-749D-4954-873B-AE38D8145472}.Installer.Debug|Any CPU.ActiveCfg = Release|Win32
|
||||||
{10757011-749D-4954-873B-AE38D8145472}.Installer.Debug|x64.ActiveCfg = Debug|x64
|
{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.ActiveCfg = Debug|Win32
|
||||||
{10757011-749D-4954-873B-AE38D8145472}.Installer.Debug|x86.Build.0 = Debug|Win32
|
{10757011-749D-4954-873B-AE38D8145472}.Installer.Release|Any CPU.ActiveCfg = Release|Win32
|
||||||
{10757011-749D-4954-873B-AE38D8145472}.Installer.Release|x64.ActiveCfg = Release|x64
|
{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.ActiveCfg = Release|Win32
|
||||||
{10757011-749D-4954-873B-AE38D8145472}.Installer.Release|x86.Build.0 = Release|Win32
|
{10757011-749D-4954-873B-AE38D8145472}.Release|Any CPU.ActiveCfg = Release|Win32
|
||||||
{10757011-749D-4954-873B-AE38D8145472}.Release|x64.ActiveCfg = Release|x64
|
{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|x64.Build.0 = Release|x64
|
||||||
{10757011-749D-4954-873B-AE38D8145472}.Release|x86.ActiveCfg = Release|Win32
|
{10757011-749D-4954-873B-AE38D8145472}.Release|x86.ActiveCfg = Release|Win32
|
||||||
{10757011-749D-4954-873B-AE38D8145472}.Release|x86.Build.0 = Release|Win32
|
{10757011-749D-4954-873B-AE38D8145472}.Release|x86.Build.0 = Release|Win32
|
||||||
|
{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Debug|Any CPU.ActiveCfg = Debug|Win32
|
||||||
{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Debug|x64.ActiveCfg = Debug|x64
|
{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|x64.Build.0 = Debug|x64
|
||||||
{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Debug|x86.ActiveCfg = Debug|Win32
|
{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}.Debug|x86.Build.0 = Debug|Win32
|
||||||
|
{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Installer.Debug|Any CPU.ActiveCfg = Release|Win32
|
||||||
{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Installer.Debug|x64.ActiveCfg = Debug|x64
|
{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.ActiveCfg = Debug|Win32
|
||||||
{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Installer.Debug|x86.Build.0 = Debug|Win32
|
{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Installer.Release|Any CPU.ActiveCfg = Release|Win32
|
||||||
{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Installer.Release|x64.ActiveCfg = Release|x64
|
{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.ActiveCfg = Release|Win32
|
||||||
{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Installer.Release|x86.Build.0 = Release|Win32
|
{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Release|Any CPU.ActiveCfg = Release|Win32
|
||||||
{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Release|x64.ActiveCfg = Release|x64
|
{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|x64.Build.0 = Release|x64
|
||||||
{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Release|x86.ActiveCfg = Release|Win32
|
{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Release|x86.ActiveCfg = Release|Win32
|
||||||
{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Release|x86.Build.0 = Release|Win32
|
{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Release|x86.Build.0 = Release|Win32
|
||||||
|
{94580219-CC8D-4FE5-A3BE-437B0B3481E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{94580219-CC8D-4FE5-A3BE-437B0B3481E1}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{94580219-CC8D-4FE5-A3BE-437B0B3481E1}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{94580219-CC8D-4FE5-A3BE-437B0B3481E1}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{94580219-CC8D-4FE5-A3BE-437B0B3481E1}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{94580219-CC8D-4FE5-A3BE-437B0B3481E1}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
|
{94580219-CC8D-4FE5-A3BE-437B0B3481E1}.Installer.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{94580219-CC8D-4FE5-A3BE-437B0B3481E1}.Installer.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{94580219-CC8D-4FE5-A3BE-437B0B3481E1}.Installer.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{94580219-CC8D-4FE5-A3BE-437B0B3481E1}.Installer.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{94580219-CC8D-4FE5-A3BE-437B0B3481E1}.Installer.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{94580219-CC8D-4FE5-A3BE-437B0B3481E1}.Installer.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{94580219-CC8D-4FE5-A3BE-437B0B3481E1}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{94580219-CC8D-4FE5-A3BE-437B0B3481E1}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{94580219-CC8D-4FE5-A3BE-437B0B3481E1}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{94580219-CC8D-4FE5-A3BE-437B0B3481E1}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{94580219-CC8D-4FE5-A3BE-437B0B3481E1}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{94580219-CC8D-4FE5-A3BE-437B0B3481E1}.Release|x86.Build.0 = Release|Any CPU
|
||||||
|
{4920E350-D496-4652-AE98-6C4208AEC1D8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{4920E350-D496-4652-AE98-6C4208AEC1D8}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{4920E350-D496-4652-AE98-6C4208AEC1D8}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{4920E350-D496-4652-AE98-6C4208AEC1D8}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{4920E350-D496-4652-AE98-6C4208AEC1D8}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{4920E350-D496-4652-AE98-6C4208AEC1D8}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
|
{4920E350-D496-4652-AE98-6C4208AEC1D8}.Installer.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{4920E350-D496-4652-AE98-6C4208AEC1D8}.Installer.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{4920E350-D496-4652-AE98-6C4208AEC1D8}.Installer.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{4920E350-D496-4652-AE98-6C4208AEC1D8}.Installer.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{4920E350-D496-4652-AE98-6C4208AEC1D8}.Installer.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{4920E350-D496-4652-AE98-6C4208AEC1D8}.Installer.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{4920E350-D496-4652-AE98-6C4208AEC1D8}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{4920E350-D496-4652-AE98-6C4208AEC1D8}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{4920E350-D496-4652-AE98-6C4208AEC1D8}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{4920E350-D496-4652-AE98-6C4208AEC1D8}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{4920E350-D496-4652-AE98-6C4208AEC1D8}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{4920E350-D496-4652-AE98-6C4208AEC1D8}.Release|x86.Build.0 = Release|Any CPU
|
||||||
|
{6CDF9411-B852-4EAC-822D-8F930675F17B}.Debug|Any CPU.ActiveCfg = Debug|Win32
|
||||||
|
{6CDF9411-B852-4EAC-822D-8F930675F17B}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{6CDF9411-B852-4EAC-822D-8F930675F17B}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{6CDF9411-B852-4EAC-822D-8F930675F17B}.Debug|x86.ActiveCfg = Debug|Win32
|
||||||
|
{6CDF9411-B852-4EAC-822D-8F930675F17B}.Debug|x86.Build.0 = Debug|Win32
|
||||||
|
{6CDF9411-B852-4EAC-822D-8F930675F17B}.Installer.Debug|Any CPU.ActiveCfg = Release|x64
|
||||||
|
{6CDF9411-B852-4EAC-822D-8F930675F17B}.Installer.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{6CDF9411-B852-4EAC-822D-8F930675F17B}.Installer.Debug|x86.ActiveCfg = Debug|Win32
|
||||||
|
{6CDF9411-B852-4EAC-822D-8F930675F17B}.Installer.Release|Any CPU.ActiveCfg = Release|x64
|
||||||
|
{6CDF9411-B852-4EAC-822D-8F930675F17B}.Installer.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{6CDF9411-B852-4EAC-822D-8F930675F17B}.Installer.Release|x86.ActiveCfg = Release|Win32
|
||||||
|
{6CDF9411-B852-4EAC-822D-8F930675F17B}.Release|Any CPU.ActiveCfg = Release|Win32
|
||||||
|
{6CDF9411-B852-4EAC-822D-8F930675F17B}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{6CDF9411-B852-4EAC-822D-8F930675F17B}.Release|x64.Build.0 = Release|x64
|
||||||
|
{6CDF9411-B852-4EAC-822D-8F930675F17B}.Release|x86.ActiveCfg = Release|Win32
|
||||||
|
{6CDF9411-B852-4EAC-822D-8F930675F17B}.Release|x86.Build.0 = Release|Win32
|
||||||
|
{264A5D09-126F-4760-A3F1-4B3B95C925AA}.Debug|Any CPU.ActiveCfg = Debug|Win32
|
||||||
|
{264A5D09-126F-4760-A3F1-4B3B95C925AA}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{264A5D09-126F-4760-A3F1-4B3B95C925AA}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{264A5D09-126F-4760-A3F1-4B3B95C925AA}.Debug|x86.ActiveCfg = Debug|Win32
|
||||||
|
{264A5D09-126F-4760-A3F1-4B3B95C925AA}.Debug|x86.Build.0 = Debug|Win32
|
||||||
|
{264A5D09-126F-4760-A3F1-4B3B95C925AA}.Installer.Debug|Any CPU.ActiveCfg = Release|x64
|
||||||
|
{264A5D09-126F-4760-A3F1-4B3B95C925AA}.Installer.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{264A5D09-126F-4760-A3F1-4B3B95C925AA}.Installer.Debug|x86.ActiveCfg = Debug|Win32
|
||||||
|
{264A5D09-126F-4760-A3F1-4B3B95C925AA}.Installer.Release|Any CPU.ActiveCfg = Release|x64
|
||||||
|
{264A5D09-126F-4760-A3F1-4B3B95C925AA}.Installer.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{264A5D09-126F-4760-A3F1-4B3B95C925AA}.Installer.Release|x86.ActiveCfg = Release|Win32
|
||||||
|
{264A5D09-126F-4760-A3F1-4B3B95C925AA}.Release|Any CPU.ActiveCfg = Release|Win32
|
||||||
|
{264A5D09-126F-4760-A3F1-4B3B95C925AA}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{264A5D09-126F-4760-A3F1-4B3B95C925AA}.Release|x64.Build.0 = Release|x64
|
||||||
|
{264A5D09-126F-4760-A3F1-4B3B95C925AA}.Release|x86.ActiveCfg = Release|Win32
|
||||||
|
{264A5D09-126F-4760-A3F1-4B3B95C925AA}.Release|x86.Build.0 = Release|Win32
|
||||||
|
{1E997BEC-1642-4A5C-B252-852DA094E11E}.Debug|Any CPU.ActiveCfg = Debug|Win32
|
||||||
|
{1E997BEC-1642-4A5C-B252-852DA094E11E}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{1E997BEC-1642-4A5C-B252-852DA094E11E}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{1E997BEC-1642-4A5C-B252-852DA094E11E}.Debug|x86.ActiveCfg = Debug|Win32
|
||||||
|
{1E997BEC-1642-4A5C-B252-852DA094E11E}.Debug|x86.Build.0 = Debug|Win32
|
||||||
|
{1E997BEC-1642-4A5C-B252-852DA094E11E}.Installer.Debug|Any CPU.ActiveCfg = Release|x64
|
||||||
|
{1E997BEC-1642-4A5C-B252-852DA094E11E}.Installer.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{1E997BEC-1642-4A5C-B252-852DA094E11E}.Installer.Debug|x86.ActiveCfg = Debug|Win32
|
||||||
|
{1E997BEC-1642-4A5C-B252-852DA094E11E}.Installer.Release|Any CPU.ActiveCfg = Release|x64
|
||||||
|
{1E997BEC-1642-4A5C-B252-852DA094E11E}.Installer.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{1E997BEC-1642-4A5C-B252-852DA094E11E}.Installer.Release|x86.ActiveCfg = Release|Win32
|
||||||
|
{1E997BEC-1642-4A5C-B252-852DA094E11E}.Release|Any CPU.ActiveCfg = Release|Win32
|
||||||
|
{1E997BEC-1642-4A5C-B252-852DA094E11E}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{1E997BEC-1642-4A5C-B252-852DA094E11E}.Release|x64.Build.0 = Release|x64
|
||||||
|
{1E997BEC-1642-4A5C-B252-852DA094E11E}.Release|x86.ActiveCfg = Release|Win32
|
||||||
|
{1E997BEC-1642-4A5C-B252-852DA094E11E}.Release|x86.Build.0 = Release|Win32
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
@ -202,9 +299,12 @@ Global
|
|||||||
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1} = {69439FD1-C07D-4BF1-98DC-3CCFECE53A49}
|
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1} = {69439FD1-C07D-4BF1-98DC-3CCFECE53A49}
|
||||||
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594} = {B464EF06-42AE-4674-81BB-FDDE80204822}
|
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594} = {B464EF06-42AE-4674-81BB-FDDE80204822}
|
||||||
{95C223E6-B5F1-4FD0-9376-41CDBC824445} = {B464EF06-42AE-4674-81BB-FDDE80204822}
|
{95C223E6-B5F1-4FD0-9376-41CDBC824445} = {B464EF06-42AE-4674-81BB-FDDE80204822}
|
||||||
{A5EFD487-0140-4184-8C54-FFAEC2F85E35} = {FD28A504-431E-49B9-BB8C-DCA0E7019F66}
|
|
||||||
{73EAAEDA-557B-48D5-A137-328934720FB4} = {FD28A504-431E-49B9-BB8C-DCA0E7019F66}
|
|
||||||
{10757011-749D-4954-873B-AE38D8145472} = {69439FD1-C07D-4BF1-98DC-3CCFECE53A49}
|
{10757011-749D-4954-873B-AE38D8145472} = {69439FD1-C07D-4BF1-98DC-3CCFECE53A49}
|
||||||
{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB} = {69439FD1-C07D-4BF1-98DC-3CCFECE53A49}
|
{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB} = {69439FD1-C07D-4BF1-98DC-3CCFECE53A49}
|
||||||
|
{94580219-CC8D-4FE5-A3BE-437B0B3481E1} = {A998CEC4-4B34-43DC-8457-F7761228BA67}
|
||||||
|
{4920E350-D496-4652-AE98-6C4208AEC1D8} = {69439FD1-C07D-4BF1-98DC-3CCFECE53A49}
|
||||||
|
{6CDF9411-B852-4EAC-822D-8F930675F17B} = {04A4762C-FAB9-4196-9AC8-0757F3E8AB79}
|
||||||
|
{264A5D09-126F-4760-A3F1-4B3B95C925AA} = {04A4762C-FAB9-4196-9AC8-0757F3E8AB79}
|
||||||
|
{1E997BEC-1642-4A5C-B252-852DA094E11E} = {04A4762C-FAB9-4196-9AC8-0757F3E8AB79}
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
EndGlobal
|
EndGlobal
|
||||||
|
@ -20,22 +20,36 @@
|
|||||||
</ProjectConfiguration>
|
</ProjectConfiguration>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<ClInclude Include="..\..\inc\fuse3\fuse.h" />
|
||||||
|
<ClInclude Include="..\..\inc\fuse3\fuse_common.h" />
|
||||||
|
<ClInclude Include="..\..\inc\fuse3\fuse_opt.h" />
|
||||||
|
<ClInclude Include="..\..\inc\fuse3\winfsp_fuse.h" />
|
||||||
<ClInclude Include="..\..\inc\fuse\fuse.h" />
|
<ClInclude Include="..\..\inc\fuse\fuse.h" />
|
||||||
<ClInclude Include="..\..\inc\fuse\fuse_common.h" />
|
<ClInclude Include="..\..\inc\fuse\fuse_common.h" />
|
||||||
<ClInclude Include="..\..\inc\fuse\fuse_opt.h" />
|
<ClInclude Include="..\..\inc\fuse\fuse_opt.h" />
|
||||||
<ClInclude Include="..\..\inc\fuse\winfsp_fuse.h" />
|
<ClInclude Include="..\..\inc\fuse\winfsp_fuse.h" />
|
||||||
<ClInclude Include="..\..\inc\winfsp\fsctl.h" />
|
<ClInclude Include="..\..\inc\winfsp\fsctl.h" />
|
||||||
|
<ClInclude Include="..\..\inc\winfsp\launch.h" />
|
||||||
<ClInclude Include="..\..\inc\winfsp\winfsp.h" />
|
<ClInclude Include="..\..\inc\winfsp\winfsp.h" />
|
||||||
|
<ClInclude Include="..\..\inc\winfsp\winfsp.hpp" />
|
||||||
|
<ClInclude Include="..\..\src\dll\fuse3\library.h" />
|
||||||
<ClInclude Include="..\..\src\dll\fuse\library.h" />
|
<ClInclude Include="..\..\src\dll\fuse\library.h" />
|
||||||
<ClInclude Include="..\..\src\dll\library.h" />
|
<ClInclude Include="..\..\src\dll\library.h" />
|
||||||
<ClInclude Include="..\..\src\shared\minimal.h" />
|
<ClInclude Include="..\..\src\shared\minimal.h" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\..\src\dll\dirbuf.c" />
|
||||||
<ClCompile Include="..\..\src\dll\eventlog.c" />
|
<ClCompile Include="..\..\src\dll\eventlog.c" />
|
||||||
|
<ClCompile Include="..\..\src\dll\fuse3\fuse2to3.c" />
|
||||||
|
<ClCompile Include="..\..\src\dll\fuse3\fuse3.c" />
|
||||||
|
<ClCompile Include="..\..\src\dll\fuse3\fuse3_compat.c" />
|
||||||
<ClCompile Include="..\..\src\dll\fuse\fuse.c" />
|
<ClCompile Include="..\..\src\dll\fuse\fuse.c" />
|
||||||
|
<ClCompile Include="..\..\src\dll\fuse\fuse_compat.c" />
|
||||||
<ClCompile Include="..\..\src\dll\fuse\fuse_intf.c" />
|
<ClCompile Include="..\..\src\dll\fuse\fuse_intf.c" />
|
||||||
|
<ClCompile Include="..\..\src\dll\fuse\fuse_loop.c" />
|
||||||
<ClCompile Include="..\..\src\dll\fuse\fuse_main.c" />
|
<ClCompile Include="..\..\src\dll\fuse\fuse_main.c" />
|
||||||
<ClCompile Include="..\..\src\dll\fuse\fuse_opt.c" />
|
<ClCompile Include="..\..\src\dll\fuse\fuse_opt.c" />
|
||||||
|
<ClCompile Include="..\..\src\dll\launch.c" />
|
||||||
<ClCompile Include="..\..\src\dll\np.c" />
|
<ClCompile Include="..\..\src\dll\np.c" />
|
||||||
<ClCompile Include="..\..\src\dll\posix.c" />
|
<ClCompile Include="..\..\src\dll\posix.c" />
|
||||||
<ClCompile Include="..\..\src\dll\security.c" />
|
<ClCompile Include="..\..\src\dll\security.c" />
|
||||||
@ -48,9 +62,10 @@
|
|||||||
<ClCompile Include="..\..\src\dll\path.c" />
|
<ClCompile Include="..\..\src\dll\path.c" />
|
||||||
<ClCompile Include="..\..\src\dll\service.c" />
|
<ClCompile Include="..\..\src\dll\service.c" />
|
||||||
<ClCompile Include="..\..\src\dll\util.c" />
|
<ClCompile Include="..\..\src\dll\util.c" />
|
||||||
|
<ClCompile Include="..\..\src\dll\wksid.c" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<CustomBuild Include="..\..\src\dll\fuse\fuse.pc">
|
<CustomBuild Include="..\..\src\dll\fuse\fuse.pc.in">
|
||||||
<FileType>Document</FileType>
|
<FileType>Document</FileType>
|
||||||
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">echo arch=$(PlatformTarget) >$(OutDir)fuse-$(PlatformTarget).pc
|
<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>
|
copy /b $(OutDir)fuse-$(PlatformTarget).pc + %(FullPath) $(OutDir)fuse-$(PlatformTarget).pc >nul</Command>
|
||||||
@ -73,15 +88,38 @@ copy /b $(OutDir)fuse-$(PlatformTarget).pc + %(FullPath) $(OutDir)fuse-$(Platfor
|
|||||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)fuse-$(PlatformTarget).pc</Outputs>
|
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)fuse-$(PlatformTarget).pc</Outputs>
|
||||||
<LinkObjects Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkObjects>
|
<LinkObjects Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkObjects>
|
||||||
</CustomBuild>
|
</CustomBuild>
|
||||||
|
<CustomBuild Include="..\..\src\dll\fuse3\fuse3.pc.in">
|
||||||
|
<FileType>Document</FileType>
|
||||||
|
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">echo arch=$(PlatformTarget) >$(OutDir)fuse3-$(PlatformTarget).pc
|
||||||
|
copy /b $(OutDir)fuse3-$(PlatformTarget).pc + %(FullPath) $(OutDir)fuse3-$(PlatformTarget).pc >nul</Command>
|
||||||
|
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">echo arch=$(PlatformTarget) >$(OutDir)fuse3-$(PlatformTarget).pc
|
||||||
|
copy /b $(OutDir)fuse3-$(PlatformTarget).pc + %(FullPath) $(OutDir)fuse3-$(PlatformTarget).pc >nul</Command>
|
||||||
|
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">echo arch=$(PlatformTarget) >$(OutDir)fuse3-$(PlatformTarget).pc
|
||||||
|
copy /b $(OutDir)fuse3-$(PlatformTarget).pc + %(FullPath) $(OutDir)fuse3-$(PlatformTarget).pc >nul</Command>
|
||||||
|
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">echo arch=$(PlatformTarget) >$(OutDir)fuse3-$(PlatformTarget).pc
|
||||||
|
copy /b $(OutDir)fuse3-$(PlatformTarget).pc + %(FullPath) $(OutDir)fuse3-$(PlatformTarget).pc >nul</Command>
|
||||||
|
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Writing fuse3-$(PlatformTarget).pc</Message>
|
||||||
|
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Writing fuse3-$(PlatformTarget).pc</Message>
|
||||||
|
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Writing fuse3-$(PlatformTarget).pc</Message>
|
||||||
|
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Writing fuse3-$(PlatformTarget).pc</Message>
|
||||||
|
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)fuse3-$(PlatformTarget).pc</Outputs>
|
||||||
|
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)fuse3-$(PlatformTarget).pc</Outputs>
|
||||||
|
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)fuse3-$(PlatformTarget).pc</Outputs>
|
||||||
|
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)fuse3-$(PlatformTarget).pc</Outputs>
|
||||||
|
<LinkObjects Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkObjects>
|
||||||
|
<LinkObjects Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkObjects>
|
||||||
|
<LinkObjects Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkObjects>
|
||||||
|
<LinkObjects Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkObjects>
|
||||||
|
</CustomBuild>
|
||||||
<None Include="..\..\src\dll\library.def" />
|
<None Include="..\..\src\dll\library.def" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ResourceCompile Include="..\..\src\dll\eventlog\eventlog.rc" />
|
<ResourceCompile Include="..\..\src\dll\eventlog\eventlog.rc" />
|
||||||
<ResourceCompile Include="..\..\src\dll\version.rc">
|
<ResourceCompile Include="..\..\src\dll\version.rc">
|
||||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_UNICODE;UNICODE;%(PreprocessorDefinitions);MyProductName=$(MyProductName);MyDescription=$(MyDescription);MyCompanyName=$(MyCompanyName);MyCopyright=$(MyCopyright);MyProductVersion=$(MyProductVersion);MyProductStage=$(MyProductStage);MyVersion=$(MyVersion);MyVersionWithCommas=$(MyVersionWithCommas)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_UNICODE;UNICODE;%(PreprocessorDefinitions);MyProductName=$(MyProductName);MyDescription=$(MyDescription);MyCompanyName=$(MyCompanyName);MyCopyright=$(MyCopyright);MyProductVersion=$(MyProductVersion);MyProductStage=$(MyProductStage);MyVersion=$(MyVersion);MyVersionWithCommas=$(MyVersionWithCommas)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">_UNICODE;UNICODE;%(PreprocessorDefinitions);MyProductName=$(MyProductName);MyDescription=$(MyDescription);MyCompanyName=$(MyCompanyName);MyCopyright=$(MyCopyright);MyProductVersion=$(MyProductVersion);MyProductStage=$(MyProductStage);MyVersion=$(MyVersion);MyVersionWithCommas=$(MyVersionWithCommas)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">_UNICODE;UNICODE;%(PreprocessorDefinitions);MyProductName=$(MyProductName);MyDescription=$(MyDescription);MyCompanyName=$(MyCompanyName);MyCopyright=$(MyCopyright);MyProductVersion=$(MyProductVersion);MyProductStage=$(MyProductStage);MyVersion=$(MyVersion);MyVersionWithCommas=$(MyVersionWithCommas)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
</ResourceCompile>
|
</ResourceCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<PropertyGroup Label="Globals">
|
<PropertyGroup Label="Globals">
|
||||||
@ -184,7 +222,7 @@ copy /b $(OutDir)fuse-$(PlatformTarget).pc + %(FullPath) $(OutDir)fuse-$(Platfor
|
|||||||
<MapFileName>$(OutDir)$(TargetFileName).map</MapFileName>
|
<MapFileName>$(OutDir)$(TargetFileName).map</MapFileName>
|
||||||
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
|
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
|
||||||
<ModuleDefinitionFile>..\..\src\dll\library.def</ModuleDefinitionFile>
|
<ModuleDefinitionFile>..\..\src\dll\library.def</ModuleDefinitionFile>
|
||||||
<AdditionalDependencies>%(AdditionalDependencies);rpcrt4.lib;credui.lib;version.lib</AdditionalDependencies>
|
<AdditionalDependencies>%(AdditionalDependencies);rpcrt4.lib;credui.lib;secur32.lib;version.lib</AdditionalDependencies>
|
||||||
<StripPrivateSymbols>$(OutDir)$(TargetFileName).public.pdb</StripPrivateSymbols>
|
<StripPrivateSymbols>$(OutDir)$(TargetFileName).public.pdb</StripPrivateSymbols>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
@ -212,7 +250,7 @@ copy /b $(OutDir)fuse-$(PlatformTarget).pc + %(FullPath) $(OutDir)fuse-$(Platfor
|
|||||||
<MapFileName>$(OutDir)$(TargetFileName).map</MapFileName>
|
<MapFileName>$(OutDir)$(TargetFileName).map</MapFileName>
|
||||||
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
|
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
|
||||||
<ModuleDefinitionFile>..\..\src\dll\library.def</ModuleDefinitionFile>
|
<ModuleDefinitionFile>..\..\src\dll\library.def</ModuleDefinitionFile>
|
||||||
<AdditionalDependencies>%(AdditionalDependencies);rpcrt4.lib;credui.lib;version.lib</AdditionalDependencies>
|
<AdditionalDependencies>%(AdditionalDependencies);rpcrt4.lib;credui.lib;secur32.lib;version.lib</AdditionalDependencies>
|
||||||
<StripPrivateSymbols>$(OutDir)$(TargetFileName).public.pdb</StripPrivateSymbols>
|
<StripPrivateSymbols>$(OutDir)$(TargetFileName).public.pdb</StripPrivateSymbols>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
@ -243,7 +281,7 @@ copy /b $(OutDir)fuse-$(PlatformTarget).pc + %(FullPath) $(OutDir)fuse-$(Platfor
|
|||||||
<MapFileName>$(OutDir)$(TargetFileName).map</MapFileName>
|
<MapFileName>$(OutDir)$(TargetFileName).map</MapFileName>
|
||||||
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
|
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
|
||||||
<ModuleDefinitionFile>..\..\src\dll\library.def</ModuleDefinitionFile>
|
<ModuleDefinitionFile>..\..\src\dll\library.def</ModuleDefinitionFile>
|
||||||
<AdditionalDependencies>%(AdditionalDependencies);rpcrt4.lib;credui.lib;version.lib</AdditionalDependencies>
|
<AdditionalDependencies>%(AdditionalDependencies);rpcrt4.lib;credui.lib;secur32.lib;version.lib</AdditionalDependencies>
|
||||||
<StripPrivateSymbols>$(OutDir)$(TargetFileName).public.pdb</StripPrivateSymbols>
|
<StripPrivateSymbols>$(OutDir)$(TargetFileName).public.pdb</StripPrivateSymbols>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
@ -274,7 +312,7 @@ copy /b $(OutDir)fuse-$(PlatformTarget).pc + %(FullPath) $(OutDir)fuse-$(Platfor
|
|||||||
<MapFileName>$(OutDir)$(TargetFileName).map</MapFileName>
|
<MapFileName>$(OutDir)$(TargetFileName).map</MapFileName>
|
||||||
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
|
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
|
||||||
<ModuleDefinitionFile>..\..\src\dll\library.def</ModuleDefinitionFile>
|
<ModuleDefinitionFile>..\..\src\dll\library.def</ModuleDefinitionFile>
|
||||||
<AdditionalDependencies>%(AdditionalDependencies);rpcrt4.lib;credui.lib;version.lib</AdditionalDependencies>
|
<AdditionalDependencies>%(AdditionalDependencies);rpcrt4.lib;credui.lib;secur32.lib;version.lib</AdditionalDependencies>
|
||||||
<StripPrivateSymbols>$(OutDir)$(TargetFileName).public.pdb</StripPrivateSymbols>
|
<StripPrivateSymbols>$(OutDir)$(TargetFileName).public.pdb</StripPrivateSymbols>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
|
@ -21,6 +21,12 @@
|
|||||||
<Filter Include="Source\fuse">
|
<Filter Include="Source\fuse">
|
||||||
<UniqueIdentifier>{518cce17-85cd-489c-b4be-920a84c1d73c}</UniqueIdentifier>
|
<UniqueIdentifier>{518cce17-85cd-489c-b4be-920a84c1d73c}</UniqueIdentifier>
|
||||||
</Filter>
|
</Filter>
|
||||||
|
<Filter Include="Include\fuse3">
|
||||||
|
<UniqueIdentifier>{12afd2f1-f5ec-4008-b6ef-89cc626019ea}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Source\fuse3">
|
||||||
|
<UniqueIdentifier>{96091a7b-3923-4a74-9491-3ee230c688f9}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\inc\winfsp\fsctl.h">
|
<ClInclude Include="..\..\inc\winfsp\fsctl.h">
|
||||||
@ -50,6 +56,27 @@
|
|||||||
<ClInclude Include="..\..\src\dll\fuse\library.h">
|
<ClInclude Include="..\..\src\dll\fuse\library.h">
|
||||||
<Filter>Source\fuse</Filter>
|
<Filter>Source\fuse</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\inc\winfsp\winfsp.hpp">
|
||||||
|
<Filter>Include\winfsp</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\inc\winfsp\launch.h">
|
||||||
|
<Filter>Include\winfsp</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\inc\fuse3\fuse.h">
|
||||||
|
<Filter>Include\fuse3</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\inc\fuse3\fuse_common.h">
|
||||||
|
<Filter>Include\fuse3</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\inc\fuse3\fuse_opt.h">
|
||||||
|
<Filter>Include\fuse3</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\inc\fuse3\winfsp_fuse.h">
|
||||||
|
<Filter>Include\fuse3</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\src\dll\fuse3\library.h">
|
||||||
|
<Filter>Source\fuse3</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="..\..\src\dll\library.c">
|
<ClCompile Include="..\..\src\dll\library.c">
|
||||||
@ -103,6 +130,30 @@
|
|||||||
<ClCompile Include="..\..\src\dll\fuse\fuse_intf.c">
|
<ClCompile Include="..\..\src\dll\fuse\fuse_intf.c">
|
||||||
<Filter>Source\fuse</Filter>
|
<Filter>Source\fuse</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\src\dll\dirbuf.c">
|
||||||
|
<Filter>Source</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\src\dll\fuse\fuse_compat.c">
|
||||||
|
<Filter>Source\fuse</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\src\dll\wksid.c">
|
||||||
|
<Filter>Source</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\src\dll\launch.c">
|
||||||
|
<Filter>Source</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\src\dll\fuse3\fuse3.c">
|
||||||
|
<Filter>Source\fuse3</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\src\dll\fuse3\fuse2to3.c">
|
||||||
|
<Filter>Source\fuse3</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\src\dll\fuse\fuse_loop.c">
|
||||||
|
<Filter>Source\fuse</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\src\dll\fuse3\fuse3_compat.c">
|
||||||
|
<Filter>Source\fuse3</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="..\..\src\dll\library.def">
|
<None Include="..\..\src\dll\library.def">
|
||||||
@ -118,8 +169,11 @@
|
|||||||
</ResourceCompile>
|
</ResourceCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<CustomBuild Include="..\..\src\dll\fuse\fuse.pc">
|
<CustomBuild Include="..\..\src\dll\fuse\fuse.pc.in">
|
||||||
<Filter>Source\fuse</Filter>
|
<Filter>Source\fuse</Filter>
|
||||||
</CustomBuild>
|
</CustomBuild>
|
||||||
|
<CustomBuild Include="..\..\src\dll\fuse3\fuse3.pc.in">
|
||||||
|
<Filter>Source\fuse3</Filter>
|
||||||
|
</CustomBuild>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
@ -173,10 +173,13 @@
|
|||||||
<ClCompile Include="..\..\src\sys\ioq.c" />
|
<ClCompile Include="..\..\src\sys\ioq.c" />
|
||||||
<ClCompile Include="..\..\src\sys\lockctl.c" />
|
<ClCompile Include="..\..\src\sys\lockctl.c" />
|
||||||
<ClCompile Include="..\..\src\sys\meta.c" />
|
<ClCompile Include="..\..\src\sys\meta.c" />
|
||||||
|
<ClCompile Include="..\..\src\sys\mup.c" />
|
||||||
<ClCompile Include="..\..\src\sys\name.c" />
|
<ClCompile Include="..\..\src\sys\name.c" />
|
||||||
|
<ClCompile Include="..\..\src\sys\psbuffer.c" />
|
||||||
<ClCompile Include="..\..\src\sys\read.c" />
|
<ClCompile Include="..\..\src\sys\read.c" />
|
||||||
<ClCompile Include="..\..\src\sys\security.c" />
|
<ClCompile Include="..\..\src\sys\security.c" />
|
||||||
<ClCompile Include="..\..\src\sys\shutdown.c" />
|
<ClCompile Include="..\..\src\sys\shutdown.c" />
|
||||||
|
<ClCompile Include="..\..\src\sys\statistics.c" />
|
||||||
<ClCompile Include="..\..\src\sys\util.c" />
|
<ClCompile Include="..\..\src\sys\util.c" />
|
||||||
<ClCompile Include="..\..\src\sys\volinfo.c" />
|
<ClCompile Include="..\..\src\sys\volinfo.c" />
|
||||||
<ClCompile Include="..\..\src\sys\volume.c" />
|
<ClCompile Include="..\..\src\sys\volume.c" />
|
||||||
@ -189,12 +192,77 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ResourceCompile Include="..\..\src\sys\version.rc">
|
<ResourceCompile Include="..\..\src\sys\version.rc">
|
||||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_X86_=1;i386=1;STD_CALL;%(PreprocessorDefinitions);MyProductName=$(MyProductName);MyDescription=$(MyDescription);MyCompanyName=$(MyCompanyName);MyCopyright=$(MyCopyright);MyProductVersion=$(MyProductVersion);MyProductStage=$(MyProductStage);MyVersion=$(MyVersion);MyVersionWithCommas=$(MyVersionWithCommas)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_X86_=1;i386=1;STD_CALL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_X86_=1;i386=1;STD_CALL;%(PreprocessorDefinitions);MyProductName=$(MyProductName);MyDescription=$(MyDescription);MyCompanyName=$(MyCompanyName);MyCopyright=$(MyCopyright);MyProductVersion=$(MyProductVersion);MyProductStage=$(MyProductStage);MyVersion=$(MyVersion);MyVersionWithCommas=$(MyVersionWithCommas)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_X86_=1;i386=1;STD_CALL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">_WIN64;_AMD64_=1;AMD64;%(PreprocessorDefinitions);MyProductName=$(MyProductName);MyDescription=$(MyDescription);MyCompanyName=$(MyCompanyName);MyCopyright=$(MyCopyright);MyProductVersion=$(MyProductVersion);MyProductStage=$(MyProductStage);MyVersion=$(MyVersion);MyVersionWithCommas=$(MyVersionWithCommas)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">_WIN64;_AMD64_=1;AMD64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">_WIN64;_AMD64_=1;AMD64;%(PreprocessorDefinitions);MyProductName=$(MyProductName);MyDescription=$(MyDescription);MyCompanyName=$(MyCompanyName);MyCopyright=$(MyCopyright);MyProductVersion=$(MyProductVersion);MyProductStage=$(MyProductStage);MyVersion=$(MyVersion);MyVersionWithCommas=$(MyVersionWithCommas)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">_WIN64;_AMD64_=1;AMD64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
</ResourceCompile>
|
</ResourceCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<CustomBuild Include="..\..\src\sys\driver.inf.in">
|
||||||
|
<FileType>Document</FileType>
|
||||||
|
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">set DriverFile=$(TargetFileName)
|
||||||
|
set Provider="$(MyCompanyName)"
|
||||||
|
set CatalogFile=driver-$(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" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
|
@ -95,6 +95,15 @@
|
|||||||
<ClCompile Include="..\..\src\sys\name.c">
|
<ClCompile Include="..\..\src\sys\name.c">
|
||||||
<Filter>Source</Filter>
|
<Filter>Source</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\src\sys\statistics.c">
|
||||||
|
<Filter>Source</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\src\sys\psbuffer.c">
|
||||||
|
<Filter>Source</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\src\sys\mup.c">
|
||||||
|
<Filter>Source</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\src\sys\driver.h">
|
<ClInclude Include="..\..\src\sys\driver.h">
|
||||||
@ -109,4 +118,9 @@
|
|||||||
<Filter>Source</Filter>
|
<Filter>Source</Filter>
|
||||||
</ResourceCompile>
|
</ResourceCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<CustomBuild Include="..\..\src\sys\driver.inf.in">
|
||||||
|
<Filter>Source</Filter>
|
||||||
|
</CustomBuild>
|
||||||
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
4
build/choco/LICENSE.txt
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
From: https://github.com/billziss-gh/winfsp/blob/master/License.txt
|
||||||
|
|
||||||
|
LICENSE
|
||||||
|
|
15
build/choco/VERIFICATION.txt
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
VERIFICATION
|
||||||
|
Verification is intended to assist the Chocolatey moderators and community
|
||||||
|
in verifying that this package's contents are trustworthy.
|
||||||
|
|
||||||
|
WinFsp GitHub repository: https://github.com/billziss-gh/winfsp
|
||||||
|
WinFsp MSI releases : https://github.com/billziss-gh/winfsp/releases
|
||||||
|
|
||||||
|
You may use the Windows certutil utility to confirm the hash of the MSI
|
||||||
|
included in this package against the WinFsp MSI release of the same version.
|
||||||
|
For example, for WinFsp version 1.0.17072 the command line to use is:
|
||||||
|
|
||||||
|
certutil -hashfile winfsp-1.0.17072.msi SHA256
|
||||||
|
|
||||||
|
The certutil output of the MSI in this package is included below.
|
||||||
|
|
36
build/choco/chocolateyHelper.ps1
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
$ErrorActionPreference = 'Stop';
|
||||||
|
|
||||||
|
$packageName = 'winfsp'
|
||||||
|
$softwareName = 'WinFsp*'
|
||||||
|
$installerType = 'msi'
|
||||||
|
$silentArgs = '/qn /norestart'
|
||||||
|
$validExitCodes = @(0, 3010, 1605, 1614, 1641)
|
||||||
|
|
||||||
|
[array]$key = Get-UninstallRegistryKey -SoftwareName $softwareName
|
||||||
|
|
||||||
|
if ($key.Count -eq 1) {
|
||||||
|
$key | % {
|
||||||
|
# The Product Code GUID is all that should be passed for MSI, and very
|
||||||
|
# FIRST, because it comes directly after /x, which is already set in the
|
||||||
|
# Uninstall-ChocolateyPackage msiargs (facepalm).
|
||||||
|
$silentArgs = "$($_.PSChildName) $silentArgs"
|
||||||
|
|
||||||
|
# Don't pass anything for file, it is ignored for msi (facepalm number 2)
|
||||||
|
# Alternatively if you need to pass a path to an msi, determine that and
|
||||||
|
# use it instead of the above in silentArgs, still very first
|
||||||
|
$file = ''
|
||||||
|
|
||||||
|
Uninstall-ChocolateyPackage `
|
||||||
|
-PackageName $packageName `
|
||||||
|
-FileType $installerType `
|
||||||
|
-SilentArgs "$silentArgs" `
|
||||||
|
-ValidExitCodes $validExitCodes `
|
||||||
|
-File "$file"
|
||||||
|
}
|
||||||
|
} elseif ($key.Count -eq 0) {
|
||||||
|
# Write-Warning "$packageName is not installed"
|
||||||
|
} elseif ($key.Count -gt 1) {
|
||||||
|
Write-Warning "Too many matching packages found! Package may not be uninstalled."
|
||||||
|
Write-Warning "Please alert package maintainer the following packages were matched:"
|
||||||
|
$key | % {Write-Warning "- $_"}
|
||||||
|
}
|
14
build/choco/chocolateyInstall.ps1
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
$ErrorActionPreference = 'Stop';
|
||||||
|
|
||||||
|
$toolsDir = "$(Split-Path -parent $MyInvocation.MyCommand.Definition)"
|
||||||
|
. "$toolsdir\chocolateyHelper.ps1"
|
||||||
|
|
||||||
|
$packageArgs = @{
|
||||||
|
packageName = 'winfsp'
|
||||||
|
fileType = 'msi'
|
||||||
|
file = @(Get-ChildItem $toolsDir -filter winfsp-*.msi)[0].FullName
|
||||||
|
silentArgs = "/qn /norestart INSTALLLEVEL=1000"
|
||||||
|
validExitCodes = @(0, 3010, 1641)
|
||||||
|
}
|
||||||
|
Install-ChocolateyInstallPackage @packageArgs
|
||||||
|
Remove-Item -Force $packageArgs.file
|
4
build/choco/chocolateyUninstall.ps1
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
$ErrorActionPreference = 'Stop';
|
||||||
|
|
||||||
|
$toolsDir = "$(Split-Path -parent $MyInvocation.MyCommand.Definition)"
|
||||||
|
. "$toolsdir\chocolateyHelper.ps1"
|
57
build/choco/winfsp.nuspec
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<package xmlns="http://schemas.microsoft.com/packaging/2015/06/nuspec.xsd">
|
||||||
|
<metadata>
|
||||||
|
<id>winfsp</id>
|
||||||
|
<version>$version$</version>
|
||||||
|
<packageSourceUrl>https://github.com/billziss-gh/winfsp/tree/master/build/choco</packageSourceUrl>
|
||||||
|
<owners>Bill Zissimopoulos</owners>
|
||||||
|
|
||||||
|
<title>WinFsp</title>
|
||||||
|
<authors>Bill Zissimopoulos</authors>
|
||||||
|
<projectUrl>https://github.com/billziss-gh/winfsp</projectUrl>
|
||||||
|
<iconUrl>https://github.com/billziss-gh/winfsp/raw/master/art/winfsp-solid.png</iconUrl>
|
||||||
|
<copyright>Bill Zissimopoulos</copyright>
|
||||||
|
<licenseUrl>https://github.com/billziss-gh/winfsp/blob/master/License.txt</licenseUrl>
|
||||||
|
<requireLicenseAcceptance>false</requireLicenseAcceptance>
|
||||||
|
<projectSourceUrl>https://github.com/billziss-gh/winfsp</projectSourceUrl>
|
||||||
|
<docsUrl>https://github.com/billziss-gh/winfsp/tree/master/doc</docsUrl>
|
||||||
|
<mailingListUrl>https://groups.google.com/forum/#!forum/winfsp</mailingListUrl>
|
||||||
|
<bugTrackerUrl>https://github.com/billziss-gh/winfsp/issues</bugTrackerUrl>
|
||||||
|
<tags>driver filesystem fuse gplv3 windows-kernel admin</tags>
|
||||||
|
<summary>Windows File System Proxy - FUSE for Windows</summary>
|
||||||
|
<description>
|
||||||
|
WinFsp is a set of software components for Windows computers that allows the creation of user mode file systems. In this sense it is similar to FUSE (Filesystem in Userspace), which provides the same functionality on UNIX-like computers.
|
||||||
|
|
||||||
|
Some of the benefits of using WinFsp are listed below:
|
||||||
|
|
||||||
|
* Very well-tested and stable.
|
||||||
|
* Very fast.
|
||||||
|
* Strives for compatibility with NTFS.
|
||||||
|
* Easy to understand but comprehensive API.
|
||||||
|
* FUSE compatibility layer for native Windows and Cygwin.
|
||||||
|
* Signed drivers provided on every release.
|
||||||
|
* Available under the GPLv3 license with a special exception for Free/Libre and Open Source Software.
|
||||||
|
|
||||||
|
To verify installation:
|
||||||
|
|
||||||
|
* For 64-bit Windows: `net use m: \\memfs64\share` from the command prompt.
|
||||||
|
* For 32-bit Windows: `net use m: \\memfs32\share`
|
||||||
|
* For Cygwin: `net use m: '\\memfs64\share'`
|
||||||
|
* To delete the drive: `net use m: /delete`
|
||||||
|
</description>
|
||||||
|
<releaseNotes>https://github.com/billziss-gh/winfsp/blob/master/Changelog.asciidoc</releaseNotes>
|
||||||
|
|
||||||
|
<!--<dependencies>
|
||||||
|
<dependency id="chocolatey-uninstall.extension" />
|
||||||
|
</dependencies>-->
|
||||||
|
</metadata>
|
||||||
|
|
||||||
|
<files>
|
||||||
|
<file src="LICENSE.txt" target="tools" />
|
||||||
|
<file src="VERIFICATION.txt" target="tools" />
|
||||||
|
<file src="chocolateyInstall.ps1" target="tools" />
|
||||||
|
<file src="chocolateyUninstall.ps1" target="tools" />
|
||||||
|
<file src="chocolateyHelper.ps1" target="tools" />
|
||||||
|
<file src="winfsp-$version$.msi" target="tools" />
|
||||||
|
</files>
|
||||||
|
</package>
|
72
doc/Frequently-Asked-Questions.asciidoc
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
= Frequently Asked Questions
|
||||||
|
|
||||||
|
== General
|
||||||
|
|
||||||
|
[qanda]
|
||||||
|
|
||||||
|
I am running Windows 7 and I am finding that the installed driver is not signed.::
|
||||||
|
|
||||||
|
Your Windows 7 OS is missing SHA-2 Code Signing Support. You need to install the following security advisory that will rectify the problem:
|
||||||
|
https://technet.microsoft.com/en-us/library/security/3033929.aspx
|
||||||
|
|
||||||
|
|
||||||
|
Disconnecting (unmapping) a network drive does not work.::
|
||||||
|
|
||||||
|
You may have Dokany installed. Dokany installs its own Network Provider DLL that unfortunately interferes with the WinFsp handling of network drives. The solution is to change your system's Network Provider order and ensure that the WinFsp Network Provider runs before the Dokany one. Instructions on how to change the Network Provider order can be found in this http://blogs.interfacett.com/changing-the-network-provider-order-in-windows-10[article].
|
||||||
|
|
||||||
|
|
||||||
|
Case-sensitive file systems do not work properly when mounted as a directory.::
|
||||||
|
|
||||||
|
This is fixed as of WinFsp 2018.2 B3.
|
||||||
|
+
|
||||||
|
Windows and WinFsp support case-sensitive file systems. These file systems work properly when mounted as a drive. Unfortunately when a file system is mounted as a directory over NTFS, Windows expects it to be case-insensitive and will UPPERCASE many of the file names sent to the file system.
|
||||||
|
+
|
||||||
|
This is an unfortunate but well understood Windows limitation. Case-sensitive file systems should only be mounted as drives.
|
||||||
|
|
||||||
|
|
||||||
|
Why is the DLL not installed in the Windows system directories?::
|
||||||
|
|
||||||
|
It is true that this would make it convenient to load the DLL, because the Windows loader looks into the Windows system directories when it loads DLL's. However, in the opinion of the WinFsp author, software that does not ship with the OS should not be installing components in the system directories.
|
||||||
|
+
|
||||||
|
There are a few alternative methods to overcome this problem. WinFsp recommends marking the WinFsp DLL as "delay load" and then using `FspLoad` to dynamically load the DLL during process initialization. For more information see the WinFsp Tutorial.
|
||||||
|
|
||||||
|
|
||||||
|
Does WinFsp provide debugging symbols?::
|
||||||
|
|
||||||
|
Public debugging symbols are already included in the installer. You need to install the "Developer" feature; the symbols can be found in the `sym` directory under the WinFsp installation directory.
|
||||||
|
|
||||||
|
|
||||||
|
Is there a maximum number of concurrent file systems?::
|
||||||
|
|
||||||
|
WinFsp does not have a hard limit of how many file systems can be created or how many processes can create file systems.
|
||||||
|
+
|
||||||
|
As of the commits required to fix issue #55, there is however a hash table inside the FSD that uses PID's (Process ID's) as keys. This hash table currently expects that in general there will not be more than 50 processes creating file systems. However this is not a hard limit.
|
||||||
|
|
||||||
|
|
||||||
|
== FUSE
|
||||||
|
|
||||||
|
[qanda]
|
||||||
|
|
||||||
|
Which version of FUSE does WinFsp-FUSE support?::
|
||||||
|
|
||||||
|
It supports both the FUSE 2.8 and FUSE 3.2 API's. For the FUSE 2.8 API include `<fuse/fuse.h>`. For the FUSE 3.2 API include `<fuse3/fuse.h>`.
|
||||||
|
|
||||||
|
|
||||||
|
FUSE on UNIX systems mounts file systems over an existing directory. When mounting a WinFsp-FUSE file system on a directory, the directory is created and later deleted when the file system goes away. What is the reason for this incompatibility?::
|
||||||
|
|
||||||
|
It would be preferrable if WinFsp-FUSE behaved like FUSE on UNIX in this instance. However there are a number of reasons that this is not the case.
|
||||||
|
+
|
||||||
|
When mounting over directories in Windows, WinFsp-FUSE uses a special construct called a reparse point. Reparse points are a general mechanism for adding special behavior to files and directories. One of the possible reparse points is the "mountpoint" reparse point (often called "junction"), which converts a directory into a mount point.
|
||||||
|
+
|
||||||
|
With this in mind here are the reasons for the current WinFsp-FUSE behavior:
|
||||||
|
+
|
||||||
|
- Symmetry with mounting on a drive. On Windows drives are created when the file system comes into existence and deleted when it is gone.
|
||||||
|
- Inability to mount over a non-empty directory on Windows. On FUSE/UNIX this is possible, but not on Windows because NTFS disallows the creation of (mountpoint) reparse points on non-empty directories.
|
||||||
|
- Most importantly: inability to guarantee that the mount point will cease to exist if the file system crashes. WinFsp attempts to guarantee that all resources used by a file system will get cleaned up. This is certainly true for the kernel-mode FSD, but an attempt is made to do so also in user mode. For this reason, drive symbolic links are marked as temporary and (importantly for our discussion) mount directories are opened with `FILE_FLAG_DELETE_ON_CLOSE`. There is no way to guarantee the removal of a reparse point in the same way.
|
||||||
|
|
||||||
|
|
||||||
|
WinFsp-FUSE does not have the ability to support multiple file systems from within the same process. Why?::
|
||||||
|
|
||||||
|
This is supported as of WinFsp 2018.2 B2.
|
||||||
|
+
|
||||||
|
The core WinFsp layer always supported multiple file systems in the same process either simultaneously or one after another. However this was not the case with WinFsp-FUSE (i.e. the FUSE layer of WinFsp) prior to version 2018.2 B2. This limitation has been rectified as of WinFsp 2018.2 B2.
|
33
doc/Home.md
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
# WinFsp - Windows File System Proxy
|
||||||
|
|
||||||
|
[[WinFsp-Icon.png]]
|
||||||
|
|
||||||
|
Developing file systems is a challenging proposition. Developing file systems for Windows is an order of magnitude more difficult. WinFsp eases the task of writing a new file system for Windows. WinFsp file systems are user mode programs and they can be written in a variety of languages and frameworks.
|
||||||
|
|
||||||
|
The documentation available here discusses various aspects of WinFsp.
|
||||||
|
|
||||||
|
## Programming
|
||||||
|
|
||||||
|
- The [[Tutorial|WinFsp-Tutorial]] describes how to create a simple, but complete file system in C/C++.
|
||||||
|
- The [[API Reference|WinFsp-API-winfsp.h]] describes the native WinFsp API. This external [[link|http://www.secfs.net/winfsp/apiref/]] may be easier to browse for some people.
|
||||||
|
- There is also a FUSE compatibility layer for native Windows and Cygwin. See fuse.h in the source repository.
|
||||||
|
- This [[document|Native-API-vs-FUSE]] discusses the need for both a native API and FUSE and gives some pointers on which one to choose.
|
||||||
|
|
||||||
|
## Design
|
||||||
|
|
||||||
|
- The [[Design|WinFsp-Design]] document describes the high-level design of WinFsp.
|
||||||
|
- The [[IPC|WinFsp-as-an-IPC-Mechanism]] document offers insights into the WinFsp Inter-Process Communication mechanism.
|
||||||
|
- The [[Queued Events|Queued-Events]] document discusses a low-level synchronization primitive that is largely responsible for the excellent performance of the WinFsp IPC mechanism.
|
||||||
|
- The [[Service Architecture|WinFsp-Service-Architecture]] document discusses how to intergrate a file system into Windows as a service and the reasons to do so.
|
||||||
|
- The [[SSHFS Port Case Study|SSHFS-Port-Case-Study]] document chronicles the creation of the WinFsp-FUSE compatibility layer and the decisions that led to its design.
|
||||||
|
|
||||||
|
## Testing
|
||||||
|
|
||||||
|
- The [[Testing|WinFsp-Testing]] document discusses the WinFsp testing strategy and how WinFsp achieves correctness and stability.
|
||||||
|
- The [[Performance|WinFsp-Performance-Testing]] document compares WinFsp performance against other file systems.
|
||||||
|
|
||||||
|
## Compatibility
|
||||||
|
|
||||||
|
- The [[Compatibility|NTFS-Compatibility]] document discusses current WinFsp compatibility with NTFS.
|
||||||
|
|
||||||
|
WinFsp is available under the GPLv3 license with a special exception for Free/Libre and Open Source Software.
|
22
doc/Known-File-Systems.asciidoc
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
= Known File Systems and File System Libraries
|
||||||
|
|
||||||
|
This document contains a list of known file systems and file system libraries that run on WinFsp. Please contact the WinFsp project to have your file system solution added to this list.
|
||||||
|
|
||||||
|
== File Systems
|
||||||
|
|
||||||
|
- https://github.com/vgough/encfs[EncFS] - an Encrypted Filesystem for FUSE
|
||||||
|
- https://github.com/ihaveamac/fuse-3ds[fuse-3ds] - FUSE Filesystem Python scripts for Nintendo 3DS files
|
||||||
|
- https://github.com/FrKaram/KS2.Drive[KS2.Drive] - Mount a webDAV/AOS server as a local drive
|
||||||
|
- https://github.com/billziss-gh/nfs-win[nfs-win] - NFS for Windows
|
||||||
|
- https://github.com/ncw/rclone[rclone] - rsync for cloud storage
|
||||||
|
- https://github.com/hasse69/rar2fs[rar2fs] - FUSE file system for reading RAR archives
|
||||||
|
- https://github.com/billziss-gh/redditfs[redditfs] - ls -l /r/programming
|
||||||
|
- https://github.com/netheril96/securefs[securefs] - Filesystem in userspace (FUSE) with transparent authenticated encryption
|
||||||
|
- https://github.com/billziss-gh/sshfs-win[sshfs-win] - SSHFS for Windows
|
||||||
|
|
||||||
|
== File System Libraries
|
||||||
|
|
||||||
|
- https://github.com/billziss-gh/cgofuse[Go: cgofuse] - Cross-platform FUSE library for Go
|
||||||
|
- https://github.com/DuroSoft/fuse-bindings[Nodejs: fuse-bindings] - Fully maintained FUSE bindings for Node that aims to cover the entire FUSE api
|
||||||
|
- https://github.com/SerCeMan/jnr-fuse[Java: jnr-fuse] - FUSE implementation in Java using Java Native Runtime (JNR)
|
||||||
|
- https://github.com/billziss-gh/fusepy[Python: fusepy] - Simple ctypes bindings for FUSE
|
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.
|
105
doc/Queued-Events.asciidoc
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
= Queued Events - Windows kernel events with IOCP scheduling characteristics
|
||||||
|
|
||||||
|
In this article I am discussing _Queued Events_. _Queued Events_ are a Windows kernel synchronization mechanism that I invented for https://github.com/billziss-gh/winfsp[WinFsp - FUSE for Windows]. _Queued Events_ behave like kernel Synchronization Events (i.e. Win32 auto-reset events), but provide scheduling characteristics similar to those of I/O Completion Ports.
|
||||||
|
|
||||||
|
== The Problem
|
||||||
|
|
||||||
|
During the later stages of WinFsp development I decided to do some performance testing to understand its behavior and find opportunities for optimization. I found out that WinFsp performed very well in most tested scenarios, but there was one test that seemed to have bad performance for no particular reason.
|
||||||
|
|
||||||
|
I ended up profiling this issue using xperf (included in the https://docs.microsoft.com/en-us/windows-hardware/test/wpt/[Windows Performance Toolkit]), which allows for kernel-level profiling. I spent considerable time looking at the profiling results, but could identify no obvious issue with my code.
|
||||||
|
|
||||||
|
After a day or two of doing this and being stumped I finally had a lightbulb moment: what if the issue is not with my code, but with how the OS schedules threads? Sure enough I had xperf trace context switches and found that on good runs the OS would context switch my file system threads relatively rarely; on bad runs the OS would context switch my threads excessively.
|
||||||
|
|
||||||
|
After contemplating this issue I realized that this was happening because the OS was trying to schedule my threads in a "fair" manner. Windows in general tries to give every thread a chance to run. This can be counter-productive in server-like programs (such as file systems), where all server threads are equivalent and it is actually better to reuse the same thread (if possible) to avoid context switching and other negative effects.
|
||||||
|
|
||||||
|
== The Solution
|
||||||
|
|
||||||
|
One way of looking at WinFsp is as an IPC (Inter-Process Communication) mechanism. The Windows kernel packages file system operations (open, close, read, write) as IRP's (I/O Request Packets) which it sends to WinFsp. WinFsp places them in an _I/O Queue_; at a later time the threads in a user mode file system retrieve the IRP's from the _I/O Queue_ and service them.
|
||||||
|
|
||||||
|
The _I/O Queue_ had gone through multiple iterations, but at the time I was looking at this issue it was using Windows kernel Synchronization Event's (Win32 auto-reset events) for managing threads. The problem was that a wait on a Synchronization Event would be satisfied in a "fair" manner, thus resulting to excessive context switching and bad performance in some circumstances. I needed to find a way to convince Windows to schedule my threads in an "unfair" manner, giving preference to the same thread as much as possible.
|
||||||
|
|
||||||
|
I started considering different schemes where I would associate a different event per thread thus being able to wake up the "correct" thread myself and effectively writing my own mini-scheduler. Luckily I had another lightbulb moment: I/O completion ports already do this better than I would ever be able to!
|
||||||
|
|
||||||
|
The kernel portion of an I/O Completion Port is called a https://msdn.microsoft.com/en-us/library/windows/hardware/ff549547(v=vs.85).aspx[KQUEUE]. KQUEUE's are (unfortunately) not directly exposed to user mode, however they are at the core of the user mode I/O Completion Ports. KQUEUE's are the main reason I/O Completion Ports are so fast as they provide the following scheduling characteristics:
|
||||||
|
|
||||||
|
- They have a Last-In First-Out (LIFO) wait discipline.
|
||||||
|
- They limit the number of threads that can be satisfied concurrently.
|
||||||
|
|
||||||
|
I briefly considered the idea of building _I/O Queues_ directly on top of KQUEUE's, but soon dismissed this idea because _I/O Queues_ are not simple queues but provide additional services, such as IRP cancelation, IRP expiration, etc.
|
||||||
|
|
||||||
|
== Queued Events
|
||||||
|
|
||||||
|
In an ideal scenario I wanted to continue using my implementation of _I/O Queues_ which had undergone considerable testing and I knew it worked. But somehow I had to convince the Windows kernel to change the scheduling characteristics of Synchronization Events to mirror those of a KQUEUE.
|
||||||
|
|
||||||
|
Then I had lightbulb no 3: _Queued Events_ or how to make a queue behave like a Synchronization Event.
|
||||||
|
|
||||||
|
Here is how _Queued Events_ work. A _Queued Event_ consists of a KQUEUE and a spin lock. There is also a single dummy item that can be placed in the KQUEUE.
|
||||||
|
|
||||||
|
The KQUEUE is guaranteed to contain either 0 or 1 items. When the KQUEUE contains 0 items the _Queued Event_ is considered non-signaled. When the KQUEUE contains 1 items the _Queued Event_ is considered signaled.
|
||||||
|
|
||||||
|
ifdef::env-browser[]
|
||||||
|
[ditaa,file="Queued-Events/states.png"]
|
||||||
|
--
|
||||||
|
Non signaled Signaled
|
||||||
|
+---------------------------+ +---------------------------+
|
||||||
|
| Queued Event | | Queued Event |
|
||||||
|
+---------------------------+ +---------------------------+
|
||||||
|
| | | +---------+ |
|
||||||
|
| KQUEUE (empty) | | KQUEUE | DUMMY | |
|
||||||
|
| | | +---------+ |
|
||||||
|
+---------------------------+ +---------------------------+
|
||||||
|
--
|
||||||
|
endif::env-browser[]
|
||||||
|
ifndef::env-browser[image::Queued-Events/states.png[]]
|
||||||
|
|
||||||
|
To transition from the non-signaled to the signaled state, we acquire the spin lock and then insert the dummy item in the KQUEUE using https://msdn.microsoft.com/en-us/library/windows/hardware/ff549570(v=vs.85).aspx[KeInsertQueue]. To transition from the signaled to the non-signaled state, we simply (wait and) remove the dummy item from the KQUEUE using https://msdn.microsoft.com/en-us/library/windows/hardware/ff549605(v=vs.85).aspx[KeRemoveQueue] (without the use of the spin lock).
|
||||||
|
|
||||||
|
----
|
||||||
|
EventSet:
|
||||||
|
AcquireSpinLock
|
||||||
|
if (0 == KeReadState()) // if KQUEUE is empty
|
||||||
|
KeInsertQueue(DUMMY);
|
||||||
|
ReleaseSpinLock
|
||||||
|
|
||||||
|
EventWait:
|
||||||
|
KeRemoveQueue(); // (wait and) remove item
|
||||||
|
----
|
||||||
|
|
||||||
|
First notice that EventSet is serialized by the use of the spin lock. This guarantees that the dummy item can be only inserted ONCE in the KQUEUE and that the only possible signaled state transitions for EventSet are 0->1 and 1->1. This is how https://msdn.microsoft.com/en-us/library/windows/hardware/ff553253(v=vs.85).aspx[KeSetEvent] works for a Synchronization Event.
|
||||||
|
|
||||||
|
Second notice that EventWait is not protected by the spin lock, which means that it can happen at any time including concurrently with EventSet or another EventWait. Notice also that for EventWait the only possible transitions are 1->0 or 0->0 (0->block->0). This is how https://msdn.microsoft.com/en-us/library/windows/hardware/ff553350(v=vs.85).aspx[KeWaitForSingleObject] works for a Synchronization Event.
|
||||||
|
|
||||||
|
ifdef::env-browser[]
|
||||||
|
[ditaa,file="Queued-Events/transitions.png"]
|
||||||
|
--
|
||||||
|
Non signaled Signaled
|
||||||
|
+---------------------------+ +---------------------------+
|
||||||
|
| Queued Event | | Queued Event |
|
||||||
|
+---------------------------+ +---------------------------+
|
||||||
|
| | ---EventSet --> | +---------+ |
|
||||||
|
| KQUEUE (empty) | | KQUEUE | DUMMY | |
|
||||||
|
| | <--EventWait--- | +---------+ |
|
||||||
|
+---------------------------+ +---------------------------+
|
||||||
|
--
|
||||||
|
endif::env-browser[]
|
||||||
|
ifndef::env-browser[image::Queued-Events/transitions.png[]]
|
||||||
|
|
||||||
|
We now have to consider what happens when we have one EventSet concurrently with one or more EventWait's:
|
||||||
|
|
||||||
|
1. The EventWait(s) happen before https://msdn.microsoft.com/en-us/library/windows/hardware/ff549591(v=vs.85).aspx[KeReadState]. If the KQUEUE has an item one EventWait gets satisfied, otherwise it blocks. In this case KeReadState will read the KQUEUE's state as 0 and KeInsertQueue will insert the dummy item, which will unblock the EventWait.
|
||||||
|
2. The EventWait(s) happen after KeReadState, but before KeInsertQueue. If the dummy item was already in the KQUEUE the KeReadState test will fail and KeInsertQueue will not be executed, but EventWait will be satisfied immediately. If the dummy item was not in the KQUEUE the KeReadState will succeed and EventWait will momentarily block until KeInsertQueue releases it.
|
||||||
|
3. The EventWait(s) happen after KeInsertQueue. In this case the dummy item in is the KQUEUE already and one EventWait will be satisfied immediately.
|
||||||
|
|
||||||
|
NOTE: _Queued Events_ cannot cleanly support an EventClear operation. The obvious choice of using KeRemoveQueue with a 0 timeout is insufficient because it would associate the current thread with the KQUEUE and that is not desirable. KeRundownQueue cannot be used either because it disassociates all threads from the KQUEUE.
|
||||||
|
|
||||||
|
The complete implementation of _Queued Events_ within WinFsp can be found here: https://github.com/billziss-gh/winfsp/blob/v1.1/src/sys/driver.h#L655-L795
|
||||||
|
|
||||||
|
== Queued Events Scheduling Characteristics
|
||||||
|
|
||||||
|
Queued Events encapsulate KQUEUE's and therefore inherit their scheduling characteristics:
|
||||||
|
|
||||||
|
- They have a Last-In First-Out (LIFO) wait discipline.
|
||||||
|
- They limit the number of threads that can be satisfied concurrently.
|
||||||
|
|
||||||
|
These characteristics are desirable because they reduce the number of context switches thus speeding up the WinFsp IPC implementation. Performance testing immediately after the incorporation of _Queued Events_ into WinFsp showed significant performance improvements; profiling with xperf showed that context switches among file system threads were now a relatively rare event!
|
||||||
|
|
BIN
doc/Queued-Events/states.png
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
doc/Queued-Events/transitions.png
Normal file
After Width: | Height: | Size: 19 KiB |
263
doc/WinFsp-API-launch.h.asciidoc
Normal file
@ -0,0 +1,263 @@
|
|||||||
|
= winfsp/launch.h
|
||||||
|
:author: (C) 2015-2018 Bill Zissimopoulos
|
||||||
|
:toc: preamble
|
||||||
|
:toc-title:
|
||||||
|
|
||||||
|
WinFsp Launch API.
|
||||||
|
|
||||||
|
In order to use the WinFsp Launch API a program must include <winfsp/launch.h>
|
||||||
|
and link with the winfsp$$_$$x64.dll (or winfsp$$_$$x86.dll) library.
|
||||||
|
|
||||||
|
== Launch Control
|
||||||
|
|
||||||
|
=== Functions
|
||||||
|
|
||||||
|
*FspLaunchCallLauncherPipe* - Call launcher pipe.
|
||||||
|
|
||||||
|
[source,c]
|
||||||
|
----
|
||||||
|
FSP_API NTSTATUS FspLaunchCallLauncherPipe(
|
||||||
|
WCHAR Command,
|
||||||
|
ULONG Argc,
|
||||||
|
PWSTR *Argv,
|
||||||
|
ULONG *Argl,
|
||||||
|
PWSTR Buffer,
|
||||||
|
PULONG PSize,
|
||||||
|
PULONG PLauncherError);
|
||||||
|
----
|
||||||
|
|
||||||
|
*Parameters*
|
||||||
|
|
||||||
|
- _Command_ - Launcher command to send. For example, the 'L' launcher command instructs
|
||||||
|
the launcher to list all running service instances.
|
||||||
|
- _Argc_ - Command argument count. May be 0.
|
||||||
|
- _Argv_ - Command argument array. May be NULL.
|
||||||
|
- _Argl_ - Command argument length array. May be NULL. If this is NULL all command arguments
|
||||||
|
are assumed to be NULL-terminated strings. It is also possible for specific arguments
|
||||||
|
to be NULL-terminated; in this case pass -1 in the corresponding Argl position.
|
||||||
|
- _Buffer_ - Buffer that receives the command response. May be NULL.
|
||||||
|
- _PSize_ - Pointer to a ULONG. On input it contains the size of the Buffer. On output it
|
||||||
|
contains the number of bytes transferred. May be NULL.
|
||||||
|
- _PLauncherError_ - Receives the launcher error if any. This is always a Win32 error code. May not be NULL.
|
||||||
|
|
||||||
|
*Return Value*
|
||||||
|
|
||||||
|
STATUS$$_$$SUCCESS if the command is sent successfully to the launcher, even if the launcher
|
||||||
|
returns an error. Other status codes indicate a communication error. Launcher errors are
|
||||||
|
reported through PLauncherError.
|
||||||
|
|
||||||
|
*Discussion*
|
||||||
|
|
||||||
|
This function is used to send a command to the launcher and receive a response.
|
||||||
|
|
||||||
|
|
||||||
|
*FspLaunchGetInfo* - Get information about a service instance.
|
||||||
|
|
||||||
|
[source,c]
|
||||||
|
----
|
||||||
|
FSP_API NTSTATUS FspLaunchGetInfo(
|
||||||
|
PWSTR ClassName,
|
||||||
|
PWSTR InstanceName,
|
||||||
|
PWSTR Buffer,
|
||||||
|
PULONG PSize,
|
||||||
|
PULONG PLauncherError);
|
||||||
|
----
|
||||||
|
|
||||||
|
*Parameters*
|
||||||
|
|
||||||
|
- _ClassName_ - Class name of the service instance to stop.
|
||||||
|
- _InstanceName_ - Instance name of the service instance to stop.
|
||||||
|
- _Buffer_ - Buffer that receives the command response. May be NULL.
|
||||||
|
- _PSize_ - Pointer to a ULONG. On input it contains the size of the Buffer. On output it
|
||||||
|
contains the number of bytes transferred. May be NULL.
|
||||||
|
- _PLauncherError_ - Receives the launcher error if any. This is always a Win32 error code. May not be NULL.
|
||||||
|
|
||||||
|
*Return Value*
|
||||||
|
|
||||||
|
STATUS$$_$$SUCCESS if the command is sent successfully to the launcher, even if the launcher
|
||||||
|
returns an error. Other status codes indicate a communication error. Launcher errors are
|
||||||
|
reported through PLauncherError.
|
||||||
|
|
||||||
|
*Discussion*
|
||||||
|
|
||||||
|
The information is a list of NULL-terminated strings: the class name of the service instance,
|
||||||
|
the instance name of the service instance and the full command line used to start the service
|
||||||
|
instance.
|
||||||
|
|
||||||
|
|
||||||
|
*FspLaunchGetNameList* - List service instances.
|
||||||
|
|
||||||
|
[source,c]
|
||||||
|
----
|
||||||
|
FSP_API NTSTATUS FspLaunchGetNameList(
|
||||||
|
PWSTR Buffer,
|
||||||
|
PULONG PSize,
|
||||||
|
PULONG PLauncherError);
|
||||||
|
----
|
||||||
|
|
||||||
|
*Parameters*
|
||||||
|
|
||||||
|
- _Buffer_ - Buffer that receives the command response. May be NULL.
|
||||||
|
- _PSize_ - Pointer to a ULONG. On input it contains the size of the Buffer. On output it
|
||||||
|
contains the number of bytes transferred. May be NULL.
|
||||||
|
- _PLauncherError_ - Receives the launcher error if any. This is always a Win32 error code. May not be NULL.
|
||||||
|
|
||||||
|
*Return Value*
|
||||||
|
|
||||||
|
STATUS$$_$$SUCCESS if the command is sent successfully to the launcher, even if the launcher
|
||||||
|
returns an error. Other status codes indicate a communication error. Launcher errors are
|
||||||
|
reported through PLauncherError.
|
||||||
|
|
||||||
|
*Discussion*
|
||||||
|
|
||||||
|
The information is a list of pairs of NULL-terminated strings. Each pair contains the class
|
||||||
|
name and instance name of a service instance. All currently running service instances are
|
||||||
|
listed.
|
||||||
|
|
||||||
|
|
||||||
|
*FspLaunchStart* - Start a service instance.
|
||||||
|
|
||||||
|
[source,c]
|
||||||
|
----
|
||||||
|
FSP_API NTSTATUS FspLaunchStart(
|
||||||
|
PWSTR ClassName,
|
||||||
|
PWSTR InstanceName,
|
||||||
|
ULONG Argc,
|
||||||
|
PWSTR *Argv,
|
||||||
|
BOOLEAN HasSecret,
|
||||||
|
PULONG PLauncherError);
|
||||||
|
----
|
||||||
|
|
||||||
|
*Parameters*
|
||||||
|
|
||||||
|
- _ClassName_ - Class name of the service instance to start.
|
||||||
|
- _InstanceName_ - Instance name of the service instance to start.
|
||||||
|
- _Argc_ - Service instance argument count. May be 0.
|
||||||
|
- _Argv_ - Service instance argument array. May be NULL.
|
||||||
|
- _HasSecret_ - Whether the last argument in Argv is assumed to be a secret (e.g. password) or not.
|
||||||
|
Secrets are passed to service instances through standard input rather than the command
|
||||||
|
line.
|
||||||
|
- _PLauncherError_ - Receives the launcher error if any. This is always a Win32 error code. May not be NULL.
|
||||||
|
|
||||||
|
*Return Value*
|
||||||
|
|
||||||
|
STATUS$$_$$SUCCESS if the command is sent successfully to the launcher, even if the launcher
|
||||||
|
returns an error. Other status codes indicate a communication error. Launcher errors are
|
||||||
|
reported through PLauncherError.
|
||||||
|
|
||||||
|
|
||||||
|
*FspLaunchStop* - Stop a service instance.
|
||||||
|
|
||||||
|
[source,c]
|
||||||
|
----
|
||||||
|
FSP_API NTSTATUS FspLaunchStop(
|
||||||
|
PWSTR ClassName,
|
||||||
|
PWSTR InstanceName,
|
||||||
|
PULONG PLauncherError);
|
||||||
|
----
|
||||||
|
|
||||||
|
*Parameters*
|
||||||
|
|
||||||
|
- _ClassName_ - Class name of the service instance to stop.
|
||||||
|
- _InstanceName_ - Instance name of the service instance to stop.
|
||||||
|
- _PLauncherError_ - Receives the launcher error if any. This is always a Win32 error code. May not be NULL.
|
||||||
|
|
||||||
|
*Return Value*
|
||||||
|
|
||||||
|
STATUS$$_$$SUCCESS if the command is sent successfully to the launcher, even if the launcher
|
||||||
|
returns an error. Other status codes indicate a communication error. Launcher errors are
|
||||||
|
reported through PLauncherError.
|
||||||
|
|
||||||
|
|
||||||
|
== Service Registry
|
||||||
|
|
||||||
|
=== Functions
|
||||||
|
|
||||||
|
*FspLaunchRegFreeRecord* - Free a service registry record.
|
||||||
|
|
||||||
|
[source,c]
|
||||||
|
----
|
||||||
|
FSP_API VOID FspLaunchRegFreeRecord(
|
||||||
|
FSP_LAUNCH_REG_RECORD *Record);
|
||||||
|
----
|
||||||
|
|
||||||
|
*Parameters*
|
||||||
|
|
||||||
|
- _Record_ - The service record to free.
|
||||||
|
|
||||||
|
*See Also*
|
||||||
|
|
||||||
|
- FspLaunchRegGetRecord
|
||||||
|
|
||||||
|
|
||||||
|
*FspLaunchRegGetRecord* - Get a service registry record.
|
||||||
|
|
||||||
|
[source,c]
|
||||||
|
----
|
||||||
|
FSP_API NTSTATUS FspLaunchRegGetRecord(
|
||||||
|
PWSTR ClassName,
|
||||||
|
PWSTR Agent,
|
||||||
|
FSP_LAUNCH_REG_RECORD **PRecord);
|
||||||
|
----
|
||||||
|
|
||||||
|
*Parameters*
|
||||||
|
|
||||||
|
- _ClassName_ - The service class name.
|
||||||
|
- _Agent_ - The name of the agent that is retrieving the service record. This API matches
|
||||||
|
the supplied Agent against the Agent in the service record and it only returns
|
||||||
|
the record if they match. Pass NULL to match any Agent.
|
||||||
|
- _PRecord_ - Pointer to a record pointer. Memory for the service record will be allocated
|
||||||
|
and a pointer to it will be stored at this address. This memory must be later
|
||||||
|
freed using FspLaunchRegFreeRecord.
|
||||||
|
|
||||||
|
*Return Value*
|
||||||
|
|
||||||
|
STATUS$$_$$SUCCESS or error code.
|
||||||
|
|
||||||
|
*See Also*
|
||||||
|
|
||||||
|
- FspLaunchRegFreeRecord
|
||||||
|
|
||||||
|
|
||||||
|
*FspLaunchRegSetRecord* - Add/change/delete a service registry record.
|
||||||
|
|
||||||
|
[source,c]
|
||||||
|
----
|
||||||
|
FSP_API NTSTATUS FspLaunchRegSetRecord(
|
||||||
|
PWSTR ClassName,
|
||||||
|
const FSP_LAUNCH_REG_RECORD *Record);
|
||||||
|
----
|
||||||
|
|
||||||
|
*Parameters*
|
||||||
|
|
||||||
|
- _ClassName_ - The service class name.
|
||||||
|
- _Record_ - The record to set in the registry. If NULL, the registry record is deleted.
|
||||||
|
|
||||||
|
*Return Value*
|
||||||
|
|
||||||
|
STATUS$$_$$SUCCESS or error code.
|
||||||
|
|
||||||
|
|
||||||
|
=== Typedefs
|
||||||
|
|
||||||
|
*FSP$$_$$LAUNCH$$_$$REG$$_$$RECORD* - Service registry record.
|
||||||
|
|
||||||
|
[source,c]
|
||||||
|
----
|
||||||
|
typedef struct _FSP_LAUNCH_REG_RECORD {
|
||||||
|
PWSTR Agent;
|
||||||
|
PWSTR Executable;
|
||||||
|
PWSTR CommandLine;
|
||||||
|
PWSTR WorkDirectory;
|
||||||
|
PWSTR RunAs;
|
||||||
|
PWSTR Security;
|
||||||
|
PVOID Reserved0[6];
|
||||||
|
ULONG JobControl;
|
||||||
|
ULONG Credentials;
|
||||||
|
ULONG Reserved1[6];
|
||||||
|
UINT8 Buffer[];
|
||||||
|
} FSP_LAUNCH_REG_RECORD;
|
||||||
|
----
|
||||||
|
|
||||||
|
|
||||||
|
|
1839
doc/WinFsp-API-winfsp.h.asciidoc
Normal file
BIN
doc/WinFsp-Icon.png
Normal file
After Width: | Height: | Size: 3.8 KiB |
@ -20,23 +20,25 @@ 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:
|
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"
|
"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)"
|
"Security"="D:P(A;;RPWPLC;;;WD)"
|
||||||
"JobControl"=dword:00000001
|
"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"
|
"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)"
|
"Security"="D:P(A;;RPWPLC;;;WD)"
|
||||||
"JobControl"=dword:00000001
|
"JobControl"=dword:00000001
|
||||||
|
|
||||||
When the WinFsp.Launcher starts up it creates a named pipe that applications can use to start, stop, get information about and list service instances. A small command line utility (`launchctl`) can be used to issue those commands. The CallNamedPipeW API can be used as well.
|
When the WinFsp.Launcher starts up it creates a named pipe that applications can use to start, stop, get information about and list service instances. A small command line utility (`launchctl`) can be used to issue those commands. The `CallNamedPipeW` API can be used as well.
|
||||||
|
|
||||||
One final note regarding security. Notice the `Security` registry value in the example above. This registry value uses SDDL syntax to instruct WinFsp.Launcher to allow Everyone (`WD`) to start (`RP`), stop (`WP`) and get information (`LC`) about the service instance. If the `Security` registry value is missing the default is to allow only LocalSystem and Administrators to control the service instance.
|
One final note regarding security. Notice the `Security` registry value in the example above. This registry value uses SDDL syntax to instruct WinFsp.Launcher to allow Everyone (`WD`) to start (`RP`), stop (`WP`) and get information (`LC`) about the service instance. If the `Security` registry value is missing the default is to allow only LocalSystem and Administrators to control the service instance.
|
||||||
|
|
||||||
@ -44,4 +46,14 @@ 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.
|
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.
|
||||||
|
|
||||||
|
== File System Credential Support
|
||||||
|
|
||||||
|
Some file systems require credentials in order to allow access and be mounted. Such file systems must add a registry value `Credentials`:
|
||||||
|
|
||||||
|
"Credentials"=dword:00000001
|
||||||
|
|
||||||
|
This will instruct the WinFsp Network Provider to request a password from the user prior to starting the file system. This password will then be securely passed to the WinFsp Launcher which in turn will pass it to the user mode file system on its standard input. The user mode file system must respond `OK` if the password is correct and allows access to the user mode file system. Any other response from the user mode file system (including a timeout without a response) is interpreted as an authentication failure.
|
||||||
|
|
||||||
|
NOTE: During password entry the user may also choose to "remember" the password in which case it will be saved in the Windows Credential Manager.
|
@ -16,17 +16,21 @@ WinFsp currently has the following test suites:
|
|||||||
+
|
+
|
||||||
This test suite is developed together with WinFsp. It is written in C/C++ and provides a form of gray box testing.
|
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 a file system test suite that was originally developed for the secfs.test collection of file system test programs by the WinFsp author. However none of its tests are WinFsp specific and all its tests pass on NTFS. Winfstest is used for testing by other Windows file systems.
|
- *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. It provides a form of black box testing.
|
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.
|
||||||
|
|
||||||
- *FSX*: This is Apple's FSX ported to Windows by the WinFsp author. This FSX port is not WinFsp specific and is used for testing by other Windows file systems.
|
- *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.
|
- *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 WinFsp specific and is developed together with WinFsp. It is written in C/C++.
|
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 is not WinFsp specific.
|
- *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.
|
This tool is currently developed together with WinFsp. It is written in C.
|
||||||
|
|
||||||
@ -34,7 +38,7 @@ These test suites and a few smaller tests are run through Continuous Integration
|
|||||||
|
|
||||||
=== Test File System
|
=== 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 attempts to achieve parity with NTFS (barring a few WinFsp limitations -- notably no support for hard links). MEMFS also performs some user mode file system checks during testing, for example, it checks that the buffer received during WRITE calls is read-only.
|
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
|
== Tested Scenarios
|
||||||
|
|
||||||
@ -91,6 +95,12 @@ if (!Success)
|
|||||||
|
|
||||||
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.
|
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.
|
||||||
|
|
||||||
|
== NTFS 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
|
== 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.
|
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.
|
||||||
@ -113,6 +123,12 @@ The goal of performance testing is to evaluate and understand how software behav
|
|||||||
|
|
||||||
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.
|
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.
|
||||||
|
|
||||||
|
== Backwards Compatibility testing
|
||||||
|
|
||||||
|
As the WinFsp API's mature it is important to verify that they remain backwards compatible with existing file system binaries. For this purpose binaries that have been compiled against earlier versions of WinFsp are used to verify that they run correctly against the latest version.
|
||||||
|
|
||||||
|
For example, in version v1.2B3 of WinFsp an +FSP_FUSE_CAP_STAT_EX+ FUSE extension was introduced. This can change the layout of +struct fuse_stat+ and is therefore a potentially dangerous change. To test against inadvertent breakage a FUSE file system binary that was compiled against v1.2B2 is regularly used to verify backwards compatibility.
|
||||||
|
|
||||||
== Code Analysis
|
== Code Analysis
|
||||||
|
|
||||||
WinFsp is regularly run under the Visual Studio's Code Analyzer. Any issues found are examined and if necessary acted upon.
|
WinFsp is regularly run under the Visual Studio's Code Analyzer. Any issues found are examined and if necessary acted upon.
|
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 |
2
ext/test
@ -1,2 +1,2 @@
|
|||||||
Taken from secfs.core/src/tlib codebase:
|
Taken from secfs.core/src/tlib codebase:
|
||||||
commit 16296d2ac64a7d532b1c486dd3c44af5865d4851
|
commit 16296d2ac64a7d532b1c486dd3c44af5865d4851
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/**
|
/**
|
||||||
* @file tlib/callstack.c
|
* @file tlib/callstack.c
|
||||||
*
|
*
|
||||||
* @copyright 2014-2015 Bill Zissimopoulos
|
* @copyright 2014-2018 Bill Zissimopoulos
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <tlib/callstack.h>
|
#include <tlib/callstack.h>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/**
|
/**
|
||||||
* @file tlib/callstack.h
|
* @file tlib/callstack.h
|
||||||
*
|
*
|
||||||
* @copyright 2014-2015 Bill Zissimopoulos
|
* @copyright 2014-2018 Bill Zissimopoulos
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef TLIB_CALLSTACK_H_INCLUDED
|
#ifndef TLIB_CALLSTACK_H_INCLUDED
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/**
|
/**
|
||||||
* @file tlib/injected/allfunc.h
|
* @file tlib/injected/allfunc.h
|
||||||
*
|
*
|
||||||
* @copyright 2014-2015 Bill Zissimopoulos
|
* @copyright 2014-2018 Bill Zissimopoulos
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef TLIB_INJECTED_ALLFUNC_H_INCLUDED
|
#ifndef TLIB_INJECTED_ALLFUNC_H_INCLUDED
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/**
|
/**
|
||||||
* @file tlib/injected/curlfunc.c
|
* @file tlib/injected/curlfunc.c
|
||||||
*
|
*
|
||||||
* @copyright 2014-2015 Bill Zissimopoulos
|
* @copyright 2014-2018 Bill Zissimopoulos
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <tlib/injected/curlfunc.h>
|
#include <tlib/injected/curlfunc.h>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/**
|
/**
|
||||||
* @file tlib/injected/curlfunc.h
|
* @file tlib/injected/curlfunc.h
|
||||||
*
|
*
|
||||||
* @copyright 2014-2015 Bill Zissimopoulos
|
* @copyright 2014-2018 Bill Zissimopoulos
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef TLIB_INJECTED_CURLFUNC_H_INCLUDED
|
#ifndef TLIB_INJECTED_CURLFUNC_H_INCLUDED
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/**
|
/**
|
||||||
* @file tlib/injected/stdfunc.c
|
* @file tlib/injected/stdfunc.c
|
||||||
*
|
*
|
||||||
* @copyright 2014-2015 Bill Zissimopoulos
|
* @copyright 2014-2018 Bill Zissimopoulos
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <tlib/injected/stdfunc.h>
|
#include <tlib/injected/stdfunc.h>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/**
|
/**
|
||||||
* @file tlib/injected/stdfunc.h
|
* @file tlib/injected/stdfunc.h
|
||||||
*
|
*
|
||||||
* @copyright 2014-2015 Bill Zissimopoulos
|
* @copyright 2014-2018 Bill Zissimopoulos
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef TLIB_INJECTED_STDFUNC_H_INCLUDED
|
#ifndef TLIB_INJECTED_STDFUNC_H_INCLUDED
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/**
|
/**
|
||||||
* @file tlib/injection.c
|
* @file tlib/injection.c
|
||||||
*
|
*
|
||||||
* @copyright 2014-2015 Bill Zissimopoulos
|
* @copyright 2014-2018 Bill Zissimopoulos
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <tlib/injection.h>
|
#include <tlib/injection.h>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/**
|
/**
|
||||||
* @file tlib/injection.h
|
* @file tlib/injection.h
|
||||||
*
|
*
|
||||||
* @copyright 2014-2015 Bill Zissimopoulos
|
* @copyright 2014-2018 Bill Zissimopoulos
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* NOTE: This header may usefully be included multiple times.
|
/* NOTE: This header may usefully be included multiple times.
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/**
|
/**
|
||||||
* @file tlib/testsuite.c
|
* @file tlib/testsuite.c
|
||||||
*
|
*
|
||||||
* @copyright 2014-2015 Bill Zissimopoulos
|
* @copyright 2014-2018 Bill Zissimopoulos
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <tlib/testsuite.h>
|
#include <tlib/testsuite.h>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/**
|
/**
|
||||||
* @file tlib/testsuite.h
|
* @file tlib/testsuite.h
|
||||||
*
|
*
|
||||||
* @copyright 2014-2015 Bill Zissimopoulos
|
* @copyright 2014-2018 Bill Zissimopoulos
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef TLIB_TESTSUITE_H_INCLUDED
|
#ifndef TLIB_TESTSUITE_H_INCLUDED
|
||||||
|
133
inc/fuse/fuse.h
@ -6,7 +6,7 @@
|
|||||||
* FUSE: Filesystem in Userspace
|
* FUSE: Filesystem in Userspace
|
||||||
* Copyright (C) 2001-2007 Miklos Szeredi <miklos@szeredi.hu>
|
* Copyright (C) 2001-2007 Miklos Szeredi <miklos@szeredi.hu>
|
||||||
*
|
*
|
||||||
* @copyright 2015-2016 Bill Zissimopoulos
|
* @copyright 2015-2018 Bill Zissimopoulos
|
||||||
*/
|
*/
|
||||||
/*
|
/*
|
||||||
* This file is part of WinFsp.
|
* This file is part of WinFsp.
|
||||||
@ -15,9 +15,13 @@
|
|||||||
* General Public License version 3 as published by the Free Software
|
* General Public License version 3 as published by the Free Software
|
||||||
* Foundation.
|
* Foundation.
|
||||||
*
|
*
|
||||||
* Licensees holding a valid commercial license may use this file in
|
* Licensees holding a valid commercial license may use this software
|
||||||
* accordance with the commercial license agreement provided with the
|
* in accordance with the commercial license agreement provided in
|
||||||
* software.
|
* conjunction with the software. The terms and conditions of any such
|
||||||
|
* commercial license agreement shall govern, supersede, and render
|
||||||
|
* ineffective any application of the GPLv3 license to this software,
|
||||||
|
* notwithstanding of any reference thereto in the software or
|
||||||
|
* associated repository.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef FUSE_H_
|
#ifndef FUSE_H_
|
||||||
@ -39,54 +43,82 @@ typedef int (*fuse_dirfil_t)(fuse_dirh_t h, const char *name,
|
|||||||
|
|
||||||
struct fuse_operations
|
struct fuse_operations
|
||||||
{
|
{
|
||||||
int (*getattr)(const char *path, struct fuse_stat *stbuf);
|
/* S - supported by WinFsp */
|
||||||
int (*getdir)(const char *path, fuse_dirh_t h, fuse_dirfil_t filler);
|
/* S */ int (*getattr)(const char *path, struct fuse_stat *stbuf);
|
||||||
int (*readlink)(const char *path, char *buf, size_t size);
|
/* S */ int (*getdir)(const char *path, fuse_dirh_t h, fuse_dirfil_t filler);
|
||||||
int (*mknod)(const char *path, fuse_mode_t mode, fuse_dev_t dev);
|
/* S */ int (*readlink)(const char *path, char *buf, size_t size);
|
||||||
int (*mkdir)(const char *path, fuse_mode_t mode);
|
/* S */ int (*mknod)(const char *path, fuse_mode_t mode, fuse_dev_t dev);
|
||||||
int (*unlink)(const char *path);
|
/* S */ int (*mkdir)(const char *path, fuse_mode_t mode);
|
||||||
int (*rmdir)(const char *path);
|
/* S */ int (*unlink)(const char *path);
|
||||||
int (*symlink)(const char *dstpath, const char *srcpath);
|
/* S */ int (*rmdir)(const char *path);
|
||||||
int (*rename)(const char *oldpath, const char *newpath);
|
/* S */ int (*symlink)(const char *dstpath, const char *srcpath);
|
||||||
int (*link)(const char *srcpath, const char *dstpath);
|
/* S */ int (*rename)(const char *oldpath, const char *newpath);
|
||||||
int (*chmod)(const char *path, fuse_mode_t mode);
|
/* _ */ int (*link)(const char *srcpath, const char *dstpath);
|
||||||
int (*chown)(const char *path, fuse_uid_t uid, fuse_gid_t gid);
|
/* S */ int (*chmod)(const char *path, fuse_mode_t mode);
|
||||||
int (*truncate)(const char *path, fuse_off_t size);
|
/* S */ int (*chown)(const char *path, fuse_uid_t uid, fuse_gid_t gid);
|
||||||
int (*utime)(const char *path, struct fuse_utimbuf *timbuf);
|
/* S */ int (*truncate)(const char *path, fuse_off_t size);
|
||||||
int (*open)(const char *path, struct fuse_file_info *fi);
|
/* S */ int (*utime)(const char *path, struct fuse_utimbuf *timbuf);
|
||||||
int (*read)(const char *path, char *buf, size_t size, fuse_off_t off,
|
/* S */ int (*open)(const char *path, struct fuse_file_info *fi);
|
||||||
|
/* S */ int (*read)(const char *path, char *buf, size_t size, fuse_off_t off,
|
||||||
struct fuse_file_info *fi);
|
struct fuse_file_info *fi);
|
||||||
int (*write)(const char *path, const char *buf, size_t size, fuse_off_t off,
|
/* S */ int (*write)(const char *path, const char *buf, size_t size, fuse_off_t off,
|
||||||
struct fuse_file_info *fi);
|
struct fuse_file_info *fi);
|
||||||
int (*statfs)(const char *path, struct fuse_statvfs *stbuf);
|
/* S */ int (*statfs)(const char *path, struct fuse_statvfs *stbuf);
|
||||||
int (*flush)(const char *path, struct fuse_file_info *fi);
|
/* S */ int (*flush)(const char *path, struct fuse_file_info *fi);
|
||||||
int (*release)(const char *path, struct fuse_file_info *fi);
|
/* S */ int (*release)(const char *path, struct fuse_file_info *fi);
|
||||||
int (*fsync)(const char *path, int datasync, struct fuse_file_info *fi);
|
/* S */ int (*fsync)(const char *path, int datasync, struct fuse_file_info *fi);
|
||||||
int (*setxattr)(const char *path, const char *name, const char *value, size_t size,
|
/* _ */ int (*setxattr)(const char *path, const char *name, const char *value, size_t size,
|
||||||
int flags);
|
int flags);
|
||||||
int (*getxattr)(const char *path, const char *name, char *value, size_t size);
|
/* _ */ int (*getxattr)(const char *path, const char *name, char *value, size_t size);
|
||||||
int (*listxattr)(const char *path, char *namebuf, size_t size);
|
/* _ */ int (*listxattr)(const char *path, char *namebuf, size_t size);
|
||||||
int (*removexattr)(const char *path, const char *name);
|
/* _ */ int (*removexattr)(const char *path, const char *name);
|
||||||
int (*opendir)(const char *path, struct fuse_file_info *fi);
|
/* S */ int (*opendir)(const char *path, struct fuse_file_info *fi);
|
||||||
int (*readdir)(const char *path, void *buf, fuse_fill_dir_t filler, fuse_off_t off,
|
/* S */ int (*readdir)(const char *path, void *buf, fuse_fill_dir_t filler, fuse_off_t off,
|
||||||
struct fuse_file_info *fi);
|
struct fuse_file_info *fi);
|
||||||
int (*releasedir)(const char *path, struct fuse_file_info *fi);
|
/* S */ int (*releasedir)(const char *path, struct fuse_file_info *fi);
|
||||||
int (*fsyncdir)(const char *path, int datasync, struct fuse_file_info *fi);
|
/* S */ int (*fsyncdir)(const char *path, int datasync, struct fuse_file_info *fi);
|
||||||
void *(*init)(struct fuse_conn_info *conn);
|
/* S */ void *(*init)(struct fuse_conn_info *conn);
|
||||||
void (*destroy)(void *data);
|
/* S */ void (*destroy)(void *data);
|
||||||
int (*access)(const char *path, int mask);
|
/* _ */ int (*access)(const char *path, int mask);
|
||||||
int (*create)(const char *path, fuse_mode_t mode, struct fuse_file_info *fi);
|
/* S */ int (*create)(const char *path, fuse_mode_t mode, struct fuse_file_info *fi);
|
||||||
int (*ftruncate)(const char *path, fuse_off_t off, struct fuse_file_info *fi);
|
/* S */ int (*ftruncate)(const char *path, fuse_off_t off, struct fuse_file_info *fi);
|
||||||
int (*fgetattr)(const char *path, struct fuse_stat *stbuf, struct fuse_file_info *fi);
|
/* S */ int (*fgetattr)(const char *path, struct fuse_stat *stbuf, struct fuse_file_info *fi);
|
||||||
int (*lock)(const char *path, struct fuse_file_info *fi, int cmd, struct fuse_flock *lock);
|
/* _ */ int (*lock)(const char *path,
|
||||||
int (*utimens)(const char *path, const struct fuse_timespec tv[2]);
|
struct fuse_file_info *fi, int cmd, struct fuse_flock *lock);
|
||||||
int (*bmap)(const char *path, size_t blocksize, uint64_t *idx);
|
/* S */ int (*utimens)(const char *path, const struct fuse_timespec tv[2]);
|
||||||
unsigned int flag_nullpath_ok:1;
|
/* _ */ int (*bmap)(const char *path, size_t blocksize, uint64_t *idx);
|
||||||
unsigned int flag_reserved:31;
|
/* _ */ unsigned int flag_nullpath_ok:1;
|
||||||
int (*ioctl)(const char *path, int cmd, void *arg, struct fuse_file_info *fi,
|
/* _ */ unsigned int flag_nopath:1;
|
||||||
|
/* _ */ unsigned int flag_utime_omit_ok:1;
|
||||||
|
/* _ */ unsigned int flag_reserved:29;
|
||||||
|
/* S */ int (*ioctl)(const char *path, int cmd, void *arg, struct fuse_file_info *fi,
|
||||||
unsigned int flags, void *data);
|
unsigned int flags, void *data);
|
||||||
int (*poll)(const char *path, struct fuse_file_info *fi,
|
/* _ */ int (*poll)(const char *path, struct fuse_file_info *fi,
|
||||||
struct fuse_pollhandle *ph, unsigned *reventsp);
|
struct fuse_pollhandle *ph, unsigned *reventsp);
|
||||||
|
/* FUSE 2.9 */
|
||||||
|
/* _ */ int (*write_buf)(const char *path,
|
||||||
|
struct fuse_bufvec *buf, fuse_off_t off, struct fuse_file_info *fi);
|
||||||
|
/* _ */ int (*read_buf)(const char *path,
|
||||||
|
struct fuse_bufvec **bufp, size_t size, fuse_off_t off, struct fuse_file_info *fi);
|
||||||
|
/* _ */ int (*flock)(const char *path, struct fuse_file_info *, int op);
|
||||||
|
/* _ */ int (*fallocate)(const char *path, int mode, fuse_off_t off, fuse_off_t len,
|
||||||
|
struct fuse_file_info *fi);
|
||||||
|
/* OSXFUSE */
|
||||||
|
/* _ */ int (*reserved00)();
|
||||||
|
/* _ */ int (*reserved01)();
|
||||||
|
/* _ */ int (*reserved02)();
|
||||||
|
/* _ */ int (*statfs_x)(const char *path, struct fuse_statfs *stbuf);
|
||||||
|
/* _ */ int (*setvolname)(const char *volname);
|
||||||
|
/* _ */ int (*exchange)(const char *oldpath, const char *newpath, unsigned long flags);
|
||||||
|
/* _ */ int (*getxtimes)(const char *path,
|
||||||
|
struct fuse_timespec *bkuptime, struct fuse_timespec *crtime);
|
||||||
|
/* _ */ int (*setbkuptime)(const char *path, const struct fuse_timespec *tv);
|
||||||
|
/* S */ int (*setchgtime)(const char *path, const struct fuse_timespec *tv);
|
||||||
|
/* S */ int (*setcrtime)(const char *path, const struct fuse_timespec *tv);
|
||||||
|
/* S */ int (*chflags)(const char *path, uint32_t flags);
|
||||||
|
/* _ */ int (*setattr_x)(const char *path, struct fuse_setattr_x *attr);
|
||||||
|
/* _ */ int (*fsetattr_x)(const char *path, struct fuse_setattr_x *attr,
|
||||||
|
struct fuse_file_info *fi);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct fuse_context
|
struct fuse_context
|
||||||
@ -118,6 +150,8 @@ FSP_FUSE_API int FSP_FUSE_API_NAME(fsp_fuse_loop_mt)(struct fsp_fuse_env *env,
|
|||||||
struct fuse *f);
|
struct fuse *f);
|
||||||
FSP_FUSE_API void FSP_FUSE_API_NAME(fsp_fuse_exit)(struct fsp_fuse_env *env,
|
FSP_FUSE_API void FSP_FUSE_API_NAME(fsp_fuse_exit)(struct fsp_fuse_env *env,
|
||||||
struct fuse *f);
|
struct fuse *f);
|
||||||
|
FSP_FUSE_API int FSP_FUSE_API_NAME(fsp_fuse_exited)(struct fsp_fuse_env *env,
|
||||||
|
struct fuse *f);
|
||||||
FSP_FUSE_API struct fuse_context *FSP_FUSE_API_NAME(fsp_fuse_get_context)(struct fsp_fuse_env *env);
|
FSP_FUSE_API struct fuse_context *FSP_FUSE_API_NAME(fsp_fuse_get_context)(struct fsp_fuse_env *env);
|
||||||
|
|
||||||
FSP_FUSE_SYM(
|
FSP_FUSE_SYM(
|
||||||
@ -171,6 +205,13 @@ void fuse_exit(struct fuse *f),
|
|||||||
(fsp_fuse_env(), f);
|
(fsp_fuse_env(), f);
|
||||||
})
|
})
|
||||||
|
|
||||||
|
FSP_FUSE_SYM(
|
||||||
|
int fuse_exited(struct fuse *f),
|
||||||
|
{
|
||||||
|
return FSP_FUSE_API_CALL(fsp_fuse_exited)
|
||||||
|
(fsp_fuse_env(), f);
|
||||||
|
})
|
||||||
|
|
||||||
FSP_FUSE_SYM(
|
FSP_FUSE_SYM(
|
||||||
struct fuse_context *fuse_get_context(void),
|
struct fuse_context *fuse_get_context(void),
|
||||||
{
|
{
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
* FUSE: Filesystem in Userspace
|
* FUSE: Filesystem in Userspace
|
||||||
* Copyright (C) 2001-2007 Miklos Szeredi <miklos@szeredi.hu>
|
* Copyright (C) 2001-2007 Miklos Szeredi <miklos@szeredi.hu>
|
||||||
*
|
*
|
||||||
* @copyright 2015-2016 Bill Zissimopoulos
|
* @copyright 2015-2018 Bill Zissimopoulos
|
||||||
*/
|
*/
|
||||||
/*
|
/*
|
||||||
* This file is part of WinFsp.
|
* This file is part of WinFsp.
|
||||||
@ -15,9 +15,13 @@
|
|||||||
* General Public License version 3 as published by the Free Software
|
* General Public License version 3 as published by the Free Software
|
||||||
* Foundation.
|
* Foundation.
|
||||||
*
|
*
|
||||||
* Licensees holding a valid commercial license may use this file in
|
* Licensees holding a valid commercial license may use this software
|
||||||
* accordance with the commercial license agreement provided with the
|
* in accordance with the commercial license agreement provided in
|
||||||
* software.
|
* conjunction with the software. The terms and conditions of any such
|
||||||
|
* commercial license agreement shall govern, supersede, and render
|
||||||
|
* ineffective any application of the GPLv3 license to this software,
|
||||||
|
* notwithstanding of any reference thereto in the software or
|
||||||
|
* associated repository.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef FUSE_COMMON_H_
|
#ifndef FUSE_COMMON_H_
|
||||||
@ -41,12 +45,40 @@ extern "C" {
|
|||||||
#define FUSE_CAP_EXPORT_SUPPORT (1 << 4)
|
#define FUSE_CAP_EXPORT_SUPPORT (1 << 4)
|
||||||
#define FUSE_CAP_BIG_WRITES (1 << 5)
|
#define FUSE_CAP_BIG_WRITES (1 << 5)
|
||||||
#define FUSE_CAP_DONT_MASK (1 << 6)
|
#define FUSE_CAP_DONT_MASK (1 << 6)
|
||||||
|
#define FUSE_CAP_ALLOCATE (1 << 27) /* reserved (OSXFUSE) */
|
||||||
|
#define FUSE_CAP_EXCHANGE_DATA (1 << 28) /* reserved (OSXFUSE) */
|
||||||
|
#define FUSE_CAP_CASE_INSENSITIVE (1 << 29) /* file system is case insensitive */
|
||||||
|
#define FUSE_CAP_VOL_RENAME (1 << 30) /* reserved (OSXFUSE) */
|
||||||
|
#define FUSE_CAP_XTIMES (1 << 31) /* reserved (OSXFUSE) */
|
||||||
|
|
||||||
|
#define FSP_FUSE_CAP_READDIR_PLUS (1 << 21) /* file system supports enhanced readdir */
|
||||||
|
#define FSP_FUSE_CAP_READ_ONLY (1 << 22) /* file system is marked read-only */
|
||||||
|
#define FSP_FUSE_CAP_STAT_EX (1 << 23) /* file system supports fuse_stat_ex */
|
||||||
|
#define FSP_FUSE_CAP_CASE_INSENSITIVE FUSE_CAP_CASE_INSENSITIVE
|
||||||
|
|
||||||
#define FUSE_IOCTL_COMPAT (1 << 0)
|
#define FUSE_IOCTL_COMPAT (1 << 0)
|
||||||
#define FUSE_IOCTL_UNRESTRICTED (1 << 1)
|
#define FUSE_IOCTL_UNRESTRICTED (1 << 1)
|
||||||
#define FUSE_IOCTL_RETRY (1 << 2)
|
#define FUSE_IOCTL_RETRY (1 << 2)
|
||||||
#define FUSE_IOCTL_MAX_IOV 256
|
#define FUSE_IOCTL_MAX_IOV 256
|
||||||
|
|
||||||
|
/* from FreeBSD */
|
||||||
|
#define FSP_FUSE_UF_HIDDEN 0x00008000
|
||||||
|
#define FSP_FUSE_UF_READONLY 0x00001000
|
||||||
|
#define FSP_FUSE_UF_SYSTEM 0x00000080
|
||||||
|
#define FSP_FUSE_UF_ARCHIVE 0x00000800
|
||||||
|
#if !defined(UF_HIDDEN)
|
||||||
|
#define UF_HIDDEN FSP_FUSE_UF_HIDDEN
|
||||||
|
#endif
|
||||||
|
#if !defined(UF_READONLY)
|
||||||
|
#define UF_READONLY FSP_FUSE_UF_READONLY
|
||||||
|
#endif
|
||||||
|
#if !defined(UF_SYSTEM)
|
||||||
|
#define UF_SYSTEM FSP_FUSE_UF_SYSTEM
|
||||||
|
#endif
|
||||||
|
#if !defined(UF_ARCHIVE)
|
||||||
|
#define UF_ARCHIVE FSP_FUSE_UF_ARCHIVE
|
||||||
|
#endif
|
||||||
|
|
||||||
struct fuse_file_info
|
struct fuse_file_info
|
||||||
{
|
{
|
||||||
int flags;
|
int flags;
|
||||||
@ -76,6 +108,9 @@ struct fuse_conn_info
|
|||||||
struct fuse_session;
|
struct fuse_session;
|
||||||
struct fuse_chan;
|
struct fuse_chan;
|
||||||
struct fuse_pollhandle;
|
struct fuse_pollhandle;
|
||||||
|
struct fuse_bufvec;
|
||||||
|
struct fuse_statfs;
|
||||||
|
struct fuse_setattr_x;
|
||||||
|
|
||||||
FSP_FUSE_API int FSP_FUSE_API_NAME(fsp_fuse_version)(struct fsp_fuse_env *env);
|
FSP_FUSE_API int FSP_FUSE_API_NAME(fsp_fuse_version)(struct fsp_fuse_env *env);
|
||||||
FSP_FUSE_API struct fuse_chan *FSP_FUSE_API_NAME(fsp_fuse_mount)(struct fsp_fuse_env *env,
|
FSP_FUSE_API struct fuse_chan *FSP_FUSE_API_NAME(fsp_fuse_mount)(struct fsp_fuse_env *env,
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
* FUSE: Filesystem in Userspace
|
* FUSE: Filesystem in Userspace
|
||||||
* Copyright (C) 2001-2007 Miklos Szeredi <miklos@szeredi.hu>
|
* Copyright (C) 2001-2007 Miklos Szeredi <miklos@szeredi.hu>
|
||||||
*
|
*
|
||||||
* @copyright 2015-2016 Bill Zissimopoulos
|
* @copyright 2015-2018 Bill Zissimopoulos
|
||||||
*/
|
*/
|
||||||
/*
|
/*
|
||||||
* This file is part of WinFsp.
|
* This file is part of WinFsp.
|
||||||
@ -15,9 +15,13 @@
|
|||||||
* General Public License version 3 as published by the Free Software
|
* General Public License version 3 as published by the Free Software
|
||||||
* Foundation.
|
* Foundation.
|
||||||
*
|
*
|
||||||
* Licensees holding a valid commercial license may use this file in
|
* Licensees holding a valid commercial license may use this software
|
||||||
* accordance with the commercial license agreement provided with the
|
* in accordance with the commercial license agreement provided in
|
||||||
* software.
|
* conjunction with the software. The terms and conditions of any such
|
||||||
|
* commercial license agreement shall govern, supersede, and render
|
||||||
|
* ineffective any application of the GPLv3 license to this software,
|
||||||
|
* notwithstanding of any reference thereto in the software or
|
||||||
|
* associated repository.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef FUSE_OPT_H_
|
#ifndef FUSE_OPT_H_
|
||||||
@ -41,16 +45,16 @@ extern "C" {
|
|||||||
|
|
||||||
struct fuse_opt
|
struct fuse_opt
|
||||||
{
|
{
|
||||||
const char *templ;
|
const char *templ;
|
||||||
unsigned int offset;
|
unsigned int offset;
|
||||||
int value;
|
int value;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct fuse_args
|
struct fuse_args
|
||||||
{
|
{
|
||||||
int argc;
|
int argc;
|
||||||
char **argv;
|
char **argv;
|
||||||
int allocated;
|
int allocated;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef int (*fuse_opt_proc_t)(void *data, const char *arg, int key,
|
typedef int (*fuse_opt_proc_t)(void *data, const char *arg, int key,
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
* @file fuse/winfsp_fuse.h
|
* @file fuse/winfsp_fuse.h
|
||||||
* WinFsp FUSE compatible API.
|
* WinFsp FUSE compatible API.
|
||||||
*
|
*
|
||||||
* @copyright 2015-2016 Bill Zissimopoulos
|
* @copyright 2015-2018 Bill Zissimopoulos
|
||||||
*/
|
*/
|
||||||
/*
|
/*
|
||||||
* This file is part of WinFsp.
|
* This file is part of WinFsp.
|
||||||
@ -11,9 +11,13 @@
|
|||||||
* General Public License version 3 as published by the Free Software
|
* General Public License version 3 as published by the Free Software
|
||||||
* Foundation.
|
* Foundation.
|
||||||
*
|
*
|
||||||
* Licensees holding a valid commercial license may use this file in
|
* Licensees holding a valid commercial license may use this software
|
||||||
* accordance with the commercial license agreement provided with the
|
* in accordance with the commercial license agreement provided in
|
||||||
* software.
|
* conjunction with the software. The terms and conditions of any such
|
||||||
|
* commercial license agreement shall govern, supersede, and render
|
||||||
|
* ineffective any application of the GPLv3 license to this software,
|
||||||
|
* notwithstanding of any reference thereto in the software or
|
||||||
|
* associated repository.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef FUSE_WINFSP_FUSE_H_INCLUDED
|
#ifndef FUSE_WINFSP_FUSE_H_INCLUDED
|
||||||
@ -53,6 +57,17 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define FSP_FUSE_DEVICE_TYPE (0x8000 | 'W' | 'F' * 0x100) /* DeviceIoControl -> ioctl */
|
||||||
|
#define FSP_FUSE_CTLCODE_FROM_IOCTL(cmd)\
|
||||||
|
(FSP_FUSE_DEVICE_TYPE << 16) | (((c) & 0x0fff) << 2)
|
||||||
|
#define FSP_FUSE_IOCTL(cmd, isiz, osiz) \
|
||||||
|
( \
|
||||||
|
(((osiz) != 0) << 31) | \
|
||||||
|
(((isiz) != 0) << 30) | \
|
||||||
|
(((isiz) | (osiz)) << 16) | \
|
||||||
|
(cmd) \
|
||||||
|
)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* FUSE uses a number of types (notably: struct stat) that are OS specific.
|
* FUSE uses a number of types (notably: struct stat) that are OS specific.
|
||||||
* Furthermore there are sometimes multiple definitions of the same type even
|
* Furthermore there are sometimes multiple definitions of the same type even
|
||||||
@ -65,6 +80,27 @@ extern "C" {
|
|||||||
* to be usable from Cygwin.
|
* to be usable from Cygwin.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#define FSP_FUSE_STAT_FIELD_DEFN \
|
||||||
|
fuse_dev_t st_dev; \
|
||||||
|
fuse_ino_t st_ino; \
|
||||||
|
fuse_mode_t st_mode; \
|
||||||
|
fuse_nlink_t st_nlink; \
|
||||||
|
fuse_uid_t st_uid; \
|
||||||
|
fuse_gid_t st_gid; \
|
||||||
|
fuse_dev_t st_rdev; \
|
||||||
|
fuse_off_t st_size; \
|
||||||
|
struct fuse_timespec st_atim; \
|
||||||
|
struct fuse_timespec st_mtim; \
|
||||||
|
struct fuse_timespec st_ctim; \
|
||||||
|
fuse_blksize_t st_blksize; \
|
||||||
|
fuse_blkcnt_t st_blocks; \
|
||||||
|
struct fuse_timespec st_birthtim;
|
||||||
|
#define FSP_FUSE_STAT_EX_FIELD_DEFN \
|
||||||
|
FSP_FUSE_STAT_FIELD_DEFN \
|
||||||
|
uint32_t st_flags; \
|
||||||
|
uint32_t st_reserved32[3]; \
|
||||||
|
uint64_t st_reserved64[2];
|
||||||
|
|
||||||
#if defined(_WIN64) || defined(_WIN32)
|
#if defined(_WIN64) || defined(_WIN32)
|
||||||
|
|
||||||
typedef uint32_t fuse_uid_t;
|
typedef uint32_t fuse_uid_t;
|
||||||
@ -111,23 +147,17 @@ struct fuse_timespec
|
|||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if !defined(FSP_FUSE_USE_STAT_EX)
|
||||||
struct fuse_stat
|
struct fuse_stat
|
||||||
{
|
{
|
||||||
fuse_dev_t st_dev;
|
FSP_FUSE_STAT_FIELD_DEFN
|
||||||
fuse_ino_t st_ino;
|
|
||||||
fuse_mode_t st_mode;
|
|
||||||
fuse_nlink_t st_nlink;
|
|
||||||
fuse_uid_t st_uid;
|
|
||||||
fuse_gid_t st_gid;
|
|
||||||
fuse_dev_t st_rdev;
|
|
||||||
fuse_off_t st_size;
|
|
||||||
struct fuse_timespec st_atim;
|
|
||||||
struct fuse_timespec st_mtim;
|
|
||||||
struct fuse_timespec st_ctim;
|
|
||||||
fuse_blksize_t st_blksize;
|
|
||||||
fuse_blkcnt_t st_blocks;
|
|
||||||
struct fuse_timespec st_birthtim;
|
|
||||||
};
|
};
|
||||||
|
#else
|
||||||
|
struct fuse_stat
|
||||||
|
{
|
||||||
|
FSP_FUSE_STAT_EX_FIELD_DEFN
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(_WIN64)
|
#if defined(_WIN64)
|
||||||
struct fuse_statvfs
|
struct fuse_statvfs
|
||||||
@ -177,6 +207,9 @@ struct fuse_flock
|
|||||||
MemAlloc, MemFree, \
|
MemAlloc, MemFree, \
|
||||||
fsp_fuse_daemonize, \
|
fsp_fuse_daemonize, \
|
||||||
fsp_fuse_set_signal_handlers, \
|
fsp_fuse_set_signal_handlers, \
|
||||||
|
0/*conv_to_win_path*/, \
|
||||||
|
0/*winpid_to_pid*/, \
|
||||||
|
{ 0 }, \
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
#define FSP_FUSE_ENV_INIT \
|
#define FSP_FUSE_ENV_INIT \
|
||||||
@ -185,6 +218,9 @@ struct fuse_flock
|
|||||||
malloc, free, \
|
malloc, free, \
|
||||||
fsp_fuse_daemonize, \
|
fsp_fuse_daemonize, \
|
||||||
fsp_fuse_set_signal_handlers, \
|
fsp_fuse_set_signal_handlers, \
|
||||||
|
0/*conv_to_win_path*/, \
|
||||||
|
0/*winpid_to_pid*/, \
|
||||||
|
{ 0 }, \
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -216,7 +252,14 @@ struct fuse_flock
|
|||||||
#define fuse_utimbuf utimbuf
|
#define fuse_utimbuf utimbuf
|
||||||
#define fuse_timespec timespec
|
#define fuse_timespec timespec
|
||||||
|
|
||||||
|
#if !defined(FSP_FUSE_USE_STAT_EX)
|
||||||
#define fuse_stat stat
|
#define fuse_stat stat
|
||||||
|
#else
|
||||||
|
struct fuse_stat
|
||||||
|
{
|
||||||
|
FSP_FUSE_STAT_EX_FIELD_DEFN
|
||||||
|
};
|
||||||
|
#endif
|
||||||
#define fuse_statvfs statvfs
|
#define fuse_statvfs statvfs
|
||||||
#define fuse_flock flock
|
#define fuse_flock flock
|
||||||
|
|
||||||
@ -226,6 +269,9 @@ struct fuse_flock
|
|||||||
malloc, free, \
|
malloc, free, \
|
||||||
fsp_fuse_daemonize, \
|
fsp_fuse_daemonize, \
|
||||||
fsp_fuse_set_signal_handlers, \
|
fsp_fuse_set_signal_handlers, \
|
||||||
|
fsp_fuse_conv_to_win_path, \
|
||||||
|
fsp_fuse_winpid_to_pid, \
|
||||||
|
{ 0 }, \
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -237,6 +283,11 @@ struct fuse_flock
|
|||||||
#error unsupported environment
|
#error unsupported environment
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
struct fuse_stat_ex
|
||||||
|
{
|
||||||
|
FSP_FUSE_STAT_EX_FIELD_DEFN
|
||||||
|
};
|
||||||
|
|
||||||
struct fsp_fuse_env
|
struct fsp_fuse_env
|
||||||
{
|
{
|
||||||
unsigned environment;
|
unsigned environment;
|
||||||
@ -244,7 +295,9 @@ struct fsp_fuse_env
|
|||||||
void (*memfree)(void *);
|
void (*memfree)(void *);
|
||||||
int (*daemonize)(int);
|
int (*daemonize)(int);
|
||||||
int (*set_signal_handlers)(void *);
|
int (*set_signal_handlers)(void *);
|
||||||
void (*reserved[4])();
|
char *(*conv_to_win_path)(const char *);
|
||||||
|
fuse_pid_t (*winpid_to_pid)(uint32_t);
|
||||||
|
void (*reserved[2])();
|
||||||
};
|
};
|
||||||
|
|
||||||
FSP_FUSE_API void FSP_FUSE_API_NAME(fsp_fuse_signal_handler)(int sig);
|
FSP_FUSE_API void FSP_FUSE_API_NAME(fsp_fuse_signal_handler)(int sig);
|
||||||
@ -348,6 +401,20 @@ static inline int fsp_fuse_set_signal_handlers(void *se)
|
|||||||
#undef FSP_FUSE_SET_SIGNAL_HANDLER
|
#undef FSP_FUSE_SET_SIGNAL_HANDLER
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline char *fsp_fuse_conv_to_win_path(const char *path)
|
||||||
|
{
|
||||||
|
void *cygwin_create_path(unsigned, const void *);
|
||||||
|
return (char *)cygwin_create_path(
|
||||||
|
0/*CCP_POSIX_TO_WIN_A*/ | 0x100/*CCP_RELATIVE*/,
|
||||||
|
path);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline fuse_pid_t fsp_fuse_winpid_to_pid(uint32_t winpid)
|
||||||
|
{
|
||||||
|
pid_t cygwin_winpid_to_pid(int winpid);
|
||||||
|
pid_t pid = cygwin_winpid_to_pid(winpid);
|
||||||
|
return -1 != pid ? pid : (fuse_pid_t)winpid;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
338
inc/fuse3/fuse.h
Normal file
@ -0,0 +1,338 @@
|
|||||||
|
/**
|
||||||
|
* @file fuse3/fuse.h
|
||||||
|
* WinFsp FUSE3 compatible API.
|
||||||
|
*
|
||||||
|
* This file is derived from libfuse/include/fuse.h:
|
||||||
|
* FUSE: Filesystem in Userspace
|
||||||
|
* Copyright (C) 2001-2007 Miklos Szeredi <miklos@szeredi.hu>
|
||||||
|
*
|
||||||
|
* @copyright 2015-2018 Bill Zissimopoulos
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* This file is part of WinFsp.
|
||||||
|
*
|
||||||
|
* 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 software
|
||||||
|
* in accordance with the commercial license agreement provided in
|
||||||
|
* conjunction with the software. The terms and conditions of any such
|
||||||
|
* commercial license agreement shall govern, supersede, and render
|
||||||
|
* ineffective any application of the GPLv3 license to this software,
|
||||||
|
* notwithstanding of any reference thereto in the software or
|
||||||
|
* associated repository.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef FUSE_H_
|
||||||
|
#define FUSE_H_
|
||||||
|
|
||||||
|
#include "fuse_common.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
struct fuse3;
|
||||||
|
|
||||||
|
enum fuse3_readdir_flags
|
||||||
|
{
|
||||||
|
FUSE_READDIR_PLUS = (1 << 0),
|
||||||
|
};
|
||||||
|
|
||||||
|
enum fuse3_fill_dir_flags
|
||||||
|
{
|
||||||
|
FUSE_FILL_DIR_PLUS = (1 << 1),
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef int (*fuse3_fill_dir_t)(void *buf, const char *name,
|
||||||
|
const struct fuse_stat *stbuf, fuse_off_t off,
|
||||||
|
enum fuse3_fill_dir_flags flags);
|
||||||
|
|
||||||
|
struct fuse3_config
|
||||||
|
{
|
||||||
|
int set_gid;
|
||||||
|
unsigned int gid;
|
||||||
|
int set_uid;
|
||||||
|
unsigned int uid;
|
||||||
|
int set_mode;
|
||||||
|
unsigned int umask;
|
||||||
|
double entry_timeout;
|
||||||
|
double negative_timeout;
|
||||||
|
double attr_timeout;
|
||||||
|
int intr;
|
||||||
|
int intr_signal;
|
||||||
|
int remember;
|
||||||
|
int hard_remove;
|
||||||
|
int use_ino;
|
||||||
|
int readdir_ino;
|
||||||
|
int direct_io;
|
||||||
|
int kernel_cache;
|
||||||
|
int auto_cache;
|
||||||
|
int ac_attr_timeout_set;
|
||||||
|
double ac_attr_timeout;
|
||||||
|
int nullpath_ok;
|
||||||
|
/* private */
|
||||||
|
int show_help;
|
||||||
|
char *modules;
|
||||||
|
int debug;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct fuse3_operations
|
||||||
|
{
|
||||||
|
/* S - supported by WinFsp */
|
||||||
|
/* S */ int (*getattr)(const char *path, struct fuse_stat *stbuf,
|
||||||
|
struct fuse3_file_info *fi);
|
||||||
|
/* S */ int (*readlink)(const char *path, char *buf, size_t size);
|
||||||
|
/* S */ int (*mknod)(const char *path, fuse_mode_t mode, fuse_dev_t dev);
|
||||||
|
/* S */ int (*mkdir)(const char *path, fuse_mode_t mode);
|
||||||
|
/* S */ int (*unlink)(const char *path);
|
||||||
|
/* S */ int (*rmdir)(const char *path);
|
||||||
|
/* S */ int (*symlink)(const char *dstpath, const char *srcpath);
|
||||||
|
/* S */ int (*rename)(const char *oldpath, const char *newpath, unsigned int flags);
|
||||||
|
/* _ */ int (*link)(const char *srcpath, const char *dstpath);
|
||||||
|
/* S */ int (*chmod)(const char *path, fuse_mode_t mode,
|
||||||
|
struct fuse3_file_info *fi);
|
||||||
|
/* S */ int (*chown)(const char *path, fuse_uid_t uid, fuse_gid_t gid,
|
||||||
|
struct fuse3_file_info *fi);
|
||||||
|
/* S */ int (*truncate)(const char *path, fuse_off_t size,
|
||||||
|
struct fuse3_file_info *fi);
|
||||||
|
/* S */ int (*open)(const char *path, struct fuse3_file_info *fi);
|
||||||
|
/* S */ int (*read)(const char *path, char *buf, size_t size, fuse_off_t off,
|
||||||
|
struct fuse3_file_info *fi);
|
||||||
|
/* S */ int (*write)(const char *path, const char *buf, size_t size, fuse_off_t off,
|
||||||
|
struct fuse3_file_info *fi);
|
||||||
|
/* S */ int (*statfs)(const char *path, struct fuse_statvfs *stbuf);
|
||||||
|
/* S */ int (*flush)(const char *path, struct fuse3_file_info *fi);
|
||||||
|
/* S */ int (*release)(const char *path, struct fuse3_file_info *fi);
|
||||||
|
/* S */ int (*fsync)(const char *path, int datasync, struct fuse3_file_info *fi);
|
||||||
|
/* _ */ int (*setxattr)(const char *path, const char *name, const char *value, size_t size,
|
||||||
|
int flags);
|
||||||
|
/* _ */ int (*getxattr)(const char *path, const char *name, char *value, size_t size);
|
||||||
|
/* _ */ int (*listxattr)(const char *path, char *namebuf, size_t size);
|
||||||
|
/* _ */ int (*removexattr)(const char *path, const char *name);
|
||||||
|
/* S */ int (*opendir)(const char *path, struct fuse3_file_info *fi);
|
||||||
|
/* S */ int (*readdir)(const char *path, void *buf, fuse3_fill_dir_t filler, fuse_off_t off,
|
||||||
|
struct fuse3_file_info *fi, enum fuse3_readdir_flags);
|
||||||
|
/* S */ int (*releasedir)(const char *path, struct fuse3_file_info *fi);
|
||||||
|
/* S */ int (*fsyncdir)(const char *path, int datasync, struct fuse3_file_info *fi);
|
||||||
|
/* S */ void *(*init)(struct fuse3_conn_info *conn,
|
||||||
|
struct fuse3_config *conf);
|
||||||
|
/* S */ void (*destroy)(void *data);
|
||||||
|
/* _ */ int (*access)(const char *path, int mask);
|
||||||
|
/* S */ int (*create)(const char *path, fuse_mode_t mode, struct fuse3_file_info *fi);
|
||||||
|
/* _ */ int (*lock)(const char *path,
|
||||||
|
struct fuse3_file_info *fi, int cmd, struct fuse_flock *lock);
|
||||||
|
/* S */ int (*utimens)(const char *path, const struct fuse_timespec tv[2],
|
||||||
|
struct fuse3_file_info *fi);
|
||||||
|
/* _ */ int (*bmap)(const char *path, size_t blocksize, uint64_t *idx);
|
||||||
|
/* S */ int (*ioctl)(const char *path, int cmd, void *arg, struct fuse3_file_info *fi,
|
||||||
|
unsigned int flags, void *data);
|
||||||
|
/* _ */ int (*poll)(const char *path, struct fuse3_file_info *fi,
|
||||||
|
struct fuse3_pollhandle *ph, unsigned *reventsp);
|
||||||
|
/* _ */ int (*write_buf)(const char *path,
|
||||||
|
struct fuse3_bufvec *buf, fuse_off_t off, struct fuse3_file_info *fi);
|
||||||
|
/* _ */ int (*read_buf)(const char *path,
|
||||||
|
struct fuse3_bufvec **bufp, size_t size, fuse_off_t off, struct fuse3_file_info *fi);
|
||||||
|
/* _ */ int (*flock)(const char *path, struct fuse3_file_info *, int op);
|
||||||
|
/* _ */ int (*fallocate)(const char *path, int mode, fuse_off_t off, fuse_off_t len,
|
||||||
|
struct fuse3_file_info *fi);
|
||||||
|
};
|
||||||
|
|
||||||
|
struct fuse3_context
|
||||||
|
{
|
||||||
|
struct fuse3 *fuse;
|
||||||
|
fuse_uid_t uid;
|
||||||
|
fuse_gid_t gid;
|
||||||
|
fuse_pid_t pid;
|
||||||
|
void *private_data;
|
||||||
|
fuse_mode_t umask;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define fuse_main(argc, argv, ops, data)\
|
||||||
|
fuse3_main_real(argc, argv, ops, sizeof *(ops), data)
|
||||||
|
|
||||||
|
FSP_FUSE_API int FSP_FUSE_API_NAME(fsp_fuse3_main_real)(struct fsp_fuse_env *env,
|
||||||
|
int argc, char *argv[],
|
||||||
|
const struct fuse3_operations *ops, size_t opsize, void *data);
|
||||||
|
FSP_FUSE_API void FSP_FUSE_API_NAME(fsp_fuse3_lib_help)(struct fsp_fuse_env *env,
|
||||||
|
struct fuse_args *args);
|
||||||
|
FSP_FUSE_API struct fuse3 *FSP_FUSE_API_NAME(fsp_fuse3_new_30)(struct fsp_fuse_env *env,
|
||||||
|
struct fuse_args *args,
|
||||||
|
const struct fuse3_operations *ops, size_t opsize, void *data);
|
||||||
|
FSP_FUSE_API struct fuse3 *FSP_FUSE_API_NAME(fsp_fuse3_new)(struct fsp_fuse_env *env,
|
||||||
|
struct fuse_args *args,
|
||||||
|
const struct fuse3_operations *ops, size_t opsize, void *data);
|
||||||
|
FSP_FUSE_API void FSP_FUSE_API_NAME(fsp_fuse3_destroy)(struct fsp_fuse_env *env,
|
||||||
|
struct fuse3 *f);
|
||||||
|
FSP_FUSE_API int FSP_FUSE_API_NAME(fsp_fuse3_mount)(struct fsp_fuse_env *env,
|
||||||
|
struct fuse3 *f, const char *mountpoint);
|
||||||
|
FSP_FUSE_API void FSP_FUSE_API_NAME(fsp_fuse3_unmount)(struct fsp_fuse_env *env,
|
||||||
|
struct fuse3 *f);
|
||||||
|
FSP_FUSE_API int FSP_FUSE_API_NAME(fsp_fuse3_loop)(struct fsp_fuse_env *env,
|
||||||
|
struct fuse3 *f);
|
||||||
|
FSP_FUSE_API int FSP_FUSE_API_NAME(fsp_fuse3_loop_mt_31)(struct fsp_fuse_env *env,
|
||||||
|
struct fuse3 *f, int clone_fd);
|
||||||
|
FSP_FUSE_API int FSP_FUSE_API_NAME(fsp_fuse3_loop_mt)(struct fsp_fuse_env *env,
|
||||||
|
struct fuse3 *f, struct fuse3_loop_config *config);
|
||||||
|
FSP_FUSE_API void FSP_FUSE_API_NAME(fsp_fuse3_exit)(struct fsp_fuse_env *env,
|
||||||
|
struct fuse3 *f);
|
||||||
|
FSP_FUSE_API struct fuse3_context *FSP_FUSE_API_NAME(fsp_fuse3_get_context)(struct fsp_fuse_env *env);
|
||||||
|
|
||||||
|
FSP_FUSE_SYM(
|
||||||
|
int fuse3_main_real(int argc, char *argv[],
|
||||||
|
const struct fuse3_operations *ops, size_t opsize, void *data),
|
||||||
|
{
|
||||||
|
return FSP_FUSE_API_CALL(fsp_fuse3_main_real)
|
||||||
|
(fsp_fuse_env(), argc, argv, ops, opsize, data);
|
||||||
|
})
|
||||||
|
|
||||||
|
FSP_FUSE_SYM(
|
||||||
|
void fuse3_lib_help(struct fuse_args *args),
|
||||||
|
{
|
||||||
|
FSP_FUSE_API_CALL(fsp_fuse3_lib_help)
|
||||||
|
(fsp_fuse_env(), args);
|
||||||
|
})
|
||||||
|
|
||||||
|
#if FUSE_USE_VERSION == 30
|
||||||
|
FSP_FUSE_SYM(
|
||||||
|
struct fuse3 *fuse3_new_30(struct fuse_args *args,
|
||||||
|
const struct fuse3_operations *ops, size_t opsize, void *data),
|
||||||
|
{
|
||||||
|
return FSP_FUSE_API_CALL(fsp_fuse3_new_30)
|
||||||
|
(fsp_fuse_env(), args, ops, opsize, data);
|
||||||
|
})
|
||||||
|
#define fuse_new(args, op, size, data)\
|
||||||
|
fuse3_new_30(args, op, size, data)
|
||||||
|
|
||||||
|
#else
|
||||||
|
FSP_FUSE_SYM(
|
||||||
|
struct fuse3 *fuse3_new(struct fuse_args *args,
|
||||||
|
const struct fuse3_operations *ops, size_t opsize, void *data),
|
||||||
|
{
|
||||||
|
return FSP_FUSE_API_CALL(fsp_fuse3_new)
|
||||||
|
(fsp_fuse_env(), args, ops, opsize, data);
|
||||||
|
})
|
||||||
|
#endif
|
||||||
|
|
||||||
|
FSP_FUSE_SYM(
|
||||||
|
void fuse3_destroy(struct fuse3 *f),
|
||||||
|
{
|
||||||
|
FSP_FUSE_API_CALL(fsp_fuse3_destroy)
|
||||||
|
(fsp_fuse_env(), f);
|
||||||
|
})
|
||||||
|
|
||||||
|
FSP_FUSE_SYM(
|
||||||
|
int fuse3_mount(struct fuse3 *f, const char *mountpoint),
|
||||||
|
{
|
||||||
|
return FSP_FUSE_API_CALL(fsp_fuse3_mount)
|
||||||
|
(fsp_fuse_env(), f, mountpoint);
|
||||||
|
})
|
||||||
|
|
||||||
|
FSP_FUSE_SYM(
|
||||||
|
void fuse3_unmount(struct fuse3 *f),
|
||||||
|
{
|
||||||
|
FSP_FUSE_API_CALL(fsp_fuse3_unmount)
|
||||||
|
(fsp_fuse_env(), f);
|
||||||
|
})
|
||||||
|
|
||||||
|
FSP_FUSE_SYM(
|
||||||
|
int fuse3_loop(struct fuse3 *f),
|
||||||
|
{
|
||||||
|
return FSP_FUSE_API_CALL(fsp_fuse3_loop)
|
||||||
|
(fsp_fuse_env(), f);
|
||||||
|
})
|
||||||
|
|
||||||
|
#if FUSE_USE_VERSION < 32
|
||||||
|
FSP_FUSE_SYM(
|
||||||
|
int fuse3_loop_mt_31(struct fuse3 *f, int clone_fd),
|
||||||
|
{
|
||||||
|
return FSP_FUSE_API_CALL(fsp_fuse3_loop_mt_31)
|
||||||
|
(fsp_fuse_env(), f, clone_fd);
|
||||||
|
})
|
||||||
|
#define fuse_loop_mt(f, clone_fd)\
|
||||||
|
fuse3_loop_mt_31(f, clone_fd)
|
||||||
|
|
||||||
|
#else
|
||||||
|
FSP_FUSE_SYM(
|
||||||
|
int fuse3_loop_mt(struct fuse3 *f, struct fuse3_loop_config *config),
|
||||||
|
{
|
||||||
|
return FSP_FUSE_API_CALL(fsp_fuse3_loop_mt)
|
||||||
|
(fsp_fuse_env(), f, config);
|
||||||
|
})
|
||||||
|
#endif
|
||||||
|
|
||||||
|
FSP_FUSE_SYM(
|
||||||
|
void fuse3_exit(struct fuse3 *f),
|
||||||
|
{
|
||||||
|
FSP_FUSE_API_CALL(fsp_fuse3_exit)
|
||||||
|
(fsp_fuse_env(), f);
|
||||||
|
})
|
||||||
|
|
||||||
|
FSP_FUSE_SYM(
|
||||||
|
struct fuse3_context *fuse3_get_context(void),
|
||||||
|
{
|
||||||
|
return FSP_FUSE_API_CALL(fsp_fuse3_get_context)
|
||||||
|
(fsp_fuse_env());
|
||||||
|
})
|
||||||
|
|
||||||
|
FSP_FUSE_SYM(
|
||||||
|
int fuse3_getgroups(int size, fuse_gid_t list[]),
|
||||||
|
{
|
||||||
|
(void)size;
|
||||||
|
(void)list;
|
||||||
|
return -ENOSYS;
|
||||||
|
})
|
||||||
|
|
||||||
|
FSP_FUSE_SYM(
|
||||||
|
int fuse3_interrupted(void),
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
})
|
||||||
|
|
||||||
|
FSP_FUSE_SYM(
|
||||||
|
int fuse3_invalidate_path(struct fuse3 *f, const char *path),
|
||||||
|
{
|
||||||
|
(void)f;
|
||||||
|
(void)path;
|
||||||
|
return -ENOENT;
|
||||||
|
})
|
||||||
|
|
||||||
|
FSP_FUSE_SYM(
|
||||||
|
int fuse3_notify_poll(struct fuse3_pollhandle *ph),
|
||||||
|
{
|
||||||
|
(void)ph;
|
||||||
|
return 0;
|
||||||
|
})
|
||||||
|
|
||||||
|
FSP_FUSE_SYM(
|
||||||
|
int fuse3_start_cleanup_thread(struct fuse3 *f),
|
||||||
|
{
|
||||||
|
(void)f;
|
||||||
|
return 0;
|
||||||
|
})
|
||||||
|
|
||||||
|
FSP_FUSE_SYM(
|
||||||
|
void fuse3_stop_cleanup_thread(struct fuse3 *f),
|
||||||
|
{
|
||||||
|
(void)f;
|
||||||
|
})
|
||||||
|
|
||||||
|
FSP_FUSE_SYM(
|
||||||
|
int fuse3_clean_cache(struct fuse3 *f),
|
||||||
|
{
|
||||||
|
(void)f;
|
||||||
|
return 600;
|
||||||
|
})
|
||||||
|
|
||||||
|
FSP_FUSE_SYM(
|
||||||
|
struct fuse3_session *fuse3_get_session(struct fuse3 *f),
|
||||||
|
{
|
||||||
|
return (struct fuse3_session *)f;
|
||||||
|
})
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
238
inc/fuse3/fuse_common.h
Normal file
@ -0,0 +1,238 @@
|
|||||||
|
/**
|
||||||
|
* @file fuse3/fuse_common.h
|
||||||
|
* WinFsp FUSE3 compatible API.
|
||||||
|
*
|
||||||
|
* This file is derived from libfuse/include/fuse_common.h:
|
||||||
|
* FUSE: Filesystem in Userspace
|
||||||
|
* Copyright (C) 2001-2007 Miklos Szeredi <miklos@szeredi.hu>
|
||||||
|
*
|
||||||
|
* @copyright 2015-2018 Bill Zissimopoulos
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* This file is part of WinFsp.
|
||||||
|
*
|
||||||
|
* 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 software
|
||||||
|
* in accordance with the commercial license agreement provided in
|
||||||
|
* conjunction with the software. The terms and conditions of any such
|
||||||
|
* commercial license agreement shall govern, supersede, and render
|
||||||
|
* ineffective any application of the GPLv3 license to this software,
|
||||||
|
* notwithstanding of any reference thereto in the software or
|
||||||
|
* associated repository.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef FUSE_COMMON_H_
|
||||||
|
#define FUSE_COMMON_H_
|
||||||
|
|
||||||
|
#include "winfsp_fuse.h"
|
||||||
|
#if !defined(WINFSP_DLL_INTERNAL)
|
||||||
|
#include "fuse_opt.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define FUSE_MAJOR_VERSION 3
|
||||||
|
#define FUSE_MINOR_VERSION 2
|
||||||
|
#define FUSE_MAKE_VERSION(maj, min) ((maj) * 10 + (min))
|
||||||
|
#define FUSE_VERSION FUSE_MAKE_VERSION(FUSE_MAJOR_VERSION, FUSE_MINOR_VERSION)
|
||||||
|
|
||||||
|
#define FUSE_CAP_ASYNC_READ (1 << 0)
|
||||||
|
#define FUSE_CAP_POSIX_LOCKS (1 << 1)
|
||||||
|
#define FUSE_CAP_ATOMIC_O_TRUNC (1 << 3)
|
||||||
|
#define FUSE_CAP_EXPORT_SUPPORT (1 << 4)
|
||||||
|
#define FUSE_CAP_DONT_MASK (1 << 6)
|
||||||
|
#define FUSE_CAP_SPLICE_WRITE (1 << 7)
|
||||||
|
#define FUSE_CAP_SPLICE_MOVE (1 << 8)
|
||||||
|
#define FUSE_CAP_SPLICE_READ (1 << 9)
|
||||||
|
#define FUSE_CAP_FLOCK_LOCKS (1 << 10)
|
||||||
|
#define FUSE_CAP_IOCTL_DIR (1 << 11)
|
||||||
|
#define FUSE_CAP_AUTO_INVAL_DATA (1 << 12)
|
||||||
|
#define FUSE_CAP_READDIRPLUS (1 << 13)
|
||||||
|
#define FUSE_CAP_READDIRPLUS_AUTO (1 << 14)
|
||||||
|
#define FUSE_CAP_ASYNC_DIO (1 << 15)
|
||||||
|
#define FUSE_CAP_WRITEBACK_CACHE (1 << 16)
|
||||||
|
#define FUSE_CAP_NO_OPEN_SUPPORT (1 << 17)
|
||||||
|
#define FUSE_CAP_PARALLEL_DIROPS (1 << 18)
|
||||||
|
#define FUSE_CAP_POSIX_ACL (1 << 19)
|
||||||
|
#define FUSE_CAP_HANDLE_KILLPRIV (1 << 20)
|
||||||
|
#define FUSE_CAP_ALLOCATE (1 << 27) /* reserved (OSXFUSE) */
|
||||||
|
#define FUSE_CAP_EXCHANGE_DATA (1 << 28) /* reserved (OSXFUSE) */
|
||||||
|
#define FUSE_CAP_CASE_INSENSITIVE (1 << 29) /* file system is case insensitive */
|
||||||
|
#define FUSE_CAP_VOL_RENAME (1 << 30) /* reserved (OSXFUSE) */
|
||||||
|
#define FUSE_CAP_XTIMES (1 << 31) /* reserved (OSXFUSE) */
|
||||||
|
|
||||||
|
#define FSP_FUSE_CAP_CASE_INSENSITIVE FUSE_CAP_CASE_INSENSITIVE
|
||||||
|
|
||||||
|
#define FUSE_IOCTL_COMPAT (1 << 0)
|
||||||
|
#define FUSE_IOCTL_UNRESTRICTED (1 << 1)
|
||||||
|
#define FUSE_IOCTL_RETRY (1 << 2)
|
||||||
|
#define FUSE_IOCTL_DIR (1 << 4)
|
||||||
|
#define FUSE_IOCTL_MAX_IOV 256
|
||||||
|
|
||||||
|
#define FUSE_BUFVEC_INIT(s) \
|
||||||
|
((struct fuse3_bufvec){ 1, 0, 0, { {s, (enum fuse3_buf_flags)0, 0, -1, 0} } })
|
||||||
|
|
||||||
|
struct fuse3_file_info
|
||||||
|
{
|
||||||
|
int flags;
|
||||||
|
unsigned int writepage:1;
|
||||||
|
unsigned int direct_io:1;
|
||||||
|
unsigned int keep_cache:1;
|
||||||
|
unsigned int flush:1;
|
||||||
|
unsigned int nonseekable:1;
|
||||||
|
unsigned int flock_release:1;
|
||||||
|
unsigned int padding:27;
|
||||||
|
uint64_t fh;
|
||||||
|
uint64_t lock_owner;
|
||||||
|
uint32_t poll_events;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct fuse3_loop_config
|
||||||
|
{
|
||||||
|
int clone_fd;
|
||||||
|
unsigned int max_idle_threads;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct fuse3_conn_info
|
||||||
|
{
|
||||||
|
unsigned proto_major;
|
||||||
|
unsigned proto_minor;
|
||||||
|
unsigned max_write;
|
||||||
|
unsigned max_read;
|
||||||
|
unsigned max_readahead;
|
||||||
|
unsigned capable;
|
||||||
|
unsigned want;
|
||||||
|
unsigned max_background;
|
||||||
|
unsigned congestion_threshold;
|
||||||
|
unsigned time_gran;
|
||||||
|
unsigned reserved[22];
|
||||||
|
};
|
||||||
|
|
||||||
|
enum fuse3_buf_flags
|
||||||
|
{
|
||||||
|
FUSE_BUF_IS_FD = (1 << 1),
|
||||||
|
FUSE_BUF_FD_SEEK = (1 << 2),
|
||||||
|
FUSE_BUF_FD_RETRY = (1 << 3),
|
||||||
|
};
|
||||||
|
|
||||||
|
enum fuse3_buf_copy_flags
|
||||||
|
{
|
||||||
|
FUSE_BUF_NO_SPLICE = (1 << 1),
|
||||||
|
FUSE_BUF_FORCE_SPLICE = (1 << 2),
|
||||||
|
FUSE_BUF_SPLICE_MOVE = (1 << 3),
|
||||||
|
FUSE_BUF_SPLICE_NONBLOCK = (1 << 4),
|
||||||
|
};
|
||||||
|
|
||||||
|
struct fuse3_buf
|
||||||
|
{
|
||||||
|
size_t size;
|
||||||
|
enum fuse3_buf_flags flags;
|
||||||
|
void *mem;
|
||||||
|
int fd;
|
||||||
|
fuse_off_t pos;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct fuse3_bufvec
|
||||||
|
{
|
||||||
|
size_t count;
|
||||||
|
size_t idx;
|
||||||
|
size_t off;
|
||||||
|
struct fuse3_buf buf[1];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct fuse3_session;
|
||||||
|
struct fuse3_pollhandle;
|
||||||
|
struct fuse3_conn_info_opts;
|
||||||
|
|
||||||
|
FSP_FUSE_API struct fuse3_conn_info_opts *FSP_FUSE_API_NAME(fsp_fuse3_parse_conn_info_opts)(
|
||||||
|
struct fsp_fuse_env *env,
|
||||||
|
struct fuse_args *args);
|
||||||
|
FSP_FUSE_API void FSP_FUSE_API_NAME(fsp_fuse3_apply_conn_info_opts)(struct fsp_fuse_env *env,
|
||||||
|
struct fuse3_conn_info_opts *opts, struct fuse3_conn_info *conn);
|
||||||
|
FSP_FUSE_API int FSP_FUSE_API_NAME(fsp_fuse3_version)(struct fsp_fuse_env *env);
|
||||||
|
FSP_FUSE_API const char *FSP_FUSE_API_NAME(fsp_fuse3_pkgversion)(struct fsp_fuse_env *env);
|
||||||
|
FSP_FUSE_API int32_t FSP_FUSE_API_NAME(fsp_fuse_ntstatus_from_errno)(struct fsp_fuse_env *env,
|
||||||
|
int err);
|
||||||
|
|
||||||
|
FSP_FUSE_SYM(
|
||||||
|
struct fuse3_conn_info_opts* fuse3_parse_conn_info_opts(
|
||||||
|
struct fuse_args *args),
|
||||||
|
{
|
||||||
|
return FSP_FUSE_API_CALL(fsp_fuse3_parse_conn_info_opts)
|
||||||
|
(fsp_fuse_env(), args);
|
||||||
|
})
|
||||||
|
|
||||||
|
FSP_FUSE_SYM(
|
||||||
|
void fuse3_apply_conn_info_opts(
|
||||||
|
struct fuse3_conn_info_opts *opts, struct fuse3_conn_info *conn),
|
||||||
|
{
|
||||||
|
FSP_FUSE_API_CALL(fsp_fuse3_apply_conn_info_opts)
|
||||||
|
(fsp_fuse_env(), opts, conn);
|
||||||
|
})
|
||||||
|
|
||||||
|
FSP_FUSE_SYM(
|
||||||
|
int fuse3_version(void),
|
||||||
|
{
|
||||||
|
return FSP_FUSE_API_CALL(fsp_fuse3_version)
|
||||||
|
(fsp_fuse_env());
|
||||||
|
})
|
||||||
|
|
||||||
|
FSP_FUSE_SYM(
|
||||||
|
const char *fuse3_pkgversion(void),
|
||||||
|
{
|
||||||
|
return FSP_FUSE_API_CALL(fsp_fuse3_pkgversion)
|
||||||
|
(fsp_fuse_env());
|
||||||
|
})
|
||||||
|
|
||||||
|
FSP_FUSE_SYM(
|
||||||
|
void fuse3_pollhandle_destroy(struct fuse3_pollhandle *ph),
|
||||||
|
{
|
||||||
|
(void)ph;
|
||||||
|
})
|
||||||
|
|
||||||
|
FSP_FUSE_SYM(
|
||||||
|
size_t fuse3_buf_size(const struct fuse3_bufvec *bufv),
|
||||||
|
{
|
||||||
|
(void)bufv;
|
||||||
|
return 0;
|
||||||
|
})
|
||||||
|
|
||||||
|
FSP_FUSE_SYM(
|
||||||
|
ssize_t fuse3_buf_copy(struct fuse3_bufvec *dst, struct fuse3_bufvec *src,
|
||||||
|
enum fuse3_buf_copy_flags flags),
|
||||||
|
{
|
||||||
|
(void)dst;
|
||||||
|
(void)src;
|
||||||
|
(void)flags;
|
||||||
|
return 0;
|
||||||
|
})
|
||||||
|
|
||||||
|
FSP_FUSE_SYM(
|
||||||
|
int fuse3_daemonize(int foreground),
|
||||||
|
{
|
||||||
|
return fsp_fuse_daemonize(foreground);
|
||||||
|
})
|
||||||
|
|
||||||
|
FSP_FUSE_SYM(
|
||||||
|
int fuse3_set_signal_handlers(struct fuse3_session *se),
|
||||||
|
{
|
||||||
|
return fsp_fuse_set_signal_handlers(se);
|
||||||
|
})
|
||||||
|
|
||||||
|
FSP_FUSE_SYM(
|
||||||
|
void fuse3_remove_signal_handlers(struct fuse3_session *se),
|
||||||
|
{
|
||||||
|
(void)se;
|
||||||
|
fsp_fuse_set_signal_handlers(0);
|
||||||
|
})
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
23
inc/fuse3/fuse_opt.h
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
/**
|
||||||
|
* @file fuse3/fuse_opt.h
|
||||||
|
* WinFsp FUSE3 compatible API.
|
||||||
|
*
|
||||||
|
* @copyright 2015-2018 Bill Zissimopoulos
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* This file is part of WinFsp.
|
||||||
|
*
|
||||||
|
* 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 software
|
||||||
|
* in accordance with the commercial license agreement provided in
|
||||||
|
* conjunction with the software. The terms and conditions of any such
|
||||||
|
* commercial license agreement shall govern, supersede, and render
|
||||||
|
* ineffective any application of the GPLv3 license to this software,
|
||||||
|
* notwithstanding of any reference thereto in the software or
|
||||||
|
* associated repository.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "../fuse/fuse_opt.h"
|
82
inc/fuse3/winfsp_fuse.h
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
/**
|
||||||
|
* @file fuse3/winfsp_fuse.h
|
||||||
|
* WinFsp FUSE3 compatible API.
|
||||||
|
*
|
||||||
|
* @copyright 2015-2018 Bill Zissimopoulos
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* This file is part of WinFsp.
|
||||||
|
*
|
||||||
|
* 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 software
|
||||||
|
* in accordance with the commercial license agreement provided in
|
||||||
|
* conjunction with the software. The terms and conditions of any such
|
||||||
|
* commercial license agreement shall govern, supersede, and render
|
||||||
|
* ineffective any application of the GPLv3 license to this software,
|
||||||
|
* notwithstanding of any reference thereto in the software or
|
||||||
|
* associated repository.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef FUSE3_WINFSP_FUSE_H_INCLUDED
|
||||||
|
#define FUSE3_WINFSP_FUSE_H_INCLUDED
|
||||||
|
|
||||||
|
#include "../fuse/winfsp_fuse.h"
|
||||||
|
|
||||||
|
#if defined(_WIN64) || defined(_WIN32)
|
||||||
|
typedef intptr_t ssize_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(WINFSP_DLL_INTERNAL)
|
||||||
|
#define fuse3 fuse
|
||||||
|
#define fuse3_apply_conn_info_opts fuse_apply_conn_info_opts
|
||||||
|
#define fuse3_buf fuse_buf
|
||||||
|
#define fuse3_buf_copy fuse_buf_copy
|
||||||
|
#define fuse3_buf_copy_flags fuse_buf_copy_flags
|
||||||
|
#define fuse3_buf_flags fuse_buf_flags
|
||||||
|
#define fuse3_buf_size fuse_buf_size
|
||||||
|
#define fuse3_bufvec fuse_bufvec
|
||||||
|
#define fuse3_clean_cache fuse_clean_cache
|
||||||
|
#define fuse3_config fuse_config
|
||||||
|
#define fuse3_conn_info fuse_conn_info
|
||||||
|
#define fuse3_conn_info_opts fuse_conn_info_opts
|
||||||
|
#define fuse3_context fuse_context
|
||||||
|
#define fuse3_daemonize fuse_daemonize
|
||||||
|
#define fuse3_destroy fuse_destroy
|
||||||
|
#define fuse3_exit fuse_exit
|
||||||
|
#define fuse3_file_info fuse_file_info
|
||||||
|
#define fuse3_fill_dir_flags fuse_fill_dir_flags
|
||||||
|
#define fuse3_fill_dir_t fuse_fill_dir_t
|
||||||
|
#define fuse3_get_context fuse_get_context
|
||||||
|
#define fuse3_get_session fuse_get_session
|
||||||
|
#define fuse3_getgroups fuse_getgroups
|
||||||
|
#define fuse3_interrupted fuse_interrupted
|
||||||
|
#define fuse3_invalidate_path fuse_invalidate_path
|
||||||
|
#define fuse3_lib_help fuse_lib_help
|
||||||
|
#define fuse3_loop fuse_loop
|
||||||
|
#define fuse3_loop_config fuse_loop_config
|
||||||
|
#define fuse3_loop_mt fuse_loop_mt
|
||||||
|
#define fuse3_loop_mt_31 fuse_loop_mt_31
|
||||||
|
#define fuse3_main_real fuse_main_real
|
||||||
|
#define fuse3_mount fuse_mount
|
||||||
|
#define fuse3_new fuse_new
|
||||||
|
#define fuse3_new_30 fuse_new_30
|
||||||
|
#define fuse3_notify_poll fuse_notify_poll
|
||||||
|
#define fuse3_operations fuse_operations
|
||||||
|
#define fuse3_parse_conn_info_opts fuse_parse_conn_info_opts
|
||||||
|
#define fuse3_pkgversion fuse_pkgversion
|
||||||
|
#define fuse3_pollhandle fuse_pollhandle
|
||||||
|
#define fuse3_pollhandle_destroy fuse_pollhandle_destroy
|
||||||
|
#define fuse3_readdir_flags fuse_readdir_flags
|
||||||
|
#define fuse3_remove_signal_handlers fuse_remove_signal_handlers
|
||||||
|
#define fuse3_session fuse_session
|
||||||
|
#define fuse3_set_signal_handlers fuse_set_signal_handlers
|
||||||
|
#define fuse3_start_cleanup_thread fuse_start_cleanup_thread
|
||||||
|
#define fuse3_stop_cleanup_thread fuse_stop_cleanup_thread
|
||||||
|
#define fuse3_unmount fuse_unmount
|
||||||
|
#define fuse3_version fuse_version
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
@ -1,7 +1,7 @@
|
|||||||
/**
|
/**
|
||||||
* @file winfsp/fsctl.h
|
* @file winfsp/fsctl.h
|
||||||
*
|
*
|
||||||
* @copyright 2015-2016 Bill Zissimopoulos
|
* @copyright 2015-2018 Bill Zissimopoulos
|
||||||
*/
|
*/
|
||||||
/*
|
/*
|
||||||
* This file is part of WinFsp.
|
* This file is part of WinFsp.
|
||||||
@ -10,9 +10,13 @@
|
|||||||
* General Public License version 3 as published by the Free Software
|
* General Public License version 3 as published by the Free Software
|
||||||
* Foundation.
|
* Foundation.
|
||||||
*
|
*
|
||||||
* Licensees holding a valid commercial license may use this file in
|
* Licensees holding a valid commercial license may use this software
|
||||||
* accordance with the commercial license agreement provided with the
|
* in accordance with the commercial license agreement provided in
|
||||||
* software.
|
* conjunction with the software. The terms and conditions of any such
|
||||||
|
* commercial license agreement shall govern, supersede, and render
|
||||||
|
* ineffective any application of the GPLv3 license to this software,
|
||||||
|
* notwithstanding of any reference thereto in the software or
|
||||||
|
* associated repository.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef WINFSP_FSCTL_H_INCLUDED
|
#ifndef WINFSP_FSCTL_H_INCLUDED
|
||||||
@ -34,6 +38,7 @@ extern "C" {
|
|||||||
#define FSP_FSCTL_DRIVER_NAME "WinFsp"
|
#define FSP_FSCTL_DRIVER_NAME "WinFsp"
|
||||||
#define FSP_FSCTL_DISK_DEVICE_NAME "WinFsp.Disk"
|
#define FSP_FSCTL_DISK_DEVICE_NAME "WinFsp.Disk"
|
||||||
#define FSP_FSCTL_NET_DEVICE_NAME "WinFsp.Net"
|
#define FSP_FSCTL_NET_DEVICE_NAME "WinFsp.Net"
|
||||||
|
#define FSP_FSCTL_MUP_DEVICE_NAME "WinFsp.Mup"
|
||||||
|
|
||||||
// {6F9D25FA-6DEE-4A9D-80F5-E98E14F35E54}
|
// {6F9D25FA-6DEE-4A9D-80F5-E98E14F35E54}
|
||||||
extern const __declspec(selectany) GUID FspFsctlDeviceClassGuid =
|
extern const __declspec(selectany) GUID FspFsctlDeviceClassGuid =
|
||||||
@ -78,6 +83,11 @@ FSP_FSCTL_STATIC_ASSERT(FSP_FSCTL_VOLUME_NAME_SIZEMAX <= 260 * sizeof(WCHAR),
|
|||||||
#define FSP_FSCTL_TRANSACT_BATCH_BUFFER_SIZEMIN (64 * 1024)
|
#define FSP_FSCTL_TRANSACT_BATCH_BUFFER_SIZEMIN (64 * 1024)
|
||||||
#define FSP_FSCTL_TRANSACT_BUFFER_SIZEMIN FSP_FSCTL_TRANSACT_REQ_SIZEMAX
|
#define FSP_FSCTL_TRANSACT_BUFFER_SIZEMIN FSP_FSCTL_TRANSACT_REQ_SIZEMAX
|
||||||
|
|
||||||
|
#define FSP_FSCTL_TRANSACT_REQ_TOKEN_HANDLE(T) ((HANDLE)((T) & 0xffffffff))
|
||||||
|
#define FSP_FSCTL_TRANSACT_REQ_TOKEN_PID(T) ((UINT32)(((T) >> 32) & 0xffffffff))
|
||||||
|
|
||||||
|
#define FSP_FSCTL_DEVICECONTROL_SIZEMAX (4 * 1024) /* must be < FSP_FSCTL_TRANSACT_{REQ,RSP}_SIZEMAX */
|
||||||
|
|
||||||
/* marshalling */
|
/* marshalling */
|
||||||
#pragma warning(push)
|
#pragma warning(push)
|
||||||
#pragma warning(disable:4200) /* zero-sized array in struct/union */
|
#pragma warning(disable:4200) /* zero-sized array in struct/union */
|
||||||
@ -120,40 +130,66 @@ enum
|
|||||||
FspFsctlIrpCapacityMaximum = 1000,
|
FspFsctlIrpCapacityMaximum = 1000,
|
||||||
FspFsctlIrpCapacityDefault = 1000,
|
FspFsctlIrpCapacityDefault = 1000,
|
||||||
};
|
};
|
||||||
|
#define FSP_FSCTL_VOLUME_PARAMS_V0_FIELD_DEFN\
|
||||||
|
UINT16 Version; /* set to 0 or sizeof(FSP_FSCTL_VOLUME_PARAMS) */\
|
||||||
|
/* volume information */\
|
||||||
|
UINT16 SectorSize;\
|
||||||
|
UINT16 SectorsPerAllocationUnit;\
|
||||||
|
UINT16 MaxComponentLength; /* maximum file name component length (bytes) */\
|
||||||
|
UINT64 VolumeCreationTime;\
|
||||||
|
UINT32 VolumeSerialNumber;\
|
||||||
|
/* I/O timeouts, capacity, etc. */\
|
||||||
|
UINT32 TransactTimeout; /* FSP_FSCTL_TRANSACT timeout (millis; 1 sec - 10 sec) */\
|
||||||
|
UINT32 IrpTimeout; /* pending IRP timeout (millis; 1 min - 10 min) */\
|
||||||
|
UINT32 IrpCapacity; /* maximum number of pending IRP's (100 - 1000)*/\
|
||||||
|
UINT32 FileInfoTimeout; /* FileInfo/Security/VolumeInfo timeout (millis) */\
|
||||||
|
/* FILE_FS_ATTRIBUTE_INFORMATION::FileSystemAttributes */\
|
||||||
|
UINT32 CaseSensitiveSearch:1; /* file system supports case-sensitive file names */\
|
||||||
|
UINT32 CasePreservedNames:1; /* file system preserves the case of file names */\
|
||||||
|
UINT32 UnicodeOnDisk:1; /* file system supports Unicode in file names */\
|
||||||
|
UINT32 PersistentAcls:1; /* file system preserves and enforces access control lists */\
|
||||||
|
UINT32 ReparsePoints:1; /* file system supports reparse points */\
|
||||||
|
UINT32 ReparsePointsAccessCheck:1; /* file system performs reparse point access checks */\
|
||||||
|
UINT32 NamedStreams:1; /* file system supports named streams */\
|
||||||
|
UINT32 HardLinks:1; /* unimplemented; set to 0 */\
|
||||||
|
UINT32 ExtendedAttributes:1; /* unimplemented; set to 0 */\
|
||||||
|
UINT32 ReadOnlyVolume:1;\
|
||||||
|
/* kernel-mode flags */\
|
||||||
|
UINT32 PostCleanupWhenModifiedOnly:1; /* post Cleanup when a file was modified/deleted */\
|
||||||
|
UINT32 PassQueryDirectoryPattern:1; /* pass Pattern during QueryDirectory operations */\
|
||||||
|
UINT32 AlwaysUseDoubleBuffering:1;\
|
||||||
|
UINT32 PassQueryDirectoryFileName:1; /* pass FileName during QueryDirectory (GetDirInfoByName) */\
|
||||||
|
UINT32 FlushAndPurgeOnCleanup:1; /* keeps file off "standby" list */\
|
||||||
|
UINT32 DeviceControl:1; /* support user-mode ioctl handling */\
|
||||||
|
/* user-mode flags */\
|
||||||
|
UINT32 UmFileContextIsUserContext2:1; /* user mode: FileContext parameter is UserContext2 */\
|
||||||
|
UINT32 UmFileContextIsFullContext:1; /* user mode: FileContext parameter is FullContext */\
|
||||||
|
UINT32 UmReservedFlags:6;\
|
||||||
|
/* additional kernel-mode flags */\
|
||||||
|
UINT32 KmReservedFlags:8;\
|
||||||
|
WCHAR Prefix[FSP_FSCTL_VOLUME_PREFIX_SIZE / sizeof(WCHAR)]; /* UNC prefix (\Server\Share) */\
|
||||||
|
WCHAR FileSystemName[FSP_FSCTL_VOLUME_FSNAME_SIZE / sizeof(WCHAR)];
|
||||||
|
#define FSP_FSCTL_VOLUME_PARAMS_V1_FIELD_DEFN\
|
||||||
|
/* additional fields; specify .Version == sizeof(FSP_FSCTL_VOLUME_PARAMS) */\
|
||||||
|
UINT32 VolumeInfoTimeoutValid:1; /* VolumeInfoTimeout field is valid */\
|
||||||
|
UINT32 DirInfoTimeoutValid:1; /* DirInfoTimeout field is valid */\
|
||||||
|
UINT32 SecurityTimeoutValid:1; /* SecurityTimeout field is valid*/\
|
||||||
|
UINT32 StreamInfoTimeoutValid:1; /* StreamInfoTimeout field is valid */\
|
||||||
|
UINT32 KmAdditionalReservedFlags:28;\
|
||||||
|
UINT32 VolumeInfoTimeout; /* volume info timeout (millis); overrides FileInfoTimeout */\
|
||||||
|
UINT32 DirInfoTimeout; /* dir info timeout (millis); overrides FileInfoTimeout */\
|
||||||
|
UINT32 SecurityTimeout; /* security info timeout (millis); overrides FileInfoTimeout */\
|
||||||
|
UINT32 StreamInfoTimeout; /* stream info timeout (millis); overrides FileInfoTimeout */\
|
||||||
|
UINT32 Reserved32[3];\
|
||||||
|
UINT64 Reserved64[2];
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
UINT16 Version; /* set to 0 */
|
FSP_FSCTL_VOLUME_PARAMS_V0_FIELD_DEFN
|
||||||
/* volume information */
|
} FSP_FSCTL_VOLUME_PARAMS_V0;
|
||||||
UINT16 SectorSize;
|
typedef struct
|
||||||
UINT16 SectorsPerAllocationUnit;
|
{
|
||||||
UINT16 MaxComponentLength; /* maximum file name component length (bytes) */
|
FSP_FSCTL_VOLUME_PARAMS_V0_FIELD_DEFN
|
||||||
UINT64 VolumeCreationTime;
|
FSP_FSCTL_VOLUME_PARAMS_V1_FIELD_DEFN
|
||||||
UINT32 VolumeSerialNumber;
|
|
||||||
/* I/O timeouts, capacity, etc. */
|
|
||||||
UINT32 TransactTimeout; /* FSP_FSCTL_TRANSACT timeout (millis; 1 sec - 10 sec) */
|
|
||||||
UINT32 IrpTimeout; /* pending IRP timeout (millis; 1 min - 10 min) */
|
|
||||||
UINT32 IrpCapacity; /* maximum number of pending IRP's (100 - 1000)*/
|
|
||||||
UINT32 FileInfoTimeout; /* FileInfo/Security/VolumeInfo timeout (millis) */
|
|
||||||
/* FILE_FS_ATTRIBUTE_INFORMATION::FileSystemAttributes */
|
|
||||||
UINT32 CaseSensitiveSearch:1; /* file system supports case-sensitive file names */
|
|
||||||
UINT32 CasePreservedNames:1; /* file system preserves the case of file names */
|
|
||||||
UINT32 UnicodeOnDisk:1; /* file system supports Unicode in file names */
|
|
||||||
UINT32 PersistentAcls:1; /* file system preserves and enforces access control lists */
|
|
||||||
UINT32 ReparsePoints:1; /* file system supports reparse points */
|
|
||||||
UINT32 ReparsePointsAccessCheck:1; /* file system performs reparse point access checks */
|
|
||||||
UINT32 NamedStreams:1; /* file system supports named streams */
|
|
||||||
UINT32 HardLinks:1; /* unimplemented; set to 0 */
|
|
||||||
UINT32 ExtendedAttributes:1; /* unimplemented; set to 0 */
|
|
||||||
UINT32 ReadOnlyVolume:1;
|
|
||||||
/* kernel-mode flags */
|
|
||||||
UINT32 PostCleanupOnDeleteOnly:1; /* post Cleanup when deleting a file only */
|
|
||||||
UINT32 KmReservedFlags:5;
|
|
||||||
/* user-mode flags */
|
|
||||||
UINT32 UmFileContextIsUserContext2:1; /* user mode: FileContext parameter is UserContext2 */
|
|
||||||
UINT32 UmFileContextIsFullContext:1; /* user mode: FileContext parameter is FullContext */
|
|
||||||
UINT32 UmReservedFlags:14;
|
|
||||||
WCHAR Prefix[FSP_FSCTL_VOLUME_PREFIX_SIZE / sizeof(WCHAR)]; /* UNC prefix (\Server\Share) */
|
|
||||||
WCHAR FileSystemName[FSP_FSCTL_VOLUME_FSNAME_SIZE / sizeof(WCHAR)];
|
|
||||||
} FSP_FSCTL_VOLUME_PARAMS;
|
} FSP_FSCTL_VOLUME_PARAMS;
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
@ -185,8 +221,7 @@ typedef struct
|
|||||||
{
|
{
|
||||||
UINT16 Size;
|
UINT16 Size;
|
||||||
FSP_FSCTL_FILE_INFO FileInfo;
|
FSP_FSCTL_FILE_INFO FileInfo;
|
||||||
UINT64 NextOffset;
|
UINT8 Padding[24];
|
||||||
UINT8 Padding[16];
|
|
||||||
/* make struct as big as FILE_ID_BOTH_DIR_INFORMATION; allows for in-place copying */
|
/* make struct as big as FILE_ID_BOTH_DIR_INFORMATION; allows for in-place copying */
|
||||||
WCHAR FileNameBuf[];
|
WCHAR FileNameBuf[];
|
||||||
} FSP_FSCTL_DIR_INFO;
|
} FSP_FSCTL_DIR_INFO;
|
||||||
@ -221,7 +256,7 @@ typedef struct
|
|||||||
UINT32 FileAttributes; /* file attributes for new files */
|
UINT32 FileAttributes; /* file attributes for new files */
|
||||||
FSP_FSCTL_TRANSACT_BUF SecurityDescriptor; /* security descriptor for new files */
|
FSP_FSCTL_TRANSACT_BUF SecurityDescriptor; /* security descriptor for new files */
|
||||||
UINT64 AllocationSize; /* initial allocation size */
|
UINT64 AllocationSize; /* initial allocation size */
|
||||||
UINT64 AccessToken; /* request access token (HANDLE) */
|
UINT64 AccessToken; /* request access token (PID,HANDLE) */
|
||||||
UINT32 DesiredAccess; /* FILE_{READ_DATA,WRITE_DATA,etc.} */
|
UINT32 DesiredAccess; /* FILE_{READ_DATA,WRITE_DATA,etc.} */
|
||||||
UINT32 GrantedAccess; /* FILE_{READ_DATA,WRITE_DATA,etc.} */
|
UINT32 GrantedAccess; /* FILE_{READ_DATA,WRITE_DATA,etc.} */
|
||||||
UINT32 ShareAccess; /* FILE_SHARE_{READ,WRITE,DELETE} */
|
UINT32 ShareAccess; /* FILE_SHARE_{READ,WRITE,DELETE} */
|
||||||
@ -232,7 +267,8 @@ typedef struct
|
|||||||
UINT32 HasRestorePrivilege:1; /* requestor has TOKEN_HAS_RESTORE_PRIVILEGE */
|
UINT32 HasRestorePrivilege:1; /* requestor has TOKEN_HAS_RESTORE_PRIVILEGE */
|
||||||
UINT32 OpenTargetDirectory:1; /* open target dir and report FILE_{EXISTS,DOES_NOT_EXIST} */
|
UINT32 OpenTargetDirectory:1; /* open target dir and report FILE_{EXISTS,DOES_NOT_EXIST} */
|
||||||
UINT32 CaseSensitive:1; /* FileName comparisons should be case-sensitive */
|
UINT32 CaseSensitive:1; /* FileName comparisons should be case-sensitive */
|
||||||
UINT32 ReservedFlags:26;
|
UINT32 HasTrailingBackslash:1; /* FileName had trailing backslash */
|
||||||
|
UINT32 ReservedFlags:25;
|
||||||
UINT16 NamedStream; /* request targets named stream; colon offset in FileName */
|
UINT16 NamedStream; /* request targets named stream; colon offset in FileName */
|
||||||
} Create;
|
} Create;
|
||||||
struct
|
struct
|
||||||
@ -248,6 +284,11 @@ typedef struct
|
|||||||
UINT64 UserContext;
|
UINT64 UserContext;
|
||||||
UINT64 UserContext2;
|
UINT64 UserContext2;
|
||||||
UINT32 Delete:1; /* file must be deleted */
|
UINT32 Delete:1; /* file must be deleted */
|
||||||
|
UINT32 SetAllocationSize:1;
|
||||||
|
UINT32 SetArchiveBit:1;
|
||||||
|
UINT32 SetLastAccessTime:1;
|
||||||
|
UINT32 SetLastWriteTime:1;
|
||||||
|
UINT32 SetChangeTime:1;
|
||||||
} Cleanup;
|
} Cleanup;
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
@ -295,6 +336,7 @@ typedef struct
|
|||||||
UINT64 CreationTime;
|
UINT64 CreationTime;
|
||||||
UINT64 LastAccessTime;
|
UINT64 LastAccessTime;
|
||||||
UINT64 LastWriteTime;
|
UINT64 LastWriteTime;
|
||||||
|
UINT64 ChangeTime;
|
||||||
} Basic;
|
} Basic;
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
@ -307,7 +349,7 @@ typedef struct
|
|||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
FSP_FSCTL_TRANSACT_BUF NewFileName;
|
FSP_FSCTL_TRANSACT_BUF NewFileName;
|
||||||
UINT64 AccessToken; /* request access token (HANDLE) */
|
UINT64 AccessToken; /* request access token (PID,HANDLE) */
|
||||||
} Rename;
|
} Rename;
|
||||||
} Info;
|
} Info;
|
||||||
} SetInformation;
|
} SetInformation;
|
||||||
@ -332,10 +374,11 @@ typedef struct
|
|||||||
UINT64 UserContext;
|
UINT64 UserContext;
|
||||||
UINT64 UserContext2;
|
UINT64 UserContext2;
|
||||||
UINT64 Address;
|
UINT64 Address;
|
||||||
UINT64 Offset;
|
|
||||||
UINT32 Length;
|
UINT32 Length;
|
||||||
FSP_FSCTL_TRANSACT_BUF Pattern;
|
FSP_FSCTL_TRANSACT_BUF Pattern;
|
||||||
|
FSP_FSCTL_TRANSACT_BUF Marker;
|
||||||
UINT32 CaseSensitive:1; /* FileName comparisons should be case-sensitive */
|
UINT32 CaseSensitive:1; /* FileName comparisons should be case-sensitive */
|
||||||
|
UINT32 PatternIsFileName:1; /* Pattern does not contain wildcards */
|
||||||
} QueryDirectory;
|
} QueryDirectory;
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
@ -346,6 +389,14 @@ typedef struct
|
|||||||
UINT16 TargetOnFileSystem; /* the target of the symbolic link is on this file system */
|
UINT16 TargetOnFileSystem; /* the target of the symbolic link is on this file system */
|
||||||
} FileSystemControl;
|
} FileSystemControl;
|
||||||
struct
|
struct
|
||||||
|
{
|
||||||
|
UINT64 UserContext;
|
||||||
|
UINT64 UserContext2;
|
||||||
|
UINT32 IoControlCode;
|
||||||
|
FSP_FSCTL_TRANSACT_BUF Buffer;
|
||||||
|
UINT32 OutputLength;
|
||||||
|
} DeviceControl;
|
||||||
|
struct
|
||||||
{
|
{
|
||||||
UINT64 UserContext;
|
UINT64 UserContext;
|
||||||
UINT64 UserContext2;
|
UINT64 UserContext2;
|
||||||
@ -415,6 +466,10 @@ typedef struct
|
|||||||
FSP_FSCTL_FILE_INFO FileInfo; /* valid: File{Allocation,Basic,EndOfFile}Information */
|
FSP_FSCTL_FILE_INFO FileInfo; /* valid: File{Allocation,Basic,EndOfFile}Information */
|
||||||
} SetInformation;
|
} SetInformation;
|
||||||
struct
|
struct
|
||||||
|
{
|
||||||
|
FSP_FSCTL_FILE_INFO FileInfo; /* valid when flushing file (not volume) */
|
||||||
|
} FlushBuffers;
|
||||||
|
struct
|
||||||
{
|
{
|
||||||
FSP_FSCTL_VOLUME_INFO VolumeInfo;
|
FSP_FSCTL_VOLUME_INFO VolumeInfo;
|
||||||
} QueryVolumeInformation;
|
} QueryVolumeInformation;
|
||||||
@ -427,6 +482,10 @@ typedef struct
|
|||||||
FSP_FSCTL_TRANSACT_BUF Buffer;
|
FSP_FSCTL_TRANSACT_BUF Buffer;
|
||||||
} FileSystemControl;
|
} FileSystemControl;
|
||||||
struct
|
struct
|
||||||
|
{
|
||||||
|
FSP_FSCTL_TRANSACT_BUF Buffer;
|
||||||
|
} DeviceControl;
|
||||||
|
struct
|
||||||
{
|
{
|
||||||
FSP_FSCTL_TRANSACT_BUF SecurityDescriptor;
|
FSP_FSCTL_TRANSACT_BUF SecurityDescriptor;
|
||||||
} QuerySecurity;
|
} QuerySecurity;
|
||||||
|
347
inc/winfsp/launch.h
Normal file
@ -0,0 +1,347 @@
|
|||||||
|
/**
|
||||||
|
* @file winfsp/launch.h
|
||||||
|
* WinFsp Launch API.
|
||||||
|
*
|
||||||
|
* In order to use the WinFsp Launch API a program must include <winfsp/launch.h>
|
||||||
|
* and link with the winfsp_x64.dll (or winfsp_x86.dll) library.
|
||||||
|
*
|
||||||
|
* @copyright 2015-2018 Bill Zissimopoulos
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* This file is part of WinFsp.
|
||||||
|
*
|
||||||
|
* 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 software
|
||||||
|
* in accordance with the commercial license agreement provided in
|
||||||
|
* conjunction with the software. The terms and conditions of any such
|
||||||
|
* commercial license agreement shall govern, supersede, and render
|
||||||
|
* ineffective any application of the GPLv3 license to this software,
|
||||||
|
* notwithstanding of any reference thereto in the software or
|
||||||
|
* associated repository.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef WINFSP_LAUNCH_H_INCLUDED
|
||||||
|
#define WINFSP_LAUNCH_H_INCLUDED
|
||||||
|
|
||||||
|
#include <winfsp/winfsp.h>
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define FSP_LAUNCH_REGKEY "Software\\WinFsp\\Services"
|
||||||
|
#define FSP_LAUNCH_REGKEY_WOW64 KEY_WOW64_32KEY
|
||||||
|
|
||||||
|
#define FSP_LAUNCH_PIPE_NAME "\\\\.\\pipe\\WinFsp.{14E7137D-22B4-437A-B0C1-D21D1BDF3767}"
|
||||||
|
#define FSP_LAUNCH_PIPE_BUFFER_SIZE 4096
|
||||||
|
#define FSP_LAUNCH_PIPE_OWNER ((PSID)WinLocalSystemSid)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The launcher named pipe SDDL gives full access to LocalSystem and Administrators and
|
||||||
|
* GENERIC_READ and FILE_WRITE_DATA access to Everyone. We are careful not to give the
|
||||||
|
* FILE_CREATE_PIPE_INSTANCE right to Everyone to disallow the creation of additional
|
||||||
|
* pipe instances.
|
||||||
|
*/
|
||||||
|
#define FSP_LAUNCH_PIPE_SDDL "O:SYG:SYD:P(A;;GA;;;SY)(A;;GA;;;BA)(A;;GRDCCR;;;WD)"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The default service instance SDDL gives full access to LocalSystem and Administrators.
|
||||||
|
* The only possible service instance rights are as follows:
|
||||||
|
* RP SERVICE_START
|
||||||
|
* WP SERVICE_STOP
|
||||||
|
* LC SERVICE_QUERY_STATUS
|
||||||
|
*
|
||||||
|
* To create a service that can be started, stopped or queried by Everyone, you can set
|
||||||
|
* the following SDDL:
|
||||||
|
* D:P(A;;RPWPLC;;;WD)
|
||||||
|
*/
|
||||||
|
#define FSP_LAUNCH_SERVICE_DEFAULT_SDDL "D:P(A;;RPWPLC;;;SY)(A;;RPWPLC;;;BA)"
|
||||||
|
#define FSP_LAUNCH_SERVICE_WORLD_SDDL "D:P(A;;RPWPLC;;;WD)"
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
FspLaunchCmdStart = 'S', /* requires: SERVICE_START */
|
||||||
|
FspLaunchCmdStartWithSecret = 'X', /* requires: SERVICE_START */
|
||||||
|
FspLaunchCmdStop = 'T', /* requires: SERVICE_STOP */
|
||||||
|
FspLaunchCmdGetInfo = 'I', /* requires: SERVICE_QUERY_STATUS */
|
||||||
|
FspLaunchCmdGetNameList = 'L', /* requires: none*/
|
||||||
|
FspLaunchCmdDefineDosDevice = 'D', /* internal: do not use! */
|
||||||
|
FspLaunchCmdQuit = 'Q', /* DEBUG version only */
|
||||||
|
};
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
FspLaunchCmdSuccess = '$',
|
||||||
|
FspLaunchCmdFailure = '!',
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group Launch Control
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* Call launcher pipe.
|
||||||
|
*
|
||||||
|
* This function is used to send a command to the launcher and receive a response.
|
||||||
|
*
|
||||||
|
* @param Command
|
||||||
|
* Launcher command to send. For example, the 'L' launcher command instructs
|
||||||
|
* the launcher to list all running service instances.
|
||||||
|
* @param Argc
|
||||||
|
* Command argument count. May be 0.
|
||||||
|
* @param Argv
|
||||||
|
* Command argument array. May be NULL.
|
||||||
|
* @param Argl
|
||||||
|
* Command argument length array. May be NULL. If this is NULL all command arguments
|
||||||
|
* are assumed to be NULL-terminated strings. It is also possible for specific arguments
|
||||||
|
* to be NULL-terminated; in this case pass -1 in the corresponding Argl position.
|
||||||
|
* @param Buffer
|
||||||
|
* Buffer that receives the command response. May be NULL.
|
||||||
|
* @param PSize
|
||||||
|
* Pointer to a ULONG. On input it contains the size of the Buffer. On output it
|
||||||
|
* contains the number of bytes transferred. May be NULL.
|
||||||
|
* @param PLauncherError
|
||||||
|
* Receives the launcher error if any. This is always a Win32 error code. May not be NULL.
|
||||||
|
* @return
|
||||||
|
* STATUS_SUCCESS if the command is sent successfully to the launcher, even if the launcher
|
||||||
|
* returns an error. Other status codes indicate a communication error. Launcher errors are
|
||||||
|
* reported through PLauncherError.
|
||||||
|
*/
|
||||||
|
FSP_API NTSTATUS FspLaunchCallLauncherPipe(
|
||||||
|
WCHAR Command, ULONG Argc, PWSTR *Argv, ULONG *Argl,
|
||||||
|
PWSTR Buffer, PULONG PSize,
|
||||||
|
PULONG PLauncherError);
|
||||||
|
/**
|
||||||
|
* Call launcher pipe.
|
||||||
|
*
|
||||||
|
* This function is used to send a command to the launcher and receive a response.
|
||||||
|
*
|
||||||
|
* @param Command
|
||||||
|
* Launcher command to send. For example, the 'L' launcher command instructs
|
||||||
|
* the launcher to list all running service instances.
|
||||||
|
* @param Argc
|
||||||
|
* Command argument count. May be 0.
|
||||||
|
* @param Argv
|
||||||
|
* Command argument array. May be NULL.
|
||||||
|
* @param Argl
|
||||||
|
* Command argument length array. May be NULL. If this is NULL all command arguments
|
||||||
|
* are assumed to be NULL-terminated strings. It is also possible for specific arguments
|
||||||
|
* to be NULL-terminated; in this case pass -1 in the corresponding Argl position.
|
||||||
|
* @param Buffer
|
||||||
|
* Buffer that receives the command response. May be NULL.
|
||||||
|
* @param PSize
|
||||||
|
* Pointer to a ULONG. On input it contains the size of the Buffer. On output it
|
||||||
|
* contains the number of bytes transferred. May be NULL.
|
||||||
|
* @param AllowImpersonation
|
||||||
|
* Allow caller to be impersonated by launcher.
|
||||||
|
* @param PLauncherError
|
||||||
|
* Receives the launcher error if any. This is always a Win32 error code. May not be NULL.
|
||||||
|
* @return
|
||||||
|
* STATUS_SUCCESS if the command is sent successfully to the launcher, even if the launcher
|
||||||
|
* returns an error. Other status codes indicate a communication error. Launcher errors are
|
||||||
|
* reported through PLauncherError.
|
||||||
|
*/
|
||||||
|
FSP_API NTSTATUS FspLaunchCallLauncherPipeEx(
|
||||||
|
WCHAR Command, ULONG Argc, PWSTR *Argv, ULONG *Argl,
|
||||||
|
PWSTR Buffer, PULONG PSize,
|
||||||
|
BOOLEAN AllowImpersonation,
|
||||||
|
PULONG PLauncherError);
|
||||||
|
/**
|
||||||
|
* Start a service instance.
|
||||||
|
*
|
||||||
|
* @param ClassName
|
||||||
|
* Class name of the service instance to start.
|
||||||
|
* @param InstanceName
|
||||||
|
* Instance name of the service instance to start.
|
||||||
|
* @param Argc
|
||||||
|
* Service instance argument count. May be 0.
|
||||||
|
* @param Argv
|
||||||
|
* Service instance argument array. May be NULL.
|
||||||
|
* @param HasSecret
|
||||||
|
* Whether the last argument in Argv is assumed to be a secret (e.g. password) or not.
|
||||||
|
* Secrets are passed to service instances through standard input rather than the command
|
||||||
|
* line.
|
||||||
|
* @param PLauncherError
|
||||||
|
* Receives the launcher error if any. This is always a Win32 error code. May not be NULL.
|
||||||
|
* @return
|
||||||
|
* STATUS_SUCCESS if the command is sent successfully to the launcher, even if the launcher
|
||||||
|
* returns an error. Other status codes indicate a communication error. Launcher errors are
|
||||||
|
* reported through PLauncherError.
|
||||||
|
*/
|
||||||
|
FSP_API NTSTATUS FspLaunchStart(
|
||||||
|
PWSTR ClassName, PWSTR InstanceName, ULONG Argc, PWSTR *Argv,
|
||||||
|
BOOLEAN HasSecret,
|
||||||
|
PULONG PLauncherError);
|
||||||
|
/**
|
||||||
|
* Start a service instance.
|
||||||
|
*
|
||||||
|
* @param ClassName
|
||||||
|
* Class name of the service instance to start.
|
||||||
|
* @param InstanceName
|
||||||
|
* Instance name of the service instance to start.
|
||||||
|
* @param Argc
|
||||||
|
* Service instance argument count. May be 0.
|
||||||
|
* @param Argv
|
||||||
|
* Service instance argument array. May be NULL.
|
||||||
|
* @param HasSecret
|
||||||
|
* Whether the last argument in Argv is assumed to be a secret (e.g. password) or not.
|
||||||
|
* Secrets are passed to service instances through standard input rather than the command
|
||||||
|
* line.
|
||||||
|
* @param AllowImpersonation
|
||||||
|
* Allow caller to be impersonated by launcher.
|
||||||
|
* @param PLauncherError
|
||||||
|
* Receives the launcher error if any. This is always a Win32 error code. May not be NULL.
|
||||||
|
* @return
|
||||||
|
* STATUS_SUCCESS if the command is sent successfully to the launcher, even if the launcher
|
||||||
|
* returns an error. Other status codes indicate a communication error. Launcher errors are
|
||||||
|
* reported through PLauncherError.
|
||||||
|
*/
|
||||||
|
FSP_API NTSTATUS FspLaunchStartEx(
|
||||||
|
PWSTR ClassName, PWSTR InstanceName, ULONG Argc, PWSTR *Argv,
|
||||||
|
BOOLEAN HasSecret,
|
||||||
|
BOOLEAN AllowImpersonation,
|
||||||
|
PULONG PLauncherError);
|
||||||
|
/**
|
||||||
|
* Stop a service instance.
|
||||||
|
*
|
||||||
|
* @param ClassName
|
||||||
|
* Class name of the service instance to stop.
|
||||||
|
* @param InstanceName
|
||||||
|
* Instance name of the service instance to stop.
|
||||||
|
* @param PLauncherError
|
||||||
|
* Receives the launcher error if any. This is always a Win32 error code. May not be NULL.
|
||||||
|
* @return
|
||||||
|
* STATUS_SUCCESS if the command is sent successfully to the launcher, even if the launcher
|
||||||
|
* returns an error. Other status codes indicate a communication error. Launcher errors are
|
||||||
|
* reported through PLauncherError.
|
||||||
|
*/
|
||||||
|
FSP_API NTSTATUS FspLaunchStop(
|
||||||
|
PWSTR ClassName, PWSTR InstanceName,
|
||||||
|
PULONG PLauncherError);
|
||||||
|
/**
|
||||||
|
* Get information about a service instance.
|
||||||
|
*
|
||||||
|
* The information is a list of NULL-terminated strings: the class name of the service instance,
|
||||||
|
* the instance name of the service instance and the full command line used to start the service
|
||||||
|
* instance.
|
||||||
|
*
|
||||||
|
* @param ClassName
|
||||||
|
* Class name of the service instance to stop.
|
||||||
|
* @param InstanceName
|
||||||
|
* Instance name of the service instance to stop.
|
||||||
|
* @param Buffer
|
||||||
|
* Buffer that receives the command response. May be NULL.
|
||||||
|
* @param PSize
|
||||||
|
* Pointer to a ULONG. On input it contains the size of the Buffer. On output it
|
||||||
|
* contains the number of bytes transferred. May be NULL.
|
||||||
|
* @param PLauncherError
|
||||||
|
* Receives the launcher error if any. This is always a Win32 error code. May not be NULL.
|
||||||
|
* @return
|
||||||
|
* STATUS_SUCCESS if the command is sent successfully to the launcher, even if the launcher
|
||||||
|
* returns an error. Other status codes indicate a communication error. Launcher errors are
|
||||||
|
* reported through PLauncherError.
|
||||||
|
*/
|
||||||
|
FSP_API NTSTATUS FspLaunchGetInfo(
|
||||||
|
PWSTR ClassName, PWSTR InstanceName,
|
||||||
|
PWSTR Buffer, PULONG PSize,
|
||||||
|
PULONG PLauncherError);
|
||||||
|
/**
|
||||||
|
* List service instances.
|
||||||
|
*
|
||||||
|
* The information is a list of pairs of NULL-terminated strings. Each pair contains the class
|
||||||
|
* name and instance name of a service instance. All currently running service instances are
|
||||||
|
* listed.
|
||||||
|
*
|
||||||
|
* @param Buffer
|
||||||
|
* Buffer that receives the command response. May be NULL.
|
||||||
|
* @param PSize
|
||||||
|
* Pointer to a ULONG. On input it contains the size of the Buffer. On output it
|
||||||
|
* contains the number of bytes transferred. May be NULL.
|
||||||
|
* @param PLauncherError
|
||||||
|
* Receives the launcher error if any. This is always a Win32 error code. May not be NULL.
|
||||||
|
* @return
|
||||||
|
* STATUS_SUCCESS if the command is sent successfully to the launcher, even if the launcher
|
||||||
|
* returns an error. Other status codes indicate a communication error. Launcher errors are
|
||||||
|
* reported through PLauncherError.
|
||||||
|
*/
|
||||||
|
FSP_API NTSTATUS FspLaunchGetNameList(
|
||||||
|
PWSTR Buffer, PULONG PSize,
|
||||||
|
PULONG PLauncherError);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group Service Registry
|
||||||
|
*/
|
||||||
|
#pragma warning(push)
|
||||||
|
#pragma warning(disable:4200) /* zero-sized array in struct/union */
|
||||||
|
/**
|
||||||
|
* Service registry record.
|
||||||
|
*/
|
||||||
|
typedef struct _FSP_LAUNCH_REG_RECORD
|
||||||
|
{
|
||||||
|
PWSTR Agent;
|
||||||
|
PWSTR Executable;
|
||||||
|
PWSTR CommandLine;
|
||||||
|
PWSTR WorkDirectory;
|
||||||
|
PWSTR RunAs;
|
||||||
|
PWSTR Security;
|
||||||
|
PWSTR AuthPackage;
|
||||||
|
PVOID Reserved0[5];
|
||||||
|
ULONG JobControl;
|
||||||
|
ULONG Credentials;
|
||||||
|
ULONG AuthPackageId;
|
||||||
|
ULONG Reserved1[5];
|
||||||
|
UINT8 Buffer[];
|
||||||
|
} FSP_LAUNCH_REG_RECORD;
|
||||||
|
#pragma warning(pop)
|
||||||
|
/**
|
||||||
|
* Add/change/delete a service registry record.
|
||||||
|
*
|
||||||
|
* @param ClassName
|
||||||
|
* The service class name.
|
||||||
|
* @param Record
|
||||||
|
* The record to set in the registry. If NULL, the registry record is deleted.
|
||||||
|
* @return
|
||||||
|
* STATUS_SUCCESS or error code.
|
||||||
|
*/
|
||||||
|
FSP_API NTSTATUS FspLaunchRegSetRecord(
|
||||||
|
PWSTR ClassName,
|
||||||
|
const FSP_LAUNCH_REG_RECORD *Record);
|
||||||
|
/**
|
||||||
|
* Get a service registry record.
|
||||||
|
*
|
||||||
|
* @param ClassName
|
||||||
|
* The service class name.
|
||||||
|
* @param Agent
|
||||||
|
* The name of the agent that is retrieving the service record. This API matches
|
||||||
|
* the supplied Agent against the Agent in the service record and it only returns
|
||||||
|
* the record if they match. Pass NULL to match any Agent.
|
||||||
|
* @param PRecord
|
||||||
|
* Pointer to a record pointer. Memory for the service record will be allocated
|
||||||
|
* and a pointer to it will be stored at this address. This memory must be later
|
||||||
|
* freed using FspLaunchRegFreeRecord.
|
||||||
|
* @return
|
||||||
|
* STATUS_SUCCESS or error code.
|
||||||
|
* @see
|
||||||
|
* FspLaunchRegFreeRecord
|
||||||
|
*/
|
||||||
|
FSP_API NTSTATUS FspLaunchRegGetRecord(
|
||||||
|
PWSTR ClassName, PWSTR Agent,
|
||||||
|
FSP_LAUNCH_REG_RECORD **PRecord);
|
||||||
|
/**
|
||||||
|
* Free a service registry record.
|
||||||
|
*
|
||||||
|
* @param Record
|
||||||
|
* The service record to free.
|
||||||
|
* @see
|
||||||
|
* FspLaunchRegGetRecord
|
||||||
|
*/
|
||||||
|
FSP_API VOID FspLaunchRegFreeRecord(
|
||||||
|
FSP_LAUNCH_REG_RECORD *Record);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
@ -5,7 +5,7 @@
|
|||||||
* In order to use the WinFsp API the user mode file system must include <winfsp/winfsp.h>
|
* In order to use the WinFsp API the user mode file system must include <winfsp/winfsp.h>
|
||||||
* and link with the winfsp_x64.dll (or winfsp_x86.dll) library.
|
* and link with the winfsp_x64.dll (or winfsp_x86.dll) library.
|
||||||
*
|
*
|
||||||
* @copyright 2015-2016 Bill Zissimopoulos
|
* @copyright 2015-2018 Bill Zissimopoulos
|
||||||
*/
|
*/
|
||||||
/*
|
/*
|
||||||
* This file is part of WinFsp.
|
* This file is part of WinFsp.
|
||||||
@ -14,9 +14,13 @@
|
|||||||
* General Public License version 3 as published by the Free Software
|
* General Public License version 3 as published by the Free Software
|
||||||
* Foundation.
|
* Foundation.
|
||||||
*
|
*
|
||||||
* Licensees holding a valid commercial license may use this file in
|
* Licensees holding a valid commercial license may use this software
|
||||||
* accordance with the commercial license agreement provided with the
|
* in accordance with the commercial license agreement provided in
|
||||||
* software.
|
* conjunction with the software. The terms and conditions of any such
|
||||||
|
* commercial license agreement shall govern, supersede, and render
|
||||||
|
* ineffective any application of the GPLv3 license to this software,
|
||||||
|
* notwithstanding of any reference thereto in the software or
|
||||||
|
* associated repository.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef WINFSP_WINFSP_H_INCLUDED
|
#ifndef WINFSP_WINFSP_H_INCLUDED
|
||||||
@ -26,7 +30,10 @@
|
|||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#undef WIN32_NO_STATUS
|
#undef WIN32_NO_STATUS
|
||||||
#include <winternl.h>
|
#include <winternl.h>
|
||||||
|
#pragma warning(push)
|
||||||
|
#pragma warning(disable:4005) /* macro redefinition */
|
||||||
#include <ntstatus.h>
|
#include <ntstatus.h>
|
||||||
|
#pragma warning(pop)
|
||||||
|
|
||||||
#if defined(WINFSP_DLL_INTERNAL)
|
#if defined(WINFSP_DLL_INTERNAL)
|
||||||
#define FSP_API __declspec(dllexport)
|
#define FSP_API __declspec(dllexport)
|
||||||
@ -122,6 +129,15 @@ typedef enum
|
|||||||
FSP_FILE_SYSTEM_OPERATION_GUARD_STRATEGY_FINE = 0,
|
FSP_FILE_SYSTEM_OPERATION_GUARD_STRATEGY_FINE = 0,
|
||||||
FSP_FILE_SYSTEM_OPERATION_GUARD_STRATEGY_COARSE,
|
FSP_FILE_SYSTEM_OPERATION_GUARD_STRATEGY_COARSE,
|
||||||
} FSP_FILE_SYSTEM_OPERATION_GUARD_STRATEGY;
|
} FSP_FILE_SYSTEM_OPERATION_GUARD_STRATEGY;
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
FspCleanupDelete = 0x01,
|
||||||
|
FspCleanupSetAllocationSize = 0x02,
|
||||||
|
FspCleanupSetArchiveBit = 0x10,
|
||||||
|
FspCleanupSetLastAccessTime = 0x20,
|
||||||
|
FspCleanupSetLastWriteTime = 0x40,
|
||||||
|
FspCleanupSetChangeTime = 0x80,
|
||||||
|
};
|
||||||
/**
|
/**
|
||||||
* @class FSP_FILE_SYSTEM
|
* @class FSP_FILE_SYSTEM
|
||||||
* File system interface.
|
* File system interface.
|
||||||
@ -322,18 +338,40 @@ typedef struct _FSP_FILE_SYSTEM_INTERFACE
|
|||||||
* the system sends a Cleanup request to the file system.
|
* the system sends a Cleanup request to the file system.
|
||||||
*
|
*
|
||||||
* There will be a Cleanup operation for every Create or Open operation posted to the user mode
|
* There will be a Cleanup operation for every Create or Open operation posted to the user mode
|
||||||
* file system. However the Cleanup operation is <b>not</b> the final close operation on a file. The
|
* file system. However the Cleanup operation is <b>not</b> the final close operation on a file.
|
||||||
* file system must be ready to receive additional operations until close time. This is true
|
* The file system must be ready to receive additional operations until close time. This is true
|
||||||
* even when the file is being deleted!
|
* even when the file is being deleted!
|
||||||
*
|
*
|
||||||
|
* The Flags parameter contains information about the cleanup operation:
|
||||||
|
* <ul>
|
||||||
|
* <li>FspCleanupDelete -
|
||||||
* An important function of the Cleanup operation is to complete a delete operation. Deleting
|
* An important function of the Cleanup operation is to complete a delete operation. Deleting
|
||||||
* a file or directory in Windows is a three-stage process where the file is first opened, then
|
* a file or directory in Windows is a three-stage process where the file is first opened, then
|
||||||
* tested to see if the delete can proceed and if the answer is positive the file is then
|
* tested to see if the delete can proceed and if the answer is positive the file is then
|
||||||
* deleted during Cleanup.
|
* deleted during Cleanup.
|
||||||
*
|
*
|
||||||
|
* When this flag is set, this is the last outstanding cleanup for this particular file node.
|
||||||
|
* </li>
|
||||||
|
* <li>FspCleanupSetAllocationSize -
|
||||||
|
* The NTFS and FAT file systems reset a file's allocation size when they receive the last
|
||||||
|
* outstanding cleanup for a particular file node. User mode file systems that implement
|
||||||
|
* allocation size and wish to duplicate the NTFS and FAT behavior can use this flag.
|
||||||
|
* </li>
|
||||||
|
* <li>
|
||||||
|
* FspCleanupSetArchiveBit -
|
||||||
|
* File systems that support the archive bit should set the file node's archive bit when this
|
||||||
|
* flag is set.
|
||||||
|
* </li>
|
||||||
|
* <li>FspCleanupSetLastAccessTime, FspCleanupSetLastWriteTime, FspCleanupSetChangeTime - File
|
||||||
|
* systems should set the corresponding file time when each one of these flags is set. Note that
|
||||||
|
* updating the last access time is expensive and a file system may choose to not implement it.
|
||||||
|
* </ul>
|
||||||
|
*
|
||||||
|
* There is no way to report failure of this operation. This is a Windows limitation.
|
||||||
|
*
|
||||||
* As an optimization a file system may specify the FSP_FSCTL_VOLUME_PARAMS ::
|
* As an optimization a file system may specify the FSP_FSCTL_VOLUME_PARAMS ::
|
||||||
* PostCleanupOnDeleteOnly flag. In this case the FSD will only post Cleanup requests when a
|
* PostCleanupWhenModifiedOnly flag. In this case the FSD will only post Cleanup requests when
|
||||||
* file is being deleted.
|
* the file was modified/deleted.
|
||||||
*
|
*
|
||||||
* @param FileSystem
|
* @param FileSystem
|
||||||
* The file system on which this request is posted.
|
* The file system on which this request is posted.
|
||||||
@ -341,16 +379,15 @@ typedef struct _FSP_FILE_SYSTEM_INTERFACE
|
|||||||
* The file context of the file or directory to cleanup.
|
* The file context of the file or directory to cleanup.
|
||||||
* @param FileName
|
* @param FileName
|
||||||
* The name of the file or directory to cleanup. Sent only when a Delete is requested.
|
* The name of the file or directory to cleanup. Sent only when a Delete is requested.
|
||||||
* @param Delete
|
* @param Flags
|
||||||
* Determines whether to delete the file. Note that there is no way to report failure of
|
* These flags determine whether the file was modified and whether to delete the file.
|
||||||
* this operation. Also note that when this parameter is TRUE this is the last outstanding
|
|
||||||
* cleanup for this particular file node.
|
|
||||||
* @see
|
* @see
|
||||||
* Close
|
* Close
|
||||||
* CanDelete
|
* CanDelete
|
||||||
|
* SetDelete
|
||||||
*/
|
*/
|
||||||
VOID (*Cleanup)(FSP_FILE_SYSTEM *FileSystem,
|
VOID (*Cleanup)(FSP_FILE_SYSTEM *FileSystem,
|
||||||
PVOID FileContext, PWSTR FileName, BOOLEAN Delete);
|
PVOID FileContext, PWSTR FileName, ULONG Flags);
|
||||||
/**
|
/**
|
||||||
* Close a file.
|
* Close a file.
|
||||||
*
|
*
|
||||||
@ -423,11 +460,16 @@ typedef struct _FSP_FILE_SYSTEM_INTERFACE
|
|||||||
* The file system on which this request is posted.
|
* The file system on which this request is posted.
|
||||||
* @param FileContext
|
* @param FileContext
|
||||||
* The file context of the file to be flushed. When NULL the whole volume is being flushed.
|
* The file context of the file to be flushed. When NULL the whole volume is being flushed.
|
||||||
|
* @param FileInfo [out]
|
||||||
|
* Pointer to a structure that will receive the file information on successful return
|
||||||
|
* from this call. This information includes file attributes, file times, etc. Used when
|
||||||
|
* flushing file (not volume).
|
||||||
* @return
|
* @return
|
||||||
* STATUS_SUCCESS or error code.
|
* STATUS_SUCCESS or error code.
|
||||||
*/
|
*/
|
||||||
NTSTATUS (*Flush)(FSP_FILE_SYSTEM *FileSystem,
|
NTSTATUS (*Flush)(FSP_FILE_SYSTEM *FileSystem,
|
||||||
PVOID FileContext);
|
PVOID FileContext,
|
||||||
|
FSP_FSCTL_FILE_INFO *FileInfo);
|
||||||
/**
|
/**
|
||||||
* Get file or directory information.
|
* Get file or directory information.
|
||||||
*
|
*
|
||||||
@ -463,6 +505,9 @@ typedef struct _FSP_FILE_SYSTEM_INTERFACE
|
|||||||
* @param LastWriteTime
|
* @param LastWriteTime
|
||||||
* Last write time to apply to the file or directory. If the value 0 is sent, the last
|
* Last write time to apply to the file or directory. If the value 0 is sent, the last
|
||||||
* write time should not be changed.
|
* write time should not be changed.
|
||||||
|
* @param ChangeTime
|
||||||
|
* Change time to apply to the file or directory. If the value 0 is sent, the change time
|
||||||
|
* should not be changed.
|
||||||
* @param FileInfo [out]
|
* @param FileInfo [out]
|
||||||
* Pointer to a structure that will receive the file information on successful return
|
* Pointer to a structure that will receive the file information on successful return
|
||||||
* from this call. This information includes file attributes, file times, etc.
|
* from this call. This information includes file attributes, file times, etc.
|
||||||
@ -471,7 +516,7 @@ typedef struct _FSP_FILE_SYSTEM_INTERFACE
|
|||||||
*/
|
*/
|
||||||
NTSTATUS (*SetBasicInfo)(FSP_FILE_SYSTEM *FileSystem,
|
NTSTATUS (*SetBasicInfo)(FSP_FILE_SYSTEM *FileSystem,
|
||||||
PVOID FileContext, UINT32 FileAttributes,
|
PVOID FileContext, UINT32 FileAttributes,
|
||||||
UINT64 CreationTime, UINT64 LastAccessTime, UINT64 LastWriteTime,
|
UINT64 CreationTime, UINT64 LastAccessTime, UINT64 LastWriteTime, UINT64 ChangeTime,
|
||||||
FSP_FSCTL_FILE_INFO *FileInfo);
|
FSP_FSCTL_FILE_INFO *FileInfo);
|
||||||
/**
|
/**
|
||||||
* Set file/allocation size.
|
* Set file/allocation size.
|
||||||
@ -518,11 +563,14 @@ typedef struct _FSP_FILE_SYSTEM_INTERFACE
|
|||||||
* directories, etc.
|
* directories, etc.
|
||||||
*
|
*
|
||||||
* This function should <b>NEVER</b> delete the file or directory in question. Deletion should
|
* This function should <b>NEVER</b> delete the file or directory in question. Deletion should
|
||||||
* happen during Cleanup with Delete==TRUE.
|
* happen during Cleanup with the FspCleanupDelete flag set.
|
||||||
*
|
*
|
||||||
* This function gets called when Win32 API's such as DeleteFile or RemoveDirectory are used.
|
* This function gets called when Win32 API's such as DeleteFile or RemoveDirectory are used.
|
||||||
* It does not get called when a file or directory is opened with FILE_DELETE_ON_CLOSE.
|
* It does not get called when a file or directory is opened with FILE_DELETE_ON_CLOSE.
|
||||||
*
|
*
|
||||||
|
* NOTE: If both CanDelete and SetDelete are defined, SetDelete takes precedence. However
|
||||||
|
* most file systems need only implement the CanDelete operation.
|
||||||
|
*
|
||||||
* @param FileSystem
|
* @param FileSystem
|
||||||
* The file system on which this request is posted.
|
* The file system on which this request is posted.
|
||||||
* @param FileContext
|
* @param FileContext
|
||||||
@ -533,6 +581,7 @@ typedef struct _FSP_FILE_SYSTEM_INTERFACE
|
|||||||
* STATUS_SUCCESS or error code.
|
* STATUS_SUCCESS or error code.
|
||||||
* @see
|
* @see
|
||||||
* Cleanup
|
* Cleanup
|
||||||
|
* SetDelete
|
||||||
*/
|
*/
|
||||||
NTSTATUS (*CanDelete)(FSP_FILE_SYSTEM *FileSystem,
|
NTSTATUS (*CanDelete)(FSP_FILE_SYSTEM *FileSystem,
|
||||||
PVOID FileContext, PWSTR FileName);
|
PVOID FileContext, PWSTR FileName);
|
||||||
@ -541,8 +590,6 @@ typedef struct _FSP_FILE_SYSTEM_INTERFACE
|
|||||||
*
|
*
|
||||||
* The kernel mode FSD provides certain guarantees prior to posting a rename operation:
|
* The kernel mode FSD provides certain guarantees prior to posting a rename operation:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>A file cannot be renamed if it has any open handles, other than the one used to perform
|
|
||||||
* the rename.</li>
|
|
||||||
* <li>A file cannot be renamed if a file with the same name exists and has open handles.</li>
|
* <li>A file cannot be renamed if a file with the same name exists and has open handles.</li>
|
||||||
* <li>A directory cannot be renamed if it or any of its subdirectories contains a file that
|
* <li>A directory cannot be renamed if it or any of its subdirectories contains a file that
|
||||||
* has open handles.</li>
|
* has open handles.</li>
|
||||||
@ -612,30 +659,18 @@ typedef struct _FSP_FILE_SYSTEM_INTERFACE
|
|||||||
* The file system on which this request is posted.
|
* The file system on which this request is posted.
|
||||||
* @param FileContext
|
* @param FileContext
|
||||||
* The file context of the directory to be read.
|
* The file context of the directory to be read.
|
||||||
* @param Buffer
|
|
||||||
* Pointer to a buffer that will receive the results of the read operation.
|
|
||||||
* @param Offset
|
|
||||||
* Offset within the directory to read from. The kernel does not interpret this value
|
|
||||||
* which is used solely by the file system to locate directory entries. However the
|
|
||||||
* special value 0 indicates that the read should start from the first entries. The first
|
|
||||||
* two entries returned by ReadDirectory should always be the "." and ".." entries,
|
|
||||||
* except for the root directory which does not have these entries.
|
|
||||||
*
|
|
||||||
* This parameter is used by the WinFsp FSD to break directory listings into chunks.
|
|
||||||
* In this case all 64-bits of the Offset are valid. In some cases the Windows kernel
|
|
||||||
* (NTOS) may also use this parameter. In this case only the lower 32-bits of this
|
|
||||||
* parameter will be valid. This is an unfortunate limitation of Windows (for more
|
|
||||||
* information see the documentation for IRP_MJ_DIRECTORY_CONTROL and the flag
|
|
||||||
* SL_INDEX_SPECIFIED).
|
|
||||||
*
|
|
||||||
* In practice this means that you should only rely on the lower 32-bits of this value
|
|
||||||
* to be valid.
|
|
||||||
* @param Length
|
|
||||||
* Length of data to read.
|
|
||||||
* @param Pattern
|
* @param Pattern
|
||||||
* The pattern to match against files in this directory. Can be NULL. The file system
|
* The pattern to match against files in this directory. Can be NULL. The file system
|
||||||
* can choose to ignore this parameter as the FSD will always perform its own pattern
|
* can choose to ignore this parameter as the FSD will always perform its own pattern
|
||||||
* matching on the returned results.
|
* matching on the returned results.
|
||||||
|
* @param Marker
|
||||||
|
* A file name that marks where in the directory to start reading. Files with names
|
||||||
|
* that are greater than (not equal to) this marker (in the directory order determined
|
||||||
|
* by the file system) should be returned. Can be NULL.
|
||||||
|
* @param Buffer
|
||||||
|
* Pointer to a buffer that will receive the results of the read operation.
|
||||||
|
* @param Length
|
||||||
|
* Length of data to read.
|
||||||
* @param PBytesTransferred [out]
|
* @param PBytesTransferred [out]
|
||||||
* Pointer to a memory location that will receive the actual number of bytes read.
|
* Pointer to a memory location that will receive the actual number of bytes read.
|
||||||
* @return
|
* @return
|
||||||
@ -645,9 +680,8 @@ typedef struct _FSP_FILE_SYSTEM_INTERFACE
|
|||||||
* FspFileSystemAddDirInfo
|
* FspFileSystemAddDirInfo
|
||||||
*/
|
*/
|
||||||
NTSTATUS (*ReadDirectory)(FSP_FILE_SYSTEM *FileSystem,
|
NTSTATUS (*ReadDirectory)(FSP_FILE_SYSTEM *FileSystem,
|
||||||
PVOID FileContext, PVOID Buffer, UINT64 Offset, ULONG Length,
|
PVOID FileContext, PWSTR Pattern, PWSTR Marker,
|
||||||
PWSTR Pattern,
|
PVOID Buffer, ULONG Length, PULONG PBytesTransferred);
|
||||||
PULONG PBytesTransferred);
|
|
||||||
/**
|
/**
|
||||||
* Resolve reparse points.
|
* Resolve reparse points.
|
||||||
*
|
*
|
||||||
@ -777,12 +811,95 @@ typedef struct _FSP_FILE_SYSTEM_INTERFACE
|
|||||||
NTSTATUS (*GetStreamInfo)(FSP_FILE_SYSTEM *FileSystem,
|
NTSTATUS (*GetStreamInfo)(FSP_FILE_SYSTEM *FileSystem,
|
||||||
PVOID FileContext, PVOID Buffer, ULONG Length,
|
PVOID FileContext, PVOID Buffer, ULONG Length,
|
||||||
PULONG PBytesTransferred);
|
PULONG PBytesTransferred);
|
||||||
|
/**
|
||||||
|
* Get directory information for a single file or directory within a parent directory.
|
||||||
|
*
|
||||||
|
* @param FileSystem
|
||||||
|
* The file system on which this request is posted.
|
||||||
|
* @param FileContext
|
||||||
|
* The file context of the parent directory.
|
||||||
|
* @param FileName
|
||||||
|
* The name of the file or directory to get information for. This name is relative
|
||||||
|
* to the parent directory and is a single path component.
|
||||||
|
* @param DirInfo [out]
|
||||||
|
* Pointer to a structure that will receive the directory information on successful
|
||||||
|
* return from this call. This information includes the file name, but also file
|
||||||
|
* attributes, file times, etc.
|
||||||
|
* @return
|
||||||
|
* STATUS_SUCCESS or error code.
|
||||||
|
*/
|
||||||
|
NTSTATUS (*GetDirInfoByName)(FSP_FILE_SYSTEM *FileSystem,
|
||||||
|
PVOID FileContext, PWSTR FileName,
|
||||||
|
FSP_FSCTL_DIR_INFO *DirInfo);
|
||||||
|
/**
|
||||||
|
* Process control code.
|
||||||
|
*
|
||||||
|
* This function is called when a program uses the DeviceIoControl API.
|
||||||
|
*
|
||||||
|
* @param FileSystem
|
||||||
|
* The file system on which this request is posted.
|
||||||
|
* @param FileContext
|
||||||
|
* The file context of the file or directory to be controled.
|
||||||
|
* @param ControlCode
|
||||||
|
* The control code for the operation. This code must have a DeviceType with bit
|
||||||
|
* 0x8000 set and must have a TransferType of METHOD_BUFFERED.
|
||||||
|
* @param InputBuffer
|
||||||
|
* Pointer to a buffer that contains the input data.
|
||||||
|
* @param InputBufferLength
|
||||||
|
* Input data length.
|
||||||
|
* @param OutputBuffer
|
||||||
|
* Pointer to a buffer that will receive the output data.
|
||||||
|
* @param OutputBufferLength
|
||||||
|
* Output data length.
|
||||||
|
* @param PBytesTransferred [out]
|
||||||
|
* Pointer to a memory location that will receive the actual number of bytes transferred.
|
||||||
|
* @return
|
||||||
|
* STATUS_SUCCESS or error code.
|
||||||
|
*/
|
||||||
|
NTSTATUS (*Control)(FSP_FILE_SYSTEM *FileSystem,
|
||||||
|
PVOID FileContext, UINT32 ControlCode,
|
||||||
|
PVOID InputBuffer, ULONG InputBufferLength,
|
||||||
|
PVOID OutputBuffer, ULONG OutputBufferLength, PULONG PBytesTransferred);
|
||||||
|
/**
|
||||||
|
* Set the file delete flag.
|
||||||
|
*
|
||||||
|
* This function sets a flag to indicates whether the FSD file should delete a file
|
||||||
|
* when it is closed. This function does not need to perform access checks, but may
|
||||||
|
* performs tasks such as check for empty directories, etc.
|
||||||
|
*
|
||||||
|
* This function should <b>NEVER</b> delete the file or directory in question. Deletion should
|
||||||
|
* happen during Cleanup with the FspCleanupDelete flag set.
|
||||||
|
*
|
||||||
|
* This function gets called when Win32 API's such as DeleteFile or RemoveDirectory are used.
|
||||||
|
* It does not get called when a file or directory is opened with FILE_DELETE_ON_CLOSE.
|
||||||
|
*
|
||||||
|
* NOTE: If both CanDelete and SetDelete are defined, SetDelete takes precedence. However
|
||||||
|
* most file systems need only implement the CanDelete operation.
|
||||||
|
*
|
||||||
|
* @param FileSystem
|
||||||
|
* The file system on which this request is posted.
|
||||||
|
* @param FileContext
|
||||||
|
* The file context of the file or directory to set the delete flag for.
|
||||||
|
* @param FileName
|
||||||
|
* The name of the file or directory to set the delete flag for.
|
||||||
|
* @param DeleteFile
|
||||||
|
* If set to TRUE the FSD indicates that the file will be deleted on Cleanup; otherwise
|
||||||
|
* it will not be deleted. It is legal to receive multiple SetDelete calls for the same
|
||||||
|
* file with different DeleteFile parameters.
|
||||||
|
* @return
|
||||||
|
* STATUS_SUCCESS or error code.
|
||||||
|
* @see
|
||||||
|
* Cleanup
|
||||||
|
* CanDelete
|
||||||
|
*/
|
||||||
|
NTSTATUS (*SetDelete)(FSP_FILE_SYSTEM *FileSystem,
|
||||||
|
PVOID FileContext, PWSTR FileName, BOOLEAN DeleteFile);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This ensures that this interface will always contain 64 function pointers.
|
* This ensures that this interface will always contain 64 function pointers.
|
||||||
* Please update when changing the interface as it is important for future compatibility.
|
* Please update when changing the interface as it is important for future compatibility.
|
||||||
*/
|
*/
|
||||||
NTSTATUS (*Reserved[40])();
|
NTSTATUS (*Reserved[37])();
|
||||||
} FSP_FILE_SYSTEM_INTERFACE;
|
} FSP_FILE_SYSTEM_INTERFACE;
|
||||||
FSP_FSCTL_STATIC_ASSERT(sizeof(FSP_FILE_SYSTEM_INTERFACE) == 64 * sizeof(NTSTATUS (*)()),
|
FSP_FSCTL_STATIC_ASSERT(sizeof(FSP_FILE_SYSTEM_INTERFACE) == 64 * sizeof(NTSTATUS (*)()),
|
||||||
"FSP_FILE_SYSTEM_INTERFACE must have 64 entries.");
|
"FSP_FILE_SYSTEM_INTERFACE must have 64 entries.");
|
||||||
@ -810,6 +927,20 @@ typedef struct _FSP_FILE_SYSTEM_OPERATION_CONTEXT
|
|||||||
FSP_FSCTL_TRANSACT_REQ *Request;
|
FSP_FSCTL_TRANSACT_REQ *Request;
|
||||||
FSP_FSCTL_TRANSACT_RSP *Response;
|
FSP_FSCTL_TRANSACT_RSP *Response;
|
||||||
} FSP_FILE_SYSTEM_OPERATION_CONTEXT;
|
} FSP_FILE_SYSTEM_OPERATION_CONTEXT;
|
||||||
|
/**
|
||||||
|
* Check whether creating a file system object is possible.
|
||||||
|
*
|
||||||
|
* @param DevicePath
|
||||||
|
* The name of the control device for this file system. This must be either
|
||||||
|
* FSP_FSCTL_DISK_DEVICE_NAME or FSP_FSCTL_NET_DEVICE_NAME.
|
||||||
|
* @param MountPoint
|
||||||
|
* The mount point for the new file system. A value of NULL means that the file system should
|
||||||
|
* use the next available drive letter counting downwards from Z: as its mount point.
|
||||||
|
* @return
|
||||||
|
* STATUS_SUCCESS or error code.
|
||||||
|
*/
|
||||||
|
FSP_API NTSTATUS FspFileSystemPreflight(PWSTR DevicePath,
|
||||||
|
PWSTR MountPoint);
|
||||||
/**
|
/**
|
||||||
* Create a file system object.
|
* Create a file system object.
|
||||||
*
|
*
|
||||||
@ -857,6 +988,8 @@ FSP_API VOID FspFileSystemDelete(FSP_FILE_SYSTEM *FileSystem);
|
|||||||
* STATUS_SUCCESS or error code.
|
* STATUS_SUCCESS or error code.
|
||||||
*/
|
*/
|
||||||
FSP_API NTSTATUS FspFileSystemSetMountPoint(FSP_FILE_SYSTEM *FileSystem, PWSTR MountPoint);
|
FSP_API NTSTATUS FspFileSystemSetMountPoint(FSP_FILE_SYSTEM *FileSystem, PWSTR MountPoint);
|
||||||
|
FSP_API NTSTATUS FspFileSystemSetMountPointEx(FSP_FILE_SYSTEM *FileSystem, PWSTR MountPoint,
|
||||||
|
PSECURITY_DESCRIPTOR SecurityDescriptor);
|
||||||
/**
|
/**
|
||||||
* Remove the mount point for a file system.
|
* Remove the mount point for a file system.
|
||||||
*
|
*
|
||||||
@ -925,6 +1058,7 @@ PWSTR FspFileSystemMountPoint(FSP_FILE_SYSTEM *FileSystem)
|
|||||||
{
|
{
|
||||||
return FileSystem->MountPoint;
|
return FileSystem->MountPoint;
|
||||||
}
|
}
|
||||||
|
FSP_API PWSTR FspFileSystemMountPointF(FSP_FILE_SYSTEM *FileSystem);
|
||||||
static inline
|
static inline
|
||||||
NTSTATUS FspFileSystemEnterOperation(FSP_FILE_SYSTEM *FileSystem,
|
NTSTATUS FspFileSystemEnterOperation(FSP_FILE_SYSTEM *FileSystem,
|
||||||
FSP_FSCTL_TRANSACT_REQ *Request, FSP_FSCTL_TRANSACT_RSP *Response)
|
FSP_FSCTL_TRANSACT_REQ *Request, FSP_FSCTL_TRANSACT_RSP *Response)
|
||||||
@ -934,6 +1068,8 @@ NTSTATUS FspFileSystemEnterOperation(FSP_FILE_SYSTEM *FileSystem,
|
|||||||
|
|
||||||
return FileSystem->EnterOperation(FileSystem, Request, Response);
|
return FileSystem->EnterOperation(FileSystem, Request, Response);
|
||||||
}
|
}
|
||||||
|
FSP_API NTSTATUS FspFileSystemEnterOperationF(FSP_FILE_SYSTEM *FileSystem,
|
||||||
|
FSP_FSCTL_TRANSACT_REQ *Request, FSP_FSCTL_TRANSACT_RSP *Response);
|
||||||
static inline
|
static inline
|
||||||
NTSTATUS FspFileSystemLeaveOperation(FSP_FILE_SYSTEM *FileSystem,
|
NTSTATUS FspFileSystemLeaveOperation(FSP_FILE_SYSTEM *FileSystem,
|
||||||
FSP_FSCTL_TRANSACT_REQ *Request, FSP_FSCTL_TRANSACT_RSP *Response)
|
FSP_FSCTL_TRANSACT_REQ *Request, FSP_FSCTL_TRANSACT_RSP *Response)
|
||||||
@ -943,6 +1079,8 @@ NTSTATUS FspFileSystemLeaveOperation(FSP_FILE_SYSTEM *FileSystem,
|
|||||||
|
|
||||||
return FileSystem->LeaveOperation(FileSystem, Request, Response);
|
return FileSystem->LeaveOperation(FileSystem, Request, Response);
|
||||||
}
|
}
|
||||||
|
FSP_API NTSTATUS FspFileSystemLeaveOperationF(FSP_FILE_SYSTEM *FileSystem,
|
||||||
|
FSP_FSCTL_TRANSACT_REQ *Request, FSP_FSCTL_TRANSACT_RSP *Response);
|
||||||
static inline
|
static inline
|
||||||
VOID FspFileSystemSetOperationGuard(FSP_FILE_SYSTEM *FileSystem,
|
VOID FspFileSystemSetOperationGuard(FSP_FILE_SYSTEM *FileSystem,
|
||||||
FSP_FILE_SYSTEM_OPERATION_GUARD *EnterOperation,
|
FSP_FILE_SYSTEM_OPERATION_GUARD *EnterOperation,
|
||||||
@ -951,6 +1089,9 @@ VOID FspFileSystemSetOperationGuard(FSP_FILE_SYSTEM *FileSystem,
|
|||||||
FileSystem->EnterOperation = EnterOperation;
|
FileSystem->EnterOperation = EnterOperation;
|
||||||
FileSystem->LeaveOperation = LeaveOperation;
|
FileSystem->LeaveOperation = LeaveOperation;
|
||||||
}
|
}
|
||||||
|
FSP_API VOID FspFileSystemSetOperationGuardF(FSP_FILE_SYSTEM *FileSystem,
|
||||||
|
FSP_FILE_SYSTEM_OPERATION_GUARD *EnterOperation,
|
||||||
|
FSP_FILE_SYSTEM_OPERATION_GUARD *LeaveOperation);
|
||||||
/**
|
/**
|
||||||
* Set file system locking strategy.
|
* Set file system locking strategy.
|
||||||
*
|
*
|
||||||
@ -967,6 +1108,8 @@ VOID FspFileSystemSetOperationGuardStrategy(FSP_FILE_SYSTEM *FileSystem,
|
|||||||
{
|
{
|
||||||
FileSystem->OpGuardStrategy = GuardStrategy;
|
FileSystem->OpGuardStrategy = GuardStrategy;
|
||||||
}
|
}
|
||||||
|
FSP_API VOID FspFileSystemSetOperationGuardStrategyF(FSP_FILE_SYSTEM *FileSystem,
|
||||||
|
FSP_FILE_SYSTEM_OPERATION_GUARD_STRATEGY GuardStrategy);
|
||||||
static inline
|
static inline
|
||||||
VOID FspFileSystemSetOperation(FSP_FILE_SYSTEM *FileSystem,
|
VOID FspFileSystemSetOperation(FSP_FILE_SYSTEM *FileSystem,
|
||||||
ULONG Index,
|
ULONG Index,
|
||||||
@ -974,6 +1117,9 @@ VOID FspFileSystemSetOperation(FSP_FILE_SYSTEM *FileSystem,
|
|||||||
{
|
{
|
||||||
FileSystem->Operations[Index] = Operation;
|
FileSystem->Operations[Index] = Operation;
|
||||||
}
|
}
|
||||||
|
FSP_API VOID FspFileSystemSetOperationF(FSP_FILE_SYSTEM *FileSystem,
|
||||||
|
ULONG Index,
|
||||||
|
FSP_FILE_SYSTEM_OPERATION *Operation);
|
||||||
static inline
|
static inline
|
||||||
VOID FspFileSystemGetDispatcherResult(FSP_FILE_SYSTEM *FileSystem,
|
VOID FspFileSystemGetDispatcherResult(FSP_FILE_SYSTEM *FileSystem,
|
||||||
NTSTATUS *PDispatcherResult)
|
NTSTATUS *PDispatcherResult)
|
||||||
@ -982,6 +1128,8 @@ VOID FspFileSystemGetDispatcherResult(FSP_FILE_SYSTEM *FileSystem,
|
|||||||
*PDispatcherResult = FileSystem->DispatcherResult;
|
*PDispatcherResult = FileSystem->DispatcherResult;
|
||||||
MemoryBarrier();
|
MemoryBarrier();
|
||||||
}
|
}
|
||||||
|
FSP_API VOID FspFileSystemGetDispatcherResultF(FSP_FILE_SYSTEM *FileSystem,
|
||||||
|
NTSTATUS *PDispatcherResult);
|
||||||
static inline
|
static inline
|
||||||
VOID FspFileSystemSetDispatcherResult(FSP_FILE_SYSTEM *FileSystem,
|
VOID FspFileSystemSetDispatcherResult(FSP_FILE_SYSTEM *FileSystem,
|
||||||
NTSTATUS DispatcherResult)
|
NTSTATUS DispatcherResult)
|
||||||
@ -990,12 +1138,16 @@ VOID FspFileSystemSetDispatcherResult(FSP_FILE_SYSTEM *FileSystem,
|
|||||||
return;
|
return;
|
||||||
InterlockedCompareExchange(&FileSystem->DispatcherResult, DispatcherResult, 0);
|
InterlockedCompareExchange(&FileSystem->DispatcherResult, DispatcherResult, 0);
|
||||||
}
|
}
|
||||||
|
FSP_API VOID FspFileSystemSetDispatcherResultF(FSP_FILE_SYSTEM *FileSystem,
|
||||||
|
NTSTATUS DispatcherResult);
|
||||||
static inline
|
static inline
|
||||||
VOID FspFileSystemSetDebugLog(FSP_FILE_SYSTEM *FileSystem,
|
VOID FspFileSystemSetDebugLog(FSP_FILE_SYSTEM *FileSystem,
|
||||||
UINT32 DebugLog)
|
UINT32 DebugLog)
|
||||||
{
|
{
|
||||||
FileSystem->DebugLog = DebugLog;
|
FileSystem->DebugLog = DebugLog;
|
||||||
}
|
}
|
||||||
|
FSP_API VOID FspFileSystemSetDebugLogF(FSP_FILE_SYSTEM *FileSystem,
|
||||||
|
UINT32 DebugLog);
|
||||||
static inline
|
static inline
|
||||||
BOOLEAN FspFileSystemIsOperationCaseSensitive(VOID)
|
BOOLEAN FspFileSystemIsOperationCaseSensitive(VOID)
|
||||||
{
|
{
|
||||||
@ -1004,6 +1156,29 @@ BOOLEAN FspFileSystemIsOperationCaseSensitive(VOID)
|
|||||||
FspFsctlTransactCreateKind == Request->Kind && Request->Req.Create.CaseSensitive ||
|
FspFsctlTransactCreateKind == Request->Kind && Request->Req.Create.CaseSensitive ||
|
||||||
FspFsctlTransactQueryDirectoryKind == Request->Kind && Request->Req.QueryDirectory.CaseSensitive;
|
FspFsctlTransactQueryDirectoryKind == Request->Kind && Request->Req.QueryDirectory.CaseSensitive;
|
||||||
}
|
}
|
||||||
|
FSP_API BOOLEAN FspFileSystemIsOperationCaseSensitiveF(VOID);
|
||||||
|
/**
|
||||||
|
* Gets the originating process ID.
|
||||||
|
*
|
||||||
|
* Valid only during Create, Open and Rename requests when the target exists.
|
||||||
|
*/
|
||||||
|
static inline
|
||||||
|
UINT32 FspFileSystemOperationProcessId(VOID)
|
||||||
|
{
|
||||||
|
FSP_FSCTL_TRANSACT_REQ *Request = FspFileSystemGetOperationContext()->Request;
|
||||||
|
switch (Request->Kind)
|
||||||
|
{
|
||||||
|
case FspFsctlTransactCreateKind:
|
||||||
|
return FSP_FSCTL_TRANSACT_REQ_TOKEN_PID(Request->Req.Create.AccessToken);
|
||||||
|
case FspFsctlTransactSetInformationKind:
|
||||||
|
if (10/*FileRenameInformation*/ == Request->Req.SetInformation.FileInformationClass)
|
||||||
|
return FSP_FSCTL_TRANSACT_REQ_TOKEN_PID(Request->Req.SetInformation.Info.Rename.AccessToken);
|
||||||
|
/* fall through! */
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FSP_API UINT32 FspFileSystemOperationProcessIdF(VOID);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Operations
|
* Operations
|
||||||
@ -1038,6 +1213,8 @@ FSP_API NTSTATUS FspFileSystemOpQueryDirectory(FSP_FILE_SYSTEM *FileSystem,
|
|||||||
FSP_FSCTL_TRANSACT_REQ *Request, FSP_FSCTL_TRANSACT_RSP *Response);
|
FSP_FSCTL_TRANSACT_REQ *Request, FSP_FSCTL_TRANSACT_RSP *Response);
|
||||||
FSP_API NTSTATUS FspFileSystemOpFileSystemControl(FSP_FILE_SYSTEM *FileSystem,
|
FSP_API NTSTATUS FspFileSystemOpFileSystemControl(FSP_FILE_SYSTEM *FileSystem,
|
||||||
FSP_FSCTL_TRANSACT_REQ *Request, FSP_FSCTL_TRANSACT_RSP *Response);
|
FSP_FSCTL_TRANSACT_REQ *Request, FSP_FSCTL_TRANSACT_RSP *Response);
|
||||||
|
FSP_API NTSTATUS FspFileSystemOpDeviceControl(FSP_FILE_SYSTEM *FileSystem,
|
||||||
|
FSP_FSCTL_TRANSACT_REQ *Request, FSP_FSCTL_TRANSACT_RSP *Response);
|
||||||
FSP_API NTSTATUS FspFileSystemOpQuerySecurity(FSP_FILE_SYSTEM *FileSystem,
|
FSP_API NTSTATUS FspFileSystemOpQuerySecurity(FSP_FILE_SYSTEM *FileSystem,
|
||||||
FSP_FSCTL_TRANSACT_REQ *Request, FSP_FSCTL_TRANSACT_RSP *Response);
|
FSP_FSCTL_TRANSACT_REQ *Request, FSP_FSCTL_TRANSACT_RSP *Response);
|
||||||
FSP_API NTSTATUS FspFileSystemOpSetSecurity(FSP_FILE_SYSTEM *FileSystem,
|
FSP_API NTSTATUS FspFileSystemOpSetSecurity(FSP_FILE_SYSTEM *FileSystem,
|
||||||
@ -1257,6 +1434,19 @@ FSP_API NTSTATUS FspFileSystemCanReplaceReparsePoint(
|
|||||||
FSP_API BOOLEAN FspFileSystemAddStreamInfo(FSP_FSCTL_STREAM_INFO *StreamInfo,
|
FSP_API BOOLEAN FspFileSystemAddStreamInfo(FSP_FSCTL_STREAM_INFO *StreamInfo,
|
||||||
PVOID Buffer, ULONG Length, PULONG PBytesTransferred);
|
PVOID Buffer, ULONG Length, PULONG PBytesTransferred);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Directory buffering
|
||||||
|
*/
|
||||||
|
FSP_API BOOLEAN FspFileSystemAcquireDirectoryBuffer(PVOID *PDirBuffer,
|
||||||
|
BOOLEAN Reset, PNTSTATUS PResult);
|
||||||
|
FSP_API BOOLEAN FspFileSystemFillDirectoryBuffer(PVOID *PDirBuffer,
|
||||||
|
FSP_FSCTL_DIR_INFO *DirInfo, PNTSTATUS PResult);
|
||||||
|
FSP_API VOID FspFileSystemReleaseDirectoryBuffer(PVOID *PDirBuffer);
|
||||||
|
FSP_API VOID FspFileSystemReadDirectoryBuffer(PVOID *PDirBuffer,
|
||||||
|
PWSTR Marker,
|
||||||
|
PVOID Buffer, ULONG Length, PULONG PBytesTransferred);
|
||||||
|
FSP_API VOID FspFileSystemDeleteDirectoryBuffer(PVOID *PDirBuffer);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Security
|
* Security
|
||||||
*/
|
*/
|
||||||
@ -1354,6 +1544,23 @@ NTSTATUS FspPosixMapPosixToWindowsPath(const char *PosixPath, PWSTR *PWindowsPat
|
|||||||
return FspPosixMapPosixToWindowsPathEx(PosixPath, PWindowsPath, TRUE);
|
return FspPosixMapPosixToWindowsPathEx(PosixPath, PWindowsPath, TRUE);
|
||||||
}
|
}
|
||||||
FSP_API VOID FspPosixDeletePath(void *Path);
|
FSP_API VOID FspPosixDeletePath(void *Path);
|
||||||
|
FSP_API VOID FspPosixEncodeWindowsPath(PWSTR WindowsPath, ULONG Size);
|
||||||
|
FSP_API VOID FspPosixDecodeWindowsPath(PWSTR WindowsPath, ULONG Size);
|
||||||
|
static inline
|
||||||
|
VOID FspPosixFileTimeToUnixTime(UINT64 FileTime0, __int3264 UnixTime[2])
|
||||||
|
{
|
||||||
|
INT64 FileTime = (INT64)FileTime0 - 116444736000000000LL;
|
||||||
|
UnixTime[0] = (__int3264)(FileTime / 10000000);
|
||||||
|
UnixTime[1] = (__int3264)(FileTime % 10000000 * 100);
|
||||||
|
/* may produce negative nsec for times before UNIX epoch; strictly speaking this is incorrect */
|
||||||
|
}
|
||||||
|
static inline
|
||||||
|
VOID FspPosixUnixTimeToFileTime(const __int3264 UnixTime[2], PUINT64 PFileTime)
|
||||||
|
{
|
||||||
|
INT64 FileTime = (INT64)UnixTime[0] * 10000000 + (INT64)UnixTime[1] / 100 +
|
||||||
|
116444736000000000LL;
|
||||||
|
*PFileTime = FileTime;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Path Handling
|
* Path Handling
|
||||||
@ -1542,6 +1749,19 @@ FSP_API VOID FspServiceStop(FSP_SERVICE *Service);
|
|||||||
* TRUE if the process is running in running user interactive mode.
|
* TRUE if the process is running in running user interactive mode.
|
||||||
*/
|
*/
|
||||||
FSP_API BOOLEAN FspServiceIsInteractive(VOID);
|
FSP_API BOOLEAN FspServiceIsInteractive(VOID);
|
||||||
|
/**
|
||||||
|
* Check if the supplied token is from the service context.
|
||||||
|
*
|
||||||
|
* @param Token
|
||||||
|
* Token to check. Pass NULL to check the current process token.
|
||||||
|
* @param PIsLocalSystem
|
||||||
|
* Pointer to a boolean that will receive a TRUE value if the token belongs to LocalSystem
|
||||||
|
* and FALSE otherwise. May be NULL.
|
||||||
|
* @return
|
||||||
|
* STATUS_SUCCESS if the token is from the service context. STATUS_ACCESS_DENIED if it is not.
|
||||||
|
* Other error codes are possible.
|
||||||
|
*/
|
||||||
|
FSP_API NTSTATUS FspServiceContextCheck(HANDLE Token, PBOOLEAN PIsLocalSystem);
|
||||||
/**
|
/**
|
||||||
* Log a service message.
|
* Log a service message.
|
||||||
*
|
*
|
||||||
@ -1567,6 +1787,7 @@ FSP_API VOID FspEventLogV(ULONG Type, PWSTR Format, va_list ap);
|
|||||||
FSP_API VOID FspDebugLogSetHandle(HANDLE Handle);
|
FSP_API VOID FspDebugLogSetHandle(HANDLE Handle);
|
||||||
FSP_API VOID FspDebugLog(const char *Format, ...);
|
FSP_API VOID FspDebugLog(const char *Format, ...);
|
||||||
FSP_API VOID FspDebugLogSD(const char *Format, PSECURITY_DESCRIPTOR SecurityDescriptor);
|
FSP_API VOID FspDebugLogSD(const char *Format, PSECURITY_DESCRIPTOR SecurityDescriptor);
|
||||||
|
FSP_API VOID FspDebugLogSid(const char *format, PSID Sid);
|
||||||
FSP_API VOID FspDebugLogFT(const char *Format, PFILETIME FileTime);
|
FSP_API VOID FspDebugLogFT(const char *Format, PFILETIME FileTime);
|
||||||
FSP_API VOID FspDebugLogRequest(FSP_FSCTL_TRANSACT_REQ *Request);
|
FSP_API VOID FspDebugLogRequest(FSP_FSCTL_TRANSACT_REQ *Request);
|
||||||
FSP_API VOID FspDebugLogResponse(FSP_FSCTL_TRANSACT_RSP *Response);
|
FSP_API VOID FspDebugLogResponse(FSP_FSCTL_TRANSACT_RSP *Response);
|
||||||
@ -1574,6 +1795,75 @@ FSP_API NTSTATUS FspCallNamedPipeSecurely(PWSTR PipeName,
|
|||||||
PVOID InBuffer, ULONG InBufferSize, PVOID OutBuffer, ULONG OutBufferSize,
|
PVOID InBuffer, ULONG InBufferSize, PVOID OutBuffer, ULONG OutBufferSize,
|
||||||
PULONG PBytesTransferred, ULONG Timeout,
|
PULONG PBytesTransferred, ULONG Timeout,
|
||||||
PSID Sid);
|
PSID Sid);
|
||||||
|
FSP_API NTSTATUS FspCallNamedPipeSecurelyEx(PWSTR PipeName,
|
||||||
|
PVOID InBuffer, ULONG InBufferSize, PVOID OutBuffer, ULONG OutBufferSize,
|
||||||
|
PULONG PBytesTransferred, ULONG Timeout, BOOLEAN AllowImpersonation,
|
||||||
|
PSID Sid);
|
||||||
|
FSP_API NTSTATUS FspVersion(PUINT32 PVersion);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Delay load
|
||||||
|
*/
|
||||||
|
static inline
|
||||||
|
NTSTATUS FspLoad(PVOID *PModule)
|
||||||
|
{
|
||||||
|
#if defined(_WIN64)
|
||||||
|
#define FSP_DLLNAME "winfsp-x64.dll"
|
||||||
|
#else
|
||||||
|
#define FSP_DLLNAME "winfsp-x86.dll"
|
||||||
|
#endif
|
||||||
|
#define FSP_DLLPATH "bin\\" FSP_DLLNAME
|
||||||
|
|
||||||
|
WINADVAPI
|
||||||
|
LSTATUS
|
||||||
|
APIENTRY
|
||||||
|
RegGetValueW(
|
||||||
|
HKEY hkey,
|
||||||
|
LPCWSTR lpSubKey,
|
||||||
|
LPCWSTR lpValue,
|
||||||
|
DWORD dwFlags,
|
||||||
|
LPDWORD pdwType,
|
||||||
|
PVOID pvData,
|
||||||
|
LPDWORD pcbData);
|
||||||
|
|
||||||
|
WCHAR PathBuf[MAX_PATH];
|
||||||
|
DWORD Size;
|
||||||
|
HKEY RegKey;
|
||||||
|
LONG Result;
|
||||||
|
HMODULE Module;
|
||||||
|
|
||||||
|
if (0 != PModule)
|
||||||
|
*PModule = 0;
|
||||||
|
|
||||||
|
Module = LoadLibraryW(L"" FSP_DLLNAME);
|
||||||
|
if (0 == Module)
|
||||||
|
{
|
||||||
|
Result = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"Software\\WinFsp",
|
||||||
|
0, KEY_READ | KEY_WOW64_32KEY, &RegKey);
|
||||||
|
if (ERROR_SUCCESS == Result)
|
||||||
|
{
|
||||||
|
Size = sizeof PathBuf - sizeof L"" FSP_DLLPATH + sizeof(WCHAR);
|
||||||
|
Result = RegGetValueW(RegKey, 0, L"InstallDir",
|
||||||
|
RRF_RT_REG_SZ, 0, PathBuf, &Size);
|
||||||
|
RegCloseKey(RegKey);
|
||||||
|
}
|
||||||
|
if (ERROR_SUCCESS != Result)
|
||||||
|
return STATUS_OBJECT_NAME_NOT_FOUND;
|
||||||
|
|
||||||
|
RtlCopyMemory(PathBuf + (Size / sizeof(WCHAR) - 1), L"" FSP_DLLPATH, sizeof L"" FSP_DLLPATH);
|
||||||
|
Module = LoadLibraryW(PathBuf);
|
||||||
|
if (0 == Module)
|
||||||
|
return STATUS_DLL_NOT_FOUND;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (0 != PModule)
|
||||||
|
*PModule = Module;
|
||||||
|
|
||||||
|
return STATUS_SUCCESS;
|
||||||
|
|
||||||
|
#undef FSP_DLLNAME
|
||||||
|
#undef FSP_DLLPATH
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
1312
inc/winfsp/winfsp.hpp
Normal file
1
opt/cygfuse/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
build
|
@ -1,20 +1,59 @@
|
|||||||
Version = $(shell sed -n '/^VERSION=/s/VERSION=\(.*\)/\1/p' fuse.cygport)
|
Arch = $(shell uname -m)
|
||||||
#Debug = -g
|
Build = build
|
||||||
|
|
||||||
cygfuse-$(Version).dll libfuse-$(Version).dll.a fuse.pc: cygfuse.c fuse.pc.in
|
.PHONY: usage
|
||||||
gcc $(Debug) -shared -o cygfuse-$(Version).dll -Wl,--out-implib=libfuse-$(Version).dll.a -I../../inc/fuse cygfuse.c
|
usage:
|
||||||
[ -n "$(Debug)" ] || strip cygfuse-$(Version).dll
|
@echo "make cygport|dist" 1>&2
|
||||||
sed "s/@Version@/$(Version)/g" fuse.pc.in > fuse.pc
|
@exit 2
|
||||||
|
|
||||||
cygfuse-test.exe: cygfuse-test.c cygfuse-$(Version).dll libfuse-$(Version).dll.a
|
.PHONY: cygport dist clean
|
||||||
gcc $(Debug) -o cygfuse-test.exe -I../../inc/fuse -DCYGFUSE cygfuse-test.c -L$(PWD) -lfuse-$(Version)
|
cygport: clean cygport2 cygport3
|
||||||
|
dist: cygport dist2 dist3
|
||||||
|
clean:
|
||||||
|
rm -rf $(Build)
|
||||||
|
|
||||||
cygport:
|
.PHONY: cygport2
|
||||||
git clean -dfx
|
cygport2: $(Build)/winfsp-work-$(Arch).tar.gz
|
||||||
(\
|
cp fuse/fuse.cygport $(Build)/fuse.cygport
|
||||||
cd `git rev-parse --show-toplevel` &&\
|
CYGPORT_SRC_URI=winfsp-work-$(Arch).tar.gz CYGPORT_SRC_DIR=winfsp-work-$(Arch) \
|
||||||
Stash=`git stash create` &&\
|
cygport $(Build)/fuse.cygport download prep compile install package
|
||||||
git archive --prefix=winfsp-work/ --format=tar.gz $${Stash:-HEAD}\
|
|
||||||
> opt/cygfuse/winfsp-work.tar.gz\
|
.PHONY: cygport3
|
||||||
)
|
cygport3: $(Build)/winfsp-work-$(Arch).tar.gz
|
||||||
CYGPORT_SRC_URI=winfsp-work.tar.gz CYGPORT_SRC_DIR=winfsp-work cygport fuse.cygport download prep compile install package
|
cp fuse3/fuse3.cygport $(Build)/fuse3.cygport
|
||||||
|
CYGPORT_SRC_URI=winfsp-work-$(Arch).tar.gz CYGPORT_SRC_DIR=winfsp-work-$(Arch) \
|
||||||
|
cygport $(Build)/fuse3.cygport download prep compile install package
|
||||||
|
|
||||||
|
$(Build)/winfsp-work-$(Arch).tar.gz:
|
||||||
|
mkdir -p $(Build)
|
||||||
|
( \
|
||||||
|
cd `git rev-parse --show-toplevel` && \
|
||||||
|
Stash=`git stash create` && \
|
||||||
|
git archive --prefix=winfsp-work-$(Arch)/ --format=tar.gz $${Stash:-HEAD} \
|
||||||
|
) > $(Build)/winfsp-work-$(Arch).tar.gz
|
||||||
|
|
||||||
|
.PHONY: dist2
|
||||||
|
dist2: cygport2
|
||||||
|
case $(Arch) in \
|
||||||
|
x86_64) \
|
||||||
|
mkdir -p dist/x64 && \
|
||||||
|
rm -f dist/x64/fuse-*[0-9].tar.xz && \
|
||||||
|
cp build/fuse-*[0-9].$(Arch)/dist/fuse/fuse-*[0-9].tar.xz dist/x64 ;; \
|
||||||
|
i686) \
|
||||||
|
mkdir -p dist/x86 && \
|
||||||
|
rm -f dist/x86/fuse-*[0-9].tar.xz && \
|
||||||
|
cp build/fuse-*[0-9].$(Arch)/dist/fuse/fuse-*[0-9].tar.xz dist/x86 ;; \
|
||||||
|
esac
|
||||||
|
|
||||||
|
.PHONY: dist3
|
||||||
|
dist3: cygport3
|
||||||
|
case $(Arch) in \
|
||||||
|
x86_64) \
|
||||||
|
mkdir -p dist/x64 && \
|
||||||
|
rm -f dist/x64/fuse3-*[0-9].tar.xz && \
|
||||||
|
cp build/fuse3-*[0-9].$(Arch)/dist/fuse3/fuse3-*[0-9].tar.xz dist/x64 ;; \
|
||||||
|
i686) \
|
||||||
|
mkdir -p dist/x86 && \
|
||||||
|
rm -f dist/x86/fuse3-*[0-9].tar.xz && \
|
||||||
|
cp build/fuse3-*[0-9].$(Arch)/dist/fuse3/fuse3-*[0-9].tar.xz dist/x86 ;; \
|
||||||
|
esac
|
||||||
|
16
opt/cygfuse/dist/install.sh
vendored
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
cd "$(dirname "$0")"
|
||||||
|
case $(uname -m) in
|
||||||
|
x86_64)
|
||||||
|
tar -C/ -xaf x64/fuse-*.tar.xz
|
||||||
|
tar -C/ -xaf x64/fuse3-*.tar.xz
|
||||||
|
;;
|
||||||
|
i686)
|
||||||
|
tar -C/ -xaf x86/fuse-*.tar.xz
|
||||||
|
tar -C/ -xaf x86/fuse3-*.tar.xz
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo unsupported architecture 1>&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
echo FUSE for Cygwin installed.
|
16
opt/cygfuse/dist/uninstall.sh
vendored
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
cd "$(dirname "$0")"
|
||||||
|
case $(uname -m) in
|
||||||
|
x86_64)
|
||||||
|
tar -taf x64/fuse-*.tar.xz | sed -e '/\/$/d' -e 's/.*/\/&/' | xargs rm -f
|
||||||
|
tar -taf x64/fuse3-*.tar.xz | sed -e '/\/$/d' -e 's/.*/\/&/' | xargs rm -f
|
||||||
|
;;
|
||||||
|
i686)
|
||||||
|
tar -taf x86/fuse-*.tar.xz | sed -e '/\/$/d' -e 's/.*/\/&/' | xargs rm -f
|
||||||
|
tar -taf x86/fuse3-*.tar.xz | sed -e '/\/$/d' -e 's/.*/\/&/' | xargs rm -f
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo unsupported architecture 1>&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
echo FUSE for Cygwin uninstalled.
|
BIN
opt/cygfuse/dist/x64/fuse-2.8-9.tar.xz
vendored
Normal file
BIN
opt/cygfuse/dist/x64/fuse3-3.2-1.tar.xz
vendored
Normal file
BIN
opt/cygfuse/dist/x86/fuse-2.8-9.tar.xz
vendored
Normal file
BIN
opt/cygfuse/dist/x86/fuse3-3.2-1.tar.xz
vendored
Normal file
29
opt/cygfuse/fuse/Makefile
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
Version = $(shell sed -n '/^VERSION=/s/VERSION=\(.*\)/\1/p' fuse.cygport)
|
||||||
|
Arch = $(shell uname -m)
|
||||||
|
Build = build/$(Arch)
|
||||||
|
#Debug = -g
|
||||||
|
|
||||||
|
.PHONY: build test
|
||||||
|
build: $(Build)/cygfuse-$(Version).dll $(Build)/fuse.pc
|
||||||
|
test: $(Build)/cygfuse-test.exe
|
||||||
|
|
||||||
|
$(Build)/cygfuse-$(Version).dll: cygfuse.c fuse.cygport
|
||||||
|
@mkdir -p $(Build)
|
||||||
|
gcc $(Debug) \
|
||||||
|
-shared -o $(Build)/cygfuse-$(Version).dll \
|
||||||
|
-Wl,--out-implib=$(Build)/libfuse-$(Version).dll.a \
|
||||||
|
-I../../../inc/fuse \
|
||||||
|
cygfuse.c
|
||||||
|
[ -n "$(Debug)" ] || strip $(Build)/cygfuse-$(Version).dll
|
||||||
|
|
||||||
|
$(Build)/fuse.pc: fuse.pc.in fuse.cygport
|
||||||
|
@mkdir -p $(Build)
|
||||||
|
sed "s/@Version@/$(Version)/g" fuse.pc.in > $(Build)/fuse.pc
|
||||||
|
|
||||||
|
$(Build)/cygfuse-test.exe: cygfuse-test.c $(Build)/cygfuse-$(Version).dll
|
||||||
|
@mkdir -p $(Build)
|
||||||
|
gcc $(Debug) \
|
||||||
|
-o $(Build)/cygfuse-test.exe \
|
||||||
|
-I../../../inc/fuse -DCYGFUSE \
|
||||||
|
cygfuse-test.c \
|
||||||
|
-L$(PWD)/$(Build) -lfuse-$(Version)
|
@ -1,7 +1,7 @@
|
|||||||
/**
|
/**
|
||||||
* @file cygfuse/cygfuse.c
|
* @file fuse/cygfuse.c
|
||||||
*
|
*
|
||||||
* @copyright 2015-2016 Bill Zissimopoulos
|
* @copyright 2015-2018 Bill Zissimopoulos
|
||||||
*/
|
*/
|
||||||
/*
|
/*
|
||||||
* This file is part of WinFsp.
|
* This file is part of WinFsp.
|
||||||
@ -10,29 +10,50 @@
|
|||||||
* General Public License version 3 as published by the Free Software
|
* General Public License version 3 as published by the Free Software
|
||||||
* Foundation.
|
* Foundation.
|
||||||
*
|
*
|
||||||
* Licensees holding a valid commercial license may use this file in
|
* Licensees holding a valid commercial license may use this software
|
||||||
* accordance with the commercial license agreement provided with the
|
* in accordance with the commercial license agreement provided in
|
||||||
* software.
|
* conjunction with the software. The terms and conditions of any such
|
||||||
|
* commercial license agreement shall govern, supersede, and render
|
||||||
|
* ineffective any application of the GPLv3 license to this software,
|
||||||
|
* notwithstanding of any reference thereto in the software or
|
||||||
|
* associated repository.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <dlfcn.h>
|
#include <dlfcn.h>
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <sys/cygwin.h>
|
#include <sys/cygwin.h>
|
||||||
|
|
||||||
|
static void *cygfuse_init_slow(int force);
|
||||||
static void *cygfuse_init_winfsp();
|
static void *cygfuse_init_winfsp();
|
||||||
static void *cygfuse_init_fail();
|
|
||||||
|
|
||||||
static pthread_mutex_t cygfuse_mutex = PTHREAD_MUTEX_INITIALIZER;
|
static pthread_mutex_t cygfuse_mutex = PTHREAD_MUTEX_INITIALIZER;
|
||||||
static void *cygfuse_handle = 0;
|
static void *cygfuse_handle = 0;
|
||||||
|
|
||||||
static inline void cygfuse_init(int force)
|
static inline void *cygfuse_init_fast(void)
|
||||||
{
|
{
|
||||||
|
void *handle = cygfuse_handle;
|
||||||
|
__sync_synchronize(); /* memory barrier */
|
||||||
|
if (0 == handle)
|
||||||
|
handle = cygfuse_init_slow(0);
|
||||||
|
return handle;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void *cygfuse_init_slow(int force)
|
||||||
|
{
|
||||||
|
void *handle;
|
||||||
pthread_mutex_lock(&cygfuse_mutex);
|
pthread_mutex_lock(&cygfuse_mutex);
|
||||||
if (force || 0 == cygfuse_handle)
|
handle = cygfuse_handle;
|
||||||
cygfuse_handle = cygfuse_init_winfsp();
|
if (force || 0 == handle)
|
||||||
|
{
|
||||||
|
handle = cygfuse_init_winfsp();
|
||||||
|
__sync_synchronize(); /* memory barrier */
|
||||||
|
cygfuse_handle = handle;
|
||||||
|
}
|
||||||
pthread_mutex_unlock(&cygfuse_mutex);
|
pthread_mutex_unlock(&cygfuse_mutex);
|
||||||
|
return handle;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -50,7 +71,7 @@ static inline int cygfuse_daemon(int nochdir, int noclose)
|
|||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
/* force reload of WinFsp DLL to workaround fork() problems */
|
/* force reload of WinFsp DLL to workaround fork() problems */
|
||||||
cygfuse_init(1);
|
cygfuse_init_slow(1);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -58,7 +79,7 @@ static inline int cygfuse_daemon(int nochdir, int noclose)
|
|||||||
|
|
||||||
#define FSP_FUSE_API static
|
#define FSP_FUSE_API static
|
||||||
#define FSP_FUSE_API_NAME(api) (* pfn_ ## api)
|
#define FSP_FUSE_API_NAME(api) (* pfn_ ## api)
|
||||||
#define FSP_FUSE_API_CALL(api) (cygfuse_init(0), pfn_ ## api)
|
#define FSP_FUSE_API_CALL(api) (cygfuse_init_fast(), pfn_ ## api)
|
||||||
#define FSP_FUSE_SYM(proto, ...) __attribute__ ((visibility("default"))) proto { __VA_ARGS__ }
|
#define FSP_FUSE_SYM(proto, ...) __attribute__ ((visibility("default"))) proto { __VA_ARGS__ }
|
||||||
#include <fuse_common.h>
|
#include <fuse_common.h>
|
||||||
#include <fuse.h>
|
#include <fuse.h>
|
||||||
@ -74,6 +95,7 @@ static inline int cygfuse_daemon(int nochdir, int noclose)
|
|||||||
if (0 == (*(void **)&(pfn_ ## n) = dlsym(h, #n)))\
|
if (0 == (*(void **)&(pfn_ ## n) = dlsym(h, #n)))\
|
||||||
return cygfuse_init_fail();
|
return cygfuse_init_fail();
|
||||||
|
|
||||||
|
static void *cygfuse_init_fail();
|
||||||
static void *cygfuse_init_winfsp()
|
static void *cygfuse_init_winfsp()
|
||||||
{
|
{
|
||||||
void *h;
|
void *h;
|
||||||
@ -125,6 +147,7 @@ static void *cygfuse_init_winfsp()
|
|||||||
CYGFUSE_GET_API(h, fsp_fuse_loop);
|
CYGFUSE_GET_API(h, fsp_fuse_loop);
|
||||||
CYGFUSE_GET_API(h, fsp_fuse_loop_mt);
|
CYGFUSE_GET_API(h, fsp_fuse_loop_mt);
|
||||||
CYGFUSE_GET_API(h, fsp_fuse_exit);
|
CYGFUSE_GET_API(h, fsp_fuse_exit);
|
||||||
|
CYGFUSE_GET_API(h, fsp_fuse_exited);
|
||||||
CYGFUSE_GET_API(h, fsp_fuse_get_context);
|
CYGFUSE_GET_API(h, fsp_fuse_get_context);
|
||||||
|
|
||||||
/* fuse_opt.h */
|
/* fuse_opt.h */
|
||||||
@ -141,6 +164,7 @@ static void *cygfuse_init_winfsp()
|
|||||||
|
|
||||||
static void *cygfuse_init_fail()
|
static void *cygfuse_init_fail()
|
||||||
{
|
{
|
||||||
abort();
|
fprintf(stderr, "cygfuse: initialization failed: " CYGFUSE_WINFSP_NAME " not found\n");
|
||||||
|
exit(1);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
@ -1,9 +1,9 @@
|
|||||||
NAME="fuse"
|
NAME="fuse"
|
||||||
VERSION=2.8
|
VERSION=2.8
|
||||||
RELEASE=3
|
RELEASE=9
|
||||||
CATEGORY="Utils"
|
CATEGORY="Utils"
|
||||||
SUMMARY="WinFsp-FUSE compatibility layer"
|
SUMMARY="WinFsp FUSE compatibility layer"
|
||||||
DESCRIPTION="WinFsp-FUSE enables FUSE file systems to be run on Cygwin."
|
DESCRIPTION="Enables FUSE file systems to be run on Cygwin."
|
||||||
HOMEPAGE="http://www.secfs.net/winfsp/"
|
HOMEPAGE="http://www.secfs.net/winfsp/"
|
||||||
|
|
||||||
SRC_URI=${CYGPORT_SRC_URI:-"https://github.com/billziss-gh/winfsp/archive/master.tar.gz"}
|
SRC_URI=${CYGPORT_SRC_URI:-"https://github.com/billziss-gh/winfsp/archive/master.tar.gz"}
|
||||||
@ -12,7 +12,7 @@ SRC_DIR=${CYGPORT_SRC_DIR:-winfsp-master}
|
|||||||
src_compile()
|
src_compile()
|
||||||
{
|
{
|
||||||
lndirs
|
lndirs
|
||||||
cd ${B}/opt/cygfuse
|
cd ${B}/opt/cygfuse/fuse
|
||||||
make
|
make
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -25,7 +25,7 @@ src_install()
|
|||||||
doinclude fuse_opt.h
|
doinclude fuse_opt.h
|
||||||
doinclude winfsp_fuse.h
|
doinclude winfsp_fuse.h
|
||||||
|
|
||||||
cd ${B}/opt/cygfuse
|
cd ${B}/opt/cygfuse/fuse/build/$(ARCH)
|
||||||
dobin cygfuse-${VERSION}.dll
|
dobin cygfuse-${VERSION}.dll
|
||||||
dolib libfuse-${VERSION}.dll.a
|
dolib libfuse-${VERSION}.dll.a
|
||||||
dosym libfuse-${VERSION}.dll.a /usr/lib/libfuse.dll.a
|
dosym libfuse-${VERSION}.dll.a /usr/lib/libfuse.dll.a
|
29
opt/cygfuse/fuse3/Makefile
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
Version = $(shell sed -n '/^VERSION=/s/VERSION=\(.*\)/\1/p' fuse3.cygport)
|
||||||
|
Arch = $(shell uname -m)
|
||||||
|
Build = build/$(Arch)
|
||||||
|
#Debug = -g
|
||||||
|
|
||||||
|
.PHONY: build test
|
||||||
|
build: $(Build)/cygfuse-$(Version).dll $(Build)/fuse3.pc
|
||||||
|
test: $(Build)/cygfuse-test.exe
|
||||||
|
|
||||||
|
$(Build)/cygfuse-$(Version).dll: cygfuse.c fuse3.cygport
|
||||||
|
@mkdir -p $(Build)
|
||||||
|
gcc $(Debug) \
|
||||||
|
-shared -o $(Build)/cygfuse-$(Version).dll \
|
||||||
|
-Wl,--out-implib=$(Build)/libfuse-$(Version).dll.a \
|
||||||
|
-I../../../inc/fuse3 \
|
||||||
|
cygfuse.c
|
||||||
|
[ -n "$(Debug)" ] || strip $(Build)/cygfuse-$(Version).dll
|
||||||
|
|
||||||
|
$(Build)/fuse3.pc: fuse3.pc.in fuse3.cygport
|
||||||
|
@mkdir -p $(Build)
|
||||||
|
sed "s/@Version@/$(Version)/g" fuse3.pc.in > $(Build)/fuse3.pc
|
||||||
|
|
||||||
|
$(Build)/cygfuse-test.exe: cygfuse-test.c $(Build)/cygfuse-$(Version).dll
|
||||||
|
@mkdir -p $(Build)
|
||||||
|
gcc $(Debug) \
|
||||||
|
-o $(Build)/cygfuse-test.exe \
|
||||||
|
-I../../../inc/fuse3 -DCYGFUSE \
|
||||||
|
cygfuse-test.c \
|
||||||
|
-L$(PWD)/$(Build) -lfuse-$(Version)
|
6
opt/cygfuse/fuse3/cygfuse-test.c
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
#include <fuse.h>
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
return !(FUSE_VERSION == fuse_version());
|
||||||
|
}
|
173
opt/cygfuse/fuse3/cygfuse.c
Normal file
@ -0,0 +1,173 @@
|
|||||||
|
/**
|
||||||
|
* @file fuse3/cygfuse.c
|
||||||
|
*
|
||||||
|
* @copyright 2015-2018 Bill Zissimopoulos
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* This file is part of WinFsp.
|
||||||
|
*
|
||||||
|
* 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 software
|
||||||
|
* in accordance with the commercial license agreement provided in
|
||||||
|
* conjunction with the software. The terms and conditions of any such
|
||||||
|
* commercial license agreement shall govern, supersede, and render
|
||||||
|
* ineffective any application of the GPLv3 license to this software,
|
||||||
|
* notwithstanding of any reference thereto in the software or
|
||||||
|
* associated repository.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <dlfcn.h>
|
||||||
|
#include <pthread.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <sys/cygwin.h>
|
||||||
|
|
||||||
|
static void *cygfuse_init_slow(int force);
|
||||||
|
static void *cygfuse_init_winfsp();
|
||||||
|
|
||||||
|
static pthread_mutex_t cygfuse_mutex = PTHREAD_MUTEX_INITIALIZER;
|
||||||
|
static void *cygfuse_handle = 0;
|
||||||
|
|
||||||
|
static inline void *cygfuse_init_fast(void)
|
||||||
|
{
|
||||||
|
void *handle = cygfuse_handle;
|
||||||
|
__sync_synchronize(); /* memory barrier */
|
||||||
|
if (0 == handle)
|
||||||
|
handle = cygfuse_init_slow(0);
|
||||||
|
return handle;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void *cygfuse_init_slow(int force)
|
||||||
|
{
|
||||||
|
void *handle;
|
||||||
|
pthread_mutex_lock(&cygfuse_mutex);
|
||||||
|
handle = cygfuse_handle;
|
||||||
|
if (force || 0 == handle)
|
||||||
|
{
|
||||||
|
handle = cygfuse_init_winfsp();
|
||||||
|
__sync_synchronize(); /* memory barrier */
|
||||||
|
cygfuse_handle = handle;
|
||||||
|
}
|
||||||
|
pthread_mutex_unlock(&cygfuse_mutex);
|
||||||
|
return handle;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Unfortunately Cygwin fork is very fragile and cannot even correctly
|
||||||
|
* handle dlopen'ed DLL's if they are native (rather than Cygwin ones).
|
||||||
|
*
|
||||||
|
* So we have this very nasty hack where we reset the dlopen'ed handle
|
||||||
|
* immediately after daemonization. This will force cygfuse_init() to
|
||||||
|
* reload the WinFsp DLL and reset all API pointers in the daemonized
|
||||||
|
* process.
|
||||||
|
*/
|
||||||
|
static inline int cygfuse_daemon(int nochdir, int noclose)
|
||||||
|
{
|
||||||
|
if (-1 == daemon(nochdir, noclose))
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
/* force reload of WinFsp DLL to workaround fork() problems */
|
||||||
|
cygfuse_init_slow(1);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#define daemon cygfuse_daemon
|
||||||
|
|
||||||
|
#define FSP_FUSE_API static
|
||||||
|
#define FSP_FUSE_API_NAME(api) (* pfn_ ## api)
|
||||||
|
#define FSP_FUSE_API_CALL(api) (cygfuse_init_fast(), pfn_ ## api)
|
||||||
|
#define FSP_FUSE_SYM(proto, ...) __attribute__ ((visibility("default"))) proto { __VA_ARGS__ }
|
||||||
|
#include <fuse_common.h>
|
||||||
|
#include <fuse.h>
|
||||||
|
#include <fuse_opt.h>
|
||||||
|
|
||||||
|
#if defined(__LP64__)
|
||||||
|
#define CYGFUSE_WINFSP_NAME "winfsp-x64.dll"
|
||||||
|
#else
|
||||||
|
#define CYGFUSE_WINFSP_NAME "winfsp-x86.dll"
|
||||||
|
#endif
|
||||||
|
#define CYGFUSE_WINFSP_PATH "bin\\" CYGFUSE_WINFSP_NAME
|
||||||
|
#define CYGFUSE_GET_API(h, n) \
|
||||||
|
if (0 == (*(void **)&(pfn_ ## n) = dlsym(h, #n)))\
|
||||||
|
return cygfuse_init_fail();
|
||||||
|
|
||||||
|
static void *cygfuse_init_fail();
|
||||||
|
static void *cygfuse_init_winfsp()
|
||||||
|
{
|
||||||
|
void *h;
|
||||||
|
|
||||||
|
h = dlopen(CYGFUSE_WINFSP_NAME, RTLD_NOW);
|
||||||
|
if (0 == h)
|
||||||
|
{
|
||||||
|
char winpath[260], *psxpath;
|
||||||
|
int regfd, bytes;
|
||||||
|
|
||||||
|
regfd = open("/proc/registry32/HKEY_LOCAL_MACHINE/Software/WinFsp/InstallDir", O_RDONLY);
|
||||||
|
if (-1 == regfd)
|
||||||
|
return cygfuse_init_fail();
|
||||||
|
|
||||||
|
bytes = read(regfd, winpath, sizeof winpath - sizeof CYGFUSE_WINFSP_PATH);
|
||||||
|
close(regfd);
|
||||||
|
if (-1 == bytes || 0 == bytes)
|
||||||
|
return cygfuse_init_fail();
|
||||||
|
|
||||||
|
if ('\0' == winpath[bytes - 1])
|
||||||
|
bytes--;
|
||||||
|
memcpy(winpath + bytes, CYGFUSE_WINFSP_PATH, sizeof CYGFUSE_WINFSP_PATH);
|
||||||
|
|
||||||
|
psxpath = (char *)cygwin_create_path(CCP_WIN_A_TO_POSIX | CCP_PROC_CYGDRIVE, winpath);
|
||||||
|
if (0 == psxpath)
|
||||||
|
return cygfuse_init_fail();
|
||||||
|
|
||||||
|
h = dlopen(psxpath, RTLD_NOW);
|
||||||
|
free(psxpath);
|
||||||
|
if (0 == h)
|
||||||
|
return cygfuse_init_fail();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* winfsp_fuse.h */
|
||||||
|
CYGFUSE_GET_API(h, fsp_fuse_signal_handler);
|
||||||
|
|
||||||
|
/* fuse_common.h */
|
||||||
|
CYGFUSE_GET_API(h, fsp_fuse3_parse_conn_info_opts);
|
||||||
|
CYGFUSE_GET_API(h, fsp_fuse3_apply_conn_info_opts);
|
||||||
|
CYGFUSE_GET_API(h, fsp_fuse3_version);
|
||||||
|
CYGFUSE_GET_API(h, fsp_fuse3_pkgversion);
|
||||||
|
CYGFUSE_GET_API(h, fsp_fuse_ntstatus_from_errno);
|
||||||
|
|
||||||
|
/* fuse.h */
|
||||||
|
CYGFUSE_GET_API(h, fsp_fuse3_main_real);
|
||||||
|
CYGFUSE_GET_API(h, fsp_fuse3_lib_help);
|
||||||
|
CYGFUSE_GET_API(h, fsp_fuse3_new_30);
|
||||||
|
CYGFUSE_GET_API(h, fsp_fuse3_new);
|
||||||
|
CYGFUSE_GET_API(h, fsp_fuse3_destroy);
|
||||||
|
CYGFUSE_GET_API(h, fsp_fuse3_mount);
|
||||||
|
CYGFUSE_GET_API(h, fsp_fuse3_unmount);
|
||||||
|
CYGFUSE_GET_API(h, fsp_fuse3_loop);
|
||||||
|
CYGFUSE_GET_API(h, fsp_fuse3_loop_mt_31);
|
||||||
|
CYGFUSE_GET_API(h, fsp_fuse3_loop_mt);
|
||||||
|
CYGFUSE_GET_API(h, fsp_fuse3_exit);
|
||||||
|
CYGFUSE_GET_API(h, fsp_fuse3_get_context);
|
||||||
|
|
||||||
|
/* fuse_opt.h */
|
||||||
|
CYGFUSE_GET_API(h, fsp_fuse_opt_parse);
|
||||||
|
CYGFUSE_GET_API(h, fsp_fuse_opt_add_arg);
|
||||||
|
CYGFUSE_GET_API(h, fsp_fuse_opt_insert_arg);
|
||||||
|
CYGFUSE_GET_API(h, fsp_fuse_opt_free_args);
|
||||||
|
CYGFUSE_GET_API(h, fsp_fuse_opt_add_opt);
|
||||||
|
CYGFUSE_GET_API(h, fsp_fuse_opt_add_opt_escaped);
|
||||||
|
CYGFUSE_GET_API(h, fsp_fuse_opt_match);
|
||||||
|
|
||||||
|
return h;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void *cygfuse_init_fail()
|
||||||
|
{
|
||||||
|
fprintf(stderr, "cygfuse: initialization failed: " CYGFUSE_WINFSP_NAME " not found\n");
|
||||||
|
exit(1);
|
||||||
|
return 0;
|
||||||
|
}
|