OVH Cloud OVH Cloud

Prb avec SetThreadContext/GetThreadContext

41 réponses
Avatar
Olivier
Bonjour,

J'ai un probleme avec les fonctions SetThreadContext et GetThreadContext
sous Windows XP cela fonctionne
mais sous Windows 2000 sur certains postes (apparemment du Pentium M 1.6
GHz)

Les registres Dr0, Dr1, Dr2, Dr3, Dr6, Dr7 ne sont pas restitués
correctement.
CONTEXT context;

context.ContextFlags = CONTEXT_DEBUG_REGISTERS;

context.Dr2=context.Dr0=0x123;

context.Dr3=context.Dr1=0x321;

context.Dr6=0xFFFF0FF0;

context.Dr7=0;

SetThreadContext(GetCurrentThread(), &context);

context.Dr2=context.Dr0=context.Dr3=context.Dr1=context.Dr7=context.Dr6=0;

context.ContextFlags=CONTEXT_DEBUG_REGISTERS;

GetThreadContext(GetCurrentThread(), &context);

// dr0 dr1 dr2 dr3 dr6 dr7 =0 -> c'est pas bon

Merci,

10 réponses

1 2 3 4 5
Avatar
Remi THOMAS
"Arnold McDonald (AMcD)" wrote in message
news:43deb619$0$4771$
Paul Bacelar wrote:

Et les deux clowns, pensez à lire les recommandations C2 de l'armée
américaine que WinNT/200/XP/2003 respectent depuis WinNT3.x.



Malgré ton titre ronflant de MVP, je doute que tu puisses te croire
habilité à insulter VB ou BLW qui sont parmi les intervenants les plus
compétents ici. Surtout quand on lit le niveau de tes réponses. Si, si,
relis-toi, tu verras les âneries que t'écris parfois en ces lieux.

PS : on en a rien à foutre que tu soies MVP. À quelques rares exceptions
près, dont quelques-uns traînent parfois ici (Debaene, Astor, etc.), la
grande majorité sont des guignols qui ne savent même pas ce qu'est un bit
! Je parle des MVP français bien sûr, pas des cadors américains. Alors,
inutile de mentionner ton titre à tout va, on s'en cogne.




Un petit coup de grisou Arnold?
Que Paul utilise une expression fantaisiste c'est une chose, mais que tu
t'en prenne aux autres je ne comprend pas bien.
Paul indique toujours la bonne piste et c'est certainement celui qui connait
le mieux l'ensemble des API Windows.

Je pense que je ne m'habituerais jamais au fait que tu sortes la grosse
artillerie sans justification de temps en temps.
Il faut apprendre a faire des réponses proportionnées. C'est cela l'art de
la discussion.

Rémi

--
Rémi THOMAS
MVP Visual C++ .NET
http://www.pixel-technology.com/rthomas
Avatar
halfwolf
Salut,

Vincent Burel wrote:
Comme j'ai peur que vous n'ayez pas les capacités de faire le petit
programme de démonstration dont je vous parle, je me permets un exemple de
code (ci-dessous) où la fonction "TestSiQQcToucheAMaPile" sort quand
quelqu'un, ou quelque chose, ou l'armée américaine, ou un vent solair e, ou
même un rayon télépathique, modifie le contenu de notre pile... Vou s verrez
d'ailleurs qu'aucune interruption ou task swapping ne modifie notre pile
(car ce genre de chose n'est pas gérer par la pile d'un thread user, ma is
sans doute je ne vous apprend rien)...



Je n'ai peut-être rien compris, mais je n'ai pas l'impression que vous
parlez de la même cause de modification de la pile.
De ce que je comprends de ce qu'a dit Paul :
Ton programme TestSiQQcToucheAMaPile stocke des données dans la pile
au delà du pointeur de pile. Le système ne peut donc pas savoir qu'il
y a des données utilisées à cette endroit.
Lorsqu'il fait du swap, le système va essayer de ne sauvegarder sur le
disque que le strict minimum, il risque donc de ne pas sauvegarder les
données sur la pile au delà du pointeur de pile (peut-être modulo la
page). Ces données seront donc perdues.
Lorsque le système restaure à partir du disque, il met à 0 toute la
zone mémoire qu'il n'a pas sauvegardée sur le disque.

Voilà donc ce que j'ai compris. Ce comportement ne me semblerait pas
absurde (même plutôt logique). Mais à présent est-ce la réalité ?
Est-ce quelqu'un pourrait confirmer ou infirmer ce propos ?

Si ce que dit Paul est vrai ton test doit marcher 99% du temps, c'est
le 1% qui serait problèmatique.
Pour que le test soit plus probant il faudrait stocker plus de données
pour être sûr d'avoir mis quelque chose sur une autre page et
provoquer un swap du processus (comment ?)entre tes 2 appels de
fonctions.

HalfWolf
Avatar
Vincent Burel
wrote in message
news:
Salut,

Vincent Burel wrote:
Comme j'ai peur que vous n'ayez pas les capacités de faire le petit
programme de démonstration dont je vous parle, je me permets un exemple




de
code (ci-dessous) où la fonction "TestSiQQcToucheAMaPile" sort quand
quelqu'un, ou quelque chose, ou l'armée américaine, ou un vent solaire,




ou
même un rayon télépathique, modifie le contenu de notre pile... Vous




verrez
d'ailleurs qu'aucune interruption ou task swapping ne modifie notre pile
(car ce genre de chose n'est pas gérer par la pile d'un thread user, mais
sans doute je ne vous apprend rien)...





Lorsqu'il fait du swap, le système va essayer de ne sauvegarder sur le
disque que le strict minimum, il risque donc de ne pas sauvegarder les
données sur la pile au delà du pointeur de pile (peut-être modulo la
page). Ces données seront donc perdues.



oui, c'est une probabilité, extrèmement faible, le système ne swap jamais la
pile sur disque dur, ou alors c'est que vous manquez cruellement de mémoire.

Lorsque le système restaure à partir du disque, il met à 0 toute la
zone mémoire qu'il n'a pas sauvegardée sur le disque.



Quand le système remonte de la RAM de la swap, il l'a mettrait à zero !?!,
pour moi ca n'a pas de sens... mais si qqn peut faire la preuve de cà, je
m'inclinerai.

Pour que le test soit plus probant il faudrait stocker plus de données
pour être sûr d'avoir mis quelque chose sur une autre page et
provoquer un swap du processus (comment ?)entre tes 2 appels de
fonctions.



Pas de probleme, dans ma fonction, déclare une chaine de 256 ko, et écrit
sur le dernier ko.

VB
Avatar
Bertrand Lenoir-Welter
Paul Bacelar :

Et les deux clowns, pensez à lire les recommandations C2 de l'armée
américaine que WinNT/200/XP/2003 respectent depuis WinNT3.x.



Très élégant. Si, si. Je vois que le sens de l'humour n'a pas été
l'atout majeur de ta qualif. Pour la forme, je connais à peu près que
pouic à la gestion de la pile par Windows et, étant plutôt du genre
applicatif, je me contrefous des specs de l'US Army. Le trait n'était
pas dirigé contre toi ni qui que ce soit. Dommage qu'il faille toujours
tout expliquer en détail, ici, ou ajouter des tonnes de smileys - pas
forcément mieux compris d'ailleurs.

Sur le fond, il ne me semble pas que tu aies apporté une explication qui
tienne la route à l'exercice pratique posé par Vincent. Je pense que ce
serait un assez bon préalable avant de le traiter de clown. Essaie ce
qu'il propose, tires-en les conclusions techniques qui te semblent les
plus probantes et reviens nous les exposer, avec ou sans humour. Et là
tu seras pris au sérieux même si tu te plantes. Si a contrario tu te
contentes de le prendre par le mépris et à grands renforts de références
C2 sans même t'être donné la peine d'essayer ou d'analyser l'objection
qui t'est opposée, t'as quelques chances de passer pour un guignol, tout
MVP que tu es. Ca me semble bêtement humain.

Bien à toi,
Avatar
Arnold McDonald \(AMcD\)
Remi THOMAS wrote:

Un petit coup de grisou Arnold?



Non, ça va merci.

Que Paul utilise une expression fantaisiste c'est une chose, mais que
tu t'en prenne aux autres je ne comprend pas bien.



Je m'en prends peut-être aux autres, mais je ne suis pas plus insultant que
le ton de Monsieur Bacelar. Je me mets à son niveau. Mais entre MVPs, tu
dois trouver que clown est seulement fantaisiste ? Pas moi.

Paul indique toujours la bonne piste et c'est certainement celui qui
connait le mieux l'ensemble des API Windows.



Il sort parfois des âneries énormes. CELUI qui connaît le mieux !? Ça va le
chou là ? Tu crois qu'il est le seul qui connaît les API de Windows ? Je te
rassure, Burel, Lenoir-Welter et autres sont loin, très loin d'être des
débutants dans le domaine. Personnellement, je code l'API Win32 depuis 1994,
je ne suis pas CELUI qui la connaît lemieux, mais je ne crains pas beaucoup
de MVP à son sujet, n'en doute pas.

Je pense que je ne m'habituerais jamais au fait que tu sortes la
grosse artillerie sans justification de temps en temps.
Il faut apprendre a faire des réponses proportionnées. C'est cela
l'art de la discussion.



Je suis d'accord avec toi. D'autant plus que respectant ton personnage et
tes compétences, je n'ai aucune envie de me brouiller avec toi. Simplement,
ils m'énervent un peu tes potes MVP ! Ils sont incapables d'aligner 3
phrases sans te casser leur "titre" ! C'est pénible. Qui plus est, je passe
une bonne heure trente sur les NG quotidiennement, dont pas mal de chez Kro
et j'insiste, la majorité sont largement incompétent et racontent que des
âneries. Et plus ils sont nazes et plus ils te jettent leur titre de MVP à
la figure. Tu sais, tous les MVP ne sont pas comme toi, il suffit de
répondre souvent sur les forums de Kro, d'aider, de connaître qui il faut,
de faire pas mal dans le sirupeux et le cirage et zou, t'es MVP hein. T'en a
même qui postent plus depuis des lustres sur les forums et qui le sont
toujours, automatiquement. Je ne fait pas partie de cette caste (je doit
être trop nul), mais j'y ai tellement de potes, je sais comment ça se passe
! Enfin, j'ai eu divers conflits avec pas mal d'entre-eux sur des forums de
sécu, de virus, etc. Ils n'y entendaient rien du tout, absolument rien du
tout . J'admet être grande gueule sur les forums, mais je connais ma partie.
Tous les MVP n'en ont pas la compétence loin de là, très loin de là.

Bien cordialement,

--
Arnold McDonald (AMcD)

http://arnold.mcdonald.free.fr/
Avatar
Paul Bacelar
"Arnold McDonald (AMcD)" wrote in message
news:43df5ef7$0$25425$
Remi THOMAS wrote:

Un petit coup de grisou Arnold?



Non, ça va merci.

Que Paul utilise une expression fantaisiste c'est une chose, mais que
tu t'en prenne aux autres je ne comprend pas bien.



Je m'en prends peut-être aux autres, mais je ne suis pas plus insultant
que le ton de Monsieur Bacelar. Je me mets à son niveau. Mais entre MVPs,
tu dois trouver que clown est seulement fantaisiste ? Pas moi.

Paul indique toujours la bonne piste et c'est certainement celui qui
connait le mieux l'ensemble des API Windows.



Il sort parfois des âneries énormes. CELUI qui connaît le mieux !? Ça va
le chou là ? Tu crois qu'il est le seul qui connaît les API de Windows ?
Je te rassure, Burel, Lenoir-Welter et autres sont loin, très loin d'être
des débutants dans le domaine. Personnellement, je code l'API Win32 depuis
1994, je ne suis pas CELUI qui la connaît lemieux, mais je ne crains pas
beaucoup de MVP à son sujet, n'en doute pas.

Je pense que je ne m'habituerais jamais au fait que tu sortes la
grosse artillerie sans justification de temps en temps.
Il faut apprendre a faire des réponses proportionnées. C'est cela
l'art de la discussion.



Je suis d'accord avec toi. D'autant plus que respectant ton personnage et
tes compétences, je n'ai aucune envie de me brouiller avec toi.
Simplement, ils m'énervent un peu tes potes MVP ! Ils sont incapables
d'aligner 3 phrases sans te casser leur "titre" ! C'est pénible. Qui plus
est, je passe une bonne heure trente sur les NG quotidiennement, dont pas
mal de chez Kro et j'insiste, la majorité sont largement incompétent et
racontent que des âneries. Et plus ils sont nazes et plus ils te jettent
leur titre de MVP à la figure. Tu sais, tous les MVP ne sont pas comme
toi, il suffit de répondre souvent sur les forums de Kro, d'aider, de
connaître qui il faut, de faire pas mal dans le sirupeux et le cirage et
zou, t'es MVP hein. T'en a même qui postent plus depuis des lustres sur
les forums et qui le sont toujours, automatiquement. Je ne fait pas partie
de cette caste (je doit être trop nul), mais j'y ai tellement de potes, je
sais comment ça se passe ! Enfin, j'ai eu divers conflits avec pas mal
d'entre-eux sur des forums de sécu, de virus, etc. Ils n'y entendaient
rien du tout, absolument rien du tout . J'admet être grande gueule sur les
forums, mais je connais ma partie. Tous les MVP n'en ont pas la compétence
loin de là, très loin de là.

Bien cordialement,

--
Arnold McDonald (AMcD)

http://arnold.mcdonald.free.fr/




J'ai ajouté MVP à ma signature sur le NG
"fr.comp.os.ms-windows.programmation" suite à la réponse bien plus agressive
de Mr Vincent Burel qui avait le condescendance de nous donner un programme
bateau montrant son dédain pour ma remarque sur le mécanisme de Zéro-Paging
de WindowNT, montrant par la même sa totale ignorance de ces mécanismes (et
le manque de clarté de ma remarque peut-être) mais aussi son "ouverture"
d'esprit.

La remarque qui a suivi de Mr Bertrand Lenoir-Welter se passe de
commentaire.

Le seul but de cet ajout était de monter à Mr Vincent Burel, que je
maîtrisais quand même assez le sujet pour éviter ses sarcasmes et pour que
ma remarque ait un peu plus d'écho sur son ego.

Si ma remarque sur le Zero-Paging et les recommandations C2 son inexactes,
je suis tout à fais ouvert aux remarques, pas aux sarcasmes ignares.

Pour tes remarques sur le programme MVP, je suis l'illustration que l'on
peut avoir une "grande gueule" et être MVP.

Si on passait plus de temps à s'aider les uns les autres plutôt qu'à voir
qui à la plus grosse "maîtrise" ;-)


--
Paul Bacelar
Avatar
Paul Bacelar
"Bertrand Lenoir-Welter" <bertrand-dot-2006-at-galaad-dot-net> wrote in
message news:43df4d71$0$19716$
Paul Bacelar :

Et les deux clowns, pensez à lire les recommandations C2 de l'armée
américaine que WinNT/200/XP/2003 respectent depuis WinNT3.x.



Très élégant. Si, si. Je vois que le sens de l'humour n'a pas été l'atout
majeur de ta qualif. Pour la forme, je connais à peu près que pouic à la
gestion de la pile par Windows et, étant plutôt du genre applicatif, je me
contrefous des specs de l'US Army. Le trait n'était pas dirigé contre toi
ni qui que ce soit. Dommage qu'il faille toujours tout expliquer en
détail, ici, ou ajouter des tonnes de smileys - pas forcément mieux
compris d'ailleurs.

Sur le fond, il ne me semble pas que tu aies apporté une explication qui
tienne la route à l'exercice pratique posé par Vincent. Je pense que ce
serait un assez bon préalable avant de le traiter de clown. Essaie ce
qu'il propose, tires-en les conclusions techniques qui te semblent les
plus probantes et reviens nous les exposer, avec ou sans humour. Et là tu
seras pris au sérieux même si tu te plantes. Si a contrario tu te
contentes de le prendre par le mépris et à grands renforts de références
C2 sans même t'être donné la peine d'essayer ou d'analyser l'objection qui
t'est opposée, t'as quelques chances de passer pour un guignol, tout MVP
que tu es. Ca me semble bêtement humain.

Bien à toi,



La fatigue aidant, mon sens de l'humour ne c'est pas déclanché sur ta
remarque (je cherche toujours les smiley ;-))))

Quand à mes explications, le post de halfwolf dans ce même fil semble
montrer qu'elles n'étaient pas si obscures ;-)))

Passons à des choses bien plus constructives.

Happy programming.
--
Paul Bacelar
MVP VC++
Avatar
Paul Bacelar
"Bertrand Lenoir-Welter" <bertrand-dot-2006-at-galaad-dot-net> wrote in
message news:43df4d71$0$19716$
Paul Bacelar :

Et les deux clowns, pensez à lire les recommandations C2 de l'armée
américaine que WinNT/200/XP/2003 respectent depuis WinNT3.x.



Très élégant. Si, si. Je vois que le sens de l'humour n'a pas été l'atout
majeur de ta qualif. Pour la forme, je connais à peu près que pouic à la
gestion de la pile par Windows et, étant plutôt du genre applicatif, je me
contrefous des specs de l'US Army. Le trait n'était pas dirigé contre toi
ni qui que ce soit. Dommage qu'il faille toujours tout expliquer en
détail, ici, ou ajouter des tonnes de smileys - pas forcément mieux
compris d'ailleurs.

Sur le fond, il ne me semble pas que tu aies apporté une explication qui
tienne la route à l'exercice pratique posé par Vincent. Je pense que ce
serait un assez bon préalable avant de le traiter de clown. Essaie ce
qu'il propose, tires-en les conclusions techniques qui te semblent les
plus probantes et reviens nous les exposer, avec ou sans humour. Et là tu
seras pris au sérieux même si tu te plantes. Si a contrario tu te
contentes de le prendre par le mépris et à grands renforts de références
C2 sans même t'être donné la peine d'essayer ou d'analyser l'objection qui
t'est opposée, t'as quelques chances de passer pour un guignol, tout MVP
que tu es. Ca me semble bêtement humain.

Bien à toi,



La fatigue aidant, mon sens de l'humour ne c'est pas déclanché sur ta
remarque (je cherche toujours les smiley ;-))))

Quand à mes explications, le post de halfwolf dans ce même fil semble
montrer qu'elles n'étaient pas si obscures ;-)))

Passons à des choses bien plus constructives.

Happy programming.


--
Paul Bacelar
Avatar
Paul Bacelar
"Vincent Burel" wrote in message
news:43df45d1$0$6657$

wrote in message
news:
Salut,

Vincent Burel wrote:
Comme j'ai peur que vous n'ayez pas les capacités de faire le petit
programme de démonstration dont je vous parle, je me permets un exemple




de
code (ci-dessous) où la fonction "TestSiQQcToucheAMaPile" sort quand
quelqu'un, ou quelque chose, ou l'armée américaine, ou un vent solaire,




ou
même un rayon télépathique, modifie le contenu de notre pile... Vous




verrez
d'ailleurs qu'aucune interruption ou task swapping ne modifie notre pile
(car ce genre de chose n'est pas gérer par la pile d'un thread user,
mais
sans doute je ne vous apprend rien)...





Lorsqu'il fait du swap, le système va essayer de ne sauvegarder sur le
disque que le strict minimum, il risque donc de ne pas sauvegarder les
données sur la pile au delà du pointeur de pile (peut-être modulo la
page). Ces données seront donc perdues.



oui, c'est une probabilité, extrèmement faible, le système ne swap jamais
la
pile sur disque dur, ou alors c'est que vous manquez cruellement de
mémoire.

Lorsque le système restaure à partir du disque, il met à 0 toute la
zone mémoire qu'il n'a pas sauvegardée sur le disque.



Quand le système remonte de la RAM de la swap, il l'a mettrait à zero !?!,
pour moi ca n'a pas de sens... mais si qqn peut faire la preuve de cà, je
m'inclinerai.

Pour que le test soit plus probant il faudrait stocker plus de données
pour être sûr d'avoir mis quelque chose sur une autre page et
provoquer un swap du processus (comment ?)entre tes 2 appels de
fonctions.



Pas de probleme, dans ma fonction, déclare une chaine de 256 ko, et écrit
sur le dernier ko.

VB





Es-tu d'accord que WindowsNT respecte les recommandations C2 de l'armée
américaine ?

Es-tu d'accord que ces recommandations obligent toutes pages de mémoire
physiques passant d'un processus utilisateur à un autre à avoir leur contenu
mis à zéro ?

Es-tu d'accord que toute page physique alloué sur un défaut de page au
sommet de la pile à un contenu entièrement à 0 par le mécanisme de la
précédente question ?

Tu as toi même admis que la pile peut être swappée, mais la VMA (Virtual
Memory Area) allouée à la pile peut aussi varier pour adapter le WorkingSet
du programme à la charge du système.

Si tu es d'accord avec les trois questions, tu es d'accord avec moi ;-)



Pour ton programme d'exemple, on a qu'à ajouter un appel à un APC User
(http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/queueuserapc.asp)
après ton appel à "WriteInStack".

Elle (la procédure) n'a qu'à utiliser la pile pour salopé t'a belle chaîne
au prochain retour d'appel système.

Toujours aussi convaincu du caractère immuable de la pile (et sans le
multi-threading ;-))) )


--
Paul Bacelar
Avatar
Vincent Burel
"Paul Bacelar" wrote in message
news:
"Bertrand Lenoir-Welter" <bertrand-dot-2006-at-galaad-dot-net> wrote in
message news:43df4d71$0$19716$
> Paul Bacelar :
>
Quand à mes explications, le post de halfwolf dans ce même fil semble
montrer qu'elles n'étaient pas si obscures ;-)))



Pas du Tout, son post ajoute des questions, auxquel vous devriez répondre si
vous vous yconnaissez tant que ca... Et dans ce que vous avez dit, je vous
signal que ne montrer aucunement que vous connaissez votre sujet.

dites nous donc :
- Si windows peut dans sa stratégie de gestion de la swap memory, invalider
des page de pile ? et apportez nous la preuve de ca.
- En quoi sauvegrader de la mémoire en swap, la remonté le moment venu pour
la mettre à zero, constitue une méthode pertinente !?

Vincent Burel
1 2 3 4 5