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.