mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-22 08:23:05 -05:00
inc: fsctl: simplify FSP_FSCTL_TRANSACT_RSP Rsp.Create.Reparse
This commit is contained in:
parent
49cd11b34b
commit
46a29f663a
@ -341,10 +341,9 @@ typedef struct
|
||||
FSP_FSCTL_FILE_INFO FileInfo;
|
||||
} Opened;
|
||||
/* IoStatus.Status == STATUS_REPARSE */
|
||||
union
|
||||
struct
|
||||
{
|
||||
FSP_FSCTL_TRANSACT_BUF FileName; /* IoStatus.Information == IO_REPARSE (== 0) */
|
||||
FSP_FSCTL_TRANSACT_BUF Data; /* IoStatus.Information > IO_REMOUNT (== 1) */
|
||||
FSP_FSCTL_TRANSACT_BUF Buffer;
|
||||
} Reparse;
|
||||
} Create;
|
||||
struct
|
||||
|
@ -631,8 +631,8 @@ FSP_API VOID FspDebugLogResponse(FSP_FSCTL_TRANSACT_RSP *Response)
|
||||
FspDiagIdent(), GetCurrentThreadId(), Response->Hint,
|
||||
Response->IoStatus.Status, Response->IoStatus.Information,
|
||||
FspDebugLogWideCharBufferString(
|
||||
Response->Buffer + Response->Rsp.Create.Reparse.FileName.Offset,
|
||||
Response->Rsp.Create.Reparse.FileName.Size,
|
||||
Response->Buffer + Response->Rsp.Create.Reparse.Buffer.Offset,
|
||||
Response->Rsp.Create.Reparse.Buffer.Size,
|
||||
InfoBuf));
|
||||
else if (1/*IO_REMOUNT*/ == Response->IoStatus.Information)
|
||||
FspDebugLogResponseStatus(Response, "Create");
|
||||
@ -642,7 +642,7 @@ FSP_API VOID FspDebugLogResponse(FSP_FSCTL_TRANSACT_RSP *Response)
|
||||
FspDiagIdent(), GetCurrentThreadId(), Response->Hint,
|
||||
Response->IoStatus.Status, Response->IoStatus.Information,
|
||||
FspDebugLogReparseDataString(
|
||||
Response->Buffer + Response->Rsp.Create.Reparse.Data.Offset,
|
||||
Response->Buffer + Response->Rsp.Create.Reparse.Buffer.Offset,
|
||||
InfoBuf));
|
||||
}
|
||||
else
|
||||
|
@ -117,16 +117,8 @@ NTSTATUS FspFileSystemCallResolveReparsePoints(FSP_FILE_SYSTEM *FileSystem,
|
||||
Response->IoStatus.Information = (UINT32)IoStatus.Information;
|
||||
|
||||
Response->Size = (UINT16)(sizeof *Response + Size);
|
||||
if (0/*IO_REPARSE*/ == IoStatus.Information)
|
||||
{
|
||||
Response->Rsp.Create.Reparse.FileName.Offset = 0;
|
||||
Response->Rsp.Create.Reparse.FileName.Size = (UINT16)Size;
|
||||
}
|
||||
else
|
||||
{
|
||||
Response->Rsp.Create.Reparse.Data.Offset = 0;
|
||||
Response->Rsp.Create.Reparse.Data.Size = (UINT16)Size;
|
||||
}
|
||||
Response->Rsp.Create.Reparse.Buffer.Offset = 0;
|
||||
Response->Rsp.Create.Reparse.Buffer.Size = (UINT16)Size;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -528,9 +528,9 @@ NTSTATUS FspFsvolCreateComplete(
|
||||
sizeof ReparseTargetPrefix1);
|
||||
|
||||
ReparseTargetPath.Length = ReparseTargetPath.MaximumLength =
|
||||
Response->Rsp.Create.Reparse.FileName.Size;
|
||||
Response->Rsp.Create.Reparse.Buffer.Size;
|
||||
ReparseTargetPath.Buffer =
|
||||
(PVOID)(Response->Buffer + Response->Rsp.Create.Reparse.FileName.Offset);
|
||||
(PVOID)(Response->Buffer + Response->Rsp.Create.Reparse.Buffer.Offset);
|
||||
|
||||
if ((PUINT8)ReparseTargetPath.Buffer + ReparseTargetPath.Length >
|
||||
(PUINT8)Response + Response->Size ||
|
||||
@ -541,13 +541,13 @@ NTSTATUS FspFsvolCreateComplete(
|
||||
{
|
||||
ASSERT(IO_REPARSE_TAG_SYMLINK == Response->IoStatus.Information);
|
||||
|
||||
ReparseData = (PVOID)(Response->Buffer + Response->Rsp.Create.Reparse.Data.Offset);
|
||||
ReparseData = (PVOID)(Response->Buffer + Response->Rsp.Create.Reparse.Buffer.Offset);
|
||||
|
||||
if ((PUINT8)ReparseData + Response->Rsp.Create.Reparse.Data.Size >
|
||||
if ((PUINT8)ReparseData + Response->Rsp.Create.Reparse.Buffer.Size >
|
||||
(PUINT8)Response + Response->Size)
|
||||
FSP_RETURN(Result = STATUS_REPARSE_POINT_NOT_RESOLVED);
|
||||
|
||||
Result = FsRtlValidateReparsePointBuffer(Response->Rsp.Create.Reparse.Data.Size,
|
||||
Result = FsRtlValidateReparsePointBuffer(Response->Rsp.Create.Reparse.Buffer.Size,
|
||||
ReparseData);
|
||||
if (!NT_SUCCESS(Result))
|
||||
FSP_RETURN(Result = STATUS_REPARSE_POINT_NOT_RESOLVED);
|
||||
@ -602,25 +602,25 @@ NTSTATUS FspFsvolCreateComplete(
|
||||
}
|
||||
else
|
||||
{
|
||||
ReparseData = (PVOID)(Response->Buffer + Response->Rsp.Create.Reparse.Data.Offset);
|
||||
ReparseData = (PVOID)(Response->Buffer + Response->Rsp.Create.Reparse.Buffer.Offset);
|
||||
|
||||
if ((PUINT8)ReparseData + Response->Rsp.Create.Reparse.Data.Size >
|
||||
if ((PUINT8)ReparseData + Response->Rsp.Create.Reparse.Buffer.Size >
|
||||
(PUINT8)Response + Response->Size)
|
||||
FSP_RETURN(Result = STATUS_IO_REPARSE_DATA_INVALID);
|
||||
|
||||
Result = FsRtlValidateReparsePointBuffer(Response->Rsp.Create.Reparse.Data.Size,
|
||||
Result = FsRtlValidateReparsePointBuffer(Response->Rsp.Create.Reparse.Buffer.Size,
|
||||
ReparseData);
|
||||
if (!NT_SUCCESS(Result))
|
||||
FSP_RETURN();
|
||||
|
||||
ASSERT(0 == Irp->Tail.Overlay.AuxiliaryBuffer);
|
||||
Irp->Tail.Overlay.AuxiliaryBuffer = FspAllocNonPagedExternal(
|
||||
Response->Rsp.Create.Reparse.Data.Size);
|
||||
Response->Rsp.Create.Reparse.Buffer.Size);
|
||||
if (0 == Irp->Tail.Overlay.AuxiliaryBuffer)
|
||||
FSP_RETURN(Result = STATUS_INSUFFICIENT_RESOURCES);
|
||||
|
||||
RtlCopyMemory(Irp->Tail.Overlay.AuxiliaryBuffer, ReparseData,
|
||||
Response->Rsp.Create.Reparse.Data.Size);
|
||||
Response->Rsp.Create.Reparse.Buffer.Size);
|
||||
|
||||
Irp->IoStatus.Information = ReparseData->ReparseTag;
|
||||
FSP_RETURN(Result = STATUS_REPARSE);
|
||||
|
Loading…
x
Reference in New Issue
Block a user