Run the configured formatter across the repository before audit remediation so later security fixes produce reviewable, conflict-resistant diffs.
43 lines
4.2 KiB
Markdown
43 lines
4.2 KiB
Markdown
# Krona Staff Service (Windows Service)
|
||
|
||
Фоновая системная служба Windows для Krona Staff Terminal.
|
||
|
||
## Назначение
|
||
|
||
- Фоновая отправка очереди отметок посещаемости (`check_in`, `check_out`, автоматический уход) на сервер Staff API через HTTPS.
|
||
- Непрерывная синхронизация очереди даже после выхода интерактивного пользователя из Windows (Log off / Switch user).
|
||
- Идемпотентная доставка событий с сохранением `Idempotency-Key` (ULID) и предотвращением дубликатов при сетевых сбоях.
|
||
- Предоставление защищённого локального IPC-канала (Named Pipe `\\.\pipe\KronaStaffTerminalPipe`) для взаимодействия с пользовательским интерфейсом `KronaStaffTerminal`.
|
||
- Проверка и публикация статуса лицензии через `ILicenseStatusPort`.
|
||
|
||
## Архитектура и изоляция Session 0
|
||
|
||
В операционных системах Windows (начиная с Windows Vista / Server 2008 и включая Windows 10/11) службы выполняются в изолированной сессии **Session 0** без интерактивного рабочего стола.
|
||
|
||
### Результаты анализа ZKFinger SDK 5.3 и драйвера SLK20R в Session 0:
|
||
|
||
1. Пользовательская библиотека `libzkfp.dll` и драйвер `slk20r.sys` при инициализации используют оконные сообщения Win32 (`WM_DEVICECHANGE`) и оконные дескрипторы для отслеживания PnP-событий USB, а также дескрипторы интерфейсов устройств, привязанные к интерактивным пользовательским сессиям.
|
||
2. При вызове `zkfp2.Init()` в Session 0 драйвер сообщает 0 подключённых устройств (`GetDeviceCount() == 0`) либо завершается с кодом ошибки дескриптора (-1 / -7).
|
||
3. Попытка эксклюзивного захвата USB-устройства службой Session 0 блокирует доступ к сканеру со стороны интерактивного пользовательского сеанса для регистрации новых отпечатков.
|
||
|
||
### Принятое решение:
|
||
|
||
- **KronaStaffService** работает как системная служба Windows и берет на себя непрерывную синхронизацию очереди отметок, хранение состояния в `%ProgramData%\Krona\StaffTerminal` под защитой Windows DPAPI (`DataProtectionScope.LocalMachine`) и IPC-шлюз.
|
||
- Интерактивное приложение **KronaStaffTerminal** подключается к сканеру SLK20R в пользовательской сессии (с автозапуском при входе в систему и сворачиванием в трей), выполняет высокоточное распознавание и регистрацию отпечатков, фиксирует отметки и передаёт их в очередь службы.
|
||
- Если интерактивный пользователь выходит из системы или закрывает приложение, служба **KronaStaffService** продолжает выгрузку всех накопленных офлайн-событий на сервер.
|
||
|
||
## Управление службой
|
||
|
||
Установка и регистрация службы:
|
||
|
||
```powershell
|
||
sc.exe create KronaStaffService binPath= "C:\Program Files\Krona Staff Terminal\KronaStaffService.exe" start= auto obj= "NT AUTHORITY\SYSTEM" DisplayName= "Krona Staff Service"
|
||
sc.exe start KronaStaffService
|
||
```
|
||
|
||
Остановка и удаление:
|
||
|
||
```powershell
|
||
sc.exe stop KronaStaffService
|
||
sc.exe delete KronaStaffService
|
||
```
|