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 answers
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
- how to play a sounds in c# forms?
- Echo behaviour of Microsoft Windows Telnet Client
- Getting error while running spark-shell on my system; pyspark is running fine
- DirectX 9 With No SDK Installed - How To Translate a D3DMATRIX?
- Gradle 8.7 cannot find installed JDK 22 in IntelliJ
- 'IOException: The cloud file provider is not running', when trying to delete 'cloud' folder
- Cannot load modules/mod_dav_svn.so into server
- Issue with launching application after updating ElectronJs to version 28.0.0 on Windows and Linux
- 32-bit applications do not display some files in Windows 10
- 'bun' is not recognized as an internal or external command
- mkssecreenshotmgr taking a screenshot
- Next js installation in windows 7 os
- Can't resize a partition using Mini Tool?
- Is there any way to set a printer as default according with Active Directory Policy Security Group and PC hostname?
- Electron Printing not working on Windows (Works on Mac)
Related Questions in UNIT-TESTING
- Google Truth.assertThat.contains does not behave similar to List.contains
- What's the best way to breakup a large test in pytest
- How to refer to the filepath of test data in test sourcecode?
- How to mock a dynamic endpoint in Apache Camel Spring Boot
- pytest mock failing when mocking function from imported package
- Jest configuration error while running test case in teamcity
- Resolve paths dynamically based on directory where test (or tested files) is located in Jest
- One-time implementation with Jest's mockResolvedValueOnce within test remains from one test to another
- Why can't I mock the decorator of the function?
- Gitlab pipeline stuck with nx cloud issue
- How to create an improperly closed gzip file using python?
- Nest.js service structure for API integration
- uiState not updating in Tests
- Unit Tests not Compiling or Being found without mod tests in main.rs. Is this a requirement or am I missing some configuration?
- Mocking Stream or Reader in Java Junit
Related Questions in COM
- How to program a COM object with an IEnumerator, IEnumerable interface inside
- WinAPI - right mouse drag & drop and IContextMenu
- Function Returning Excel COM Objects Unexpectedly
- Windows ContextMenuHandler names - Document conflict?
- How to publish a console application with COM interop and trim unused code
- IContextMenu Handler - Should ShellExecute or CreateProcess be used to InvokeCommand?
- Windows Explorer Conditional Context Menu Item for Drive?
- How do I fix an error while trying to send email using Outlook with COM?
- ITypeLib2.GetLibStatistics() always throws AccessViolationException in C#
- Directwrite is not always able to query font
- How can I pass a C++ struct to a C# DLL method using COM interop
- VBA PowerPoint Run-time error '-2147467259' (80004005): Presentation.Close: Failed
- PHP using a dll with COM + dotnet
- d3d11 triangle rendering failure despite everything being properly initialized
- COM context menu InvokeCommand not being called
Related Questions in HOOK
- How to modify HTML in WordPress core file
- I want to use toilet to modify hook_function
- Is there a way to add a pre-hook in R?
- Vite / Rollup Static Asset Copy Hook
- Mouse hook with non-English language results in extremely laggy mouse
- Retrieve Extra parameters from Airflow Connection
- In Wordpress, I want to filter the content when a page is updated or created
- Is it possible to hook a non-configurable property like window.location.hostname, in JavaScript?
- Is there a WordPress hook that fires before post.php, from which I can get the post ID?
- Woocommerce - Hide other shipping methods if free shipping is available not working properly
- Woocommerce 8.6.1 checkout form hooks not fired
- Storing Individual Quiz Answers in LearnPress Plugin - WordPress
- runing a feature with after hooks in cucumber
- Modify redis.Cmder content in hook
- IAT hook is not working with notepad.exe on Windows
Related Questions in SHIM
- What is a shim in asdf
- XCFramework cannot import other module
- C# Pose Shim from Task
- WARNING Crisp found shims of native JavaScript methods
- Run .Net Framework 4.8 dll in .Net 6
- Containerd ctr command for pulling images gives error
- How to shim a dependency in babel.config.js in react-native?
- A solution to rEFInd unable to load using shim when Secure Boot is enabled
- Checksum error in installing software using chocolatey
- shim boot loader is blocked after enrolling MOK
- Unable to use shims in MStest to fake a SharePoint in .net
- Vanilla JS - Trying to Shim Fake Data in place of JSON Response?
- Import d.ts definitions from specific node_modules package
- Unable to Shim DateTime.Now in C# dotnet core 3.1
- Unable to fetch cpu pod metrics, k8s- containerd - containerd-shim-runsc-v1 - gvisor
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?
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)
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().