Microsoft MVP성태의 닷넷 이야기
닷넷: 2352. C# - Windows S-mode 환경인지 체크하는 방법 [링크 복사], [링크+제목 복사],
조회: 223
글쓴 사람
정성태 (seongtaejeong at gmail.com)
홈페이지
첨부 파일

C# - Windows S-mode 환경인지 체크하는 방법

윈도우에 S-mode라는 것이 있었군요. ^^

How can I detect that Windows is running in S-Mode?
; https://devblogs.microsoft.com/oldnewthing/20250807-00/?p=111444

C#의 경우 WindowsIntegrityPolicy 타입을 이용해 확인할 수 있다고 하는데요,

WindowsIntegrityPolicy Class
; https://learn.microsoft.com/en-us/uwp/api/windows.system.profile.windowsintegritypolicy

WinRT API에 속하므로 csproj의 내용에 요건을 추가하고,

<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net8.0-windows10.0.17763.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

</Project>

이렇게 코딩할 수 있습니다.

using Windows.System.Profile;

namespace ConsoleApp1;

internal class Program
{
    static void Main(string[] args)
    {
        if (WindowsIntegrityPolicy.IsEnabled)
        {
            // System is in S-Mode
            if (WindowsIntegrityPolicy.CanDisable)
            {
                Console.WriteLine("The system is in S-Mode but can be taken out of S-Mode.");
            }
            else
            {
                Console.WriteLine("The system is locked into S-Mode and cannot be taken out.");
            }
        }
        else
        {
            // System is not in S-Mode
            Console.WriteLine("The system is not in S-Mode.");
        }
    }
}

// 당연하지만, 제 컴퓨터에서 실행하면 WindowsIntegrityPolicy.IsEnabled 값이 false가 나옵니다.

그나저나 S-mode라는 것이 구체적으로 뭘까요? "How can I detect that Windows is running in S-Mode?" 글에서는,

Windows S-Mode is a mode of Windows which restricts programs to those which came from the Microsoft Store.

단순히 Microsoft Store에서만 배포하는 앱을 설치할 수 있다고 간단하게 설명하고 있는데요, 보다 자세한 내용을 다음의 링크에서 확인할 수 있습니다.

Windows 10 and Windows 11 in S mode FAQ
; https://support.microsoft.com/en-us/windows/windows-10-and-windows-11-in-s-mode-faq-851057d6-1ee9-b9e5-c30b-93baebeebc85

정리해 보면, Windows 10부터 제공하던 모드인데 처음 윈도우 설치 단계부터 선택해야 하는 옵션인 듯합니다.

Enable S mode
; https://learn.microsoft.com/en-us/windows-hardware/manufacture/desktop/windows-10-s-enable-s-mode?view=windows-11

이렇게 S-mode를 활성화하면, 해당 윈도우 운영체제에서는 오직 Microsoft Store가 배포하는 앱만 설치할 수 있어 악성 프로그램 같은 위험한 프로그램들이 설치될 여지가 없다는 안전을 확보하게 됩니다.

물론, 그 외의 프로그램들은 설치할 수 없어 불편할 수 있는데요, 그래서 S-mode를 해제한다면 다시 돌아갈 수는 없다고 합니다. 뭐랄까... 해제 후 다시 S-mode로 돌아가는 것을 허용한다면 그 사이 설치된 프로그램들이 시스템을 오염시켰을 수 있으므로 S-mode가 가진 원래의 안전을 보장할 수 없다는 취지인 것 같습니다.

그렇긴 한데, 사용자가 원한다면 임의로 레지스트리 설정을 통해 가능하다는 동영상이 있군요. ^^

How to switch back to Windows S Mode
; https://www.youtube.com/watch?v=H7UTqMiCCRo&t=51s

키 경로: HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\CI\Policy
값 이름: SkuPolicyRequired
값: (1 == S-mode, 0 == 일반 모드)

그나저나, 해당 환경에서는 너무 제약이 많아서 아마도 태블릿 유형의 기기에서 사용하면 좋을 듯한 모드인 것 같습니다.

참고로, Windows 10까지는 S-mode를 Pro, Enterprise, Education 버전에서도 지원한 것 같은데 Windows 11부터는 오로지 Home 버전에서만 지원한다고.




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]







[최초 등록일: ]
[최종 수정일: 8/9/2025]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 181  182  183  184  185  186  187  188  189  190  191  192  [193]  194  195  ...
NoWriterDateCnt.TitleFile(s)
182정성태11/21/200518485.NET Framework: 55. 에러가 발생할 것만 같은 코드
181정성태11/20/200547590.NET Framework: 54. 한글이 포함된 ANSI, UTF-8, UNICODE 텍스트 파일 읽기 [3]파일 다운로드1
197정성태12/25/200522845    답변글 .NET Framework: 54.4. [관련 문제] A 태그의 href에서의 문제.
198정성태12/27/200520517    답변글 .NET Framework: 54.5. [추가]: VS.NET으로 UTF-8 홈페이지 구성하기
179정성태11/8/200518198.NET Framework: 53. .NET Remoting: 메시지 교체
178정성태11/5/200518890기타: 11. Dual Core 장만. ^^
177정성태11/2/200518806COM 개체 관련: 17. CoGetClassObjectFromURL파일 다운로드1
176정성태3/29/200624167.NET Framework: 52. covariance? [1]파일 다운로드1
175정성태10/31/200519601.NET Framework: 51. MSXML 6.0에서 디지털 서명 기능을 제거!
180정성태11/15/200519907    답변글 VS.NET IDE: 51.1. MSXML 6.0 정식 릴리스
174정성태10/31/200520871.NET Framework: 50. app.config 예시 [1]
173정성태10/30/200519579스크립트: 5. 스크립트 호출 관계
172정성태10/25/200528013.NET Framework: 49. ASP.NET 오류 유형 : 액세스가 거부되었습니다. [2]
171정성태11/14/200529677VC++: 19. 다국어 지원: setlocale( LC_TIME, "" ) 관련 [1]
170정성태11/14/200524158VS.NET IDE: 34. Visual SourceSafe 2005: Remote Internet Access over HTTP : 80 이외의 포트를 지정
206정성태2/1/200620768    답변글 VC++: 34.1. [추가]: Internet Access Plug-in 사용 시 유의 사항
168정성태11/14/200521931VS.NET IDE: 33. IIS 6.0 AppPool 설정 - Enable rapid-fail protection
169정성태10/14/200523622    답변글 VS.NET IDE: 33.1. Enable rapid-fail protection 상황 재현 방법
166정성태11/14/200520755.NET Framework: 48. IE를 죽이는 스크립트 소스
165정성태11/14/200521494.NET Framework: 47. MOM (Microsoft Operations Manager) 2005 서버 설치 가이드
164정성태11/14/200518596.NET Framework: 46. 도메인에 속한 컴퓨터의 Local Computer Policy 변경 방법
162정성태10/3/200521233.NET Framework: 45. VS.NET 2005 IDE에서 Web App를 .NET 2.0 (x64) 머신에 배포
161정성태11/14/200523983.NET Framework: 44. IIS 관리자에서 ASP.NET 탭이 없는 경우.
159정성태9/28/200520071VS.NET IDE: 32. Virtual Server 2005 64bit SP1 Beta 테스트 [2]
163정성태10/3/200518104    답변글 VS.NET IDE: 32.1. 왜...?
158정성태11/14/200520438VS.NET IDE: 31. SQL 2005 - A connection was successfully established with the server
... 181  182  183  184  185  186  187  188  189  190  191  192  [193]  194  195  ...