C#으로 USB 장치를 사용 가능, 사용 불가 또는 읽기 전용으로 만드는 방법


USB 메모리나 이동식 디스크는 정말 편리한 컴퓨터 주변 장치입니다. 필요한 파일들을 USB와 같은 이동식 디스크에 담아 편리하게 사용할 수 있기 때문입니다. 

컴퓨터에 부착된 하드디스크와 동일한 용량을 사용할 수 있고, USB3 타입이나 SSD 타입의 이동식 디스크는 속도도 많이 빨라졌습니다. 휴대용으로 그리고 백업용으로 점점 이동식 디스크의 사용이 늘어나고 있습니다.

하지만 보안상의 이유나 조직의 정책상 또는 기타 특별한 이유로 인해 USB 장치를 사용할 수 없도록 막아야 할 때가 있습니다.

레지스트리 편집기에서 해당 키를 찾아 값을 변경해주면 쉽게 USB 장치의 사용을 막거나 허용할 수 있습니다.

이번 글에서는 C# 프로그램 통해 레지스트리를 변경해서 USB 메모리나 이동식 디스크의 사용을 가능하게 또는 불가능하게 만드는 방법에 대해 설명해 보겠습니다.

[레지스트리 편집기]에서 USB 장치에 대한 사용 여부를 바로 설정하는 방법에 대한 내용도 아래 단락에 추가하였습니다.

C#으로 USB장치를 사용 금지하거나 사용을 허용하거나 읽기 전용으로 만드는 예제 소스

– 프로그램에서 레지스트리의 키(Key) 작업을 쉽게 사용하기 위해 using Microsoft.Win32;를 추가하였습니다.

– 레지스트리를 변경하는 작업이기 때문에 관리자 권한으로 실행해야 합니다. 그냥 실행하면 레지스트리를 접근하는 로직에서 권한이 없다는 에러가 발생하게 됩니다.

▶ C# 소스에서 사용한 버튼 컨트롤 구분

  • btnEnable : USB 사용 가능
  • btnReadOnly : USB 읽기 전용
  • btnDisable : USB 사용 불가

▼ 실제 C# 프로그램 소스

using System;
using System.Windows.Forms;
using Microsoft.Win32;
 
namespace USB_DeviceControl
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

//USB 사용 가능
        private void btnEnable_Click(object sender, EventArgs e)
        {
            //USB를 사용할 수 있도록 레지스트리 설정
            USB_enableAllStorageDevices();
 
            //USB의 WriteProect를 비활성화 (읽기,쓰기 가능)
            USB_disableWriteProtect();
 
        }
 
        void USB_enableAllStorageDevices()
        {
            RegistryKey key = Registry.LocalMachine.OpenSubKey
                (“SYSTEM\\CurrentControlSet\\Services\\UsbStor”true);
            if (key != null)
            {
                key.SetValue(“Start”3, RegistryValueKind.DWord);
            }
            key.Close();
        }
 
        void USB_disableWriteProtect()
        {
            RegistryKey key = Registry.LocalMachine.OpenSubKey
               (“SYSTEM\\CurrentControlSet\\Control\\StorageDevicePolicies”true);
            if (key != null)
            {
                key.SetValue(“WriteProtect”0, RegistryValueKind.DWord);
            }
            key.Close();
        }

//USB 읽기 전용
        private void btnReadOnly_Click(object sender, EventArgs e)
        {
            //USB를 사용할 수 있도록 레지스트리 설정
            USB_enableAllStorageDevices();
 
            //USB의 WriteProect를 활성화 (읽기 전용으로 만듦)
            USB_enableWriteProtect();
 
        }
 
        void USB_enableWriteProtect()
        {
            RegistryKey key = Registry.LocalMachine.OpenSubKey
              (“SYSTEM\\CurrentControlSet\\Control\\StorageDevicePolicies”true);
            if (key == null)
            {
                Registry.LocalMachine.CreateSubKey
                    (“SYSTEM\\CurrentControlSet\\Control\\StorageDevicePolicies”, RegistryKeyPermissionCheck.ReadWriteSubTree);
 
                key = Registry.LocalMachine.OpenSubKey
                (“SYSTEM\\CurrentControlSet\\Control\\StorageDevicePolicies”true);
                key.SetValue(“WriteProtect”1, RegistryValueKind.DWord);
            }
            else if (key.GetValue(“WriteProtect”!= (object)(1))
            {
                key.SetValue(“WriteProtect”1, RegistryValueKind.DWord);
            }
        }

//USB 사용 불가
        private void btnDisable_Click(object sender, EventArgs e)
        {
            //USB를 사용할 수 없도록 레지스트리 설정
            USB_disableAllStorageDevices();
 
        }
 
        void USB_disableAllStorageDevices()
        {
            RegistryKey key = Registry.LocalMachine.OpenSubKey
                (“SYSTEM\\CurrentControlSet\\Services\\UsbStor”true);
            if (key != null)
            {
                key.SetValue(“Start”4, RegistryValueKind.DWord);
            }
            key.Close();
        }
 
    }
}
 

▼ C# 프로그램 실행 화면

C#으로 USB 장치를 사용 가능, 사용 불가 또는 읽기 전용으로 만드는 방법

레지스트리 편집기에서 USB 장치에 대한 사용 여부 및 읽기/쓰기에 대한 제어 설정 방법

위의 C# 소스의 레지스트리 값을 설정하는 구문 부분을 [레지스트리 편집기]에서 바로 설정할 수 있습니다.

▼ 아래 화면은 USB 장치(이동식 디스크)를 사용할 수 있도록 하거나 사용할 수 없도록 설정을 변경하는 [레지스트리 편집기]  화면입니다.

레지스트리 위치 컴퓨터\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\USBSTOR의 Start 값에 따라 USB 이동식 디스크의 사용 여부를 변경할 수 있습니다.

  • Start = 3 : USB 이동식 디스크를 사용할 수 있도록 설정
  • Start = 4 : USB 이동식 디스크를 사용할 수 없도록 설정
레지스트리 편집기에서 USB 장치에 대한 사용 여부 설정 방법


▼ 아래 화면은 USB 장치(이동식 디스크)의 읽기, 쓰기에 대한 설정을 변경하는 [레지스트리 편집기] 화면입니다.

레지스트리 위치 컴퓨터\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\StorageDevicePolicies의 WriteProtect 값에 따라 USB 장치가 읽기 전용 또는 읽기/쓰기 가능으로 변경할 수 있습니다.

StorageDevicePolicies 디폴드 값은 “0“이며 레지스트리에 해당 키는 만들어져 있지 않습니다.

레지스트리 편집기에서 WriteProtect 값을 설정하기 위해서는 StorageDevicePolicies 부터 만들어 주어야 합니다.

  • WriteProtect = 0 : USB 이동식 장치 읽기/쓰기 가능으로 설정
  • WriteProtect = 1 : USB 이동식 장치 읽기 전용(Read Only)으로 설정
레지스트리 편집기에서 USB 장치의 읽기/쓰기에 대한 제어 설정 방법

※ 참고로 레지스트리를 편집할 때는 편집하기 전에 레지스트리를 백업 해 두는 것이 좋습니다. 레지스트리 백업 방법은 윈도우 PC에서 레지스트리를 백업하고 복원하는 방법 글을 참고하시기 바랍니다.





이 글이 도움이 되었기를 바랍니다. ^-^


답글 남기기