Bagaimana Cara Mendapatkan Deskriptor?

Daftar Isi:

Bagaimana Cara Mendapatkan Deskriptor?
Bagaimana Cara Mendapatkan Deskriptor?

Video: Bagaimana Cara Mendapatkan Deskriptor?

Video: Bagaimana Cara Mendapatkan Deskriptor?
Video: 9 Mencari berbagai deskriptor untuk persamaan HKSA 2024, November
Anonim

Antarmuka pemrograman aplikasi sistem operasi Windows diwakili oleh serangkaian fungsi. Saat dipanggil, berbagai objek (file, proses, utas, objek sinkronisasi, dll.) dapat dibuat. Untuk memberikan akses yang cukup abstrak dan terpadu ke objek-objek ini, identifikasi mereka dilakukan menggunakan deskriptor - nilai numerik "impersonal".

Bagaimana cara mendapatkan deskriptor?
Bagaimana cara mendapatkan deskriptor?

Diperlukan

  • - penerjemah dari bahasa pemrograman yang memungkinkan penggunaan Windows API;
  • - mungkin Windows Platform SDK.

instruksi

Langkah 1

Dapatkan pegangan jendela. Ada banyak cara untuk melakukan ini. Metode yang tepat tergantung pada tujuan akhir.

Gunakan API CreateWindow atau CreateWindowEx untuk membuat jendela. Mereka mengembalikan pegangan pada kesuksesan dan NULL pada kegagalan.

Cari jendela tingkat atas dan jendela anak dengan berbagai parameter masing-masing menggunakan fungsi FindWindow dan FindWindowEx. Pada pencarian yang berhasil, pegangan jendela akan diperoleh.

Hitung jendela dengan fungsi EnumWindows, EnumChildWindows, EnumThreadWindows. Pegangan jendela yang ditemukan akan diteruskan sebagai parameter ke fungsi panggilan balik.

Temukan pegangan ke jendela yang terletak pada posisi tertentu di layar. Panggil salah satu fungsi: WindowFromPoint, ChildWindowFromPoint, atau ChildWindowFromPointEx.

Langkah 2

Dapatkan pegangan proses. Buat proses baru dengan memanggil fungsi API CreateProcess, CreateProcessAsUser, CreateProcessWithTokenW, atau CreateProcessWithLogonW. Mereka semua mengembalikan pegangan ke proses baru di bidang hProcess dari struktur PROCESS_INFORMATION, penunjuk yang harus diteruskan kepada mereka sebagai parameter terakhir.

Temukan pegangan ke proses dengan pengidentifikasinya yang diketahui. Gunakan panggilan OpenProcess. ID dari semua proses yang berjalan dapat diperoleh, misalnya, menggunakan fungsi CreateToolhelp32Snapshot, Process32First, dan Process32Next dari pustaka Bantuan Alat.

Ambil pegangan semu dari proses saat ini menggunakan fungsi GetCurrentProcess.

Langkah 3

Dapatkan deskriptor utas. Fungsi CreateThread dan CreateRemoteThread masing-masing membuat utas dalam proses mereka sendiri dan orang lain, mengembalikan pegangannya. Anda dapat membuka utas yang ada menggunakan pengenalnya dan mendapatkan pegangan yang sesuai menggunakan fungsi OpenThread. Pegangan semu dari aliran saat ini dikembalikan saat GetCurrentThread dipanggil.

Langkah 4

Deskriptor untuk file, direktori, disk fisik, volume disk, konsol, sumber daya komunikasi (port I/O), slot surat, dan pipa bernama dapat diperoleh dengan memanggil satu fungsi, CreateFile.

Langkah 5

Deskriptor objek pemetaan file-ke-memori dikembalikan oleh panggilan ke CreateFileMapping dan OpenFileMapping.

Langkah 6

Fungsi CreateMutex, CreateSemaphore, dan CreateEvent membuat, dan fungsi OpenMutex, OpenSemaphore, dan OpenEvent membuka objek sinkronisasi yang ada (mutex, semaphore, dan event). Mereka semua mengembalikan deskriptor.

Langkah 7

Semua objek GDI (seperti konteks perangkat, font, kuas, pensil, bitmap yang bergantung pada perangkat keras dan independen, bagian DIB, dll.) dimanipulasi melalui deskriptornya. Fungsi untuk membuat objek GDI sangat banyak dan harus dikonsultasikan di bagian MSDN untuk informasi tentangnya.

Langkah 8

Deskriptor yang diperoleh dalam satu proses, sebagai suatu peraturan, tidak dapat digunakan di proses lain. Namun, dalam beberapa kasus dimungkinkan untuk mendapatkan deskriptor duplikat yang sesuai dengan objek utama. Panggil DuplicateHandle API untuk menduplikasi pegangan. Ini dapat digunakan, misalnya, untuk berbagi objek atau saluran sinkronisasi tanpa nama di antara beberapa proses.

Direkomendasikan: