2016-08-31 10 views
0

新しいMifareクラシックタグをProximity APIで読み取り可能なDNEF形式に初期化しようとしています。Windows 10デスクトップでNDEFタグを初期化する

マイクロソフトによると、近接APIは、必要に応じてmifareクラシックタグをNDEF形式に初期化することができます(hereおよびhereと記載)。

メッセージを公開するのコード行を使用して

しかし、:

proximityDevice.PublishBinaryMessage("NDEF:WriteTag", ndef.ToByteArray().AsBuffer(), MessageTransmittedHandler); 

タグを初期化し、何かを書くだけのために、Android携帯で行われ、プリフォーマットされたNDEFタグ(上で動作しません。例)。

NFCリーダー/ライターの近接デバイスであるデスクトップファミリのNDEF形式にTAGを初期化する方法はありますか? (NXP NearFieldProximityプロバイダ)


UPDATE:

私はWinRTのスマートカードフレームワークをサポートする、のMifareカードへのAPDUデータを送信するために、すべての低レベルの操作でOnovotnyから.NET用MIRAFEのAPIを見つけました私は使用しています。この例外を生成、カードにログインしようとすると

問題は今、すべてのデータ操作(のgetDataまたはsetDataメソッド)で構成されています

"The smart card has been reset, so any shared state information is invalid. (Exception from HRESULT: 0x80100068)" 

私はカード識別とカードはAndroidデバイス上writabbleで取得することができます。また、KeyAを{0x00,0x00,0x00,0x00,0x00,0x00}、{0xFF、0xFF、0xFF、0xFF、0xFF、0xFF}に変更しようとしましたが、{0xA0,0xA1,0xA2,0xA3,0xA4,0xA5}結果は同じです。

答えて

1

「スマートカードデバイス列挙サービス」と呼ばれるservices.mscでWindowsサービスを開始したので、スマートカードとの間でデータの書き込み/読み取りができるようになりました。

NDEFフォーマットについては、セクタ0、ブロック1および2にMADデータを挿入しました。その後、セクタ1、ブロック0.2にNDEFレコードを追加しました。その後、私はこのようなMADとNDEF部門のキーAとキーB更新:充填

MADと手動で2つのNDEFレコード:NDEFレコードの

 //Atualiza KeyB 
     mifareCard.AddOrUpdateSectorKeySet(new SectorKeySet { 
      Key = new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, 
      KeyType = KeyType.KeyB, 
      Sector = 0 
     }); 
     //Seta dados do MAD 
     await mifareCard.SetData(0, 1, new byte[] { 0x14, 0x01, 0x03, 0xE1, 0x03, 0xE1, 0x03, 0xE1, 0x03, 0xE1, 0x03, 0xE1, 0x03, 0xE1, 0x03, 0xE1 }); 
     await mifareCard.SetData(0, 2, new byte[] { 0x03, 0xE1, 0x03, 0xE1, 0x03, 0xE1, 0x03, 0xE1, 0x03, 0xE1, 0x03, 0xE1, 0x03, 0xE1, 0x03, 0xE1 }); 

     mifareCard.AddOrUpdateSectorKeySet(new SectorKeySet { 
      Key = new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, 
      KeyType = KeyType.KeyB, 
      Sector = 1 
     }); 
     //Incluis dois records NDEF 
     await mifareCard.SetData(1, 0, new byte[] { 0x00, 0x00, 0x03, 0x11, 0xD1, 0x01, 0x0D, 0x55, 0x01, 0x61, 0x64, 0x61, 0x66, 0x72, 0x75, 0x69 }); 
     await mifareCard.SetData(1, 1, new byte[] { 0x74, 0x2E, 0x63, 0x6F, 0x6D, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }); 

     await mifareCard.Flush(); 

更新キー:

 //Get MAD sector 
     var setor = mifareCard.GetSector(0); 
     //Get Trail data 
     await setor.GetData(3); 
     //Update chaves. Acess bits are generated by Mirafe API 
     await setor.FlushTrailer(
      Extensions.ByteArrayToString(new byte[] { 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5 }), 
      Extensions.ByteArrayToString(new byte[] { 0xD3, 0xF7, 0xD3, 0xF7, 0xD3, 0xF7 } 
     )); 

     //Set others sectors keys for NDEF 
     for (var sector = 1; sector < 16; sector++) { 
      try { 
       setor = mifareCard.GetSector(sector); 
       await setor.GetData(3); 
       await setor.FlushTrailer(
        Extensions.ByteArrayToString(new byte[] { 0xD3, 0xF7, 0xD3, 0xF7, 0xD3, 0xF7 }), 
        Extensions.ByteArrayToString(new byte[] { 0xD3, 0xF7, 0xD3, 0xF7, 0xD3, 0xF7 } 
       )); 
      } catch (Exception ex) { 
       Debug.Write(ex.Message + "\n"); 
      } 
     } 
関連する問題