SmKmFileInfoCleanup

BOOLEAN __fastcall SmKmFileInfoCleanup(__int64 a1){
  UINT8 v2; 
  void *v3; 
  UINT8 v4; 
  struct _DMA_ADAPTER *v5; 
  _IRP *v6; 
  struct _DMA_ADAPTER *v7; 
  struct _PRIVILEGE_SET *v8; 
  v2 = IoSetThreadHardErrorMode(0);
  v3 = *(void **)(a1 + 32);
  v4 = v2;
  if( v3 )
    PnpUnregisterPlugPlayNotification(v3, 0);
  v5 = *(struct _DMA_ADAPTER **)(a1 + 16);
  if( v5 )
    HalPutDmaAdapter(v5);
  v6 = *(_IRP **)(a1 + 40);
  if( v6 )
  {
    IoReuseIrp(v6, 0i64);
    SmKmSendUsageNotification(*(_IRP **)(a1 + 40), *(_FILE_OBJECT **)(a1 + 8), 1ui64);
    IoFreeIrp(*(IRP **)(a1 + 40));
  }
  v7 = *(struct _DMA_ADAPTER **)(a1 + 8);
  if( v7 )
    HalPutDmaAdapter(v7);
  if( *(_QWORD *)a1 )
    ZwClose(*(HANDLE *)a1);
  v8 = *(struct _PRIVILEGE_SET **)(a1 + 48);
  if( v8 )
    CmSiFreeMemory(v8);
  return IoSetThreadHardErrorMode(v4);
}

Referenced by:

SMKM_STORE::SmStCleanup
SmKmFileInfoDuplicate
SmKmStoreFileCreate
SmKmStoreFileCreateForIoType
SmcCacheCleanup