- •1. Технологические операции сбора, передачи, хранения, контроля и обработки данных
- •2. Критерии качества технологических процессов
- •3. Использование парольной защиты: подход к выбору пароля, способы снятия пароля, места применения паролей
- •4. Виды и источники угроз для конфиденциальной информации
- •5. Борьба с деструктивными программами: классификация деструктивных программ, виды угроз, противодействие
- •6. Описать (с помощью блок-схемы, перечисления последовательности шагов, псевдокода) и объяснить процесс шифрования/дешифрования произвольного файла с помощью алгоритма асимметрического шифрования
- •7. Составить программу (псевдокод), реализующую простейший алгоритм вычисления контрольной суммы (цифровой подписи) произвольного файла
- •8. Из двух строк (последовательностей) символов выделить сигнатуру максимальной длины. Рассказать об основных подходах к выбору сигнатур в антивирусах для поиска деструктивных программ.
- •9. Структура и особенности использования бухгалтерских ис
- •10. Структура и особенности использования банковских ис
- •11. Разделение ресурсов в многозадачных операционных системах, механизм сообщений в Windows
- •12. Подсистема управления памятью. Страничное распределение
- •13. Процессы. Взаимодействия процессов. Семафоры
- •Void Writer() {
- •Void Reader () {
- •14. Запись в реестр Windows заданной информации
- •Синтаксис reg-файла
- •15. Поиск и удаление из реестра заданной информации
- •16. Использование функция Post Message и Send Message для обмена сообщениями Windows
15. Поиск и удаление из реестра заданной информации
Сначала рассказать из вопроса 14 про реестр и .reg-файлы
Чтобы удалить раздел реестра с помощью REG-файла, необходимо поместить дефис (-) перед путем_реестра REG-файла. Например, чтобы удалить подраздел Тест из раздела реестра:
HKEY_LOCAL_MACHINE\Software
в REG-файле, необходимо добавить дефис в начале следующего раздела реестра:
HKEY_LOCAL_MACHINE\Software\Test
В следующем примере имеется REG-файл, который может выполнить эту задачу.
[
-HKEY_LOCAL_MACHINE\Software\Test
]
Чтобы удалить значение реестра с помощью REG-файла, необходимо поместить дефис (-) после знака равенства и имени_элемента_данных REG-файла. Например, чтобы удалить «ПроверяемоеЗначение» из следующего раздела реестра:
HKEY_LOCAL_MACHINE\Software\Test
Следует добавть дефис после «testvalue» = в REG-файл. В следующем примере приводится REG-файл, который может выполнить эту задачу.
HKEY_LOCAL_MACHINE\Software\Test
«testvalue» =-
16. Использование функция Post Message и Send Message для обмена сообщениями Windows
Основным различием между PostMessage и SendNotifyMessage является то, что функции семейства SendMessage отправляют сообщение в другое окно немедленно, с помощью прямого вызова их оконной процедуры и ожидания ответа, в то время как PostMessage заносит сообщение в очередь в виде записи TMessage и возвращает управление немедленно, без ожидания.
SendMessage, принимающая сторона обрабатывает сообщение немедленно, вместо того, чтобы обработать его в очереди в порядке поступления. Например, предположим, что вы написали:
1 2 3 4 5 6 7 8 9 |
var Wnd: HWND; S: String; ... SendMessage(Wnd, WM_SETTEXT, 0, Integer(PChar('ВАСЯ'))); SetLength(S, GetWindowTextLength(Wnd)); GetWindowText(Wnd, PChar(S), Length(S)); SetLength(S, StrLen(PChar(S))); // S = 'Fooblitzky' |
Этот пример отправляет сообщение WM_SETTEXT в любое окно, которое записано в Wnd. Windows вызывает оконную процедуру этого окна с WM_SETTEXT в качестве идентификатора сообщения, нулём и 'Fooblitzky' как wParam и lParam. Оконная процедура обрабатывает сообщение и возвращает управление; управление возвращается на следующую строчку, которая вызывает GetWindowText. Как вы и ожидаете, S примет значение 'ВАСЯ'. Т.е. SendMessage ведёт себя как вызов функции, где WM_SETTEXT - это функция для вызова. Что произойдёт, если вместо SendMessage вы используете PostMessage?
1 2 3 4 5 6 7 8 9 |
var Wnd: HWND; S: String; ... PostMessage(Wnd, WM_SETTEXT, 0, Integer(PChar('ВАСЯ'))); SetLength(S, GetWindowTextLength(Wnd)); GetWindowText(Wnd, PChar(S), Length(S)); SetLength(S, StrLen(PChar(S))); // S = ??? |
PostMessage не вызывает оконную процедуру. Вместо этого, она добавляет запись TMessage в очередь сообщений потока или процесса, который владеет Wnd, и возвращает управление немедленно. TMessage хранит номер (идентификатор) сообщения и его параметры. Поток или приложение обрабатывают сообщение, когда они доходят до него. Т.е. когда цикл выборки сообщений вызывает GetMessage и она возвращает это WM_SETTEXT (у нас могут быть и другие сообщения в очереди до нашего WM_SETTEXT). В любом случае, PostMessage возвращает управление немедленно, не ожидая ничего этого, так что когда начинает выполняться следующая строка (GetWindowText), то S не будет равно 'ВАСЯ', если только текст окна не был таким до того, как вы вызвали PostMessage.
Итак, есть два способа доставки сообщения окну: SendMessage вызывает оконную процедуру напрямую; PostMessage использует очередь. Рисунок ниже иллюстрирует разницу (AfxWndProc - это оконная процедура):