PiPnpRtlCacheObjectBaseKey
NTSTATUS __stdcall PiPnpRtlCacheObjectBaseKey(
HPNPCTX *hPnpCtx,
WCHAR *ObjectName,
PNP_OBJECT_TYPE ObjectType,
VOID **ObjectBaseKey){
NTSTATUS CurrentOperation;
_ETHREAD *CurrentThread;
VOID **v11;
INT64 a3;
_PI_PNPRTL_OBJECT_EVENT *a4;
a3 = 0i64;
a4 = 0i64;
if( ObjectType >= 7 )
return -1073741637;
CurrentOperation = PiPnpRtlGetCurrentOperation((PI_PNPRTL_OPERATION **)&a3);
if( CurrentOperation >= 0 )
{
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--CurrentThread->Tcb.KernelApcDisable;
ExAcquireResourceSharedLite((UINT64)&PnpReplaceEvent + 3456, 1);
CurrentOperation = PiPnpRtlObjectEventCreate(ObjectName, ObjectType, (PI_PNPRTL_OPERATION *)a3, &a4);
if( CurrentOperation >= 0 && a4 )
{
v11 = (VOID **)(a4 + 4);
if( *((_QWORD *)a4 + 2)
|| (CurrentOperation = PnpOpenObjectRegKey(
(__int64)hPnpCtx,
(__int64)ObjectName,
ObjectType,
0x2000000,
0,
(__int64)v11),
CurrentOperation >= 0) )
{
*ObjectBaseKey = *v11;
}
else
{
*v11 = 0i64;
}
}
ExReleaseResourceLite((PERESOURCE)((char *)&PnpReplaceEvent + 3456));
KeLeaveCriticalRegionThread(KeGetCurrentThread());
}
return CurrentOperation;
}Referenced by:
PiPnpRtlCmActionCallback
PiPnpRtlObjectActionCallback