PiPnpRtlCacheObjectBaseKey
__int64 __fastcall PiPnpRtlCacheObjectBaseKey(__int64 a1, wchar_t *a2, int a3, _QWORD *a4){
BOOL v8;
int CurrentOperation;
_ETHREAD *CurrentThread;
CHAR *v12;
INT64 v13;
CHAR *v14;
v13 = 0i64;
v14 = 0i64;
if( a3 >= 7 )
{
return(unsigned int)-1073741637;
}
else
{
CurrentOperation = PiPnpRtlGetCurrentOperation((INT64 **)&v13);
if( CurrentOperation >= 0 )
{
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)CurrentThread + 242);
LOBYTE(v8) = 1;
ExAcquireResourceSharedLite(&PiPnpRtlRemoveOperationDispatchLock, v8);
CurrentOperation = PiPnpRtlObjectEventCreate(a2, (unsigned int)a3, v13, &v14);
if( CurrentOperation >= 0 && v14 )
{
v12 = v14 + 16;
if( *((_QWORD *)v14 + 2)
|| (CurrentOperation = PnpOpenObjectRegKey(a1, (__int64)a2, a3, 0x2000000, 0, (__int64)v12),
CurrentOperation >= 0) )
{
*a4 = *(_QWORD *)v12;
}
else
{
*(_QWORD *)v12 = 0i64;
}
}
ExReleaseResourceLite(&PiPnpRtlRemoveOperationDispatchLock);
KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
}
}
return(unsigned int)CurrentOperation;
}Referenced by:
PiPnpRtlCmActionCallback
PiPnpRtlObjectActionCallback