2016-04-07 10 views
1

Я собираюсь написать простой поставщик алгоритмов под названием 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.
С уважением!

ответ

1

На данный момент я «нашел» способ решить проблему.
Я скопировал файл bcrypt.h из набора разработчика CNG в папку проекта и удалил определение функции GetHashInterface. Мой проект должен включать измененный файл заголовка, но не оригинальный.
Я не знаю, это правильный путь, но он работает для меня.

0

Вы можете использовать .def файл, не редактируя bcrypt.h. В Visual Studio: Add-> New item-> Code-> Module-definition file.

Просто добавьте к этому файлу:

LIBRARY "yourlibraryname" 

EXPORTS 

    GetHashInterface = GetHashInterface