2016-04-07 19 views
1

CNG (Kriptografi Yeni Nesil) altında, tam olarak bir kullanıcı modu Karma Sağlayıcısı altında basit bir algoritma sağlayıcısı yazacağım.
CNG Geliştirme Kiti Yardımındaki yönergelere göre "Bir karma sağlayıcı, GetHashInterface işlevini uygulamalı ve adıyla dışa aktarmalıdır".
Bir algoritma sağlayıcısı uygulamak için CNG Geliştirme Seti'nden "bcrypt.h" dosyasını eklemem gerekir. Bu dosya da aynen, GetHashInterface fonksiyonu için ancak bir export yönergesi OLMADAN arabirimini tanımlayın:GetHashInterface fermesyonu nasıl dışa aktarılır?

__checkReturn 
NTSTATUS 
WINAPI 
GetHashInterface(
    __in LPCWSTR pszProviderName, 
    __in LPCWSTR pszAlgId, 
    __out BCRYPT_HASH_FUNCTION_TABLE **ppFunctionTable, 
    __in ULONG dwFlags); 

Ben verilebilir bir fonksiyonu olarak benim başlık dosyasına işlevini yeniden tanımlamak için, örneğin

#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 

Ben almalısınız bir hata iletisi:

Hata C2375 'GetHashInterface': redefinition; Farklı bağlantı

Ben İHRACAT yönergesi kaldırmak (veya işlev için arayüz önceden tanımlanmasını bütününü kaldırırsanız)

, hata mesajı geçecektir ama işlevi benim DLL ihraç edilemez.
Lütfen bana, bana gerekli olan GetHashInterface işlevini vermek için sorunu çözmenin yolunu söyleyin.
Saygılarımızla!

cevap

1

Şu anda problemi çözmenin bir yolunu buldum.
CNG Geliştirme Seti'nden bcrypt.h dosyasını proje klasörüme kopyaladım ve ardından GetHashInterface işlevinin tanımını kaldırdım. Projem değiştirilmiş başlık dosyasını içermeli, orijinali içermemelidir.
Bilmiyorum bu doğru bir yol ama benim için çalışıyor.

0

.def dosyasını bcrypt.h dosyasını düzenlemeye gerek kalmadan kullanabilirsiniz. Visual Studio'da: Add-> New item-> Code-> Module-definition dosyası.

Sadece bu dosyaya ekleyin:

LIBRARY "yourlibraryname" 

EXPORTS 

    GetHashInterface = GetHashInterface