PiDmObjectGetCachedObjectPropertyData
INT64 __fastcall PiDmObjectGetCachedObjectPropertyData(
UINT64 a1,
WCHAR *a2,
UINT64 a3,
INT64 a4,
INT64 a5,
INT64 a6,
INT64 a7,
INT64 a8){
unsigned int v10;
int Object;
char v12;
__int64 v13;
unsigned int CachedKeyIndex;
__int64 v15;
unsigned int v16;
_ETHREAD *CurrentThread;
ULONG_PTR v18;
INT64 *v19;
unsigned int v21;
DEVPROPKEY **v22;
ULONG_PTR BugCheckParameter2;
BugCheckParameter2 = a3;
v22 = 0i64;
v21 = 0;
v10 = a1;
Object = -1073741802;
v12 = 0;
PiDmGetCacheKeys(a1, &v22, &v21);
if( v21 )
{
CachedKeyIndex = PiDmGetCachedKeyIndex((__int64)v22, v21, v13);
v15 = CachedKeyIndex;
if( CachedKeyIndex < v16 )
{
if( !a3 )
{
Object = PiDmGetObject(v10, a2, (INT64 *)&BugCheckParameter2);
if( Object < 0 )
return(unsigned int)Object;
v12 = 1;
}
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)CurrentThread + 242);
v18 = BugCheckParameter2;
ExAcquirePushLockSharedEx(BugCheckParameter2, 0i64);
v19 = (INT64 *)(v18 + 8 * (v15 + 2 * v15 + 14));
if( *(_DWORD *)v19 <= 1u )
Object = -1073741802;
else
Object = PiDmCacheDataDecode(v19, (_DWORD *)a5, (_GUID *)a6, (unsigned int)a7, (UINT64 *)a8);
ExReleasePushLockEx(v18, 0i64);
KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
if( v12 )
PiDmObjectRelease((CHAR *)BugCheckParameter2);
}
}
return(unsigned int)Object;
}Referenced by:
PiDmObjectGetCachedObjectProperty