Windows system programming code

Содержание
  1. Насколько сложный программный код у Windows?
  2. Кен Грегг (Ken Gregg), разработчик в составе группы Windows NT
  3. Насколько сложна Windows в программном коде?
  4. Кен Грегг (Ken Gregg)
  5. Как менялся программный код Windows?
  6. Как база кода Windows NT развивалась с 1993 года
  7. Кен Грегг (Ken Gregg)
  8. Несколько слов про ядро Windows NT
  9. Windows system programming code
  10. Общие сведения о программировании на C++ в Windows Overview of Windows Programming in C++
  11. Приложения командной строки (консоль) Command line (console) applications
  12. Собственные клиентские приложения для настольных систем Native desktop client applications
  13. C++ или .NET? C++ or .NET?
  14. COM-компоненты COM Components
  15. Приложения универсальной платформы Windows Universal Windows Platform apps
  16. Мост для классических приложений Desktop Bridge
  17. Игры Games
  18. Клиенты базы данных SQL Server SQL Server database clients
  19. Драйверы устройств Windows Windows device drivers
  20. Службы Windows Windows services
  21. Пакеты SDK, библиотеки и файлы заголовков SDKs, libraries, and header files
  22. средства разработки: Development Tools

Насколько сложный программный код у Windows?

Чтобы разобраться вопросе, насколько может быть сложным программный код «Виндовс» мы обратились к одному из разработчиков команды Windows NT в компании Microsoft — Кену Греггу (Ken Gregg).

Кен Грегг (Ken Gregg), разработчик в составе группы Windows NT

«Могу сказать вам, что у меня был доступ к исходному коду, когда я был в команде Windows NT (NT является основой для всех настольных версий Windows начиная с XP), во время проектов разработки NT 3.1 и NT 3.5. Всё было в рамках стандартов кодирования NT Workbook — эдакой «библии» для всей проектной команды.

. Хотя я и не читал каждую строку кода, но то, с чем мне пришлось работать, было очень:

Нужно исходить из того, что именно понимается под сложностью кода. Это понимание сугубо субъективное, ведь так? Благо существует множество различных метрик, используемых и комбинируемых для измерения сложности программного обеспечения в тех или иных ситуациях (та же самая модульность, многоуровневость и обслуживаемость).

Насколько сложна Windows в программном коде?

Конечно, чтобы прочитать и понять код, вам нужно было бы иметь представление об общей архитектуре Windows NT.

Вероятно, лучшим источником информации о внутренностях Windows сегодня являются книги Windows Internals 6th Edition (в двух томах).

Некоторые люди просто приравнивают сложность кода к размеру. У этого сравнения тоже есть метрика — строки кода (LOC).

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

Кен Грегг (Ken Gregg)

«Существует много споров о методах, используемых для подсчета строк кода (LOC). Если использовать одни и те же критерии от одного выпуска к следующему, то получится относительное изменение размера базы кода.

Сравнивать эти числа с цифрами другой ОС, которая использовала другой метод подсчета строк кода, всё равно что сравнивать яблоки с апельсинами. То есть это некорректный подход».

Как менялся программный код Windows?

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

Как база кода Windows NT развивалась с 1993 года

MLOC — это количество миллионов строк исходного кода. По ним можно определить относительную сложность операционной системы, если опираться на размеры кода (LOC-методика).

  • Windows NT 3.1 (1993) — 5,6 MLOC
  • Windows NT 3.5 (1994) — 8,4 MLOC
  • Windows NT 3.51 (1995) — 10,2 MLOC
  • Windows NT 4.0 (1996) — 16 MLOC
  • Windows 2000 (2000) — 29 MLOC
  • Windows XP (2001) — 35 MLOC
  • Windows Vista (2007) — 45 MLOC
  • Windows 7 (2009) — 42 MLOC
  • Windows 8 (2012) — 50 MLOC
  • Windows 10 (2015) — 55 MLOC

Исходный код Windows состоит в основном из C и C++, а также небольшого количества кода на ассемблере.

Некоторые из утилит пользовательского режима и другие подобные службы пишутся на Си Шарп, но это относительно небольшой процент от общей базы кода.

Кен Грегг (Ken Gregg)

«Я намеренно не включил в список 16-битные версии ОС, выпущенные с 1985 по 2000 годы. Windows NT была основой для всех современных 32-бит и 64-бит версий Windows. Количество строк кода в серверных версиях было таким же, как и в несерверных версиях, выпущенных в том же году (то есть они имели одинаковую базу исходного кода)».

Несколько слов про ядро Windows NT

По словам Кена, работа над ядром NT началась в 1988 году. Ядро было создано с нуля в качестве 32-разрядной упреждающей многозадачной ОС.

Ядро NT впервые загрузилось в июле 1989 года на процессоре Intel i860 RISC. С самого начала был сильный толчок к тому, чтобы новая ОС была совместимой с различными архитектурами центральных процессоров и не была привязана только к архитектуре Intel x86 (IA-32).

NT в конечном итоге работал на MIPS, DEC Alpha, PowerPC, Itanium и, конечно, Intel x86 и x64.

Некоторая сложность была добавлена в базу кода на уровне абстрагирования оборудования (HAL). Это было нужно для поддержки неинтеловских архитектур.

А как вы оцениваете перспективы Windows в плане кода? Узнайте, какие версии Windows актуальны сейчас и какие ОС можно рассмотреть в качестве альтернативы.

Есть проблемы при использовании Windows и непонятен программный код для внедрения новых бизнес-инструментов в ОС от Microsoft? Проконсультируйтесь с экспертами по ИТ-аутсорсингу и получите поддержку по любым техническим вопросам и задачам.

Windows system programming code

Название: Windows 10 System Programming, Part 1
Автор: Pavel Yosifovich
Издательство: Leanpub
Год: 2020
Страниц: 641
Язык: английский
Формат: pdf (true), epub
Размер: 18.1 MB

The term System Programming refers to programming close to an operating system level. Windows 10 System Programming provides guidance for system programmers targetting modern Windows systems, from Windows 7 up to the latest Windows 10 versions. The book uses the documented Windows Application Programming Interface (API) to leverage system-level facilities, including processes, threads, synchronization primitives, virtual memory and I/O. The book is presented in two parts, due to the sheer size of the Windows API and the Windows system facilities breadth. You’re holding in your hands (or your screen of choice) part 1.

Читайте также:  Offline для windows phone

Who Should Read This Book:
The book is intended for software developers that target the Windows platform, and need to have a level of control not achievable by higher-level frameworks and libraries. The book uses C and C++ for code examples, as the Windows API is mostly C-based. C++ is used where it makes sense, where its advantages are obvious in terms of maintenance, clarity, resource management, and any combination of the above. The book does not use non-trivial C++ constructs, such as template metaprogramming. The book is not about C++, it’s about Windows.

That said, other languages can be used to target the Windows API through their specialized interoperability mechanisms. For example, .NET languages (C#, VB, F#, etc.) can use Platform Invoke (P/Invoke) to make calls to the Windows API. Other languages, such as Python, Rust, Java, and many others have their own equivalent facilities.

What You Should Know to Use This Book:
Readers should be very comfortable with the C programming language, especially with pointers, structures, and its standard library, as these occur very frequently in the Windows APIs. Basic C++ knowledge is highly recommended, although it is possible to traverse the book with C proficiency only.

Общие сведения о программировании на C++ в Windows Overview of Windows Programming in C++

Существует несколько обширных категорий приложений Windows, которые можно создать с помощью C++. There are several broad categories of Windows applications that you can create with C++. Каждый из них имеет собственную модель программирования и набор библиотек для Windows, но в любом из них можно использовать стандартную библиотеку C++ и сторонние библиотеки C++. Each has its own programming model and set of Windows-specific libraries, but the C++ standard library and third-party C++ libraries can be used in any of them.

В этом разделе описывается, как использовать Visual Studio и библиотеки оболочек MFC/ATL для создания программ Windows. This section discusses how to use Visual Studio and the MFC/ATL wrapper libraries to create Windows programs. Документацию по самой платформе Windows см. в документации по Windows. For documentation on the Windows platform itself, see Windows documentation.

Приложения командной строки (консоль) Command line (console) applications

Консольные приложения C++ запускаются из командной строки в окне консоли и могут отображать только текстовые выходные данные. C++ console applications run from the command line in a console window and can display text output only. Дополнительные сведения см. в разделе Создание калькулятора консоли в C++. For more information, see Create a console calculator in C++.

Собственные клиентские приложения для настольных систем Native desktop client applications

Собственное клиентское приложение для настольных систем — это оконное приложение c или C++, которое использует исходные интерфейсы API для Windows c или COM для доступа к операционной системе. A native desktop client application is a C or C++ windowed application that uses the original native Windows C APIs or Component Object Model (COM) APIs to access the operating system. Эти интерфейсы API написаны в основном на языке C. Существует несколько способов создания собственного классического приложения: вы можете программировать напрямую с помощью API-интерфейсов Win32, используя цикл сообщений в стиле C, который обрабатывает события операционной системы. Those APIs are themselves written mostly in C. There’s more than one way to create a native desktop app: You can program using the Win32 APIs directly, using a C-style message loop that processes operating system events. Или можно программировать с помощью Microsoft Foundation Classes (MFC), объектно-ориентированной библиотеки C++, которая заключает в оболочку Win32. Or, you can program using Microsoft Foundation Classes (MFC), a lightly object-oriented C++ library that wraps Win32. Ни один из подходов не считается «современным» по сравнению с универсальная платформа Windows (UWP), но оба они все еще полностью поддерживаются и миллионы строк кода работают в мире уже сегодня. Neither approach is considered «modern» compared to the Universal Windows Platform (UWP), but both are still fully supported and have millions of lines of code running in the world today. Приложение Win32, выполняемое в окне, требует, чтобы разработчик работал явно с сообщениями Windows внутри функции процедуры Windows. A Win32 application that runs in a window requires the developer to work explicitly with Windows messages inside a Windows procedure function. Несмотря на имя, приложение Win32 можно скомпилировать 32 как 64-разрядный (x86) или 64-разрядный (x64) двоичный файл. Despite the name, a Win32 application can be compiled as a 32-bit (x86) or 64-bit (x64) binary. В интегрированной среде разработки Visual Studio термины x86 и Win32 являются синонимами. In the Visual Studio IDE, the terms x86 and Win32 are synonymous.

Чтобы приступить к работе с традиционным программированием на языке Windows C++, см. статью Начало работы с Win32 и C++. To get started with traditional Windows C++ programming, see Get Started with Win32 and C++. Когда вы получите представление об использовании Win32, будет проще изучить классическое приложение MFC. After you gain some understanding of Win32, it will be easier to learn about MFC Desktop Applications. Пример традиционного классического приложения C++, использующего сложную графику, см. в разделе Hilo: Разработка приложений c++ для Windows. For an example of a traditional C++ desktop application that uses sophisticated graphics, see Hilo: Developing C++ Applications for Windows.

C++ или .NET? C++ or .NET?

Как правило, программирование .NET в C# менее сложное, менее подверженное ошибкам и имеет более современный объектно-ориентированный API, чем Win32 или MFC. In general, .NET programming in C# is less complex, less error-prone, and has a more modern object-oriented API than Win32 or MFC. В большинстве случаев его производительность больше, чем достаточно. In most cases, its performance is more than adequate. .NET использует Windows Presentation Foundation (WPF) для расширенной графики, и вы можете использовать как Win32, так и современный среда выполнения Windows API. .NET features the Windows Presentation Foundation (WPF) for rich graphics, and you can consume both Win32 and the modern Windows Runtime API. В качестве общего правила рекомендуется использовать C++ для классических приложений, когда требуется: As a general rule, we recommend using C++ for desktop applications when you require:

  • точный контроль использования памяти precise control over memory usage
  • важнейшим приоритетом экономичность при потреблении энергии the utmost economy in power consumption
  • Использование GPU для общих вычислений usage of the GPU for general computing
  • доступ к DirectX access to DirectX
  • интенсивное использование стандартных библиотек C++ heavy usage of standard C++ libraries
Читайте также:  Prolog ide mac os

Также можно сочетать мощь и эффективность C++ с программированием на .NET. It’s also possible to combine the power and efficiency of C++ with .NET programming. Вы можете создать пользовательский интерфейс на C# и использовать C++/CLI, чтобы позволить приложению использовать собственные библиотеки C++. You can create a user interface in C# and use C++/CLI to enable the application to consume native C++ libraries. Дополнительные сведения см. в разделе программирование .NET с помощью C++/CLI. For more information, see .NET Programming with C++/CLI.

COM-компоненты COM Components

Модель COM — это спецификация, которая позволяет программам, написанным на разных языках, взаимодействовать друг с другом. The Component Object Model (COM) is a specification that enables programs written in different languages to communicate with one another. Многие компоненты Windows реализуются как COM-объекты и следуют стандартным правилам COM для создания объектов, обнаружения интерфейсов и уничтожения объектов. Many Windows components are implemented as COM objects and follow standard COM rules for object creation, interface discovery, and object destruction. Использование объектов COM из классических приложений C++ относительно просто, но написание собственного COM-объекта является более сложным. Using COM objects from C++ desktop applications is relatively straightforward, but writing your own COM object is more advanced. Библиотека активных шаблонов (ATL) предоставляет макросы и вспомогательные функции, УПРОЩАЮЩИЕ разработку com. The Active Template Library (ATL) provides macros and helper functions that simplify COM development. Дополнительные сведения см. в разделе компоненты ATL com Desktop. For more information, see ATL COM desktop components.

Приложения универсальной платформы Windows Universal Windows Platform apps

Универсальная платформа Windows (UWP) — это современный API Windows. The Universal Windows Platform (UWP) is the modern Windows API. Приложения UWP работают на любом устройстве Windows 10, используют XAML для пользовательского интерфейса и полностью поддерживают касание. UWP apps run on any Windows 10 device, use XAML for the user-interface, and are fully touch-enabled. Дополнительные сведения об универсальномконтроллере платформы Windows см. в статье что такое приложение универсальная платформа Windows (UWP) . For more information about UWP, see What’s a Universal Windows Platform (UWP) app? and Guide to Windows Universal Apps.

Исходная поддержка C++ для UWP состояла из (1) C++/CX, диалекта C++ с расширениями синтаксиса или (2) библиотеки среда выполнения Windows (WRL), основанной на стандартном C++ и COM. The original C++ support for UWP consisted of (1) C++/CX, a dialect of C++ with syntax extensions, or (2) the Windows Runtime Library (WRL), which is based on standard C++ and COM. C++/CX и WRL по-прежнему поддерживаются. Both C++/CX and WRL are still supported. Для новых проектов рекомендуется использовать c++/WinRT, который полностью основан на стандартном c++ и обеспечивает более высокую производительность. For new projects, we recommend C++/WinRT, which is entirely based on standard C++ and provides faster performance.

Мост для классических приложений Desktop Bridge

В Windows 10 можно упаковать существующее классическое приложение или COM-объект в качестве приложения UWP и добавить функции UWP, такие как сенсорный ввод, или вызвать API из современного набора API Windows. In Windows 10, you can package your existing desktop application or COM object as a UWP app, and add UWP features such as touch, or call APIs from the modern Windows API set. Можно также добавить приложение UWP в решение для настольных систем в Visual Studio и упаковать их в один пакет и использовать интерфейсы API Windows для обмена данными между ними. You can also add a UWP app to a desktop solution in Visual Studio, and package them together in a single package and use Windows APIs to communicate between them.

Visual Studio 2017 версии 15,4 и более поздних версий позволяет создать проект пакета приложений Windows, чтобы значительно упростить работу по упаковке существующего настольного приложения. Visual Studio 2017 version 15.4 and later lets you create a Windows Application Package Project to greatly simplify the work of packaging your existing desktop application. К вызовам реестра или API-интерфейсам, которые может использовать настольное приложение, применяются некоторые ограничения. A few restrictions apply to the registry calls or APIs your desktop application can use. Однако во многих случаях можно создать альтернативные пути кода для обеспечения аналогичной функциональности при выполнении в пакете приложения. However, in many cases you can create alternate code paths to achieve similar functionality while running in an app package. Дополнительные сведения см. в статье Мост для классических приложений. For more information, see Desktop Bridge.

Игры Games

Игры DirectX могут работать на компьютере или Xbox. DirectX games can run on the PC or Xbox. Дополнительные сведения см. в статье DirectX Graphics и игровыеустройства. For more information, see DirectX Graphics and Gaming.

Читайте также:  Backup активации windows 10

Клиенты базы данных SQL Server SQL Server database clients

Для доступа к базам данных SQL Server из машинного кода используйте ODBC или OLE DB. To access SQL Server databases from native code, use ODBC or OLE DB. Дополнительные сведения см. в разделе SQL Server Native Client. For more information, see SQL Server Native Client.

Драйверы устройств Windows Windows device drivers

Драйверы — это низкоуровневые компоненты, которые делают данные из аппаратных устройств доступными для приложений и других компонентов операционной системы. Drivers are low-level components that make data from hardware devices accessible to applications and other operating system components. Дополнительные сведения см. в разделе Windows Driver Kit (WDK). For more information, see Windows Driver Kit (WDK).

Службы Windows Windows services

Служба Windows — это программа, которая может выполняться в фоновом режиме с небольшим или без участия пользователя. A Windows service is a program that can run in the background with little or no user interaction. Эти программы называются демоны на системах UNIX. These programs are called daemons on UNIX systems. Дополнительные сведения см. в разделе Службы. For more information, see Services.

Пакеты SDK, библиотеки и файлы заголовков SDKs, libraries, and header files

Visual Studio включает в себя библиотеку времени выполнения C (CRT), стандартную библиотеку C++ и другие библиотеки, относящиеся к Microsoft. Visual Studio includes the C Runtime Library (CRT), the C++ Standard Library, and other Microsoft-specific libraries. Большинство папок включения, содержащих файлы заголовков для этих библиотек, находятся в каталоге установки Visual Studio в папке \ВК Most of the include folders that contain header files for these libraries are located in the Visual Studio installation directory under the \VC\ folder. Файлы заголовков Windows и CRT находятся в папке установки Windows SDK. The Windows and CRT header files are found in the Windows SDK installation folder.

Диспетчер пакетов Vcpkg позволяет легко устанавливать сотни сторонних библиотек с открытым исходным кодом для Windows. The Vcpkg package manager lets you conveniently install hundreds of third-party open-source libraries for Windows.

К библиотекам Майкрософт относятся: The Microsoft libraries include:

Microsoft Foundation Classes (MFC): объектно-ориентированная платформа для создания традиционных программ Windows (в частности, корпоративных приложений), со сложным пользовательским интерфейсом, включающим кнопки, поля списков, древовидные структуры и другие элементы управления. Microsoft Foundation Classes (MFC): An object-oriented framework for creating traditional Windows programs—especially enterprise applications—that have rich user interfaces that feature buttons, list boxes, tree views, and other controls. Дополнительные сведения см. в разделе MFC Desktop Applications. For more information, see MFC Desktop Applications.

Active Template Library (ATL): многофункциональная вспомогательная библиотека для создания компонентов COM. Active Template Library (ATL): A powerful helper library for creating COM components. Для получения дополнительной информации см. ATL COM Desktop Components. For more information, see ATL COM Desktop Components.

C++ AMP (C++ Accelerated Massive Parallelism): библиотека, предоставляющая возможность выполнять высокопроизводительные вычислительные задачи общего характера в графическом процессоре. C++ AMP (C++ Accelerated Massive Parallelism): A library that enables high-performance general computational work on the GPU. Для получения дополнительной информации см. C++ AMP (C++ Accelerated Massive Parallelism). For more information, see C++ AMP (C++ Accelerated Massive Parallelism).

Среда выполнения с параллелизмом: библиотека, упрощающая параллельное и асинхронное программирование для мультиядерных и многоядерных устройств. Concurrency Runtime: A library that simplifies the work of parallel and asynchronous programming for multicore and many-core devices. Для получения дополнительной информации см. Concurrency Runtime. For more information, see Concurrency Runtime.

Для многих сценариев программирования Windows также требуется пакет Windows SDK, в который входят файлы заголовков, обеспечивающие доступ к компонентам операционной системы Windows. Many Windows programming scenarios also require the Windows SDK, which includes the header files that enable access to the Windows operating system components. По умолчанию Visual Studio устанавливает Windows SDK как компонент рабочей нагрузки C++ для настольных систем, который позволяет разрабатывать универсальные приложения для Windows. By default, Visual Studio installs the Windows SDK as a component of the C++ Desktop workload, which enables development of Universal Windows apps. Для разработки приложений UWP требуется версия Windows 10 Windows SDK. To develop UWP apps, you need the Windows 10 version of the Windows SDK. Дополнительные сведения см. в разделе пакет SDK для Windows 10. For information, see Windows 10 SDK. (Дополнительные сведения о пакетах Windows SDK для более ранних версий Windows см. в Windows SDK архиве). (For more information about the Windows SDKs for earlier versions of Windows, see the Windows SDK archive).

Программные файлы (x86) \Windows Kit — это расположение по умолчанию для всех версий Windows SDK, которые вы установили. Program Files (x86)\Windows Kits is the default location for all versions of the Windows SDK that you’ve installed.

Другие платформы, например Xbox и Azure, обладают собственными пакетами SDK, которые вам, возможно, потребуется установить. Other platforms such as Xbox and Azure have their own SDKs that you may have to install. Дополнительные сведения см. в Центре разработчика DirectX и в Центре разработчика Azure. For more information, see the DirectX Developer Center and the Azure Developer Center.

средства разработки: Development Tools

Visual Studio включает многофункциональный отладчик для машинного кода, средства статического анализа, графические средства отладки, полнофункциональный редактор кода, поддержку модульных тестов, а также множество других средств и служебных программ. Visual Studio includes a powerful debugger for native code, static analysis tools, graphics debugging tools, a full-featured code editor, support for unit tests, and many other tools and utilities. Дополнительные сведения см. в статьях Приступая к разработке с помощью Visual Studioи Общие сведения о разработке C++ в Visual Studio. For more information, see Get started developing with Visual Studio, and Overview of C++ development in Visual Studio.

Оцените статью