Вкратце примерно так: при входе WinLogon загружает msgina.dll, которая экспортирует штук 20 функций. Писать с нуля — задача на любителя. Обычно пишут обертку на стандартной. Как правило «заворачивают» все функции.
Если очень интересно, то можно почитать об этом тут: www.rsdn.ru/article/baseserv/extgina.xml
Не уверен, что это можно отлаживать удаленной отладкой… В любом случае, я тогда совсем зеленый был, и про такие вещи как удаленная отладка и виртуальные машины еще не слышал :)
можно, почему нельзя… под ntsd можно загнать winlogon изменив gflags-и, а можно и msvsmon сервисом поставить и работать через студии как обычно… по крайней мере через ntsd я отлаживал винлогон, но это было еще в win2k, может что и поменялось…
Есть замечательный OpenSource проект pGina — там достаточно написать плагин, обязанность которого авторизовать.
(Я писал плагин, чтобы ребёнку ограничить время сидения за компьютером: другие программы, такие как TimeBoss, он как-то обходит)
значит удаляем дллку, чтобы тот кто её нашел не сильно радовался, и входим по паролю :)
вход по паролю не отключаем — более того, credential providers и фильтры в безопасном режиме не работают :)
мы сделал credential provider. он нам дал дополнительный вариант входа — по флешке. старые мы не трогали => они остались, т.е. так же пароль, отпечаток пальца, что было — то осталось.
чтобы убрать лишнее — надо либо написать фильтр либо убрать запись в реестре о других провайдерах входа.
Вообще, глупо хранить в флешке или в коде провайдера пароль. Надо либо его там не хранить, либо если этого требует модель безопасности, хранить уникальный (для провайдера) код.
само собой. с другой стороны — что мешает в провайдере хранить шифрованный ключ, а на флешке — ключ шифрования?
я хотел простое решение для домашнего компьютера, а не безопасное для энтерпрайза.
Ну если можно поставить пакет, то можно вообще задействовать TPM с аппаратным идентификатором вроде iButton + биометрия с полностью шифрованными разделами. Это не проблема. Было бы желание, ну и под виндовс такие пакеты как правило платные + цена самих tpm.
Ничего сносить не придётся, это один из способов логина. Потерялась флешка — удалите dll, зайдя из Safe Mode, и логиньтесь дальше со своим обычным паролем.
скажу по секрету что очень редко действительно надо сносить винду. в данном случае есть масса способов решить проблему не снося винду, от не-выключения стандартного режима входа по паролю(да-да, под одним и тем же пользователем можно войти разными способами!), до исправления реестра из диска восстановления винды :)
а ещё переписать всё без заплаток, сделать конфигуратор, удобный установщик, гарантировать безопасность и надежность и отсутствие утечек памяти — так можно и свой коммерческий продукт сделать.
проблема в том что это всё — уже дело не двух вечеров, а больше :(
технически — вход можно реалиховать так же. только сканировать все PNP-устройства на предмет виртуального ком-порта или чего-либо ещё(смотря какой bluetooth-профиль используем), а на устройстве+компьютере настроить автоматический pairing в случае нахождения девайса в видимом радиусе :)
впринципе вышеуказанное + сервис/приложение работающее в фоне которое по пропадании коннекта — блокирует винду = то что вы хотите :)
а вообще такие решения уже есть, насколько я знаю…
опять же вход по паролю никто не отменял.
даже вход иногда и не нужен по ключу, больше интересно, когда позвали или куда-то срочно нужно отойти, а заблокировать машину забыл.
а таймаут пароля через 1/5/10/30… минут «не активности» не есть хорошо
Какая-то софтинка для сони-ериксонов могла блокировать компьютер по исчезновению телефона из пределов видимости. Логин реализован не был. С другой стороны, дело было года три назад, может уже и изменилось что… Вон, в описании Rohos Logon про блютус что-то написано.
Лично мне интереснее вариант использования чего-нибудь типа проксимити-карты… Но для нее специально обученный ридер надо покупать.
Интересно, но пара небольших замечаний.
Во-первых, все устройства (в частности и диски и мыши) являются наследниками CIM_LogicalDevice.
Во-вторых, вместо итерирования всех устройств с последующим сравнением, лучше сразу создавать WQL запрос с ключевым словом WHERE:
SELECT * FROM CIM_LogicalDevice WHERE PNPDeviceId = 'USBSTOR\DISK&VEN_CBM&PROD_FLASH_DISK&REV_5.00\192023004CB4C702&0'
сделать то можно, но лично мне не кажется правильным писать такие вещи на управляемом коде… если при логоне начнет подгружаться CLR ради такой маленькой вещи то это не очень хорошо ИМХО.
Вход в систему по подключению определенной флешки