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位的互操作可能会非常令人困惑。