Systemwalker Centric Manager APIガイド - UNIX共通 - - Microsoft(R) Windows(R) 2000/ Microsoft(R) Windows Server(TM) 2003 -
目次 索引 前ページ次ページ

第2章 機能概要> 2.7 IDカードセキュリティのAPI【UNIX版】

2.7.3 操作の保護機能プログラム例

操作の保護機能を使用するプログラム例を以下に示します。

   
#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; 
  }

目次 索引 前ページ次ページ

All Rights Reserved, Copyright(C) 富士通株式会社 1995-2006