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

marcer17 Messages postés 2 Date d'inscription mercredi 26 janvier 2011 Statut Membre Dernière intervention 26 février 2011 - 24 févr. 2011 à 20:39
marcer17 Messages postés 2 Date d'inscription mercredi 26 janvier 2011 Statut Membre Dernière intervention 26 février 2011 - 26 févr. 2011 à 02:04
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

WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
26 févr. 2011 à 01:25
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
0
marcer17 Messages postés 2 Date d'inscription mercredi 26 janvier 2011 Statut Membre Dernière intervention 26 février 2011
26 févr. 2011 à 02:04
Merci pour l'information
0
Rejoignez-nous