Образ мышления: Assembler
То, что не удается запрограммировать на Ассемблере, приходится паять
Образ мышления: Assembler - RSS-канал
Образ мышления: Assembler - Карта сайта
Как получить список установленных принтеров
20.05.2023 | Категория: Образ мышления: Assembler | Автор: ManHunter
Как получить список установленных принтеров
Если требуется получить информацию об установленных в системе принтерах, то для этого есть несколько вариантов решения: с помощью PowerShell, WMI или различных языков программирования. У меня, как обычно, будет Ассемблер и WinAPI. Приведенный код получает информацию о всех принтерах в системе, в том числе сетевых.
Читать статью целиком »
Просмотров: 457 | Комментариев: 2
Работа с Zone.Identifier на Ассемблере
12.05.2023 | Категория: Образ мышления: Assembler | Автор: ManHunter
Несколько лет назад я выкладывал пару статей на тему блокировки файлов с помощью альтернативных файловых потоков и Zone.Identifier. Там вся работа с ними выполнялась или средствами самой системы Windows, или сторонними приложениями. Настало время написать собственное приложение.Сперва немного теории. За блокировку файлов отвечает COM-объект IZoneIdentifier для работы с которым нам потребуется несколько структур, GUID'ов и констант, про которые не знает FASM.
Code (Assembler) : Убрать нумерацию
- ; GUID {0968E258-16C7-4DBA-AA86-462DD61E31A3}
- CLSID_PersistentZoneIdentifier \
- dd 00968E258h
- dw 016C7h
- dw 04DBAh
- db 0AAh, 086h, 046h, 02Dh, 0D6h, 01Eh, 031h, 0A3h
- ; GUID {CD45F185-1B21-48E2-967B-EAD743A8914E}
- IID_IZoneIdentifier \
- dd 0CD45F185h
- dw 01B21h
- dw 048E2h
- db 096h, 07Bh, 0EAh, 0D7h, 043h, 0A8h, 091h, 04Eh
- ; GUID {0000010B-0000-0000-C000-000000000046}
- IID_IPersistFile \
- dd 00000010Bh
- dw 00000h
- dw 00000h
- db 0C0h, 000h, 000h, 000h, 000h, 000h, 000h, 046h
- ; IID_IZoneIdentifier Interface
- struct IZoneIdentifier
- ; IUnknown
- QueryInterface dd ? ; 000h
- AddRef dd ? ; 004h
- Release dd ? ; 008h
- ; IZoneIdentifier
- GetId dd ? ; 00Ch
- SetId dd ? ; 010h
- Remove dd ? ; 014h
- ends
- ; IID_IPersistFile Interface
- struct IPersistFile
- ; IUnknown
- QueryInterface dd ? ; 000h
- AddRef dd ? ; 004h
- Release dd ? ; 008h
- ; IPersistFile
- GetClassID dd ? ; 00Ch
- IsDirty dd ? ; 010h
- Load dd ? ; 014h
- Save dd ? ; 018h
- SaveCompleted dd ? ; 01Ch
- GetCurFile dd ? ; 020h
- ends
- CLSCTX_INPROC_SERVER = 1
- S_OK = 0
- STGM_READ = 0
Читать статью целиком »
Просмотров: 487 | Комментариев: 5
Как программно получить и установить рейтинг файла
04.05.2023 | Категория: Образ мышления: Assembler | Автор: ManHunter
Как программно получить и установить рейтинг файла
Начиная с Windows Vista у пользователя появилась возможность ставить оценки некоторым файлам, например, фотографиям, музыкальным файлам и видеороликам. Оценка отображается при просмотре таблицы файлов в Проводнике в виде звездного рейтинга от 0 до 5. На мой взгляд, штука не особо нужная, но раз она присутствует в системе, то почему бы не научиться с ней работать? Как обычно, Ассемблер нам в этом поможет.
Читать статью целиком »
Просмотров: 364 | Комментариев: 0
Передача данных между процессами с помощью Mailslot
26.04.2023 | Категория: Образ мышления: Assembler | Автор: ManHunter
Mailslot - один из самых простых способов обмена данными между процессами, который работает еще со времен Windows 95. Каналы Mailslot позволяют передавать данные от одного или нескольких клиентов к одному или нескольким серверам, в том числе в широковещательном режиме. На локальном компьютере может быть один серверный процесс, но в сети или в домене может одновременно работать несколько серверов. Количество клиентских приложений не ограничено. Принцип работы Mailslot схож с работой электронной почты.Основным недостатком Mailslot является то, что серверное приложение не может достоверно знать, от какого процесса и с какого компьютера было отправлено сообщение. В свою очередь, клиентское приложение не может узнать статус отправленного сообщения, то есть получено оно хоть каким-то сервером или нет. В остальном это неплохая замена сокетам, требующим сетевое подключение, или пайпам, которые могут быть открыты только двумя процессами и не поддерживают широковещательные рассылки.
Для создания канала используется функция CreateMailslot, которая в качестве одного из параметров принимает имя канала. Имя канала для серверного приложения должно иметь вид \\.\mailslot\имя_канала, при этом имя должно быть уникальным для приложения, но одинаковым в пределах клиента и сервера. Создавать канал должна серверная часть приложения. Она же определяет максимальный размер передаваемых сообщений и время ожидания. В случае необходимости этот параметр можно менять при помощи функции SetMailslotInfo.
Получив хэндл канала, сервер будет читать из него присланные сообщения. Обработчик выполняется в цикле по таймеру или же в отдельном потоке с задержкой между итерациями. Каждый шаг цикла начинается с получения состояния канала, это делается при помощи функции GetMailslotInfo, она возвращает количество сообщений в очереди на момент запроса и размер сообщения, которое будет получено первым. Если сообщений в очереди нет, то после выполнения функции параметр lpMessageCount будет равен нулю, а параметр lpNextSize примет значение MAILSLOT_NO_MESSAGE. Полученные сообщения читаются из канала функцией ReadFile, будто из обычного текстового файла.
Читать статью целиком »
Просмотров: 373 | Комментариев: 0
Как узнать установленный в системе масштаб текста
10.04.2023 | Категория: Образ мышления: Assembler | Автор: ManHunter
Как узнать установленный в системе масштаб текста
Технический прогресс неумолимо наступает, разрешение мониторов с каждым годом становится все больше. В результате пользователям приходится увеличивать масштаб, чтобы не ломать глаза разглядыванием микрошрифта. И если программа изначально написана под "стандартный" DPI=96, то при отображении на мониторе с бОльшим значением DPI некоторые элементы ее интерфейса скорее всего будут отображаться некорректно. Это приходится учитывать разработчикам при написании своих программ. По возможности я тоже начал обновлять свои утилиты, чтобы в них учитывался установленный в системе масштаб текста. Естественно, что для этого потребовались определенные инструменты.
Читать статью целиком »
Просмотров: 512 | Комментариев: 3