IDebugProgramProvider2.GetProvider在Vista上处理数据

时间:2008-09-13 08:49:42

标签: c++ debugging internet-explorer windows-vista

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

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

谢谢,     达米安

// 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;
}

2 个答案:

答案 0 :(得分:1)

了解错误结果会有所帮助。

我能想到的可能问题:

如果您的权限被拒绝,您的ACL很可能会遗漏一些需要Privilege的内容。新的有时候没有很好的说明,检查最新的Platform SDK标头,看看是否还有新的标题。可能是在vista下,Privilege不再为您的ACL分配我的默认值。

如果你得到某种Not Found类型错误,那么它可能是32位/ 64位问题。您的debbugging API可能只能在vista 64上的64位COM下使用.32位/ 64位互操作可能非常混乱。

答案 1 :(得分:0)

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