mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-23 00:43:00 -05:00
sys: Create and Rename requests should include the originating process PID
This commit is contained in:
parent
d824ba464d
commit
4812f5bbd0
@ -545,7 +545,7 @@ NTSTATUS FspFsvolCreatePrepare(
|
|||||||
SECURITY_CLIENT_CONTEXT SecurityClientContext;
|
SECURITY_CLIENT_CONTEXT SecurityClientContext;
|
||||||
HANDLE UserModeAccessToken;
|
HANDLE UserModeAccessToken;
|
||||||
PEPROCESS Process;
|
PEPROCESS Process;
|
||||||
HANDLE ProcessId;
|
ULONG OriginatingProcessId;
|
||||||
FSP_FILE_NODE *FileNode;
|
FSP_FILE_NODE *FileNode;
|
||||||
FSP_FILE_DESC *FileDesc;
|
FSP_FILE_DESC *FileDesc;
|
||||||
PFILE_OBJECT FileObject;
|
PFILE_OBJECT FileObject;
|
||||||
@ -579,15 +579,15 @@ NTSTATUS FspFsvolCreatePrepare(
|
|||||||
/* get a pointer to the current process so that we can close the impersonation token later */
|
/* get a pointer to the current process so that we can close the impersonation token later */
|
||||||
Process = PsGetCurrentProcess();
|
Process = PsGetCurrentProcess();
|
||||||
ObReferenceObject(Process);
|
ObReferenceObject(Process);
|
||||||
ProcessId = PsGetProcessId(Process);
|
OriginatingProcessId = IoGetRequestorProcessId(Irp);
|
||||||
|
|
||||||
/* send the user-mode handle to the user-mode file system */
|
/* send the user-mode handle to the user-mode file system */
|
||||||
FspIopRequestContext(Request, RequestAccessToken) = UserModeAccessToken;
|
FspIopRequestContext(Request, RequestAccessToken) = UserModeAccessToken;
|
||||||
FspIopRequestContext(Request, RequestProcess) = Process;
|
FspIopRequestContext(Request, RequestProcess) = Process;
|
||||||
ASSERT((UINT64)(UINT_PTR)UserModeAccessToken <= 0xffffffffULL);
|
ASSERT((UINT64)(UINT_PTR)UserModeAccessToken <= 0xffffffffULL);
|
||||||
ASSERT((UINT64)(UINT_PTR)ProcessId <= 0xffffffffULL);
|
ASSERT((UINT64)(UINT_PTR)OriginatingProcessId <= 0xffffffffULL);
|
||||||
Request->Req.Create.AccessToken =
|
Request->Req.Create.AccessToken =
|
||||||
((UINT64)(UINT_PTR)ProcessId << 32) | (UINT64)(UINT_PTR)UserModeAccessToken;
|
((UINT64)(UINT_PTR)OriginatingProcessId << 32) | (UINT64)(UINT_PTR)UserModeAccessToken;
|
||||||
|
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -1573,7 +1573,7 @@ NTSTATUS FspFsvolSetInformationPrepare(
|
|||||||
SECURITY_CLIENT_CONTEXT SecurityClientContext;
|
SECURITY_CLIENT_CONTEXT SecurityClientContext;
|
||||||
HANDLE UserModeAccessToken;
|
HANDLE UserModeAccessToken;
|
||||||
PEPROCESS Process;
|
PEPROCESS Process;
|
||||||
HANDLE ProcessId;
|
ULONG OriginatingProcessId;
|
||||||
|
|
||||||
SecuritySubjectContext = FspIopRequestContext(Request, RequestSubjectContextOrAccessToken);
|
SecuritySubjectContext = FspIopRequestContext(Request, RequestSubjectContextOrAccessToken);
|
||||||
|
|
||||||
@ -1605,15 +1605,15 @@ NTSTATUS FspFsvolSetInformationPrepare(
|
|||||||
/* get a pointer to the current process so that we can close the impersonation token later */
|
/* get a pointer to the current process so that we can close the impersonation token later */
|
||||||
Process = PsGetCurrentProcess();
|
Process = PsGetCurrentProcess();
|
||||||
ObReferenceObject(Process);
|
ObReferenceObject(Process);
|
||||||
ProcessId = PsGetProcessId(Process);
|
OriginatingProcessId = IoGetRequestorProcessId(Irp);
|
||||||
|
|
||||||
/* send the user-mode handle to the user-mode file system */
|
/* send the user-mode handle to the user-mode file system */
|
||||||
FspIopRequestContext(Request, RequestSubjectContextOrAccessToken) = UserModeAccessToken;
|
FspIopRequestContext(Request, RequestSubjectContextOrAccessToken) = UserModeAccessToken;
|
||||||
FspIopRequestContext(Request, RequestProcess) = Process;
|
FspIopRequestContext(Request, RequestProcess) = Process;
|
||||||
ASSERT((UINT64)(UINT_PTR)UserModeAccessToken <= 0xffffffffULL);
|
ASSERT((UINT64)(UINT_PTR)UserModeAccessToken <= 0xffffffffULL);
|
||||||
ASSERT((UINT64)(UINT_PTR)ProcessId <= 0xffffffffULL);
|
ASSERT((UINT64)(UINT_PTR)OriginatingProcessId <= 0xffffffffULL);
|
||||||
Request->Req.SetInformation.Info.Rename.AccessToken =
|
Request->Req.SetInformation.Info.Rename.AccessToken =
|
||||||
((UINT64)(UINT_PTR)ProcessId << 32) | (UINT64)(UINT_PTR)UserModeAccessToken;
|
((UINT64)(UINT_PTR)OriginatingProcessId << 32) | (UINT64)(UINT_PTR)UserModeAccessToken;
|
||||||
|
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user