WbFreeWarbirdProcess

NTSTATUS __stdcall WbFreeWarbirdProcess(PVOID P){
  unsigned int v1; 
  unsigned int i; 
  unsigned int j; 
  char *v5; 
  __int64 v6; 
  __int64 v7; 
  unsigned int k; 

  v1 = 0;
  if( P )
  {
    for( i = 0; i < *((_DWORD *)P + 23); ++i )
      sub_14065E6C8((_EX_PUSH_LOCK *)P, *(_QWORD *)(*((_DWORD *)P + 22) * i + *((_QWORD *)P + 13)));
    sub_14064F544((__int64)P + 88);
    for( j = 0; j < *((_DWORD *)P + 3); ++j )
      sub_14065EF2C((_EX_PUSH_LOCK *)P, *(_QWORD *)(j * *((_DWORD *)P + 2) + *((_QWORD *)P + 3)));
    sub_14064F544((__int64)P + 8);
    v5 = (char *)P + 64;
    while( 1 )
    {
      v6 = *(_QWORD *)v5;
      if( *(char **)(*(_QWORD *)v5 + 8i64) != v5 || (v7 = *(_QWORD *)v6, *(_QWORD *)(*(_QWORD *)v6 + 8i64) != v6) )
        __fastfail(3u);
      *(_QWORD *)v5 = v7;
      *(_QWORD *)(v7 + 8) = v5;
      if( (char *)v6 == v5 )
        break;
      sub_14065EF2C((_EX_PUSH_LOCK *)P, v6);
    }
    for( k = 0; k < *((_DWORD *)P + 35); ++k )
      WbFreeWarbirdEncryptionSegment(*(PVOID *)(k * *((_DWORD *)P + 34) + *((_QWORD *)P + 19)));
    sub_14064F544((__int64)P + 136);
    if( *((_DWORD *)P + 47) )
    {
      do
        WbFreeMemoryBlock(*(PVOID **)(*((_DWORD *)P + 46) * v1++ + *((_QWORD *)P + 25)));
      while( v1 < *((_DWORD *)P + 47) );
    }
    sub_14064F544((__int64)P + 184);
    ExFreePoolWithTag(P, 0x42524157u);
  }
  return 0;
}

Referenced by:

sub_14065E8E4