PiSwAddPdoAssociation

NTSTATUS __stdcall PiSwAddPdoAssociation(
        PI_SWD_OBJECT *SwDeviceObject,
        VOID *ParentDeviceObject,
        VOID *ChildDeviceObject){
  NTSTATUS v3; 
  VOID **PoolWithTag; 
  PI_SWD_OBJECT **v8; 
  _QWORD *v9; 
  _QWORD *v10; 

  v3 = 0;
  PoolWithTag = ExAllocatePoolWithTag(1ui64, 0x30ui64, 1466986064i64);
  if( !PoolWithTag )
    return -1073741670;
  ObfReferenceObject(ParentDeviceObject);
  ObfReferenceObject(ChildDeviceObject);
  PoolWithTag[4] = ParentDeviceObject;
  PoolWithTag[5] = ChildDeviceObject;
  v8 = (PI_SWD_OBJECT **)*((_QWORD *)SwDeviceObject + 17);
  if( *v8 != SwDeviceObject + 32
    || (*PoolWithTag = SwDeviceObject + 32,
        PoolWithTag[1] = v8,
        *v8 = (PI_SWD_OBJECT *)PoolWithTag,
        *((_QWORD *)SwDeviceObject + 17) = PoolWithTag,
        v9 = PoolWithTag + 2,
        v10 = (_QWORD *)qword_140C43078,
        *(__int64 **)qword_140C43078 != &PiSwGlobalPdoAssociationList) )
  {
    __fastfail(3u);
  }
  *v9 = &PiSwGlobalPdoAssociationList;
  v9[1] = v10;
  *v10 = v9;
  qword_140C43078 = (__int64)v9;
  return v3;
}

Referenced by:

PiSwGetChildPdo