unsafe public IrpCompletedViewModel(int index, IrpCompletedInfo *info, IrpArrivedViewModel arrived) : base(index, arrived?.DriverName, &info->Header) { _arrived = arrived; Status = info->Status; Information = info->Information.ToInt64(); Details = $"Status: 0x{Status:X}; Information=0x{Information:X}"; if (Status == StatusPending) { IrpType = IrpType.Pending; Icon = "/icons/clock.ico"; Details = "PENDING"; } else if (Status >= 0) { IrpType = IrpType.CompleteSuccess; Icon = "/icons/irp-success.ico"; } else if ((uint)Status == StatusCancelled) { IrpType = IrpType.Cancelled; Icon = "/icons/irp-cancel.ico"; } else { IrpType = IrpType.CompleteError; Icon = "/icons/irp-error.ico"; } Irp = _arrived != null ? _arrived.Irp : 0; MajorCode = _arrived != null ? _arrived.MajorCode : IrpMajorCode.UNKNOWN; DataSize = info->DataSize; if (DataSize > 0) { Data = new byte[DataSize]; fixed(byte *p = Data) { Buffer.MemoryCopy((byte *)info + info->Header.Size - DataSize, p, DataSize, DataSize); } } Function = _arrived?.Function; }
unsafe public IrpCompletedViewModel(int index, IrpCompletedInfo *info, IrpArrivedViewModel arrived) : base(index, arrived.DriverName, &info->Header) { _arrived = arrived; Status = info->Status; Information = info->Information.ToInt64(); Details = $"Status: 0x{Status:X}; Information=0x{Information:X}"; if (Status >= 0) { IrpType = IrpType.CompleteSuccess; Icon = "/icons/irp-success.ico"; } else if ((uint)Status == StatusCancelled) { IrpType = IrpType.Cancelled; Icon = "/icons/irp-cancel.ico"; } else { IrpType = IrpType.CompleteError; Icon = "/icons/irp-error.ico"; } }
public DataBufferViewModel(Window dialog, IrpArrivedViewModel vm) : base(dialog) { _vm = vm; }