情報: についてのデバイス名とシンボリック ・ リンク

文書翻訳 文書翻訳
文書番号: 235128
すべて展開する | すべて折りたたむ

目次

概要

ハード ディスク、シリアル ポートおよびパラレル ポート Windows NT デバイスの内部名があるし、必要に応じて可能性がありますのようなデバイスには、MS-DOS デバイス名があります。これらの名前は、Windows NT オブジェクト マネージャーの名前空間に配置されています。Windows NT とカーネル モードのドライバー NT のデバイス名を使用しますが、Win32 プログラム MS-DOS デバイス名を使用する必要があります。MS-DOS デバイス名は、基になる NT デバイス名へのシンボリック リンクです。この資料では、デバイス名、シンボリック リンク、および Win32 プログラムことができますを作成し、シンボリック ・ リンクを削除する方法について説明します。

詳細

内部の NT デバイス名

場合は、カーネル モードのデバイス ドライバーが読み込まれます、その初期化ルーチンデバイス名が Windows NT のオブジェクト ・ マネージャーに登録します。この名前は、Windows NT のデバイス名と呼ばれます。カーネル モードのコンポーネントの Windows NT とカーネル モードのドライバーは、Windows NT デバイス名でデバイスを参照します。これらの名前形式、\Device\CDRom0 や \Device\Serial0 などを持ち、オブジェクト マネージャーの名前空間の \device ディレクトリ内にも存在します。

Win32 プログラムは Win32 サブシステムと Win32 API といつもドライブ文字 a:、c:、COM1 などの MS-DOS デバイス名が必要なためアクセス デバイスに内部の Windows NT デバイス名を使用してできません: および lpt 1: します。Win32 プログラムは Windows NT デバイス名を使用可能性がありますが、ただし、できますを定義し、デバイスにアクセスするのには、MS-DOS デバイス名を削除します。これらも、MS-DOS デバイス名と関連付けられている、内部 Windows NT のデバイス名を取得できます。「シンボリック リンク」セクションのこの資料のコード例これを行う方法について説明します。

オブジェクト マネージャー名を追跡するの理解を深めるためにデバイスやその他のシステム オブジェクトは、プラットフォーム SDK で WinObj.exe ツール、オブジェクト マネージャーの名前空間を表示できます。

MS-DOS デバイス名

ドライブ、シリアル ポートおよびパラレル ポートなどのデバイスを使用する Win32 プログラム自分の MS-DOS デバイス名をします。ディスク ・ ドライブは、これらは a:、c: などのドライブ文字です。シリアルおよびパラレル ポート用これら COM1 のような名前です。:、COM2:、および lpt 1: します。オブジェクト マネージャーの名前空間には、Windows NT デバイス名と同様に、これらの名前がである、\ 次へディレクトリは、ユーザー モードの Win32 プログラムに表示されます。

MS-DOS デバイス名が異なるデバイス名を Windows NT になりますは、Windows NT カーネル メモリ ダンプやカーネル モードのドライバーが使用されていないことです。その目的は Win32 プログラム理解してドライブとデバイス名を使用できるように Windows NT のデバイス名を参照してくださいです。たとえば、COM1:、Windows NT デバイスにアクセスします。したがって、MS-DOS デバイス名は「Windows NT デバイス名にシンボリック リンク」と呼ばれます。つまり、オブジェクト マネージャー内ので、MS-DOS デバイス名が存在する \?ディレクトリと、オブジェクト マネージャーの \device ディレクトリ内の Windows NT デバイス名へのポインター。

各 MS-DOS デバイス名は多くて 1 つ内蔵 Windows NT デバイスを参照できます。ただし、複数の MS-DOS デバイス名に 1 つのデバイスを参照できます。C: がのみ 1 つのパーティションに指すことができますが、たとえば、d:、e:、およびリファレンス:、ポイントを同じように、2 つ以上のドライブ文字を含むことです。パーティション。

シンボリック リンク

コンピューターの再起動後、システムによって作成、シンボリック ・ リンクを保持します。レジストリに格納されているため。プログラムは、DefineDosDevice() API をシンボリック リンクも作成できます。これらのリンクはのみ、再起動またはリンクに関する情報を含むレジストリ キーが更新されない限り無効にされるまで有効です。

複数のシンボリック リンクは、Windows NT のデバイス名を指定できます。ただし、最初、内部 Windows NT のデバイスに割り当てられているシステム間でまだ、MS-DOS デバイス名のみを再起動します。したがって、1 つの CD-ROM ドライブには、複数のドライブ文字を割り当てる追加のシンボリック リンクを作成することも可能ですが、マシンをオフにするか、再起動するまでだけ別のドライブ文字を維持します。

Win32 プログラムは、特定の MS-DOS デバイス名と呼び出し QueryDosDevice()、MS-DOS デバイス名を使用して関連付けられた Windows NT のデバイス名を取得できます。これを行うには方法を示すコード例を次に示します。
char szNtDeviceName[MAX_PATH];

if (QueryDosDevice ("C:", szNtDeviceName, MAX_PATH))
{
   printf ("C: is linked to %s\n", szNtDeviceName);
}
				
Win32 プログラムが作成し、呼び出すことにより、シンボリック リンクを削除できます。DefineDosDevice()。シンボリック リンクを作成するには、DefineDosDevice での呼び出しは、DDD_RAW_TARGET_PATH のフラグです。それに呼び出すシンボリック リンクを削除するには、DDD_REMOVE_DEFINITION および DDD_RAW_TARGET_PATH フラグを設定します。次の例では、プログラムのこれらの操作の両方を示しています。
/*
   DDD

      This sample shows how to associate an MS-DOS device name with a 
      Windows NT device name. The association is a symbolic link between
      device names stored in the Object Manager's namespace. Applications
      use the MS-DOS device name, but Windows NT and kernel-mode drivers
      use the Windows NT device name.  

   Usage:
      ddd <MS-DOS Device Name> <NT Device Name>
      ddd -r <MS-DOS Device Name>

   NOTE: If the MS-DOS device name is a driver letter, the trailing 
   backlash is not accepted by DefineDosDevice or QueryDosDevice.

   NOTE: The MS-DOS device name is defined only until the computer is 
   restarted.

   To make the drive letter associations permanent on Window NT 4.0, you
   have to update HKEY_LOCAL_MACHINE\SYSTEM\DISK\Information. However, 
   the contents of the value are undocumented. 

   On Windows 2000, you have to use the Volume Mount Point APIs.
*/ 

#define WIN32_LEAN_AND_MEAN /* Reduce number of system headers parsed */ 
                            /* during build. */ 

#include <windows.h>
#include <stdio.h>

void main (int argc, char **argv)
{
   char * pszDosDeviceName,
        * pszNtDeviceName;

   bool  fRemoveDeviceName = false;
   bool  fResult;

   /*
      Command-line parsing.
        1) Make sure correct number of arguments are supplied.
        2) See if you should add or remove the MS-DOS Device Name.
   */ 
   if (argc != 3)
   {
      printf("\nusage: %s <DOS device name> <NT device name>    to add\n",
             argv[0]);
      printf("usage: %s [-r] <DOS device name>                to remove\n",
             argv[0]);
      printf("\n\texample: %s d: \\device\\cdrom0\n", argv[0]);
      return;
   }

   fRemoveDeviceName = !lstrcmpi (argv[1], "-r");


   /* Now, add/remove the DOS device name. */ 
   if (fRemoveDeviceName)
   {
      /*
         Remove the MS-DOS device name. First, get the name of the Windows
         NT device from the symbolic link, then delete the symbolic link.
         
      */ 
      pszDosDeviceName = argv[2];

      pszNtDeviceName = (char *)LocalAlloc (LPTR, MAX_PATH);

      fResult = QueryDosDevice (pszDosDeviceName, pszNtDeviceName,
                                MAX_PATH);
      if (fResult)
      {
         fResult = DefineDosDevice (DDD_RAW_TARGET_PATH|
                                    DDD_REMOVE_DEFINITION|
                                    DDD_EXACT_MATCH_ON_REMOVE,
                                    pszDosDeviceName, pszNtDeviceName);
      }
      if (!fResult)
         printf("error %lu: could not remove %s\n",
                GetLastError(), pszDosDeviceName);

      LocalFree (pszNtDeviceName);
   }
   else
   {
      /* Add the DOS device name */ 

      pszDosDeviceName = argv[1];
      pszNtDeviceName  = argv[2];

      fResult = DefineDosDevice (DDD_RAW_TARGET_PATH, pszDosDeviceName,
                                 pszNtDeviceName);
      if (!fResult)
         printf("error %lu: could not link %s to %s\n",
                GetLastError(), pszDosDeviceName, pszNtDeviceName);
   }

}
				

プロパティ

文書番号: 235128 - 最終更新日: 2011年7月22日 - リビジョン: 6.0
キーワード:?
kbinfo kbkernbase kbmt KB235128 KbMtja
機械翻訳の免責
重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。
英語版 KB:235128
Microsoft Knowledge Base の免責: Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com