From 34d942a439bf3068d1a60201041a34fcdb8bb1dc Mon Sep 17 00:00:00 2001 From: Bill Zissimopoulos Date: Sun, 10 Mar 2019 17:16:57 -0700 Subject: [PATCH] doc: add arch diagram --- doc/architecture.png | Bin 0 -> 21416 bytes doc/architecture.puml | 30 ++++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 doc/architecture.png create mode 100644 doc/architecture.puml diff --git a/doc/architecture.png b/doc/architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..992aadbb22c70a082c4a03a72a4354adae72e2ff GIT binary patch literal 21416 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 PA4tm6)z4*}Q$iB}^29Zj literal 0 HcmV?d00001 diff --git a/doc/architecture.puml b/doc/architecture.puml new file mode 100644 index 0000000..db22c11 --- /dev/null +++ b/doc/architecture.puml @@ -0,0 +1,30 @@ +@startuml +skinparam componentStyle uml2 + +node "Windows Explorer" as explorer { + component "Shell Extension DLL" as shellex #Salmon +} + +node "Windows Services Session" as svc { + node "Launcher Service" as launcher #Salmon + node "Storage Device Process\n(e.g. rawdisk)" as stgdev { + component "WinSpd DLL" as dll #Salmon + } + launcher ..> stgdev: <> +} + +shellex - launcher: mount / eject + +node Kernel as kernel { + component "disk.sys" as disk + component "WinSpd Driver" as drv #Salmon + component "storport.sys" as storport + disk - drv + drv - storport +} + +dll -- drv: IOCTL + +note "Salmon color\ndenotes WinSpd\ncomponent." as n1 #Salmon + +@enduml