CcPinRead
BOOLEAN __stdcall CcPinRead(
PFILE_OBJECT FileObject,
PLARGE_INTEGER FileOffset,
ULONG Length,
ULONG Flags,
PVOID *Bcb,
PVOID *Buffer){
_DWORD *SharedCacheMap;
PVOID *v9;
unsigned int v10;
__int64 v11;
PVOID *v12;
__int64 v14;
BOOLEAN v15;
PVOID Obcb;
PVOID *v17;
void *v18;
__int64 v19;
LONGLONG QuadPart;
ULONG v21;
v21 = Length;
v18 = 0i64;
v19 = 0i64;
QuadPart = FileOffset->QuadPart;
Obcb = 0i64;
v17 = &Obcb;
__incgsdword(4 * (Flags & 1) + 33048);
*((_DWORD *)KeGetCurrentThread() + 339) = 0;
SharedCacheMap = FileObject->SectionObjectPointer->SharedCacheMap;
v9 = Buffer;
v10 = v21;
v11 = v19;
v12 = v17;
do
{
if( Obcb )
{
if( v12 == &Obcb )
{
Obcb = (PVOID)CcAllocateObcb();
v12 = (PVOID *)((char *)Obcb + 16);
v17 = (PVOID *)((char *)Obcb + 16);
*v9 = v18;
v11 = v19;
}
v10 += QuadPart - v11;
v21 = v10;
QuadPart = v11;
v17 = ++v12;
}
LODWORD(v14) = Flags;
if( !(unsigned __int8)CcPinFileData(
(__int64)FileObject,
&QuadPart,
v10,
(SharedCacheMap[38] & 0x200) == 0,
0,
v14,
v12,
(__int64 *)&v18,
&v19) )
{
__incgsdword(0x8154u);
v15 = 0;
goto LABEL_12;
}
v11 = v19;
}
while( v19 - QuadPart < v10 );
*Bcb = Obcb;
if( v12 == &Obcb )
*v9 = v18;
v15 = 1;
LABEL_12:
__addgsdword(0x8158u, *((_DWORD *)KeGetCurrentThread() + 339));
if( !v15 && Obcb )
CcUnpinData(Obcb);
return v15;
}Referenced by:
No references.