Πώς να αποκτήσετε έναν περιγραφέα

Πίνακας περιεχομένων:

Πώς να αποκτήσετε έναν περιγραφέα
Πώς να αποκτήσετε έναν περιγραφέα

Βίντεο: Πώς να αποκτήσετε έναν περιγραφέα

Βίντεο: Πώς να αποκτήσετε έναν περιγραφέα
Βίντεο: ΠΩΣ ΝΑ ΒΓΑΛΕΤΕ ΑΠΕΡΙΟΡΙΣΤΑ ΛΕΦΤΑ ΣΤΟ (GTA 5 story mode) 2024, Νοέμβριος
Anonim

Η διεπαφή προγραμματισμού εφαρμογών των λειτουργικών συστημάτων Windows αντιπροσωπεύεται από ένα σύνολο λειτουργιών. Όταν καλούνται, μπορούν να δημιουργηθούν διάφορα αντικείμενα (αρχεία, διεργασίες, νήματα, αντικείμενα συγχρονισμού κ.λπ.). Για να παρέχει επαρκώς αφηρημένη και ενοποιημένη πρόσβαση σε αυτά τα αντικείμενα, η αναγνώρισή τους πραγματοποιείται χρησιμοποιώντας περιγραφείς - "απρόσωπες" αριθμητικές τιμές.

Πώς να αποκτήσετε έναν περιγραφέα
Πώς να αποκτήσετε έναν περιγραφέα

Απαραίτητη

  • - μεταφραστής από μια γλώσσα προγραμματισμού που επιτρέπει τη χρήση του API των Windows ·
  • - πιθανώς Windows Platform SDK.

Οδηγίες

Βήμα 1

Λάβετε λαβές παραθύρων. Υπάρχουν πολλοί τρόποι για να το κάνετε αυτό. Η ακριβής μέθοδος εξαρτάται από τον τελικό στόχο.

Χρησιμοποιήστε τα API CreateWindow ή CreateWindowEx για να δημιουργήσετε ένα παράθυρο. Επιστρέφουν μια λαβή στην επιτυχία και NULL στην αποτυχία.

Αναζητήστε παράθυρα ανώτερου επιπέδου και θυγατρικά παράθυρα με διάφορες παραμέτρους χρησιμοποιώντας τις συναρτήσεις FindWindow και FindWindowEx, αντίστοιχα. Κατά την επιτυχή αναζήτηση, θα ληφθεί η λαβή του παραθύρου.

Καταμέτρηση παραθύρων με συναρτήσεις EnumWindows, EnumChildWindows, EnumThreadWindows. Οι λαβές των εντοπισμένων παραθύρων θα μεταβιβαστούν ως παράμετρος στη λειτουργία επανάκλησης.

Βρείτε τη λαβή στο παράθυρο που βρίσκεται σε μια συγκεκριμένη θέση στην οθόνη. Καλέστε μία από τις λειτουργίες: WindowFromPoint, ChildWindowFromPoint ή ChildWindowFromPointEx.

Βήμα 2

Λάβετε λαβές διαδικασίας. Δημιουργήστε μια νέα διαδικασία καλώντας τις λειτουργίες CreateProcess, CreateProcessAsUser, CreateProcessWithTokenW ή CreateProcessWithLogonW API. Όλοι επιστρέφουν μια λαβή στη νέα διαδικασία στο πεδίο hProcess της δομής PROCESS_INFORMATION, ο δείκτης στον οποίο πρέπει να περάσει σε αυτούς ως τελευταία παράμετρος.

Βρείτε τη λαβή της διαδικασίας με το γνωστό αναγνωριστικό της. Χρησιμοποιήστε την κλήση OpenProcess. Τα αναγνωριστικά όλων των τρεχουσών διαδικασιών μπορούν να ληφθούν, για παράδειγμα, χρησιμοποιώντας τις συναρτήσεις CreateToolhelp32Snapshot, Process32First και Process32Next της βιβλιοθήκης Βοήθεια εργαλείων.

Ανακτήστε την ψευδο λαβή της τρέχουσας διαδικασίας χρησιμοποιώντας τη συνάρτηση GetCurrentProcess.

Βήμα 3

Λάβετε περιγραφές νημάτων. Οι συναρτήσεις CreateThread και CreateRemoteThread δημιουργούν νήματα στη δική τους και στη διαδικασία κάποιου άλλου, αντίστοιχα, επιστρέφοντας τις λαβές τους. Μπορείτε να ανοίξετε ένα υπάρχον νήμα χρησιμοποιώντας το αναγνωριστικό του και να λάβετε την αντίστοιχη λαβή χρησιμοποιώντας τη λειτουργία OpenThread. Η ψευδο-λαβή της τρέχουσας ροής επιστρέφεται όταν καλείται GetCurrentThread.

Βήμα 4

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

Βήμα 5

Οι περιγραφείς αντικειμένων αντιστοίχισης αρχείων προς μνήμη επιστρέφονται μέσω κλήσεων στο CreateFileMapping και στο OpenFileMapping.

Βήμα 6

Οι συναρτήσεις CreateMutex, CreateSemaphore και CreateEvent δημιουργούν και οι συναρτήσεις OpenMutex, OpenSemaphore και OpenEvent ανοίγουν υπάρχοντα αντικείμενα συγχρονισμού (σίγαση, σηματοφόροι και συμβάντα). Όλοι επιστρέφουν περιγραφείς.

Βήμα 7

Όλα τα αντικείμενα GDI (όπως περιβάλλοντα συσκευών, γραμματοσειρές, πινέλα, μολύβια, εξαρτώμενο από υλικό και ανεξάρτητα bitmap, τμήματα DIB κ.λπ.) χειρίζονται μέσω των περιγραφών τους. Οι λειτουργίες για τη δημιουργία αντικειμένων GDI είναι πολλές και πρέπει να συμβουλευτείτε την ενότητα MSDN για πληροφορίες σχετικά με αυτά.

Βήμα 8

Ένας περιγραφέας που λαμβάνεται σε μια διαδικασία, κατά κανόνα, δεν μπορεί να χρησιμοποιηθεί σε άλλη. Ωστόσο, σε ορισμένες περιπτώσεις είναι δυνατή η απόκτηση διπλού περιγραφέα που αντιστοιχεί στο πρωτεύον αντικείμενο. Καλέστε το DuplicateHandle API για να αντιγράψετε τη λαβή. Αυτό μπορεί να χρησιμοποιηθεί, για παράδειγμα, για κοινή χρήση αντικειμένων ή καναλιών συγχρονισμού χωρίς όνομα μεταξύ πολλών διαδικασιών.

Συνιστάται: