היכנס דרך Microsoft
היכנס או צור חשבון.
שלום,
בחר חשבון אחר.
יש לך חשבונות מרובים
בחר את החשבון שברצונך להיכנס באמצעותו.

תופעות

קריאות רקורסיביות לפונקציות מנהל חלון שיוצאו על-ידי USER32. DLL עשוי להחזיר ללא ביצוע הפעולה המבוקשת וללא הגדרת קוד שגיאה. דבר זה מתרחש לרוב היישומים עם הירארכיה מקוננת עמוק חלון. בין התופעות אתה עשוי להיתקל:

  • יישומים עם הירארכיה מקוננת עמוק חלון להיכשל לשנות גודל של חלונות צאצא כראוי בעת שינוי גודל של מסגרת החלון. Windows הם הועברו ו/או לשנות את גודלה על-ידי קריאה ל- MoveWindow, SetWindowPos או DeferWindowPos.

  • חלון הודעות אינן מופצות windows אב או צאצא windows כצפוי. DefWindowProc לא ייתכן אפשרות להפיץ בהצלחה הודעות חלון אב או חלונות צאצא של חלון קבלת ההודעה.

  • לשלוח הודעות חלון חלון על-ידי הקורא SendMessage, SendMessageTimeout או SendMessageCallback לא התקבלה על-ידי החלון שצוין.

בנוסף, יישומים אחרת לפעול כרגיל גם ייתכן שתיתקל באחת מהתופעות שתוארו לעיל, אם רכיבי hook WH_CALLWNDPROC או WH_CALLWNDPROCRET של חלון מוגדרים על הליכי משנה ביישום הנמצאות בבעלותך את windows. ניתן להגדיר רכיבי hook של חלון על הליך משנה מסוים או על כל הליכי המשנה של ממשק המשתמש על-ידי קריאה לפונקציה SetWindowsHookEx.

סיבה

התנהגות זו היא תוצאה של Windows כעת אין אפשרות להגדיל את המחסנית ליבה של הליך המשנה הקורא כדי לבצע את הפעולה המבוקשת. עקב טיפול בהליכים הדרושים ב- x64 מחסנית הליבה נוספים בסביבת Windows, מחסנית הליבה יכול לצרוך בקצב מהיר יותר מאשר ב- x86 ייצוא של סביבת Windows בעת ביצוע רקורסיבית קריאות לפונקציות מנהל חלון USER32. DLL. למרות התופעות המתוארות במאמר זה סביר יותר להתרחש ב- x64 פלטפורמות Windows, ייתכן עבור קריאות רקורסיביות לצרוך מחסנית הליבה של הליך משנה על x86 פלטפורמות Windows.

פתרון

הפתרונות הבאים יכולים לשמש כדי לעקוף בעיה זו

  1. שינוי גודל חלונות צאצא בעת טיפול בהודעות חלון WM_WINDOWPOSCHANGED במקום זאת העברת ההודעה ל- DefWindowProc.

  2. גודל חלונות צאצא באופן לא מסונכרן בעת שינוי גודל חלון האב במקום לשינוי גודל חלונות צאצא בעת עיבוד את WM_WINDOWPOSCHANGED או את ההודעה בחלון WM_SIZE.

  3. לעצב מחדש את יישום ממשק משתמש כדי להפחית את עומק חלון מקוננים.

מידע נוסף

חלקים של מערכת המשנה Win32 מיושמים במנהל התקן במצב ליבה (WIN32K. SYS). קריאות לפונקציות שיוצאו על-ידי USER32. DLL כדי לשנות את המצב של חלון, כולל הגודל והמיקום שלו, יתקשר לתוך WIN32K. SYS כדי לבצע את הפעולה המבוקשת. פונקציות המשנים את המצב של חלון בדרך כלל לגרום להודעות חלון הנשלחת אל החלון משתנה, שבו WIN32K. SYS גורם הסבר מצב משתמש כדי לקרוא לפרוצדורה חלון של החלון שינוי. לדוגמה, WIN32K. SYS ישלח חלון הודעה חלון WM_WINDOWPOSCHANGING ו- WM_WINDOWPOSCHANGED חלון הודעה בעת שינוי גודל ו/או המיקום של החלון על-ידי קריאה לפונקציה SetWindowPos. DefWindowProc ישלח החלון שצוין כאשר יקראו לו עם הודעה WM_WINDOWPOSCHANGED הודעה WM_SIZE ואת גודלו של החלון השתנה. יישומים בדרך כלל לשנות גודל חלונות צאצא כאשר חלון האב מקבל הודעה חלון WM_WINDOWPOSCHANGED או WM_SIZE, אשר מנחה לביצוע שיחות רקורסיבית לתוך WIN32K. SYS עבור הירארכיות חלון מקוננות עמוק. יישומים שפועלים אחרת בדרך כלל עלול להיתקל גם התופעות המתוארות במאמר זה כאשר רכיבי hook WH_CALLWNDPROC או WH_CALLWNDPROCRET מוגדרים על הליכי משנה בתהליך. הגורם לכך הוא שטח מחסנית הליבה נוספים שהוא שנצרכו מתי WIN32K. SYS מטפל קריאה לשגרות hook. קריאה SendMessage לשלוח הודעה חלון לחלון בבעלותו של הליך המשנה הקורא יתקשר בדרך כלל הפרוצדורה חלון של חלון קבלת ההודעה מבלי שיהיה עליך לפנות אל WIN32K. SYS. עם זאת, SendMessage יתקשר לתוך WIN32K. SYS אם קיימים רכיבי hook של WH_CALLWNDPROC או WH_CALLWNDPROCRET מפעיל hook ערכת בהליך הקריאה, כמו WIN32K. SYS מנהל את רכיבי hook ונקודות האחיזה קריאה לשגרות hook. כפי שצוין לעיל, DefWindowProc ישלח החלון שצוין כאשר יקראו לו עם הודעה WM_WINDOWPOSCHANGED הודעה WM_SIZE ואת גודלו של החלון השתנה. רכיב hook של WH_CALLWNDPROC או WH_CALLWNDPROCRET של תגרום השיחה SendMessage DefWindowProc גורם למעבר למצב ליבה כדי לקרוא לשגרות hook. לשינוי גודל חלונות צאצא בעת טיפול בהודעות חלון WM_WINDOWPOSCHANGED במקום WM_SIZE חלון הודעות יפחיתו שימוש במחסנית הליבה על-ידי ביטול הצורך SendMessage למעבר למצב ליבה בסדר לקרוא לשגרות hook. מפתחים של יישומי Windows בטפסים שבהם אתה נתקל בבעיה זו שמומלץ לעיין במאמר KB 953934לקבלת מידע נוסף.

זקוק לעזרה נוספת?

מעוניין באפשרויות נוספות?

גלה את יתרונות המנוי, עיין בקורסי הדרכה, למד כיצד לאבטח את המכשיר שלך ועוד.

קהילות עוזרות לך לשאול שאלות ולהשיב עליהן, לתת משוב ולשמוע ממומחים בעלי ידע עשיר.

האם מידע זה היה שימושי?

עד כמה אתם מרוצים מאיכות השפה?
מה השפיע על החוויה שלך?
בלחיצה על 'שלח', אתה מאפשר למשוב שלך לשפר מוצרים ושירותים של Microsoft. מנהל ה-IT שלך יוכל לאסוף נתונים אלה. הצהרת הפרטיות.

תודה על המשוב!

×