سؤال

في الآونة الأخيرة ، كنت أحاول استخدام W32PSERVICETABLE في سائقي. لقد استورد Wink32.lib في المصادر:

TARGETNAME=exp
TARGETTYPE=DRIVER
TARGETLIB=$(DDK_LIB_PATH)\win32k.lib
SOURCES=Experimental.cpp
MSC_WARNING_LEVEL=/W3

وأعلن في الملف المصدر:

extern PDWORD W32pServiceTable;

لكني أحصل على رمز دون حل. قرأت ، أن برامج تشغيل GDI فقط يمكنهم استخدام Wink32.lib. لكنني متأكد تمامًا من أن السائقين الآخرين يمكنهم أيضًا الارتباط بتلك المكتبة (لكنني لا أعرف كيف). سأكون ممتنًا جدًا إذا تمكنت من المساعدة.

هل كانت مفيدة؟

المحلول

هذا صحيح. يمكن فقط لبرامج تشغيل GDI استخدام Win32K.sys ، ويمكن ربط سائقي GDI بشكل ثابت فقط بـ Win32K.Sys.

والسبب في ذلك هو أن معظم Windows Internals يتم تحميلها في مساحة الذاكرة العالمية ، في حين يتم تحميل Win32k.sys في ما يسمى "مساحة الجلسة". بعض المعلومات هنا:

http://www.tar.hu/wininternals/ch07lev1sec4.html

بالكلمات البسيطة - يتم تحميل معظم مكونات Windows وبرامج التشغيل مرة واحدة للنظام بأكمله ، في حين يتم تحميل أشياء مثل إدارة واجهة المستخدم و GDI وما إلى ذلك - لكل جلسة.

هناك احتمال صعب خلال وقت التشغيل لسائقي GDI للحصول على مؤشرات لوظائف NTOSKRNL واستخدامها ، والعكس بالعكس - قد تستخدم برامج تشغيل WDM مع بعض الجهد وظائف Win32K (التي ستعمل في الجلسة الحالية).

على أي حال ، لماذا تريد الارتباط بـ Win32K؟ ما هي الوظيفة التي تحتاجها؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top