Voilà, de mon côté, je pensais à ça en fait :
short kernel__hd2full(HANDLE h, char buffer[18])
{
SYM_ENTRY* se;
SymFindFirst (NULL, FO_RECURSE);
do
{
se = SymFindNext ();
if (!se)
return 0;
} while (se.handle != h);
return sprintf (buffer, "%s\%s", SymFindFolderName (), se);
}
Ca me parait plus rapide, et la validité du résultat est garantie par le TIOS, il n'y a qu'une erreur possible (le handle n'appartient pas à un fichier, ou n'est pas alloué).
En effet, les deux
kernel::Hd2Sym font chacun un
SymFindFirst/SymFindNext, et le
kernel::Ptr2Hd fait carrément un lookup de la table des handles, avec calcul de l'adresse de fin du handle.