mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-23 00:43:00 -05:00
sys: FSP_IOP_REQUEST_FINI changes and correctly setting FileNode owner during IRP_MJ_CREATE
This commit is contained in:
parent
d0d4c0ed8f
commit
788f936a54
@ -422,11 +422,12 @@ NTSTATUS FspFsvolCreatePrepare(
|
|||||||
return STATUS_USER_MAPPED_FILE;
|
return STATUS_USER_MAPPED_FILE;
|
||||||
}
|
}
|
||||||
|
|
||||||
FspIopRequestContext(Request, RequestState) = (PVOID)RequestProcessing;
|
|
||||||
|
|
||||||
/* purge any caches on this file */
|
/* purge any caches on this file */
|
||||||
CcPurgeCacheSection(&FileNode->NonPaged->SectionObjectPointers, 0, 0, FALSE);
|
CcPurgeCacheSection(&FileNode->NonPaged->SectionObjectPointers, 0, 0, FALSE);
|
||||||
|
|
||||||
|
FspFileNodeSetOwner(FileNode, Full, Request);
|
||||||
|
FspIopRequestContext(Request, RequestState) = (PVOID)RequestProcessing;
|
||||||
|
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -648,7 +649,7 @@ NTSTATUS FspFsvolCreateComplete(
|
|||||||
|
|
||||||
/* file was successfully overwritten/superseded */
|
/* file was successfully overwritten/superseded */
|
||||||
FspFileNodeSetFileInfo(FileNode, FileObject, &Response->Rsp.Overwrite.FileInfo);
|
FspFileNodeSetFileInfo(FileNode, FileObject, &Response->Rsp.Overwrite.FileInfo);
|
||||||
FspFileNodeRelease(FileNode, Full);
|
FspFileNodeReleaseOwner(FileNode, Full, Request);
|
||||||
|
|
||||||
/* SUCCESS! */
|
/* SUCCESS! */
|
||||||
FspIopRequestContext(Request, RequestFileDesc) = 0;
|
FspIopRequestContext(Request, RequestFileDesc) = 0;
|
||||||
@ -760,7 +761,7 @@ static VOID FspFsvolCreatePostClose(FSP_FILE_DESC *FileDesc)
|
|||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
static VOID FspFsvolCreateRequestFini(PVOID Context[3])
|
static VOID FspFsvolCreateRequestFini(FSP_FSCTL_TRANSACT_REQ *Request, PVOID Context[3])
|
||||||
{
|
{
|
||||||
PAGED_CODE();
|
PAGED_CODE();
|
||||||
|
|
||||||
@ -797,11 +798,9 @@ static VOID FspFsvolCreateRequestFini(PVOID Context[3])
|
|||||||
|
|
||||||
ObDereferenceObject(Process);
|
ObDereferenceObject(Process);
|
||||||
}
|
}
|
||||||
|
|
||||||
Context[RequestFileDesc] = Context[RequestAccessToken] = Context[RequestProcess] = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static VOID FspFsvolCreateTryOpenRequestFini(PVOID Context[3])
|
static VOID FspFsvolCreateTryOpenRequestFini(FSP_FSCTL_TRANSACT_REQ *Request, PVOID Context[3])
|
||||||
{
|
{
|
||||||
PAGED_CODE();
|
PAGED_CODE();
|
||||||
|
|
||||||
@ -817,11 +816,9 @@ static VOID FspFsvolCreateTryOpenRequestFini(PVOID Context[3])
|
|||||||
FspFileNodeDereference(FileDesc->FileNode);
|
FspFileNodeDereference(FileDesc->FileNode);
|
||||||
FspFileDescDelete(FileDesc);
|
FspFileDescDelete(FileDesc);
|
||||||
}
|
}
|
||||||
|
|
||||||
Context[RequestFileDesc] = Context[RequestFileObject] = Context[RequestState] = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static VOID FspFsvolCreateOverwriteRequestFini(PVOID Context[3])
|
static VOID FspFsvolCreateOverwriteRequestFini(FSP_FSCTL_TRANSACT_REQ *Request, PVOID Context[3])
|
||||||
{
|
{
|
||||||
PAGED_CODE();
|
PAGED_CODE();
|
||||||
|
|
||||||
@ -836,14 +833,12 @@ static VOID FspFsvolCreateOverwriteRequestFini(PVOID Context[3])
|
|||||||
if (RequestPending == State)
|
if (RequestPending == State)
|
||||||
FspFsvolCreatePostClose(FileDesc);
|
FspFsvolCreatePostClose(FileDesc);
|
||||||
else if (RequestProcessing == State)
|
else if (RequestProcessing == State)
|
||||||
FspFileNodeRelease(FileDesc->FileNode, Full);
|
FspFileNodeReleaseOwner(FileDesc->FileNode, Full, Request);
|
||||||
|
|
||||||
FspFileNodeClose(FileDesc->FileNode, FileObject, 0);
|
FspFileNodeClose(FileDesc->FileNode, FileObject, 0);
|
||||||
FspFileNodeDereference(FileDesc->FileNode);
|
FspFileNodeDereference(FileDesc->FileNode);
|
||||||
FspFileDescDelete(FileDesc);
|
FspFileDescDelete(FileDesc);
|
||||||
}
|
}
|
||||||
|
|
||||||
Context[RequestFileDesc] = Context[RequestFileObject] = Context[RequestState] = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS FspCreate(
|
NTSTATUS FspCreate(
|
||||||
|
@ -145,7 +145,7 @@ VOID FspIopDeleteRequest(FSP_FSCTL_TRANSACT_REQ *Request)
|
|||||||
FSP_FSCTL_TRANSACT_REQ_HEADER *RequestHeader = (PVOID)((PUINT8)Request - sizeof *RequestHeader);
|
FSP_FSCTL_TRANSACT_REQ_HEADER *RequestHeader = (PVOID)((PUINT8)Request - sizeof *RequestHeader);
|
||||||
|
|
||||||
if (0 != RequestHeader->RequestFini)
|
if (0 != RequestHeader->RequestFini)
|
||||||
RequestHeader->RequestFini(RequestHeader->Context);
|
RequestHeader->RequestFini(Request, RequestHeader->Context);
|
||||||
|
|
||||||
if (0 != RequestHeader->Response)
|
if (0 != RequestHeader->Response)
|
||||||
FspFree(RequestHeader->Response);
|
FspFree(RequestHeader->Response);
|
||||||
@ -160,7 +160,7 @@ VOID FspIopResetRequest(FSP_FSCTL_TRANSACT_REQ *Request, FSP_IOP_REQUEST_FINI *R
|
|||||||
FSP_FSCTL_TRANSACT_REQ_HEADER *RequestHeader = (PVOID)((PUINT8)Request - sizeof *RequestHeader);
|
FSP_FSCTL_TRANSACT_REQ_HEADER *RequestHeader = (PVOID)((PUINT8)Request - sizeof *RequestHeader);
|
||||||
|
|
||||||
if (0 != RequestHeader->RequestFini)
|
if (0 != RequestHeader->RequestFini)
|
||||||
RequestHeader->RequestFini(RequestHeader->Context);
|
RequestHeader->RequestFini(Request, RequestHeader->Context);
|
||||||
|
|
||||||
RtlZeroMemory(&RequestHeader->Context, sizeof RequestHeader->Context);
|
RtlZeroMemory(&RequestHeader->Context, sizeof RequestHeader->Context);
|
||||||
RequestHeader->RequestFini = RequestFini;
|
RequestHeader->RequestFini = RequestFini;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user