Page 3 sur 4

Publié : ven. 04/juin/2004 19:55
par hardy
Je suis pris ce week-end...
J'envoie un code lundi.

Publié : ven. 04/juin/2004 20:26
par gansta93
OK merci.

Publié : lun. 07/juin/2004 9:28
par hardy
Comme promis, un début de code pour examiner la mémoire.
Cela nécessite évidemment de compulser la documentation (site MSDN library de microsoft, et divers programmes)
sur les DLLs Windows

La procédure privilege (inutile ici, mais parfois...) sert à acquérir tous les privilèges. S'avère nécessaire pour accéder à certains processus,
qui ne peuvent par exemple pas être stoppés avec TerminateProcess_ sans l'acquisition de ceux-ci.
Sur l'exemple, le programme cherche l'id du processus word, s'il existe, et affiche les zones mémoires utilisées
par celui-ci. (uniquement celles assignées, pas réservées)

Code : Tout sélectionner

Declare privilege(pid)
privilege(GetCurrentProcessId_())

Structure PROCESSENTRY32 
    dwSize.l 
    cntUsage.l 
    th32ProcessID.l 
    th32DefaultHeapID.l 
    th32ModuleID.l 
    cntThreads.l 
    th32ParentProcessID.l 
    pcPriClassBase.l 
    dwFlags.l 
    szExeFile.b[260] 
EndStructure 

If OpenLibrary (0,"kernel32.dll")=0
	MessageRequester("","Echec initialisation")
	end
Endif

    s=CallFunction(0,"CreateToolhelp32Snapshot",274,0)
    If s
        DefType.PROCESSENTRY32 Proc32 
        Proc32\dwSize = SizeOf(PROCESSENTRY32) 
           If CallFunction(0,"Process32First",s, @Proc32) 
            if lcase(peeks(@Proc32\szExeFile))="winword.exe"
		idwin=proc32\th32ProcessID
	    endif
            While CallFunction (0, "Process32Next", s, @Proc32) 
            if lcase(peeks(@Proc32\szExeFile))="winword.exe"
		idwin=proc32\th32ProcessID
	    endif
            Wend
           EndIf
     EndIf 

if idwin=0:end:endif
debug "id word="+str(idwin)

Structure systeminfo
    dwOemID.l
    pagesize.l
    minaddress.l
    maxaddress.l
    dwActiveProcessorMask.l
    dwNumberOfProcessors.l
    dwProcessorType.l
    dwAllocationGranularity.l
    dwReserved.l
EndStructure

info.systeminfo
GetSystemInfo_(@info)

Structure meminfo
    baseaddress.l
    base.l
    allocprotect.l
    regionsize.l
    state.l
    protect.l
    type.l
EndStructure

debug "page size  "+Str(info\pagesize)
debug "min address  "+Str(info\minaddress)
debug "max address  "+Str(info\maxaddress)
debug "Word:"

ch=OpenProcess_($1F0FFF,1,idwin)
mem=0:bloc=0
pos=info\minaddress
pinfo.meminfo
While pos<info\maxaddress
VirtualQueryEx_(ch,pos,@pinfo,SizeOf(meminfo))

If pinfo\state=$1000
mem=mem+pinfo\regionsize
debug str(pos)+" à "+str(pos+pinfo\regionsize-1)+" : réservé"
if pinfo\type=$20000
debug "non partagée"
endif
EndIf
pos=pos+pinfo\regionsize
Wend
debug "total mémoire utilisée : "+str(mem)







Procedure privilege(pid)

ph=OpenProcess_($1F0FFF,1,pid)
OpenProcessToken_(ph,$20,@h)

Dim p.s(29)
p(0)="SeAssignPrimaryTokenPrivilege"
p(1)="SeAuditPrivilege"
p(2)="SeBackupPrivilege"
p(3)="SeChangeNotifyPrivilege"
p(4)="SeCreateGlobalPrivilege"
p(5)="SeCreatePagefilePrivilege"
p(6)="SeCreatePermanentPrivilege"
p(7)="SeCreateTokenPrivilege"
p(8)="SeDebugPrivilege"
p(9)="SeEnableDelegationPrivilege"
p(10)="SeImpersonatePrivilege"
p(11)="SeIncreaseBasePriorityPrivilege"
p(12)="SeIncreaseQuotaPrivilege"
p(13)="SeLoadDriverPrivilege"
p(14)="SeLockMemoryPrivilege"
p(15)="SeMachineAccountPrivilege"
p(16)="SeManageVolumePrivilege"
p(17)="SeProfileSingleProcessPrivilege"
p(18)="SeRemoteShutdownPrivilege"
p(19)="SeRestorePrivilege"
p(20)="SeSecurityPrivilege"
p(21)="SeShutdownPrivilege"
p(22)="SeSyncAgentPrivilege"
p(23)="SeSystemEnvironment"
p(24)="SeSystemProfilePrivilege"
p(25)="SeSystemtimePrivilege"
p(26)="SeTakeOwnershipPrivilege"
p(27)="SeTcbPrivilege"
p(28)="SeUndockPrivilege"
p(29)="SeUnsolicitedInputPrivilege"

Structure LI
low.l
high.l
EndStructure

Structure luidandattributes
pluid.LI
attrib.l
EndStructure

Structure privileges
count.l
privilege.luidandattributes
EndStructure

shut.LI
result=1
For i=0 To 29
LookupPrivilegeValue_(0,@p(i),@shut)

newprivilege.privileges
newprivilege\count=1
newprivilege\privilege\attrib=2
newprivilege\privilege\pluid\low=shut\low
newprivilege\privilege\pluid\high=shut\high

result=result*AdjustTokenPrivileges_(h,0,newprivilege,SizeOf(privileges),0,0)
Next i

ProcedureReturn result
EndProcedure

Publié : lun. 07/juin/2004 12:34
par nico
Il se passe rien chez moi en mode debug!

:(

Publié : lun. 07/juin/2004 19:01
par hardy
:?: Marche très bien chez moi (PB v3.91 beta1). (Evidemment, sur l'exemple, il faut avoir lancé Word...)
Quelqu'un d'autre pour essayer?

Publié : lun. 07/juin/2004 19:11
par Chris
Ca à l'air de fonctionner chez moi aussi avec PB 3.90!
En tout cas, ça renvoie tout un tas de valeurs.

Chris :)

Publié : lun. 07/juin/2004 21:17
par fweil
M'intéresse beaucoup ce truc.

Ca relie sans doute aux travaux d'interfaces qui sont maintenant très documentés sur le forum EN (en particulier par aXend)

Je mets ça de côté pour jeudi ouvendredi ... mais c'est un bon travail à mon humble avis (AMHA qu'on dis aussi AMHO et en anglais IMHO that's it !)

Slts

Publié : lun. 07/juin/2004 21:37
par comtois
Tiens justement depuis le temps que je le lis cet IMHO sur le forum anglais ,ça veut dire quoi ?

Publié : lun. 07/juin/2004 21:40
par fweil
In my humble Opinion ...

Dans mon humble opinion quoi !

Et mon Opinel Perce Ognoin tu traduis ça comment ?

L'Opinel étant spécifiquement thiernoise !

Publié : lun. 07/juin/2004 21:44
par comtois
ahah :) merci

Ce mot mystérieux m'intriguait depuis un moment :)

Petit tut des anglicismes abrégés

Publié : lun. 07/juin/2004 21:54
par fweil
Allez je commence la liste :

IMHO déjà donné (voir ci-dessus)

AFAIK : As Far As I Know
BTW : By The Way (par là-même)
RN : Right Now (pour l'instant)
QRN ( ancien idiome francophone pour dire qu'il y a des parasites dans la transmission ce qui n'a rien à voir mais tant pis fallait pas commencer)

et par extension :

du QRN sur Bretzelbourg : lire la BD de Franquin

Comme quoi dans le genre y a rien de mieux que les gars d'chez nous !

Et pis y "allo QC ici CQ" ! (Voir le film Daryl)

C'est quand même con ce monde qui développe des trucs à 43 lignes de code pour exprimer un truc qui sera ultérieurement réduit à un acronyme que tout le monde comprendra !

Le pire c'est des trucs comme 'Pas avec votre poncho Monsieur Ouille' ou encore 'Ca c'est de la boisson d'hommes' (respectivement Les visiteurs et Les tontons flingueurs).

Faut-y citer à chaque le chimpanzé qui a eu l'idée avant les primates que nous sommes encore ...

Bon j'aurai du faire un lien sur le Off moi ... avec mon truc de Ouf !

Ouf ? (Otherwise understand failure)

arf ...

Publié : lun. 07/juin/2004 22:30
par hardy
Au fait, pour fweil qui fréquente beaucoup le forum anglais : hardy(fr) = tonnelier (en)
(Au moment où je me suis inscrit sur le forum français, je relisais un passage de l'excellent Theory of Numbers de Hardy&Wright...)

Publié : lun. 07/juin/2004 22:58
par fweil
Des lauriers pour Hardy (jeu de mots bi-lingues) !

Publié : lun. 07/juin/2004 23:24
par comtois
ahahaha , il est déchainé ce soir :)



Bon moi je vais me coucher .

Publié : mar. 08/juin/2004 0:31
par Backup
hardy a écrit : je relisais un passage de l'excellent Theory of Numbers de Hardy&Wright...)
il donne les chiffre gagnant du loto ?? 8O :D