PiDevCfgInitDeviceContext
__int64 __fastcall PiDevCfgInitDeviceContext(const wchar_t *a1, __int64 a2, __int64 *a3){
char *v6;
__int64 v7;
DEVPROPKEY **v8;
__int64 *v9;
__int64 v10;
int ObjectProperties;
WCHAR v12;
unsigned int v13;
int *v14;
UINT64 v16;
INT64 result;
char v18;
char v19;
memset((INT64)a3, 0i64);
a3[1] = (__int64)a1;
if( a2 )
{
a3[2] = a2;
}
else
{
ObjectProperties = CmOpenDeviceRegKey(PiPnpRtlCtx, a1, 16, 0, 983103, 0, (__int64)(a3 + 2), 0i64);
if( ObjectProperties < 0 )
{
LABEL_13:
PiDevCfgFreeDeviceContext((INT64)a3);
return(unsigned int)ObjectProperties;
}
*(_DWORD *)a3 |= 0x80000000;
}
memset((INT64)&result, 0i64);
v6 = &v18;
v7 = 3i64;
v8 = off_140D2C778;
v9 = a3 + 3;
do
{
v10 = (__int64)*v8++;
*((_QWORD *)v6 + 1) = v9;
v9 += 2;
*((_QWORD *)v6 - 1) = v10;
*(_DWORD *)v6 = 8210;
*((_DWORD *)v6 + 5) = 6;
v6 += 40;
--v7;
}
while( v7 );
LODWORD(v16) = 3;
ObjectProperties = PiDevCfgQueryObjectProperties((INT64)v6, a3[1], 1ui64, a3[2], (INT64)&result, v16);
if( ObjectProperties < 0 )
goto LABEL_13;
v13 = 0;
v14 = (int *)&v19;
do
{
if( *v14 < 0 )
RtlInitUnicodeString((PUNICODE_STRING)&a3[2 * v13 + 3], 0i64, v12);
++v13;
v14 += 10;
}
while( v13 < 3 );
return(unsigned int)ObjectProperties;
}Referenced by:
PiDevCfgInitDeviceCallback
PiDevCfgProcessDevice
PiDevCfgProcessDeviceCallback
PpDevCfgCheckDeviceNeedsUpdate
PpDevCfgProcessDeviceExtensions
PpDevCfgProcessDeviceOperations
PpDevCfgProcessDeviceReset