Что такое код postappmessage

Содержание

Функция GetMessage

Функция GetMessage извлекает сообщение из очереди сообщений вызывающего потока и помещает его в заданную структуру. Эта функция регулирует поступление отправленных сообщений до тех пор, пока помещенное в очередь сообщение доступно для извлечения.

В отличие от GetMessage, функция PeekMessage не ждет, когда предыдущее помещенное в очередь сообщение возвратит значение.

[out] Указатель на структуру MSG , которая принимает информацию из очереди сообщений потока.

[in] Дескриптор окна, чьи сообщения должны быть извлечены. Окно должно принадлежать вызывающему потоку. Значение ПУСТО (NULL) имеет специальное предназначение:

Значение

Предназначение

GetMessage извлекает сообщения для любого окна, которое принадлежит вызывающему потоку и сообщения потока, помещенные в очередь вызывающего потока при помощи использования функции PostThreadMessage .

[in] Определяет целочисленную величину самого маленького значения сообщения, которое будет извлечено. Используйте сообщение WM_KEYFIRST , чтобы задать первое сообщение клавиатуры или WM_MOUSEFIRST , чтобы задать первое сообщение мыши.

Windows XP: Используйте сообщение WM_INPUT здесь и в параметре wMsgFilterMax, чтобы задать только сообщения WM_INPUT.

Если wMsgFilterMin и wMsgFilterMax являются оба нулевыми, функция GetMessage возвращает все доступные сообщения (то есть никакой фильтрации в диапазоне значений не выполняется).

[in] Определяет целочисленную величину самого большого значения сообщения, которое будет извлечено. Используйте сообщение WM_KEYLAST , чтобы задать первое сообщение клавиатуры или WM_MOUSELAST , чтобы задать последнее сообщение мыши.

Windows XP: Используйте сообщение WM_INPUT здесь и в параметре wMsgFilterMin, чтобы задать только сообщения WM_INPUT.

Если wMsgFilterMin и wMsgFilterMax являются оба нулевыми, функция GetMessage возвращает все доступные сообщения (то есть никакой фильтрации в диапазоне значений не выполняется).

Если функция извлекает какое-то сообщение, а не WM_QUIT , величина возвращаемого значения — не нуль.

Если функция извлекает сообщение WM_QUIT, величина возвращаемого значения — нуль.

Если имеется ошибка, величина возвращаемого значения — (минус)1. Например, функция завершается ошибкой, если hWnd — недопустимый дескриптор окна или lpMsg недопустимый указатель. Чтобы получить дополнительные сведения об ошибке, вызовите функцию GetLastError.

Предупреждение !

Поскольку величина возвращаемого значения функции может быть не нуль, нуль или — (минус)1, не применяйте примерно такой код:

Возможность возврата значения -(минус)1 означает, что такой код, может привести к фатальным ошибкам приложения. Вместо этого, используйте код подобно приведенному ниже:

Прикладная программа обычно использует величину возвращаемого значения, чтобы выявить, закончил ли работать главный цикл обработки сообщений и выходить ли из программы.

Функция GetMessage извлекает сообщения, связанные с окном, идентифицированным параметром hWnd или любого из его дочерних окон, как определено функцией IsChild , и в пределах диапазона значений сообщения, заданных параметрами wMsgFilterMin и wMsgFilterMax.

Обратите внимание! на то, что приложение может использовать в параметрах wMsgFilterMin и wMsgFilterMax только младшее слово ; старшее слово зарезервировано для системы.

Обратите внимание! на то, что функция GetMessage всегда извлекает сообщения WM_QUIT, независимо от того, какие значения Вы задаете для параметров wMsgFilterMin и wMsgFilterMax.

В течение этого вызова, система представляет ожидающие обработки сообщения, которые были отправлены окнам, принадлежащим вызывающему потоку, используя функции SendMessage , SendMessageCallback , SendMessageTimeout или SendNotifyMessage . Система может также обрабатывать внутренние события. Сообщения обрабатываются в ниже перечисленном порядке:

  • Отправленные (асинхронные) сообщения
  • Помещенные в очередь (синхронные) сообщения
  • Сообщения о вводе (аппаратном) данных и внутренние события
  • Отправленные (асинхронные) сообщения (ещё раз)
  • Сообщение WM_PAINT
  • СообщениеWM_TIMER

Чтобы извлекать сообщения о вводе данных перед помещенными в очередь (синхронными) сообщениями, используйте параметры wMsgFilterMin и wMsgFilterMax .

Функция GetMessage не удаляет сообщения WM_PAINT из очереди. Сообщения остаются в очереди до тех пор, пока не будут обработаны.

Windows XP: Если окно верхнего уровня останавливает ответ на сообщения в течение больше чем нескольких секунд, система рассматривает это окно как окно, которое зависло и заменяет его на ложное окно, которое имеет ту же самую Z — последовательность , местоположение, размер и визуальные атрибуты. Это дает возможность пользователю перемещать его, изменять его размеры, или даже закрыть приложение. Однако, это — единственные доступные действия, потому что приложение фактически зависает. Когда приложение в режиме отладчика, система не создает ложное окно.

Windows 95/98/Me: GetMessageW поддерживается подпрограммой Microsoft Layer for Unicode (MSLU). Чтобы использовать подпрограмму, Вы должны добавить некоторые файлы к вашему приложению, как это определено в Microsoft Layer for Unicode для систем Windows 95/98/Me.

Как послать своё сообщение другому приложению?

05.07.2011, 22:14

Как послать сообщение по асе?
мне необходимо в фоновом режиме послать сообщение по ICQ на определенный (заранее известный) UIN.

Как послать сообщение WM_Какое-то иконке в трее ?
ну там где часы, аська и прочие иконки — послать одной из них ? иконку я ставлю сам, всё о ней.

Как посылать сообщение другому приложению
Пожалуйста объясните технику или дайте ссылочку, задание следующее: Написать два консольных.

Как отослать текстовое сообщение другому приложению. .SendMessage. WM_COPYDATA. Delphi
Всем привет. Есть такая программа, отправляющая текстовое сообщение другой программе через.

Послать сообщение приложению
Здравствуйте уважаемые форумчане! Мне необходимо корректно закрыть приложение. Почему-то в голову.

05.07.2011, 22:17 2 05.07.2011, 22:21 3 05.07.2011, 22:30 [ТС] 4

хм. но я так понимаю что отправляемое и получаемое сообщения должны быть идентичны? и если я обоим пропишу WM_USER+1, где гарантия что они будут одинаковы? или они всё же будут идентичны?

с хуками пока не разбирался, мб ещё будет что полегче, а то там шляпа какая-то

05.07.2011, 22:30
05.07.2011, 22:43 5

WM_USER — это константа.

Еще взгляните на функцию RegisterWindowMessage():

The RegisterWindowMessage function defines a new window message that is guaranteed to be unique throughout the system. The returned message value can be used when calling the SendMessage or PostMessage function.

Points to a null-terminated string that specifies the message to be registered.

If the message is successfully registered, the return value is a message identifier in the range 0xC000 through 0xFFFF.
If the function fails, the return value is zero.

The RegisterWindowMessage function is typically used to register messages for communicating between two cooperating applications.
If two different applications register the same message string, the applications return the same message value. The message remains registered until the Windows session ends.
Only use RegisterWindowMessage when more than one application must process the same message. For sending private messages within a window class, an application can use any integer in the range WM_USER through 0x7FFF. (Messages in this range are private to a window class, not to an application. For example, predefined control classes such as BUTTON, EDIT, LISTBOX, and COMBOBOX may use values in this range.)

Что такое код postappmessage

Статьи » Расшифровка кодов ошибок POST (ПОСТ) карты

Расшифровка кодов ошибок POST (ПОСТ) карты

Award BIOS 6.0: полная загрузка

Данная таблица содержит POST-коды, которые отображаются при полной процедуре POST.

  • CF Определяется тип процессора и тестируется чтение/запись CMOS
  • C0 Предварительно инициализируется чипсет и L1-, L2-кэш, программируется контроллер прерываний, DMA, таймер
  • C1 Детектируется тип и объем оперативной памяти
  • C3 Код BIOS распаковывается во временную область оперативной памяти
  • 0С Проверяются контрольные суммы BIOS
  • C5 Код BIOS копируется в теневую память и управление передается модулю Boot Block
  • 01 Модуль XGROUP распаковывается по физическому адресу 1000:0000h
  • 02 Инициализация процессора. Устанавливаются регистры CR и MSR
  • 03 Определяются ресурсы ввода/вывода (Super I/O)
  • 05 Очищается экран и флаг состояния CMOS
  • 06 Проверяется сопроцессор
  • 07 Определяется и тестируется контроллер клавиатуры
  • 08 Определяется интерфейс клавиатуры
  • 09 Инициализация контроллера Serial ATA
  • OA Определяется клавиатура и мышь, которые подключены к портам PS/2
  • 0B Устанавливаются ресурсы звукового контроллера AC97
  • OE Тестируется сегмент памяти F000h
  • 10 Определяется тип flash-памяти
  • 12 Тестируется CMOS
  • 14 Устанавливаются значения для регистров чипсета
  • 16 Первично инициализируется тактовый генератор
  • 18 Определяется тип процессора, его параметры и объемы кэша L1 и L2
  • 1B Инициализируется таблица векторов прерываний
  • 1С Проверяются контрольные суммы CMOS и напряжение питания аккумулятора
  • 1D Определяется система управления питанием Power Management
  • 1F Загружается матрица клавиатуры (для ноутбуков)
  • 21 Инициализируется система Hardware Power Management (для ноутбуков)
  • 23 Тестируется математический сопроцессор, дисковод, инициализация чипсета
  • 24 Обновляется микрокод процессора. Создается карта распределения ресурсов устройств Plug and Play
  • 25 Начальная инициализация PCI: перечисляются устройства, поиск адаптера VGA, запись VGA BIOS по адресу C000:0
  • 26 Устанавливается тактовая частота по CMOS Setup. Отключается синхронизация неиспользуемых слотов DIMM и PCI. Инициализируется система мониторинга (H/W Monitor)
  • 27 Разрешается прерывание INT 09h. Снова инициализируется контроллер клавиатуры
  • 29 Программируются регистры MTRR, инициализируется APIC. Программируется контроллер IDE. Измеряется частота процессора. Вызывается расширение BIOS видеосистемы
  • 2B Поиск BIOS видеоадаптера
  • 2D Отображается заставка Award, информация о типе процессора и его скорости
  • 33 Сбрасывается клавиатура
  • 35 Тестируется первый канал DMA
  • 37 Тестируется второй канал DMA
  • 39 Тестируются страничные регистры DMA
  • 3C Настраивается контроллер 8254 (таймер)
  • 3E Проверка контроллера прерываний 8259
  • 43 Проверяется контроллер прерываний
  • 47 Тестируются шины ISA/EISA
  • 49 Вычисляется объем оперативной памяти. Настраиваются регистры для процессора AMD K5
  • 4E Программируются регистры MTRR для процессоров Syrix. Инициализируются кэш L2 и APIC
  • 50 Определяется шина USB
  • 52 Тестируется ОЗУ с отображением результатов. Очищается расширенная память
  • 53 Если выполнена очистка CMOS, то сбрасывается пароль на вход в систему
  • 55 Отображается количество процессоров (для многопроцессорных платформ)
  • 57 Отображается логотип EPA. Начальная инициализация устройств ISA PnP
  • 59 Определяется система защиты от вирусов
  • 5B Вывод подсказки для запуска обновления BIOS с дискеты
  • 5D Запускается контроллер Super I/O и интегрированный аудиоконтроллер
  • 60 Вход в CMOS Setup, если была нажата клавиша Delete
  • 65 Инициализируется мышь PS/2
  • 69 Включается кэш L2
  • 6B Настраиваются регистры чипсета согласно BIOS Setup
  • 6D Назначаются ресурсы для устройств ISA PnP и COM-порты для интегрированных устройств
  • 6F Инициализируется и настраивается контроллер гибких дисков
  • 75 Детектируются и устанавливаются IDE-устройства: жесткие диски, CD/DVD, LS-120, ZIP и др.
  • 76 Выводится информация об обнаруженных IDE-устройствах
  • 77 Инициализируются последовательные и параллельные порты
  • 7A Сбрасывается и готовится к работе математический сопроцессор
  • 7C Определяется защита от несанкционированной записи на жесткие диски
  • 7F При наличии ошибок выводится сообщение и ожидается нажатие клавиш Delete и F1
  • 82 Выделяется память для управления питанием и заносятся изменения в таблицу ESCD.
  • Убирается заставка с логотипом EPA. Запрашивается пароль, если нужен
  • 83 Все данные сохраняются из временного стека в CMOS
  • 84 Вывод на экран сообщения Initializing Plug and Play Cards
  • 85 Завершается инициализация USB
  • 87 Создаются таблицы SYSID в области DMI
  • 89 Устанавливаются таблицы ACPI. Назначаются прерывания для PCI-устройств
  • 8B Вызывается BIOS дополнительных ISA- или PCI-контроллеров, за исключением видеоадаптера
  • 8D Устанавливаются параметры контроля четности ОЗУ по CMOS Setup. Инициализируется APM
  • 8F IRQ 12 разрешается для «горячего» подключения мыши PS/2
  • 94 Завершение инициализации чипсета. Отображение таблицы распределения ресурсов. Включение кэша L2. Установка режима перехода на летнее/зимнее время
  • 95 Устанавливается частота автоповтора клавиатуры и состояния Num Lock
  • 96 Для многопроцессорных систем настраиваются регистры (для процессоров Cyrix). Создается таблица ESCD. Устанавливается таймер DOS Time по показаниям часов RTC CMOS. Сохраняются разделы загрузочных устройств для использования встроенным антивирусом. Динамик оповещает об окончании POST. Создается таблица MSIRQ FF Выполняется прерывание BIOS INT 19h. Поиск загрузчика в первом секторе загрузочного устройства

Award BIOS 6.0: сокращенная загрузка

Сокращенная процедура выполняется при установке в BIOS параметра Quick Power On Self Test.

  • 65 Сбрасывается видеоадаптер. Инициализируются звуковой контроллер, устройства ввода/вывода,тестируется клавиатура и мышь. Проверяется целостность BIOS
  • 66 Инициализируется кэш-память. Создается таблица векторов прерываний. Инициализируется система управления питанием
  • 67 Проверяется контрольная сумма CMOS и тестируется батарейка питания. Настраивается чипсет на основе параметров CMOS
  • 68 Инициализируется видеоадаптер
  • 69 Настраивается контроллер прерываний
  • 6A Тестируется оперативная память (ускоренно)
  • 6B Отображается логотип EPA, результаты тестов процессора и памяти
  • 70 Отображается подсказка для входа в BIOS Setup. Инициализируется мышь, подключенная к PS/2 или USB
  • 71 Инициализируется контроллер кэш-памяти
  • 72 Настраиваются регистры чипсета. Создается список устройств Plug and Play.& Инициализируется контроллер дисковода
  • 73 Инициализируется контроллер жестких дисков
  • 74 Инициализируется сопроцессор
  • 75 Если нужно, жесткий диск защищается от записи
  • 77 Если нужно, запрашивается пароль и выводятся сообщения Press F1 to continue, DEL to enter Setup
  • 78 Инициализируются платы расширения с собственной BIOS
  • 79 Инициализируются ресурсы платформы
  • 7A Генерируются корневая таблица RSDT, таблицы устройств DSDT, FADT и т. п.
  • 7D Собирается информациия о разделах загрузочных устройств
  • 7E BIOS готовится к загрузке операционной системы
  • 7F Состояние индикатора NumLock устанавливается в соответствии с настройками
  • BIOS Setup
  • 80 Вызывается INT 19 и запускается операционная система
  • FF Загрузка операционной системы

Что такое API? Простое объяснение для начинающих

Этот краткий термин на слуху у всех, кто хоть как-то сталкивался с разработкой. Но далеко не все понимают, что именно он обозначает и зачем нужен. Разработчик Пётр Газаров рассказал об API простыми словами в своём блоге.

Аббревиатура API расшифровывается как «Application Programming Interface» (интерфейс программирования приложений, программный интерфейс приложения). Большинство крупных компаний на определённом этапе разрабатывают API для клиентов или для внутреннего использования. Чтобы понять, как и каким образом API применяется в разработке и бизнесе, сначала нужно разобраться, как устроена «всемирная паутина».

Всемирная паутина и удалённые серверы

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

При введении в адресную строку браузера www.facebook.com на удалённый сервер Facebook отправляется соответствующий запрос. Как только браузер получает ответ, то интерпретирует код и отображает страницу.

Каждый раз, когда пользователь посещает какую-либо страницу в сети, он взаимодействует с API удалённого сервера. API — это составляющая часть сервера, которая получает запросы и отправляет ответы.

API как способ обслуживания клиентов

Многие компании предлагают API как готовый продукт. Например, Weather Underground продаёт доступ к своему API для получения метеорологических данных.

Сценарий использования: на сайте небольшой компании есть форма для записи клиентов на приём. Компания хочет встроить в него Google Календарь, чтобы дать клиентам возможность автоматически создавать событие и вносить детали о предстоящей встрече.

Применение API: цель — сервер сайта должен напрямую обращаться к серверу Google с запросом на создание события с указанными деталями, получать ответ Google, обрабатывать его, и передавать соответствующую информацию в браузер, например, сообщение с запросом на подтверждение пользователю.

В качестве альтернативы браузер может сделать запрос к API сервера Google, минуя сервер компании.

Чем API Google Календаря отличается от API любого другого удалённого сервера в сети?

Технически, разница в формате запроса и ответа. Чтобы сгенерировать полную веб-страницу, браузер ожидает ответ на языке разметки HTML, в то время как API Google Календаря вернёт просто данные в формате вроде JSON.

Если запрос к API делает сервер веб-сайта компании, то он и является клиентом (так же, как клиентом выступает браузер, когда пользователь открывает веб-сайт).

Пользователь благодаря API получает возможность совершить действие, не покидая сайт компании.

Большинство современных сайтов используют по крайней мере несколько сторонних API. Многие задачи уже имеют готовые решения, предлагаемые сторонними разработчиками, будь то библиотека или услуга. Зачастую проще и надёжнее прибегнуть именно к уже готовому решению.

Многие разработчики разносят приложение на несколько серверов, которые взаимодействуют между собой при помощи API. Серверы, которые выполняют вспомогательную функцию по отношению к главному серверу приложения, называются микросервисами.

Таким образом, когда компания предлагает своим пользователям API, это просто означает, что она создала ряд специальных URL, которые в качестве ответа возвращают только данные.

Такие запросы часто можно отправлять через браузер. Так как передача данных по протоколу HTTP происходит в текстовом виде, браузер всегда сможет отобразить ответ. Например, через браузер можно напрямую обратиться к API GitHub (https://api.github.com/users/petrgazarov), причём без маркера доступа, и получить вот такой ответ в формате JSON:

Браузер отлично отображает JSON-ответ, который вполне можно вставлять в код. Из такого текста достаточно просто извлечь данные, чтобы использовать их по своему усмотрению.

Ещё несколько примеров API

Слово «application» (прикладной, приложение) может применяться в разных значениях. В контексте API оно подразумевает:

  • фрагмент программного обеспечения с определённой функцией,
  • сервер целиком, приложение целиком или же просто отдельную часть приложения.

Любой фрагмент ПО, который можно чётко выделить из окружения, может заменять букву «А» в англоязычной аббревиатуре, и тоже может иметь некоторого рода API. Например, при внедрении в код разработчиком сторонней библиотеки, она становится частью всего приложения. Будучи самостоятельным фрагментом ПО, библиотека будет иметь некий API, который позволит ей взаимодействовать с остальным кодом приложения.

В объектно-ориентированном проектировании код представлен в виде совокупности объектов. В приложении таких объектов, взаимодействующих между собой, могут быть сотни. У каждого из них есть свой API — набор публичных свойств и методов для взаимодействия с другими объектами в приложении. Объекты могут также иметь частную, внутреннюю логику, которая скрыта от окружения и не является API.

Особенности посылки сообщений в Windows API

Помимо рассмотренных функций в Windows API существует еще две функции, посылающие сообщения. С одной из них — PostQuitMessage мы уже встречались в примере 1A. Эта функция посылает сообщение WM_QUIT, которое служит для завершения цикла обработки сообщений.

Сообщение WM_QUIT интересно еще и тем, что оно не посылается никакому окну — хендл окна-получателя равен NULL. В принципе у вас есть возможность самому посылать такие сообщения своему приложению, однако для этого обычная функция PostMessage не подходит. Вместо нее предусмотрена другая функция

BOOL PostAppMessage(hTask, uMsg, wParam, lParam);

Эта функция направляет сообщение приложению, указанному хендлом задачи hTask Хендл задачи hTask является самостоятельным понятием, он не совпадает с хендлом копии приложения hInstance. Подробнее о хендле задачи смотри в разделе “Ошибка! Источник ссылки не найден.”.. Для получения этого хендла можно воспользоваться функциями GetCurrentTask или GetWindowTask.

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

где параметр cMaxMsg задает количество сообщений, которые могут находиться в очереди. Это число не может быть больше 120. Функция уничтожает старую очередь, вместе со всеми сообщениями, которые могут в ней оказаться, и создает новую, пустую, указанного размера. Если надо увеличить размер очереди, то это лучше делать в самом начале, до создания окон и организации цикла обработки сообщений.

Особенности посылки и передачи сообщений в Win32 API

В Win32 в связи с появлением многопотоковых приложений изменился процесс маршрутизации сообщений в системе. Теперь очередь сообщений принадлежит не приложению (процессу), а потоку, создавшему ее. Поток, не использующий очередей и, соответственно, не имеющий цикла обработки сообщений, называется рабочим потоком (worker thread), а поток, работающий с окнами, создающий свою очередь и цикл обработки сообщений называется интерфейсным потоком (interface thread). В одном приложении Win32 может оказаться несколько рабочих потоков, несколько интерфейсных потоков и, соответственно, несколько очередей одновременно.

Еще одно отличие связано с тем, что размер очереди больше не фиксирован — при необходимости очередь динамически увеличивается. Благодаря этому функция SetMessageQueue больше не применяется.

Возможность применения нескольких интерфейсных потоков в одном процессе приводит дополнительно к отказу от функции PostAppMessage — так как остается неясно, какому потоку надо послать сообщение, и к добавлению функции:

BOOL PostThreadMessage(dwThreadID, uMsg, wParam, lParam);

которая посылает сообщение конкретному потоку. При этом в очередь соответствующего потока помещается сообщение, имеющее нулевой хендл окна-получателя. Идентификатор потока dwThreadID можно получить посредством функций:

DWORD GetWindowThreadProcessId(hWnd, lpdwProcessID);

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

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

Однако в жизни ситуация существенно усложняется: часто поток, обрабатывающий переданное сообщение, передает пославшему потоку какое-либо «встречное» сообщение. Так, например, при начале DDE-разговора DDE-клиент передает с помощью функции SendMessage широковещательное сообщение WM_DDE_INITIATE, а DDE-сервер отвечает на это сообщение передачей сообщения WM_DDE_ACK, если он поддерживает требуемый DDE-разговор. То есть обработчик сообщения WM_DDE_INITIATE сервера передает с помощью той-же функции SendMessage сообщение WM_DDE_ACK окну клиента, которое в данный момент ждет конца обработки переданного им сообщения WM_DDE_INITIATE В случае 16 ти битовой платформы Windows таких проблем не возникает, так как использование функции SendMessage подобно простому вызову оконной процедуры.. При этом было бы возможным зависание обеих потоков, так как поток клиента остановлен до конца обработки переданного им WM_DDE_INITIATE, а поток сервера будет ждать, пока остановленный поток клиента не ответит на встречное сообщение WM_DDE_ACK, которое он передает в качестве подтверждения.

Что бы избежать подобных неприятностей функция SendMessage может обрабатывать сообщения, переданные данному потоку другими потоками, находясь в ожидании ответа от обработчика переданного сообщения.

Осторожно! Зависание потоков при обмене сообщениями все-таки возможно. Такая ситуация легко может случиться при использовании MDI: в Win32 для каждого открытого дочернего MDI-окна автоматически создается свой собственный поток. В этом случае при использовании функции SetFocus для передачи фокуса от одного дочернего MDI-окна другому дочернему MDI-окну (естественно принадлежащему другому потоку) происходит обмен сообщениями WM_SETFOCUS и WM_KILLFOCUS, что приводит к остановке обеих потоков. Эта особенность платформы официально описана Microsoft.

Кроме того возможно зависание потока, передавшего сообщение, если поток-получатель завис сам или занят очень продолжительными операциями. Так как продолжительная остановка передающего сообщение потока может быть нежелательна, то в Win32 API описаны специальные функции для работы с межпотоковыми сообщениями: SendMessageTimeout, SendMessageCallback, SendNotifyMessage и ReplyMessage.

Внимание! Функции SendMessageTimeout, SendMessageCallback и SendNotifyMessage не реализованы для платформы Win32s а, кроме того, в документации (правда не всегда) встречается странное упоминание о том, что в случае Windows-95 параметр wParam является 16 ти битовым (!), что может существенно ограничить применение этих функций для передачи многих сообщений.

hWnd, uMsg, wParam, lParam, fuFlags, uTimeout, lpdwResult);

Дополнительные параметры этой функции: lpdwResult — указывает переменную, в которую будет помещен результат обработки сообщения, uTimeout — максимальное время, в миллисекундах, в течении которого надо ожидать результата, а fuFlags — определяет, как функция будет ожидать ответа:

флаг SMTO_ABORTIFHUNG говорит о том, что если поток-получатель завис (то есть уже более 5 секунд не обрабатывает никаких сообщений), то не ждать результата, а сразу вернуть управление.

флаг SMTO_BLOCK исключает обработку «встречных» сообщений во время ожидания ответа. С этим флагом надо быть очень осторожным!

флаг SMTO_NORMAL используется тогда, когда ни SMTO_BLOCK ни SMTO_ABOPRTIFHUNG не указаны.

Возвращаемый функцией результат равен TRUE, если сообщение обработано или FALSE, если отведенное для ожидания время истекло или поток-получатель завис.

Если функция SendMessageTimeout применяется для передачи сообщения окну, созданному тем-же самым потоком, то она работает как обычная функция SendMessage — время ожидания не ограничено и проверка на зависание не выполняется.

Вторая функция SendMessageCallback передает сообщение указанному окну и возвращает управление немедленно после этого, не дожидаясь результата обработки сообщения. Но когда сообщение будет обработано, будет вызвана указанная вами функция, обрабатывающая полученный результат.

BOOL SendMessageCallback(hWnd, uMsg, wParam, lParam, lpfnResultCallback, dwData);

void CALLBACK ResultCallback(hWnd, uMsg, dwData, lResult)

Параметр lpfnResultCallback является указателем на функцию-обработчик результата, а dwData — некоторые дополнительные данные, которые вы хотите передать в вашу функцию-обработчик. Прототип этой функции приведен в следующей строке.

Уточнение: реально функция-обработчик результата будет вызвана не немедленно после обработки сообщения получателем, а результат обработки будет помещен в очередь обработанных сообщений, откуда он будет извлечен тогда, когда поток, передавший сообщение, обратиться к очереди сообщений для получения следующего (то есть при вызове GetMessage, PeekMessage, WaitMessage или одну из функций SendMessage. ).

Функцию SendMessageCallback можно с успехом сочетать с широковещательными сообщениями — тогда у вас появляется возможность анализировать результаты обработки этого сообщения всеми главными окнами приложений.

Если функция SendMessageCallback используется для передачи сообщения окну, созданному тем-же потоком, то получение результата и вызов функции-обработчика результата осуществится немедленно, до возвращения из функции SendMessageCallback.

Отдельно стоит рассмотреть вопросы оптимизации обработки межпотоковых сообщений. Дело в том, что Windows NT может работать на многопроцессорных системах, реально выполняя несколько потоков в одно и то же время. В этом случае может быть целесообразно сократить время, в течении которого один поток просто ожидает результат обработки другого потока. Для этого предназначены две дополнительные функции ReplyMessage и SendNotifyMessage.

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

Функция SendNotifyMessage появилась на свет в связи с тем, что многие сообщения являются просто информационными. То есть они сообщают окну, что с ним сделано то-то и то-то, но результат обработки этого сообщения не нужен. Часто такие сообщения должны передаваться в синхронном режиме, например сообщение WM_DESTROY должно быть обработано во время выполнения функции DestroyWindow и до обработки сообщения WM_NCDESTROY, но то как оно будет обработано и каков результат его обработки — не важно. В качестве обратного примера можно привести обработку сообщения WM_CREATE, так как результат обработки нужен для дальнейшего создания окна или отказа от его создания.

Для синхронной передачи информационных сообщений удобно применять функцию SendNotifyMessage, которая передает сообщение как обычная функция SendMessage, но не дожидается результата обработки этого сообщения. До определенной степени эффект от выполнения функции SendNotifyMessage похож на эффект от функции PostMessage, но переданное таким способом сообщение будет обработано заведомо то того, как будет обработано любое посланное обычным способом сообщение.

POST карты — назначение и разновидности

POST карты не первое десятилетие используются для диагностики «железных» неисправностей компьютеров и материнских плат всевозможных форм-факторов. На данный момент этих карт создано очень много, практически для всех возможных ситуаций. Статья рассказывает о том, что такое POST карты и для чего их используют, как они работают, какие бывают и чем друг от друга отличаются.

После нажатия кнопки включения компьютера BIOS проводит поэтапную проверку и инициализацию всех элементов аппаратной части компьютера. Называется этот процесс: POST (англ. Power-On Self-Test – самотестирование после включения). Не только компьютеры, но и большинство современных электронных устройств имеют схожие системы.

BIOS сообщает статус (или результат) прохождения POST несколькими способами:

1. Вывод сообщений на экран. Самый дружественный и информативный способ. По сути, доступен только после успешного или почти успешного прохождения самотестирования. Отсутствие какой-либо информации на экране говорит о серьезных неисправностях базовых компонентов (материнская плата, процессор, память, видеоадаптер и т.д.). Диагностика ошибок возможна в основном только для периферийных устройств (накопители, клава и др.).

2. Звуковые сигналы. Наверное, все слышали короткий «биип» при включении компьютера – в большинстве BIOS это означает прохождение теста без ошибок и готовность к загрузке ОС. Другие варианты сигналов могут говорить об определенных проблемах с железом. Эти коды «азбуки Морзе» различаются у разных производителей и даже разных версий BIOS. Найти их обычно можно в книжке к материнке или соответствующих онлайн справочниках.

3. POST коды. В ходе каждого этапа процесса самотестирования BIOS отправляет текущий код на порт 80h (иногда 81h или другие), и если возникает ошибка, там остается или код операции, на которой произошел сбой, или код последней успешной операции. Считав этот код, можно определить на каком этапе произошла ошибка, и что могло ее вызвать. Это единственный из всех перечисленных способов, который позволяет идентифицировать проблемы на материнской плате, которая не подает видимых признаков жизни. По этой причине, он обычно используется для диагностики и ремонта непосредственно материнских плат.

Если первые два способа диагностики не требуют специального оборудования, разве что монитор и подключенный к материнской плате динамик (бывает, что его там нет), то для третьего способа вам понадобиться собственно POST карта.

Основная задача любой POST карты – это считать и отобразить текущий POST код. Считать его можно несколькими способами: по шинам ISA, PCI, LPC или через LPT порт. Есть и другие, более экзотические варианты (о них чуть позже). Кроме, собственно, отображения кода, хорошие POST карты имеют дополнительные диагностические возможности (индикаторы, режимы тестирования, встречаются даже со встроенным видеоадаптером).

Некоторые материнские платы (обычно Premium сегмента) имеют встроенный индикатор POST кодов.

Первыми POST картами были карты для шины ISA, существовавшей с 1981 по 199х годы. Используется она даже сейчас (хоть и весьма редко), в основном в промышленном и военном секторе – там, где осталось оборудование для этой шины.

Следующей массовой компьютерной шиной стала PCI. Сейчас это самая распространенная шина для настольных компьютеров. Естественно, для нее есть и POST карты всех возможных форм, размеров и функций. Самую простейшую, с обычным сегментным индикатором, можно купить за 2-3 бакса на любом Ebay, Ali и им подобным.

В принципе, такая карта со своей базовой задачей вполне справляется – POST код вы узнаете. Но для профессиональной работы этого мало. Полезно иметь индикаторы основных напряжений (обычно: +5, +3.3, +12, -12, +3.3 Standby) и индикаторы сигналов шины (из самых базовых: CLK, RST#, FRAME#, IRDY#). Важно иметь возможность переключения порта, на котором карта «слушает» коды POST (не только стандартный 80h). Бывают и другие «фишки», отсюда и такой «навороченный» вид у продвинутых карточек.

Еще один удобный вариант – это выносной индикатор. Он позволяет со всеми удобствами производить диагностику материнских плат, не вынимая их из системника. С одной стороны, если дело дошло до POST карты, то скорей всего материнку все же придется извлечь для ремонта, но с другой стороны – не всегда, да и POST карты просто удобный способ общей диагностики. На фото Sintech ST8679, китайская карточка с выносным многострочным LCD дисплеем.

Существуют POST карты для LPT порта – довольно простой и удобный способ диагностики для любого компьютера или ноутбука, имеющего этот самый LPT порт. Из-за технических особенностей, они не имеют возможностей, присущих картам для PCI, но это компенсируется простотой и доступностью. Требуют питание по USB (для этого и наличие порта на плате).

Однако LPT изживает свой век, и на современных компьютерах их уже почти не встретишь, соответственно, доживают свои дни и эти карты.

Служивший нам верой и правдой много лет PCI, постепенно вытесняет более современная PCI-Express. Немалое количество современных материнских плат вообще не имеют слота PCI (хотя и могут иметь саму шину). Но с PCI-E не все так просто. Во-первых, сама диагностика с помощью PCI-E на данный момент вещь мутная, хотя бы, из-за отсутствия адекватной информации. Во-вторых, с PCI-E все зависит от конкретного изготовителя – нет гарантии, что коды будут выводиться; если и выводятся, то нет гарантии, что по стандартному порту и в стандартном виде.

Одним из самых перспективных способов диагностики на сегодняшний день является USB. И главная тому причина – повсеместная распространенность этого интерфейса. Как мы уже выяснили, отсутствие того или иного разъема на материнской плате может стать преткновением для диагностики. И эту проблему как раз решает USB – парочку портов имеют буквально все компьютеры и ноутбуки, выпущенные за последние 15 лет.

Для такой диагностики необходимо наличие в системе USB Debug Port – это своего рода расширение USB, позволяющее передавать диагностическую информацию. В USB 3.0 реализация Debug Port получилась сподручней (подробней о Debug Port можно прочитать по ссылке). Кроме передачи POST кодов, Debug Port позволяет производить полноценную отладку кода BIOS и UEFI.

Было даже выпущено несколько устройств разными компаниями. NET20DC от Ajays (компания почти тут же обанкротилась, так как поставщики отказались поставлять им компоненты для сборки девайса). Insyde H2O DDT от Insyde Software (выпущен, вроде, в 2008 году, но информация об этом девайсе канула в лету даже на официальном сайте). Оба этих устройства скорее отладчики, хотя и имеют возможность захвата POST кодов.

С ноутбуками все немного сложней. Наиболее распространенные разъемы, которые можно использовать для диагностики – это mini PCI или Mini PCI-E (у более современных).

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

Отдельные производители имеют свои способы диагностики, тут уж действительно «кто во что горазд». К сожалению, эта информация обычно является достоянием лишь производителя и его внутренних сервисных центров, поэтому все существующие варианты POST карт в общем доступе вряд ли найдутся.

Такое вот у POST карт интересное прошлое и насыщенное настоящее. Что их ждет в будущем? Поживем – увидим. Но реалии таковы, что в нынешнюю эпоху потребительства от девайсов зачастую избавляются раньше, чем они успевают сломаться. А если и ломаются, то оказываются в сервисных мастерских производителя, где уж явно должно быть подходящее диагностическое оборудование.

Что такое код postappmessage

2315 просмотра

1 ответ

98 Репутация автора

Я пытаюсь вызвать функции в android и iOS Swift (WKWebview) из javascript .

Для Android:

JavaScript-вызов для Android:

Вызов Javascript для iOS:

Таким образом, здесь мы делаем разные звонки от javascript для android и iOS . Можно ли вызывать функции как одним, так android и iOS одним способом?

Что такое код postappmessage

Статьи » Расшифровка кодов ошибок POST (ПОСТ) карты

Расшифровка кодов ошибок POST (ПОСТ) карты

Award BIOS 6.0: полная загрузка

Данная таблица содержит POST-коды, которые отображаются при полной процедуре POST.

  • CF Определяется тип процессора и тестируется чтение/запись CMOS
  • C0 Предварительно инициализируется чипсет и L1-, L2-кэш, программируется контроллер прерываний, DMA, таймер
  • C1 Детектируется тип и объем оперативной памяти
  • C3 Код BIOS распаковывается во временную область оперативной памяти
  • 0С Проверяются контрольные суммы BIOS
  • C5 Код BIOS копируется в теневую память и управление передается модулю Boot Block
  • 01 Модуль XGROUP распаковывается по физическому адресу 1000:0000h
  • 02 Инициализация процессора. Устанавливаются регистры CR и MSR
  • 03 Определяются ресурсы ввода/вывода (Super I/O)
  • 05 Очищается экран и флаг состояния CMOS
  • 06 Проверяется сопроцессор
  • 07 Определяется и тестируется контроллер клавиатуры
  • 08 Определяется интерфейс клавиатуры
  • 09 Инициализация контроллера Serial ATA
  • OA Определяется клавиатура и мышь, которые подключены к портам PS/2
  • 0B Устанавливаются ресурсы звукового контроллера AC97
  • OE Тестируется сегмент памяти F000h
  • 10 Определяется тип flash-памяти
  • 12 Тестируется CMOS
  • 14 Устанавливаются значения для регистров чипсета
  • 16 Первично инициализируется тактовый генератор
  • 18 Определяется тип процессора, его параметры и объемы кэша L1 и L2
  • 1B Инициализируется таблица векторов прерываний
  • 1С Проверяются контрольные суммы CMOS и напряжение питания аккумулятора
  • 1D Определяется система управления питанием Power Management
  • 1F Загружается матрица клавиатуры (для ноутбуков)
  • 21 Инициализируется система Hardware Power Management (для ноутбуков)
  • 23 Тестируется математический сопроцессор, дисковод, инициализация чипсета
  • 24 Обновляется микрокод процессора. Создается карта распределения ресурсов устройств Plug and Play
  • 25 Начальная инициализация PCI: перечисляются устройства, поиск адаптера VGA, запись VGA BIOS по адресу C000:0
  • 26 Устанавливается тактовая частота по CMOS Setup. Отключается синхронизация неиспользуемых слотов DIMM и PCI. Инициализируется система мониторинга (H/W Monitor)
  • 27 Разрешается прерывание INT 09h. Снова инициализируется контроллер клавиатуры
  • 29 Программируются регистры MTRR, инициализируется APIC. Программируется контроллер IDE. Измеряется частота процессора. Вызывается расширение BIOS видеосистемы
  • 2B Поиск BIOS видеоадаптера
  • 2D Отображается заставка Award, информация о типе процессора и его скорости
  • 33 Сбрасывается клавиатура
  • 35 Тестируется первый канал DMA
  • 37 Тестируется второй канал DMA
  • 39 Тестируются страничные регистры DMA
  • 3C Настраивается контроллер 8254 (таймер)
  • 3E Проверка контроллера прерываний 8259
  • 43 Проверяется контроллер прерываний
  • 47 Тестируются шины ISA/EISA
  • 49 Вычисляется объем оперативной памяти. Настраиваются регистры для процессора AMD K5
  • 4E Программируются регистры MTRR для процессоров Syrix. Инициализируются кэш L2 и APIC
  • 50 Определяется шина USB
  • 52 Тестируется ОЗУ с отображением результатов. Очищается расширенная память
  • 53 Если выполнена очистка CMOS, то сбрасывается пароль на вход в систему
  • 55 Отображается количество процессоров (для многопроцессорных платформ)
  • 57 Отображается логотип EPA. Начальная инициализация устройств ISA PnP
  • 59 Определяется система защиты от вирусов
  • 5B Вывод подсказки для запуска обновления BIOS с дискеты
  • 5D Запускается контроллер Super I/O и интегрированный аудиоконтроллер
  • 60 Вход в CMOS Setup, если была нажата клавиша Delete
  • 65 Инициализируется мышь PS/2
  • 69 Включается кэш L2
  • 6B Настраиваются регистры чипсета согласно BIOS Setup
  • 6D Назначаются ресурсы для устройств ISA PnP и COM-порты для интегрированных устройств
  • 6F Инициализируется и настраивается контроллер гибких дисков
  • 75 Детектируются и устанавливаются IDE-устройства: жесткие диски, CD/DVD, LS-120, ZIP и др.
  • 76 Выводится информация об обнаруженных IDE-устройствах
  • 77 Инициализируются последовательные и параллельные порты
  • 7A Сбрасывается и готовится к работе математический сопроцессор
  • 7C Определяется защита от несанкционированной записи на жесткие диски
  • 7F При наличии ошибок выводится сообщение и ожидается нажатие клавиш Delete и F1
  • 82 Выделяется память для управления питанием и заносятся изменения в таблицу ESCD.
  • Убирается заставка с логотипом EPA. Запрашивается пароль, если нужен
  • 83 Все данные сохраняются из временного стека в CMOS
  • 84 Вывод на экран сообщения Initializing Plug and Play Cards
  • 85 Завершается инициализация USB
  • 87 Создаются таблицы SYSID в области DMI
  • 89 Устанавливаются таблицы ACPI. Назначаются прерывания для PCI-устройств
  • 8B Вызывается BIOS дополнительных ISA- или PCI-контроллеров, за исключением видеоадаптера
  • 8D Устанавливаются параметры контроля четности ОЗУ по CMOS Setup. Инициализируется APM
  • 8F IRQ 12 разрешается для «горячего» подключения мыши PS/2
  • 94 Завершение инициализации чипсета. Отображение таблицы распределения ресурсов. Включение кэша L2. Установка режима перехода на летнее/зимнее время
  • 95 Устанавливается частота автоповтора клавиатуры и состояния Num Lock
  • 96 Для многопроцессорных систем настраиваются регистры (для процессоров Cyrix). Создается таблица ESCD. Устанавливается таймер DOS Time по показаниям часов RTC CMOS. Сохраняются разделы загрузочных устройств для использования встроенным антивирусом. Динамик оповещает об окончании POST. Создается таблица MSIRQ FF Выполняется прерывание BIOS INT 19h. Поиск загрузчика в первом секторе загрузочного устройства

Award BIOS 6.0: сокращенная загрузка

Сокращенная процедура выполняется при установке в BIOS параметра Quick Power On Self Test.

  • 65 Сбрасывается видеоадаптер. Инициализируются звуковой контроллер, устройства ввода/вывода,тестируется клавиатура и мышь. Проверяется целостность BIOS
  • 66 Инициализируется кэш-память. Создается таблица векторов прерываний. Инициализируется система управления питанием
  • 67 Проверяется контрольная сумма CMOS и тестируется батарейка питания. Настраивается чипсет на основе параметров CMOS
  • 68 Инициализируется видеоадаптер
  • 69 Настраивается контроллер прерываний
  • 6A Тестируется оперативная память (ускоренно)
  • 6B Отображается логотип EPA, результаты тестов процессора и памяти
  • 70 Отображается подсказка для входа в BIOS Setup. Инициализируется мышь, подключенная к PS/2 или USB
  • 71 Инициализируется контроллер кэш-памяти
  • 72 Настраиваются регистры чипсета. Создается список устройств Plug and Play.& Инициализируется контроллер дисковода
  • 73 Инициализируется контроллер жестких дисков
  • 74 Инициализируется сопроцессор
  • 75 Если нужно, жесткий диск защищается от записи
  • 77 Если нужно, запрашивается пароль и выводятся сообщения Press F1 to continue, DEL to enter Setup
  • 78 Инициализируются платы расширения с собственной BIOS
  • 79 Инициализируются ресурсы платформы
  • 7A Генерируются корневая таблица RSDT, таблицы устройств DSDT, FADT и т. п.
  • 7D Собирается информациия о разделах загрузочных устройств
  • 7E BIOS готовится к загрузке операционной системы
  • 7F Состояние индикатора NumLock устанавливается в соответствии с настройками
  • BIOS Setup
  • 80 Вызывается INT 19 и запускается операционная система
  • FF Загрузка операционной системы

Что такое код безопасности и почему я вижу, что он изменился?

Что такое код безопасности?

У каждого разговора Signal есть уникальный код безопасности, который позволяет проверить защищенность сообщений и звонков с определенными контактами.

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

Почему я вижу предупреждение об изменении кода безопасности?

Signal уведомляет вас об изменении кода безопасности. Это позволяет вам проверять конфиденциальность своих коммуникаций с контактом и защититься от атак «человек посредине».

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

Как мне увидеть код безопасности?

  1. Откройте разговор с контактом.
  2. Нажмите на заголовок разговора или перейдите в настройки разговора.
  3. Выберите «Посмотреть код безопасности».

Как мне проверить код безопасности с моим контактом?

Самый простой способ сравнить коды безопасности — отсканировать QR-код вашего контакта на экране просмотра кода безопасности. Вы также можете просмотреть или прослушать цифровой код или скопировать его в буфер, нажав на значок «Поделиться». Если код безопасности совпадает, вы можете быть уверены, что общаетесь с тем человеком.

Как управлять статусом проверки кода безопасности?

Просмотрите код безопасности и нажмите на переключатель или кнопку, чтобы изменить статус проверки.

  • В Android нажмите на переключатель «Проверено». Когда контакт будет проверен, переключатель сдвинется вправо и станет синим.
  • В iOS нажмите на кнопку «Отметить как проверенный» или выберите «Сбросить проверку».
  • На компьютере нажмите «Отметить как проверенный» или «Отметить как непроверенный».

Как узнать, что код безопасности отмечен как проверенный?

Если код безопасности проверен, в заголовке разговора появится галочка рядом с именем контакта. Код будет считаться проверенным, пока не изменится или вы не измените статус проверки вручную.

Мошенники придумали способ захватывать почтовые ящики по SMS

Xakep #246. Учиться, учиться, учиться!

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

Мошенник должен заранее знать телефонный номер жертвы. Затем он заходит на почтовый сайт, вводит почтовый адрес жертвы и переходит на форму восстановления забытого пароля. Там выбирает способ получения кода по SMS. Когда жертва получает код верификации, злоумышленник отправляет ей сообщение со своего номера с текстом примерно следующего содержания: «На вашем аккаунте замечена неавторизованная активность. Пожалуйста, пришлите код верификации, который вам только что выслали».

Жертва может подумать, что сообщение пришло от почтового провайдера — и высылает код. Дело сделано. Мошенник тут же авторизуется в системе и меняет пароль.

Дальнейшие действия злоумышленника должны быть оперативными, потому что жертва может довольно быстро восстановить утраченный доступ, получив новый код верификации.

Как вариант, пишет Symantec, можно установить дополнительный адрес для получения копий всех писем, а затем отправить жертве сообщение, что всё нормально, контроль над ящиком восстановлен. Здесь следует надеяться, что жертва забудет об инциденте и не станет проверять настройки. Тогда злоумышленник сможет долгое время читать её переписку.

Илон Маск рекомендует:  transition-duration в CSS
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL