我将在 CNG(下一代密码学)下编写一个简单的算法提供程序,正是一个用户模式的哈希提供程序。
根据 CNG 开发工具包帮助中的说明“哈希提供程序必须实现该GetHashInterface
功能并按名称导出”。
要实现算法提供程序,我需要包含 CNG 开发工具包中的“bcrypt.h”文件。该文件还定义了GetHashInterface
函数的接口,但没有export
指令,确切地说:
__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':重新定义;不同的联动
如果我删除 EXPORT 指令(或删除函数的整个接口预定义),错误消息应该会消失,但无法从我的 DLL 导出函数。
所以请帮助我,告诉我解决问题的方法来导出所需的GetHashInterface
功能。