ObpDestroyStackAndObjectTables

VOID __stdcall ObpDestroyStackAndObjectTables(
        _STACK_TABLE *StackTable,
        _OBJECT_REF_INFO **ObjectTable,
        _SINGLE_LIST_ENTRY *WorkItemList){
  _OBJECT_REF_INFO **v6; 
  __int64 v7; 
  _OBJECT_REF_INFO *v8; 
  _OBJECT_REF_INFO *NextRef; 
  unsigned __int16 v10; 
  void *v11; 

  v6 = ObjectTable;
  v7 = 401i64;
  do
  {
    v8 = *v6;
    if( *v6 )
    {
      do
      {
        NextRef = (_OBJECT_REF_INFO *)v8->NextRef;
        ExFreePoolWithTag(v8, 0x7452624Fu);
        v8 = NextRef;
      }
      while( NextRef );
    }
    ++v6;
    --v7;
  }
  while( v7 );
  ExFreePoolWithTag(ObjectTable, 0x7452624Fu);
  v10 = 0;
  if( (StackTable->TraceCapacity & 0xFC00) != 0 )
  {
    do
      ExFreePoolWithTag(StackTable->StackTrace[v10++], 0x7452624Fu);
    while( v10 < (unsigned __int16)(StackTable->TraceCapacity >> 10) );
  }
  v11 = StackTable;
  while( 1 )
  {
    ExFreePoolWithTag(v11, 0x7452624Fu);
    if( !WorkItemList )
      break;
    v11 = WorkItemList;
    WorkItemList = WorkItemList->Next;
  }
}

Referenced by:

ObpStopRuntimeStackTrace