RawInitializeVcb

NTSTATUS __stdcall RawInitializeVcb(_VCB *Vcb, _DEVICE_OBJECT *TargetDeviceObject, _VPB *Vpb){
  VOID **PoolWithTag; 
  VOID **v7; 
  _EX_RUNDOWN_REF_CACHE_AWARE *CacheAwareRundownProtection; 
  NTSTATUS v9; 
  char v10; 
  NTSTATUS result; 

  memset(Vcb, 0i64, 0x150u);
  *((_QWORD *)Vcb + 23) = Vpb;
  *Vcb = 22021632;
  *((_QWORD *)Vcb + 22) = TargetDeviceObject;
  PoolWithTag = ExAllocatePoolWithTag(0x200ui64, 0x60ui64, 544694610i64);
  *((_QWORD *)Vcb + 24) = PoolWithTag;
  v7 = PoolWithTag;
  CacheAwareRundownProtection = ExAllocateCacheAwareRundownProtection(NonPagedPoolNx, 0x20776152ui64);
  *((_QWORD *)Vcb + 27) = CacheAwareRundownProtection;
  Vcb[56] = 1;
  v9 = v7 == 0i64 ? 0xC000009A : 0;
  if( !CacheAwareRundownProtection )
    v9 = -1073741670;
  *((_QWORD *)Vcb + 29) = 0i64;
  Vcb[60] = 0;
  KeInitializeEvent((INT64)(Vcb + 62), 1, 0);
  *((_QWORD *)Vcb + 36) = 0i64;
  Vcb[74] = 0;
  Vcb[70] = 1;
  KeInitializeEvent((INT64)(Vcb + 76), 1, 0);
  v10 = *((_BYTE *)Vcb + 7);
  *((_BYTE *)Vcb + 4) |= 0x40u;
  *((_BYTE *)Vcb + 6) |= 2u;
  *((_BYTE *)Vcb + 7) = v10 & 0xF | 0x30;
  *((_QWORD *)Vcb + 8) = Vcb + 14;
  *((_QWORD *)Vcb + 7) = Vcb + 14;
  if( Vcb != (_VCB *)-280i64 )
    *((_QWORD *)Vcb + 6) = Vcb + 70;
  *((_QWORD *)Vcb + 9) = 0i64;
  result = v9;
  *((_QWORD *)Vcb + 10) = 0i64;
  *((_QWORD *)Vcb + 11) = 0i64;
  *((_QWORD *)Vcb + 12) = 0i64;
  Vcb[26] |= 0x10u;
  return result;
}

Referenced by:

RawMountVolume