From 26485ffbd69d96245b6b13af130d0dfe8aa19c20 Mon Sep 17 00:00:00 2001 From: Bill Zissimopoulos Date: Wed, 12 Jul 2017 20:54:12 -0700 Subject: [PATCH] sys: originating process id --- src/sys/create.c | 7 ++++++- src/sys/fileinfo.c | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/sys/create.c b/src/sys/create.c index c7d20b6c..07f97022 100644 --- a/src/sys/create.c +++ b/src/sys/create.c @@ -545,6 +545,7 @@ NTSTATUS FspFsvolCreatePrepare( SECURITY_CLIENT_CONTEXT SecurityClientContext; HANDLE UserModeAccessToken; PEPROCESS Process; + HANDLE ProcessId; FSP_FILE_NODE *FileNode; FSP_FILE_DESC *FileDesc; PFILE_OBJECT FileObject; @@ -578,11 +579,15 @@ NTSTATUS FspFsvolCreatePrepare( /* get a pointer to the current process so that we can close the impersonation token later */ Process = PsGetCurrentProcess(); ObReferenceObject(Process); + ProcessId = PsGetProcessId(Process); /* send the user-mode handle to the user-mode file system */ FspIopRequestContext(Request, RequestAccessToken) = UserModeAccessToken; FspIopRequestContext(Request, RequestProcess) = Process; - Request->Req.Create.AccessToken = (UINT_PTR)UserModeAccessToken; + ASSERT((UINT64)(UINT_PTR)UserModeAccessToken <= 0xffffffffULL); + ASSERT((UINT64)(UINT_PTR)ProcessId <= 0xffffffffULL); + Request->Req.Create.AccessToken = + ((UINT64)(UINT_PTR)ProcessId << 32) | (UINT64)(UINT_PTR)UserModeAccessToken; return STATUS_SUCCESS; } diff --git a/src/sys/fileinfo.c b/src/sys/fileinfo.c index 145fa91b..999e9a17 100644 --- a/src/sys/fileinfo.c +++ b/src/sys/fileinfo.c @@ -1573,6 +1573,7 @@ NTSTATUS FspFsvolSetInformationPrepare( SECURITY_CLIENT_CONTEXT SecurityClientContext; HANDLE UserModeAccessToken; PEPROCESS Process; + HANDLE ProcessId; SecuritySubjectContext = FspIopRequestContext(Request, RequestSubjectContextOrAccessToken); @@ -1604,11 +1605,15 @@ NTSTATUS FspFsvolSetInformationPrepare( /* get a pointer to the current process so that we can close the impersonation token later */ Process = PsGetCurrentProcess(); ObReferenceObject(Process); + ProcessId = PsGetProcessId(Process); /* send the user-mode handle to the user-mode file system */ FspIopRequestContext(Request, RequestSubjectContextOrAccessToken) = UserModeAccessToken; FspIopRequestContext(Request, RequestProcess) = Process; - Request->Req.SetInformation.Info.Rename.AccessToken = (UINT_PTR)UserModeAccessToken; + ASSERT((UINT64)(UINT_PTR)UserModeAccessToken <= 0xffffffffULL); + ASSERT((UINT64)(UINT_PTR)ProcessId <= 0xffffffffULL); + Request->Req.SetInformation.Info.Rename.AccessToken = + ((UINT64)(UINT_PTR)ProcessId << 32) | (UINT64)(UINT_PTR)UserModeAccessToken; return STATUS_SUCCESS; }