PiDevCfgInitDeviceCallback
NTSTATUS __stdcall PiDevCfgInitDeviceCallback(PI_DM_OBJECT *Object, VOID *Context, UINT8 *StopEnumeration){
unsigned int v5;
__int64 v6;
const WCHAR *v7;
PI_DEVCFG_DEVICE_CONTEXT *v8;
UINT64 v10;
UINT64 ConfigFlagsUpdate;
VOID *BaseKeyHandle;
_PI_DEVCFG_DEVICE_CONTEXT DeviceContext[20];
int PropertyBuffer;
UINT64 PropertySize;
memset(DeviceContext, 0i64, 0x48u);
v5 = Object[7];
v6 = *((_QWORD *)Object + 2);
BaseKeyHandle = 0i64;
PropertyBuffer = 0;
LODWORD(PropertySize) = 0;
ConfigFlagsUpdate = 1i64;
if( (int)PnpOpenObjectRegKey(*(&stru_140CF2E80 + 607), v6, v5, 983103, 0, (__int64)&BaseKeyHandle) >= 0 )
{
LODWORD(v10) = 0;
v7 = (const WCHAR *)*((_QWORD *)Object + 2);
LODWORD(PropertySize) = 4;
if( CmGetDeviceRegProp(
*(&stru_140CF2E80 + 607),
v7,
BaseKeyHandle,
11i64,
&ConfigFlagsUpdate,
(UINT8 *)&PropertyBuffer,
&PropertySize,
v10) < 0
|| (_DWORD)ConfigFlagsUpdate != 4
|| (_DWORD)PropertySize != 4 )
{
PropertyBuffer = 0;
}
if( PiDevCfgInitDeviceContext(*((WCHAR **)Object + 2), BaseKeyHandle, DeviceContext) >= 0 )
{
if( PiDevCfgCheckDeviceNeedsUpdate(DeviceContext, (UINT64 *)((char *)&ConfigFlagsUpdate + 4)) >= 0
&& HIDWORD(ConfigFlagsUpdate) )
{
PropertyBuffer |= HIDWORD(ConfigFlagsUpdate);
PiDevCfgSetDeviceRegProp(v8, (_CM_REG_PROP)DeviceContext, 0xBui64, (UINT8 *)4, (UINT64)&PropertyBuffer);
}
*StopEnumeration = 0;
}
}
PiDevCfgFreeDeviceContext(DeviceContext);
if( BaseKeyHandle )
ZwClose((_HANDLE)BaseKeyHandle);
return 0;
}Referenced by:
No references.