WmipInsertMofResource

NTSTATUS __stdcall WmipInsertMofResource(tagDATASOURCE *DataSource, ULONG_PTR MofResource){
  NTSTATUS v2; 
  __int64 v4; 
  INT64 v5; 
  unsigned int v6; 
  __int64 v7; 
  __int64 v8; 
  tagDATASOURCE v10; 
  __int64 v11; 
  size_t v12; 
  unsigned __int64 v13; 
  size_t v14; 
  VOID **PoolWithTag; 
  VOID **v16; 
  tagDATASOURCE *v17; 

  v2 = 0;
  v4 = (unsigned int)DataSource[16];
  v5 = *(_QWORD *)&MofResource;
  v6 = 0;
  if( (_DWORD)v4 )
  {
    v7 = *((_QWORD *)DataSource + 9);
    while( 1 )
    {
      v8 = *(_QWORD *)(v7 + 8i64 * v6);
      if( v8 == *(_QWORD *)&MofResource )
        break;
      if( !v8 )
      {
        *(_QWORD *)(v7 + 8i64 * v6) = *(_QWORD *)&MofResource;
        goto LABEL_6;
      }
      if( ++v6 >= (unsigned int)v4 )
        goto LABEL_6;
    }
  }
  else
  {
LABEL_6:
    if( v6 == (_DWORD)v4 )
    {
      v10 = v4 + 4;
      v17 = (tagDATASOURCE *)*((_QWORD *)DataSource + 9);
      v11 = v4;
      v12 = -1;
      if( (unsigned __int64)(8 * v4) <= 0xFFFFFFFF )
        v12 = 8 * v4;
      v13 = 8i64 * (unsigned int)(v4 + 4);
      if( v13 > 0xFFFFFFFF )
        return -1073741675;
      v14 = 8 * (v4 + 4);
      PoolWithTag = ExAllocatePoolWithTag(1ui64, (unsigned int)v13, 1885957463i64);
      v16 = PoolWithTag;
      if( !PoolWithTag )
        return -1073741670;
      memset(PoolWithTag, 0i64, v14);
      memmove(v16, *((const VOID **)DataSource + 9), v12);
      if( v17 != DataSource + 20 )
        ExFreePoolWithTag(*((PVOID *)DataSource + 9), 0);
      *((_QWORD *)DataSource + 9) = v16;
      v16[v11] = (VOID *)v5;
      DataSource[16] = v10;
    }
    WmipReferenceEntry(v5);
  }
  return v2;
}

Referenced by:

WmipAddMofResource