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