IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

Problème CDC::BitBlt sous vista


Sujet :

MFC

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    303
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 303
    Par défaut Problème CDC::BitBlt sous vista
    Bonjour,

    Depuis la dernière mise à jour de Vista j'ai un soucis avec la fonction BitBlt.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    pDC->BitBlt(PicRect.left,PicRect.top,PicRect.Width(),PicRect.Height(),&MemDcbb,0,0,SRCCOPY);
    Ce code qui fonctionne très bien en XP, qui fonctionnait très bien en Vista me fait maintenant un écran bleu
    Rencontrez-vous le même problème?

    Merci

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 524
    Par défaut
    Avez-vous vérifié la qualité des paramètres passés à la méthode BitBlt?

  3. #3
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    un mauvais paramétrage ne devrait pas provoquer un écran bleu .
    de quelle mise à jour vista parles-tu ?
    je pencherai plutôt pour un problème avec le driver de la carte graphique.
    celui-ci est-il signé MS ?

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    303
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 303
    Par défaut
    Salut,

    Bon je suspecte une mise à jour de Vista, mais bien évidemment comme ce n'est pas une fonctionnalité que je teste tous les jours j'ai bien du mal à rattacher ce problème à une mise à jour particulière.
    Ce que je peux dire:
    - Cette fonction n'a pas été modifiée depuis juillet 2007.
    - elle est utilisée pour le Print Preview sans problème.
    - elle fait un écran bleu sur deux machines Vista différentes lors de l'appel pour un Print.
    - le fait de l'encadrer par un try{}catch(...) ne me permet pas d'éviter l'écran bleu.
    - elle ne crash pas sous XP.
    - je l'ai remplacé par la fonction TransparentBlt() avec les même paramètres et cela ne crash pas, mais l'image n'apparait pas à l'impression, mais bien au print preview.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    void CEnBitmap::DrawOnDC(CDC *pDC,CRect PicRect, bool bStretch/*=true*/, bool bTransparent/*=false*/)
    {
    	CBitmap BigBmp;
    	CDC MemDcbb,MemDc;
    	MemDc.CreateCompatibleDC(NULL);
    	CBitmap *pOldBmp = MemDc.SelectObject(this);
    	if (!pOldBmp) return;
     
    	BITMAP BM;
    	GetObject(sizeof(BM), &BM);			// Retrieve size of Bitmap
    	if (!bStretch)
    	{
    		PicRect.right = PicRect.left+BM.bmWidth;
    		PicRect.bottom = PicRect.top+BM.bmHeight;
    	}
    	//	StretchBlt is not suppoted by all device
    	//  Create a big Bitmap in memory, stretch the bitmap in this memory space 
    	//	and  use BitBlt to print this new Big bitmap
    	//
    	BigBmp.CreateCompatibleBitmap(pDC,PicRect.Width(),PicRect.Height());
    	MemDcbb.CreateCompatibleDC(NULL);
    	MemDcbb.SelectObject(&BigBmp);
    	MemDcbb.StretchBlt(0,0,PicRect.Width(),PicRect.Height(),&MemDc,0,0,BM.bmWidth,BM.bmHeight, SRCCOPY);
    	COLORREF cBck = RGB(255,255,255);
    	if(bTransparent)
    		cBck = GetPixel(0,0);
    	pDC->TransparentBlt(PicRect.left,PicRect.top,PicRect.Width(),PicRect.Height(),&MemDcbb,0,0,PicRect.Width(),PicRect.Height(),cBck);
    	//else
    	//{
    	//	//try{
    	//	//	pDC->BitBlt(PicRect.left,PicRect.top,PicRect.Width(),PicRect.Height(),&MemDcbb,0,0,SRCCOPY);
    	//	//}
    	//	//catch(...){};
    	//}
    }

  5. #5
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    par contre en voyant ton code ,une chose que j'ai constaté avec Vista c'est que GetPixel rame énormément au point de ne plus pouvoir l'utiliser.
    je vais voir si j'ai une portion de code avec bitblt que je pourrai tester avec vista.

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 524
    Par défaut
    J'ai assisté à une conférence sur DirectX10 et le message principale était que cette version faisait beaucoup moins de vérification sur les paramètres que les versions antérieurs et que s'était aux développer qu'incombé la responsabilité de faire un peu gaffe à leur appels.
    Vista utilise DirectX10 en interne au GDI DirectX10.

    Donc par simple déduction, un BSOD sur un bête BitBlt, moi je vérifierais les paramètres.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    303
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 303
    Par défaut
    Super, Merci,

    Pour ma part j'ai remplacé BitBlt par StretchBlt et cela fonctionne!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	pDC->StretchBlt(PicRect.left,PicRect.top,PicRect.Width(),PicRect.Height(),&MemDcbb,0,0,PicRect.Width(),PicRect.Height(), SRCCOPY);
    Malheureusement cette fonction n'est pas supportée par tous les devices (cfr.doc)

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    303
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 303
    Par défaut
    Citation Envoyé par bacelar Voir le message
    Donc par simple déduction, un BSOD sur un bête BitBlt, moi je vérifierais les paramètres.
    Les paramètres me semble corrects, l'impression fonctionne en XP, cela fonctionne en PrintPreview (Vista et XP), si je remplace BitBlt par StretchBlt avec les même paramètres l'impression fonctionne en Vista.

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    303
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 303
    Par défaut
    Citation Envoyé par farscape Voir le message
    salut,
    ...une chose que j'ai constaté avec Vista c'est que GetPixel rame énormément au point de ne plus pouvoir l'utiliser...
    As-tu une alternative au GetPixel pour obtenir la couleur d'un point?

  10. #10
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 524
    Par défaut
    Pouvez-vous générer un dump au moment du BSOD.
    Avec WinDbg ont devrait avoir des informations sur le driver incriminé et ainsi utiliser Google pour d'éventuelle anomalies.

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    303
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 303
    Par défaut
    Citation Envoyé par bacelar Voir le message
    Pouvez-vous générer un dump au moment du BSOD.
    Avec WinDbg ont devrait avoir des informations sur le driver incriminé et ainsi utiliser Google pour d'éventuelle anomalies.
    voila voila, moi je suis un peu largé

    PEB is paged out (Peb.Ldr = 7ffdb00c). Type ".hh dbgerr001" for details
    PEB is paged out (Peb.Ldr = 7ffdb00c). Type ".hh dbgerr001" for details

    MODULE_NAME: win32k

    FAULTING_MODULE: 82433000 nt

    DEBUG_FLR_IMAGE_TIMESTAMP: 48d1b9ef

    EXCEPTION_CODE: (NTSTATUS) 0xc0000005 - The instruction at 0x%08lx referenced memory at 0x%08lx. The memory could not be %s.

    FAULTING_IP:
    win32k!EngCopyBits+b06
    9579e868 833800 cmp dword ptr [eax],0

    TRAP_FRAME: b3f9dbd0 -- (.trap 0xffffffffb3f9dbd0)
    ErrCode = 00000000
    eax=00000000 ebx=fae18a38 ecx=b3f9dc18 edx=000aec81 esi=b3f9dc5c edi=b3f9dc6c
    eip=9579e868 esp=b3f9dc44 ebp=b3f9dd10 iopl=0 nv up ei pl zr na pe nc
    cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010246
    win32k!EngCopyBits+0xb06:
    9579e868 833800 cmp dword ptr [eax],0 ds:0023:00000000=????????
    Resetting default scope

    DEFAULT_BUCKET_ID: WRONG_SYMBOLS

    BUGCHECK_STR: 0x8E

    LAST_CONTROL_TRANSFER: from 82469590 to 825000e3

    STACK_TEXT:
    WARNING: Stack unwind information not available. Following frames may be wrong.
    b3f9d790 82469590 0000008e c0000005 9579e868 nt!KeBugCheckEx+0x1e
    b3f9db60 8248b5da b3f9db7c 00000000 b3f9dbd0 nt!ExfReleasePushLockShared+0xaa4
    b3f9dbe0 95793586 000aec80 00000000 fa853008 nt!Kei386EoiHelper+0x1d2
    b3f9dd10 8248aa1a f9c03008 ffa8e8b8 fa4a6748 win32k!EngStrokePath+0x2858
    b3f9dd44 776b9a94 badb0d00 0012c608 00000000 nt!ZwQueryLicenseValue+0xbd2
    b3f9dd48 badb0d00 0012c608 00000000 00000000 0x776b9a94
    b3f9dd4c 0012c608 00000000 00000000 00000000 0xbadb0d00
    b3f9dd50 00000000 00000000 00000000 00000000 0x12c608


    STACK_COMMAND: kb

    FOLLOWUP_IP:
    win32k!EngCopyBits+b06
    9579e868 833800 cmp dword ptr [eax],0

    SYMBOL_STACK_INDEX: 0

    SYMBOL_NAME: win32k!EngCopyBits+b06

    FOLLOWUP_NAME: MachineOwner

    IMAGE_NAME: win32k.sys

    BUCKET_ID: WRONG_SYMBOLS

    Followup: MachineOwner
    ---------

    1: kd> lmvm nt
    start end module name
    82433000 827ec000 nt (export symbols) ntkrpamp.exe
    Loaded symbol image file: ntkrpamp.exe
    Image path: ntkrpamp.exe
    Image name: ntkrpamp.exe
    Timestamp: Thu Sep 18 04:07:54 2008 (48D1B7FA)
    CheckSum: 00379F5D
    ImageSize: 003B9000
    File version: 6.0.6001.18145
    Product version: 6.0.6001.18145
    File flags: 0 (Mask 3F)
    File OS: 40004 NT Win32
    File type: 1.0 App
    File date: 00000000.00000000
    Translations: 0409.04b0
    CompanyName: Microsoft Corporation
    ProductName: Microsoft® Windows® Operating System
    InternalName: ntkrpamp.exe
    OriginalFilename: ntkrpamp.exe
    ProductVersion: 6.0.6001.18145
    FileVersion: 6.0.6001.18145 (vistasp1_gdr.080917-1612)
    FileDescription: NT Kernel & System
    LegalCopyright: © Microsoft Corporation. All rights reserved.
    1: kd> .trap 0xffffffffb3f9dbd0
    ErrCode = 00000000
    eax=00000000 ebx=fae18a38 ecx=b3f9dc18 edx=000aec81 esi=b3f9dc5c edi=b3f9dc6c
    eip=9579e868 esp=b3f9dc44 ebp=b3f9dd10 iopl=0 nv up ei pl zr na pe nc
    cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010246
    win32k!EngCopyBits+0xb06:
    9579e868 833800 cmp dword ptr [eax],0 ds:0023:00000000=????????

  12. #12
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 524
    Par défaut
    Si vous êtes certain de la qualité de vos paramètres, il reste peut-être un problème de driver.
    Le dump montre que c'est dans le kernel du système Win32 que l'incident intervient, je ne vois pas de driver dans la pile d'appel.
    Etes-vous sur d'avoir les symboles de Windows correctement installés et à jour ?
    Si vous n'avez pas les bases en assembleur intel, ça va être un peu galère, sinon c'est de l'assembleur de base avec un debuggeur symbolique très sympa qu'est WinDbg (si les symboles sont à jour).
    Je penche toujours sur un problème de driver avec une utilisation hors limite ou un peu border-line.

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    303
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 303
    Par défaut
    Citation Envoyé par bacelar Voir le message
    Si vous êtes certain de la qualité de vos paramètres, il reste peut-être un problème de driver.
    Le dump montre que c'est dans le kernel du système Win32 que l'incident intervient, je ne vois pas de driver dans la pile d'appel.
    Etes-vous sur d'avoir les symboles de Windows correctement installés et à jour ?
    .
    Non je n'ai probablement pas les symboles de windows correctement installés.
    Comment faire?
    Citation Envoyé par bacelar Voir le message
    Si vous n'avez pas les bases en assembleur intel, ça va être un peu galère, sinon c'est de l'assembleur de base avec un debuggeur symbolique très sympa qu'est WinDbg (si les symboles sont à jour).
    Je penche toujours sur un problème de driver avec une utilisation hors limite ou un peu border-line.
    *Problème de Driver je ne crois pas testé sur deux machines différentes avec le même symptôme.
    *Si erreurs de paramètres pourquoi est-ce que cela fonctionne sur un autre
    DC (print-preview) ou encore en XP. Cela fonctionne aussi en Vista avec les m^me paramètres mais en utilisant StrechBlt()

  14. #14
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 524
    Par défaut
    Citation Envoyé par alen Voir le message
    Non je n'ai probablement pas les symboles de windows correctement installés.
    Comment faire?
    http://msdn.microsoft.com/en-us/magazine/cc301459.aspx


    Citation Envoyé par alen Voir le message
    *Problème de Driver je ne crois pas testé sur deux machines différentes avec le même symptôme.
    Deux machines différentes, oui mais avec des drivers graphiques différents ?

    Citation Envoyé par alen Voir le message
    *Si erreurs de paramètres pourquoi est-ce que cela fonctionne sur un autre
    DC (print-preview) ou encore en XP. Cela fonctionne aussi en Vista avec les m^me paramètres mais en utilisant StrechBlt()
    Différence de comportement XP-Vista : différence d'implémentation du GDI entre XP et Vista.
    Différence de comportement entre les DC : les primitives ne sont pas les même donc les routines systèmes ne sont pas les même s et les drivers utilisés ne seront peut-être pas les mêmes.

  15. #15
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    303
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 303
    Par défaut
    Re-Bonjour,

    Dernière nouvelles du front...
    Je me suis trouvé une troisième machine Vista, completement différente des deux autres pour lequel j'ai également le BSOD.
    1*Asus G1 Vista Home Premium GeForce 7700
    1*Asus G1S Vista Home Premium GeForce 8600GT
    1*Dell D830 Vista Business QUadro NVS125M

    gdi32.dll (6.0.6001.18023) 22/02/2008
    GdiPlus.dll (5.2.6001.22170) 1/05/2008

    Ce que je voudrais c'est identifier clairement le problème.
    Est ce réellement un problème Vista?
    Ou un problème de mon code?
    Comment faire sans entrer dans un debug de driver?

  16. #16
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 524
    Par défaut
    Au risque de passer pour un casse-c***, mais les trois machines Vista ont des cartes graphiques Nvidia, c'est donc des plateformes équivalentes d'un point de vue driver de carte graphique. Une machine avec un carte graphique ATI ou Intel etc... serait plus pertinente.

  17. #17
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    303
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 303
    Par défaut
    Juste une petite question pour être bien clair: en quoi le driver de la carte graphique influe sur l'impression? Pour rappel (je dois être aussi un peu casse-c***) print-preview ok print sur HP Laser-Jet ou sur Primo-Pdf = BSOD
    Merci

  18. #18
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 524
    Par défaut
    Je me suis enduit d'erreur en lisant les descriptions des machines.

    Pour circonscrire les différentes causes possibles, je vous conseille d'avoir les symboles du système d'exploitation et des drivers à jour et d'utiliser WinDbg pour savoir dans quel driver il y a crash et pour connaître la pile d'appel.
    Ce n'est qu'une tâche sommes toutes assez légère et cela peut servir pour tous vos développement système. Le but n'est pas de débugger mais de connaître la cause exacte.

    Si vous avez des difficultés avec l'utilisation de WinDbg, postez ici un minidump(en PJ).
    On pourra l'interpréter pour vous ;-).

  19. #19
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    303
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 303
    Par défaut
    Citation Envoyé par bacelar Voir le message
    Si vous avez des difficultés avec l'utilisation de WinDbg, postez ici un minidump(en PJ).
    On pourra l'interpréter pour vous ;-).
    Cela serait vraiment super,bien Merci
    Fichiers attachés Fichiers attachés

  20. #20
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 524
    Par défaut
    WinDbg c'est considérablement simplifier au niveau de la configuration des chemins vers les symboles.
    Il suffit de faire définir
    _NT_SYMBOL_PATH = symsrv*symsrv.dll*CheminVersUnFolferLocal*http://msdl.microsoft.com/download/symbols et c'est tout.
    Avec cette configuration, WinDbg m'affiche avec ce dump
    Microsoft (R) Windows Debugger Version 6.9.0003.113 X86
    Copyright (c) Microsoft Corporation. All rights reserved.


    Loading Dump File [************************\Mini102108-01.dmp]
    Mini Kernel Dump File: Only registers and stack trace are available

    Symbol search path is: symsrv*symsrv.dll*d:\symbols*http://msdl.microsoft.com/download/symbols
    Executable search path is:
    Windows Server 2008 Kernel Version 6001 (Service Pack 1) MP (2 procs) Free x86 compatible
    Product: WinNt, suite: TerminalServer SingleUserTS Personal
    Built by: 6001.18145.x86fre.vistasp1_gdr.080917-1612
    Kernel base = 0x82433000 PsLoadedModuleList = 0x8254ac70
    Debug session time: Tue Oct 21 13:11:33.925 2008 (GMT+2)
    System Uptime: 0 days 3:36:56.430
    Loading Kernel Symbols
    .................................................................................................................................................................
    Loading User Symbols
    Je croyais que s'était un vista, il me dit que c'est un "Windows Server 2008 Kernel Version 6001 (Service Pack 1) MP (2 procs) Free x86 compatible". C'est bizarre non ?
    1: kd> !analyze -v
    *******************************************************************************
    * *
    * Bugcheck Analysis *
    * *
    *******************************************************************************

    KERNEL_MODE_EXCEPTION_NOT_HANDLED_M (1000008e)
    This is a very common bugcheck. Usually the exception address pinpoints
    the driver/function that caused the problem. Always note this address
    as well as the link date of the driver/image that contains this address.
    Some common problems are exception code 0x80000003. This means a hard
    coded breakpoint or assertion was hit, but this system was booted
    /NODEBUG. This is not supposed to happen as developers should never have
    hardcoded breakpoints in retail code, but ...
    If this happens, make sure a debugger gets connected, and the
    system is booted /DEBUG. This will let us see why this breakpoint is
    happening.
    Arguments:
    Arg1: c0000005, The exception code that was not handled
    Arg2: 9579e868, The address that the exception occurred at
    Arg3: b3f9dbd0, Trap Frame
    Arg4: 00000000

    Debugging Details:
    ------------------


    EXCEPTION_CODE: (NTSTATUS) 0xc0000005 - L'instruction "0x%08lx" emploie l'adresse m moire "0x%08lx". La m moire ne peut pas tre "%s".

    FAULTING_IP:
    win32k!DEVLOCKBLTOBJ::~DEVLOCKBLTOBJ+ac
    9579e868 833800 cmp dword ptr [eax],0

    TRAP_FRAME: b3f9dbd0 -- (.trap 0xffffffffb3f9dbd0)
    ErrCode = 00000000
    eax=00000000 ebx=fae18a38 ecx=b3f9dc18 edx=000aec81 esi=b3f9dc5c edi=b3f9dc6c
    eip=9579e868 esp=b3f9dc44 ebp=b3f9dd10 iopl=0 nv up ei pl zr na pe nc
    cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010246
    win32k!DEVLOCKBLTOBJ::~DEVLOCKBLTOBJ+0xac:
    9579e868 833800 cmp dword ptr [eax],0 ds:0023:00000000=????????
    Resetting default scope

    CUSTOMER_CRASH_COUNT: 1

    DEFAULT_BUCKET_ID: VISTA_DRIVER_FAULT

    BUGCHECK_STR: 0x8E

    PROCESS_NAME: TASelect3.exe

    CURRENT_IRQL: 0

    LAST_CONTROL_TRANSFER: from 9579fad9 to 9579e868

    STACK_TEXT:
    b3f9dc48 9579fad9 21212bc8 9579f4c5 0012c634 win32k!DEVLOCKBLTOBJ::~DEVLOCKBLTOBJ+0xac
    b3f9dd10 8248aa1a f9c03008 ffa8e8b8 fa4a6748 win32k!NtGdiBitBlt+0x615
    b3f9dd10 776b9a94 f9c03008 ffa8e8b8 fa4a6748 nt!KiFastCallEntry+0x12a
    WARNING: Frame IP not in any known module. Following frames may be wrong.
    0012c644 00000000 00000000 00000000 00000000 0x776b9a94


    STACK_COMMAND: kb

    FOLLOWUP_IP:
    win32k!DEVLOCKBLTOBJ::~DEVLOCKBLTOBJ+ac
    9579e868 833800 cmp dword ptr [eax],0

    SYMBOL_STACK_INDEX: 0

    SYMBOL_NAME: win32k!DEVLOCKBLTOBJ::~DEVLOCKBLTOBJ+ac

    FOLLOWUP_NAME: MachineOwner

    MODULE_NAME: win32k

    IMAGE_NAME: win32k.sys

    DEBUG_FLR_IMAGE_TIMESTAMP: 48d1b9ef

    FAILURE_BUCKET_ID: 0x8E_win32k!DEVLOCKBLTOBJ::_DEVLOCKBLTOBJ+ac

    BUCKET_ID: 0x8E_win32k!DEVLOCKBLTOBJ::_DEVLOCKBLTOBJ+ac

    Followup: MachineOwner
    ---------
    L'analyse montre une callstack des plus courte mais logique;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    STACK_TEXT:  
    b3f9dc48 9579fad9 21212bc8 9579f4c5 0012c634 win32k!DEVLOCKBLTOBJ::~DEVLOCKBLTOBJ+0xac
    b3f9dd10 8248aa1a f9c03008 ffa8e8b8 fa4a6748 win32k!NtGdiBitBlt+0x615
    b3f9dd10 776b9a94 f9c03008 ffa8e8b8 fa4a6748 nt!KiFastCallEntry+0x12a
    WARNING: Frame IP not in any known module. Following frames may be wrong.
    0012c644 00000000 00000000 00000000 00000000 0x776b9a94
    C'est dans le destructeur du DEVLOCKBLTOBJ appelé depuis NtGdiBitBlt elle même depuis KiFastCallEntry. Je ne vois pas de driver dans la boucle mais il faut lire la structure de DEVLOCKBLTOBJ.

    9579e857 8b07 mov eax,dword ptr [edi]
    9579e859 85c0 test eax,eax
    9579e85b 7425 je win32k!DEVLOCKBLTOBJ::~DEVLOCKBLTOBJ+0xc6 (9579e882)
    9579e85d ff7014 push dword ptr [eax+14h]
    9579e860 e832d1fdff call win32k!bDeleteSurface (9577b997)
    9579e865 8b461c mov eax,dword ptr [esi+1Ch]
    9579e868 833800 cmp dword ptr [eax],0 ds:0023:00000000=????????
    Un champ d'une des structures passées en paramètre de la fonction NtGdiBitBlt contient un pointeur à null et le kernel ne s'y attend pas, car il teste que le pointeur cible du pointeur dans la structure est null mais pas que le pointeur dans la structure le soit.
    Je n'ai plus accès au source de Windows depuis que je ne suis plus MVP et j'ai perdu la main pour récupérer le mapping offeset champs d'une structure du Kerlnel. Mais ces informations montrent clairement que le problème vient des paramètres de la fonction. Pensez aussi à vérifier "this" ( le DC dans notre cas, je crois). Je pencherais pour un DC mal initialisé ou déjà libéré.

    Si vous êtes vraiment sûr de vos paramètres, je peux toujours me dérouiller pour vous indiquer le champ du paramètre qui posse problème.

    Je pense qu'il serait intéressant de donner le champ qui pose problème à Microsoft pour qu'ils évaluent la pertinence de faire un contrôle sur ce paramètre.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Problème client DHCP sous Vista
    Par peter27x dans le forum Windows Vista
    Réponses: 2
    Dernier message: 23/11/2007, 09h58
  2. Problème avec Shellexecute sous Vista
    Par scara dans le forum Langage
    Réponses: 2
    Dernier message: 19/11/2007, 18h09
  3. [D6/XP] Problème de curseur sous Vista
    Par banban54 dans le forum EDI
    Réponses: 1
    Dernier message: 28/09/2007, 20h55
  4. problème de défragmentation sous Vista Ultimate
    Par !Jokeman! dans le forum Windows Vista
    Réponses: 5
    Dernier message: 02/06/2007, 17h51
  5. problème de connexion sous Vista
    Par nasser.h dans le forum Windows Vista
    Réponses: 1
    Dernier message: 16/02/2007, 08h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo