MJ>Нет, проблема не в том как подменить, проблема как в длл вызвать процедуру, для этого нужно иметь
MJ>*.lib файл той длл в которой эта функция, а в самой длл она extern.
MJ>Но я не смог заставить линкер найти функция, т.е. нету у меня этого самого lib файла, который генериться вместе с либой.
Да не нужен тебе никакой .lib-файл! С помощью GetProcAddress() получаешь указатель на функцию, и по нему и вызываешь. Для тех, кто в танке, поясняю:
typedef
BOOL
(__stdcall* CPEncryptPtr) (
HCRYPTPROV hProv,
HCRYPTKEY hKey,
HCRYPTHASH hHash,
BOOL Final,
DWORD dwFlags,
BYTE* pbData,
DWORD* pdwDataLen,
DWORD dwBufLen);
//
// Получаем адрес оригинальной функции
//
...
HMODULE hModule = GetModuleHandle ("gpkcsp.dll"); // DLL может быть и другая, например, dssenh.dll или slbcsp.dll
CPEncryptPtr pFunction = GetProcAddress (hModule, "CPEncrypt");
//
// Здесь код подмены адреса в IAT
//
...
//
// Вызываем оригинальную функцию
//
BOOL bResult = pFunction (
hProv,
hKey,
hHash,
Final,
dwFlags,
pbData,
pdwDataLen,
dwBufLen);