ΠΛΗΡΟΦΟΡΙΕΣ: Ονόματα συσκευών κατανόηση και συμβολικές συνδέσεις

Μεταφράσεις άρθρων Μεταφράσεις άρθρων
Αναγν. άρθρου: 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 και υπάρχει επίσης στον κατάλογο \συσκευή του χώρου ονομάτων τη διαχείριση αντικειμένων.

Προγράμματα Win32 δεν είναι δυνατό να χρησιμοποιούν εσωτερικά ονόματα συσκευών των Windows NT σε συσκευές πρόσβασης, επειδή το υποσύστημα Win32 και Win32 API απαιτούν τις περισσότερο οικείες γράμματα μονάδων δίσκου και ονόματα συσκευών MS-DOS, όπως COM1 A:, C:,:, και LPT1:. Παρόλο που τα προγράμματα Win32 δεν επιτρέπεται να χρησιμοποιήσετε ονόματα συσκευών των Windows NT, μπορούν Ωστόσο, προσδιορίσετε και να καταργήσετε ονόματα συσκευών MS-DOS για να αποκτήσετε πρόσβαση σε συσκευές. Επίσης μπορούν να ανακτούν το εσωτερικό όνομα συσκευής των Windows NT που σχετίζεται με ένα όνομα συσκευής MS-DOS. Το παράδειγμα κώδικα στην ενότητα "Συμβολικές συνδέσεις" αυτού του άρθρου περιγράφει πώς μπορείτε να το κάνετε αυτό.

Για να αποκτήσετε μια καλύτερη κατανόηση του τρόπου τη διαχείριση αντικειμένων παρακολουθεί τα ονόματα στις συσκευές και άλλα αντικείμενα του συστήματος, μπορείτε να προβάλετε τη διαχείριση αντικειμένων ονομάτων με το εργαλείο WinObj.exe στο SDK της πλατφόρμας.

Ονόματα συσκευών MS-DOS

Προγράμματα Win32 χρησιμοποιούν συσκευές όπως μονάδες δίσκων, σειριακές θύρες και παράλληλες θύρες μέσω τους ονόματα συσκευών MS-DOS. Μονάδες δίσκου, αυτά είναι γράμματα μονάδας δίσκου, όπως A: και η μονάδα δίσκου C:. Για σειριακές και παράλληλες θύρες αυτές είναι ονόματα όπως COM1:, COM2:, και LPT1:. Όπως τα ονόματα συσκευών των Windows NT, αυτά τα ονόματα βρίσκονται στο χώρο ονομάτων για τη διαχείριση αντικειμένων, αλλά με το \?? Κατάλογος, το οποίο εμφανίζεται σε κατάσταση λειτουργίας χρήστη Win32 προγράμματα.

Τι κάνει ονόματα συσκευών MS-DOS διαφορετικά από τα ονόματα συσκευών των Windows NT είναι ότι δεν χρησιμοποιούνται από τα προγράμματα οδήγησης πυρήνα ή λειτουργίας πυρήνα των Windows NT. Σκοπός τους είναι να αναφέρονται σε ονόματα συσκευών των Windows NT, ώστε να χρησιμοποιούν προγράμματα Win32, τα γράμματα μονάδας δίσκου οικεία και ονόματα συσκευών, για παράδειγμα, COM1:, για να αποκτήσετε πρόσβαση στις συσκευές των Windows NT. Επομένως, τα ονόματα συσκευών MS-DOS ονομάζονται "συμβολικές συνδέσεις" για τα ονόματα συσκευών των Windows NT. Αυτό σημαίνει ότι ένα όνομα συσκευής MS-DOS υπάρχει με το αντικείμενο της διαχείρισης \?? Κατάλογος και σημεία για ένα όνομα συσκευής των Windows NT στον κατάλογο \συσκευή τη διαχείριση αντικειμένων.

Κάθε όνομα συσκευής MS-DOS μπορεί να οδηγεί σε πολύ ένα εσωτερικό των Windows NT συσκευής. Ωστόσο, πολλαπλά ονόματα συσκευών MS-DOS μπορεί να οδηγεί σε μία μόνο συσκευή. Για παράδειγμα, ενώ C: μόνο μπορεί να οδηγεί σε ένα ενιαίο διαμέρισμα, είναι δυνατό να έχετε δύο ή περισσότερα γράμματα μονάδας δίσκου, όπως η μονάδα δίσκου D:, E: και Z:, σημείο στο ίδιο διαμέρισμα.

Συμβολικές συνδέσεις

Συμβολικές συνδέσεις που έχουν δημιουργηθεί από το σύστημα παραμένουν σε επανεκκίνηση του υπολογιστή, επειδή είναι αποθηκευμένα στο μητρώο. Προγράμματα μπορούν επίσης να δημιουργήσουν συμβολικών συνδέσεων με το API DefineDosDevice(). Οι συνδέσεις αυτές είναι έγκυρες μόνο μέχρι να ξεκινήσει πάλι ή απενεργοποιημένο, εκτός αν τα κλειδιά μητρώου που περιέχει πληροφορίες σχετικά με τις συνδέσεις ενημερώνονται ο υπολογιστής.

Μπορεί να υπάρχουν πολλές συμβολικές συνδέσεις για ένα όνομα συσκευής των Windows NT. However, only the MS-DOS device name that the system initially assigned to the internal Windows NT device remains across reboots. Therefore, it is possible to create additional symbolic links that assign multiple drive letters to a single CD-ROM drive, but the additional drive letters only remain until the machine is turned off or restarted.

Win32 programs can retrieve the Windows NT device name that is associated with a specific MS-DOS device name by calling QueryDosDevice() with the MS-DOS device name. Following is example code that shows how to do this:
char szNtDeviceName[MAX_PATH];

if (QueryDosDevice ("C:", szNtDeviceName, MAX_PATH))
{
   printf ("C: is linked to %s\n", szNtDeviceName);
}
				
Win32 programs can create and delete symbolic links by calling DefineDosDevice(). To create a symbolic link, call DefineDosDevice with the DDD_RAW_TARGET_PATH flag. To remove a symbolic link, call it with the DDD_REMOVE_DEFINITION and DDD_RAW_TARGET_PATH flags. The following sample program demonstrates both of these operations:
/*
   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 - Τελευταία αναθεώρηση: Κυριακή, 19 Δεκεμβρίου 2010 - Αναθεώρηση: 2.0
Οι πληροφορίες σε αυτό το άρθρο ισχύουν για:
  • Microsoft Win32 Application Programming Interface
Λέξεις-κλειδιά: 
kbinfo kbkernbase kbmt KB235128 KbMtel
Μηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της 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