ObReferenceObjectByName
NTSTATUS __fastcall ObReferenceObjectByName(
unsigned __int64 a1,
int a2,
__int64 *a3,
DWORD a4,
__int64 a5,
char a6,
__int64 a7,
PADAPTER_OBJECT *a8){
NTSTATUS v12;
_EJOB *Silo;
unsigned __int64 v14;
UINT8 v15;
INT64 AccessMode;
INT64 AccessStatus;
PADAPTER_OBJECT DmaAdapter;
UNICODE_STRING CapturedObjectName;
INT64 v20[2];
__int128 v21;
__int128 v22;
__int64 v23;
_OBP_LOOKUP_CONTEXT LookupContext;
INT64 v25[20];
__int64 result[28];
memset((INT64)result, 0i64);
DmaAdapter = 0i64;
CapturedObjectName = 0i64;
memset((INT64)v25, 0i64);
v23 = 0i64;
memset(&LookupContext, 0, sizeof(LookupContext));
*(_OWORD *)v20 = 0i64;
v21 = 0i64;
v22 = 0i64;
if( !a1 )
return -1073741773;
v12 = ObpCaptureObjectName(a6, (UNICODE_STRING *)a1, &CapturedObjectName, 1ui64);
LODWORD(AccessStatus) = v12;
if( v12 < 0 )
return v12;
if( !CapturedObjectName.Length )
return -1073741773;
if( a3
|| (a3 = v25,
LODWORD(AccessStatus) = SeCreateAccessState(
(_ACCESS_STATE *)v25,
(_AUX_ACCESS_DATA *)result,
a4,
(_GENERIC_MAPPING *)(a5 + 76)),
(int)AccessStatus >= 0) )
{
Silo = PsGetCurrentSilo();
LOBYTE(AccessMode) = a6;
LODWORD(AccessStatus) = ObpLookupObjectName(
0i64,
&CapturedObjectName,
(unsigned int)a2,
(_OBJECT_TYPE *)a5,
AccessMode,
(VOID *)a7,
0i64,
0i64,
Silo,
(_ACCESS_STATE *)a3,
&LookupContext,
0i64,
(VOID **)&DmaAdapter);
ObpReleaseLookupContext((INT64)&LookupContext);
*a8 = 0i64;
if( (int)AccessStatus >= 0 )
{
v14 = LOBYTE(DmaAdapter[-2].DmaOperations) ^ (unsigned __int64)(unsigned __int8)((unsigned __int16)((_WORD)DmaAdapter - 48) >> 8);
*(_QWORD *)&v22 = 0i64;
*(_QWORD *)&v21 = ObTypeIndexTable[(unsigned __int8)ObHeaderCookie ^ v14] + 16;
*((_QWORD *)&v21 + 1) = &CapturedObjectName;
SeSetLearningModeObjectInformation((INT64)v20);
if( ObpCheckObjectReference(DmaAdapter, (_ACCESS_STATE *)a3, v15, a6, &AccessStatus) )
*a8 = DmaAdapter;
else
HalPutDmaAdapter(DmaAdapter);
SeClearLearningModeObjectInformation();
}
if( a3 == v25 )
{
SepDeleteAccessState((ACCESS_STATE *)a3);
SeReleaseSubjectContext((_SECURITY_SUBJECT_CONTEXT *)a3 + 1);
}
}
ObpFreeObjectNameBuffer(&CapturedObjectName);
return AccessStatus;
}Referenced by:
AlpcpCreateClientPort
CmLoadDifferencingKey
IopGetDriverPathInformation
IopGetLegacyVetoListDrivers
ObShutdownSystem