Blog. Just Blog

Быстрый поиск

Введите фрагмент названия статьи для поиска

Включение регистрозависимых имен файлов на NTFS-дисках

27.04.2021 | Категория: Software | Автор: ManHunter

Включение регистрозависимых имен файлов на NTFS-дисках

Век живи - век учись. Сколько лет работаю с дисками, отформатированными в NTFS, но лишь недавно узнал, что эта файловая система поддерживает регистрозависимые имена файлов, как это "из коробки" работает на *NIX-системах. То есть в Windows можно сделать так, чтобы файлы "FILE.TXT" и "file.txt" считались разными файлами и при этом одновременно существовали в каталоге.

Читать статью целиком »
Просмотров: 684 | Комментариев: 7

Получение списка программ, закрепленных на панели задач

15.04.2021 | Категория: Образ мышления: Assembler | Автор: ManHunter
В одной из старых статей о работе с панелью задач я написал, что узнать список закрепленных программ можно перебором ярлыков в папке %APPDATA%\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar. Действительно, это можно сделать и так, но лучше делать это правильно, с использованием предназначенных для этого COM-интерфейсов системы. Начнем с описания констант, GUID и интерфейсов, которые нам понадобятся для работы.
  1. CLSCTX_INPROC_SERVER    = 1
  2. S_OK                    = 0
  3.  
  4. ; Windows Vista
  5. ; GUID {C3C6EB6D-C837-4EAE-B172-5FEC52A2A4FD}
  6. IID_IPinnedList dd 0C3C6EB6Dh
  7.                 dw 0C837h
  8.                 dw 04EAEh
  9.                 db 0B1h, 072h, 05Fh, 0ECh, 052h, 0A2h, 0A4h, 0FDh
  10.  
  11. ; Windows 7, 8, 8.1
  12. ; GUID {BBD20037-BC0E-42F1-913F-E2936BB0EA0C}
  13. IID_IPinnedList2 dd 0BBD20037h
  14.                  dw 0BC0Eh
  15.                  dw 042F1h
  16.                  db 091h, 03Fh, 0E2h, 093h, 06Bh, 0B0h, 0EAh, 00Ch
  17.  
  18. ; Windows 10 build 1809+
  19. ; GUID {0DD79AE2-D156-45D4-9EEB-3B549769E940}
  20. IID_IPinnedList3 dd 00DD79AE2h
  21.                  dw 0D156h
  22.                  dw 045D4h
  23.                  db 09Eh, 0EBh, 03Bh, 054h, 097h, 069h, 0E9h, 040h
  24.  
  25. ; IID_IPinnedList Interface
  26. struct IPinnedList
  27.     ; IUnknown
  28.     QueryInterface dd ?   ; 000h
  29.     AddRef         dd ?   ; 004h
  30.     Release        dd ?   ; 008h
  31.     ; IPinnedList
  32.     EnumObjects    dd ?   ; 00Ch
  33.     Modify         dd ?   ; 010h
  34.     GetChangeCount dd ?   ; 014h
  35.     IsPinnable     dd ?   ; 018h
  36.     Resolve        dd ?   ; 01Ch
  37.     IsPinned       dd ?   ; 020h
  38. ends
  39.  
  40. ; GUID {90AA3A4E-1CBA-4233-B8BB-535773D48449}
  41. CLSID_TaskbarPin dd 090AA3A4Eh
  42.                  dw 01CBAh
  43.                  dw 04233h
  44.                  db 0B8h, 0BBh, 053h, 057h, 073h, 0D4h, 084h, 049h
  45.  
  46. ; IID_IEnumFullIDList Interface
  47. struct IEnumFullIDList
  48.     ; IUnknown
  49.     QueryInterface dd ?
  50.     AddRef         dd ?
  51.     Release        dd ?
  52.     ; IEnumFullIDList
  53.     Next           dd ?
  54.     Skip           dd ?
  55.     Reset          dd ?
  56.     Clone          dd ?
  57. ends
Как это ни странно, интерфейсы IPinnedList и их методы относятся к недокументированным и информации по ним в интернете практически нет. Для Windows 7-8 используется интерфейс IPinnedList2, а для Windows 10 сборки 1809 и выше нужен интерфейс IPinnedList3. Можно заморочиться даже для Windows Vista, там используется интерфейс IPinnedList. Для получения списка закрепленных приложений нам потребуется только один метод - EnumObjects, к счастью, во всех трех интерфейсах он совпадает.

Читать статью целиком »
Просмотров: 370 | Комментариев: 0

Упаковка и распаковка данных с помощью Delta-функций

11.04.2021 | Категория: Образ мышления: Assembler | Автор: ManHunter

Упаковка и распаковка данных с помощью Delta-функций

В комментариях к предыдущей статье подсказали (DRON, спасибо!) еще один вариант компрессии данных, выполняемый штатными средствами системы. Речь идет о технологии Delta Compression, которая используется в первую очередь в обновлениях Windows. Суть этой технологии заключается в том, что берутся два массива информации, будь то файлы или блоки в памяти. Между ними определяются все различия, после применения которых из первого массива получается второй, такие различия называются "дельтой". Затем информация о дельте тщательно упаковывается высокоэффективными алгоритмами, а из упакованных блоков в дальнейшем формируются патчи. Delta Compression доступна в Windows Vista и более новых системах.

Читать статью целиком »
Просмотров: 409 | Комментариев: 5

Упаковка и распаковка данных с помощью Runtime-функций

28.03.2021 | Категория: Образ мышления: Assembler | Автор: ManHunter

Упаковка и распаковка данных с помощью Runtime-функций

За последнее время тут было выложено немало распаковщиков для различных алгоритмов компрессии данных. Теперь расскажу о штатных функциях упаковки и распаковки, которые есть в Windows. Плюсы их использования в том, что не надо таскать за собой разные алгоритмы или библиотеки, все делается парой системных функций. Степень компрессии, конечно, получается где-то на уровне плинтуса, но этого вполне хватит, например, чтобы в половину утрамбовать логи вашей поняшки перед отправкой на сервер.

Читать статью целиком »
Просмотров: 605 | Комментариев: 6

Перезапуск приложения в случае его аварийного завершения

23.03.2021 | Категория: Образ мышления: Assembler | Автор: ManHunter

Перезапуск приложения в случае его аварийного завершения

Небольшое дополнение к статье про обработку критических ошибок. Обработать возникшую ошибку, сохранить в лог состояние регистров на момент падения, уведомить пользователя о произошедшем - это хорошо и правильно. Но в Windows есть еще один интересный механизм обработки критических ошибок. Речь идет об автоматическом перезапуске приложения в случае возникновения нештатной ситуации типа необрабатываемого исключения или безответного зависания.

Читать статью целиком »
Просмотров: 531 | Комментариев: 5

Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2021
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.12 сек. / MySQL: 3 (0.048 сек.) / Память: 4.75 Mb
Наверх