From 1bd9c09d22e114b2db9c0529f0253b02788173c5 Mon Sep 17 00:00:00 2001 From: Bill Zissimopoulos Date: Thu, 24 Dec 2015 12:10:17 -0800 Subject: [PATCH] Major refactoring: IRP_MJ_CREATE --- src/sys/create.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/sys/create.c b/src/sys/create.c index 512426df..3617847a 100644 --- a/src/sys/create.c +++ b/src/sys/create.c @@ -290,6 +290,21 @@ NTSTATUS FspFsvolCreatePrepare( { PAGED_CODE(); + NTSTATUS Result; + PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp); + PACCESS_STATE AccessState = IrpSp->Parameters.Create.SecurityContext->AccessState; + HANDLE UserModeAccessToken; + + /* get a user-mode handle to the access token */ + Result = ObOpenObjectByPointer(SeQuerySubjectContextToken(&AccessState->SubjectSecurityContext), + 0, 0, TOKEN_QUERY, *SeTokenObjectType, UserMode, &UserModeAccessToken); + if (!NT_SUCCESS(Result)) + return Result; + + /* send the user-mode handle to the user-mode file system */ + FspIopRequestContext(Request, RequestAccessToken) = UserModeAccessToken; + Request->Req.Create.AccessToken = (UINT_PTR)UserModeAccessToken; + return STATUS_SUCCESS; }