ExpWorkQueueDestroy

VOID __stdcall ExpWorkQueueDestroy(PVOID Object){
  signed __int32 v2; 
  signed __int32 v3; 
  __int16 v4; 
  struct _KEVENT Event; 
  memset(&Event, 0, sizeof(Event));
  KeInitializeEvent(&Event, NotificationEvent, 0);
  *((_QWORD *)Object + 91) = &Event;
  _m_prefetchw((char *)Object + 712);
  v2 = *((_DWORD *)Object + 178);
  do
  {
    v3 = v2;
    v2 = _InterlockedCompareExchange((volatile signed __int32 *)Object + 178, v2 | 0x8000, v2);
  }
  while( v3 != v2 );
  v4 = v2;
  KeRundownPriQueue(Object);
  if( (v4 & 0x3FFF) != 0 )
    KeWaitForSingleObject(*((PVOID *)Object + 91), Executive, 0, 0, 0i64);
}

Referenced by:

ExpPartitionCreatePoolInternal
ExpPartitionDestroy