Link a raison, ton code est faux.
Tu commences par faire un HeapRealloc sur un bloc, ce qui peut invalider le SYM_ENTRY *, puis tu accèdes à sym->handle pour écrire (le résultat de ton HeapRealloc) dans ton SYM_ENTRY *. Ça marchera si et seulement si tu as verrouillé la VAT avec FolderOp préalablement (ce qui assure que le SYM_ENTRY * reste valide). Comme tu ne le fais pas dans ton extrait, ton extrait est faux.
Et je viens de me rendre compte qu'il y a encore un autre bogue: si le HeapRealloc échoue, il retournera 0, mais ton handle restera en mémoire. Résultat: ton fichier aura 0 comme handle, et le bloc du fichier deviendra de la mémoire leakée.


