IopDecrementDeviceObjectRefCount
VOID __fastcall IopDecrementDeviceObjectRefCount(_DEVICE_OBJECT *DeviceObject, UINT8 LockRequired){
int *p_ReferenceCount;
NTSTATUS v4;
_DRIVER_OBJECT *DriverObject;
p_ReferenceCount = &DeviceObject->ReferenceCount;
if( LockRequired )
v4 = IopInterlockedDecrementUlong(LockQueueIoDatabaseLock, (INT64 *)&DeviceObject->ReferenceCount);
else
v4 = --*p_ReferenceCount;
if( v4 < 0 )
{
DriverObject = DeviceObject->DriverObject;
if( DriverObject )
{
IoAddTriageDumpDataBlock(DriverObject, (_BYTE *)0x150);
IoAddTriageDumpDataBlock(
DeviceObject->DriverObject->DriverName.Buffer,
(_BYTE *)DeviceObject->DriverObject->DriverName.Length);
}
KeBugCheckEx(0x18u, 0i64, DeviceObject, (PVOID)6, (PVOID)*p_ReferenceCount);
}
}Referenced by:
IopCompleteUnloadOrDelete
IopDeleteFile