Αυτήν τη στιγμή είστε εκτός σύνδεσης, σε αναμονή για επανασύνδεση στο Internet

ΠΛΗΡΟΦΟΡΙΕΣ: Windows Rundll και Rundll32 διασύνδεσης

ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.

Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:164787
Περίληψη
Τα Microsoft Windows 95, Windows 98 και Windows Millennium Edition (Me) περιέχει δύο προγράμματα βοηθητικό πρόγραμμα γραμμής εντολών που ονομάζεται Rundll.exe καιRundll32.exe που σας επιτρέπουν να καλέσετε μια συνάρτηση που εξάγονται από ένα DLL16-bit ή 32 bit. Ωστόσο, τα προγράμματα Rundll και Rundll32 δενσας επιτρέπει να καλέσετε οποιαδήποτε λειτουργία που έχει εξαχθεί από οποιοδήποτε DLL. Για παράδειγμα, μπορείτε ναχρησιμοποιείτε αυτά τα βοηθητικά προγράμματα για την κλήση API Win32 (εφαρμογήΚλήσεις διασύνδεσης προγραμματισμού) που εξάγονται από το DLL του συστήματος. Τα προγράμματανα επιτρέπονται μόνο για να καλέσετε λειτουργίες από ένα αρχείο DLL που γράφονται ρητάη κλήση τους. Αυτό το άρθρο παρέχει περισσότερες λεπτομέρειες σχετικά με τη χρήση Rundllκαι προγράμματα Rundll32 στα λειτουργικά συστήματα Windows που αναφέρονται παραπάνω.

MIcrosoft Windows NT 4.0, Windows 2000 και Windows XP πλοίο με Rundll32 μόνο. Δεν υπάρχει υποστήριξη για Rundll (βοηθητικό πρόγραμμα Win16) σε οποιαδήποτε πλατφόρμα.

Βοηθητικά προγράμματα Rundll και Rundll32 είχαν αρχικά σχεδιαστεί μόνο γιαεσωτερική χρήση στη Microsoft. Αλλά η λειτουργικότητα που παρέχεται από τους είναιαρκετά γενική ότι τώρα είναι διαθέσιμα για γενική χρήση.Σημειώστε ότι τα Windows NT 4.0 πλοία μόνο με το βοηθητικό πρόγραμμα Rundll32 καιυποστηρίζει μόνο Rundll32.
Περισσότερες πληροφορίες

Rundll έναντι Rundll32

Rundll φορτώνει και εκτελεί DLL 16-bit, ότι Rundll32 φορτώνει και εκτελεί 32-bitDLL. Εάν μεταβιβάσετε εσφαλμένου τύπου DLL Rundll ή Rundll32, ενδέχεται νααποτύχει να εκτελεστεί χωρίς υποδεικνύοντας μηνύματα σφάλματος.

Γραμμή εντολών rundll

Η γραμμή εντολών για Rundll είναι ως εξής:
   RUNDLL.EXE <dllname>,<entrypoint> <optional arguments>				
Ένα παράδειγμα είναι η εξής:
   RUNDLL.EXE SETUPX.DLL,InstallHinfSection 132 C:\WINDOWS\INF\SHELL.INF				
Υπάρχουν 3 θέματα για να εξετάσετε προσεκτικά την παραπάνω γραμμή εντολών:
  1. Rundll ή Rundll32 αναζήτηση του αρχείου DLL που δόθηκε στις τυπικές θέσεις (ανατρέξτε στην τεκμηρίωση για τη συνάρτηση LoadLibrary() για λεπτομέρειες). Συνιστάται να παρέχετε μια πλήρη διαδρομή για το DLL για να εξασφαλίσετε ότι ο σωστός βρέθηκε. Για καλύτερα αποτελέσματα, χρησιμοποιήστε το σύντομο όνομα αρχείου αντί για το μεγάλο όνομα αρχείου για να εξασφαλίσετε ότι θα εμφανίζονται χωρίς τους μη έγκυρους χαρακτήρες. Σημείωση ειδικότερα, αυτό σημαίνει ένα DLL στο φάκελο "C:\Program Files" θα μετατραπεί το σύντομο όνομά της.
  2. Το <dllname> μπορεί να περιέχει διαστήματα ή κόμμα ή εισαγωγικά. Αυτός είναι ένας περιορισμός στο πρόγραμμα ανάλυσης γραμμής εντολών Rundll.</dllname>
  3. Στην παραπάνω γραμμή εντολών, το κόμμα (,) μεταξύ του <dllname> και το όνομα της συνάρτησης <entrypont> είναι εξαιρετικά σημαντικό. Εάν λείπει το διαχωριστικό κόμμα, Rundll ή Rundll32 θα αποτύχει χωρίς αναφέροντας τυχόν σφάλματα. Επιπλέον, δεν είναι δυνατό να υπάρχουν τα κενά διαστήματα μεταξύ του <dllname>, το κόμμα και η <entrypoint> συνάρτηση.</entrypoint></dllname></entrypont></dllname>

Πώς λειτουργεί η Rundll

Rundll εκτελεί τα ακόλουθα βήματα:
  1. Αναλύει τη γραμμή εντολών.
  2. Φορτώνει το καθορισμένο DLL μέσω LoadLibrary().
  3. Λαμβάνει τη διεύθυνση της <entrypoint> συνάρτησης μέσω GetProcAddress().</entrypoint>
  4. Καλεί τη <entrypoint> συνάρτηση, περνάει ουρά γραμμής εντολών που είναι <optional arguments="">.</optional></entrypoint>
  5. Όταν η συνάρτηση <entrypoint> επιστρέφει, Rundll.exe καταργεί τη φόρτωση του DLL και εξόδους.</entrypoint>

Τρόπος εγγραφής σας DLL

Στο αρχείο DLL σας, γράψτε τη συνάρτηση <entrypoint> με την ακόλουθη πρότυπη:</entrypoint>

DLL 16-bit:

  void FAR PASCAL __loadds  EntryPoint(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow);				
DLL 32-bit:
  void CALLBACK  EntryPoint(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow);				
Και πάλι, υπάρχουν ζητήματα 3 να σκεφτείτε με τη συνάρτηση EntryPoint:
  1. Προφανώς, το όνομα "entrypoint" πρέπει να αντικατασταθεί με το πραγματικό όνομα σας συνάρτησης σημείου εισόδου. Σημειώστε ότι το σημείο εισαγωγής το Rundll32 είναι εντελώς σχετίζεται με τη συνάρτηση DllEntryPoint σε ποια διαδικασία χειρισμού και νήμα επισυνάψετε/απόσπαση ειδοποιήσεις DLL 32-bit.
  2. Τη συνάρτηση σημείου εισόδου για Rundll32 πρέπει να οριστεί με _stdcall (προεπιλεγμένες ρυθμίσεις επιστροφής ΚΛΉΣΗΣ με χρήση του χαρακτηριστικού _stdcall) σύμβαση κλήσης. Εάν λείπει το χαρακτηριστικό _stdcall, η συνάρτηση προεπιλογή _cdecl σύμβαση κλήσης και στη συνέχεια Rundll32 θα τερματιστεί με μη φυσιολογικό τρόπο μετά την κλήση της συνάρτησης.
  3. Δεδομένου ότι πρέπει να δηλώσετε τη συνάρτηση με _stdcall σύμβαση κλήσης, όπως περιγράφεται παραπάνω, ακολουθεί ότι το πρόγραμμα μεταγλώττισης Visual C++ θα πράγματι εξαγάγετε ως _EntryPoint@16 εάν το DLL είναι γραμμένη σε c ή θα χρησιμοποιήσει περαιτέρω διακόσμηση όνομα αν το DLL είναι γραμμένη σε C++. Έτσι, προσέξτε να χρησιμοποιήσετε το όνομα σωστά εξαχθεί στη γραμμή εντολών για Rundll ή Rundll32. Εάν θέλετε να αποφύγετε τη χρήση των ονόματα, χρησιμοποιήστε ένα αρχείο μονάδας .def και εξαγωγή της συνάρτησης σημείου εισόδου κατά όνομα. Ανατρέξτε στην τεκμηρίωση του προϊόντος και στο παρακάτω άρθρο για περαιτέρω πληροφορίες σχετικά με τη διακόσμηση όνομα όταν χρησιμοποιείτε προγράμματα μεταγλώττισης Visual C++:
    140485Εξαγωγή PASCAL σύμβολα στο DLL 32-bit
Οι παράμετροι για το σημείο εισόδου Rundll είναι ως εξής:
   hwnd - window handle that should be used as the owner window for          any windows your DLL creates   hinst - your DLL's instance handle   lpszCmdLine - ASCIIZ command line your DLL should parse   nCmdShow - describes how your DLL's windows should be displayed				
Στο παρακάτω παράδειγμα:
     RUNDLL.EXE SETUPX.DLL,InstallHinfSection 132 C:\WINDOWS\INF\SHELL.INF				
Rundll θα καλέσετε τη συνάρτηση entrypoint InstallHinfSection()SetupX.dll και να περάσετε τις ακόλουθες παραμέτρους:
   hwnd = (parent window handle)   hinst = HINSTANCE of SETUPX.DLL   lpszCmdLine = "132 C:\WINDOWS\INF\SHELL.INF"   nCmdShow = (whatever the nCmdShow was passed to CreateProcess)				
Σημειώστε ότι είναι η συνάρτηση <entrypoint> (ή InstallHinfSection() με τοπαραπάνω παράδειγμα) που έχει τη δική της γραμμή εντολών (η lpszCmdLine ανάλυσηη παράμετρος παραπάνω) και χρησιμοποιήστε τις παραμέτρους μεμονωμένων όπως απαιτείται.Rundll.exe αναλύει μόνο έως τα προαιρετικά ορίσματα που δόθηκαν εντολήςγραμμή. Τα υπόλοιπα την ανάλυση είναι η συνάρτηση <entrypoint> .</entrypoint></entrypoint>

Ειδικές παρατηρήσεις σχετικά με τις διαφορές μεταξύ των Windows 95 και Windows NT

Σε Windows NT, Windows 2000 και Windows XP, η συμπεριφορά Rundll32.exe είναι λίγο διαφορετική, για να συμπεριλάβετε γραμμές εντολών UNICODE.

Τα Windows NT προσπαθεί πρώτα να GetProcAddress για <entrypoint>δ. Εάν βρεθεί αυτό το σημείο εισόδου, του πρωτοτύπου θεωρείται ως:</entrypoint>
   void CALLBACK   EntryPointW(HWND hwnd, HINSTANCE hinst, LPWSTR lpszCmdLine,               int nCmdShow);				
Αυτό είναι το ίδιο ως EntryPoint ANSI, εκτός εάν το lpszCmdLineη παράμετρος είναι τώρα μια συμβολοσειρά UNICODE.

Εάν δεν βρεθεί το σημείο <entrypoint>w εγγραφή, στη συνέχεια, τα Windows NT θαGetProcAddress για μια <entrypoint>και <entrypoint>. Εάν εντοπιστεί είτε,στη συνέχεια, θεωρείται ως ένα σημείο καταχώρησης ANSI και αντιμετωπίζονται με τον ίδιο τρόπο όπωςΤα Windows 95/98/Me. Επομένως, εάν θέλετε το αρχείο DLL να εκτελείται στα Windows 95 με υποστήριξη ANSI και των Windows NT/2000/XP με υποστήριξη UNICODE, πρέπει να εξαγάγετε δύο λειτουργίες: EntryPointW και EntryPoint. Τα Windows NT/2000/Me, θα ονομάζεται συνάρτηση EntryPointW με μια γραμμή εντολών UNICODE. σε Windows 95/98/Me, η συνάρτηση EntryPoint θα ονομάζεται με μια γραμμή εντολών ANSI.</entrypoint></entrypoint></entrypoint>
Εργαλεία Win95

Προειδοποίηση: Αυτό το άρθρο έχει μεταφραστεί με μηχανική μετάφραση

Ιδιότητες

Αναγνωριστικό άρθρου: 164787 - Τελευταία αναθεώρηση: 05/26/2011 08:24:00 - Αναθεώρηση: 3.0

Microsoft Win32 Application Programming Interface

  • kbdll kbFAQ kbinfo kbkernbase kbprogramming kbusage kbmt KB164787 KbMtel
Σχόλια