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.