نحوه دریافت توصیفگر

فهرست مطالب:

نحوه دریافت توصیفگر
نحوه دریافت توصیفگر

تصویری: نحوه دریافت توصیفگر

تصویری: نحوه دریافت توصیفگر
تصویری: بری شوارتز و تناقض انتخاب 2024, ممکن است
Anonim

رابط برنامه نویسی برنامه ای سیستم عامل های ویندوز با مجموعه ای از توابع نشان داده می شود. هنگامی که آنها فراخوانی می شوند ، می توان اشیا various مختلف (پرونده ها ، پردازش ها ، رشته ها ، اشیا syn هماهنگ سازی و غیره) را ایجاد کرد. برای دستیابی به اندازه کافی انتزاعی و یکپارچه به این اشیا ، شناسایی آنها با استفاده از توصیفگرها - مقادیر عددی "غیرشخصی" انجام می شود.

چگونه یک توصیفگر بدست آوریم
چگونه یک توصیفگر بدست آوریم

ضروری است

  • - یک مترجم از یک زبان برنامه نویسی که اجازه استفاده از Windows API را می دهد.
  • - احتمالاً Windows Platform SDK.

دستورالعمل ها

مرحله 1

دستگیره های پنجره را بگیرید. خیلی راه ها برای انجام دادن این وجود دارد. روش دقیق آن به هدف نهایی بستگی دارد.

برای ایجاد یک پنجره از API های CreateWindow یا CreateWindowEx استفاده کنید. آنها یک موفقیت را به دست می آورند و NULL را به شکست.

با استفاده از توابع FindWindow و FindWindowEx به ترتیب با پنجره های سطح بالا و پنجره های کودک را جستجو کنید. با جستجوی موفقیت آمیز ، دسته پنجره بدست می آید.

پنجره ها را با توابع EnumWindows ، EnumChildWindows ، EnumThreadWindows برشمارید. دستگیره های پنجره های یافت شده به عنوان یک پارامتر به عملکرد برگشت تماس منتقل می شوند.

دسته را به پنجره واقع در یک موقعیت خاص روی صفحه پیدا کنید. با یکی از توابع تماس بگیرید: WindowFromPoint ، ChildWindowFromPoint یا ChildWindowFromPointEx.

گام 2

دستگیره های فرآیند را دریافت کنید. با فراخوانی توابع CreateProcess ، CreateProcessAsUser ، CreateProcessWithTokenW یا CreateProcessWithLogonW فرآیند جدیدی ایجاد کنید. همه آنها یک دسته را به فرآیند جدید در قسمت hProcess ساختار PROCESS_INFORMATION برمی گردانند ، نشانگری که باید به عنوان آخرین پارامتر به آنها منتقل شود.

دسته را با شناسه شناخته شده آن پیدا کنید. از تماس OpenProcess استفاده کنید. شناسه کلیه فرایندهای در حال اجرا را می توان دریافت کرد ، به عنوان مثال با استفاده از توابع CreateToolhelp32Snapshot ، Process32First و Process32Next کتابخانه ابزار راهنما.

با استفاده از عملکرد GetCurrentProcess دسته شبه فرآیند فعلی را بازیابی کنید.

مرحله 3

توصیفات موضوعات را دریافت کنید. توابع CreateThread و CreateRemoteThread به ترتیب رشته ها را در روند خود و شخص دیگری ایجاد می کنند و دسته های آنها را برمی گردانند. می توانید یک نخ موجود را با استفاده از شناسه آن باز کرده و دسته مربوطه را با استفاده از عملکرد OpenThread دریافت کنید. هنگامی که GetCurrentThread فراخوانی می شود ، شبه دسته جریان بازگردانده می شود.

مرحله 4

توصیف کننده پرونده ها ، دایرکتوری ها ، دیسک های فیزیکی ، حجم دیسک ، کنسول ها ، منابع ارتباطی (پورت های ورودی / خروجی) ، اسلات های نامه و لوله های نامگذاری شده را می توانید با فراخوانی یک تابع واحد ، ایجاد کنید

مرحله 5

توصیف کنندگان شی object نقشه برداری از فایل به حافظه با تماس به CreatFileMapping و OpenFileMapping بازگردانده می شوند.

مرحله 6

توابع CreateMutex ، CreateSemaphore و CreateEvent ایجاد می کنند و عملکردهای OpenMutex ، OpenSemaphore و OpenEvent اشیاch هماهنگ سازی موجود (mutexes ، semaphores و رویدادها) را باز می کنند. همه آنها توصیف کننده را برمی گردانند.

مرحله 7

تمام اشیا G GDI (مانند متن دستگاه ، قلم ها ، برس ها ، مدادها ، بیت مپ های وابسته به سخت افزار و مستقل ، بخش های DIB و غیره) از طریق توصیفگرهای خود دستکاری می شوند. توابع ایجاد اشیا G GDI بسیار زیاد است و برای اطلاعات در مورد آنها باید در بخش MSDN مشورت شود.

مرحله 8

به طور معمول ، توصیفی که در یک فرآیند بدست می آید ، در فرآیند دیگر قابل استفاده نیست. با این حال ، در برخی موارد می توان توصیف تکراری مربوط به شی corresponding اصلی را بدست آورد. با DuplicateHandle API تماس بگیرید تا دسته را تکثیر کند. برای مثال ، می توان اشیا objects یا کانالهای هماهنگ سازی بدون نام را بین چندین فرآیند به اشتراک گذاشت.

توصیه شده: