Я собираюсь написать простой поставщик алгоритмов под названием CNG (Cryptography Next Generation), точно пользовательский режим Hash Provider.
В соответствии с инструкцией в справочной системе CNG Development Kit «Поставщик хэширования должен реализовать функцию GetHashInterface
и экспортировать ее по имени».
Чтобы реализовать поставщика алгоритмов, мне нужно включить файл «bcrypt.h» из пакета разработки CNG. Этот файл также определить интерфейс для GetHashInterface
функции, но без export
директивы, а именно:Как экспортировать GetHashInterface fucntion?
__checkReturn
NTSTATUS
WINAPI
GetHashInterface(
__in LPCWSTR pszProviderName,
__in LPCWSTR pszAlgId,
__out BCRYPT_HASH_FUNCTION_TABLE **ppFunctionTable,
__in ULONG dwFlags);
Если я переопределить эту функцию в моем файле заголовка как экспортируемые функции, например
#ifndef __CngHashProvider
#define __CngHashProvider
///////////////////////////////////////////////////////////////
#ifndef EXPORT
#define EXPORT extern "C" __declspec(dllexport)
#endif
EXPORT NTSTATUS WINAPI GetHashInterface(
__in LPCWSTR pszProviderName,
__in LPCWSTR pszAlgId,
__out BCRYPT_HASH_FUNCTION_TABLE **ppFunctionTable,
__in ULONG dwFlags
);
////////////////////////////////////////////////////////////////
#endif __CngHashProvider
я должен получить сообщение об ошибке:
Ошибка C2375 'GetHashInterface': redefinition; другая связь
Если удалить директиву EXPORT (или удалить весь интерфейс предопределения для функции), то сообщение об ошибке должна исчезнуть, но функция не может быть экспортирована из моей библиотеки DLL.
Так что, пожалуйста, помогите мне, сообщив мне, как решить проблему, чтобы экспортировать необходимую функцию GetHashInterface
.
С уважением!