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.