Я не думаю, что это лучший метод, но он должен работать, если вы поместите его во включаемый файл, который включен везде, где вызывается функция, которую вы хотите изменить:
#define CreateFile MyCreateFile
HRESULT MyCreateFile(whatever the params are);
Реализация MyCreateFile выглядит примерно так:
#undef CreateFile
HRESULT MyCreateFile(NobodyCanRememberParamListsLikeThat params)
{
if (InputIsNormalFile())
CreateFile(params);
else
// do your thing
}
Вы в основном делаете каждый вызов CreateFile вызовом MyCreateFile, где вы можете решить, хотите ли вы использовать собственную реализацию или оригинальную.
Отказ от ответственности: я думаю, что делать это уродливо, и я бы этого не делал. Я бы предпочел поискать и заменить все вхождения или что-то в этом роде.