PDA

View Full Version : مبتدی: Win32 چیست و آیا می توان از طریق C# با آن کار کرد؟



barnamenevisy
سه شنبه 04 آبان 1389, 11:22 صبح
سلام دوستان می خواستم ببینم win32چیه؟
و برنامه نویسی با اون چه جوریه؟
آیا یک زبان مستقله یا میشه توC# هم از اون استفاده کرد؟

vcldeveloper
سه شنبه 04 آبان 1389, 12:57 عصر
Win32 در واقع رابط برنامه نویسی سیستم عامل ویندوز در سطح User Mode هست، و یک زبان برنامه نویسی محسوب نمیشه. وقتی برای ویندوز به صورت Native کد می نویسید، در واقع دارید برای Win32 کد می نویسید.

دات نت در سال های ابتدایی حضورش بیشتر یک لایه روی Win32 بود، یعنی کلاس ها و متدهایی که ازشون در دات نت تحت ویندوز استفاده می کردید، با استفاده از توابع و روتین های Win32 پیاده سازی شده بودند. در سال های اخیر، در بسیاری از موارد سعی شده برای پیاده سازی کلاس های دات نت از Native API (توابع API سطح کرنل ویندوز که عموما به طور داخلی توسط مایکروسافت استفاده میشند، و بخش عمده ایی از آنها برای برنامه نویسان بیرون از مایکروسافت مستند سازی نشده) استفاده بشه، و بخش های کمتری از آن با Win32 پیاده سازی شدند.

همچنان Win32 رابط اصلی برنامه نویسی سیستم عامل ویندوز محسوب میشه، و با ارائه هر نسخه جدید از این سیستم عامل، قابلیت های جدید آن از طریق این رابط برنامه نویسی در اختیار برنامه نویسان قرار میگیره. بعد از مدتی کتابخانه هایی به فریم ورک هایی مثل دات نت اضافه میشه که از اون قابلیت های جدید بشه در دات نت هم در قالب کدهای Managed استفاده کرد.


میشه توC#‎‎ هم از اون استفاده کرد؟ بله، اگر به تابعی در Win32 نیاز داشته باشید که در دات نت معادلی برای آن تعریف نشده باشه، می تونید با استفاده از P/Invoke تابع Win32 مربوطه رو در C#‎ فراخوانی کنید. البته در این حالت، کد نوشته شده Unmanaged هست، و برنامه دات نت شما هم وابسته به سکوی ویندوز خواهد بود. البته اگر از کتابخانه ها یا کلاس های دات نت که توابعی از Win32 را Wrap می کنند (مثل Windows API Code Pack) هم استفاده کنید؛ باز برنامه شما وابسته به سکوی ویندوز خواهد بود، ولی کدتان Managed هست.

r00tkit
سه شنبه 04 آبان 1389, 15:12 عصر
سلام




اخیر، در بسیاری از موارد سعی شده برای پیاده سازی کلاس های دات نت از Native API (توابع API سطح کرنل ویندوز که عموما به طور داخلی توسط مایکروسافت استفاده میشند، و بخش عمده ایی از آنها برای برنامه نویسان بیرون از مایکروسافت مستند سازی نشده) استفاده بشه، و بخش های کمتری از آن با Win32 پیاده سازی شدند.
اکثر Native system services یا ( executive system services یا همون native api) ها در ntoskrnl.exe پیاده سازی و توسط ntdll.dll برای یوزرمود expose شدن و بقیه هم در خود ntdll.dll( سطح کاربر) پیاده سازی شده اند
که مستند سازی نشده اند ( هر چند منابعی براشون وجود داره (http://undocumented.ntinternals.net/) )

اما

Kernel support functions همون هایی هستن که فقط در kernel-mode می تونن invoke بشن ( که بعضی هاشون در WDK مستند شده اند برای کسایی مثل من (: )

حالا اقای کشاورز منظور شما کدوم گروه هستش؟ و کلا" منظور شما از اینکه "در سال های اخیر، در بسیاری از موارد سعی شده برای پیاده سازی کلاس های دات نت از Native APIاستفاده بشه" چیه ؟منبع؟

در هر صورت :

http://barnamenevis.org/forum/attachment.php?attachmentid=59060&stc=1&d=1288090485


کلاسهای .net یا همون FCL ها یه پوشش برای CLR (که یه com server هستش) هستن که انم طبیعتا" کد های سطح کرنل نیست !!!!

می شه شفاف سازی کنید

vcldeveloper
سه شنبه 04 آبان 1389, 21:34 عصر
کلا" منظور شما از اینکه "در سال های اخیر، در بسیاری از موارد سعی شده برای پیاده سازی کلاس های دات نت از Native APIاستفاده بشه" چیه ؟
مسلما منظور من این نبوده که دات نت به صورت Kernel Mode پیاده سازی شده. بلکه منظور این بوده که در بسیاری از موارد دات نت به جای استفاده از Win32 API از Native API استفاده کرده. توضیحات داخل پرانتز هم به این دلیل ذکر شدند که تصور نشه Native API همون Win32 API هست. چون در هر حال، هر دوی اینها کد native هستند، اما Native API یک اسم خاص هست.

درباره Native API هم بله، بسیاری از توابع تعریف شده در NtOsKernel.exe از طریق Ntdll.dll در user mode هم در دسترس هستند، و دات نت از این نسخه های قابل دسترس در user mode استفاده میکنه.


منبع؟
درباره پیاده سازی دات نت، قبلا مطلبی دیده بودم که به میزان استفاده از Win32 API در هر یک از نسخه های دات نت اشاره می کرد. ولی هر چی گشتم، پیداش نکردم.

gerailly
پنج شنبه 17 مرداد 1398, 09:45 صبح
دسترسی به توابع ویندوزیه که خودش هن با اونا کار میکنه فرضا بخوای دسکتاپ رو لاک کنی یا کلیک راست رو در فرمت غیرفعال کنی یا پنجره های چایلد دسکتاپ رو همه رو ببندی یا سر به سر دیگران بگذاری 😉