CcPinMappedData
UINT8 __stdcall CcPinMappedData(
PFILE_OBJECT FileObject,
PLARGE_INTEGER FileOffset,
UINT64 Length,
UINT64 Flags,
VOID **Bcb){
int v5;
_VACB **v8;
_DWORD *SharedCacheMap;
unsigned int v10;
_LARGE_INTEGER v11;
VOID **v12;
char v13;
UINT8 v14;
UINT64 Flagsa;
VOID *Obcb;
_LARGE_INTEGER FileOffseta;
VOID **v19;
VOID *BaseAddress;
_LARGE_INTEGER BeyondLastByte;
unsigned int v22;
v22 = Length;
v5 = Flags;
BaseAddress = 0i64;
BeyondLastByte.QuadPart = 0i64;
FileOffseta = *FileOffset;
Obcb = 0i64;
v19 = &Obcb;
v8 = (_VACB **)Bcb;
if( ((unsigned __int8)*Bcb & 1) == 0 )
return 1;
*Bcb = (char *)*Bcb - 1;
SharedCacheMap = FileObject->SectionObjectPointer->SharedCacheMap;
__incgsdword(0x8114u);
if( LOWORD((*v8)->BaseAddress) != 765 )
{
v10 = v22;
v11 = BeyondLastByte;
v12 = v19;
while( 1 )
{
if( Obcb )
{
if( v12 == &Obcb )
{
Obcb = CcAllocateObcb(FileOffset, v10, (__int64)Obcb);
v12 = (VOID **)((char *)Obcb + 16);
v19 = (VOID **)((char *)Obcb + 16);
v11 = BeyondLastByte;
}
v10 += FileOffseta.anonymous_0.LowPart - v11.anonymous_0.LowPart;
v22 = v10;
FileOffseta = v11;
v19 = ++v12;
}
LODWORD(Flagsa) = v5;
CcPinFileData(
FileObject,
&FileOffseta,
v10,
(SharedCacheMap[38] & 0x200) == 0,
0,
Flagsa,
(_BCB **)v12,
&BaseAddress,
&BeyondLastByte);
if( !v13 )
goto LABEL_13;
v11 = BeyondLastByte;
if( BeyondLastByte.QuadPart - FileOffseta.QuadPart >= v10 )
{
CcFreeVirtualAddress(*v8);
*v8 = (_VACB *)Obcb;
goto LABEL_8;
}
}
}
if( !ExAcquireSharedStarveExclusive((PERESOURCE)&(*v8)[1].ArrayHead, Flags & 1) )
{
LABEL_13:
v14 = 0;
goto LABEL_14;
}
LABEL_8:
v14 = 1;
LABEL_14:
if( !v14 )
{
*v8 = (_VACB *)((char *)*v8 + 1);
if( Obcb )
CcUnpinData(Obcb);
}
return v14;
}Referenced by:
No references.