Думали ли вы в аспектно-ориентированном программировании?Возможно, вы можете перехватить вызовы с помощью атрибута, а затем использовать общий шаблонный код для генерации исключения.
Использование инфраструктуры .NET будет немного громоздким, поскольку вам придется:
- Создание производного класса MarshalByRef или ContextBoundObject
- Создание методов экземпляров, которые будут выполнять перехват
- Переадресация вызовов на импортированные методы Win32
Есть AOPфреймворки (блок приложения Microsoft Policy Injection, Windsor AOP, ...), которые могут помочь вам в этом.
Другой вариант (который я бы попробовал в первую очередь) использует PostSharp , который можетперехватывать вызовы статических методов (намного лучшая производительность во время выполнения, чем прокси во время выполнения).Вы можете реализовать свой пользовательский атрибут и перехватывать вызовы Win32, проверять GetLastError () и вызывать исключение, если требуется.