CcMapData

UINT8 __stdcall CcMapData(
        FILE_OBJECT *FileObject,
        LARGE_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; 
  VOID **v12; 
  int v13; 
  UINT8 result; 
  UINT64 RequestHighPriorityMapping; 
  UINT64 PerformingReadAhead; 
  char ReceivedLength[12]; 
  __int64 v18[5]; 
  v6 = Flags;
  v7 = Length;
  v8 = 0;
  v18[0] = 0i64;
  *(_QWORD *)&ReceivedLength[4] = 0i64;
  v9 = Flags & 1;
  if( v9 )
    v10 = 33040;
  else
    v10 = 33036;
  __incgsdword(v10);
  *((_DWORD *)KeGetCurrentThread() + 339) = 0;
  if( v9 )
  {
    LODWORD(PerformingReadAhead) = 0;
    LODWORD(RequestHighPriorityMapping) = (v6 >> 6) & 1;
    LODWORD(v11) = CcGetVirtualAddress(
                     (_SHARED_CACHE_MAP *)FileObject->SectionObjectPointer->SharedCacheMap,
                     *FileOffset,
                     (_VACB **)&ReceivedLength[4],
                     (UINT64 *)ReceivedLength,
                     RequestHighPriorityMapping,
                     PerformingReadAhead);
    v12 = Buffer;
    *Buffer = v11;
  }
  else
  {
    v12 = Buffer;
    LODWORD(PerformingReadAhead) = v6;
    result = CcPinFileData(
               (__int64)FileObject,
               (__int64 *)FileOffset,
               Length,
               1,
               0,
               PerformingReadAhead,
               &ReceivedLength[4],
               (__int64 *)Buffer,
               v18);
    if( !result )
    {
      __incgsdword(0x814Cu);
      return result;
    }
  }
  if( (v6 & 0x10) == 0 )
  {
    v13 = v6 & 0x100;
    if( v13 )
    {
      v8 = *((_BYTE *)KeGetCurrentThread() + 1309) + 2;
      *((_BYTE *)KeGetCurrentThread() + 1309) = 1;
    }
    CcMapAndRead(v7, 0i64, 1u, *v12);
    if( v13 )
      *((_BYTE *)KeGetCurrentThread() + 1309) = v8 - 2;
  }
  __addgsdword(0x8150u, *((_DWORD *)KeGetCurrentThread() + 339));
  *Bcb = (VOID *)(*(_QWORD *)&ReceivedLength[4] + 1i64);
  return 1;
}

Referenced by:

No references.