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