我已经挂钩了cocreateinstance()函数。 当用特定的CLSID调用它时,我想用我的dll代替dll系统。com:使用未注册的dll
因此,这里是我的代码:
HOOK_CoCreateInstance(rclsid,pUnkOuter,dwClsContext,riid,*ppv){
...
if(myCLSID){
module = LoadLibrary(mydll);
dllGetClassObject = (FUNC)GetProcAddress(module,"DllGetClassObject");
hr = dllGetClassObject(rclsid, IID_IClassFactory, &pClassFactory);
hr = pClassFactory->CreateInstance(NULL,IID_IUnknown, (void**)&data_source);
return hr;
}
else{
hr = CoCreateInstanceReal(rclsid,pUnkOuter,dwClsContext,riid,ppv);
return hr;
}
}
但它不工作。
我认为问题出在pClassFactory :: CreateInstance()中,第二个参数是: 我不知道如何自动检索我的dll的REFIID。 如果我使用riid它也不工作。
所以如果有人有一个想法, 谢谢!
什么工作不准确如果你使用'riid'? – sharptooth
如果我使用riid,我的dll会被加载,但是系统dll也会被加载。 – Chicago
什么时候系统DLL加载? – sharptooth