DEBUG API Erreur: Descripteur non valide | Sujet: DEBUG API Erreur: Descripteur non valide par DalKiT sur 11/3/2006 10:53:04
Bonjour à tous,
Je suis en train de jouer avec les DEBUG API sous Windev. Je colle direct le code pour que vous voyez ou ca cloche:
1) Je déclare des structures propres au Debug API:
STARTUPINFOA est une structure
cb est un entier
lpReserved est un entier
lpDesktop est un entier
lpTitle est un entier
dwX est un entier
dwY est un entier
dwXSize est un entier
dwYSize est un entier
dwXCountChars est un entier
dwYCountChars est un entier
dwFillAttribute est un entier
dwFlags est un entier
wShowWindow est un entier sur 2 octets
cbReserved2 est un entier sur 2 octets
lpReserved2 est un entier
hStdInput est un entier
hStdOutput est un entier
hStdError est un entier
FIN
PROCESS_INFORMATION est une structure
hProcess est un entier
hThread est un entier
dwProcessId est un entier
dwThreadId est un entier
FIN
EXCEPTION_RECORD est une structure
ExceptionCode est un entier
ExceptionFlags est un entier
ExceptionRecord est un entier
ExceptionAddress est un entier
NumberParameters est un entier ExceptionInformation est un entier
FIN
EXCEPTION_DEBUG_INFO est une structure
ExceptionRecord est un EXCEPTION_RECORD dwFirstChance est un entier
FIN
LOAD_DLL_DEBUG_INFO est une structure
hFile est un entier
lpBaseOfDll est un entier
dwDebugInfoFileOffset est un entier
nDebugInfoSize est un entier
lpImageName est un entier
fUnicode est un entier
FIN
DEBUG_EVENT est une structure
dwDebugEventCode est un entier
dwProcessId est un entier
dwThreadId est un entier
uExceptionDI est un EXCEPTION_DEBUG_INFO
uLoadDll est une LOAD_DLL_DEBUG_INFO
FIN
2) Je déclare mes objets:
dbEvent est une DEBUG_EVENT
lpStartupInfo est un STARTUPINFOA
lpProcessInformation est un PROCESS_INFORMATION
3) Je cré le process:
RetourFonction=API("KERNEL32","CreateProcessA",lpApplicationName,"",Null,Null,Faux,OUBinaire(DEBUG_PROCESS,CREATE_NEW_CONSOLE), Null,Null,&lpStartupInfo,&lpProcessInformation)
SI RetourFonction=-1 ALORS
Erreur (ErreurInfo())
FinProgramme()
FIN
4) Si tout se passe bien je commence ma boucle de debuggage:
TANTQUE Vrai
API("KERNEL32","WaitForDebugEvent",&dbEvent,0)
SI (dbEvent:dwProcessId = lpProcessInformation:dwProcessId) ALORS
SELON dbEvent:dwDebugEventCode
CAS EXCEPTION_DEBUG_EVENT
SELON dbEvent:uExceptionDI:ExceptionRecord:ExceptionCode
FIN
CAS CREATE_PROCESS_DEBUG_EVENT
Trace ("create porocess: "+dbEvent:dwProcessId)
CAS LOAD_DLL_DEBUG_EVENT
Size est un entier=API ("KERNEL32","GetFileSize",dbEvent:uLoadDll:hFile,0)
//Size me retourne -1
// et l'erreur de erreurinfo est :
// GetLastError a renvoyé 6
// Descripteur non valide
FIN
FIN
Multitache(-1)
API ("KERNEL32","ContinueDebugEvent",dbEvent:dwProcessId,dbEvent:dwThreadId,DBG_CONTINUE)
FIN
dbEvent:uLoadDll:hFile est égal à 0 lors de l'appel à GetFileSize. Donc la j'avoue que je ne vois pas. J'ai fais la meme chose avec VC++ 6.0 et la ca marche nickel. J'ai également essayé d'utiliser avec windev l'API CreateFileA me retournant un Handle, puis GetFileSize. Ce test me retourne bien la taille de l executable.
Alors pourquoi dbEvent:uLoadDll:hFile (Qui correspond au handle du module chargé par executable) est égal à 0 ? Est ce une mauvaise déclaration d une structure ? Un passage de pointeur oublié ?
Merci d'avances pour vos réponses.
Bonne journée
|
|
Connexion
Menu
Chercher WDForge
Chercher Web
Partenaires
|