SymGetModuleInfo 函式 (dbghelp.h)

擷取指定模組的模組資訊。

語法

BOOL IMAGEAPI SymGetModuleInfo(
  [in]  HANDLE           hProcess,
  [in]  DWORD            dwAddr,
  [out] PIMAGEHLP_MODULE ModuleInfo
);

參數

[in] hProcess

原本傳遞至 SymInitialize 函式之進程的控制碼。

[in] dwAddr

包含在 SymLoadModule64 函式所載入其中一個模組中的虛擬位址

[out] ModuleInfo

IMAGEHLP_MODULE64結構的指標。 SizeOfStruct成員必須設定為IMAGEHLP_MODULE64結構的大小。 不正確值會導致錯誤。

傳回值

如果函式成功,則傳回值為 TRUE

如果函式失敗,傳回值為 FALSE。 若要擷取擴充的錯誤資訊,請呼叫 GetLastError

備註

模組資料表會搜尋包含 dwAddr的模組。 模組是以每個模組的負載位址和大小為基礎。 如果找到有效的模組, 則 ModuleInfo 參數會填入模組的相關資訊。

此函式所使用的 IMAGEHLP_MODULE64 結構大小已隨著年而變更。 如果呼叫的 DbgHelp.dll 版本早于用來編譯呼叫程式碼的 DbgHelp.h,則此函式可能會失敗,並出現 錯誤碼ERROR_INVALID_PARAMETER。 呼叫系統版本 (%WinDir%\System32\DbgHelp.dll) 時,最常發生此情況。 呼叫系統版本 DbgHelp.dll 的程式碼必須使用該 Windows 版本的適當 SDK 或舊版的 SDK 進行編譯。

建議的模型是轉散發所需的 DbgHelp.dll 版本以及呼叫的軟體。 這可讓呼叫端使用最強固版本的 DbgHelp.dll,以及簡化升級。 在 Windows 套件的偵錯 工具 中,一律可以找到最新版本的 DbgHelp.dll。 一般規則是,編譯成使用舊版的程式碼一律會與較新版本搭配使用。

所有 DbgHelp 函式,例如此函式都是單一執行緒。 因此,從一個以上的執行緒呼叫此函式可能會導致非預期的行為或記憶體損毀。 若要避免這種情況,您必須將所有並行呼叫從一個以上的執行緒同步至此函式。

若要呼叫此函式的 Unicode 版本,請定義 DBGHELP_TRANSLATE_TCHARSymGetModuleInfoW64 在 DbgHelp.h 中定義如下。


BOOL
IMAGEAPI
SymGetModuleInfoW64(
    __in HANDLE hProcess,
    __in DWORD64 qwAddr,
    __out PIMAGEHLP_MODULEW64 ModuleInfo
    );

#ifdef DBGHELP_TRANSLATE_TCHAR
#define SymGetModuleInfo64   SymGetModuleInfoW64
#endif

此函式會取代 SymGetModuleInfo 函 式。 如需詳細資訊,請參閱 更新的平臺支援SymGetModuleInfo 在 DbgHelp.h 中定義如下。

#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
#define SymGetModuleInfo   SymGetModuleInfo64
#define SymGetModuleInfoW  SymGetModuleInfoW64
#else
BOOL
IMAGEAPI
SymGetModuleInfo(
    __in HANDLE hProcess,
    __in DWORD dwAddr,
    __out PIMAGEHLP_MODULE ModuleInfo
    );

BOOL
IMAGEAPI
SymGetModuleInfoW(
    __in HANDLE hProcess,
    __in DWORD dwAddr,
    __out PIMAGEHLP_MODULEW ModuleInfo
    );
#endif

需求

   
目標平台 Windows
標頭 dbghelp.h
程式庫 Dbghelp.lib
Dll Dbghelp.dll
可轉散發套件 DbgHelp.dll 5.1 或更新版本

另請參閱

DbgHelp 函式

IMAGEHLP_MODULE64

SymInitialize

SymLoadModule64