Bạn hiện đang ngoại tuyến, hãy chờ internet để kết nối lại

Thông tin: Tên thiết bị sự hiểu biết và liên kết tượng trưng

QUAN TRỌNG: Bài viết này được dịch bằng phần mềm dịch máy của Microsoft chứ không phải do con người dịch. Microsoft cung cấp các bài viết do con người dịch và cả các bài viết do máy dịch để bạn có thể truy cập vào tất cả các bài viết trong Cơ sở Kiến thức của chúng tôi bằng ngôn ngữ của bạn. Tuy nhiên, bài viết do máy dịch không phải lúc nào cũng hoàn hảo. Loại bài viết này có thể chứa các sai sót về từ vựng, cú pháp hoặc ngữ pháp, giống như một người nước ngoài có thể mắc sai sót khi nói ngôn ngữ của bạn. Microsoft không chịu trách nhiệm về bất kỳ sự thiếu chính xác, sai sót hoặc thiệt hại nào do việc dịch sai nội dung hoặc do hoạt động sử dụng của khách hàng gây ra. Microsoft cũng thường xuyên cập nhật phần mềm dịch máy này.

Nhấp chuột vào đây để xem bản tiếng Anh của bài viết này:235128
TÓM TẮT
Các thiết bị như đĩa cứng, cổng tuần tự, song song cổng một tên thiết bị Windows NT nội bộ và có thể tùy chọn có một tên thiết bị MS-DOS. Các tên được đặt trong không gian tên đối tượng Manager Windows NT. Trong khi Windows NT và trình điều khiển chế độ lõi sử dụng tên thiết bị NT, chương trình Win32 phải sử dụng tên thiết bị MS-DOS. Tên thiết bị MS-DOS là một liên kết tượng trưng đến tên thiết bị NT nằm bên dưới. Bài viết này mô tả tên thiết bị, liên kết tượng trưng và làm thế nào Win32 các chương trình có thể tạo và xoá liên kết tượng trưng.
THÔNG TIN THÊM

Nội bộ NT tên thiết bị

Khi trình điều khiển thiết bị chế độ lõi được nạp, thói quen khởi tạođăng ký một tên thiết bị với Windows NT Object Manager. Tên này được gọi là tên thiết bị Windows NT. Các thành phần chế độ lõi của Windows NT và trình điều khiển chế độ lõi tham khảo thiết bị bằng tên thiết bị Windows NT của họ. Những tên có một định dạng, chẳng hạn như \Device\CDRom0 và \Device\Serial0 và cũng tồn tại trong thư mục \device của không gian tên của người quản lý đối tượng.

Win32 các chương trình không thể sử dụng nội bộ Windows NT tên thiết bị cho các thiết bị truy cập, vì hệ thống phụ Win32 và Win32 API yêu cầu các chữ cái ổ đĩa quen thuộc hơn và tên thiết bị MS-DOS, chẳng hạn như A:, C:, COM1:, và LPT1:. Mặc dù Win32 các chương trình không thể sử dụng tên thiết bị Windows NT, họ có thể Tuy nhiên, xác định và loại bỏ tên thiết bị MS-DOS để truy cập vào thiết bị. Họ cũng có thể truy xuất nội bộ Windows NT tên thiết bị gắn liền với một tên thiết bị MS-DOS. Các ví dụ mã trong phần "Liên kết tượng trưng" của bài viết này mô tả làm thế nào để làm điều này.

Để đạt được một sự hiểu biết tốt hơn về cách quản lý đối tượng theo dõi tên đểcác thiết bị và hệ thống đối tượng, bạn có thể xem không gian tên của người quản lý đối tượng với công cụ WinObj.exe trong SDK nền tảng.

MS-DOS tên thiết bị

Win32 các chương trình sử dụng các thiết bị như ổ đĩa, cổng nối tiếp, và cổng song songthông qua MS-DOS tên thiết bị của họ. Đối với ổ đĩa, đây là ký tự ổ đĩa như A: và C:. Đối với cổng nối tiếp, song song đây là những cái tên như COM1:, COM2:, và LPT1:. Như tên thiết bị Windows NT, các tên nằm trong phần điền tên của người quản lý đối tượng, nhưng trong các \?? thư mục, mà được hiển thị cho các chương trình Win32 chế độ người dùng.

Điều gì làm cho MS-DOS tên thiết bị khác với tên thiết bị Windows NT là rằng họ không được sử dụng bởi trình điều khiển nào về hạt nhân hoặc chế độ lõi Windows NT. Mục đích của họ là để chỉ tên thiết bị Windows NT để cho Win32 các chương trình có thể sử dụng các chữ cái ổ đĩa quen thuộc và tên thiết bị; Ví dụ, COM1:, để truy cập vào các thiết bị Windows NT. Do đó, tên thiết bị MS-DOS được gọi là "liên kết tượng trưng" để Windows NT tên thiết bị. Có nghĩa là, một tên thiết bị MS-DOS tồn tại trong các đối tượng của người quản lý \?? thư mục và các điểm đến một tên thiết bị Windows NT trong thư mục của người quản lý đối tượng \device.

Mỗi MS-DOS tên thiết bị có thể trỏ đến tối đa một nội bộ thiết Windows NT bị. Tuy nhiên, nhiều MS-DOS tên thiết bị có thể trỏ đến một thiết bị duy nhất. Ví dụ, trong khi C: chỉ có thể trỏ đến một phân vùng, có thể có hai ổ đĩa chữ, như D:, E: và Z:, điểm đến cùngphân vùng.

Liên kết tượng trưng

Liên kết tượng trưng tạo bởi hệ thống vẫn tồn tại trên toàn khởi động lại máy tínhbởi vì chúng được lưu trữ trong registry. Chương trình cũng có thể tạo liên kết tượng trưng với DefineDosDevice() API. Các liên kết này là hợp lệ chỉ cho đến khi máy tính khởi động lại hoặc tắt trừ khi các khóa registry có chứa thông tin về các liên kết được Cập Nhật.

Có thể có nhiều liên kết tượng trưng cho một tên thiết bị Windows NT. Tuy nhiên, chỉ MS-DOS tên thiết bị mà hệ thống ban đầu được gán cho thiết bị Windows NT nội bộ vẫn còn trên toàn khởi động lại. Do đó, nó có thể tạo thêm các liên kết tượng trưng chỉ định nhiều chữ cái ổ đĩa cho một ổ đĩa CD-ROM duy nhất, nhưng các ký tự ổ đĩa bổ sung chỉ ở lại cho đến khi máy tắt hoặc khởi động lại.

Win32 các chương trình có thể truy xuất tên thiết bị Windows NT kết hợp với một tên thiết bị cụ thể MS-DOS bởi gọi QueryDosDevice() với tên thiết bị MS-DOS. Sau đây là ví dụ mã đó cho thấy làm thế nào để làm điều này:
char szNtDeviceName[MAX_PATH];if (QueryDosDevice ("C:", szNtDeviceName, MAX_PATH)){   printf ("C: is linked to %s\n", szNtDeviceName);}				
Win32 các chương trình có thể tạo và xoá liên kết tượng trưng bằng cách gọiDefineDosDevice(). Để tạo ra một liên kết tượng trưng, gọi DefineDosDevice với cácDDD_RAW_TARGET_PATH cờ. Để loại bỏ một liên kết tượng trưng, gọi nó với cácDDD_REMOVE_DEFINITION và DDD_RAW_TARGET_PATH cờ. Mẫu sau đâychương trình chứng tỏ cả hai trong số các hoạt động này:
/*   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);   }}				
DOS THIẾT BỊ

Cảnh báo: Bài viết này đã được dịch tự động

Thuộc tính

ID Bài viết: 235128 - Xem lại Lần cuối: 08/21/2011 09:14:00 - Bản sửa đổi: 2.0

Microsoft Win32 Application Programming Interface

  • kbinfo kbkernbase kbmt KB235128 KbMtvi
Phản hồi