CcPinRead
UINT8 __stdcall CcPinRead(
PFILE_OBJECT FileObject,
PLARGE_INTEGER FileOffset,
UINT64 Length,
UINT64 Flags,
VOID **Bcb,
VOID **Buffer){
int v6;
_DWORD *SharedCacheMap;
VOID **v10;
unsigned int v11;
_LARGE_INTEGER v12;
VOID **v13;
char v14;
UINT64 Flagsa;
UINT8 v17;
VOID *Obcb;
VOID **v19;
VOID *BaseAddress;
_LARGE_INTEGER BeyondLastByte;
_LARGE_INTEGER FileOffseta;
unsigned int v23;
v23 = Length;
v6 = Flags;
BaseAddress = 0i64;
BeyondLastByte.QuadPart = 0i64;
FileOffseta = *FileOffset;
Obcb = 0i64;
v19 = &Obcb;
__incgsdword(4 * (Flags & 1) + 33048);
KeGetCurrentThread()[1].Timer.DueTime.HighPart = 0;
SharedCacheMap = FileObject->SectionObjectPointer->SharedCacheMap;
v10 = Buffer;
v11 = v23;
v12 = BeyondLastByte;
v13 = v19;
do
{
if( Obcb )
{
if( v13 == &Obcb )
{
Obcb = CcAllocateObcb(FileOffset, v11, (__int64)Obcb);
v13 = (VOID **)((char *)Obcb + 16);
v19 = (VOID **)((char *)Obcb + 16);
*v10 = BaseAddress;
v12 = BeyondLastByte;
}
v11 += FileOffseta.anonymous_0.LowPart - v12.anonymous_0.LowPart;
v23 = v11;
FileOffseta = v12;
v19 = ++v13;
}
LODWORD(Flagsa) = v6;
CcPinFileData(
FileObject,
&FileOffseta,
v11,
(SharedCacheMap[38] & 0x200) == 0,
0,
Flagsa,
(_BCB **)v13,
&BaseAddress,
&BeyondLastByte);
if( !v14 )
{
__incgsdword(0x8154u);
v17 = 0;
goto LABEL_12;
}
v12 = BeyondLastByte;
}
while( BeyondLastByte.QuadPart - FileOffseta.QuadPart < v11 );
*Bcb = Obcb;
if( v13 == &Obcb )
*v10 = BaseAddress;
v17 = 1;
LABEL_12:
__addgsdword(0x8158u, KeGetCurrentThread()[1].Timer.DueTime.HighPart);
if( !v17 && Obcb )
CcUnpinData(Obcb);
return v17;
}Referenced by:
No references.