Почему функция SymEnumerateSymbols некорректно работает в Windows Vista?
Код, импортирующий функцию:
[DllImport("Imagehlp.dll", CharSet = CharSet.Auto)]
private static extern bool SymEnumerateSymbols(IntPtr process, IntPtr baseDll, IntPtr callback, object context);
Код, формирующий указатель на функцию, который передаётся в параметр callback:
private delegate bool LoadSymbolDelegate(string name, IntPtr symbolAddress, uint size, IntPtr context);
...
IntPtr collector = Marshal.GetFunctionPointerForDelegate(new LoadSymbolDelegate(loader.LoadSymbol));
В Windows XP функция даёт вполне правдоподобный список экспортированных функций указанной DLL-ки. В Windows Vista функция выдаёт только первые буквы названий функций.
Источник: Stack Overflow на русском