อินเทอร์เฟซการเขียนโปรแกรมแอปพลิเคชันของระบบปฏิบัติการ Windows แสดงด้วยชุดของฟังก์ชัน เมื่อมีการเรียก อ็อบเจ็กต์ต่างๆ (ไฟล์ โปรเซส เธรด ออบเจ็กต์การซิงโครไนซ์ ฯลฯ) จะถูกสร้างขึ้นได้ เพื่อให้มีการเข้าถึงวัตถุเหล่านี้ที่เป็นนามธรรมและเป็นหนึ่งเดียวอย่างเพียงพอ การระบุของวัตถุจะดำเนินการโดยใช้ตัวอธิบาย - ค่าตัวเลข "ไม่มีตัวตน"
จำเป็น
- - นักแปลจากภาษาการเขียนโปรแกรมที่อนุญาตให้ใช้ Windows API
- - อาจเป็น Windows Platform SDK
คำแนะนำ
ขั้นตอนที่ 1
รับมือจับหน้าต่าง. มีหลายวิธีในการทำเช่นนี้ วิธีการที่แน่นอนขึ้นอยู่กับเป้าหมายสุดท้าย
ใช้ CreateWindow หรือ CreateWindowEx API เพื่อสร้างหน้าต่าง พวกเขาส่งคืนการจัดการกับความสำเร็จและ NULL เมื่อล้มเหลว
ค้นหาหน้าต่างระดับบนสุดและหน้าต่างย่อยตามพารามิเตอร์ต่างๆ โดยใช้ฟังก์ชัน FindWindow และ FindWindowEx ตามลำดับ เมื่อค้นหาสำเร็จ จะได้รับหมายเลขอ้างอิงหน้าต่าง
ระบุหน้าต่างด้วยฟังก์ชัน EnumWindows, EnumChildWindows, EnumThreadWindows หมายเลขอ้างอิงของหน้าต่างที่พบจะถูกส่งผ่านเป็นพารามิเตอร์ไปยังฟังก์ชันเรียกกลับ
หาที่จับของหน้าต่างซึ่งอยู่ที่ตำแหน่งเฉพาะบนหน้าจอ เรียกใช้ฟังก์ชันอย่างใดอย่างหนึ่ง: WindowFromPoint, ChildWindowFromPoint หรือ ChildWindowFromPointEx
ขั้นตอนที่ 2
รับการจัดการกระบวนการ สร้างกระบวนการใหม่โดยการเรียกฟังก์ชัน CreateProcess, CreateProcessAsUser, CreateProcessWithTokenW หรือ CreateProcessWithLogonW API พวกเขาทั้งหมดส่งคืนหมายเลขอ้างอิงไปยังกระบวนการใหม่ในฟิลด์ hProcess ของโครงสร้าง PROCESS_INFORMATION ตัวชี้ที่ควรส่งผ่านไปยังพารามิเตอร์เหล่านี้เป็นพารามิเตอร์สุดท้าย
ค้นหาหมายเลขอ้างอิงของกระบวนการโดยใช้ตัวระบุที่รู้จัก ใช้การโทร OpenProcess สามารถรับ ID ของกระบวนการที่ทำงานอยู่ทั้งหมดได้ ตัวอย่างเช่น การใช้ฟังก์ชัน CreateToolhelp32Snapshot, Process32First และ Process32Next ของไลบรารี Tool Help
ดึงหมายเลขอ้างอิงหลอกของกระบวนการปัจจุบันโดยใช้ฟังก์ชัน GetCurrentProcess
ขั้นตอนที่ 3
รับคำอธิบายของเธรด ฟังก์ชัน CreateThread และ CreateRemoteThread สร้างเธรดในกระบวนการของตนเองและของผู้อื่น ตามลำดับ โดยส่งคืนแฮนเดิลของพวกเขา คุณสามารถเปิดเธรดที่มีอยู่โดยใช้ตัวระบุและรับแฮนเดิลที่เกี่ยวข้องโดยใช้ฟังก์ชัน OpenThread ตัวจัดการหลอกของโฟลว์ปัจจุบันจะถูกส่งคืนเมื่อมีการเรียก GetCurrentThread
ขั้นตอนที่ 4
ตัวอธิบายสำหรับไฟล์ ไดเร็กทอรี ฟิสิคัลดิสก์ ดิสก์โวลุ่ม คอนโซล ทรัพยากรการสื่อสาร (พอร์ต I / O) สล็อตเมล และไปป์ที่มีชื่อสามารถรับได้โดยการเรียกใช้ฟังก์ชันเดียว CreateFile
ขั้นตอนที่ 5
ตัวอธิบายอ็อบเจ็กต์การแมปไฟล์กับหน่วยความจำจะถูกส่งกลับโดยการเรียก CreateFileMapping และ OpenFileMapping
ขั้นตอนที่ 6
สร้างฟังก์ชัน CreateMutex, CreateSemaphore และ CreateEvent และฟังก์ชัน OpenMutex, OpenSemaphore และ OpenEvent จะเปิดออบเจ็กต์การซิงโครไนซ์ที่มีอยู่ (mutexes สัญญาณและเหตุการณ์) พวกเขาทั้งหมดกลับคำอธิบาย
ขั้นตอนที่ 7
ออบเจ็กต์ GDI ทั้งหมด (เช่น บริบทของอุปกรณ์ ฟอนต์ แปรง ดินสอ บิตแมปที่ขึ้นกับฮาร์ดแวร์และอิสระ ส่วน DIB ฯลฯ) จะได้รับการจัดการผ่านตัวอธิบาย ฟังก์ชันสำหรับการสร้างวัตถุ GDI นั้นมีมากมาย และควรปรึกษาในส่วน MSDN สำหรับข้อมูลเกี่ยวกับวัตถุเหล่านี้
ขั้นตอนที่ 8
ตัวอธิบายที่ได้รับในกระบวนการหนึ่งตามกฎไม่สามารถใช้ในอีกกระบวนการหนึ่งได้ อย่างไรก็ตาม ในบางกรณี เป็นไปได้ที่จะได้รับตัวอธิบายที่ซ้ำกันซึ่งสอดคล้องกับออบเจกต์หลัก เรียก DuplicateHandle API เพื่อทำซ้ำหมายเลขอ้างอิง สามารถใช้ ตัวอย่างเช่น เพื่อแชร์ออบเจ็กต์การซิงโครไนซ์ที่ไม่มีชื่อหรือแชนเนลระหว่างหลายกระบวนการ