Compare commits

..

No commits in common. "master" and "v2.1B1" have entirely different histories.

10 changed files with 9 additions and 57 deletions

View File

@ -1,15 +1,6 @@
# 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.

View File

@ -67,7 +67,6 @@ 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

View File

@ -20,7 +20,7 @@
<MyCanonicalVersion>2.1</MyCanonicalVersion> <MyCanonicalVersion>2.1</MyCanonicalVersion>
<MyProductVersion>2024 Beta2</MyProductVersion> <MyProductVersion>2024 Beta1</MyProductVersion>
<MyProductStage>Beta</MyProductStage> <MyProductStage>Beta</MyProductStage>
<MyCrossCert>DigiCertGlobalG3CodeSigningECCSHA3842021CA1.cer</MyCrossCert> <MyCrossCert>DigiCertGlobalG3CodeSigningECCSHA3842021CA1.cer</MyCrossCert>

View File

@ -30,6 +30,7 @@ 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

View File

@ -27,7 +27,6 @@
#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

View File

@ -298,8 +298,6 @@ 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;
@ -408,10 +406,7 @@ static NTSTATUS FspFsvolCreateNoLock(
if (!RtlValidSecurityDescriptor(SecurityDescriptor)) if (!RtlValidSecurityDescriptor(SecurityDescriptor))
return STATUS_INVALID_PARAMETER; return STATUS_INVALID_PARAMETER;
#endif #endif
if (SecurityDescriptorRelative)
SecurityDescriptorSize = RtlLengthSecurityDescriptor(SecurityDescriptor); SecurityDescriptorSize = RtlLengthSecurityDescriptor(SecurityDescriptor);
else
RtlAbsoluteToSelfRelativeSD(SecurityDescriptor, 0, &SecurityDescriptorSize);
} }
/* align allocation size */ /* align allocation size */
@ -707,18 +702,8 @@ 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,
if (SecurityDescriptorRelative) SecurityDescriptor, SecurityDescriptorSize);
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)

View File

@ -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.
*/ */
while (0 != FileObject->RelatedFileObject) if (0 != FileObject->RelatedFileObject)
FileObject = FileObject->RelatedFileObject; FileObject = FileObject->RelatedFileObject;
FspFsmupDeviceLockPrefixTable(FsmupDeviceObject); FspFsmupDeviceLockPrefixTable(FsmupDeviceObject);

View File

@ -207,8 +207,6 @@ 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);
@ -218,10 +216,7 @@ static NTSTATUS FspFsvolSetSecurity(
if (0 == SecurityDescriptor || !RtlValidSecurityDescriptor(SecurityDescriptor)) if (0 == SecurityDescriptor || !RtlValidSecurityDescriptor(SecurityDescriptor))
return STATUS_INVALID_PARAMETER; return STATUS_INVALID_PARAMETER;
#endif #endif
if (SecurityDescriptorRelative)
SecurityDescriptorSize = RtlLengthSecurityDescriptor(SecurityDescriptor); SecurityDescriptorSize = RtlLengthSecurityDescriptor(SecurityDescriptor);
else
RtlAbsoluteToSelfRelativeSD(SecurityDescriptor, 0, &SecurityDescriptorSize);
FspFileNodeAcquireExclusive(FileNode, Full); FspFileNodeAcquireExclusive(FileNode, Full);
@ -241,16 +236,7 @@ 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;
if (SecurityDescriptorRelative) RtlCopyMemory(Request->Buffer, SecurityDescriptor, SecurityDescriptorSize);
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;

View File

@ -304,8 +304,6 @@ 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) {

View File

@ -16,14 +16,7 @@ int main()
{ {
char pass[256]; char pass[256];
fgets(pass, sizeof pass, stdin); gets(pass);
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");