Windows security center api

Provide feedback

Saved searches

Use saved searches to filter your results more quickly

Sign up

Appearance settings

This post is an introduction to accessing the Defender Security Center API in PowerShell using interactive authentication. It is the basis for building tools and scripts to enhance day-to-day productivity that I’ll explore in future posts.

Background

The Defender Security API is a gold mine as it can provide access to key MDE features including:

  • Device information
  • Alerts
  • MDE Configuration
  • Run Advanced Hunting queries
  • Initiate Live Response and manage Library scripts
  • Initiate Scans and Isolation

I struggled to find examples of using the API interactively. Microsoft articles have examples using a client secret, which is fine for automation, but not ideal for interactive use. The following steps demonstrate interactive access to the API.

Azure App

The first step is to create an Azure Application to control the permissions available and limit admin access to the API.

Create the App

In the Azure Portal, go to the App Registrations blade and select New Registration

Enter a name for the app e.g. DefenderSecurityAPI (visible in MFA challenges and sign-in logs)

Leave the Supported Account Types on the default Single Tenant

Do not configure a Redirect URL at this stage.

Register App

Select Register to create the app.

You are presented with the App Overview page. Select Add a redirect URI, then Add a Platform

Select Mobile and Desktop applications

Enable the check box next to the nativeclient URL and also add local host in the Custom Redirect URIs:

  • https://login.microsoftonline.com/common/oauth2/nativeclient
  • http://localhost

Select Configure to save the redirect URLs

Next select API Permissions in the left pane, then Add a permission

Select the APIs my organization uses tab and then use the search box to find WindowsDefenderATP

Select Delegated Permissions

API Permissions

Expand the categories and select the individual permissions required
e.g. Alert.Read, AdvancedQuery.Read, Machine.Read, Machine.Scan, Machine.RestrictExecution, Machine.Isolate, Machine.CollectForensics, Machine.Offboard, Software.Read

Once you’ve finished adding permissions, select Grant admin consent for tenant_name

Delegated permissions mean both the user and the app must have the required permission. The app won’t elevate privileges.

Restrict Access to the app

To restrict who can use the app, we need to go to the Enterprise applications blade, either using the Azure Portal search box, or by navigating to the root of Azure AD and selecting it in the left pane.

Select the app in the list to open its Overview page, then select Properties in the left pane.
Change Assignment Required to Yes and then Save
Select Users and groups in the left pane and then select Add user/group
Select an existing group that will be allowed to authenticate using the App.

NOTE: Although we consented to API permissions in the previous step, it was only delegated permissions. The group members must also be granted permission to read or change Security assets e.g. through a built-in Role, such as Security Administrator.

Select the Overview link in the left pane and copy the Application ID as this will be a script variable along with the TenantID.

Authenticate using MSAL.PS

Use the MSAL.PS PowerShell module to authenticate interactively and cache an access token. The important part is to specify a security API scope.

# Pre-req
Install-Module -Name MSAL.PS -MinimumVersion 4.37.0.0

# Replace with your Application and Tenant IDs
$ApplicationID = '446e4714-3226-489e-b602-1515d6822e09'
$TenantID = 'b0530087-fc9a-44e7-ad6f-1b045d56e15d'

# Specify at least one security center API scope
$Scopes = @("https://api.securitycenter.microsoft.com/Machine.Read")

# Authenticate interactively with authorization code flow
$AccessToken = Get-MsalToken -ClientId $ApplicationID -TenantId $TenantID -Scopes $Scopes

If authentication fails with a message “You can’t get there from here”, see the Conditional Access section below.

Call the API

With an access token cached, its straight forward to call the Security Center API using Invoke-Restmethod. The following is a basic example of getting device information:

# Build the authentication header
$AuthenticationHeader = @{
    "Content-Type"  = "application/json"
    "Authorization" = $AccessToken.CreateAuthorizationHeader()
    "ExpiresOn"     = $AccessToken.ExpiresOn.UTCDateTime
}

# Example getting details of an MDE client device
# The deviceID is available on the device details blade in the Security Center portal
$Method = 'Get'
$MachineID = 'c6a833d8a0da6ad439076368d1681e7930c49fef'
$URI = "https://api.securitycenter.microsoft.com/api/machines/$MachineID"

Invoke-RestMethod -Uri $URI -Headers $AuthenticationHeader -Method $Method

Example output:

Device info

Conditional Access

There’s an automatically created Conditional Access policy that must be modified before you can query the API. If authentication fails with the error below, you need to edit the policy.

Conditional Access

The CA policy gets created during Defender for Endpoint setup, when MDE is linked to Intune. Its only visible in the CA Classic view:

Azure Active Directory > Security > Conditional Access > Classic Policies > [Windows Defender ATP] Device Policy

Classic Policy

Don’t delete or disable the policy. It could have undesirable results as indicated in this Microsoft article. Instead, add a group exclusion to the policy for the same group authorised to use the Azure App.

Summary

This article is an introduction to accessing the Defender Security Center API using PowerShell with interactive authentication. Future articles will explore practical use cases.

This article was originally posted on Write-Verbose.com

Solution 1:[1]

Solution 2:[2]

#include <Windows.h>
#include <string>
#include <iostream>
#include <Wscapi.h>
#pragma comment(lib, "Wscapi.lib")
using namespace std;

string printStatus(WSC_SECURITY_PROVIDER_HEALTH status)
{
  switch (status)
  {
  case WSC_SECURITY_PROVIDER_HEALTH_GOOD: return "GOOD";
  case WSC_SECURITY_PROVIDER_HEALTH_NOTMONITORED: return "NOTMONITORED";
  case WSC_SECURITY_PROVIDER_HEALTH_POOR: return "POOR";
  case WSC_SECURITY_PROVIDER_HEALTH_SNOOZE: return "SNOOZE";
  default: return "Status Error";
  }
}

void getHealth()
{
  WSC_SECURITY_PROVIDER_HEALTH health;
  if (S_OK == WscGetSecurityProviderHealth(WSC_SECURITY_PROVIDER_FIREWALL, &health))
    cout << "FIREWALL:          " << printStatus(health) << endl;
  if (S_OK == WscGetSecurityProviderHealth(WSC_SECURITY_PROVIDER_AUTOUPDATE_SETTINGS, &health))
    cout << "AUTOUPDATE:        " << printStatus(health) << endl;
  if (S_OK == WscGetSecurityProviderHealth(WSC_SECURITY_PROVIDER_ANTIVIRUS, &health))
    cout << "ANTIVIRUS:         " << printStatus(health) << endl;
  if (S_OK == WscGetSecurityProviderHealth(WSC_SECURITY_PROVIDER_ANTISPYWARE, &health))
    cout << "ANTISPYWARE:       " << printStatus(health) << endl;
  if (S_OK == WscGetSecurityProviderHealth(WSC_SECURITY_PROVIDER_INTERNET_SETTINGS, &health))
    cout << "INTERNET SETTINGS: " << printStatus(health) << endl;
  if (S_OK == WscGetSecurityProviderHealth(WSC_SECURITY_PROVIDER_USER_ACCOUNT_CONTROL, &health))
    cout << "UAC:               " << printStatus(health) << endl;
  if (S_OK == WscGetSecurityProviderHealth(WSC_SECURITY_PROVIDER_SERVICE, &health))
    cout << "SERVICE:           " << printStatus(health) << endl;
  if (S_OK == WscGetSecurityProviderHealth(WSC_SECURITY_PROVIDER_ALL, &health))
    cout << "ALL:               " << printStatus(health) << endl;

}

void main()
{
  getHealth();
}

Windows Security Center API — это набор инструментов и функций, предоставляемый операционной системой Windows для обеспечения безопасности и защиты вашего компьютера. С помощью этого программного интерфейса разработчики могут получить доступ к различным функциям, таким как проверка активных антивирусных программ, фаервола и обновлений операционной системы.

Использование Windows Security Center API позволяет создавать приложения, которые могут мониторить состояние безопасности компьютера и предупреждать о возможных угрозах. Это особенно полезно для системных администраторов и разработчиков антивирусных программ, которые хотят интегрировать свои продукты с операционной системой и предлагать пользователям более полную защиту.

Основные функции Windows Security Center API:

1. Проверка наличия активных антивирусных программ: API позволяет получить информацию о том, есть ли на компьютере активные антивирусные программы, и определить их состояние (включены или отключены).

2. Проверка наличия и состояния фаервола: С помощью API можно проверить наличие и состояние фаервола на компьютере, а также управлять его настройками.

3. Проверка наличия обновлений операционной системы: API предоставляет информацию о наличии доступных обновлений операционной системы и позволяет управлять процессом их установки.

Использование Windows Security Center API поможет улучшить безопасность вашего компьютера и повысить производительность работающих на нем приложений. Этот программный интерфейс открывает широкие возможности для разработчиков и администраторов, которые стремятся обеспечить надежную защиту и безопасность данных.

Что такое Windows Security Center API?

Windows Security Center API предоставляет доступ к информации о состоянии безопасности компьютера, такой как наличие и состояние антивирусного программного обеспечения, брандмауэра и обновлений операционной системы. С помощью API разработчики могут создавать приложения, которые мониторят и отображают состояние безопасности компьютера или выполняют определенные действия в зависимости от этого состояния.

Windows Security Center API предоставляет также функции для управления настройками безопасности компьютера, такие как включение или отключение определенных функций, проверка обновлений безопасности и создание отчетов о состоянии безопасности. Это делает API полезным инструментом для разработчиков, которые хотят интегрировать функции безопасности Windows в свои приложения или создавать собственные инструменты для управления безопасностью.

Использование Windows Security Center API требует знаний программирования и понимания основных концепций безопасности операционной системы Windows. Однако, благодаря возможностям API, разработчики могут создавать мощные и эффективные инструменты для обеспечения безопасности и защиты компьютеров под управлением Windows.

Интерфейс программирования приложений для обеспечения безопасности

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

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

Примером API для обеспечения безопасности является Windows Security Center API, которое предоставляет функции для взаимодействия с центром безопасности Windows. С помощью этого API разработчики могут получать информацию о статусе антивирусных программ, брандмауэров и других параметров безопасности, а также выполнять действия по их управлению.

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

Преимущества использования API для обеспечения безопасности:
— Удобство взаимодействия с Windows Security Center;
— Автоматизация задач безопасности;
— Возможность интеграции с другими инструментами управления безопасностью;
— Улучшенная защита пользовательских систем.

Основные функции и возможности API

Windows Security Center API предоставляет разработчикам возможность получать информацию о состоянии безопасности и настроек компьютера. Это позволяет разработчикам создавать приложения, которые могут анализировать и обеспечивать безопасность системы Windows.

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

Еще одной важной возможностью API является возможность изменения настроек безопасности компьютера. Разработчики могут использовать API для включения или отключения определенных функций безопасности, изменения настроек паролей или обновления программного обеспечения. Это позволяет приложениям более гибко управлять безопасностью системы Windows и адаптироваться под требования конкретного пользователя или организации.

Кроме того, Windows Security Center API предоставляет возможность отправки уведомлений пользователю о возникших проблемах с безопасностью или предлагает выполнить определенные действия для решения проблемы. Например, приложение может оповестить пользователя о наличии уязвимости в системе или рекомендовать обновление антивирусной программы.

В целом, использование Windows Security Center API позволяет разработчикам создавать более безопасные приложения, а также обеспечивать пользователей системы Windows удобными инструментами для контроля и управления безопасностью своих компьютеров.

Преимущества использования Windows Security Center API

Windows Security Center API предоставляет ряд значительных преимуществ, которые могут быть полезными для разработчиков и пользователями. Вот некоторые из преимуществ использования данного API:

1. Централизованное управление безопасностью

С помощью Windows Security Center API разработчики могут получать информацию о состоянии безопасности операционной системы и всех установленных программ безопасности в одном месте. Это упрощает процесс мониторинга и обеспечения безопасности компьютера.

2. Интеграция с другими программами

Windows Security Center API позволяет разработчикам интегрировать функции безопасности с другими приложениями или сервисами. Например, они могут использовать API для отображения статуса безопасности в пользовательском интерфейсе или для выполнения автоматических действий при обнаружении угроз или нарушений безопасности.

3. Улучшенное пользовательское взаимодействие

Windows Security Center API предоставляет возможность разработчикам создавать удобные пользовательские интерфейсы, которые позволяют пользователям легко просматривать и управлять настройками безопасности. Благодаря этому, пользователи могут более эффективно контролировать и обеспечивать безопасность своего компьютера.

4. Централизованное обновление безопасности

Разработчики могут использовать Windows Security Center API для обновления безопасности операционной системы и установленных программ безопасности. Это позволяет повысить уровень защиты компьютера и предотвратить уязвимости, связанные с устаревшей версией программы безопасности.

Это лишь несколько преимуществ использования Windows Security Center API. Это мощный инструмент, который помогает улучшить безопасность компьютера и обеспечить более удобное управление безопасностью.

Примеры использования API для обеспечения безопасности в Windows

Windows Security Center API предоставляет разработчикам возможность взаимодействовать с системой безопасности Windows и получать информацию о состоянии защиты компьютера. Здесь приведены некоторые примеры использования API для обеспечения безопасности в Windows:

1. Получение информации о состоянии защиты компьютера

С использованием Security Center API можно получить информацию о текущем состоянии антивирусного программного обеспечения, персонального брандмауэра и системы обновления Windows. Например, можно запросить статус антивирусного программного обеспечения и отобразить его в пользовательском интерфейсе приложения.

2. Проверка наличия обновлений Windows

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

3. Управление настройками безопасности

Security Center API позволяет разработчикам управлять некоторыми настройками безопасности, такими как активация или отключение антивирусного программного обеспечения или персонального брандмауэра. Это может быть полезно, если приложение требует временного выключения безопасности для выполнения определенных задач.

4. Оповещение о событиях безопасности

API позволяет получать оповещения о событиях безопасности, таких как обнаружение вредоносного ПО или сбоев в защите. Это важно для оперативной реакции на угрозы и обеспечения максимальной безопасности пользователей.

Функции Описание
GetSecurityProviderStatus Получает текущий статус антивирусного программного обеспечения
SetFirewallState Устанавливает состояние персонального брандмауэра
CheckForWindowsUpdates Проверяет наличие обновлений Windows
SubscribeToSecurityEvents Подписывается на оповещения о событиях безопасности

Использование Windows Security Center API позволяет разработчикам создавать более безопасные приложения, которые могут мониторить и управлять состоянием защиты компьютера пользователя. API предоставляет широкие возможности для взаимодействия с системой безопасности Windows и обеспечивает более надежную защиту пользователей от различных угроз.

Как начать использовать Windows Security Center API

Windows Security Center API предоставляет разработчикам возможность получать информацию о состоянии безопасности компьютера и изменять его настройки. Чтобы начать использовать API, вам потребуется следовать определенным шагам.

  1. Зарегистрируйте приложение в Windows Security Center. Для этого вам потребуется создать провайдер безопасности, который будет получать и обрабатывать данные от API. Для регистрации провайдера вам необходимо пройти процедуру сертификации.
  2. Загрузите и установите Windows Security Center API. Вы можете скачать SDK с официального сайта Microsoft или использовать уже установленные библиотеки.
  3. Подключите библиотеку Windows Security Center API к своему проекту. Для этого вам нужно добавить соответствующие ссылки на библиотеку и указать пространство имен.
  4. Определите необходимые разрешения. В зависимости от роли вашего приложения, вам могут потребоваться определенные разрешения для доступа к API. Убедитесь, что у вас есть все необходимые разрешения.
  5. Напишите код для работы с API. Используйте методы и классы из Windows Security Center API для получения информации о состоянии безопасности компьютера или изменения его настроек. Не забудьте добавить обработку ошибок и исключений в ваш код.

После завершения этих шагов вы будете готовы использовать Windows Security Center API для взаимодействия с безопасностью компьютера.

Sometimes you might want to script checking health of anti-virus/firewall/&c. However since Windows Vista the method frequently used in scripts is accessing the wmi namespace root/securitycenter2 which is undocumented from publicly available Microsoft. Although the values of what productState mean have been guessed with reasonable accuracy, I prefer to stay away from undocumented items in case of future changes…and if there is a case “we guessed wrong”.

The WMI Method

image

The documented method since Windows Vista has been the Windows API WscGetSecurityProviderHealth in wscapi.dll which is documented here: http://msdn.microsoft.com/en-us/library/bb432506(v=vs.85).aspx

However calling Windows APIs from scripts can be tricky, so here is a wrapper I built in PowerShell that embeds C# code to call the Windows API and retrieve the data so you can manipulate it in PowerShell.

Note this is just sample code – to be more robust I’d recommend adding error checking/&c. and other improvements. Go knock yourself out.

The way the code works:

  1. We put our C# code into $wscType
  2. Add-Type compiles the C# code and makes the members available in $wscType
  3. $wscType[0]::GetSecurityProviderHealth calls the function to get health
  4. $wscType[1] is the WSC_SECURITY_PROVIDER enum to specify what security provider to check
  5. $wscType[2] is the WSC_SECURITY_PROVIDER_HEALTH enum to check against the result of GetSecurityProviderHealth

Note: The WscGetSecurityProviderHealth API is not supported on Windows XP or earlier, or on any Microsoft Server Operating Systems.

Example

The Script

image

Action Center

image

Download script here: https://skydrive.live.com/redir?resid=E1A3C870740A073D!298&authkey=!AF2EGVM6l5lQ0dc (1.57 KB ZIP)

Or copy from here:

# by chentiangemalc

# https://chentiangemalc.wordpress.com

# Define our C# functions to extract info from Windows Security Center (WSC) via Windows API so we can call from PowerShell

$wscDefinition = @”

        // WSC_SECURITY_PROVIDER as defined in Wscapi.h or http://msdn.microsoft.com/en-us/library/bb432509(v=vs.85).aspx

              [Flags]

        public enum WSC_SECURITY_PROVIDER : int

        {

            WSC_SECURITY_PROVIDER_FIREWALL = 1,                      // The aggregation of all firewalls for this computer.

            WSC_SECURITY_PROVIDER_AUTOUPDATE_SETTINGS = 2,    // The automatic update settings for this computer.

            WSC_SECURITY_PROVIDER_ANTIVIRUS = 4,                     // The aggregation of all antivirus products for this computer.

            WSC_SECURITY_PROVIDER_ANTISPYWARE = 8,                   // The aggregation of all anti-spyware products for this computer.

            WSC_SECURITY_PROVIDER_INTERNET_SETTINGS = 16,     // The settings that restrict the access of web sites in each of the Internet zones for this computer.

            WSC_SECURITY_PROVIDER_USER_ACCOUNT_CONTROL = 32,  // The User Account Control (UAC) settings for this computer.

            WSC_SECURITY_PROVIDER_SERVICE = 64,                      // The running state of the WSC service on this computer.

            WSC_SECURITY_PROVIDER_NONE = 0,                                // None of the items that WSC monitors.

                     // All of the items that the WSC monitors.

            WSC_SECURITY_PROVIDER_ALL = WSC_SECURITY_PROVIDER_FIREWALL | WSC_SECURITY_PROVIDER_AUTOUPDATE_SETTINGS | WSC_SECURITY_PROVIDER_ANTIVIRUS |

            WSC_SECURITY_PROVIDER_ANTISPYWARE | WSC_SECURITY_PROVIDER_INTERNET_SETTINGS | WSC_SECURITY_PROVIDER_USER_ACCOUNT_CONTROL |

            WSC_SECURITY_PROVIDER_SERVICE | WSC_SECURITY_PROVIDER_NONE

        }

        [Flags]

        public enum WSC_SECURITY_PROVIDER_HEALTH : int

        {

            WSC_SECURITY_PROVIDER_HEALTH_GOOD,                // The status of the security provider category is good and does not need user attention.

            WSC_SECURITY_PROVIDER_HEALTH_NOTMONITORED, // The status of the security provider category is not monitored by WSC.

            WSC_SECURITY_PROVIDER_HEALTH_POOR,                // The status of the security provider category is poor and the computer may be at risk.

            WSC_SECURITY_PROVIDER_HEALTH_SNOOZE,              // The security provider category is in snooze state. Snooze indicates that WSC is not actively protecting the computer.

            WSC_SECURITY_PROVIDER_HEALTH_UNKNOWN

        }

              // as defined in http://msdn.microsoft.com/en-us/library/bb432506(v=vs.85).aspx

        [DllImport(“wscapi.dll”)]

        private static extern int WscGetSecurityProviderHealth(int inValue, ref int outValue);

              // code to call our interop function and return the relevant result based on what input value we provide

        public static WSC_SECURITY_PROVIDER_HEALTH GetSecurityProviderHealth(WSC_SECURITY_PROVIDER inputValue)

        {

            int inValue = (int)inputValue;

            int outValue = -1;

            int result = WscGetSecurityProviderHealth(inValue, ref outValue);

            foreach (WSC_SECURITY_PROVIDER_HEALTH wsph in Enum.GetValues(typeof(WSC_SECURITY_PROVIDER_HEALTH)))

                if ((int)wsph == outValue) return wsph;

            return WSC_SECURITY_PROVIDER_HEALTH.WSC_SECURITY_PROVIDER_HEALTH_UNKNOWN;

        }

“@

$wscType=Add-Type -memberDefinition $wscDefinition -name “wscType” -UsingNamespace “System.Reflection”,“System.Diagnostics” -PassThru

”            Firewall: “ + $wscType[0]::GetSecurityProviderHealth($wscType[1]::WSC_SECURITY_PROVIDER_FIREWALL)

”         Auto-Update: “ + $wscType[0]::GetSecurityProviderHealth($wscType[1]::WSC_SECURITY_PROVIDER_AUTOUPDATE_SETTINGS)

”          Anti-Virus: “ + $wscType[0]::GetSecurityProviderHealth($wscType[1]::WSC_SECURITY_PROVIDER_ANTIVIRUS)

”        Anti-Spyware: “ + $wscType[0]::GetSecurityProviderHealth($wscType[1]::WSC_SECURITY_PROVIDER_ANTISPYWARE)

”   Internet Settings: “ + $wscType[0]::GetSecurityProviderHealth($wscType[1]::WSC_SECURITY_PROVIDER_INTERNET_SETTINGS)

“User Account Control: “ + $wscType[0]::GetSecurityProviderHealth($wscType[1]::WSC_SECURITY_PROVIDER_USER_ACCOUNT_CONTROL)

”         WSC Service: “ + $wscType[0]::GetSecurityProviderHealth($wscType[1]::WSC_SECURITY_PROVIDER_SERVICE)

# some examples of checking the “health” status…

if ($wscType[0]::GetSecurityProviderHealth($wscType[1]::WSC_SECURITY_PROVIDER_FIREWALL) -eq $wscType[2]::WSC_SECURITY_PROVIDER_HEALTH_POOR)

{

       “Your firewall settings are lame.”

}

if ($wscType[0]::GetSecurityProviderHealth($wscType[1]::WSC_SECURITY_PROVIDER_USER_ACCOUNT_CONTROL) -eq $wscType[2]::WSC_SECURITY_PROVIDER_HEALTH_POOR)

{

       “Don’t tell me you switched off UAC. oh dear.”

}

if ($wscType[0]::GetSecurityProviderHealth($wscType[1]::WSC_SECURITY_PROVIDER_ANTIVIRUS) -eq $wscType[2]::WSC_SECURITY_PROVIDER_HEALTH_GOOD)

{

       “At least you have anti-virus running and up-to-date.”

}

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Живые обои на рабочий стол windows 10 pro
  • Windows 10 где диктофон
  • Free scanner software windows 10
  • Игровой режим windows 10 отключать или нет
  • Клиент telnet windows 10 отсутствует