CMFUnmapModules

NTSTATUS __stdcall CMFUnmapModules(UINT64 ulWhat){
  __int16 v1; 
  PADAPTER_OBJECT *v2; 
  PADAPTER_OBJECT *v3; 
  __int64 v4; 
  struct _DMA_ADAPTER *v5; 
  struct _DMA_ADAPTER *v6; 
  v1 = ulWhat;
  if( (ulWhat & 0x20) != 0 )
  {
    v2 = (PADAPTER_OBJECT *)CMFSegmentSectionPointer;
    _InterlockedExchange64((volatile __int64 *)&CMFSegmentSectionPointer, 0i64);
    if( v2 )
    {
      v3 = v2;
      v4 = 30i64;
      do
      {
        if( *v3 )
        {
          HalPutDmaAdapter(*v3);
          *v3 = 0i64;
        }
        ++v3;
        --v4;
      }
      while( v4 );
      ExFreePoolWithTag(v2, 0);
    }
  }
  if( (v1 & 0x10) != 0 )
  {
    v5 = CMFDirectorySectionPointer;
    if( CMFDirectorySectionPointer )
    {
      if( v5 == (struct _DMA_ADAPTER *)_InterlockedCompareExchange64(
                                          (volatile signed __int64 *)&CMFDirectorySectionPointer,
                                          0i64,
                                          (signed __int64)CMFDirectorySectionPointer) )
        HalPutDmaAdapter(v5);
    }
  }
  if( (v1 & 0x100) != 0 )
  {
    v6 = CMFHitsSectionPointer;
    if( CMFHitsSectionPointer )
    {
      if( v6 == (struct _DMA_ADAPTER *)_InterlockedCompareExchange64(
                                          (volatile signed __int64 *)&CMFHitsSectionPointer,
                                          0i64,
                                          (signed __int64)CMFHitsSectionPointer) )
        HalPutDmaAdapter(v6);
    }
  }
  return 0;
}

Referenced by:

NtMapCMFModule