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.