Blog. Just Blog

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

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

Работа с Zone.Identifier на Ассемблере

12.05.2023 | Категория: Образ мышления: Assembler | Автор: ManHunter
Несколько лет назад я выкладывал пару статей на тему блокировки файлов с помощью альтернативных файловых потоков и Zone.Identifier. Там вся работа с ними выполнялась или средствами самой системы Windows, или сторонними приложениями. Настало время написать собственное приложение.

Сперва немного теории. За блокировку файлов отвечает COM-объект IZoneIdentifier для работы с которым нам потребуется несколько структур, GUID'ов и констант, про которые не знает FASM.
  1. ; GUID {0968E258-16C7-4DBA-AA86-462DD61E31A3}
  2. CLSID_PersistentZoneIdentifier \
  3.     dd 00968E258h
  4.     dw 016C7h
  5.     dw 04DBAh
  6.     db 0AAh, 086h, 046h, 02Dh, 0D6h, 01Eh, 031h, 0A3h
  7.  
  8. ; GUID {CD45F185-1B21-48E2-967B-EAD743A8914E}
  9. IID_IZoneIdentifier \
  10.     dd 0CD45F185h
  11.     dw 01B21h
  12.     dw 048E2h
  13.     db 096h, 07Bh, 0EAh, 0D7h, 043h, 0A8h, 091h, 04Eh
  14.  
  15. ; GUID {0000010B-0000-0000-C000-000000000046}
  16. IID_IPersistFile \
  17.     dd 00000010Bh
  18.     dw 00000h
  19.     dw 00000h
  20.     db 0C0h, 000h, 000h, 000h, 000h, 000h, 000h, 046h
  21.  
  22. ; IID_IZoneIdentifier Interface
  23. struct IZoneIdentifier
  24.     ; IUnknown
  25.     QueryInterface dd ?   ; 000h
  26.     AddRef         dd ?   ; 004h
  27.     Release        dd ?   ; 008h
  28.     ; IZoneIdentifier
  29.     GetId          dd ?   ; 00Ch
  30.     SetId          dd ?   ; 010h
  31.     Remove         dd ?   ; 014h
  32. ends
  33.  
  34. ; IID_IPersistFile Interface
  35. struct IPersistFile
  36.     ; IUnknown
  37.     QueryInterface dd ?   ; 000h
  38.     AddRef         dd ?   ; 004h
  39.     Release        dd ?   ; 008h
  40.     ; IPersistFile
  41.     GetClassID     dd ?   ; 00Ch
  42.     IsDirty        dd ?   ; 010h
  43.     Load           dd ?   ; 014h
  44.     Save           dd ?   ; 018h
  45.     SaveCompleted  dd ?   ; 01Ch
  46.     GetCurFile     dd ?   ; 020h
  47. ends
  48.  
  49. CLSCTX_INPROC_SERVER = 1
  50. S_OK                 = 0
  51. STGM_READ            = 0
Интерфейс IZoneIdentifier предоставляет три метода для работы с Zone.Identifier: получение текущего значения, установка или изменение идентификатора и его полное удаление.

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

Как программно получить и установить рейтинг файла

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

Как программно получить и установить рейтинг файла

Начиная с Windows Vista у пользователя появилась возможность ставить оценки некоторым файлам, например, фотографиям, музыкальным файлам и видеороликам. Оценка отображается при просмотре таблицы файлов в Проводнике в виде звездного рейтинга от 0 до 5. На мой взгляд, штука не особо нужная, но раз она присутствует в системе, то почему бы не научиться с ней работать? Как обычно, Ассемблер нам в этом поможет.

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

Программы для работы с Jump List'ами приложений

25.02.2023 | Категория: Software | Автор: ManHunter
Раз уж я затронул тему "внутренней" работы с Jump List приложений, то было бы неплохо рассказать про готовые программы, которые работают с ними "снаружи".


Удаление элемента системными средствами

Начнем с того, что правильные приложения должны позволять удалять штатными системными средствами добавленные ими часто используемые документы или ссылки. Это же касается и закрепленных пользователем элементов списка.

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

Добавление элементов и задач в Jump List приложения

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

Добавление элементов и задач в Jump List приложения

Функция "Jump List" - список быстрого перехода - впервые появилась в Windows 7. Она создана для облегчения поиска нужных опций и ускорения выполнения наиболее частых операций для выбранного приложения. Списки быстрого перехода появляются при нажатии правой кнопкой мыши на значке приложения в панели задач. Большинство функций для работы с панелью задач я уже давным-давно разобрал, а про Jump List совсем забыл. Срочно исправляю ситуацию.

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

Получение и изменение обоев рабочего стола на Ассемблере

14.01.2023 | Категория: Образ мышления: Assembler | Автор: ManHunter
Тема обоев рабочего стола Windows уже поднималась тут несколько раз, но это были, в основном, какие-то готовые программные решения. Настало время заглянуть "под капот" системы и посмотреть, как оно устроено. А лучшего инструмента, чем Ассемблер, для этих целей сложно придумать.

Начнем с получения информации об установленных обоях рабочего стола. Тут ничего сложного, достаточно вызвать функцию SystemParametersInfo с параметром SPI_GETDESKWALLPAPER.
  1.         SPI_GETDESKWALLPAPER = 0x0073
  2.  
  3.         invoke  SystemParametersInfo,SPI_GETDESKWALLPAPER,\
  4.                 MAX_PATH,szPath,0
  5.         ; szPath -> строка пути к файлу обоев
После выполнения этого кода в переменную szPath будет записана строка с расположением файла обоев на диске. Больше никакой информации типа положения изображения получить нельзя. В результате экспериментов выяснилось, что при смене обоев через системное меню "Персонализация", выбранный файл с изображением копируется в папку с пользовательскими темами, а при программной установке остается на месте. Особой практической пользы в этом знании нет, просто интересный факт.

Теперь переходим к смене обоев рабочего стола. В интернетах для этих целей обычно рекомендуют использовать упомянутую выше функцию SystemParametersInfo с параметром SPI_SETDESKWALLPAPER. Код получается минимальный, все очень просто реализуется, выглядит на первый взгляд стильно, модно, молодежно.
  1. ; Путь к файлу с новыми обоями рабочего стола
  2. szPath  db 'c:\windows\wallpaper.bmp',0
  3.  
  4.         SPI_SETDESKWALLPAPER  = 20
  5.         SPIF_SENDWININICHANGE = 2
  6.         SPIF_UPDATEINIFILE    = 1
  7.  
  8.         invoke  SystemParametersInfo,SPI_SETDESKWALLPAPER,\
  9.                 0,szPath,SPIF_UPDATEINIFILE+SPIF_SENDWININICHANGE
Минусы этого способа перекрывают все плюсы. Нет возможности настраивать режим отображения обоев. Новые обои отображаются в том же положении, в котором были установлены текущие, если старое и новое изображения имеют разные пропорции, то результат будет печальным. А главное, что в некоторых случаях невозможно использовать файлы графических форматов кроме BMP, хотя через меню "Персонализация" они устанавливаются без вопросов.

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

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