IopIncrementVpbRefCount
NTSTATUS __stdcall IopIncrementVpbRefCount(_VPB *Vpb, UINT8 LockRequired){
unsigned int *p_ReferenceCount;
NTSTATUS result;
_DEVICE_OBJECT *DeviceObject;
_DRIVER_OBJECT *DriverObject;
p_ReferenceCount = &Vpb->ReferenceCount;
if( LockRequired )
result = IopInterlockedIncrementUlong(LockQueueIoVpbLock, (INT64 *)&Vpb->ReferenceCount);
else
result = ++*p_ReferenceCount;
if( result <= 0 )
{
DeviceObject = Vpb->DeviceObject;
if( DeviceObject )
{
IoAddTriageDumpDataBlock(DeviceObject, (_BYTE *)0x150);
DriverObject = Vpb->DeviceObject->DriverObject;
if( DriverObject )
{
IoAddTriageDumpDataBlock(DriverObject, (_BYTE *)0x150);
IoAddTriageDumpDataBlock(
Vpb->DeviceObject->DriverObject->DriverName.Buffer,
(_BYTE *)Vpb->DeviceObject->DriverObject->DriverName.Length);
}
}
KeBugCheckEx(0x18u, 0i64, Vpb, (PVOID)7, (PVOID)*p_ReferenceCount);
}
return result;
}Referenced by:
IoCreateStreamFileObjectEx2
IopMountInitializeVpb
IopParseDevice
IopReferenceVerifyVpb