# Windows Interception driver implementation notes

- Interception handle is `!Send` and `!Sync`
  - means a single thread should own both input and output
  - `KbdOut` will need to send keyboard output events to that thread as opposed
    to Linux using `uinput` and the original Windows code using `SendInput`
    which are independent of the input devices.
  - Maybe save channel in kanata struct as part of new kanata
- Interception can filter for only keyboard events
  - should use this filter feature; don't want to intercept mouse
- Need to save previous device for sending to, in case wait/receive (with
  timeout) don't return anything so that sending stuff can be sent to some
  device.
- Input `ScanCode` maps to the keyberon `KeyCode`; they both use the USB
  standard codes.
  - For ease of integration will probably need to unfortunately convert it to
    an `OsCode` even though the processing loop will soon after just convert it
    back to `KeyCode`. Oh well.
