Blog. Just Blog

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

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

VESA Commander 1.4

25.09.2021 | Категория: Мои программы | Автор: ManHunter

Скриншот программы VESA Commander

VESA Commander - консольная программа для получения различной технической информации и тестирования мониторов с поддержкой стандарта VESA DDC/CI. Она позволяет получить текущее значение и описание любого из поддерживаемых монитором VCP кодов, а также изменить это значение, если это возможно. Таким образом, например, вы можете включить или выключить монитор, поменять язык экранных подсказок, изменить яркость или контрастность, выбрать цветовой профиль, а также сделать со своим монитором еще много чего интересного. Список VCP кодов стандартизирован и описан в документе VESA Monitor Control Command Set (MCCS), там же приводится формат и описание большинства значений передаваемых и получаемых параметров.

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

Обработка критических ошибок с помощью VEH

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

Обработка критических ошибок с помощью VEH

Продолжение темы, начатой в статье про обработку ошибок, где для этого используется механизм SEH. Принципиальное отличие VEH (Vectored Exception Handling) от SEH (Structured Exception Handling) в том, что обработчики VEH глобальны для процесса и позволяют обрабатывать абсолютно все исключения для всех потоков, тогда как при использовании SEH нужно писать отдельный обработчик на каждый поток.

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

Обработка изменения иконок в системном трее

19.06.2021 | Категория: Образ мышления: Assembler | Автор: ManHunter
С обновлением иконок в системном трее разобрались, теперь давайте разберем, как можно отслеживать изменения в трее. Причем изменения касаются не только добавления-удаления иконок, но также изменения всплывающих подсказок и изменения иконки с сохранением ее индекса.
  1. CLSCTX_LOCAL_SERVER = 0x04
  2. S_OK = 0
  3.  
  4. struct NOTIFYITEM
  5.     pszExeName   dd ?
  6.     pszTip       dd ?
  7.     hIcon        dd ?
  8.     hWnd         dd ?
  9.     dwPreference dd ?
  10.     uID          dd ?
  11.     guidItem     rd 4
  12. ends
  13.  
  14. ; GUID {D782CCBA-AFB0-43F1-94DB-FDA3779EACCB}
  15. IID_INotificationCB dd 0D782CCBAh
  16.                     dw 0AFB0h
  17.                     dw 043F1h
  18.                     db 094h, 0DBh, 0FDh, 0A3h, 077h, 09Eh, 0ACh, 0CBh
  19.  
  20. ; INotificationCB interface
  21. struct INotificationCB
  22.         QueryInterface dd ?
  23.         AddRef         dd ?
  24.         Release        dd ?
  25.         ; INotificationCB
  26.         Notify         dd ?
  27. ends
  28.  
  29. ; GUID {FB852B2C-6BAD-4605-9551-F15F87830935}
  30. IID_ITrayNotify dd 0FB852B2Ch
  31.                 dw 06BADh
  32.                 dw 04605h
  33.                 db 095h, 051h, 0F1h, 05Fh, 087h, 083h, 009h, 035h
  34.  
  35. ; ITrayNotify interface
  36. struct ITrayNotify
  37.         QueryInterface   dd ?
  38.         AddRef           dd ?
  39.         Release          dd ?
  40.         ; ITrayNotify
  41.         RegisterCallback dd ?
  42.         SetPreference    dd ?
  43.         EnableAutoTray   dd ?
  44. ends
  45.  
  46. ; GUID {25DEAD04-1EAC-4911-9E3A-AD0A4AB560FD}
  47. CLSID_TrayNotify dd 025DEAD04h
  48.                  dw 01EACh
  49.                  dw 04911h
  50.                  db 09Eh, 03Ah, 0ADh, 00Ah, 04Ah, 0B5h, 060h, 0FDh
  51.  
  52. ; GUID {00000000-0000-0000-C000-000000000046}
  53. IID_IUnknown dd 000000000h
  54.              dw 00000h
  55.              dw 00000h
  56.              db 0C0h, 000h, 000h, 000h, 000h, 000h, 000h, 046h
Практически все, что тут используется, относится к недокументированным функциям Windows, поэтому внимательно смотрите примеры и описания. И да, работает оно только на современных системах, начиная с Windows Vista.

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

Работа с сервисами Windows на Ассемблере

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

Работа с сервисами Windows на Ассемблере

Давно хотел поэкспериментировать с сервисами Windows, наконец дошли руки. Еще со времен Windows XP я пользуюсь программой Service Tree от А.Н.Гусарова, но в ней имеются досадные косяки, поэтому есть большое желание написать что-нибудь подобное. А в этой статье будут складироваться все наработки по теме сервисов.

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

Отслеживание загрузки dll в память процесса

13.05.2021 | Категория: Образ мышления: Assembler | Автор: ManHunter
Ранее я уже рассказывал, как можно легко и просто получить список динамических библиотек, загруженных в ваш процесс. Сегодня расскажу о возможности отслеживания загрузки и выгрузки DLL. Начиная с Windows Vista, появилась функция LdrRegisterDllNotification. С ее помощью в приложении регистрируется callback-функция, которая будет вызываться каждый раз, как только в ваше приложение будет загружена DLL или какая-то DLL будет выгружена из его адресного пространства. Установка обработчика выполняется одной командой:
  1.         ; Зарегистрировать обработчик загрузки и выгрузки DLL
  2.         invoke  LdrRegisterDllNotification,0,LdrDllNotification,NULL,Cookie
  3.         or      eax,eax
  4.         jnz     loc_error
Важное замечание. Как показала практика, в callback-функции не должно быть никаких открытий окон, вывода сообщений и прочих взаимодействий с интерфейсом. Это может привести к зацикливанию и падению приложения во время загрузки UI-библиотек.
  1. LDR_DLL_NOTIFICATION_REASON_LOADED   = 1
  2. LDR_DLL_NOTIFICATION_REASON_UNLOADED = 2
  3.  
  4. struct NOTIFICATION_DATA
  5.     Flags       dd ?
  6.     FullDllName dd ?
  7.     BaseDllName dd ?
  8.     DllBase     dd ?
  9.     SizeOfImage dd ?
  10. ends
  11.  
  12. proc LdrDllNotification NotificationReason:DWORD,\
  13.         NotificationData:DWORD,Context:DWORD
  14.  
  15.         pusha
  16.         mov     eax,[NotificationReason]
  17.         ; EAX -> действие с DLL
  18.         ; LDR_DLL_NOTIFICATION_REASON_LOADED = загружена
  19.         ; LDR_DLL_NOTIFICATION_REASON_UNLOADED = выгружена
  20.  
  21.         ; Получить полный путь до файла DLL
  22.         mov     eax,[NotificationData]
  23.         mov     eax,[eax+NOTIFICATION_DATA.FullDllName]
  24.         mov     eax,[eax+4]
  25.         ; EAX -> полное имя файла DLL
  26.  
  27.         ; Получить базовый адрес DLL
  28.         mov     eax,[NotificationData]
  29.         mov     eax,[eax+NOTIFICATION_DATA.DllBase]
  30.         ; EAX -> DllBase библиотеки
  31.  
  32.         popa
  33.         ret
  34. endp
При каждом вызове в callback-функцию передается причина вызова - загрузка или выгрузка DLL, а также заполненная структура NOTIFICATION_DATA, в которой содержится полный путь и имя файла библиотеки, базовый адрес загрузки и размер загружаемого образа. Зная эти данные, можно проверить, что за DLL пытаются подгрузить в наш процесс и принять соответствующие меры. Например, при попытке подгрузить в процесс модуль мониторинга, можно отключить некоторые ветки алгоритма или исказить выдаваемые данные, а можно просто завершить работу приложения. Если пойти дальше, то теоретически можно даже модифицировать в памяти загруженную библиотеку, нейтрализовав в ней то, чего она не должна делать с вашим процессом. Просторы для фантазии безграничны.

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

prev 01 02 03 04 05 06 07 08 09 ... 31
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2021
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.11 сек. / MySQL: 3 (0.0485 сек.) / Память: 4.75 Mb
Наверх