mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-22 08:23:05 -05:00
Compare commits
9 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
4fdec4d37f | ||
|
2da97d48f5 | ||
|
7c5dc48414 | ||
|
93c057571a | ||
|
da16d0e6ea | ||
|
dbaee25ed2 | ||
|
2bf9a6c16e | ||
|
b058925692 | ||
|
507c794470 |
@ -1,6 +1,15 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
|
||||||
|
## v2.1B2 (2024 Beta2)
|
||||||
|
|
||||||
|
- [FIX] Fixes a rare BSOD on recent versions of Windows. See commit a482183 for details.
|
||||||
|
|
||||||
|
- [FIX] Fixes a rare problem when using `NtCreateFile` to perform "relative" opens on a network drive (see GitHub issue #561).
|
||||||
|
|
||||||
|
- [FIX] Fixes a racing issue with two processes competing to start the FSD discovered during testing.
|
||||||
|
|
||||||
|
|
||||||
## v2.1B1 (2024 Beta1)
|
## v2.1B1 (2024 Beta1)
|
||||||
|
|
||||||
- [FIX] Fixes a rare BSOD on recent versions of Windows. See commit a482183 for details.
|
- [FIX] Fixes a rare BSOD on recent versions of Windows. See commit a482183 for details.
|
||||||
|
@ -67,6 +67,7 @@ CONTRIBUTOR LIST
|
|||||||
|John Oberschelp |john at oberschelp.net
|
|John Oberschelp |john at oberschelp.net
|
||||||
|John Tyner |jtyner at gmail.com
|
|John Tyner |jtyner at gmail.com
|
||||||
|Konstantinos Karakostas |noiredev at protonmail.com
|
|Konstantinos Karakostas |noiredev at protonmail.com
|
||||||
|
|Naoki Ikeguchi |me at s6n.jp
|
||||||
|Paweł Wegner (Google LLC, https://google.com) |lemourin at google.com
|
|Paweł Wegner (Google LLC, https://google.com) |lemourin at google.com
|
||||||
|Pedro Frejo (Arpa System, https://arpasystem.com) |pedro.frejo at arpasystem.com
|
|Pedro Frejo (Arpa System, https://arpasystem.com) |pedro.frejo at arpasystem.com
|
||||||
|Ronny Chan |ronny at ronnychan.ca
|
|Ronny Chan |ronny at ronnychan.ca
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
<MyCanonicalVersion>2.1</MyCanonicalVersion>
|
<MyCanonicalVersion>2.1</MyCanonicalVersion>
|
||||||
|
|
||||||
<MyProductVersion>2024 Beta1</MyProductVersion>
|
<MyProductVersion>2024 Beta2</MyProductVersion>
|
||||||
<MyProductStage>Beta</MyProductStage>
|
<MyProductStage>Beta</MyProductStage>
|
||||||
|
|
||||||
<MyCrossCert>DigiCertGlobalG3CodeSigningECCSHA3842021CA1.cer</MyCrossCert>
|
<MyCrossCert>DigiCertGlobalG3CodeSigningECCSHA3842021CA1.cer</MyCrossCert>
|
||||||
|
@ -30,7 +30,6 @@ This document contains a list of known open-source file systems and file system
|
|||||||
- https://github.com/winfsp/cgofuse[Go: cgofuse] - Cross-platform FUSE library for Go
|
- https://github.com/winfsp/cgofuse[Go: cgofuse] - Cross-platform FUSE library for Go
|
||||||
- https://github.com/SerCeMan/jnr-fuse[Java: jnr-fuse] - FUSE implementation in Java using Java Native Runtime (JNR)
|
- https://github.com/SerCeMan/jnr-fuse[Java: jnr-fuse] - FUSE implementation in Java using Java Native Runtime (JNR)
|
||||||
- https://github.com/jnr-winfsp-team/jnr-winfsp[Java: jnr-winfsp] - A Java binding for WinFsp using Java Native Runtime (JNR)
|
- https://github.com/jnr-winfsp-team/jnr-winfsp[Java: jnr-winfsp] - A Java binding for WinFsp using Java Native Runtime (JNR)
|
||||||
- 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/billziss-gh/fusepy[Python: fusepy] - Simple ctypes bindings for FUSE
|
- https://github.com/billziss-gh/fusepy[Python: fusepy] - Simple ctypes bindings for FUSE
|
||||||
- https://github.com/pleiszenburg/refuse[Python: refuse] - Simple cross-plattform ctypes bindings for libfuse / FUSE for macOS / WinFsp
|
- https://github.com/pleiszenburg/refuse[Python: refuse] - Simple cross-plattform ctypes bindings for libfuse / FUSE for macOS / WinFsp
|
||||||
- https://github.com/Scille/winfspy[Python: winfspy] - WinFSP binding for Python
|
- https://github.com/Scille/winfspy[Python: winfspy] - WinFSP binding for Python
|
||||||
|
@ -27,6 +27,7 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#if !defined(WINFSP_DLL_INTERNAL)
|
#if !defined(WINFSP_DLL_INTERNAL)
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@ -298,6 +298,8 @@ static NTSTATUS FspFsvolCreateNoLock(
|
|||||||
ULONG CreateOptions = IrpSp->Parameters.Create.Options;
|
ULONG CreateOptions = IrpSp->Parameters.Create.Options;
|
||||||
USHORT FileAttributes = IrpSp->Parameters.Create.FileAttributes;
|
USHORT FileAttributes = IrpSp->Parameters.Create.FileAttributes;
|
||||||
PSECURITY_DESCRIPTOR SecurityDescriptor = AccessState->SecurityDescriptor;
|
PSECURITY_DESCRIPTOR SecurityDescriptor = AccessState->SecurityDescriptor;
|
||||||
|
BOOLEAN SecurityDescriptorRelative = 0 != SecurityDescriptor &&
|
||||||
|
BooleanFlagOn(((SECURITY_DESCRIPTOR *)SecurityDescriptor)->Control, SE_SELF_RELATIVE);
|
||||||
ULONG SecurityDescriptorSize = 0;
|
ULONG SecurityDescriptorSize = 0;
|
||||||
UINT64 AllocationSize = Irp->Overlay.AllocationSize.QuadPart;
|
UINT64 AllocationSize = Irp->Overlay.AllocationSize.QuadPart;
|
||||||
UINT64 AllocationUnit;
|
UINT64 AllocationUnit;
|
||||||
@ -406,7 +408,10 @@ static NTSTATUS FspFsvolCreateNoLock(
|
|||||||
if (!RtlValidSecurityDescriptor(SecurityDescriptor))
|
if (!RtlValidSecurityDescriptor(SecurityDescriptor))
|
||||||
return STATUS_INVALID_PARAMETER;
|
return STATUS_INVALID_PARAMETER;
|
||||||
#endif
|
#endif
|
||||||
SecurityDescriptorSize = RtlLengthSecurityDescriptor(SecurityDescriptor);
|
if (SecurityDescriptorRelative)
|
||||||
|
SecurityDescriptorSize = RtlLengthSecurityDescriptor(SecurityDescriptor);
|
||||||
|
else
|
||||||
|
RtlAbsoluteToSelfRelativeSD(SecurityDescriptor, 0, &SecurityDescriptorSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* align allocation size */
|
/* align allocation size */
|
||||||
@ -702,8 +707,18 @@ static NTSTATUS FspFsvolCreateNoLock(
|
|||||||
|
|
||||||
/* copy the security descriptor (if any) into the request */
|
/* copy the security descriptor (if any) into the request */
|
||||||
if (0 != SecurityDescriptorSize)
|
if (0 != SecurityDescriptorSize)
|
||||||
RtlCopyMemory(Request->Buffer + Request->Req.Create.SecurityDescriptor.Offset,
|
{
|
||||||
SecurityDescriptor, SecurityDescriptorSize);
|
if (SecurityDescriptorRelative)
|
||||||
|
RtlCopyMemory(
|
||||||
|
Request->Buffer + Request->Req.Create.SecurityDescriptor.Offset,
|
||||||
|
SecurityDescriptor,
|
||||||
|
SecurityDescriptorSize);
|
||||||
|
else
|
||||||
|
RtlAbsoluteToSelfRelativeSD(
|
||||||
|
SecurityDescriptor,
|
||||||
|
(PSECURITY_DESCRIPTOR)(Request->Buffer + Request->Req.Create.SecurityDescriptor.Offset),
|
||||||
|
&SecurityDescriptorSize);
|
||||||
|
}
|
||||||
|
|
||||||
/* copy the extra buffer (if any) into the request */
|
/* copy the extra buffer (if any) into the request */
|
||||||
if (0 != ExtraBuffer)
|
if (0 != ExtraBuffer)
|
||||||
|
@ -250,7 +250,7 @@ NTSTATUS FspMupHandleIrp(
|
|||||||
* Every other CREATE request must be forwarded to the appropriate fsvol device.
|
* Every other CREATE request must be forwarded to the appropriate fsvol device.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (0 != FileObject->RelatedFileObject)
|
while (0 != FileObject->RelatedFileObject)
|
||||||
FileObject = FileObject->RelatedFileObject;
|
FileObject = FileObject->RelatedFileObject;
|
||||||
|
|
||||||
FspFsmupDeviceLockPrefixTable(FsmupDeviceObject);
|
FspFsmupDeviceLockPrefixTable(FsmupDeviceObject);
|
||||||
|
@ -207,6 +207,8 @@ static NTSTATUS FspFsvolSetSecurity(
|
|||||||
FSP_FILE_DESC *FileDesc = FileObject->FsContext2;
|
FSP_FILE_DESC *FileDesc = FileObject->FsContext2;
|
||||||
SECURITY_INFORMATION SecurityInformation = IrpSp->Parameters.SetSecurity.SecurityInformation;
|
SECURITY_INFORMATION SecurityInformation = IrpSp->Parameters.SetSecurity.SecurityInformation;
|
||||||
PSECURITY_DESCRIPTOR SecurityDescriptor = IrpSp->Parameters.SetSecurity.SecurityDescriptor;
|
PSECURITY_DESCRIPTOR SecurityDescriptor = IrpSp->Parameters.SetSecurity.SecurityDescriptor;
|
||||||
|
BOOLEAN SecurityDescriptorRelative =
|
||||||
|
BooleanFlagOn(((SECURITY_DESCRIPTOR *)SecurityDescriptor)->Control, SE_SELF_RELATIVE);
|
||||||
ULONG SecurityDescriptorSize = 0;
|
ULONG SecurityDescriptorSize = 0;
|
||||||
|
|
||||||
ASSERT(FileNode == FileDesc->FileNode);
|
ASSERT(FileNode == FileDesc->FileNode);
|
||||||
@ -216,7 +218,10 @@ static NTSTATUS FspFsvolSetSecurity(
|
|||||||
if (0 == SecurityDescriptor || !RtlValidSecurityDescriptor(SecurityDescriptor))
|
if (0 == SecurityDescriptor || !RtlValidSecurityDescriptor(SecurityDescriptor))
|
||||||
return STATUS_INVALID_PARAMETER;
|
return STATUS_INVALID_PARAMETER;
|
||||||
#endif
|
#endif
|
||||||
SecurityDescriptorSize = RtlLengthSecurityDescriptor(SecurityDescriptor);
|
if (SecurityDescriptorRelative)
|
||||||
|
SecurityDescriptorSize = RtlLengthSecurityDescriptor(SecurityDescriptor);
|
||||||
|
else
|
||||||
|
RtlAbsoluteToSelfRelativeSD(SecurityDescriptor, 0, &SecurityDescriptorSize);
|
||||||
|
|
||||||
FspFileNodeAcquireExclusive(FileNode, Full);
|
FspFileNodeAcquireExclusive(FileNode, Full);
|
||||||
|
|
||||||
@ -236,7 +241,16 @@ static NTSTATUS FspFsvolSetSecurity(
|
|||||||
Request->Req.SetSecurity.SecurityInformation = SecurityInformation;
|
Request->Req.SetSecurity.SecurityInformation = SecurityInformation;
|
||||||
Request->Req.SetSecurity.SecurityDescriptor.Offset = 0;
|
Request->Req.SetSecurity.SecurityDescriptor.Offset = 0;
|
||||||
Request->Req.SetSecurity.SecurityDescriptor.Size = (UINT16)SecurityDescriptorSize;
|
Request->Req.SetSecurity.SecurityDescriptor.Size = (UINT16)SecurityDescriptorSize;
|
||||||
RtlCopyMemory(Request->Buffer, SecurityDescriptor, SecurityDescriptorSize);
|
if (SecurityDescriptorRelative)
|
||||||
|
RtlCopyMemory(
|
||||||
|
Request->Buffer,
|
||||||
|
SecurityDescriptor,
|
||||||
|
SecurityDescriptorSize);
|
||||||
|
else
|
||||||
|
RtlAbsoluteToSelfRelativeSD(
|
||||||
|
SecurityDescriptor,
|
||||||
|
(PSECURITY_DESCRIPTOR)Request->Buffer,
|
||||||
|
&SecurityDescriptorSize);
|
||||||
|
|
||||||
FspFileNodeSetOwner(FileNode, Full, Request);
|
FspFileNodeSetOwner(FileNode, Full, Request);
|
||||||
FspIopRequestContext(Request, RequestFileNode) = FileNode;
|
FspIopRequestContext(Request, RequestFileNode) = FileNode;
|
||||||
|
@ -304,6 +304,8 @@ function Submit-AssetsToHwapi {
|
|||||||
"WINDOWS_v100_ARM64_CO_FULL"
|
"WINDOWS_v100_ARM64_CO_FULL"
|
||||||
"WINDOWS_v100_X64_NI_FULL"
|
"WINDOWS_v100_X64_NI_FULL"
|
||||||
"WINDOWS_v100_ARM64_NI_FULL"
|
"WINDOWS_v100_ARM64_NI_FULL"
|
||||||
|
"WINDOWS_v100_X64_GE_FULL"
|
||||||
|
"WINDOWS_v100_ARM64_GE_FULL"
|
||||||
)
|
)
|
||||||
foreach ($Signature in $DocRequestedSignatures) {
|
foreach ($Signature in $DocRequestedSignatures) {
|
||||||
if ($RequestedSignatures -contains $Signature) {
|
if ($RequestedSignatures -contains $Signature) {
|
||||||
|
@ -16,7 +16,14 @@ int main()
|
|||||||
{
|
{
|
||||||
char pass[256];
|
char pass[256];
|
||||||
|
|
||||||
gets(pass);
|
fgets(pass, sizeof pass, stdin);
|
||||||
|
for (char *p = pass; *p; p++)
|
||||||
|
if ('\n' == *p)
|
||||||
|
{
|
||||||
|
*p = '\0';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (0 == strcmp("foobar", pass))
|
if (0 == strcmp("foobar", pass))
|
||||||
{
|
{
|
||||||
puts("OK");
|
puts("OK");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user