私は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()の2番目のパラメータにあると思います。 私のDLLのREFIIDを自動的に取得する方法がわかりません。 riidを使用しても動作しません。
だれでも考えがある場合は、 ありがとうございます!
'riid'を使ったら? – sharptooth
私がriidを使用すると、私のDLLがロードされますが、システムDLLもロードされます。 – Chicago
システムdllはいつどの時点でロードされますか? – sharptooth