SmcGetCacheStats

NTSTATUS __stdcall SmcGetCacheStats(
        PDEVICE_OBJECT DeviceObject,
        ULONG SectorSize,
        BOOL ReturnRecognizedPartitions,
        _DRIVE_LAYOUT_INFORMATION **PartitionBuffer){
  __int64 v4; 
  _SMC_CACHE *v6; 
  _EX_PUSH_LOCK *v7; 
  int Path; 
  unsigned int v9; 
  unsigned int v10; 
  _ETHREAD *CurrentThread; 
  _EX_PUSH_LOCK *v12; 
  _EX_PUSH_LOCK *v13; 
  __int64 v14; 

  v4 = *(_QWORD *)&SectorSize;
  memset((VOID *)(*(_QWORD *)&SectorSize + 8i64), 0i64, 0x460u);
  v6 = SmcCacheReference((_SMC_CACHE_MANAGER *)&DeviceObject->Type, *(unsigned int *)(v4 + 4));
  v7 = (_EX_PUSH_LOCK *)v6;
  if( !v6 )
    return -1073741672;
  v9 = *(_DWORD *)(v4 + 28) & 0xFFFFFFC0 | 1;
  *(_DWORD *)(v4 + 28) = v9;
  *(_QWORD *)(v4 + 8) = *((_QWORD *)v6 + 2);
  *(_DWORD *)(v4 + 20) = v6[2];
  *(_DWORD *)(v4 + 24) = v6[6];
  *(_DWORD *)(v4 + 100) = v6[8];
  *(_DWORD *)(v4 + 28) = v9 ^ ((unsigned __int8)v9 ^ (unsigned __int8)((unsigned __int8)v6[7] << 6)) & 0x40;
  if( (*(_DWORD *)v4 & 0x100) != 0 || (Path = SmKmFileInfoGetPath(v6 + 10, (WCHAR *)(v4 + 104), 0x400ui64), Path >= 0) )
  {
    *(_DWORD *)(v4 + 96) = 0;
    v10 = 0;
    CurrentThread = (_ETHREAD *)KeGetCurrentThread();
    --CurrentThread->Tcb.KernelApcDisable;
    v12 = v7 + 20;
    ExAcquirePushLockSharedEx(v7 + 20, 0i64);
    v13 = v7 + 21;
    v14 = 16i64;
    do
    {
      if( LODWORD(v13->_bf_0) != -1 )
      {
        *(_DWORD *)(v4 + 4i64 * v10 + 32) = v13->_bf_0;
        if( (HIDWORD(v13->Ptr) & 3) == 0 )
          *(_DWORD *)(v4 + 96) |= 1 << v10;
        ++v10;
      }
      v13 += 3;
      --v14;
    }
    while( v14 );
    if( _InterlockedCompareExchange64(&v12->_bf_0, 0i64, 17i64) != 17 )
      ExfReleasePushLockShared(v12);
    KeAbPostRelease(v12);
    KeLeaveCriticalRegion();
    *(_DWORD *)(v4 + 16) = v10;
    Path = 0;
  }
  ExReleaseRundownProtection((_EX_RUNDOWN_REF *)&DeviceObject->DriverObject + 4 * (*(_DWORD *)(v4 + 4) & 0xF));
  return Path;
}

Referenced by:

SmcProcessStatsRequest