CcMapData

UINT8 __stdcall CcMapData(
        PFILE_OBJECT FileObject,
        PLARGE_INTEGER FileOffset,
        UINT64 Length,
        UINT64 Flags,
        VOID **Bcb,
        VOID **Buffer){
  unsigned int v6; 
  unsigned int v7; 
  char v8; 
  int v9; 
  unsigned int v10; 
  VOID **v11; 
  int v12; 
  UINT8 result; 
  UINT64 RequestHighPriorityMapping; 
  UINT64 PerformingReadAhead; 
  char ReceivedLength[12]; 
  _LARGE_INTEGER BeyondLastByte; 

  v6 = Flags;
  v7 = Length;
  v8 = 0;
  BeyondLastByte.QuadPart = 0i64;
  *(_QWORD *)&ReceivedLength[4] = 0i64;
  v9 = Flags & 1;
  if( v9 )
    v10 = 33040;
  else
    v10 = 33036;
  __incgsdword(v10);
  KeGetCurrentThread()[1].Timer.DueTime.HighPart = 0;
  if( v9 )
  {
    LODWORD(PerformingReadAhead) = 0;
    LODWORD(RequestHighPriorityMapping) = (v6 >> 6) & 1;
    v11 = Buffer;
    *Buffer = CcGetVirtualAddress(
                (_SHARED_CACHE_MAP *)FileObject->SectionObjectPointer->SharedCacheMap,
                *FileOffset,
                (_VACB **)&ReceivedLength[4],
                (UINT64 *)ReceivedLength,
                RequestHighPriorityMapping,
                PerformingReadAhead);
  }
  else
  {
    v11 = Buffer;
    LODWORD(PerformingReadAhead) = v6;
    CcPinFileData(
      FileObject,
      FileOffset,
      Length,
      1u,
      0,
      PerformingReadAhead,
      (_BCB **)&ReceivedLength[4],
      Buffer,
      &BeyondLastByte);
    if( !result )
    {
      __incgsdword(0x814Cu);
      return result;
    }
  }
  if( (v6 & 0x10) == 0 )
  {
    v12 = v6 & 0x100;
    if( v12 )
    {
      v8 = BYTE5(KeGetCurrentThread()[1].Queue) + 2;
      BYTE5(KeGetCurrentThread()[1].Queue) = 1;
    }
    CcMapAndRead(v7, 0i64, 1u, *v11);
    if( v12 )
      BYTE5(KeGetCurrentThread()[1].Queue) = v8 - 2;
  }
  __addgsdword(0x8150u, KeGetCurrentThread()[1].Timer.DueTime.HighPart);
  *Bcb = (VOID *)(*(_QWORD *)&ReceivedLength[4] + 1i64);
  return 1;
}

Referenced by:

No references.