SmKmFileInfoCleanup

VOID __stdcall SmKmFileInfoCleanup(_SMKM_FILE_INFO *FileInfo){
  void *v2; 
  char v3; 
  char v4; 
  _ADAPTER_OBJECT *v5; 
  _IRP *v6; 
  _ADAPTER_OBJECT *v7; 
  _PRIVILEGE_SET *v8; 

  IoSetThreadHardErrorMode(0);
  v2 = (void *)*((_QWORD *)FileInfo + 4);
  v4 = v3;
  if( v2 )
    PnpUnregisterPlugPlayNotification(v2, 0);
  v5 = (_ADAPTER_OBJECT *)*((_QWORD *)FileInfo + 2);
  if( v5 )
    HalPutDmaAdapter(v5);
  v6 = (_IRP *)*((_QWORD *)FileInfo + 5);
  if( v6 )
  {
    IoReuseIrp(v6, 0);
    SmKmSendUsageNotification(*((PIRP *)FileInfo + 5), *((PFILE_OBJECT *)FileInfo + 1), 1ui64);
    IoFreeIrp(*((PIRP *)FileInfo + 5));
  }
  v7 = (_ADAPTER_OBJECT *)*((_QWORD *)FileInfo + 1);
  if( v7 )
    HalPutDmaAdapter(v7);
  if( *(_QWORD *)FileInfo )
    ZwClose(*(_QWORD *)FileInfo);
  v8 = (_PRIVILEGE_SET *)*((_QWORD *)FileInfo + 6);
  if( v8 )
    CmSiFreeMemory(v8);
  LOBYTE(v8) = v4;
  IoSetThreadHardErrorMode((INT16)v8);
}

Referenced by:

SMKM_STORE::SmStCleanup
SmKmFileInfoDuplicate
SmKmStoreFileCreate
SmKmStoreFileCreateForIoType
SmcCacheCleanup