Wenn Sie Bounds oder ähnliches nicht leisten können ...
Ein Trick, den ich verwendet habe, ist CreateFile
usw. mit meinem eigenen Wrapper zu ersetzen. Sie geben nicht nur den Handle-Wert zurück, sondern machen auch eine Aufzeichnung von __FILE__ und __LINE__, die zu jedem Handle gehören. Sie müssen auch CloseHandle
umbrechen, um sicherzustellen, dass ordnungsgemäß geschlossene Handles keine falsch positiven Ergebnisse auslösen.
Es ist so einfach wie:
// StdAfx.h
#include <windows.h>
#undef CreateFile
#if defined(UNICODE)
#define CreateFile DbgCreateFileW
#else
#define CreateFile DbgCreateFileA
#endif
// etc.
Sie dann DbgCreateFileW
und DbgCreateFileA
irgendwo in Ihrem Code definieren.
Dies setzt voraus, dass Sie die Kontrolle über die relevanten Codeabschnitte haben. Wenn nicht, können Sie etwas Ähnliches tun, indem Sie (zB) Microsoft Detours verwenden (Sie benötigen eine Lizenz, um es in ein freigegebenes Produkt aufzunehmen, aber ich glaube, dass es kostenlos für Debugging/Testen/etc. Verwendet werden kann)
Auf lange Sicht sollten Sie jedoch versuchen, Ihren Code so zu konvertieren, dass er einen "intelligenten" Handle-Typ verwendet, der automatisch CloseHandle
aufruft, wenn er den Gültigkeitsbereich verlässt.
wird dies Call-Stack von zugewiesenen Handles zwischen Snapshots geben? – paulm