Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I prevent a third party library from displaying a MessageBox?

Tags:

.net

winapi

I am integrating a third party C-based SDK into my .NET application. The application will run as a Windows service on a server, so it should not interact with the user in any way.

Unfortunately, in certain error conditions it insists on calling MessageBoxA, presumably to report that something bad has happened. When this happens, the service stops responding. I am guessing that it is waiting for someone to press Ok?

It is not possible to have the vendor change their code for me.

Is there a way I can make this call into a no-op so my code can deal with the situation automatically?

EDIT: It may be important to mention that in my particular case the service would automatically restart if it crashed. A graceful (as possible) and sudden exit is probably the best resolution for a situation where a MessageBox is displayed in my case.

like image 209
Jeremy Avatar asked Feb 01 '10 20:02

Jeremy


2 Answers

Check out Detours from Microsoft Research. It allows you to detour arbitrary Windows API functions. C/C++ programming is required to make it work though. You won't need much.

like image 136
Hans Passant Avatar answered Nov 13 '22 07:11

Hans Passant


You could use an editor to find the location of this and remove the call from their binary. But that may or may not be allowable under the usage limitations with the software. Certainly if you re-distribute it it may cause problems - you should ask the vendor and report it as a defect and suggest that you have a workaround for your own use.

For people used to do this kind of thing (cracking licenses or other reverse engineering) this is pretty straightforward, but the real question is, what happens if it is ignored - does it still continue to work?

like image 33
Tim Avatar answered Nov 13 '22 06:11

Tim