#include <stdio.h>
#include <f3crcapi.h>
#define WAIT_TIME 300 /* カード挿入待ち時間 */
#define NO_CARD_CANCEL 0 /* カードがない場合に */
/* キャンセルするかの */
/* フラグ */
int Handle ;
int iderror ;
int status ;
/*=================================================================*/
/* 操作の保護機能を使用する */
/*=================================================================*/
int idcard_operate( char *object, char *program, char *operation, HWND hWnd )
{
int ret ;
struct mpcard_read_inf read_inf ; /* カード読込情報 */
struct mpcard_check_data check ; /* 操作判定項目 */
struct mpcard_read_data read_data /* 判定結果格納域 */
int req ;
/*******************************************************************/
/* IDカードセキュリティAPIの使用を開始する */
/*******************************************************************/
Handle = Mp_OpenCard( &iderror, program, hWnd, WM_USER+1 );
if ( Handle < 0 ) {
idcard_error( Handle, iderror );
return -1 ;
}
/*******************************************************************/
/* Mp_SendCard,Mp_GetCard 関数での読み込み例 */
/*******************************************************************/
read_inf.wait_time = 0 ; /* 無限待ち */
check.object = object ;
check.operation = operation ;
ret = Mp_SendCard( Handle, &iderror, &status, MPCARD_CHECK_USER, &read_inf, &check ) ;
if ( ret < 0 ) {
idcard_error( ret, iderror ) ;
Mp_CloseCard( Handle, &iderror ) ;
return -1 ;
}
else if ( status == MPCARD_NO_CARD )
idcard_msg( MPCARD_NO_CARD ) ; /* カード挿入を促す */
/* メッセージ出力 */
do {
ret = Mp_GetCard( Handle, &iderror, &status, 60, &req, &read_data );
if ( ret < 0 ){
idcard_error( ret, iderror );
Mp_CloseCard( Handle, &iderror );
return -1 ;
}
else if ( status == MPCARD_NO_DATA ){
if ( NO_CARD_CANCEL ) {
ret = Mp_SendCard( Handle, &iderror, &status, MPCARD_REQ_CANCEL, NULL, NULL );
break ;
}
}
} while ( status == MPCARD_NO_DATA ) ;
/*******************************************************************/
/* Mp_ReadCard関数での読み込み例 */
/*******************************************************************/
read_inf.wait_time = WAIT_TIME ;
check.object = object ;
check.operation = operation ;
ret = Mp_ReadCard( Handle, &iderror, MPCARD_CHECK_USER, &read_inf, &check, &read_data );
if ( ret < 0 ){
idcard_error( ret, iderror ) ;
Mp_CloseCard( Handle, &iderror ) ;
return -1 ;
}
/*******************************************************************/
/* IDカードセキュリティAPIの使用を終了する */
/*******************************************************************/
Mp_CloseCard( Handle, &iderror ) ;
return (int)read_data.operation;
} |