programme qui tourne sous win98 et plante sous win xp
bonjour à tous,
tout d'abord,
le sujet.
un collègue, a fabriqué, pour moi, un .exe en vb4, celui ci fait appelle à une dll, écrite en assembleur (masm32), le tous fonctionne bien sous win98, mais "plante" sous win xp.
but du prog:
interrogation de l'état de la broche 6 (DSR) du port com1, à une fréquence élévée, au delà des capacités de réponse, de l'api win xp dédiée. ce qui explique que l'on n'y fasse pas appelle.
le programme "plante" lors de l'instruction "in" notament (boucle1 dans le .asm utiliser pour la dll) mais pas seulement.
l'explication mon collègue la connait:
on essaye de récupérer des informations, à des "emplacements" où il nous est "interdit d'accèder" par xp (protection)
la question maintenant:
comment devrait-on faire pour obtenir le résultat souhaité, tout en respectant les règles de programmation sous xp.
j'espère avoir été clair dans mon explication.
je place ci-dessous le contenu du .asm utilisé pour plus de clareté.
merci d'avance
cordialement
;
Code:
«««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
comment * -----------------------------------------------------
début fonction MESURE:
Cette fonction renvoie le nb changements etats de DSR (com1) [DWORD] ,pendant le
temps "nb_cycl" passé en argument [WORD] .
------------------------------------------------------- *
mesure PROC nb_cycl:WORD ;nb_cycl contient nb pas de 54.9 ms
LOCAL com_prec :BYTE
LOCAL count_fin :WORD ;heure fin
LOCAL count_deb :WORD ;heure debut
LOCAL count_com :DWORD ;nb changements etats DSR (com1)
pushcontext all
pushfd
;debut time dans bx
push ds
mov bx,040h
mov ds,bx
mov bx,word ptr ds:[06Ch]
pop ds
;fin time dans bx
mov count_deb,bx
.while count_deb==bx ;synchro compteur temps.
;debut time dans bx
push ds
mov bx,040h
mov ds,bx
mov bx,word ptr ds:[06Ch]
pop ds
;fin time dans bx
.endw
add bx,nb_cycl
mov count_fin,bx
mov count_com,0
;debut mesure nb cycles
push ds
mov dx,040h
mov ds,dx
mov dx,word ptr ds:[0000h] ; met adresse de COM1 dans dx.
pop ds
add dx,6 ; met adresse du registre d'etat de COM1 dans dx.
in al,dx
and al,20h ;mesure le bit 5 de COM1
mov com_prec,al
boucle1 LABEL near ;entree du test
in al,dx
and al,20h ;mesure le bit 5 de COM1
.if al != com_prec
mov com_prec,al
inc count_com
.endif
;debut time dans bx
push ds
mov bx,040h
mov ds,bx
mov bx,word ptr ds:[06Ch]
pop ds
;fin time dans bx
.if bx != count_fin
jmp boucle1
.endif
popfd
popcontext all
return count_com
mesure ENDP
Dernière modification par yoda1234 ; 23/06/2007 à 11h54.
Motif: ajout de balise
Re : programme qui tourne sous win98 et plante sous win xp
Partant du principe que le noyau NT (commun à tous les Windows récents) interdit à tout programme l'accès direct au matériel mais nécessite de l'attaquer à travers des drivers ou API spécifiques de l'OS je crains que tu sois mal à moins que quelqu'un t'explique comment recréer une API dédiée que Windows accepterait.
Rien ne sert de penser, il faut réfléchir avant - Pierre Dac
27/06/2007 - 08h50
serrepate
Date d'inscription
mars 2007
Âge
55
Messages
1 246
Re : programme qui tourne sous win98 et plante sous win xp
bonjour,
c'est pas gagné, tout reste à apprendre.
merci
cordialement