mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-24 01:13:04 -05:00
64 lines
1.5 KiB
C
64 lines
1.5 KiB
C
/**
|
|
* @file sys/misc.c
|
|
*
|
|
* @copyright 2015 Bill Zissimopoulos
|
|
*/
|
|
|
|
#include <sys/driver.h>
|
|
|
|
NTSTATUS FspCreateGuid(GUID *Guid);
|
|
NTSTATUS FspSecuritySubjectContextAccessCheck(
|
|
PSECURITY_DESCRIPTOR SecurityDescriptor, ACCESS_MASK DesiredAccess, KPROCESSOR_MODE AccessMode);
|
|
|
|
#ifdef ALLOC_PRAGMA
|
|
#pragma alloc_text(PAGE, FspCreateGuid)
|
|
#pragma alloc_text(PAGE, FspSecuritySubjectContextAccessCheck)
|
|
#endif
|
|
|
|
VOID FspCompleteRequest(PIRP Irp, NTSTATUS Result)
|
|
{
|
|
// !PAGED_CODE();
|
|
|
|
ASSERT(STATUS_PENDING != Result);
|
|
|
|
if (!NT_SUCCESS(Result))
|
|
Irp->IoStatus.Information = 0;
|
|
Irp->IoStatus.Status = Result;
|
|
IoCompleteRequest(Irp, FSP_IO_INCREMENT);
|
|
}
|
|
|
|
NTSTATUS FspCreateGuid(GUID *Guid)
|
|
{
|
|
PAGED_CODE();
|
|
|
|
NTSTATUS Result;
|
|
|
|
int Retries = 3;
|
|
do
|
|
{
|
|
Result = ExUuidCreate(Guid);
|
|
} while (!NT_SUCCESS(Result) && 0 < --Retries);
|
|
|
|
return Result;
|
|
}
|
|
|
|
NTSTATUS FspSecuritySubjectContextAccessCheck(
|
|
PSECURITY_DESCRIPTOR SecurityDescriptor, ACCESS_MASK DesiredAccess, KPROCESSOR_MODE AccessMode)
|
|
{
|
|
PAGED_CODE();
|
|
|
|
NTSTATUS Result = STATUS_ACCESS_DENIED;
|
|
SECURITY_SUBJECT_CONTEXT SecuritySubjectContext;
|
|
ACCESS_MASK GrantedAccess;
|
|
|
|
SeCaptureSubjectContext(&SecuritySubjectContext);
|
|
if (SeAccessCheck(SecurityDescriptor,
|
|
&SecuritySubjectContext, FALSE,
|
|
DesiredAccess, 0, 0, IoGetFileObjectGenericMapping(), AccessMode,
|
|
&GrantedAccess, &Result))
|
|
Result = STATUS_SUCCESS;
|
|
SeReleaseSubjectContext(&SecuritySubjectContext);
|
|
|
|
return Result;
|
|
}
|