IDiaDataSourceEx::ValidatePdbEx
验证程序数据库 (.pdb) 文件是否与提供的签名信息匹配。
语法
HRESULT ValidatePdb (
LPCOLESTR pdbPath,
const GUID* pcsig70,
DWORD sig,
DWORD age,
BOOL* pfStripped
);
参数
pdbPath
[in] .pdb 文件的路径。
pcsig70
[in]要针对 .pdb 文件签名进行验证的全局唯一标识符 (GUID) 签名。 只有 Visual C++ 及更高版本中的 .pdb 文件具有 GUID 签名。
sig
[in] 要根据 .pdb 文件签名进行验证的 32 位签名。
age
[in] 要验证的年限值。 年龄不一定对应于任何已知的时间值,它用于确定 .pdb 文件是否与相应的.exe文件不同步。
pfStripped
[out]如果 PDB 与其他信息匹配,则此参数设置为指示是否已去除 PDB 的专用符号。 此值与 IDiaSymbol::get_isStripped 返回的值相同。 如果 PDB 与其他值不匹配,或者此方法失败,则不指定此参数。
返回值
如果成功,则返回 S_OK
;否则,返回错误代码。 下表显示了此方法的可能返回值。
值 | 说明 |
---|---|
E_PDB_NOT_FOUND |
无法打开文件或该文件的格式无效。 |
E_PDB_FORMAT |
尝试访问采用过时格式的文件。 |
E_PDB_INVALID_SIG |
签名不匹配。 |
E_PDB_INVALID_AGE |
年限不匹配。 |
E_INVALIDARG |
参数无效。 |
E_UNEXPECTED |
数据源已准备好。 |
备注
.pdb 文件同时包含签名值和年限值。 这些值复制在与 .pdb 文件匹配的 .exe 或 .dll 文件中。 此方法验证命名的 .pdb 文件的签名和年龄是否与所提供的值匹配,而无需加载 PDB 或准备使用它。
若要在不验证的情况下加载 .pdb 文件,请使用 IDiaDataSourceEx::loadDataFromPdbEx
该方法。
若要根据特定条件加载和验证 .pdb 文件,请使用 IDiaDataSourceEx::loadAndValidateDataFromPdbEx
该方法。
示例
IDiaDataSource* pSource; // Previously created data source.
DEFINE_GUID(expectedGUIDSignature,0x1234,0x5678,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08);
DWORD expectedFileSignature = 0x12345678;
DWORD expectedAge = 128;
BOOL fStripped = FALSE;
HRESULT hr;
hr = pSource->lValidatePdb( L"myprog.pdb",
&expectedGUIDSignature,
expectedFileSignature,
expectedAge,
&fStripped);
if (FAILED(hr))
{
// Report an error
}