Posted March 27, 201410 yr hi, i am working in smart card development. i have created MF (Master file), DF (dedicated File), EF (Elementary file) in smart card. EF file is used to store the data. This EF may be transparent file or record oriented file. i have written the data to transparent file using 00D1000008 540100 5303 010203 this command.i am also try to write the record oriented file using 00DD000008 540100 5303 010203 this command. but i got the error (6700 error code) wrong length. i need the solution to write the smart card EF record oriented file. please guide me. Screen shot: My code: i have used winscard.dll private void button_Transmit_Click(object sender, EventArgs e) { Status.Text = ""; byte[] baData = null; string sClass = textBox_Class.Text; string sIns = textBox_CLA.Text; string sP1 = textBox_P1.Text; string sP2 = textBox_P2.Text; string sP3 = textBox_P3.Text; sP3 = sP3.ToUpper(); int k1 = 70; string sData = textBox1.Text; byte bP1 = 0; byte bP2 = 0; byte bP3 = 0; byte bClass = byte.Parse(sClass, NumberStyles.AllowHexSpecifier); byte bIns = byte.Parse(sIns, NumberStyles.AllowHexSpecifier); if (sP1 != "" && sP1 != "@") bP1 = byte.Parse(sP1, NumberStyles.AllowHexSpecifier); if (sP2 != "" && sP2 != "@") bP2 = byte.Parse(sP2, NumberStyles.AllowHexSpecifier); int integer = int.Parse(sP3, NumberStyles.AllowHexSpecifier); byte bLe = (byte)k1; if (integer != 0 && sData.Length != 0) { baData = new byte[integer]; for (int nJ = 0; nJ < sData.Length; nJ += 2) baData[nJ / 2] = byte.Parse(sData.Substring(nJ, 2), NumberStyles.AllowHexSpecifier); bLe = 0; } UInt32 m_nProtocol = (uint)PROTOCOL.Undefined; uint RecvLength = 0; byte[] ApduBuffer = null; IntPtr ApduResponse = IntPtr.Zero; SCard_IO_Request ioRequest = new SCard_IO_Request(); ioRequest.m_dwProtocol = m_nProtocol; ioRequest.m_cbPciLength = 8; if (baData == null) { ApduBuffer = new byte[4 + ((bLe != 0) ? 1 : 0)]; if (bLe != 0) { ApduBuffer[4] = (byte)bLe; } } else { if (textBox1.Text.Length > 8) { ApduBuffer = new byte[5 + baData.Length]; Buffer.BlockCopy(baData, 0, ApduBuffer, 5, baData.Length); ApduBuffer[4] = (byte)(baData.Length); } //read binary else { ApduBuffer = new byte[5 + baData.Length + 1]; Buffer.BlockCopy(baData, 0, ApduBuffer, 5, baData.Length); ApduBuffer[4] = (byte)(baData.Length); ApduBuffer[5 + baData.Length] = 255; } } ApduBuffer[0] = bClass; ApduBuffer[1] = bIns; ApduBuffer[2] = bP1; ApduBuffer[3] = bP2; m_nLastError = SCardTransmit(scard.m_hCard, ref ioRequest, ApduBuffer, (uint)ApduBuffer.Length, ref ioRequest, ApduResponse, ref RecvLength); textBox2.Text = ""; byte[] caReadersData = new byte[RecvLength]; if (m_nLastError == 0) { ApduResponse = Marshal.AllocHGlobal((int)RecvLength); if (m_nLastError == 0) { m_nLastError = SCardTransmit(scard.m_hCard, ref ioRequest, ApduBuffer, (uint)ApduBuffer.Length, ref ioRequest, ApduResponse, ref RecvLength); if (RecvLength > 2) { for (int nI = 0; nI < RecvLength - 2; nI++) { caReadersData[nI] = Marshal.ReadByte(ApduResponse, nI); //kl[nI] = Marshal.ReadByte(ApduResponse, nI); //result = string.Format("{0:X02}", caReadersData[nI]); //Status.Text += string.Format("{0:X02}", caReadersData[nI]) + " "; textBox2.Text += string.Format("{0:X02}", caReadersData[nI]) + " "; //result = Status.Text; } } else { for (int nI = 0; nI < RecvLength; nI++) { caReadersData[nI] = Marshal.ReadByte(ApduResponse, nI); Status.Text += string.Format("{0:X02}", caReadersData[nI]) + " "; } } } } Marshal.FreeHGlob al(ApduResponse); } Continue reading...
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.