Поскольку практическая часть данного курса предполагает разработку и выполнение разнообразных Win32-приложений, которые работают в среде, создаваемой Win32-подсистемой, необходимо рассмотреть ее более подробно. Взаимодействие между приложением и операционной системой осуществляется при помощи системных вызовов ( системных сервисов в терминологии Microsoft). Однако приложение не может вызвать системный вызов напрямую (более того, системные вызовы не документированы). Вместо этого приложение должно воспользоваться программным интерфейсом ОС — Win32 API.
Win32 API (Application Programming Interface) — основной интерфейс программирования в семействе операционных систем Microsoft Windows. Функции Win32 API , например, CreateProcess или CreateFile, — документированные, вызываемые подпрограммы, реализуемые Win32 подсистемой.
В состав Win32 подсистемы (см. рис. 1.4) входят: cерверный процесс подсистемы окружения csrss.exe, драйвер режима ядра Win32k.sys, dll — модули подсистем (kernel32.dll, advapi32.dll, user32.dll и gdi32.dll), экспортирующие Win32-функции и драйверы графических устройств. В процессе эволюции структура подсистемы претерпела изменения. Например, функции окон и рисования с целью повышения производительности были перенесены из серверного процесса , работающего в режиме пользователя, в драйвер режима ядра Win32k.sys. Однако это и подобные изменения никак не отразились на работоспособности приложений, поскольку существующие вызовы Win32 API не изменяются с новыми выпусками системы Windows, хотя их состав постоянно пополняется.
EXE не является приложением Win32 в Windows 7 — что делать?
Приложение, ориентированное на использование Win32 API, может работать практически на всех версиях Windows, несмотря на то, что сами системные вызовы в различных системах различны (см. рис. 1.5). Таким путем корпорация Microsoft обеспечивает преемственность своих операционных систем.
Рис. 1.5. Поддержка единого программного интерфейса для различных версий Windows
При запуске процесса все требуемые динамические библиотеки отображаются на его виртуальное адресное пространство, а для быстрого вызова библиотечной процедуры используется специальный вектор передачи.
Рис. 1.6. Различные маршруты выполнения вызовов Win32 API.
При вызове приложением одной из Win32-функций dll-подсистем может возникнуть одна из трех ситуаций (см. рис. 1.6).
- Функция полностью выполняется внутри данной dll (шаг 1).
- Для выполнения функции привлекается сервер csrss, для чего ему посылается сообщение (шаг 2a, за которым обычно следуют шаги 2b и 2c).
- Данный вызов транслируется в системный сервис ( системный вызов ), который обычно обрабатывается в модуле ntdll.dll (шаги 3a и 3b). Например, Win32-функция ReadFile выполняется с помощью недокументированного сервиса NtReadFile.
Некоторые функции (например, CreateProcess ) требуют выполнения обоих последних пунктов.
Программа не является приложением win32 — Как исправить?
В первых версиях ОС Windows практически все вызовы Win32 API выполнялись, следуя маршруту 2 (2a, 2b, 2c). После того, как существенная часть кода системы для увеличения производительности была перенесена в ядро (начиная с Windows NT 4.0), вызовы Win32 API, как правило, идут напрямую по 3-му (3a, 3b) пути, минуя подсистему окружения Win32. В настоящее время лишь небольшое число вызовов выполняется по длинному 2-му маршруту.
Помимо перечисленных, наиболее важных dll-библиотек, в системном каталоге system32 имеется большое количество других dll-файлов. В настоящее время количество вызовов API составляет несколько десятков тысяч.
Список экспортируемых каждой конкретной dll функций можно посмотреть с помощью утилиты depends, входящей в пакет Platform SDK. Так, на рис. 1.7 приведена информация о структуре библиотеки kernel32.dll ОС Windows XP, экспортирующей 949 функций.
увеличить изображение
Рис. 1.7. Окно утилиты depends.exe
В настоящей лекции изложена краткая история создания ОС Windows и ее миграция от микроядерной архитектуры в сторону монолитного дизайна. Описаны возможности и основные структурные компоненты системы. Рассмотрена подсистема Win32, которая объединяет ряд модулей режима ядра и режима пользователя и является базой для разработки приложений.
Приложение. Некоторые понятия и термины
DLL (динамически подключаемая библиотека)
Набор вызываемых подпрограмм, включенных в один двоичный файл , который приложения, использующие эти подпрограммы, могут динамически загружать в процессе своего выполнения. В качестве примера можно привести модули Msvcrt. dll (библиотека исполняющей Си подсистемы) и Kernel32. dll (одна из библиотек подсистемы Win32). DLL активно используются компонентами и приложениями ОС Windows пользовательского режима. Преимущество DLL перед статическими библиотеками состоит в том, что приложения могут разделять DLL -модули, при этом ОС Windows гарантирует, что в памяти будет находиться лишь по одному экземпляру используемых DLL .
Процессы и потоки
Под процессом понимается контейнер ресурсов, используемых потоками. Процесс включает: закрытое адресное пространство , в котором располагаются код, данные и стеки потоков; список открытых описателей ресурсов; контекст защиты; идентификатор процесса.
Поток команд исполняемой программы, или просто поток — сущность внутри процесса, получающая процессорное время . Поток характеризуется набором регистров (состоянием), идентификатором потока, стеками режимов ядра и пользователя.
Более подробно процессы и потоки описаны в части II.
Источник: intuit.ru
начало работы с классическими приложениями Windows, используюющими API Win32
Win32 API (также называемый Windows API) — это исходная платформа для собственных Windows-приложений на языке C/C++, которым требуется прямой доступ к Windows и оборудованию. Она предоставляет первоклассный интерфейс разработки без зависимости от управляемой среды выполнения, такой как .NET и WinRT (для приложений UWP для Windows 10). Благодаря этому API Win32 стает оптимальной платформой для приложений, которым требуется самый высокий уровень производительности и прямой доступ к системному оборудованию.
В этой документации описывается создание классических приложений Windows с помощью API Win32. API Win32 — это одна из нескольких платформ приложений, которые можно использовать для создания классических Windows приложений. Дополнительные сведения о других платформах приложений см. в разделе «Выбор платформы».
Подготовка
Следуйте этим инструкциям и начните создавать классические приложения для Windows 10, использующих API Win32.
-
Скачайте или обновите Visual Studio 2019 г. Если у вас еще нет Visual Studio 2019, вы можете установить бесплатную среду Microsoft Visual Studio Community 2019. При установке Visual Studio обязательно выберите вариант «Разработка классических приложений с помощью C++». Ссылки для скачивания см. на странице «Загрузки «.
Примечание При установке Visual Studio при необходимости можно выбрать варианты разработки .NET классических приложений и универсальная платформа Windows для доступа к другим типам проектов и платформам приложений для создания классических приложений Windows.
Скрипты, которые можно использовать для настройки компьютера разработки и установки других компонентов или пакетов, см. в этом GitHub проекте.
Узнайте, как создавать классические приложения с помощью API Win32
Если вы не знакомы с созданием классических приложений с помощью API Win32, приведенные ниже руководства и статьи помогут вам приступить к работе.
Создание первого приложения Win32 на C++ | В этом руководстве описано, как написать программу Windows на C++ с помощью API Win32 и COM. |
Создание первого приложения с помощью DirectX | Это базовое руководство поможет вам приступить к разработке приложений DirectX. |
Руководство по программированию для 64-разрядных версий Windows | Описывает программирование для 64-разрядных версий Windows операционной системы. |
Использование заголовков Windows | Общие сведения о некоторых соглашениях, используемых в файлах заголовков Windows. |
Модернизация классических приложений для Windows 10
Если у вас есть классическое приложение Win32, в универсальная платформа Windows (UWP) есть множество функций, которые можно использовать для обеспечения оптимальной работы на Windows 10. Например, начиная с Windows 10 версии 1903, вы можете разместить элементы управления XAML UWP в классическом приложении Win32 с помощью функции XAML Islands.
Большинство этих функций UWP доступны в виде модульных компонентов, которые можно внедрить в классическом приложении в собственном темпе, не перезаписывая все приложение. Вы можете улучшить существующее классическое приложение, выбрав части Windows 10 и UWP для внедрения.
C++/WinRT
При необходимости можно настроить компьютер разработки для использования C++/WinRT. C++/WinRT — это полностью стандартная современная языковая проекция C++17, которая позволяет легко использовать среда выполнения Windows API среда выполнения Windows (WinRT) из классического приложения C++ Win32. C++/WinRT реализован в виде библиотеки на основе файлов заголовков.
Чтобы настроить C++/WinRT для проекта, сделайте следующее:
- Для новых проектов можно установить расширение C++/WinRT Visual Studio (VSIX) и использовать один из шаблонов проектов C++/WinRT, входящих в это расширение.
- Для существующих проектов классических приложений Windows можно установить Microsoft.Windows. Пакет CppWinRT NuGet в проекте.
Дополнительные сведения об этом варианте см. в этой статье.
Новые возможности API Win32 в Windows 10
Сведения о новых API Win32, появившиеся в Windows 10, см. в новых возможностях.
начало работы с функциями и технологиями Win32
API Win32 существуют для многих функций и технологий в Windows 10, включая основные пользовательские интерфейсы и ИНТЕРФЕЙСы API окон, аудио и графику, а также сетевые интерфейсы. Рекомендации и примеры кода по использованию этих API см. в нашем индексе функций и технологий.
Связанные темы
- Разработка классических приложений
- Справочник по API Windows
- Указатель API Windows
- Справочник по C++ среда выполнения Windows
Источник: learn.microsoft.com
Что такое Win32: основные понятия и простейшие методы устранения возникающих ошибок
Наверное, не нужно объяснять, что многие пользователи частенько в самый неподходящий момент наблюдают на экране монитора сообщение о том, что какой-то исполняемый файл не является приложением Win32. Давайте посмотрим, что такое Win32 и почему возникают ошибки архитектуры или файловой системы. Рассмотрев эти два вопроса, можно будет найти решение проблемы несоответствия приложения данному стандарту.
Что такое Win32
Если говорить о понятии в целом, обычно его относят к архитектуре «операционки» и приложений, поддерживаемых в ней для запуска и работы.
Из истории создания операционных систем известно, что сначала они были 8- и 16-битными, чуть позднее трансформировались в 32-битные и, наконец, в 64-битные. Наравне с эволюцией принципов работы самих «операционок» изменялись и файловые системы. Самой распространенной до недавнего времени считалась файловая система FAT32. Она завоевала такую популярность, что до сих пор разработчики IT-гиганта Microsoft не исключают ее поддержку в новейших версиях ОС Windows.
Кстати, понятие того, что такое Win32, в равной степени применимо и к «операционкам» типа XP и Vista, поскольку даже при наличии файловой системы NTFS, пришедшей на смену FAT32, все равно версии самих ОС в плане архитектуры оставались 32-разрядными.
С появлением Windows 7 был осуществлен переход на архитектуру 64 бита, однако для пользовательской установки можно найти и 32-битную версию любой из четырех сборок «семерки».
Почему возникают ошибки
Теперь рассмотрим всех волнующий вопрос, что такое «Не является Win32-приложением» (такой-то и такой-то установочный или исполняемый компонент). Во-первых, самой простой причиной можно назвать сам файл, созданный, допустим, в Linux или Mac OS X, который, естественно, во всех системах Windows просто не распознается по причине того, что «операционка», так сказать, не знает, что это за компонент и чем его открыть. Очень часто такие ситуации можно наблюдать при работе с образами дисков типа .dmg или некоторыми архивными данными.
С другой стороны ошибки могут возникать и с «родными» приложениями Windows. Отвечая на вопрос о том, что такое приложение Win32, стоит отметить, что это программа, динамическая библиотека или драйвер, изначально созданные с использованием архитектуры 32 бита. Теперь, наверное, понятно, что 64-битное приложение или драйвер в 32-битной системе работать не будет.
Реже встречаются ошибки открытия исполняемых файлов или архивов. Тут проблема может заключаться в том, что файл не был загружен (скопирован) целиком или при этом произошли сбои. В этом случае система точно так же может выдавать сообщение о несоответствии формата или типа открываемого файла требованиям самой системы.
Простейшие методы устранения ошибок
Однако методов устранения таких неполадок существует очень много. Простейшим решением может стать загрузка из сети Интернет специализированного файла Win32.reg с его последующим запуском.
Что такое Win32.reg? Это файл системного реестра, который вносит в него специфичные записи и ключи, позволяющие упростить процесс открытия проблемных приложений.
Иногда ситуация может быть связана с несоответствием файловых систем. В этом случае понадобится произвести форматирование диска или раздела с применением, например, FAT32 (особенно при переходе с ОС 64 бита на 32 бита).
Бывают ситуации, когда требуется обновление Microsoft .NET Framework, где в настройках платформы нужно указать поддержку абсолютно всех процессоров, включая x86. В общем, примеров можно приводить достаточно много.
Если это вирус
Самым неприятным случаем возникновения сбоев подобного характера является воздействие вирусов и вредоносных кодов, которые маскируются под системные службы, отвечающие за запуск или вызов 32-битных приложений типа rundll32, svchost и т.д.
Рассмотрим одну из самых известных угроз. Что такое Trojan:Win32 (Gatak или еще какая-либо модификация)? Да, обычный компьютерный вирус (троян), который, используя бреши в системе безопасности, пытается получить доступ к компьютеру удаленного пользователя с целью кражи информации или получения над компьютерным терминалом полного контроля.
Тут уж точно в своем распоряжении нужно иметь качественный штатный антивирус или максимальное мощное средство проверки системы в виде сканера (например, Kaspersky Virus Removal Tool или Rescue Disc), поскольку иногда стандартными методами отследить появление угрозы в системе не представляется возможным.
Заключение
Вот, собственно, хоть и кратко, мы рассмотрели вопрос о том, что такое Win32. Конечно, информация подана в сжатом виде, однако рядовому пользователю лезть в дебри программирования и понимания принципов использования архитектуры «операционки» или файловой системы и не нужно. В крайнем случае достаточно выяснить проблему возникновения ошибок и выбрать методику их устранения.
Источник: fb.ru