Nota: Como dato de interés, algo que yo también me pregunté en su momento:
No existe ingeniería inversa posible para obtener las firmas de los métodos, los datatypes de los parámetros.
Código
' *********************************************************************** ' Author : Elektro ' Last Modified On : 05-03-2014 ' *********************************************************************** ' <copyright file="Symbols.vb" company="Elektro Studios"> ' Copyright (c) Elektro Studios. All rights reserved. ' </copyright> ' *********************************************************************** #Region " Usage Examples " 'Private Sub Test() Handles MyBase.Load ' Dim dll As String = "C:\C++ lib x64.dll" ' Dim initialized As Boolean = False ' Dim hProcess As IntPtr = Nothing ' Try ' hProcess = Process.GetCurrentProcess().Handle ' If (Symbols.SymInitialize(hProcess, Nothing, True)) Then ' initialized = True ' Else ' Throw New System.ComponentModel.Win32Exception(System.Runtime.InteropServices.Marshal.GetLastWin32Error()) ' End If ' Dim baseOfDll As IntPtr = Symbols.SymLoadModuleEx(hProcess, IntPtr.Zero, dll, ' Nothing, 0, 0, IntPtr.Zero, ' Symbols.SymLoadModuleFlags.Module_And_Symbols) ' If (baseOfDll = IntPtr.Zero) Then ' Throw New System.ComponentModel.Win32Exception(System.Runtime.InteropServices.Marshal.GetLastWin32Error()) ' End If ' If Not Symbols.SymEnumSymbols( ' hProcess, ' baseOfDll, ' "*", ' AddressOf EnumSymProc, IntPtr.Zero ' ) Then ' Throw New System.ComponentModel.Win32Exception(System.Runtime.InteropServices.Marshal.GetLastWin32Error()) ' End If ' Catch ex As Exception ' Debug.WriteLine(ex.Message) ' Finally ' If (initialized) Then ' Symbols.SymCleanup(hProcess) ' End If ' End Try 'End Sub 'Friend Shared Function EnumSymProc(ByVal pSymInfo As IntPtr, ' ByVal SymbolSize As UInteger, ' ByVal UserContext As IntPtr) As Boolean ' Dim Symbol As New Symbols.SYMBOL_INFO With ' { ' .SizeOfStruct = System.Runtime.InteropServices.Marshal.SizeOf(GetType(Symbols.SYMBOL_INFO)) ' } ' System.Runtime.InteropServices.Marshal.PtrToStructure(pSymInfo, Symbol) ' Dim sb As New System.Text.StringBuilder ' With sb ' .AppendLine(String.Format("Address: {0}", CStr(Symbol.Address))) ' .AppendLine(String.Format("Flags: {0}", Symbol.Flags.ToString)) ' .AppendLine(String.Format("Index: {0}", CStr(Symbol.Index))) ' .AppendLine(String.Format("Module Base Address: {0}", CStr(Symbol.ModBase))) ' .AppendLine(String.Format("Name: {0}", Symbol.Name)) ' .AppendLine(String.Format("Size: {0}", CStr(Symbol.Size))) ' .AppendLine(String.Format("Tag: {0}", Symbol.Tag.ToString)) ' End With ' Debug.WriteLine(sb.ToString) ' Return True 'End Function #End Region #Region " Imports " Imports System.ComponentModel Imports System.Runtime.InteropServices #End Region Public Class Symbols #Region " P/Invoke " #Region " Methods " ''' <summary> ''' Initializes the symbol handler for a process. ''' MSDN Documentation: http://msdn.microsoft.com/en-us/library/windows/desktop/ms681351%28v=vs.85%29.aspx ''' </summary> ''' <param name="hProcess"> ''' A handle that identifies the caller. ''' This value should be unique and nonzero, but need not be a process handle. ''' However, if you do use a process handle, be sure to use the correct handle. ''' If the application is a debugger, use the process handle for the process being debugged. ''' Do not use the handle returned by 'GetCurrentProcess' when debugging another process, ''' because calling functions like 'SymLoadModuleEx' can have unexpected results. ''' </param> ''' <param name="UserSearchPath"> ''' The path, or series of paths separated by a semicolon (;), that is used to search for symbol files. ''' If this parameter is NULL, the library attempts to form a symbol path from the following sources: ''' The current working directory of the application. ''' The _NT_SYMBOL_PATH environment variable. ''' The _NT_ALTERNATE_SYMBOL_PATH environment variable. ''' </param> ''' <param name="fInvadeProcess"> ''' If this value is TRUE, enumerates the loaded modules for the process ''' and effectively calls the 'SymLoadModule64' function for each module.</param> ''' <returns> ''' If the function succeeds, the return value is <c>true</c>. ''' If the function fails, the return value is <c>false</c>. ''' </returns> <DllImport("dbghelp.dll", SetLastError:=True, CharSet:=CharSet.Auto)> Friend Shared Function SymInitialize( ByVal hProcess As IntPtr, ByVal UserSearchPath As String, <MarshalAs(UnmanagedType.Bool)> ByVal fInvadeProcess As Boolean ) As <MarshalAs(UnmanagedType.Bool)> Boolean End Function ''' <summary> ''' Deallocates all resources associated with the process handle. ''' MSDN Documentation: http://msdn.microsoft.com/en-us/library/windows/desktop/ms680696%28v=vs.85%29.aspx ''' </summary> ''' <param name="hProcess">A handle to the process that was originally passed to the 'SymInitialize' function.</param> ''' <returns> ''' If the function succeeds, the return value is <c>true</c>. ''' If the function fails, the return value is <c>false</c>. ''' </returns> <DllImport("dbghelp.dll", SetLastError:=True, CharSet:=CharSet.Auto)> Friend Shared Function SymCleanup( ByVal hProcess As IntPtr ) As <MarshalAs(UnmanagedType.Bool)> Boolean End Function ''' <summary> ''' Sets the options mask. ''' MSDN Documentation: http://msdn.microsoft.com/en-us/library/windows/desktop/ms681366%28v=vs.85%29.aspx ''' </summary> ''' <param name="SymOptions"></param> ''' <returns>The function returns the current options mask.</returns> <DllImport("dbghelp.dll", SetLastError:=True, CharSet:=CharSet.Auto)> Friend Shared Function SymSetOptions( ByVal SymOptions As SymOptionFlags ) As Integer End Function ''' <summary> ''' Loads the symbol table for the specified module. ''' MSDN Documentation: http://msdn.microsoft.com/en-us/library/windows/desktop/ms681353%28v=vs.85%29.aspx ''' </summary> ''' <param name="hProcess"> ''' A handle to the process that was originally passed to the 'SymInitialize' function. ''' </param> ''' <param name="hFile"> ''' The 'h fileA' handle to the file for the executable image. ''' This argument is used mostly by debuggers, where the debugger passes the file handle obtained from a debugging event. ''' A value of NULL indicates that 'hFile' is not used. ''' </param> ''' <param name="ImageName"> ''' The name of the executable image. ''' This name can contain a partial path, a full path, or no path at all. ''' If the file cannot be located by the name provided, the symbol search path is used. ''' </param> ''' <param name="ModuleName"> ''' A shortcut name for the module. ''' If the pointer value is NULL, the library creates a name using the base name of the symbol file. ''' </param> ''' <param name="BaseOfDll"> ''' The load address of the module. ''' If the value is zero, the library obtains the load address from the symbol file. ''' The load address contained in the symbol file is not necessarily the actual load address. ''' Debuggers and other applications having an actual load address should use the real load address when calling this function. ''' If the image is a '.pdb' file, this parameter cannot be zero. ''' </param> ''' <param name="DllSize"> ''' The size of the module, in bytes. ''' If the value is zero, the library obtains the size from the symbol file. ''' The size contained in the symbol file is not necessarily the actual size. ''' Debuggers and other applications having an actual size should use the real size when calling this function. ''' If the image is a '.pdb' file, this parameter cannot be zero. ''' </param> ''' <param name="Data"> ''' A pointer to a 'MODLOAD_DATA' structure that represents headers other than the standard PE header. ''' This parameter is optional and can be NULL. ''' </param> ''' <param name="Flags"> ''' This parameter can be one or more of the 'SymLoadModuleFlags' Enum values. ''' If this parameter is zero, the function loads the modules and the symbols for the module. ''' </param> ''' <returns> ''' If the function succeeds, the return value is the base address of the loaded module. ''' If the function fails, the return value is zero. To retrieve extended error information, call 'GetLastError'. ''' If the module is already loaded, the return value is zero and 'GetLastError' returns 'ERROR_SUCCESS'. ''' </returns> <DllImport("dbghelp.dll", SetLastError:=True, CharSet:=CharSet.Auto)> Friend Shared Function SymLoadModuleEx( ByVal hProcess As IntPtr, ByVal hFile As IntPtr, ByVal ImageName As String, ByVal ModuleName As String, ByVal BaseOfDll As Long, ByVal DllSize As Integer, ByVal Data As IntPtr, ByVal Flags As SymLoadModuleFlags ) As ULong End Function ''' <summary> ''' Enumerates all symbols in a process. ''' MSDN Documentation: http://msdn.microsoft.com/en-us/library/windows/desktop/ms680718%28v=vs.85%29.aspx ''' </summary> ''' <param name="hProcess"> ''' A handle to a process. ''' This handle must have been previously passed to the 'SymInitialize' function. ''' </param> ''' <param name="BaseOfDll"> ''' The base address of the module. ''' If this value is zero and 'Mask' contains an exclamation point (!), ''' the function looks across modules. ''' If this value is zero and 'Mask' does not contain an exclamation point, ''' the function uses the scope established by the 'SymSetContext' function. ''' </param> ''' <param name="Mask"> ''' A wildcard string that indicates the names of the symbols to be enumerated. ''' The text can optionally contain the wildcards, "*" and "?". ''' </param> ''' <param name="EnumSymbolsCallback"> ''' A 'SymEnumSymbolsProc' callback function that receives the symbol information. ''' </param> ''' <param name="UserContext"> ''' A user-defined value that is passed to the callback function, or NULL. ''' This parameter is typically used by an application to pass a pointer to a data structure ''' that provides context for the callback function. ''' </param> ''' <returns> ''' If the function succeeds, the return value is <c>true</c>. ''' If the function fails, the return value is <c>false</c>. ''' </returns> <DllImport("dbghelp.dll", SetLastError:=True, CharSet:=CharSet.Auto)> Friend Shared Function SymEnumSymbols( ByVal hProcess As IntPtr, ByVal BaseOfDll As ULong, <MarshalAs(UnmanagedType.LPWStr)> ByVal Mask As String, ByVal EnumSymbolsCallback As SymEnumSymbolsProc, ByVal UserContext As IntPtr ) As Boolean End Function #End Region #End Region #Region " Types " ''' <summary> ''' Contains symbol information. ''' MSDN Documentation: http://msdn.microsoft.com/en-us/library/windows/desktop/ms680686%28v=vs.85%29.aspx ''' </summary> <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Auto)> Public Class SYMBOL_INFO ''' <summary> ''' The size of the structure, in bytes. ''' This member must be set to sizeof(SYMBOL_INFO). ''' Note that the total size of the data is the SizeOfStruct + (MaxNameLen - 1) * sizeof(TCHAR). ''' The reason to subtract one is that the first character in the name is accounted for in the size of the structure. ''' </summary> Public SizeOfStruct As UInteger ''' <summary> ''' A unique value that identifies the type data that describes the symbol. ''' This value does not persist between sessions. ''' </summary> Public TypeIndex As UInteger ''' <summary> ''' This member is reserved for system use. ''' </summary> Public Reserved1 As ULong ''' <summary> ''' This member is reserved for system use. ''' </summary> Public Reserved2 As ULong ''' <summary> ''' The unique value for the symbol. ''' The value associated with a symbol is not guaranteed to be the same each time you run the process. ''' For PDB symbols, the index value for a symbol is not generated until ''' the symbol is enumerated or retrieved through a search by name or address. ''' The index values for all CodeView and COFF symbols are generated when the symbols are loaded. ''' </summary> Public Index As UInteger ''' <summary> ''' The symbol size, in bytes. ''' This value is meaningful only if the module symbols are from a pdb file; ''' otherwise, this value is typically zero and should be ignored. ''' </summary> Public Size As UInteger ''' <summary> ''' The base address of the module that contains the symbol. ''' </summary> Public ModBase As ULong ''' <summary> ''' The symbol information. ''' This member can be one or more of the 'SymFlag' values. ''' </summary> Public Flags As SymFlag ''' <summary> ''' The value of a constant. ''' </summary> Public Value As ULong ''' <summary> ''' The virtual address of the start of the symbol. ''' </summary> Public Address As ULong ''' <summary> ''' The register. ''' </summary> Public Register As UInteger ''' <summary> ''' The DIA scope. ''' For more information, see the Debug Interface Access SDK in the Visual Studio documentation. ''' (This resource may not be available in some languages and countries.) ''' </summary> Public Scope As UInteger ''' <summary> ''' The PDB classification. ''' These values are defined in 'Dbghelp.h' in the 'SymTagEnum' enumeration type. ''' </summary> Public Tag As SymTagEnum ''' <summary> ''' The length of the name, in characters, not including the null-terminating character. ''' </summary> Public NameLen As UInteger ''' <summary> ''' The size of the Name buffer, in characters. ''' If this member is 0, the Name member is not used. ''' </summary> Public MaxNameLen As UInteger ''' <summary> ''' The name of the symbol. ''' The name can be undecorated if the 'SYMOPT_UNDNAME' option is used with the 'SymSetOptions' function. ''' </summary> <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=1024I)> Public Name As String End Class #End Region #Region " Enumerations " ''' <summary> ''' Flags for 'SymLoadModuleEx' function. ''' MSDN Documentation: http://msdn.microsoft.com/en-us/library/windows/desktop/ms681353%28v=vs.85%29.aspx ''' </summary> <Description("Enum used as 'Flags' parameter of 'SymLoadModuleEx' function")> <FlagsAttribute()> Public Enum SymLoadModuleFlags As Integer ''' <summary> ''' Loads the module and the symbols for the module. ''' </summary> Module_And_Symbols = &H0UI ''' <summary> ''' Loads the module but not the symbols for the module. ''' </summary> Only_Module = &H4UI ''' <summary> ''' Creates a virtual module named 'ModuleName' at the address specified in 'BaseOfDll'. ''' To add symbols to this module, call the 'SymAddSymbol' function. ''' </summary> Virtual = &H1UI End Enum ''' <summary> ''' Contains symbol information. ''' MSDN Documentation: http://msdn.microsoft.com/en-us/library/windows/desktop/ms680686%28v=vs.85%29.aspx ''' </summary> <Description("Enum used as 'Flags' property of 'SYMBOL_INFO' Class")> <FlagsAttribute> Public Enum SymFlag As UInteger ''' <summary> ''' The Value member is used. ''' </summary> VALUEPRESENT = &H1UI ''' <summary> ''' The symbol is a register. ''' The Register member is used. ''' </summary> REGISTER = &H8UI ''' <summary> ''' Offsets are register relative. ''' </summary> REGREL = &H10UI ''' <summary> ''' Offsets are frame relative. ''' </summary> FRAMEREL = &H20UI ''' <summary> ''' The symbol is a parameter. ''' </summary> PARAMETER = &H40UI ''' <summary> ''' The symbol is a local variable. ''' </summary> LOCAL = &H80UI ''' <summary> ''' The symbol is a constant. ''' </summary> CONSTANT = &H100UI ''' <summary> ''' The symbol is from the export table. ''' </summary> EXPORT = &H200UI ''' <summary> ''' The symbol is a forwarder. ''' </summary> FORWARDER = &H400UI ''' <summary> ''' The symbol is a known function. ''' </summary> [FUNCTION] = &H800UI ''' <summary> ''' The symbol is a virtual symbol created by the 'SymAddSymbol' function. ''' </summary> VIRTUAL = &H1000UI ''' <summary> ''' The symbol is a thunk. ''' </summary> THUNK = &H2000UI ''' <summary> ''' The symbol is an offset into the TLS data area. ''' </summary> TLSREL = &H4000UI ''' <summary> ''' The symbol is a managed code slot. ''' </summary> SLOT = &H8000UI ''' <summary> ''' The symbol address is an offset relative to the beginning of the intermediate language block. ''' This applies to managed code only. ''' </summary> ILREL = &H10000UI ''' <summary> ''' The symbol is managed metadata. ''' </summary> METADATA = &H20000UI ''' <summary> ''' The symbol is a CLR token. ''' </summary> CLR_TOKEN = &H40000UI End Enum ''' <summary> ''' Specifies the type of symbol. ''' MSDN Documentation: http://msdn.microsoft.com/en-us/library/bkedss5f.aspx ''' </summary> <Description("Enum used as 'Tag' property of 'SYMBOL_INFO' Class")> <Flags> Public Enum SymTagEnum As UInteger ''' <summary> ''' Indicates that the symbol has no type. ''' </summary> Null ''' <summary> ''' Indicates that the symbol is an .exe file. ''' There is only one SymTagExe symbol per symbol store. ''' It serves as the global scope and does not have a lexical parent. ''' </summary> Exe ''' <summary> ''' Indicates the compiland symbol for each compiland component of the symbol store. ''' For native applications, SymTagCompiland symbols correspond to the object files linked into the image. ''' For some kinds of Microsoft Intermediate Language (MSIL) images, there is one compiland per class. ''' </summary> Compiland ''' <summary> ''' Indicates that the symbol contains extended attributes of the compiland. ''' Retrieving these properties may require loading compiland symbols. ''' </summary> CompilandDetails ''' <summary> ''' Indicates that the symbol is an environment string defined for the compiland. ''' </summary> CompilandEnv ''' <summary> ''' Indicates that the symbol is a function. ''' </summary> [Function] ''' <summary> ''' Indicates that the symbol is a nested block. ''' </summary> Block ''' <summary> ''' Indicates that the symbol is data. ''' </summary> Data ''' <summary> ''' Indicates that the symbol is for a code annotation. ''' Children of this symbol are constant data strings (SymTagData, LocIsConstant, DataIsConstant). ''' Most clients ignore this symbol. ''' </summary> Annotation ''' <summary> ''' Indicates that the symbol is a label. ''' </summary> Label ''' <summary> ''' Indicates that the symbol is a public symbol. For native applications, ''' this symbol is the COFF external symbol encountered while linking the image. ''' </summary> PublicSymbol ''' <summary> ''' Indicates that the symbol is a user-defined type (structure, class, or union). ''' </summary> UDT ''' <summary> ''' Indicates that the symbol is an enumeration. ''' </summary> [Enum] ''' <summary> ''' Indicates that the symbol is a function signature type. ''' </summary> FunctionType ''' <summary> ''' Indicates that the symbol is a pointer type. ''' </summary> PointerType ''' <summary> ''' Indicates that the symbol is an array type. ''' </summary> ArrayType ''' <summary> ''' Indicates that the symbol is a base type. ''' </summary> BaseType ''' <summary> ''' Indicates that the symbol is a typedef, that is, an alias for another type. ''' </summary> Typedef ''' <summary> ''' Indicates that the symbol is a base class of a user-defined type. ''' </summary> BaseClass ''' <summary> ''' Indicates that the symbol is a friend of a user-defined type. ''' </summary> [Friend] ''' <summary> ''' Indicates that the symbol is a function argument. ''' </summary> FunctionArgType ''' <summary> ''' Indicates that the symbol is the end location of the function's prologue code. ''' </summary> FuncDebugStart ''' <summary> ''' Indicates that the symbol is the beginning location of the function's epilogue code. ''' </summary> FuncDebugEnd ''' <summary> ''' Indicates that the symbol is a namespace name, active in the current scope. ''' </summary> UsingNamespace ''' <summary> ''' Indicates that the symbol is a virtual table description. ''' </summary> VTableShape ''' <summary> ''' Indicates that the symbol is a virtual table pointer. ''' </summary> VTable ''' <summary> ''' Indicates that the symbol is a custom symbol and is not interpreted by DIA. ''' </summary> Custom ''' <summary> ''' Indicates that the symbol is a thunk used for sharing data between 16 and 32 bit code. ''' </summary> Thunk ''' <summary> ''' Indicates that the symbol is a custom compiler symbol. ''' </summary> CustomType ''' <summary> ''' Indicates that the symbol is in metadata. ''' </summary> ManagedType ''' <summary> ''' Indicates that the symbol is a FORTRAN multi-dimensional array. ''' </summary> Dimension ''' <summary> ''' Indicates that the symbol represents the call site. ''' </summary> CallSite ''' <summary> ''' Indicates that the symbol represents the inline site. ''' </summary> InlineSite ''' <summary> ''' Indicates that the symbol is a base interface. ''' </summary> BaseInterface ''' <summary> ''' Indicates that the symbol is a vector type. ''' </summary> VectorType ''' <summary> ''' Indicates that the symbol is a matrix type. ''' </summary> MatrixType ''' <summary> ''' Indicates that the symbol is a High Level Shader Language type. ''' </summary> HLSLType End Enum ''' <summary> ''' Sets the options mask. ''' MSDN Documentation: http://msdn.microsoft.com/en-us/library/windows/desktop/ms681366%28v=vs.85%29.aspx ''' </summary> <Description("Enum used as 'SymOptions' parameter of 'SymSetOptions' function")> <Flags> Public Enum SymOptionFlags As Integer ''' <summary> ''' Enables the use of symbols that do not have an address. ''' By default, DbgHelp filters out symbols that do not have an address. ''' </summary> ALLOW_ZERO_ADDRESS = &H1000000 ''' <summary> ''' All symbol searches are insensitive to case. ''' </summary> CASE_INSENSITIVE = &H1 ''' <summary> ''' Pass debug output through OutputDebugString or the SymRegisterCallbackProc64 callback function. ''' </summary> ''' <summary> ''' Symbols are not loaded until a reference is made requiring the symbols be loaded. ''' This is the fastest, most efficient way to use the symbol handler. ''' </summary> DEFERRED_LOADS = &H4 ''' <summary> ''' Do not load an unmatched .pdb file. ''' Do not load export symbols if all else fails. ''' </summary> EXACT_SYMBOLS = &H400 ''' <summary> ''' Do not display system dialog boxes when there is a media failure such as no media in a drive. ''' Instead, the failure happens silently. ''' </summary> FAIL_CRITICAL_ERRORS = &H200 ''' <summary> ''' If there is both an uncompressed and a compressed file available, favor the compressed file. ''' This option is good for slow connections. ''' </summary> FAVOR_COMPRESSED = &H800000 ''' <summary> ''' Ignore path information in the CodeView record of the image header when loading a .pdb file. ''' </summary> IGNORE_CVREC = &H80 ''' <summary> ''' When debugging on 64-bit Windows, include any 32-bit modules. ''' </summary> INCLUDE_32BIT_MODULES = &H2000 ''' <summary> ''' Disable checks to ensure a file (.exe, .dbg., or .pdb) is the correct file. ''' Instead, load the first file located. ''' </summary> LOAD_ANYTHING = &H40 ''' <summary> ''' Loads line number information. ''' </summary> LOAD_LINES = &H10 ''' <summary> ''' All C++ decorated symbols containing the symbol separator "::" are replaced by "__". ''' This option exists for debuggers that cannot handle parsing real C++ symbol names. ''' </summary> NO_CPP = &H8 ''' <summary> ''' Prevents prompting for validation from the symbol server. ''' </summary> NO_PROMPTS = &H80000 ''' <summary> ''' Prevents symbols from being loaded when the caller examines symbols across multiple modules. ''' Examine only the module whose symbols have already been loaded. ''' </summary> NO_UNQUALIFIED_LOADS = &H100 ''' <summary> ''' DbgHelp will not load any symbol server other than SymSrv. SymSrv will not use the downstream store specified in _NT_SYMBOL_PATH. After this flag has been set, it cannot be cleared. ''' DbgHelp 6.0 and 6.1: This flag can be cleared. ''' DbgHelp 5.1: This value is not supported. ''' </summary> SECURE = &H40000 ''' <summary> ''' All symbols are presented in undecorated form. ''' This option has no effect on global or local symbols because they are stored undecorated. ''' This option applies only to public symbols. ''' </summary> UNDNAME = &H2 End Enum #End Region #Region " Delegates " ''' <summary> ''' An application-defined callback function used with the 'SymEnumSymbols', 'SymEnumTypes', and 'SymEnumTypesByName' functions. ''' </summary> ''' <param name="pSymInfo"> ''' A pointer to a 'SYMBOL_INFO' structure that provides information about the symbol. ''' </param> ''' <param name="SymbolSize"> ''' The size of the symbol, in bytes. ''' The size is calculated and is actually a guess. ''' In some cases, this value can be zero. ''' </param> ''' <param name="UserContext"> ''' The user-defined value passed from the 'SymEnumSymbols' or 'SymEnumTypes' function, or NULL. ''' This parameter is typically used by an application to pass a pointer to a data structure ''' that provides context information for the callback function.</param> ''' <returns> ''' If the function returns <c>true</c>, the enumeration will continue. ''' If the function returns <c>false</c>, the enumeration will stop. ''' </returns> Friend Delegate Function SymEnumSymbolsProc( ByVal pSymInfo As IntPtr, ByVal SymbolSize As UInteger, ByVal UserContext As IntPtr ) As Boolean #End Region End Class