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.