ViFilterDispatchPower
NTSTATUS __stdcall ViFilterDispatchPower(_DEVICE_OBJECT *DeviceObject, _IRP *Irp){
_DWORD *DeviceExtension;
int v4;
NTSTATUS v5;
_IO_STACK_LOCATION *CurrentStackLocation;
_IO_STACK_LOCATION *v8;
UINT64 RemlockSize;
_DWORD *v10;
DeviceExtension = DeviceObject->DeviceExtension;
v10 = DeviceExtension;
while( (DeviceExtension[25] & 1) == 0 )
_mm_pause();
LODWORD(RemlockSize) = 32;
v4 = IoAcquireRemoveLockEx((_IO_REMOVE_LOCK *)(v10 + 8), Irp, (CHAR *)&byte_1409C4470, 1ui64, RemlockSize);
v5 = v4;
if( v4 >= 0 )
{
CurrentStackLocation = Irp->Tail.CurrentStackLocation;
*(_OWORD *)&CurrentStackLocation[-1].MajorFunction = *(_OWORD *)&CurrentStackLocation->MajorFunction;
*(_OWORD *)&CurrentStackLocation[-1].Parameters.Options = *(_OWORD *)&CurrentStackLocation->Parameters.Options;
*(_OWORD *)&CurrentStackLocation[-1].Parameters.EaLength = *(_OWORD *)&CurrentStackLocation->Parameters.EaLength;
CurrentStackLocation[-1].FileObject = CurrentStackLocation->FileObject;
CurrentStackLocation[-1].Control = 0;
v8 = Irp->Tail.CurrentStackLocation;
v8[-1].CompletionRoutine = (int(__fastcall *)(_DEVICE_OBJECT *, _IRP *, void *))ViFilterGenericCompletionRoutine;
v8[-1].Context = &v10;
v8[-1].Control = -32;
return PoCallDriver(*((PDEVICE_OBJECT *)v10 + 1), Irp);
}
else
{
Irp->IoStatus.Status = v4;
IofCompleteRequest(Irp, 0);
return v5;
}
}Referenced by:
No references.