protected override unsafe int OnCreateProcess(CorDebugProcess pProcess) { CreateProcess?.Invoke(this, pProcess); return(Continue()); }
protected override void OnExternalObjectsDropped(GoInputEventArgs evt) { PointF point; switch (_dpiState) { case DpiState.TooSmall: point = new PointF(evt.DocPoint.X / 2, evt.DocPoint.Y / 2); break; case DpiState.TooBig: point = new PointF(evt.DocPoint.X * 2, evt.DocPoint.Y * 2); break; default: point = evt.DocPoint; break; } if (Selection.Primary is GoSimpleNode simpleNode) { var parent = GetParentGroup(point); simpleNode.Remove(); switch (simpleNode.Text) { case "ExternalInteractor": CreateExternalInteractor?.Invoke(point, parent); break; case "Process": CreateProcess?.Invoke(point, parent); break; case "DataStore": CreateDataStore?.Invoke(point, parent); break; case "TrustBoundary": CreateTrustBoundary?.Invoke(point, parent); break; default: if (Guid.TryParse(simpleNode.Text, out Guid id)) { CreateIdentity?.Invoke(id, point, parent); } break; } } else if (Selection.Primary is GraphThreatTypeNode threatTypeNode) { var threatType = threatTypeNode.ThreatType; threatTypeNode.Remove(); var nodes = Document.PickObjects(point, false, null, 100); foreach (var node in nodes) { var parent = node?.ParentNode; if (parent is GraphEntity gnode) { var entity = _diagram.Model?.GetEntity(gnode.EntityShape.AssociatedId); if (entity != null) { entity.AddThreatEvent(threatType); gnode.ShowThreats(this); } } else if (parent is GraphLink glink) { var dataFlow = _diagram.Model?.GetDataFlow(glink.Link.AssociatedId); if (dataFlow != null) { dataFlow.AddThreatEvent(threatType); glink.ShowThreats(this, point); } } } } }