首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C#调用C++写的dll【usbkey、pkcs#11标准】,该如何解决

2012-03-17 
C#调用C++写的dll【usbkey、pkcs#11标准】飞天诚信的epass2000Auto,做个登录双因子验证。目前网络上除了VC,其

C#调用C++写的dll【usbkey、pkcs#11标准】
飞天诚信的epass2000Auto,做个登录双因子验证。

目前网络上除了VC,其它的都没有案例,销售部,技术部都联系了,只有VC案例,提供的动态链接库是C++写的。

Dllimport调用是可以,但是文档只提供了函数名和函数用途,返回类型和参数列表据说实在VC案例的一个头文件里,悲剧的是俺对C++一窍不通,就知道.h是头文件- -!,进去看了一番,果断喷血了,尼玛,所有我要用到的函数在这里面都TM当参数在用?

求指引。。。以下提供部分函数和头文件供参考。

C_Initialize 这个函数初始化库。在调用其它库函数前必须调用此函数。
C_GetInfo 得到cryptoki库的信息
C_GetSlotInfo 获取slot的信息
C_GetTokenInfo 获取slot中token的信息
C_WaitForSlotEvent 等待slot事件的发生,如Token被插入或移除
C_InitToken 初始化Token
C_SetPIN 修改当前登录用户的PIN码
......

C/C++ code
/* C_Initialize initializes the Cryptoki library. */CK_PKCS11_FUNCTION_INFO(C_Initialize)#ifdef CK_NEED_ARG_LIST(  CK_VOID_PTR   pInitArgs  /* if this is not NULL_PTR, it gets                            * cast to CK_C_INITIALIZE_ARGS_PTR                            * and dereferenced */);#endif/* C_Finalize indicates that an application is done with the * Cryptoki library. */CK_PKCS11_FUNCTION_INFO(C_Finalize)#ifdef CK_NEED_ARG_LIST(  CK_VOID_PTR   pReserved  /* reserved.  Should be NULL_PTR */);#endif/* C_GetInfo returns general information about Cryptoki. */CK_PKCS11_FUNCTION_INFO(C_GetInfo)#ifdef CK_NEED_ARG_LIST(  CK_INFO_PTR   pInfo  /* location that receives information */);#endif/* C_GetFunctionList returns the function list. */CK_PKCS11_FUNCTION_INFO(C_GetFunctionList)#ifdef CK_NEED_ARG_LIST(  CK_FUNCTION_LIST_PTR_PTR ppFunctionList  /* receives pointer to                                            * function list */);#endif/* Slot and token management *//* C_GetSlotList obtains a list of slots in the system. */CK_PKCS11_FUNCTION_INFO(C_GetSlotList)#ifdef CK_NEED_ARG_LIST(  CK_BBOOL       tokenPresent,  /* only slots with tokens? */  CK_SLOT_ID_PTR pSlotList,     /* receives array of slot IDs */  CK_ULONG_PTR   pulCount       /* receives number of slots */);#endif/* C_GetSlotInfo obtains information about a particular slot in * the system. */CK_PKCS11_FUNCTION_INFO(C_GetSlotInfo)#ifdef CK_NEED_ARG_LIST(  CK_SLOT_ID       slotID,  /* the ID of the slot */  CK_SLOT_INFO_PTR pInfo    /* receives the slot information */);#endif/* C_GetTokenInfo obtains information about a particular token * in the system. */CK_PKCS11_FUNCTION_INFO(C_GetTokenInfo)#ifdef CK_NEED_ARG_LIST(  CK_SLOT_ID        slotID,  /* ID of the token's slot */  CK_TOKEN_INFO_PTR pInfo    /* receives the token information */);#endif/* C_GetMechanismList obtains a list of mechanism types * supported by a token. */CK_PKCS11_FUNCTION_INFO(C_GetMechanismList)#ifdef CK_NEED_ARG_LIST(  CK_SLOT_ID            slotID,          /* ID of token's slot */  CK_MECHANISM_TYPE_PTR pMechanismList,  /* gets mech. array */  CK_ULONG_PTR          pulCount         /* gets # of mechs. */);#endif/* C_GetMechanismInfo obtains information about a particular * mechanism possibly supported by a token. */CK_PKCS11_FUNCTION_INFO(C_GetMechanismInfo)#ifdef CK_NEED_ARG_LIST(  CK_SLOT_ID            slotID,  /* ID of the token's slot */  CK_MECHANISM_TYPE     type,    /* type of mechanism */  CK_MECHANISM_INFO_PTR pInfo    /* receives mechanism info */);#endif/* C_InitToken initializes a token. */CK_PKCS11_FUNCTION_INFO(C_InitToken)#ifdef CK_NEED_ARG_LIST/* pLabel changed from CK_CHAR_PTR to CK_UTF8CHAR_PTR for v2.10 */(  CK_SLOT_ID      slotID,    /* ID of the token's slot */  CK_UTF8CHAR_PTR pPin,      /* the SO's initial PIN */  CK_ULONG        ulPinLen,  /* length in bytes of the PIN */  CK_UTF8CHAR_PTR pLabel     /* 32-byte token label (blank padded) */);#endif/* C_InitPIN initializes the normal user's PIN. */CK_PKCS11_FUNCTION_INFO(C_InitPIN)#ifdef CK_NEED_ARG_LIST(  CK_SESSION_HANDLE hSession,  /* the session's handle */  CK_UTF8CHAR_PTR   pPin,      /* the normal user's PIN */  CK_ULONG          ulPinLen   /* length in bytes of the PIN */);#endif/* C_SetPIN modifies the PIN of the user who is logged in. */CK_PKCS11_FUNCTION_INFO(C_SetPIN)#ifdef CK_NEED_ARG_LIST(  CK_SESSION_HANDLE hSession,  /* the session's handle */  CK_UTF8CHAR_PTR   pOldPin,   /* the old PIN */  CK_ULONG          ulOldLen,  /* length of the old PIN */  CK_UTF8CHAR_PTR   pNewPin,   /* the new PIN */  CK_ULONG          ulNewLen   /* length of the new PIN */);#endif/* Session management *//* C_OpenSession opens a session between an application and a * token. */CK_PKCS11_FUNCTION_INFO(C_OpenSession)#ifdef CK_NEED_ARG_LIST(  CK_SLOT_ID            slotID,        /* the slot's ID */  CK_FLAGS              flags,         /* from CK_SESSION_INFO */  CK_VOID_PTR           pApplication,  /* passed to callback */  CK_NOTIFY             Notify,        /* callback function */  CK_SESSION_HANDLE_PTR phSession      /* gets session handle */);#endif/* C_CloseSession closes a session between an application and a * token. */CK_PKCS11_FUNCTION_INFO(C_CloseSession)#ifdef CK_NEED_ARG_LIST(  CK_SESSION_HANDLE hSession  /* the session's handle */);#endif/* C_CloseAllSessions closes all sessions with a token. */CK_PKCS11_FUNCTION_INFO(C_CloseAllSessions)#ifdef CK_NEED_ARG_LIST(  CK_SLOT_ID     slotID  /* the token's slot */);#endif/* C_GetSessionInfo obtains information about the session. */CK_PKCS11_FUNCTION_INFO(C_GetSessionInfo)#ifdef CK_NEED_ARG_LIST(  CK_SESSION_HANDLE   hSession,  /* the session's handle */  CK_SESSION_INFO_PTR pInfo      /* receives session info */);#endif/* C_GetOperationState obtains the state of the cryptographic operation * in a session. */CK_PKCS11_FUNCTION_INFO(C_GetOperationState)#ifdef CK_NEED_ARG_LIST(  CK_SESSION_HANDLE hSession,             /* session's handle */  CK_BYTE_PTR       pOperationState,      /* gets state */  CK_ULONG_PTR      pulOperationStateLen  /* gets state length */);#endif/* C_SetOperationState restores the state of the cryptographic * operation in a session. */CK_PKCS11_FUNCTION_INFO(C_SetOperationState)#ifdef CK_NEED_ARG_LIST(  CK_SESSION_HANDLE hSession,            /* session's handle */  CK_BYTE_PTR      pOperationState,      /* holds state */  CK_ULONG         ulOperationStateLen,  /* holds state length */  CK_OBJECT_HANDLE hEncryptionKey,       /* en/decryption key */  CK_OBJECT_HANDLE hAuthenticationKey    /* sign/verify key */);#endif/* C_Login logs a user into a token. */CK_PKCS11_FUNCTION_INFO(C_Login)#ifdef CK_NEED_ARG_LIST(  CK_SESSION_HANDLE hSession,  /* the session's handle */  CK_USER_TYPE      userType,  /* the user type */  CK_UTF8CHAR_PTR   pPin,      /* the user's PIN */  CK_ULONG          ulPinLen   /* the length of the PIN */);#endif/* C_Logout logs a user out from a token. */CK_PKCS11_FUNCTION_INFO(C_Logout)#ifdef CK_NEED_ARG_LIST(  CK_SESSION_HANDLE hSession  /* the session's handle */);#endif/* Object management *//* C_CreateObject creates a new object. */CK_PKCS11_FUNCTION_INFO(C_CreateObject)#ifdef CK_NEED_ARG_LIST(  CK_SESSION_HANDLE hSession,    /* the session's handle */  CK_ATTRIBUTE_PTR  pTemplate,   /* the object's template */  CK_ULONG          ulCount,     /* attributes in template */  CK_OBJECT_HANDLE_PTR phObject  /* gets new object's handle. */);#endif 



[解决办法]
发我一份,lw@szcyt.cn

热点排行