รายละเอียด: ชื่ออุปกรณ์ในการทำความเข้าใจและการเชื่อมโยงแบบสัญลักษณ์

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 235128 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
ขยายทั้งหมด | ยุบทั้งหมด

เนื้อหาบนหน้านี้

สรุป

อุปกรณ์ที่เหมือนกับฮาร์ดดิสก์ พอร์ตอนุกรม และพอร์ตขนานมีชื่ออุปกรณ์ Windows NT ที่ภายใน และอาจเลือกมีชื่อเพิ่มอุปกรณ์ของ MS-DOS ชื่อเหล่านี้จะอยู่ใน namespace ของผู้จัดการวัตถุ 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 ของ namespace Object Manager

โปรแกรม Win32 ที่ไม่สามารถใช้ชื่ออุปกรณ์ Windows NT ภายในการเข้าถึงอุปกรณ์ได้เนื่องจากระบบย่อย Win32 และ Win32 API ต้องมีตัวอักษรชื่อไดรฟ์ที่คุ้นเคยมากและ MS-DOS อุปกรณ์ชื่อ เช่น COM1 a:, c:,:, และ LPT1: ได้ ถึงแม้ว่าโปรแกรม Win32 อาจใช้ชื่ออุปกรณ์ Windows NT พวกเขาสามารถอย่างไรก็ตาม กำหนด และเอาชื่ออุปกรณ์ MS-DOS ในการเข้าถึงอุปกรณ์ได้ นอกจากนี้พวกเขายังสามารถเรียกชื่ออุปกรณ์ Windows NT ภายในเกี่ยวข้องกับชื่ออุปกรณ์ใช้ MS-DOS โค้ดตัวอย่างในส่วน "การเชื่อมโยงแบบสัญลักษณ์" ของบทความนี้อธิบายถึงวิธีการทำเช่นนี้

เพื่อให้สามารถทำความเข้าใจดียิ่งขึ้นเกี่ยวกับของวิธีที่ตัวจัดการวัตถุติดตามชื่อเพื่อ อุปกรณ์และระบบอื่น ๆ วัตถุ คุณสามารถดูตัวจัดการวัตถุ namespace ด้วยเครื่องมือ WinObj.exe ใน Platform SDK

ชื่ออุปกรณ์ของ MS-DOS

โปรแกรม Win32 ใช้อุปกรณ์เช่นไดรฟ์ พอร์ตอนุกรม และพอร์ตขนาน ผ่านอุปกรณ์ MS-DOS ใช้ชื่อ สำหรับไดรฟ์ เหล่านี้ต้องเป็นตัวอักษรชื่อไดรฟ์เหมือน a:และ c: สำหรับพอร์ตพอร์ตอนุกรม และพอร์ตขนาน เหล่านี้คือชื่อเช่น COM1:, COM2:, และ LPT1: เช่นเดียวกับชื่อของอุปกรณ์ Windows NT ชื่อเหล่านี้อยู่ใน namespace ของตัวจัดการวัตถุ แต่ในเครื่อง \ ปี ไดเรกทอรี ซึ่งก็คือโปรแกรม Win32 โหมดผู้ใช้สามารถมองเห็น

สิ่งที่ทำให้ชื่อของอุปกรณ์ MS-DOS แตกต่างจากชื่ออุปกรณ์ของ Windows NT ไม่ว่า พวกเขาจะไม่ได้ใช้ โดยโปรแกรม Windows NT เคอร์เนลหรือโหมดเคอร์เนลควบคุม วัตถุประสงค์ของตนเป็นการ อ้างถึงชื่ออุปกรณ์ Windows NT เพื่อให้สามารถใช้โปรแกรม Win32 ตัวอักษรชื่อไดรฟ์ที่คุ้นเคยและชื่อของอุปกรณ์ ตัวอย่างเช่น COM1:, การเข้าถึงอุปกรณ์ Windows NT ดังนั้น ชื่ออุปกรณ์ MS-DOS จะเรียกว่า "ลิงค์เป็นสัญลักษณ์" เป็นชื่อของอุปกรณ์ Windows NT นั่นคือ ชื่ออุปกรณ์ใช้ MS-DOS อยู่ใน Object Manager ของ \ ปี ไดเรกทอรีและชี้ไปที่ชื่อของอุปกรณ์ Windows NT ในไดเรกทอรี \device Object Manager

ชื่อของอุปกรณ์แต่ละ MS-DOS สามารถชี้ไปอย่างมากภายใน Windows NT อุปกรณ์หนึ่ง อย่างไรก็ตาม หลายชื่ออุปกรณ์ MS-DOS สามารถชี้ไปที่อุปกรณ์ที่เดียว ตัวอย่างเช่น ในขณะที่ c:เท่านั้นสามารถชี้ไปยังพาร์ติชันเดียว เป็นต้องมีอย่าง น้อยสองอักษรไดรฟ์ เหมือนกับ d:, e:, และ Z: จุดให้ตรง พาร์ติชัน

การเชื่อมโยงแบบสัญลักษณ์

เชื่อมโยงแบบสัญลักษณ์ที่สร้างขึ้น โดยระบบยืนยันผ่านคอมพิวเตอร์เริ่มระบบใหม่ เนื่องจากมีเก็บไว้ในรีจิสทรี โปรแกรมอาจสร้างการเชื่อมโยงแบบสัญลักษณ์ มี DefineDosDevice() API การเชื่อมโยงเหล่านี้จะถูกต้องเท่านั้นจนกระทั่งที่คอมพิวเตอร์เริ่มระบบใหม่ หรือปิดใช้งานเว้นแต่มีการปรับปรุงรีจิสทรีคีย์ที่ประกอบด้วยข้อมูลเกี่ยวกับการเชื่อมโยง

สามารถมีหลายการเชื่อมโยงแบบสัญลักษณ์ชื่ออุปกรณ์ของ Windows NT เริ่มต้นระบบอย่างไรก็ตาม เฉพาะ MS-DOS อุปกรณ์ชื่อที่ระบบกำหนดให้เริ่มต้นด้วยอุปกรณ์ Windows NT ภายในยังคงข้าม ใหม่ ดังนั้น คุณยังสามารถสร้างการเชื่อมโยงแบบสัญลักษณ์เพิ่มเติมที่กำหนดอักษรชื่อไดรฟ์หลายไดรฟ์ซีดีรอมที่เดียว แต่ตัวอักษรไดรฟ์ที่เพิ่มเติม'เท่านั้นยังคงอยู่จนกระทั่งปิดเครื่อง หรือเริ่มใหม่

โปรแกรม Win32 สามารถเรียกชื่ออุปกรณ์ Windows NT ที่เกี่ยวข้องกับชื่ออุปกรณ์ MS-DOS ที่เฉพาะเจาะจง โดย QueryDosDevice() เรียกด้วยชื่ออุปกรณ์ MS-DOS ต่อไปนี้เป็นตัวอย่างโค้ดที่แสดงวิธีการทำเช่นนี้:
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);
   }

}
				

คุณสมบัติ

หมายเลขบทความ (Article ID): 235128 - รีวิวครั้งสุดท้าย: 28 มกราคม 2554 - Revision: 3.0
ใช้กับ
  • Microsoft Win32 Application Programming Interface
Keywords: 
kbinfo kbkernbase kbmt KB235128 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:235128

ให้ข้อเสนอแนะ

 

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