@@ -511,6 +511,24 @@ static HRESULT __stdcall myCoGetClassObject(REFCLSID rclsid, DWORD dwClsContext,
511
511
return nRetval;
512
512
}
513
513
514
+ static HRESULT WINAPI myOleCreateLink (LPMONIKER pmkLinkSrc, REFIID riid, DWORD renderopt,
515
+ LPFORMATETC lpFormatEtc, LPOLECLIENTSITE pClientSite,
516
+ LPSTORAGE pStg, LPVOID *ppvObj)
517
+ {
518
+ if (pGlobalParamPtr->mbVerbose )
519
+ std::cout << " OleCreateLink(" << riid << " )..." << std::endl;
520
+
521
+ HRESULT nRetval = OleCreateLink (pmkLinkSrc, riid, renderopt, lpFormatEtc, pClientSite, pStg, ppvObj);
522
+
523
+ if (pGlobalParamPtr->mbVerbose )
524
+ {
525
+ std::cout << " ...OleCreateLink(" << riid << " ): " << HRESULT_to_string (nRetval) << std::endl;
526
+ }
527
+
528
+ return nRetval;
529
+ }
530
+
531
+
514
532
static HRESULT __stdcall myDllGetClassObject (REFCLSID rclsid, REFIID riid, LPVOID* ppv)
515
533
{
516
534
#ifndef _WIN64
@@ -560,6 +578,15 @@ static PROC WINAPI myGetProcAddress(HMODULE hModule, LPCSTR lpProcName)
560
578
HMODULE hOle32 = GetModuleHandleW (L" ole32.dll" );
561
579
FunPtr pFun;
562
580
581
+ if (hModule == hOle32 && std::strcmp (lpProcName, " OleCreateLink" ) == 0 )
582
+ {
583
+ if (pGlobalParamPtr->mbVerbose )
584
+ std::cout << " GetProcAddress(ole32.dll, OleCreateLink) from "
585
+ << prettyCodeAddress (_ReturnAddress ()) << std::endl;
586
+ pFun.pVoid = myOleCreateLink;
587
+ return pFun.pProc ;
588
+ }
589
+
563
590
if (hModule == hOle32 && std::strcmp (lpProcName, " CoCreateInstanceEx" ) == 0 )
564
591
{
565
592
if (pGlobalParamPtr->mbVerbose )
@@ -702,6 +729,8 @@ static HMODULE WINAPI myLoadLibraryW(LPCWSTR lpFileName)
702
729
myCoCreateInstance);
703
730
hook (false , pGlobalParamPtr, hModule, lpFileName, L" ole32.dll" , " CoCreateInstanceEx" ,
704
731
myCoCreateInstanceEx);
732
+ hook (false , pGlobalParamPtr, hModule, lpFileName, L" ole32.dll" , " OleCreateLink" ,
733
+ myOleCreateLink);
705
734
}
706
735
707
736
return hModule;
@@ -757,6 +786,8 @@ static HMODULE WINAPI myLoadLibraryA(LPCSTR lpFileName)
757
786
myCoCreateInstance);
758
787
hook (false , pGlobalParamPtr, hModule, sWFileName .data (), L" ole32.dll" , " CoCreateInstanceEx" ,
759
788
myCoCreateInstanceEx);
789
+ hook (false , pGlobalParamPtr, hModule, sWFileName .data (), L" ole32.dll" , " OleCreateLink" ,
790
+ myOleCreateLink);
760
791
}
761
792
762
793
return hModule;
@@ -808,6 +839,8 @@ static HMODULE WINAPI innerMyLoadLibraryExW(const std::string& caller, LPCWSTR l
808
839
myCoCreateInstance);
809
840
hook (false , pGlobalParamPtr, hModule, lpFileName, L" ole32.dll" , " CoCreateInstanceEx" ,
810
841
myCoCreateInstanceEx);
842
+ hook (false , pGlobalParamPtr, hModule, lpFileName, L" ole32.dll" , " OleCreateLink" ,
843
+ myOleCreateLink);
811
844
}
812
845
}
813
846
@@ -880,6 +913,8 @@ static HMODULE WINAPI myLoadLibraryExA(LPCSTR lpFileName, HANDLE hFile, DWORD dw
880
913
" CoCreateInstance" , myCoCreateInstance);
881
914
hook (false , pGlobalParamPtr, hModule, sWFileName .data (), L" ole32.dll" ,
882
915
" CoCreateInstanceEx" , myCoCreateInstanceEx);
916
+ hook (false , pGlobalParamPtr, hModule, sWFileName .data (), L" ole32.dll" ,
917
+ " OleCreateLink" , myOleCreateLink);
883
918
}
884
919
}
885
920
@@ -1096,6 +1131,9 @@ extern "C" DWORD WINAPI InjectedDllMainFunction(ThreadProcParam* pParam)
1096
1131
hook (false , pParam, L" msvbvm60.dll" , L" ole32.dll" , " CoCreateInstanceEx" ,
1097
1132
myCoCreateInstanceEx);
1098
1133
1134
+ hook (false , pParam, L" msvbvm60.dll" , L" ole32.dll" , " OleCreateLink" ,
1135
+ myOleCreateLink);
1136
+
1099
1137
hook (false , pParam, L" msvbvm60.dll" , L" ole32.dll" , " CoGetClassObject" , myCoGetClassObject);
1100
1138
1101
1139
if (!hook (true , pParam, L" msvbvm60.dll" , L" kernel32.dll" , " GetProcAddress" ,
@@ -1127,6 +1165,7 @@ extern "C" DWORD WINAPI InjectedDllMainFunction(ThreadProcParam* pParam)
1127
1165
hook (false , pParam, nullptr , L" ntdll.dll" , " LdrLoadDll" , myLdrLoadDll);
1128
1166
hook (false , pParam, nullptr , L" ole32.dll" , " CoCreateInstance" , myCoCreateInstance);
1129
1167
hook (false , pParam, nullptr , L" ole32.dll" , " CoCreateInstanceEx" , myCoCreateInstanceEx);
1168
+ hook (false , pParam, nullptr , L" ole32.dll" , " OleCreateLink" , myOleCreateLink);
1130
1169
hook (false , pParam, nullptr , L" ole32.dll" , " CoGetClassObject" , myCoGetClassObject);
1131
1170
if (nHookedFunctions == 0 )
1132
1171
{
0 commit comments