mirror of
https://github.com/winfsp/winfsp.git
synced 2025-06-14 15:52:47 -05:00
inc: fsctl: simplify FSP_FSCTL_TRANSACT_RSP Rsp.Create.Reparse
This commit is contained in:
@ -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);
|
||||
|
Reference in New Issue
Block a user