Information supplémentaire au sujet d'un ThreadID lié à un process.

Signaler
Messages postés
2
Date d'inscription
mercredi 26 janvier 2011
Statut
Membre
Dernière intervention
26 février 2011
-
Messages postés
2
Date d'inscription
mercredi 26 janvier 2011
Statut
Membre
Dernière intervention
26 février 2011
-
Voici ma situation, lorsque j'exécute un installation de mon produit, via inno setup, j'utilise un DLL pour configurer ma base de donnée. Ce DLL utilise un DLL de liaison pour mon SGBD, mais celui-ci s'attache, via un thread, au process de l'exécutable de l'installation et non du DLL qui l'a appelé.

Le problème est que selon le numéro de série entré lors de l'installation, les DLL de liaison au SGBD peuvent différencier de version, donc je dois trouver une façon pour fermer le thread pour ainsi détruire le DLL de liaison et le remplacer par un autre.

En utilisant un logiciel externe "Process explorer" je me suis aperçu que l'on pouvait voir des informations supplémentaire relié à un thread qui est lié à un process (nom de DLL pas exemple).

J'ai trouvé ceci pour me donner la liste des ThreadID lié à un process :

function TForm1.GetTthreadsList(PID: Cardinal): Boolean;
var
SnapProcHandle: THandle;
NextProc : Boolean;
TThreadEntry : TThreadEntry32;
mThread: String;
begin
SnapProcHandle := CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
Result := (SnapProcHandle <> INVALID_HANDLE_VALUE);

if ( Result ) then
try
TThreadEntry.dwSize := SizeOf(TThreadEntry);
NextProc := Thread32First(SnapProcHandle, TThreadEntry);

while NextProc do
begin

if TThreadEntry.th32OwnerProcessID = PID then
begin
mThread := mThread + 'Thread ID
'+inttohex(TThreadEntry.th32ThreadID,8) + #13#10;
mThread := mThread + 'base priority
'+inttostr(TThreadEntry.tpBasePri) + #13#10;
mThread := mThread + 'delta priority
'+inttostr(TThreadEntry.tpBasePri) + #13#10;
mThread := mThread +
'-------------------------------------------------------------' + #13#10;
end;

NextProc := Thread32Next(SnapProcHandle, TThreadEntry);
end;
finally
CloseHandle(SnapProcHandle);
end;

ShowMessage(mThread);
end;

procedure TForm1.Button1Click(Sender: TObject)l
begin
GetTthreadsList(GetCurrentProcessId);
end;

Mais comment puis-je retrouver de plus ample information lié à ces threadID?

Merci

Marius Céré

2 réponses

Messages postés
1154
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
5 avril 2012
2
Bonsoir

Peut être du côté de GetThreadStartInformation.

Si je ne me trompe pas, le proto de la fonction doit être :
function GetThreadStartInformation(hThread:THandle; lpStartAddress, lpStartParameter : pointer):BOOL; stdcall; external 'kernel32.dll' name 'GetThreadStartInformation';


Cordialement.[hr]"L'imagination est plus importante que le savoir." Albert Einstein
Messages postés
2
Date d'inscription
mercredi 26 janvier 2011
Statut
Membre
Dernière intervention
26 février 2011

Merci pour l'information