Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

20170211_pronama_CrystalDiskMark_UWP

3,883 views

Published on

Desktop App Converter を使って Win32 アプリを UWP 化する方法を紹介します。

Published in: Technology
  • Be the first to comment

20170211_pronama_CrystalDiskMark_UWP

  1. 1. 1 CrystalDiskMark を Windows ストアに 登録してみた プログラミング生放送勉強会 第46回 @株式会社DMM.comラボ(恵比寿) 宮崎 典行 Twitter: @openlibsys http://crystalmark.info/ 71PAGES
  2. 2. 2 自己紹介 CrystalDiskMark Windows ストアへの道 CrystalDiskInfo NVMe 対応への道 まとめ
  3. 3. 3自己紹介 名前:宮崎 典行, hiyohiyo/ひよひよ 年齢:38歳 家族:愛妻, 愛娘, 愛息子 趣味:ソフトウェア開発 (約18年) 住所:北海道札幌市 所属:CLR/H 代表作: CrystalDiskInfo, CrystalDiskMark 他(通称 Crystal シリーズ) パソコンがもっと好きになるソフトウェアを一貫して開発しています Microsoft MVP ・Visual C++ (Jan. 2014 – Sep. 2015) ・Visual Studio and Development Technologies (Oct. 2015 -)
  4. 4. 4さっぽろ雪まつり (2/6-2/12) FF7 REMAKE 楽しみ!!
  5. 5. 5自作ソフトウェア紹介 CrystalDiskInfo CrystalDiskMark CrystalMark 2004 CrystalCPUID
  6. 6. 6念願の Windows ストアデビュー!! Desktop App Converter サイコー 本日のメインテーマ
  7. 7. 7AmorphousDiskMark CrystalDiskMark の macOS 版!? katsura シェアウェア http://katsurashareware.com/index-j.html AmorphousDiskMark by @polydron
  8. 8. 8CrazyDiskInfo CrystalDiskInfo の Linux 版!? CrazyDiskInfo is an interactive TUI S.M.A.R.T viewer for Unix systems. https://github.com/otakuto/CrazyDiskInfo CrazyDiskInfo by @otakuto5648
  9. 9. 9 公式応援キャラクター
  10. 10. 10公式サイトにて壁紙公開中!! 超高解像度(8K/7680x4320)壁紙 http://水晶雫.com/
  11. 11. 11【宣伝】第二世代萌え駆動開発 http://www.slideshare.net/hiyohiyo/mddwin32 ソフトウェア開発で一番大切 なことを紹介しています!!
  12. 12. 12 Windows ストアへの道
  13. 13. 13UWP (Universal Windows Platform) アプリとは Windows 10 を実行する全てのデバイスで 利用可能な共通アプリプラットフォーム 出典: https://msdn.microsoft.com/ja-jp/library/windows/apps/dn894631.aspx
  14. 14. 14UWP アプリの制限 自由なファイルアクセス 管理者権限での動作 プロセス間通信 低レイヤー API 使用 ループバック通信 データベースアクセス 高度なシステム系ツールの開発は実質不可能 従来のデスクトップアプリと長期間併存 (私見)
  15. 15. 15Desktop Bridge Windows デスクトップアプリ(Win32/WPFなど) を UWP アプリパッケージに変換 • Desktop App Converter • 3rd Party 製インストーラー 従来のデスクトップアプリと同じように動作 ※管理者権限では動作出来ないなど制限あり 出典: https://developer.microsoft.com/ja-jp/windows/bridges/desktop 変換方法
  16. 16. 16管理者権限が必要なアプリばかり… CrystalDiskInfo CrystalDiskMark CrystalMark 2004 CrystalCPUID 要管理者権限 要管理者権限 要管理者権限
  17. 17. 17CrystalDiskMark (2007年リリース) 出典:窓の杜 http://www.forest.impress.co.jp/article/2007/04/03/crystaldiskmark.html □プログラム名 CrystalDiskMark (くりすたるでぃすくまーく) □人気 ★ ★ ★ ★ ☆ 年間200万DL以上 (Shizuku Edition 含む) □開発動機 ストレージに特化すれば良いもの作れる? □アピールポイント • 縮小スクリーンショットでも全てがわかる • とにかくシンプル • 多言語対応 (40言語以上) □リスペクト • FDBENCH (EP82改/かず 氏) □ひとこと • 国内外でHDD/SSDの新製品評価に活用
  18. 18. 18 Windows ストアへ登録 Desktop App Converter Win32/.NET アプリ&インストーラー作成 Desktop App Converter セットアップ AppX 形式に変換 開発者登録/特別な申請
  19. 19. 19アプリ&インストーラー作成 サイレントモード対応のインストーラー必須
  20. 20. 20Desktop App Converter セットアップ https://www.microsoft.com/ja-jp/store/p/Desktop%20App%20Converter/9nblggh4skzw Desktop App Converter で検索 http://aka.ms/converterimages Windows 10 Base Image が必要です!!
  21. 21. 21Desktop App Converter セットアップ 実行中の Windows 10 と同じバージョン の BaseImage でセットアップ
  22. 22. 22AppX 形式に変換 サイレントモードオプションを忘れずに!! Inno Setup: “/VERYSILENT /SP-”
  23. 23. 23AppX のインストール…… そのままではインストール出来ません!!
  24. 24. 24システムへの登録 PS C:¥WINDOWS¥system32> Add-AppxPackage -Register C:¥MyAppFolder¥CrystalDiskMark5¥PackageFiles¥AppxManifest.xml
  25. 25. 25コード署名をすれば野良配布も可能!! コードサイニング証明書 +
  26. 26. 26 Windows ストアへ登録 Desktop App Converter Win32/.NET アプリ&インストーラー作成 Desktop App Converter セットアップ AppX 形式に変換 開発者登録/特別な申請
  27. 27. 27Microsoft アカウントの取得 https://www.microsoft.com/ja-jp/msaccount/
  28. 28. 28アカウント情報の登録 https://dev.windows.com/ja-jp/programs/join
  29. 29. 29アカウント情報の登録 https://dev.windows.com/ja-jp/programs/join
  30. 30. 30特別な申請 https://developer.microsoft.com/en-us/windows/projects/campaigns/desktop-bridge デスクトップアプリをストア登録するため の申請を英語で行います。
  31. 31. 31待てど暮らせど・・・ 全然連絡が来ない!!!!
  32. 32. 32中の人降臨 US担当者に連絡取るので 詳細教えてもらえますか? おぉ~ツイートがきっかけ!? で中の人から連絡が!? 通常フローの待ち時間はわかりません。 関係者に連絡をすれば何とかなるかも……
  33. 33. 33 Windows ストアへ登録 Desktop App Converter Win32/.NET アプリ&インストーラー作成 Desktop App Converter セットアップ AppX 形式に変換 開発者登録/特別な申請
  34. 34. 34ストアへ登録
  35. 35. 35統計データ
  36. 36. 36レビュー 世界中からレビューいただきました!!
  37. 37. 37審査はザルかもしれない… DiskMark32.exe DiskMark64.exe diskspd64.exe diskspd32.exe32bit 64bit DiskMark32.exe diskspd64.exe誤爆 UI Benchmark
  38. 38. 38つまり…… 動かなくても審査には通るのかも!? ごめんなさい m(_ _)m すぐに修正版に更改しました。
  39. 39. 39まとめ Win32/WPF/WinForms アプリをお持ちの方は ぜひチャレンジしてみてください!! Windows ストアを盛り上げていきましょう!!
  40. 40. 40 NVM Express
  41. 41. 41NVMe とは NVM Express (NVMe) SSD 向け次世代インターフェース 最大の特徴 速い!!
  42. 42. 42 0 500 1000 1500 2000 2500 3000 3500 4000 NVMe @PCIe 3.0x4 SATA/600 SATA/300 SATA/150 UDMA/100 UDMA/66 UDMA/33 転送レート (MB/s)
  43. 43. 43AHCI vs NVMe ベンチマーカー視点での最重要ポイント AHCI NVMe Queue 1 64K Commands/Queue 32 64K Q32T1 Q32T4 Q32T8 TOSHIBA PX04PMC080 800GB ランダム4KiBリード結果 (MB/s) テストサイズ: 1GiB
  44. 44. 44 CrystalDiskInfo
  45. 45. 45CrystalDiskInfo (2008年リリース) 出典:窓の杜 http://www.forest.impress.co.jp/article/2008/05/23/crystaldiskinfo.html □プログラム名 CrystalDiskInfo (くりすたるでぃすくいんふぉ) □人気 ★ ★ ★ ★ ★ 年間400万DL以上 (Shizuku Edition 含む) □開発のきっかけ CrystalCPUID の開発が頓挫し打ちひしがれ ていた頃に出会った「月のお姫さまがホームス テイ」という設定のゲームに出てくる「司祭の お嬢さん」があまりにツボだったため。 □アピールポイント • NVMe対応 • 一部のUSB/RAID接続に対応 • スクリーンショットで概要を把握 • 多言語対応 (30言語以上) □リスペクト • なし □ひとこと • ディスク系ツールならメンテナンス不要と 考えていたのですが、SSDベンダーが多数 出現し個別対応が必要に……
  46. 46. 46CrystalDiskInfo の開発コードネーム 1.0: Feena 2.0: Earthlight 3.0: Moonlight 4.0: Licia 5.0: Cynthia 6.0: Freesia 7.0: Marguerite © August 第 一 世 代 第 二 世 代 萌える想いをコードに変換!!
  47. 47. 47 CrystalDiskInfo 8 ~ Marginality ~ 開発は全く進んでいませんが…… © August
  48. 48. 48NVMe 対応への道のり CrystalDiskInfo 7 PATA/SATA RAID USB (IEEE1394) NVMe
  49. 49. 49NVMe のコマンド体系 標準コマンド 必須3種類 Admin コマンド 必須10種類
  50. 50. 50Intel SSD 750 1.2TB
  51. 51. 51SAMSUNG SSD 950 PRO 512GB NVMe 調査のために購入
  52. 52. 52SAMSUNG SM951 128GB NVMe 調査のためだけに購入
  53. 53. 53TOSHIBA PX04PMC080 800GB
  54. 54. 54S.M.A.R.T. | ATA Microsoft 製 ATA Driver ReadFile() ※Win32 API ATA PASS THROUGH 経由で 直接 ATA コマンドを送る ATA HDD/SSD SMART READ DATA ※ATA コマンド READ **** ※ATA コマンド データ読み出し S.M.A.R.T.
  55. 55. 55S.M.A.R.T. 情報の取得 (USBの場合)
  56. 56. 56S.M.A.R.T. | NVMe (Win8.1) Microsoft 製 NVMe Driver (Win7/8/8.1/2012) ReadFile() ※Win32 API NVMe SSD Get Log Page ※NVMe コマンド Read ※NVMe 標準コマンド データ読み出し S.M.A.R.T. Admin コマンド を通さない!!
  57. 57. 57 どうしたら・・・ NVMe SSD の S.M.A.R.T. 情報が Windows 上から読めない!!!!!!!!!! NVMe \(^o^)/オワタ
  58. 58. 58神降臨 日本語の (*´Д`)ハァハァ ツイートに 韓国の神から反応が!! グローバルな活動が呼んだ奇跡か!?
  59. 59. 59神降臨 http://naraeon.net/ https://github.com/ebangin127/nvmetools
  60. 60. 60 神プロジェクトは Delphi 製だったorz ステップ実行のため体験版ゲット(>_<) 【余談】神は Delphi 使いだったorz
  61. 61. 61S.M.A.R.T. | SAMSUNG SSD 950 PRO Microsoft 製 NVMe Driver (Win 7/8/8.1/10/2012) ReadFile() ※Win32 API SAMSUNG SSD 950 PRO データ読み出し S.M.A.R.T. Security Command (SCSI) Get Log Page ※NVMe コマンド 秘密の裏口 からアクセス Read ※NVMe 標準コマンド SCSI PASS THROUGH 経由で 特殊な SCSI コマンドを送る
  62. 62. 62 ::ZeroMemory(&sptwb, sizeof(SCSI_PASS_THROUGH_WITH_BUFFERS24)); sptwb.Spt.Length = sizeof(SCSI_PASS_THROUGH); sptwb.Spt.PathId = 0; sptwb.Spt.TargetId = 0; sptwb.Spt.Lun = 0; sptwb.Spt.SenseInfoLength = 24; sptwb.Spt.DataTransferLength = IDENTIFY_BUFFER_SIZE; sptwb.Spt.TimeOutValue = 2; sptwb.Spt.DataBufferOffset = offsetof(SCSI_PASS_THROUGH_WITH_BUFFERS24, DataBuf); sptwb.Spt.SenseInfoOffset = offsetof(SCSI_PASS_THROUGH_WITH_BUFFERS24, SenseBuf); sptwb.Spt.CdbLength = 16; sptwb.Spt.Cdb[0] = 0xB5; // SECURITY PROTOCOL IN sptwb.Spt.Cdb[1] = 0xFE; // SAMSUNG PROTOCOL sptwb.Spt.Cdb[3] = 6; // Get Log Page sptwb.Spt.Cdb[9] = 0x40; // Transfer Length sptwb.Spt.DataIn = SCSI_IOCTL_DATA_OUT; sptwb.DataBuf[0] = 2; // SMART Health Information sptwb.DataBuf[4] = 0xFF; sptwb.DataBuf[5] = 0xFF; sptwb.DataBuf[6] = 0xFF; sptwb.DataBuf[7] = 0xFF; length = offsetof(SCSI_PASS_THROUGH_WITH_BUFFERS24, DataBuf) + sptwb.Spt.DataTransferLength; bRet = ::DeviceIoControl(hIoCtrl, IOCTL_SCSI_PASS_THROUGH, &sptwb, length, &sptwb, length, &dwReturned, NULL); 秘密の裏口 | SAMSUNG SSD 950 PRO 一部抜粋 //SMART Health Information
  63. 63. 63隠しコマンド大好き!! 秘密の裏口 大好きです!! 隠しコマンドが あるなんてビックリです‼
  64. 64. 64S.M.A.R.T. | Samsung SM951 Samsung 製 NVMe Driver ReadFile() ※Win32 API Samsung SM951 データ読み出し S.M.A.R.T. Get Log Page ※NVMe コマンド Read ※NVMe 標準コマンド NVMe PASS THROUGH (SM951専用) 経由で NVMe コマンドを送る
  65. 65. 65S.M.A.R.T. | Intel Intel 製 NVMe Driver ReadFile() ※Win32 API Intel SSD 750 データ読み出し S.M.A.R.T. Get Log Page ※NVMe コマンド Read ※NVMe 標準コマンド NVMe PASS THROUGH (Intel専用) 経由で NVMe コマンドを送る
  66. 66. 66S.M.A.R.T. | Storage Query (Win10) Microsoft 製 NVMe Driver ReadFile() ※Win32 API NVMe SSD データ読み出し S.M.A.R.T. Get Log Page ※NVMe コマンド Read ※NVMe 標準コマンド NVMe Storage Query 経由で NVMe コマンドを送る
  67. 67. 67 BOOL CAtaSmart::GetSmartAttributeNVMeStorageQuery (INT physicalDriveId, INT scsiPort, INT scsiTargetId, ATA_SMART_INFO* asi) { CString path; path.Format(L"¥¥¥¥.¥¥PhysicalDrive%d", physicalDriveId); HANDLE hIoCtrl = CreateFile(path, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); BOOL bRet = 0; StorageQuery::TStorageQueryWithBuffer nptwb; ZeroMemory(&nptwb, sizeof(nptwb)); nptwb.ProtocolSpecific.ProtocolType = StorageQuery::ProtocolTypeNvme; nptwb.ProtocolSpecific.DataType = StorageQuery::NVMeDataTypeLogPage; nptwb.ProtocolSpecific.ProtocolDataRequestValue = 2; // SMART Health Information nptwb.ProtocolSpecific.ProtocolDataRequestSubValue = 0xFFFFFFFF; nptwb.ProtocolSpecific.ProtocolDataOffset = sizeof(StorageQuery::TStorageProtocolSpecificData); nptwb.ProtocolSpecific.ProtocolDataLength = 4096; nptwb.Query.PropertyId = StorageQuery::StorageAdapterProtocolSpecificProperty; nptwb.Query.QueryType = StorageQuery::PropertyStandardQuery; DWORD dwReturned = 0; bRet = DeviceIoControl(hIoCtrl, IOCTL_STORAGE_QUERY_PROPERTY, &nptwb, sizeof(nptwb), &nptwb, sizeof(nptwb), &dwReturned, NULL); CloseHandle(hIoCtrl); memcpy_s(&(asi->SmartReadData), 512, nptwb.Buffer, 512); return bRet; } Win10新機能 | NVMe Storage Query 一部抜粋
  68. 68. 68ついに NVMe に対応!!
  69. 69. 69NVMe 対応状況 NVMe Driver SSD Microsoft Intel Samsung Win 10 Win 8.1 Intel SSD 750 〇 × 〇 - SAMSUNG SSD 950 PRO 〇 〇 - 〇 SAMSUNG SM951 〇 × - 〇 TOSHIBA PX04PMC080 〇 × - - TOSHIBA XG3 〇 × - - ZOTAC SONIX 〇 × - - 裏口: SAMSUNG SSD 950 PROのみ
  70. 70. 70まとめ
  71. 71. 71懇親会もよろしくお願いします!! キーワード: NVMe, ベンチマーク, Benchmark, AHCI, SSD, HDD, CPU, CPUID, ビデオカード, メガデモ, Final Reality, 3DMark, HDBENCH, WCPUID, Direct3D, OpenGL, MIDI, GS, XG, Photoshop, HiDPI, 8K, 5K, 4K, Displayport 1.3, Thunderbolt 3, HDMI 2.0, BIOS, EFI, SMBIOS, Firmware, 逆アセンブル, 逆コンパイル, カーネルモードドライバ, コードサイニング証明書, デジタル署名, x64, x86, i386, Win32, Win64, MFC, Visual C++, Visual C#, WinForms, WPF, DirectWrite, Windows 10, GDI, GDI+, リソースリーク, ハンドルリーク, メモリーリーク, クラッシュ, ブルースクリーン, S.M.A.R.T., PCI, PCIExpress, 10GbE, 10GBase-T, ダブルフォルト, 8月

×