לדלג לתוכן

פתרון סביבת דרייבר

הראיה הראשונה היא build שבוצע בפרויקט driver עם גרסאות SDK ו־WDK תואמות, ולא פלט של קומפיילר כללי. הראיה השנייה היא מודול טעון ב־VM עם symbols שמתאימים ל־image, והשלישית היא breakpoint שנפגע בשתי נקודות החיים. אין לייצר כתובות או פלט צפוי של debugger כאילו נמדדו; כל תלמיד שומר את הנתונים מן הריצה שלו.

ה־DriverEntry וה־Unload פועלים ב־PASSIVE_LEVEL לפי החוזה של השגרות, אבל ההקשר שנראה ב־stack אינו מודל לכל דרייבר. בהמשך שגרת completion יכולה לרוץ ב־IRQL אחר וב־thread שאינו המקור. לכן כתובת user-mode שנשמרה בשדה אינה נעשית תקפה בכל callback רק מפני שהיתה תקפה בכניסה הראשונה.

ספריית logging של user mode עלולה להשתמש בקבצים, locks ו־CRT שאינם זמינים בחוזה הזה. נשתמש בתחילה ב־DbgPrintEx מוגבל, ובהמשך ב־WPP או ETW בהתאם למודל. הקצאה באמצעות new רגיל דורשת runtime ומדיניות שלא הוגדרו; נשתמש ב־pool APIs ובעיטוף מתאים. עיבוד JSON מורכב או רשת יישומית שאינם חייבים לרוץ ב־kernel יכולים להישאר בשירות משתמש שמדבר עם ממשק דרייבר צר.