PopBootStatAccessCheck
NTSTATUS __stdcall PopBootStatAccessCheck(
_DEVICE_NODE *DeviceNode,
PVOID DeviceInstanceKey,
PWCHAR IdList,
UINT64 IdListSize,
UINT8 CheckHardwareIds,
UINT8 *IdsChanged){
_ACCESS_MASK v6;
char v7;
NTSTATUS result;
VOID *v9;
unsigned __int8 v10;
_KPROCESSOR_MODE AccessMode;
int AccessStatus;
unsigned int GrantedAccess;
PVOID Object;
PVOID SecurityDescriptor;
_SECURITY_SUBJECT_CONTEXT SubjectContext;
UINT8 MemoryAllocated;
v6 = (int)IdList;
v7 = (char)DeviceInstanceKey;
GrantedAccess = 0;
MemoryAllocated = 0;
SecurityDescriptor = 0i64;
Object = 0i64;
memset(&SubjectContext, 0, sizeof(SubjectContext));
result = ObReferenceObjectByHandle(DeviceNode, 0i64, 0i64, 0, &Object, 0i64);
AccessStatus = result;
if( result >= 0 )
{
result = ObpGetObjectSecurity(Object, &SecurityDescriptor, &MemoryAllocated, 0);
AccessStatus = result;
if( result >= 0 )
{
SeCaptureSubjectContext((INT64)&SubjectContext);
LOBYTE(AccessMode) = v7;
v9 = SecurityDescriptor;
v10 = (unsigned __int8)SeAccessCheck(
SecurityDescriptor,
&SubjectContext,
0,
v6,
0,
0i64,
(PGENERIC_MAPPING)&IopFileMapping,
AccessMode,
&GrantedAccess,
&AccessStatus);
SeReleaseSubjectContext(&SubjectContext);
result = AccessStatus;
if( v10 )
result = 0;
AccessStatus = result;
if( v9 )
{
ObReleaseObjectSecurity(v9, MemoryAllocated);
result = AccessStatus;
}
}
if( Object )
{
HalPutDmaAdapter((PADAPTER_OBJECT)Object);
return AccessStatus;
}
}
return result;
}Referenced by:
PopBootStatCheckIntegrity
PopBootStatGet
PopBootStatSet