自動実行の有効化と無効化

AutoRun を一時的または永続的に無効にする必要がある場合は、多くの状況があります。 たとえば、AutoRun は実行中のアプリケーションの操作に干渉する可能性があり、その間は無効にする必要があります。 システムには、自動実行を無効にする方法がいくつか用意されています。

プログラムによる自動実行の抑制

AutoRun をプログラムで抑制する必要がある場合は、さまざまな状況があります。 次に 2 つの例を示します。

  • アプリケーションには、Autorun.inf ファイルを含む別のディスクを挿入する必要があるセットアップ プログラムがあります。
  • アプリケーションの操作中に、ユーザーは Autorun.inf ファイルを含む別のディスクを挿入する必要がある場合があります。

どちらの場合も、通常は、元のアプリケーションの進行中に別のアプリケーションを起動する必要はありません。

ユーザーは、CD-ROM を挿入するときに Shift キーを押したままにすると、自動実行を手動で抑制できます。 ただし、通常は、ユーザーに応じてではなく、プログラムでこの操作を処理することをお勧めします。

シェル バージョン 4.70 以降のシステムでは、Windows は "QueryCancelAutoPlay" メッセージをフォアグラウンド ウィンドウに送信します。 アプリケーションはこのメッセージに応答して、自動実行を抑制できます。 この方法は、[共通を 開く ] ダイアログ ボックスなどのシステム ユーティリティで自動実行を無効にするために使用されます。

次のコード フラグメントは、このメッセージを設定して処理する方法を示しています。 アプリケーションがフォアグラウンド ウィンドウで実行されている必要があります。 まず、"QueryCancelAutoPlay" を Windows メッセージとして登録します。

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

このメッセージを受信するには、アプリケーションのウィンドウがフォアグラウンドにある必要があります。 メッセージ ハンドラーは 、AutoRun を取り消すには 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 を返すことはできません。 代わりに、nIndex を DWL_MSGRESULT に設定して SetWindowLong を呼び出します。 autoRun を取り消すには dwNewLong パラメーターを TRUE に設定し、有効にするには FALSE を設定します 。 たとえば、次のサンプル ダイアログ ボックス プロシージャは、"QueryCancelAutoPlay" メッセージを受信したときに AutoRun を取り消します。

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;               
        }
    } 

レジストリを使用して自動実行を無効にする

AutoRun を永続的に無効にするために使用できるレジストリ値は、NoDriveAutoRun と NoDriveTypeAutoRun の 2 つあります。 最初の値は、指定したドライブ文字の AutoRun を無効にし、2 番目の値はドライブのクラスの AutoRun を無効にします。 これらの値のいずれかが特定のデバイスの自動実行を無効にするように設定されている場合は、無効になります。

Note

NoDriveAutoRun と NoDriveTypeAutoRun の値は、テストまたは管理目的でシステム全体の値を変更するようにシステム管理者のみが変更する必要があります。 これらの値を元の値に確実に復元する方法がないため、アプリケーションはこれらの値を変更しないでください。

 

NoDriveAutoRun 値は、指定したドライブ文字の自動実行を無効にします。 これは、次のキーの下にあるREG_DWORDデータ値です。

HKEY_CURRENT_USER
   Software
      Microsoft
         Windows
            CurrentVersion
               Policies
                  Explorer

値の最初のビットはドライブ A: に対応し、2 番目のビットは B: に対応します。 1 つ以上のドライブ文字に対して AutoRun を無効にするには、対応するビットを設定します。 たとえば、A: ドライブと C: ドライブを無効にするには、NoDriveAutoRun を に 0x00000005設定します。

NoDriveTypeAutoRun 値は、ドライブのクラスの自動実行を無効にします。 これは、同じキーの下にあるREG_DWORDまたは 4 バイトREG_BINARYデータ値です。

HKEY_CURRENT_USER
   Software
      Microsoft
         Windows
            CurrentVersion
               Policies
                  Explorer

この値の最初のバイトのビットを設定することで、異なるドライブを AutoRun の操作から除外できます。

次の表に、NoDriveTypeAutoRun の最初のバイトで設定できるビットとビットマスクの定数を示します。特定のドライブの種類に対して AutoRun を無効にします。 変更を有効にするには、Windows エクスプローラーを再起動する必要があります。

ビット番号 ビットマスク定数 説明
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 ファイルが含まれている必要があります。
  • デバイスは 、レジストリを介して自動実行を無効にしてはなりません。
  • フォアグラウンド アプリケーションでは、自動実行 が抑制 されていません。

Note

この機能は、リムーバブル メディアにアプリケーションを配布するために使用しないでください。 リムーバブル メディアに AutoRun を実装すると、コンピューター ウイルスを拡散する簡単な方法が提供されるため、ユーザーは Autorun.inf ファイルを含む公開されているフロッピー ディスクを疑う必要があります。

 

通常、自動実行は自動的に開始されますが、手動で開始することもできます。 デバイスが上記の条件を満たしている場合、ドライブ文字のショートカット メニューに AutoPlay コマンドが含まれます。 自動実行を手動で実行するには、ドライブ アイコンを右クリックし、ショートカット メニューから [自動再生 ] を選択するか、ドライブ アイコンをダブルクリックします。 ドライバーが自動実行互換でない場合、ショートカット メニューには 自動再生 項目がないため、AutoRun を開始できません。

自動実行互換ドライバーには、一部のリムーバブル ディスク ドライブと、CompactFlash カードなどの他の種類のリムーバブル メディアが用意されています。 AutoRun は、Windows エクスプローラーでドライブ文字にマップされているか、 Microsoft 管理コンソール (MMC) でマウントされているネットワーク ドライブでも機能します。 マウントされたハードウェアと同様に、マウントされたネットワーク ドライブのルート ディレクトリには Autorun.inf ファイルが必要であり、 レジストリを介して無効にすることはできません。