다음을 통해 공유


자동 실행 사용 및 사용 안 함

AutoRun을 일시적으로 또는 영구적으로 사용하지 않도록 설정해야 하는 경우가 많습니다. 예를 들어 AutoRun은 실행 중인 애플리케이션의 작업을 방해할 수 있으며 해당 기간 동안 사용하지 않도록 설정해야 합니다. 시스템은 AutoRun을 사용하지 않도록 설정하는 여러 가지 방법을 제공합니다.

프로그래밍 방식으로 자동 실행 표시 안 함

AutoRun을 프로그래밍 방식으로 억제해야 할 수 있는 다양한 상황이 있습니다. 다음과 같은 두 가지 예가 있습니다.

  • 애플리케이션에는 사용자가 Autorun.inf 파일을 포함할 수 있는 다른 디스크를 삽입해야 하는 설치 프로그램이 있습니다.
  • 애플리케이션을 작업하는 동안 사용자는 Autorun.inf 파일을 포함할 수 있는 다른 디스크를 삽입해야 할 수 있습니다.

두 경우 모두 원본이 진행 중인 동안에는 일반적으로 다른 애플리케이션을 시작하지 않습니다.

사용자는 CD-ROM을 삽입할 때 SHIFT 키를 누른 채 자동 실행을 수동으로 표시하지 않을 수 있습니다. 그러나 일반적으로 사용자에 따라 이 작업을 프로그래밍 방식으로 처리하는 것이 좋습니다.

버전 4.70 이상이 있는 시스템에서 Windows는 "QueryCancelAutoPlay" 메시지를 포그라운드 창으로 보냅니다. 애플리케이션이 이 메시지에 응답하여 자동 실행을 표시하지 않을 수 있습니다. 이 방법은 일반 열기 대화 상자와 같은 시스템 유틸리티에서 자동 실행을 사용하지 않도록 설정하는 데 사용됩니다.

다음 코드 조각에서는 이 메시지를 설정하고 처리하는 방법을 보여 줍니다. 애플리케이션이 포그라운드 창에서 실행되고 있어야 합니다. 먼저 "QueryCancelAutoPlay"를 Windows 메시지로 등록합니다.

uMessage = RegisterWindowMessage(TEXT("QueryCancelAutoPlay"));

이 메시지를 받으려면 애플리케이션의 창이 포그라운드에 있어야 합니다. 메시지 처리기는 자동 실행을 취소하려면 TRUE 를 반환하고 이를 사용하도록 설정하려면 FALSE를 반환해야 합니다. 다음 코드 조각에서는 이 메시지를 사용하여 AutoRun을 사용하지 않도록 설정하는 방법을 보여 줍니다.

UINT g_uQueryCancelAutoPlay = 0;

LRESULT WndProc(HWND hwnd, UINT uMsg,  WPARAM wParam, LPARAM lParam) 
{ 
    switch (uMsg) 
    { 
    ... 
    default: 
        if (!g_uQueryCancelAutoPlay)
        { 
            g_uQueryCancelAutoPlay = RegisterWindowMessage(TEXT("QueryCancelAutoPlay"));
        } 
        if (uMsg && uMsg == g_uQueryCancelAutoPlay)
        { 
            return TRUE;       // Cancel AutoRun
        }
    }
}

애플리케이션이 대화 상자를 사용하고 있고 "QueryCancelAutoPlay" 메시지에 응답해야 하는 경우 단순히 TRUE 또는 FALSE를 반환할 수 없습니다. 대신 nIndexDWL_MSGRESULT 설정된 SetWindowLong을 호출합니다. dwNewLong 매개 변수를 TRUE로 설정하여 AutoRun을 취소하고 FALSE를 설정하여 사용하도록 설정합니다. 예를 들어 다음 샘플 대화 상자 프로시저는 "QueryCancelAutoPlay" 메시지를 받으면 자동 실행을 취소합니다.

UINT g_uQueryCancelAutoPlay = 0;

BOOL DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 
{ 
    switch (uMsg) 
    { 
    ...
    default: 
        if (!g_uQueryCancelAutoPlay)
        {
            g_uQueryCancelAutoPlay = RegisterWindowMessage(TEXT("QueryCancelAutoPlay"));
        } 
        if (uMsg == g_uQueryCancelAutoPlay) 
        {
            SetWindowLong(hDlg, DWL_MSGRESULT, TRUE);          
            return 1;               
        }
    } 

레지스트리를 사용하여 자동 실행 사용 안 함

자동 실행을 영구적으로 사용하지 않도록 설정하는 데 사용할 수 있는 두 가지 레지스트리 값은 NoDriveAutoRun 및 NoDriveTypeAutoRun입니다. 첫 번째 값은 지정된 드라이브 문자에 대해 AutoRun을 사용하지 않도록 설정하고 두 번째 값은 드라이브 클래스에 대해 AutoRun을 사용하지 않도록 설정합니다. 이러한 값 중 하나가 특정 디바이스에 대해 자동 실행을 사용하지 않도록 설정된 경우 사용하지 않도록 설정됩니다.

참고

NoDriveAutoRun 및 NoDriveTypeAutoRun 값은 테스트 또는 관리 목적으로 전체 시스템의 값을 변경하기 위해 시스템 관리자만 수정해야 합니다. 애플리케이션은 이러한 값을 원래 값으로 안정적으로 복원할 방법이 없으므로 이러한 값을 수정해서는 안 됩니다.

 

NoDriveAutoRun 값은 지정된 드라이브 문자에 대해 자동 실행을 사용하지 않도록 설정합니다. 다음 키 아래에 있는 REG_DWORD 데이터 값입니다.

HKEY_CURRENT_USER
   Software
      Microsoft
         Windows
            CurrentVersion
               Policies
                  Explorer

값의 첫 번째 비트는 드라이브 A:에 해당하고, 두 번째 비트는 B:에 해당합니다. 하나 이상의 드라이브 문자에 대해 자동 실행을 사용하지 않도록 설정하려면 해당 비트를 설정합니다. 예를 들어 A: 및 C: 드라이브를 사용하지 않도록 설정하려면 NoDriveAutoRun을 로 0x00000005설정합니다.

NoDriveTypeAutoRun 값은 드라이브 클래스에 대해 AutoRun을 사용하지 않도록 설정합니다. 동일한 키 아래에 있는 REG_DWORD 또는 4 바이트 REG_BINARY 데이터 값입니다.

HKEY_CURRENT_USER
   Software
      Microsoft
         Windows
            CurrentVersion
               Policies
                  Explorer

이 값의 첫 번째 바이트 비트를 설정하면 AutoRun 작업에서 다른 드라이브를 제외할 수 있습니다.

다음 표에서는 특정 드라이브 유형에 대해 AutoRun을 사용하지 않도록 설정하기 위해 NoDriveTypeAutoRun의 첫 번째 바이트에서 설정할 수 있는 비트 및 비트 마스크 상수를 제공합니다. 변경 내용이 적용되기 전에 Windows 탐색기를 다시 시작해야 합니다.

비트 번호 비트 마스크 상수 Description
0x04 DRIVE_REMOVEABLE 드라이브에서 디스크를 제거할 수 있습니다(예: 플로피 디스크).
0x08 DRIVE_FIXED 디스크는 드라이브(하드 디스크)에서 제거할 수 없습니다.
0x10 DRIVE_REMOTE 네트워크 드라이브.
0x20 DRIVE_CDROM CD-ROM 드라이브
0x40 DRIVE_RAMDISK RAM 디스크.

 

다른 유형의 스토리지 미디어에 대해 자동 실행

AutoRun은 주로 CD-ROM 및 DVD-ROM에서 애플리케이션을 공개적으로 배포하기 위한 것이며 다른 스토리지 미디어에는 사용하지 않습니다. 그러나 다른 유형의 이동식 스토리지 미디어에서 자동 실행을 사용하도록 설정하는 것이 유용한 경우가 많습니다. 이 기능은 일반적으로 AutoRun.inf 파일의 디버깅을 간소화하는 데 사용됩니다. 자동 실행은 다음 조건이 충족되는 경우에만 이동식 스토리지 디바이스에서 작동합니다.

  • 디바이스에는 자동 실행 호환 드라이버가 있어야 합니다. 자동 실행과 호환되려면 드라이버가 WM_DEVICECHANGE 메시지를 보내 디스크가 삽입되었음을 시스템에 알려야 합니다.
  • 삽입된 미디어의 루트 디렉터리에 Autorun.inf 파일이 포함되어야 합니다.
  • 레지스트리를 통해 디바이스에 AutoRun을 사용하지 않도록 설정하지 않아야 합니다.
  • 포그라운드 애플리케이션이 AutoRun 을 표시 하지 않았습니다.

참고

이 기능은 이동식 미디어에 애플리케이션을 배포하는 데 사용하면 안 됩니다. 이동식 미디어에서 자동 실행을 구현하면 컴퓨터 바이러스를 쉽게 확산할 수 있으므로 사용자는 Autorun.inf 파일이 포함된 공개적으로 분산된 플로피 디스크를 의심해야 합니다.

 

일반적으로 자동 실행은 자동으로 시작되지만 수동으로 시작할 수도 있습니다. 디바이스가 위에 나열된 조건을 충족하는 경우 드라이브 문자의 바로 가기 메뉴에 자동 실행 명령이 포함됩니다. 자동 실행을 수동으로 실행하려면 드라이브 아이콘을 마우스 오른쪽 단추로 클릭하고 바로 가기 메뉴에서 자동 실행을 선택하거나 드라이브 아이콘을 두 번 클릭합니다. 드라이버가 자동 실행 호환되지 않는 경우 바로 가기 메뉴에 자동 실행 항목이 없으며 자동 실행을 시작할 수 없습니다.

자동 실행 호환 드라이버는 일부 이동식 디스크 드라이브뿐만 아니라 CompactFlash 카드와 같은 다른 유형의 이동식 미디어와 함께 제공됩니다. 자동 실행은 Windows 탐색기를 사용하여 드라이브 문자에 매핑되거나 MMC(Microsoft Management Console)와 함께 탑재된 네트워크 드라이브에서도 작동합니다. 탑재된 하드웨어와 마찬가지로 탑재된 네트워크 드라이브에는 루트 디렉터리에 Autorun.inf 파일이 있어야 하며 레지스트리를 통해 사용하지 않도록 설정해서는 안 됩니다.