IDiaDataSourceEx::loadAndValidateDataFromPdbEx

打开并验证程序数据库 (.pdb) 文件是否与提供的签名信息匹配,并将 .pdb 文件准备为调试数据源,并预提取可选记录。

语法

HRESULT loadAndValidateDataFromPdbEx ( 
   LPCOLESTR pdbPath,
   GUID*     pcsig70,
   DWORD     sig,
   DWORD     age,
   BOOL      fPdbPrefetching
);

参数

pdbPath

[in] .pdb 文件的路径。

pcsig70

[in]要针对 .pdb 文件签名进行验证的全局唯一标识符 (GUID) 签名。 只有 Visual C++ 及更高版本中的 .pdb 文件具有 GUID 签名。

sig

[in] 要根据 .pdb 文件签名进行验证的 32 位签名。

age

[in] 要验证的年限值。 年龄不一定对应于任何已知的时间值,它用于确定 .pdb 文件是否与相应的.exe文件不同步。

fPdbPrefetching

[in]如果设置为 TRUE,则相邻的调试记录将预提取到内存中,可能会将许多较小的文件 I/O 操作替换为更少、更大的操作,从而提高总体吞吐量,因为随后访问这些记录,代价是内存使用量可能会增加。 如果设置为 FALSE,则其行为方式与 IDiaDataSource::loadAndValidateDataFromPdb 相同。 如果设置为其他值,则行为未指定。

返回值

如果成功,则返回 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 文件,请使用 IDiaDataSourceEx::loadDataFromPdbEx 该方法。

若要访问数据加载过程(通过回调机制),请使用 IDiaDataSourceEx::loadDataForExeEx 该方法。

若要直接从内存中加载 .pdb 文件,请使用 IDiaDataSourceEx::loadDataFromIStreamEx 该方法。

若要验证 .pdb 文件而不加载该文件,请使用 IDiaDataSourceEx::ValidatePdb 该方法。

示例

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;

HRESULT hr;
hr = pSource->loadAndValidateDataFromPdbEx( L"yprog.pdb",
                                            &expectedGUIDSignature,
                                            expectedFileSignature,
                                            expectedAge,
                                            TRUE);
if (FAILED(hr))
{
    // Report an error
}

请参阅