19-01-2007, 15:30
|
|
|
חבר מתאריך: 13.07.06
הודעות: 1,070
|
|
ועכשיו סיכום
כאשר קוראים לפונקציה LoadLibrary ה-DLL המבוקש מתווסף לרשימת ה-DLL-ים לטעינה.
לפני טעינת כל DLL מתבצעת נעילה בעזרת מעין Mutex פנימי (ה-"loader lock"). אם
ה-DLL כבר טעון לתהליך מסויים, הוא לא נטען מחדש.
בהנחה שה-DLL לא היה מקושר באופן משתמע ללקוח, אם זו טעינה ראשונה בעזרת
LoadLibrary ה-DLL נטען, ו-DllMain נקראת עם DLL_PROCESS_ATTACH (ומונה ההפניות
מועלה ב-1, ושווה ל-1 בעצם). DllMain נקראת עפ הפרמטר DLL_THREAD_ATTACH אם נוצר
הליך משנה לאחר הטעינה של ה-DLL. בכל מקרה, ה-DLL לא נטען לזיכרון יותר מפעם אחת.
אפשר לבדוק את הדברים הללו בעזרת 30 שורות קוד ודיבאגר, למי שחש צורך בלתי-נשלט לבדוק
שאני וה-MSDN לא עובדים עליו.
אלה הן העובדות הפשוטות, ומי שהן לא מוצאות חן בעיניו בבעיה לא קלה, כי למרות שניתן להתווכח
עם המציאות, קצת קשה לנצח בוויכוח כזה.
_____________________________________
סאשה הסוס, סוכן אוסינט.
|