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.