PpDevCfgInit
INT64 __stdcall PpDevCfgInit(){
CHAR v0;
INT64 v1;
int ObjectProperties;
int v3;
CHAR v4;
__int64 v5;
int SyncNodesUpdated;
UINT64 v8;
INT64 v9;
INT64 a8;
INT64 a10;
INT64 a11;
CHAR v13[4];
int v14;
int v15;
int v16;
int a6;
int a6_4;
HANDLE Handle;
HANDLE ServiceHandle;
UNICODE_STRING ServiceKeyName;
INT64 result;
int v23;
int *v24;
int v25;
int v26;
__int64 *v27;
int v28;
int *v29;
int v30;
int v31;
const INT64 *v32;
int v33;
CHAR *v34;
int v35;
int v36;
v14 = 0;
v15 = 0;
v0 = 0;
v13[0] = 0;
v13[1] = 0;
*(_DWORD *)(&ServiceKeyName.MaximumLength + 1) = 0;
ServiceHandle = 0i64;
Handle = 0i64;
a6_4 = 0;
v16 = 0;
memset((INT64)&result, 0i64);
LODWORD(v8) = 3;
result = (INT64)DEVPKEY_DriverDatabase_ConfigMode;
v23 = 7;
v24 = &v14;
v25 = 4;
v27 = DEVPKEY_DriverDatabase_ConfigOptions;
v28 = 7;
v29 = &v15;
v32 = &DEVPKEY_DriverDatabase_Updated;
v34 = v13;
v30 = 4;
v33 = 17;
v35 = 1;
ObjectProperties = PiDevCfgQueryObjectProperties(v1, (INT64)L"SYSTEM", 7ui64, 0i64, (INT64)&result, v8);
if( ObjectProperties >= 0 )
{
if( v26 >= 0 )
v14 = (v14 & 3) != 0 ? v14 : 0;
else
v14 = 3;
v3 = v15;
*(_DWORD *)&ServiceKeyName.Length = 1835034;
if( v31 < 0 )
v3 = 0;
v15 = v3;
v4 = v13[0];
if( v36 < 0 )
v4 = 0;
v13[0] = v4;
ServiceKeyName.Buffer = L"DeviceInstall";
if( PipOpenServiceEnumKeys(&ServiceKeyName, 0x20019ui64, &ServiceHandle, 0i64, 0) >= 0 )
{
if( (int)PnpCtxRegOpenKey(PiPnpRtlCtx, (char *)ServiceHandle, L"Parameters", 0, 0x20019u, &Handle) >= 0 )
{
a6 = 4;
if( (int)PnpCtxRegQueryValue(v5, Handle, L"DriverUpdatesPending", &v16, &a6_4, (__int64)&a6) >= 0
&& v16 == 4
&& a6 == 4
&& a6_4 )
{
LODWORD(v9) = 0;
ZwUpdateWnfStateData();
}
ZwClose(Handle);
}
ZwClose(ServiceHandle);
PiDevCfgFlags |= 2u;
}
PiDevCfgMode = v14;
PiDevCfgOptions = v15;
if( v14 )
{
if( (PiDevCfgFlags & 2) == 0 || (v15 & 0x20) != 0 )
{
SyncNodesUpdated = PiDrvDbQuerySyncNodesUpdated(0, &v13[1]);
v0 = v13[1];
if( SyncNodesUpdated >= 0 )
{
if( v13[1] )
PiDevCfgFlags |= 1u;
}
}
if( v13[0] == -1 )
PiDevCfgFlags |= 1u;
}
if( (PiDevCfgFlags & 1) != 0 )
{
if( !RtlIsStateSeparationEnabled() || (ObjectProperties = PiDrvDbEnumNodes(), ObjectProperties >= 0) )
{
ObjectProperties = PiDmEnumObjectsWithCallback(
1,
(__int64(__fastcall *)(void *, __int64, char *))PiDevCfgInitDeviceCallback,
0i64);
if( ObjectProperties >= 0 )
{
if( v13[0] == -1 )
{
LODWORD(a11) = 0;
LODWORD(a10) = 0;
LODWORD(a8) = 0;
PiDevCfgSetObjectProperty(
PiPnpRtlCtx,
0i64,
(WCHAR *)L"SYSTEM",
7ui64,
0i64,
v9,
(INT64)&DEVPKEY_DriverDatabase_Updated,
a8,
0i64,
a10,
a11);
}
if( v0 )
PiDrvDbQuerySyncNodesUpdated(1, 0i64);
}
}
}
}
return(unsigned int)ObjectProperties;
}Referenced by:
IopInitializePlugPlayServices