С взаимодействие процессов windows

Содержание
  1. Процессы в Windows Страница 14. Взаимодействие между процессами
  2. Взаимодействие между процессами
  3. Разделяемая память
  4. Прочие механизмы (сокеты, pipe)
  5. ГЛАВА 11 Взаимодействие между процессами
  6. Читайте также
  7. Глава 3 Управление процессами
  8. Взаимодействие между процессами
  9. Взаимодействие с прикладными процессами
  10. Распределение клиентских соединений между дочерними процессами
  11. Распределение клиентских соединений между дочерними процессами
  12. ГЛАВА 7. УПРАВЛЕНИЕ ПРОЦЕССАМИ
  13. Глава 26 Управление процессами
  14. 16.18.3 Взаимодействие между X.400 и почтой Интернета
  15. Взаимодействие между специалистами
  16. Взаимные исключения Posix между процессами
  17. Взаимодействие с процессами в рамках платформы .NET
  18. Межпроцессное взаимодействие (IPC) Interprocess communication (IPC)
  19. Услуги для приложений App services
  20. COM COM
  21. Файловая система Filesystem
  22. броадфилесистемакцесс BroadFileSystemAccess
  23. публишеркачефолдер PublisherCacheFolder
  24. шаредакцесссторажеманажер SharedAccessStorageManager
  25. фуллтрустпроцесслаунчер FullTrustProcessLauncher
  26. LaunchUriForResultsAsync LaunchUriForResultsAsync
  27. Замыкание на себя Loopback
  28. Каналы Pipes
  29. Реестр Registry
  30. RPC RPC
  31. Общая память Shared Memory

Процессы в Windows
Страница 14. Взаимодействие между процессами

Взаимодействие между процессами

Потоки одного процесса не имеют доступа к адресному пространству другого процесса. Однако существуют механизмы для передачи данных между процессами.

Разделяемая память

Как уже говорилось, система виртуальной памяти в Win32 использует файл подкачки — swap file (или файл размещения — page file), имея возможность преобразования страниц оперативной памяти в страницы файла на диске и наоборот. Система может проецировать на оперативную память не только файл размещения, но и любой другой файл. Приложения могут использовать эту возможность. Это может использоваться для обеспечения более быстрого доступа к файлам, а также для совместного использования памяти.

Такие объекты называются проекциями файлов (на оперативную память) (file-mapping object). Для создания проекции файла сначала вызывается функция CreateFileMapping(). Ей передается дескриптор (уже открытого) файла или указывается, что нужно использовать page file операционной системы. Кроме этого, в параметрах ей передается флаг защиты, максимальный размер проекции и имя объекта. Затем вызывается функция MapViewOfFile(). Она отображает представление файла (view of a file) в адресное пространство процесса. По окончании работы вызывается функция UnmapViewOfFile(). Она освобождает память и записывает данные в файл (если это не файл подкачки). Чтобы записать данные на диск немедленно, используется функция FlushViewOfFile(). Проекция файла, как и другие объекты ядра, может использоваться другими процессами через наследование, дублирование дескриптора или по имени.

Пример 11. Вот пример программы, которая создает проекцию в page file и записывает в нее данные.

Прочие механизмы (сокеты, pipe)

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

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

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

Сокет — это абстрактный объект для обозначения одного из концов сетевого соединения, в том числе и через Internet. Сокеты Windows бывают двух типов: сокеты дейтаграмм и сокеты потоков. Интерфейс Windows Sockets (WinSock) основан на BSD-версии сокетов, но в нем имеются также расширения, специфические для Windows.

ГЛАВА 11 Взаимодействие между процессами

Взаимодействие между процессами

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

Ниже вы ознакомитесь с последовательным межпроцессным взаимодействием (Interprocess Communication, IPC)[30], в котором используются объекты, подобные файлам. Двумя основными механизмами Windows, реализующими IPC, являются анонимные и именованные каналы, доступ к которым осуществляется с помощью уже известных вам функций ReadFile и WriteFile. Простые анонимные каналы являются символьными и работают в полудуплексном режиме. Эти свойства делают их удобными для перенаправления выходных данных одной программы на вход другой, как это обычно делается в UNIX. В первом примере демонстрируется, как реализовать эту возможность.

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

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

Читайте также

Глава 3 Управление процессами

Глава 3 Управление процессами Процесс — одно из самых важных абстрактных понятий в Unix-подобных операционных системах[8]. По сути, процесс — это программа, т.е. объектный код, хранящийся на каком-либо носителе информации и находящийся в состоянии исполнения. Однако

Взаимодействие между процессами

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

Взаимодействие с прикладными процессами

Взаимодействие с прикладными процессами Рассмотренный ранее программный интерфейс TLI полностью реализует функциональность TPI. Легко заметить соответствие между отдельными функциями TLI и примитивами TPI, приведенными в табл. 6.10. Схема вызова функций TPI и обмена

Читайте также:  Где найти windows word

Распределение клиентских соединений между дочерними процессами

Распределение клиентских соединений между дочерними процессами Следующей темой обсуждения является распределение клиентских соединений между свободными дочерними процессами, блокированными в вызове функции accept. Для получения этой информации мы модифицируем функцию

Распределение клиентских соединений между дочерними процессами

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

ГЛАВА 7. УПРАВЛЕНИЕ ПРОЦЕССАМИ

ГЛАВА 7. УПРАВЛЕНИЕ ПРОЦЕССАМИ В предыдущей главе был рассмотрен контекст процесса и описаны алгоритмы для работы с ним; в данной главе речь пойдет об использовании и реализации системных функций, управляющих контекстом процесса. Системная функция fork создает новый

Глава 26 Управление процессами

Глава 26 Управление процессами Данная глава посвящена процессам операционной системы Linux. Поскольку администрирование операционной системы в конечном счете сводится к управлению процессами, вполне логично выделить отдельную главу на описание столь важной темы.Каждый

16.18.3 Взаимодействие между X.400 и почтой Интернета

16.18.3 Взаимодействие между X.400 и почтой Интернета Поскольку оба эти протокола обеспечивают службы «сохранить-и-переслать» (store-and-forward), между ними возможно взаимодействие через специальные шлюзы. Несколько документов RFC специфицируют отображение почтовых сообщений

Взаимодействие между специалистами

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

Взаимные исключения Posix между процессами

Взаимные исключения Posix между процессами Функция main первой программы использует взаимное исключение Posix для обеспечения синхронизации. Текст ее приведен в листинге А.32.Листинг А.32. Функция main для измерения быстродействия взаимных исключений между

Взаимодействие с процессами в рамках платформы .NET

Взаимодействие с процессами в рамках платформы .NET Хотя процессы и потоки сами по себе не являются чем-то новым, способы взаимодействия с этими примитивами в рамках платформы .NET существенно изменены (к лучшему). Чтобы успешно пройти путь к пониманию приемов построения

Межпроцессное взаимодействие (IPC) Interprocess communication (IPC)

В этом разделе объясняются различные способы выполнения межпроцессного взаимодействия (IPC) между приложениями универсальная платформа Windows (UWP) и приложениями Win32. This topic explains various ways to perform interprocess communication (IPC) between Universal Windows Platform (UWP) applications and Win32 applications.

Услуги для приложений App services

Службы приложений позволяют приложениям предоставлять службы, которые принимают и возвращают контейнеры свойств примитивов (наборзначений) в фоновом режиме. App services enable applications to expose services that accept and return property bags of primitives (ValueSet) in the background. Объекты с широкими возможностями могут передаваться при сериализации. Rich objects can be passed if they’re serialized.

Службы приложений могут выполнять как фоновые задачи , так и процессы в рамках приложения переднего плана. App services can run either out of process as a background task, or in process within the foreground application.

Службы приложений лучше использовать для совместного использования небольших объемов данных, где задержка почти в реальном времени не требуется. App services are best used for sharing small amounts of data where near real-time latency isn’t required.

COM COM

Com — это распределенная объектно-ориентированная система для создания двоичных программных компонентов, которые могут взаимодействовать и взаимодействовать. COM is a distributed object-oriented system for creating binary software components that can interact and communicate. Как разработчик вы используете COM для создания многократно используемых программных компонентов и слоев автоматизации для приложения. As a developer, you use COM to create reusable software components and automation layers for an application. COM-компоненты могут быть в процессе или вне процесса и могут взаимодействовать через клиентскую и серверную модель. COM components can be in process or out of process, and they can communicate via a client and server model. Необработанные серверы COM долго использовались в качестве средства для обмена данными между объектами. Out-of-process COM servers have long been used as a means for inter-object communication.

Упакованные приложения с возможностью рунфуллтруст могут регистрировать необработанные COM-серверы для IPC с помощью манифеста пакета. Packaged applications with the runFullTrust capability can register out-of-process COM servers for IPC via the package manifest. Это называется упакованным com. This is known as Packaged COM.

Файловая система Filesystem

броадфилесистемакцесс BroadFileSystemAccess

Упакованные приложения могут выполнять IPC, используя обширную файловую систему, объявляя возможность ограничения броадфилесистемакцесс . Packaged applications can perform IPC using the broad filesystem by declaring the broadFileSystemAccess restricted capability. Эта возможность предоставляет интерфейсам Windows. Storage API и API ксксксфромапп Win32 доступ к широкой файловой системе. This capability grants Windows.Storage APIs and xxxFromApp Win32 APIs access to the broad filesystem.

По умолчанию IPC через файловую систему для упакованных приложений ограничена другими механизмами, описанными в этом разделе. By default, IPC via the filesystem for packaged applications is restricted to the other mechanisms described in this section.

публишеркачефолдер PublisherCacheFolder

Публишеркачефолдер позволяет упакованным приложениям объявлять папки в своем манифесте, которые могут использоваться совместно с другими пакетами одним и тем же издателем. The PublisherCacheFolder enables packaged applications to declare folders in their manifest that can be shared with other packages by the same publisher.

Папка общего хранилища имеет следующие требования и ограничения. The shared storage folder has the following requirements and restrictions:

  • Данные в папке общего хранилища не архивируются и не перемещаются. Data in the shared storage folder is not backed up or roamed.
  • Пользователь может очистить содержимое папки общего хранилища. The user can clear the contents of the shared storage folder.
  • Нельзя использовать папку общего хранилища для обмена данными между приложениями разных издателей. You can’t use the shared storage folder to share data among applications from different publishers.
  • Нельзя использовать папку общего хранилища для обмена данными между разными пользователями. You can’t use the shared storage folder to share data among different users.
  • В папке общего хранилища нет управления версиями. The shared storage folder doesn’t have version management.
Читайте также:  How to break car windows

Если вы публикуете несколько приложений и ищете простой механизм обмена данными между ними, Публишеркачефолдер является простым параметром на основе файловой системы. If you publish multiple applications and you’re looking for a simple mechanism to share data between them, then the PublisherCacheFolder is a simple filesystem-based option.

шаредакцесссторажеманажер SharedAccessStorageManager

Шаредакцесссторажеманажер используется совместно со службами приложений, активацией протоколов (например, лаунчурифорресултсасинк) и т. д., чтобы совместно использовать сторажефилес через маркеры. SharedAccessStorageManager is used in conjunction with App services, protocol activations (for example, LaunchUriForResultsAsync), etc., to share StorageFiles via tokens.

фуллтрустпроцесслаунчер FullTrustProcessLauncher

Благодаря возможности рунфуллтруст Упакованные приложения могут запускать процессы с полным доверием в одном пакете. With the runFullTrust capability, packaged applications can launch full trust processes within the same package.

В сценариях, где ограничения пакета являются косвенными, или отсутствуют параметры IPC, приложение может использовать процесс полного доверия в качестве прокси-сервера для взаимодействия с системой, а затем IPC с полным уровнем доверия через службы приложений или другой хорошо поддерживаемый механизм IPC. For scenarios where package restrictions are a burden, or IPC options are lacking, an application could use a full trust process as a proxy to interface with the system, and then IPC with the full trust process itself via App services or some other well supported IPC mechanism.

LaunchUriForResultsAsync LaunchUriForResultsAsync

Лаунчурифорресултсасинк используется для простого обмена даннымиValueSetс другими упакованными приложениями, реализующими контракт активации протоколфорресултс . LaunchUriForResultsAsync is used for simple (ValueSet) data exchange with other packaged applications that implement the ProtocolForResults activation contract. В отличие от служб приложений, которые обычно выполняются в фоновом режиме, целевое приложение запускается на переднем плане. Unlike App services, which typically run in the background, the target application is launched in the foreground.

Для совместного использования файлов можно передавать маркеры шаредсторажеакцессманажер в приложение через его значение. Files can be shared by passing SharedStorageAccessManager tokens to the application via the ValueSet.

Замыкание на себя Loopback

Замыкание на себя — это процесс связи с сетевым сервером, который прослушивает localhost (адрес замыкания на себя). Loopback is the process of communicating with a network server listening on localhost (the loopback address).

Для обеспечения безопасности и сетевой изоляции подключения по обратной связи для IPC по умолчанию блокируются для упакованных приложений. To maintain security and network isolation, loopback connections for IPC are blocked by default for packaged applications. Можно включить замыкание соединений между доверенным упакованным приложением с помощью возможностей и свойств манифеста. You can enable loopback connections among trusted packaged application using capabilities and manifest properties.

  • Все Упакованные приложения, участвующие в подключениях замыкания на себя, должны объявлять privateNetworkClientServer возможности в манифестах пакетов. All packaged applications participating in loopback connections will need to declare the privateNetworkClientServer capability in their package manifests.
  • Два упакованных приложения могут обмениваться данными через замыкание на себя, объявляя лупбаккакцессрулес в манифестах пакетов. Two packaged applications can communicate via loopback by declaring LoopbackAccessRules within their package manifests.
    • Каждое приложение должно перечислить в лупбаккакцессрулес. Each application must list the other in its LoopbackAccessRules. Клиент объявляет правило «out» для сервера, а сервер объявляет правила «in» для поддерживаемых клиентов. The client declares an «out» Rule for the server, and the server declares «in» Rules for its supported clients.

Имя семейства пакетов, необходимое для распознавания приложения в этих правилах, можно найти с помощью редактора манифеста пакета в Visual Studio во время разработки, в центре партнеров для приложений, опубликованных с помощью Microsoft Store, или с помощью команды PowerShell Get-AppxPackage для уже установленных приложений. The package family name required to identify an application in these Rules can be found via the package manifest editor in Visual Studio during development time, via Partner Center for applications published through the Microsoft Store, or via the Get-AppxPackage PowerShell command for applications that are already installed.

Неупакованные приложения и службы не имеют удостоверения пакета, поэтому их нельзя объявлять в лупбаккакцессрулес. Unpackaged applications and services don’t have package identity, so they can’t be declared in LoopbackAccessRules. Вы можете настроить упакованное приложение для подключения через замыкание с помощью неупакованных приложений и служб с помощью CheckNetIsolation.exe, однако это возможно только в сценариях загружать неопубликованные или отладки, где у вас есть локальный доступ к компьютеру и у вас есть права администратора. You can configure a packaged application to connect via loopback with unpackaged applications and services via CheckNetIsolation.exe, however this is only possible for sideload or debugging scenarios where you have local access to the machine, and you have administrator privileges.

  • Все Упакованные приложения, участвующие в подключениях замыкания на себя, должны объявлять privateNetworkClientServer возможности в манифестах пакетов. All packaged applications participating in loopback connections need to declare the privateNetworkClientServer capability in their package manifests.
  • Если упакованное приложение подключается к неупакованному приложению или службе, выполните команду, CheckNetIsolation.exe LoopbackExempt -a -n=

чтобы добавить исключение замыкания на себя для упакованного приложения. If a packaged application is connecting to an unpackaged application or service, run CheckNetIsolation.exe LoopbackExempt -a -n=

to add a loopback exemption for the packaged application.
Если неупакованное приложение или служба подключается к упакованному приложению, выполните команду, CheckNetIsolation.exe LoopbackExempt -is -n=

чтобы позволить упакованному приложению принимать входящие подключения с замыканием на себя. If an unpackaged application or service is connecting to a packaged application, run CheckNetIsolation.exe LoopbackExempt -is -n=

to enable the packaged application to receive inbound loopback connections.

  • CheckNetIsolation.exe должны выполняться постоянно, пока упакованное приложение прослушивает подключения. CheckNetIsolation.exe must be running continuously while the packaged application is listening for connections.
  • Этот -is флаг появился в Windows 10 версии 1607 (10,0; Сборка 14393). The -is flag was introduced in Windows 10, version 1607 (10.0; Build 14393).
Читайте также:  Аналоги руфуса для линукс

Имя семейства пакетов, необходимое для -n флага CheckNetIsolation.exe , можно найти с помощью редактора манифеста пакета в Visual Studio во время разработки, через Центр партнеров для приложений, опубликованных с помощью Microsoft Store, или с помощью команды PowerShell Get-AppxPackage для уже установленных приложений. The package family name required for the -n flag of CheckNetIsolation.exe can be found via the package manifest editor in Visual Studio during development time, via Partner Center for applications published through the Microsoft Store, or via the Get-AppxPackage PowerShell command for applications that are already installed.

Каналы Pipes

Каналы обеспечивают простое взаимодействие между сервером канала и одним или несколькими клиентами канала. Pipes enable simple communication between a pipe server and one or more pipe clients.

Анонимные каналы и именованные каналы поддерживают следующие ограничения: Anonymous pipes and named pipes are supported with the following constraints:

  • По умолчанию именованные каналы в упакованных приложениях поддерживаются только между процессами в одном пакете, если только процесс не имеет полного доверия. By default, named pipes in packaged applications are supported only between processes within the same package, unless a process is full trust.
  • Именованные каналы можно совместно использовать в пакетах, следуя рекомендациям по предоставлению общего доступа к именованным объектам. Named pipes can be shared across packages following the guidelines for sharing named objects.
  • Именованные каналы в упакованных приложениях должны использовать синтаксис \\.\pipe\LOCAL\ для имени канала. Named pipes in packaged applications must use the syntax \\.\pipe\LOCAL\ for the pipe name.

Реестр Registry

Использование реестра для IPC, как правило, не рекомендуется, но поддерживается для существующего кода. Registry usage for IPC is generally discouraged, but it is supported for existing code. Упакованные приложения имеют доступ только к тем разделам реестра, для доступа к которым у них есть разрешение. Packaged applications can access only registry keys that they have permission to access.

Классические приложения, Упакованные в MSIX, используют виртуализацию реестра , так что глобальные записи реестра содержатся в частном кусте в пакете MSIX. Desktop applications packaged as MSIX leverage registry virtualization such that global registry writes are contained to a private hive within the MSIX package. Это обеспечивает совместимость исходного кода при минимизации влияния на глобальные реестры и может использоваться для IPC между процессами в одном пакете. This enables source code compatibility while minimizing global registry impact, and can be used for IPC between processes in the same package. Если необходимо использовать реестр, то эта модель является предпочтительной, а управление глобальным реестром — с помощью. If you must use the registry, this model is preferred versus manipulating the global registry.

RPC RPC

RPC можно использовать для подключения упакованного приложения к КОНЕЧНОЙ точке RPC Win32 при условии, что Пакетное приложение имеет правильные возможности для сопоставления ACL в КОНЕЧНОЙ точке RPC. RPC can be used to connect a packaged application to a Win32 RPC endpoint, provided that the packaged application has the correct capabilities to match the ACLs on the RPC endpoint.

Пользовательские возможности позволяют производителям оборудования и независимым поставщикам программно определять произвольные возможности, предоставлять им конечные точки RPC, а затем предоставить эти возможности полномочным клиентским приложениям. Custom capabilities enable OEMs and IHVs to define arbitrary capabilities, ACL their RPC endpoints with them, and then grant those capabilities to authorized client applications. Полный пример приложения см. в примере кустомкапабилити . For a full sample application, see the CustomCapability sample.

Конечные точки RPC также могут быть доступен для конкретных упакованных приложений, чтобы ограничить доступ к конечной точке только этими приложениями без необходимости управления дополнительными возможностями. RPC endpoints can also be ACLed to specific packaged applications to limit access to the endpoint to just those applications without requiring the management overhead of custom capabilities. Вы можете использовать API деривеаппконтаинерсидфромаппконтаинернаме для получения идентификатора безопасности из имени семейства пакетов, а затем в списке ACL КОНЕЧНОЙ точки RPC с ИД безопасности, как показано в примере кустомкапабилити . You can use the DeriveAppContainerSidFromAppContainerName API to derive a SID from a package family name, and then ACL the RPC endpoint with the SID as shown in the CustomCapability sample.

Общая память Shared Memory

Сопоставление файлов можно использовать для совместного использования файла или памяти между двумя или более процессами со следующими ограничениями: File mapping can be used to share a file or memory between two or more processes with the following constraints:

  • По умолчанию сопоставления файлов в упакованных приложениях поддерживаются только между процессами в одном пакете, если только процесс не имеет полного доверия. By default, file mappings in packaged applications are supported only between processes within the same package, unless a process is full trust.
  • Сопоставления файлов можно совместно использовать в пакетах, следуя рекомендациям по предоставлению общего доступа к именованным объектам. File mappings can be shared across packages following the guidelines for sharing named objects.

Для эффективного совместного использования больших объемов данных и управления ими рекомендуется использовать общую память. Shared memory is recommended for efficiently sharing and manipulating large amounts of data.

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