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.