ViFilterDeviceUsageNotificationCompletion
NTSTATUS __stdcall ViFilterDeviceUsageNotificationCompletion(_DEVICE_OBJECT *DeviceObject, _IRP *Irp, VOID *Context){
char *DeviceExtension;
_IO_STACK_LOCATION *CurrentStackLocation;
unsigned __int64 v7;
int v8;
int v9;
__int64 v10;
if( Irp->PendingReturned )
Irp->Tail.CurrentStackLocation->Control |= 1u;
DeviceExtension = (char *)DeviceObject->DeviceExtension;
if( Irp->IoStatus.Status >= 0 )
{
CurrentStackLocation = Irp->Tail.CurrentStackLocation;
v7 = (unsigned __int8)KeAcquireSpinLockRaiseToDpc((UINT64 *)DeviceExtension + 11);
v8 = *((_DWORD *)DeviceExtension + 24);
if( LOBYTE(CurrentStackLocation->Parameters.SecurityContext) )
{
*((_DWORD *)DeviceExtension + 24) = v8 + 1;
if( !v8 )
DeviceObject->Flags &= ~0x2000u;
}
else
{
v9 = v8 - 1;
*((_DWORD *)DeviceExtension + 24) = v9;
if( !v9 )
{
v10 = *((_QWORD *)DeviceExtension + 1);
DeviceObject->Flags |= *(_DWORD *)(v10 + 48) & 0x2000;
}
}
_InterlockedAnd64((volatile signed __int64 *)DeviceExtension + 11, 0i64);
__writecr8(v7);
}
IoReleaseRemoveLockEx((PIO_REMOVE_LOCK)(DeviceExtension + 32), Irp, 0x20u);
return 0;
}Referenced by:
No references.