Vista上的IDebugProgramProvider2.GetProviderProcessData

时间:2020-03-05 18:52:40  来源:igfitidea点击:

作为IE 6/7的JavaScript Profiler的一部分,我需要加载我在IE中创建的自定义调试器。我在XP上运行良好,但在Vista上无法运行(全文在这里:http://damianblog.com/2008/09/09/tracejs-v2-rip/)。

在Vista上,对GetProviderProcessData的调用失败。有人有什么建议吗?

谢谢,
达米安

// Create the MsProgramProvider
IDebugProgramProvider2* pIDebugProgramProvider2 = 0;
HRESULT st = CoCreateInstance(CLSID_MsProgramProvider, 0, CLSCTX_ALL, IID_IDebugProgramProvider2, (void**)&pIDebugProgramProvider2);
if(st != S_OK) {
    return st;
}

// Get the IDebugProgramNode2 instances running in this process
AD_PROCESS_ID processID;
processID.ProcessId.dwProcessId = GetCurrentProcessId();
processID.ProcessIdType = AD_PROCESS_ID_SYSTEM;

CONST_GUID_ARRAY engineFilter;
engineFilter.dwCount = 0;

PROVIDER_PROCESS_DATA processData;

st = pIDebugProgramProvider2->GetProviderProcessData(PFLAG_GET_PROGRAM_NODES|PFLAG_DEBUGGEE, 0, processID, engineFilter, &processData);
if(st != S_OK) {
    ShowError(L"GPPD Failed", st);
    pIDebugProgramProvider2->Release();
    return st;
}

解决方案

回答

我不熟悉这些界面,但是Vista中的意外故障可能需要经过UAC提示。我们是否尝试使用管理员权限启动调试器?

回答

知道错误结果是有帮助的。

我可能想到的问题:

如果获得许可被拒绝,则我们很可能在ACL中缺少一些必需的特权。有时,新文档的保存方法不尽人意,请查看最新的Platform SDK标头,以查看是否还有新的标头。可能是因为在Vista下,特权不再分配给我默认的ACL。

如果我们遇到某种"找不到"类型错误,则可能是32位/ 64位问题。调试API可能仅在Vista 64上的64位COM下可用。32位/ 64位的互操作可能会非常令人困惑。