PiDcHandleDeviceEvent
NTSTATUS __stdcall PiDcHandleDeviceEvent(PI_PNPRTL_OBJECT_EVENT *ObjectEvent){
int ObjectProperty;
unsigned int v2;
__int64 v4;
__int128 v5;
_DWORD *v6;
_DWORD *v7;
UINT64 v9;
_DWORD v10[4];
INT64 v11[2];
__int128 Buffer;
PI_PNPRTL_OBJECT_EVENT v13;
int v14;
WCHAR GuidString[40];
ObjectProperty = 0;
v2 = 0;
v10[2] = 0;
v10[1] = 0;
v14 = 0;
*(_OWORD *)v11 = 0i64;
LOBYTE(v10[0]) = 0;
if( ObjectEvent[19] )
{
while( 1 )
{
v4 = 8i64 * v2;
v5 = *(_OWORD *)&ObjectEvent[v4 + 20];
v13 = ObjectEvent[v4 + 24];
Buffer = v5;
v6 = RtlLookupElementGenericTableAvl((_RTL_AVL_TABLE *)((char *)&PnpReplaceEvent + 1952), &Buffer);
v7 = v6;
if( !ObjectEvent[v4 + 25] && !*(_QWORD *)&ObjectEvent[v4 + 26] && v6 )
break;
if( ++v2 >= ObjectEvent[19] )
return ObjectProperty;
}
ObjectProperty = PnpGetObjectProperty(
*(&stru_140CF2E80 + 1214),
*(_QWORD *)(*((_QWORD *)ObjectEvent + 1) + 16i64),
1i64,
0i64,
0i64,
(INT64)&DEVPKEY_Device_ContainerId,
(INT64)&v10[1],
(INT64)v11);
if( ObjectProperty >= 0 && v10[1] == 13 && v10[2] == 16 )
{
ObjectProperty = PnpStringFromGuid((const _GUID *)v11, GuidString, v9);
if( ObjectProperty >= 0 )
{
ObjectProperty = PnpGetObjectProperty(
*(&stru_140CF2E80 + 1214),
(INT64)GuidString,
5i64,
0i64,
0i64,
(INT64)&DEVPKEY_DeviceContainer_IsLocalMachine,
(INT64)&v10[1],
(INT64)v10);
if( ObjectProperty >= 0 && v10[1] == 17 && v10[2] == 1 && (LOBYTE(v10[0]) != 0xFF || (v7[5] & 1) != 0) )
return PiDcContainerRequiresConfiguration(GuidString);
}
}
}
return ObjectProperty;
}Referenced by:
PiDcHandleObjectEvent