- •3. Системный реестр операционной системы Windows. Структура и главные разделы. Точки автозапуска программ. Средства редактирования реестра Windows. Функции работы с реестром из приложения.
- •10. Библиотека работы с двумерной графикой Direct2d. Инициализация библиотеки. Фабрика графических объектов библиотеки Direct2d. Вывод графики средствами библиотеки Direct2d. (потом переведу)
- •12. Системы координат. Трансформации. Матрица трансформаций. Виды трансформаций и их представление в матрице трансформаций. Преобразования в страничной системе координат. Режимы масштабирования.
- •13. Понятие ресурсов программ Windows. Виды ресурсов. Операции с ресурсами.
- •15. Понятие динамически-загружаемой библиотеки. Создание dll-библиотеки. Использование dll-библиотеки в программе методом динамический импорта процедур.
- •1 И 2 часть вопроса смотри в вопросе номер 14
- •17. Понятие объекта ядра ос Windows. Виды объектов ядра. Атрибуты защиты объекта ядра. Дескриптор защиты объекта ядра. Создание и удаление объектов ядра.
- •18.Проецирование файлов в память. Отличие в механизме проецирования файлов в память в ос Windows и unix/Linux. Действия по проецированию файла в память.
- •2. Создание объекта ядра под названием «проекция файла».
- •20. Средства распараллеливания вычислений в ос Windows. Понятия процесса и потока. Достоинства и недостатки процессов и потоков. Создание и завершение процесса. Запуск процессов по цепочке.
- •1. Открытие файла CreateFile.
- •21. Средства распараллеливания вычислений в ос Windows. Понятия процесса и потока. Создание и завершение потока. Приостановка и возобновление потока. Контекст потока.
- •22. Понятие пула потоков. Архитектура пула потоков. Операции с потоками при работе с пулом потоков.
- •23. Распределение процессорного времени между потоками ос Windows. Механизм приоритетов. Класс приоритета процесса. Относительный уровень приоритета потока.
- •24. Механизмы синхронизации потоков одного и разных процессов в ос Windows. Обзор и сравнительная характеристика механизмов синхронизации.
- •25. Синхронизация потоков в пределах одного процесса ос Windows. Критическая секция. Операции с критической секцией. Атомарные операции.
- •26. Синхронизация потоков в пределах одного процесса ос Windows. Ожидаемое условие (монитор Хора). Операции с ожидаемым условием. Пример использования ожидаемого условия для синхронизации потоков.
- •29. Структура системного программного интерфейса ос Windows (Native api). Nt-функции и Zw-функции в пользовательском режиме и режиме ядра ос Windows.
- •30. Системный вызов ос Windows. Алгоритм системного вызова. Особенность системного вызова из режима ядра.
- •31. Отладка драйверов ос Windows. Средства отладки драйверов. Посмертный анализ. Живая отладка.
- •32.Структуры данных общего назначения в режиме ядра ос Windows. Представление строк стандарта Unicode. Представление двусвязных списков.
- •33. Механизм прерываний ос Windows. Аппаратные и программные прерывания. Понятие прерывания, исключения и системного вызова. Таблица векторов прерываний (idt).
- •35. Понятие приоритета прерываний (irql). Приоритеты прерываний для процессора x86 или x64. Процедура обработки прерываний (isr). Схема обработки аппаратных прерываний.
- •36. Программные прерывания. Понятие отложенной процедуры (dpc). Назначение отложенных процедур. Механизм обслуживания отложенных процедур. Операции с отложенными процедурами.
- •37. Понятие асинхронной процедуры (apc). Назначение асинхронных процедур. Типы асинхронных процедур. Операции с асинхронными процедурами.
- •38. Понятие асинхронной процедуры (apc). Асинхронные процедуры режима ядра: специальная и нормальная apc-процедуры. Асинхронные процедуры пользовательского режима.
- •39. Понятие элемента работы (Work Item). Назначение элементов работы. Операции с элементами работы. Очереди элементов работы. Обслуживание элементов работы.
- •41. Управление памятью в пользовательском режиме ос Windows. Оптимизация работы кучи с помощью списков предыстории (Look-aside Lists) и низко-фрагментированной кучи (Low Fragmentation Heap).
- •42. Структура виртуальной памяти в ос Windows. Виды страниц. Состояния страниц. Структура виртуального адреса. Трансляция виртуального адреса в физический. Кэширование виртуальных адресов.
- •45. Управление памятью в режиме ядра ос Windows. Оптимизация использования оперативной памяти с помощью списков предыстории – Look-aside Lists.
- •46. Представление объекта ядра в памяти. Менеджер объектов.
- •47. Фиксация данных в физической памяти ос Windows. Таблица описания памяти (mdl) и ее использование.
- •48. Понятие драйвера ос Windows. Виды драйверов. Типы драйверов в режиме ядра. Точки входа в драйвер.
- •49. Объект, описывающий драйвер. Объект, описывающий устройство. Объект, описывающий файл. Структура и взаимосвязь объектов.
- •50. Понятие пакета ввода-вывода (irp). Структура пакета ввода-вывода. Схема обработки пакета ввода-вывода при открытии файла.
- •51. Понятие пакета ввода-вывода (irp). Структура пакета ввода-вывода. Схема обработки пакета ввода-вывода при выполнении чтения-записи файла.
- •52. Перехват api-вызовов ос Windows в пользовательском режиме. Внедрение dll с помощью реестра. Внедрение dll с помощью ловушек. Внедрение dll с помощью дистанционного потока.
- •53. Перехват api-вызовов ос Windows в пользовательском режиме. Замена адреса в таблице импорта. Перехват в точке входа в процедуру с помощью подмены начальных инструкций (Microsoft Detours).
- •55. Перехват api-вызовов менеджера объектов ос Windows в режиме ядра.
- •56. Перехват api-вызовов создания и уничтожения процессов и потоков ос Windows в режиме ядра.
- •57. Перехват операций с реестром в ос Windows в режиме ядра.
- •58. Перехват операций с файлами в ос Windows в режиме ядра. Мини-фильтры файловой системы.
15. Понятие динамически-загружаемой библиотеки. Создание dll-библиотеки. Использование dll-библиотеки в программе методом динамический импорта процедур.
1 И 2 часть вопроса смотри в вопросе номер 14
DLL представляет собой дополняемый модуль ОС (обычно DLL), код и ресурсы которого могут использоваться в составе других динамических библиотек и приложений. DLL – программа с множеством точек входа. В отличие от статической библиотеки, которая включается в выполняемый exe модуль на этапе сборки, динамическая библиотека собирается в виде отдельно выполняемого модуля. Использование динамической библиотеки выполняется одним из двух способов:
Статического импорта
Динамического импорта
Для создания DLL в разных языках используются разные средства. В C++:
Создание:
Динамический импорт. Если при статическом импорте загрузку DLL в память обеспечивает ОС, то при динамическом импорте это делает программист вручную. Загрузить DLL можно с помощью функции:
HANDLE LoadLibrary(LPCSTR libFileName)
Загрузка DLL-библиотеки в память:
HMODULE LoadLibrary(LPCTSTR lpFileName);
HMODULE LoadLibraryEx(LPCTSTR lpFileName, _Reserved_ HANDLE hFile, DWORD dwFlags);
HMODULE GetModuleHandle(LPCTSTR lpModuleName); GetModuleHandleEx.
DWORD GetModuleFileName(HMODULE hModule, LPTSTR lpFilename, DWORD nSize);
Освобождение DLL-библиотеки:
bool FreeLibrary(HMODULE hModule); FreeLibraryAndExitThread.
Получение адреса функции в DLL-библиотеке:
void* GetProcAddress(HMODULE hModule, LPCSTR lpProcName);
Применение:
typedef int TMin(int x, int y); // добавить __stdcall
TMin* pMin;
pMin = (TMin*)GetProcAddress(hModule, "_Min@8");
int a = pMin(10, 20);
16. Понятие динамически-загружаемой библиотеки. Создание в DLL-библиотеке разделяемых между приложениями глобальных данных. Разделы импорта и экспорта DLL-библиотеки. Переадресация вызовов процедур DLL-библиотек к другим DLL-библиотекам. Исключение конфликта версий DLL.
DLL представляет собой дополняемый модуль ОС (обычно DLL), код и ресурсы которого могут использоваться в составе других динамических библиотек и приложений. DLL – программа с множеством точек входа. В отличие от статической библиотеки, которая включается в выполняемый exe модуль на этапе сборки, динамическая библиотека собирается в виде отдельно выполняемого модуля. Использование динамической библиотеки выполняется одним из двух способов:
Статического импорта
Динамического импорта
Разделяемые данные – shared data:
#pragma section("mysection", read, write, shared)
__declspec(allocate("mysection")) int Number = 0;
Экспорт
Если модификатор __declspec(dllexport) указан перед переменной, прототипом функции или C++классом, компилятор Microsoft С/С++ встраивает в конечный OBJфайл дополнительную информацию. Она понадобится компоновщику при сборке DLL из OBJфайлов.
Обнаружив такую информацию, компоновщик создает LIB-файл со списком идеyтификаторов, экспортируемых из DLL. Этот LIBфайл нужен при сборке любого EXE-модуля, ссылающегося на такие идентификаторы. Компоновщик также вставляет в конечный DLL-файл таблицу экспортируемых идентификаторов — раздел экспорта, в котором содержится список (в алфавитном порядке) идентификаторов экспортируемых функций, переменных и классов. Туда же помещается относительный виртуальный адрес (relative virtual address, RVA) каждого идентификатора внутри DLL-модуля.
Воспользовавшись утилитой DumpBin.exe (с ключом -exports) из состава Microsoft Visual Studio, мы можем увидеть содержимое раздела экспорта в DLL-модуле.
Импорт
Разрешая ссылки на импортируемые идентификаторы, компоновщик создает в конечном EXE-модуле раздел импорта (imports section). В нем перечисляются DLL, необходимые этому модулю, и идентификаторы, на которые есть ссылки из всех используемых DLL.
Воспользовавшись утилитой DumpBin.exe (с ключом -imports), мы можем увидеть содержимое раздела импорта.
Запись о переадресации вызова функции (function forwarder) — это строка в разделе экспорта DLL, которая перенаправляет вызов к другой функции, находящейся в дру гой DLL. Например, запустив утилиту DumpBin из Visual C++ для Kernel32.dll в Win dows 2000,
Здесь есть четыре переадресованные функции. Всякий раз, когда Ваше приложение вызывает HeapAlloc, HeapFree, HeapReAlloc или HeapSize, его EXEмодуль динами чески связывается с Kernel32.dll. При запуске EXEмодуля загрузчик загружает Ker nel32.dll и, обнаружив, что переадресуемые функции на самом деле находятся в NTDLL.dll, загружает и эту DLL. Обращаясь к HeapAlloc, программа фактически вызы вает функцию RtlAllocateHeap из NTDLL.dll. А функции HeapAlloc вообще нет!
При вызове HeapAlloc (см. ниже) функция GetProcAddress просмотрит раздел экс порта Kernel32.dll и, выяснив, что HeapAlloc — переадресуемая функция, рекурсивно вызовет сама себя для поиска RtlAllocateHeap в разделе экспорта NTDLL.dll. GetProcAddress(GetModuleHandle("Kernel32"), "HeapAlloc");
Вы тоже можете применять переадресацию вызовов функций в своих DLL. Самый
простой способ — воспользоваться директивой pragma: // переадресация к функции из DllWork
#pragma comment(linker, "/export:SomeFunc=DllWork.SomeOtherFunc")
Эта директива сообщает компоновщику, что DLL должна экспортировать функцию SomeFunc, которая на самом деле реализована как функция SomeOtherFunc в модуле DllWork.dll. Такая запись нужна для каждой переадресуемой функции.
