I'd like to intercept the COM CoCreateInstanceEx and/or CoGetClassObject functions to replace a class with a testing shim in a unit test. This will only be for a single CLSID; all others can go through unchanged. Is there a way to do this without horrible, evil hacks?
Is there a way to hook or intercept CoGetClassObject and/or CoCreateInstance calls?
1.7k Views Asked by bdonlan At
2
There are 2 best solutions below
0
Kim Gräsman
On
There's always the CoTreatAsClass function:
http://msdn.microsoft.com/en-us/library/ms693452(VS.85).aspx
But, as you noted, it will be a system-wide replacement of the class, not a local change.
Alternatively, you could look into hooking CoCreateInstance as suggested in the post referenced by Shay Erlichmen's comment.
Related Questions in WINDOWS
- Get Maximum Log Size
- Debugging Windows Services while starting
- Possible consequences of duplicate ProgId for different classes
- How to chain BCryptEncrypt and BCryptDecrypt calls using AES in GCM mode?
- mingw-64 conflicting declarations when cross-compiling
- I run an EXE program from a Windows Service but I can't see form C#?
- Why is PowerShell "not recognized" when installing Chocolatey?
- How to check if Windows device is phone or tablet/pc?
- How to add directories to Cygwin gcc default search path
- Can't install anything with pip2 on Windows 7 due to UnicodeDecodeError
- Active directory and linux nslcd binding without extending the AD schema
- How To Prevent Over Scrolling in Scroll Viewer Windows Phone 8.1
- Unicode error from pip install
- Where is the 'EnablePinning' property in the ribbon framework's recent items?
- How can I implement the same models and data across ASP.NET and Windows Apps
Related Questions in UNIT-TESTING
- How to write tests for classes with inheritance
- PHPunit call magic methods
- Convert IEnumerable to IObservable with variable Period
- How to a run specific code before & after each unit test in Python
- Unit testing a class A that derives from an abstract class B
- Is there another way to unit test business logic in mvc
- Some of my tests show prepended with junit.framework
- Selenium Driver Service not found exception
- Can not convert from Class<PowerMockRunner> to Class<? extends Runner>
- AngularJS Unit Testing - multiple mocks and providers
- How to use Sinon.js FakeXMLHttpRequest with superagent?
- Get Mock with AutoMock.Create<>()
- Mock service that takes unitOfWork in constructor
- Cleanest method for creating a pytest test fixture that takes in dynamic text data
- g++ 5.1.0 not building project, clang shows unknown error
Related Questions in COM
- Possible consequences of duplicate ProgId for different classes
- Open array declaration lost when regenerating interop.dll with tlbimp.exe from type-lib
- How does a server that expose COM functions via IDispatch can distinct between different clients that Invoke functions without passing any ID param?
- Call IConnectionPoint::Advise cause a crash
- Is it safe to cast a IDispatch* into an IUnknown*, without using QueryInterface, for interprocess COM objects?
- Custom HRESULT from COM component
- Return multiple variables to JavaScript from COM
- How to read from exchange server asynchronously using IMoniker and IStream Interface
- How can a dialog become responsive while waiting for a call to DoModal() to return?
- ICallFactory with 32-bit and 64-bit type libraries side by side
- Report generation in server
- What is required in Delphi 2007 to use Variant arrays?
- How to convert string array to SAFEARRAY or VARIANT or COleVariant?
- ArcObjects ExcelWorkspaceFactory Won't Release Excel File
- Calling a method of a WMI Class
Related Questions in HOOK
- How to make Homeslider Banner work in custom hook location
- Customize Liferay search portlet
- Modify files and commit after Branch creation in GIT via Hook
- Removing a Wordpress action added from a Plugin and than adding a new action in place of that
- In WHMCS user can login with every wrong or right password
- To Hook Web Content Search Portlet
- Overriding class signature in java
- Sonata Admin: Prevent a persist for a specific condition
- Is it posible to hook redis before key expired
- Redis hooking (publish-subscribe) under stress tests - performance under load
- Are static members in XPosed hook classes shared between processes?
- Log-in Portlet Hook
- Apache Subversion pre-commit to restrict files
- Mercurial list files from changegroup
- Taking Screeshot of extern Window which have an OpenGL ES Window inside
Related Questions in SHIM
- Import jQuery Plugin with JSPM
- HTML5 Shim - How to dynamically detect if browser needs it?
- Calling the original method from shim method
- Bootstrap - Uncaught TypeError: Cannot read property 'fn' of undefined
- How do I use a shim for a classList error in IE9?
- IndexedDBShim.js error : JavaScript runtime error: Assignment to read-only properties is not allowed in strict mode
- How to use Microsoft Fakes Assemblies on Process.Start
- Assemblies not loading in office add-in with .net 4
- What is a shim in asdf
- Loading jQuery, Underscore and Backbone using RequireJS 2.0.1 and shim
- Visual Studio 11 shims vs mocks
- Vanilla JS - Trying to Shim Fake Data in place of JSON Response?
- How to Shim long external dependency with ConcurrentDictionary (C#) via Microsoft Fakes?
- Why won't Fakes properly reference a Fakes dll from a prebuilt Fakes project?
- ShimSPWeb().LocaleGet not available?
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
It depends on what exactly you want.
If you want to detect who is loading that class or to find whether it is loaded at all you can use Process Monitor. A call to
CoGetClassObject()(orCoCreateInstanceEx()) will lead to aHKCR\CLSID\{Class of interest id}key being read and Process Monitor will show you what process and when does this and how successful it is.If you want to replace an existing class with yours - compile a library with your version of class with the same class id and change the path to the COM server inside
HKCR\CLSID\{Class of interest id}so that your library is used to serve a class with that id. You can do that manually or with regsvr32 - first register the original library, then yours to override the class of interest registartion. COM does class id -> library mapping through that key when a consumer callsCoGetClassObject()orCoCreateInstanceEx().