⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 185-191.html

📁 Smart Card Developer s Kit, a smart card manual for development, English
💻 HTML
📖 第 1 页 / 共 2 页
字号:
                                     pbuffer[1]);
                    bReturnStatus = _OS.SetFileACL(dbuffer);
                }
                break;

            case ISO_DIRECTORY:
                if (pbuffer[4] > (OS_HEADER_SIZE+1)) {
                    bReturnStatus = ST_INVALID_PARAMETER;
                }
                else
                {
                    _OS.BackupFileStatus();
                    _OS.SelectCD();
                    // If info asked on current directory, no need to
                    // select a record
                    if (pbuffer[3] != 0) {
                        if ((bReturnStatus =
                            _OS.SelectRecord((byte)(pbuffer[3] !=
                             ST_SUCCESS){
                            break;
                        }
                        _OS.InitFileStatus();
                    }

                    // Get the header information for the file
                    bReturnStatus = _OS.GetFileInfo(dbuffer);

                    // Reformat the message
                   _OS.RestoreFileStatus();
                    if (bReturnStatus == ST_SUCCESS) {
                        ackByte[0] = pbuffer[1];
                        _OS.SendMessage(ackByte,(byte)1);
                       _OS.SendMessage(dbuffer,pbuffer[4]);
                    }
                }
                break;

            // CHV and key manipulation routines
            case ISO_VERIFY_CHV:
            case ISO_CHANGE_CHV:
            case ISO_UNBLOCK_CHV:
            case ISO_VERIFY_KEY:
                // Get key number
                _OS.GetMessage(dbuffer,pbuffer[4],pbuffer[1]);

                if (pbuffer[1] == ISO_VERIFY_KEY) {
                bReturnStatus = _OS.VerifyKey(  pbuffer[3],
                                                dbuffer,
                                                pbuffer[4]);
                }
                else {
                    // Get a good value for the unblocking flag
                    if (pbuffer[1] == ISO_UNBLOCK_CHV) {
                        pbuffer[2] = 1;
                    }
                    else {
                        pbuffer[2] = 0;
                    }
                    if (pbuffer[1] != ISO_VERIFY_CHV) {
                        for (bTemp=0;bTemp<8;bTemp++) {
                           chvbuffer[bTemp] = dbuffer[bTemp+8];
                        }
                        bReturnStatus = _OS.ModifyCHV ( pbuffer[3],
                                                        dbuffer,
                                                        chvbuffer,
                                                        pbuffer[2]);
                        break;
                    }

                    bReturnStatus = _OS.VerifyCHV(  pbuffer[3],
                                                    dbuffer,
                                                    (byte)0);
                }
                break;

            case ISO_INIT_APPLICATION:
                /* Should send the id of a valid program file */
                //_OS.SendMessage(ackByte,ACK_SIZE);
                _OS.GetMessage( dbuffer,(byte)1,pbuffer[1]);
                // cast dbuffer into a short
                fileId = (short) ((pbuffer[2] << 8) |
                                  (pbuffer[3] & 0x00FF));
                bReturnStatus = _OS.Execute(fileId, dbuffer[0]);
                break;

            case GPOS_CREATE_FILE:
                if (pbuffer[4] != OS_HEADER_SIZE) {
                    bReturnStatus = ST_INVALID_PARAMETER;
                    break;
                }
                //_OS.SendMessage(ackByte,ACK_SIZE);
                // Receive The data
                _OS.GetMessage( dbuffer,pbuffer[4],pbuffer[1]);
                bReturnStatus = _OS.CreateFile(dbuffer);
                break;

            case ISO_UPDATE_RECORD:
            case ISO_UPDATE_BINARY:
                _OS.GetMessage(dbuffer,pbuffer[4],pbuffer[1]);
                // assumes that a file is already selected
                if (pbuffer[1] == ISO_READ_BINARY) {
                    // compute offset from pbuffer[2..3] via casting
                    offset = (short) ((pbuffer[2] << 8) |
                                      (pbuffer[3] & 0x00FF));
                    bReturnStatus = _OS.WriteBinaryFile (offset,
                                                            pbuffer[4],
                                                            dbuffer);
                }
                else {
                    bReturnStatus = _OS.WriteRecord  (dbuffer,
                                                     pbuffer[2],
                                                     pbuffer[3],
                                                     pbuffer[4]);
                }
                break;

            case ISO_READ_RECORD:
            case ISO_READ_BINARY:
                // assumes that a file is already selected
                if (pbuffer[1] == ISO_READ_BINARY) {
                    // compute offset from pbuffer[2..3] via casting
                    offset = (short) ((pbuffer[2] << 8) |
                                      (pbuffer[3] & 0x00FF));
                    bReturnStatus = _OS.ReadBinaryFile (offset,
                                                           pbuffer[4],
                                                           dbuffer);
                }
                else {
                    bReturnStatus = _OS.ReadRecord  (dbuffer,
                                                     pbuffer[2],
                                                     pbuffer[3],
                                                     pbuffer[4]);
                }
                // Send the data if successful
                ackByte[0] = pbuffer[1];
                if (bReturnStatus == ST_SUCCESS) {
                    _OS.SendMessage(ackByte,ACK_SIZE);
                    _OS.SendMessage(dbuffer,pbuffer[4]);
                }
                break;

            default:
                bReturnStatus = ST_INS_NOT_SUPPORTED;
            }
          }

          // Verify we want to return a status
          if (bReturnStatus != ST_NO_RETURN)
              _OS.SendStatus(bReturnStatus);
      }
    }
    while (true);
  }
}
</PRE>
<P><BR></P>
<CENTER>
<TABLE BORDER>
<TR>
<TD><A HREF="183-184.html">Previous</A></TD>
<TD><A HREF="../ewtoc.html">Table of Contents</A></TD>
<TD><A HREF="191-195.html">Next</A></TD>
</TR>
</TABLE>
</CENTER>



</BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -