2013-03-25 2 views
1

결국 가상 토큰에 연결할 dll을 작성하려고합니다. PCKS # 11 표준에 의해 suported 함수에 포인터 adressess 포함됩니다 내보낼 수있는 C_getfunctionlist 함수를 만들려고했지만 DLL을 사용하는 프로그램에서 해당 함수를 액세스 할 수없는 이유를 알아낼 수 없습니다. C_Initialize 함수를로드하려고했습니다. 당신이 당신의 코드에서 PKCS # 11 구현의 기능을 사용하려면PKCS # 11 DLL의 C_getfunctionlist

extern "C" __declspec(dllexport) 
CK_RV C_GetFunctionList(CK_FUNCTION_LIST_PTR_PTR ppFunctionList) { 
    CK_FUNCTION_LIST_PTR function_list; 
    function_list=new CK_FUNCTION_LIST; 
    function_list->C_Initialize=&C_Initialize; 
    ppFunctionList=&function_list; 
return CKR_OK; 

} 

답변

0

당신은 표준을 구현하고 DLL에서 제공하는 기능을 사용하는 DLL을로드 할 수 있습니다. 여기 리눅스 시스템에서 사용하는 코드가 있습니다. 나는 그것이 도움이되기를 바랍니다.


static char const * PKCS11_SO_NAME = "/usr/lib/pkcs11/PKCS11_API.so"; 

static void * pkcs11_so; 
//list of all pkcs#11 functions 
static CK_FUNCTION_LIST_PTR pkcs11; 

CK_RV load_pkcs11() { 
    CK_RV rv = CKR_OK; 
    CK_RV (*C_GetFunctionList) (CK_FUNCTION_LIST_PTR_PTR) = 0; 

    pkcs11_so = dlopen(PKCS11_SO_NAME, RTLD_NOW); 
    if (!pkcs11_so) { 
    fprintf(stderr, "Error loading pkcs#11 so: %s\n", dlerror()); 
    return CKR_GENERAL_ERROR; 
    } 

    rv = load_symbol((void **)&C_GetFunctionList, "C_GetFunctionList"); 
    if (CKR_OK != rv) { 
    return rv; 
    } 

    rv = C_GetFunctionList(&pkcs11); 
    if (CKR_OK != rv) { 
    fprintf(stderr, "C_GetFunctionList call failed: 0x%.8lX", rv); 
    return rv; 
    } 

    return CKR_OK; 
}
관련 문제