1
CrystalDiskMark を
Windows ストアに
登録してみた
プログラミング生放送勉強会 第46回
@株式会社DMM.comラボ(恵比寿)
宮崎 典行
Twitter: @openlibsys
http://crystalmark.info/ 71PAGES
2
自己紹介
CrystalDiskMark
Windows ストアへの道
CrystalDiskInfo
NVMe 対応への道
まとめ
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さっぽろ雪まつり (2/6-2/12)
FF7 REMAKE 楽しみ!!
5自作ソフトウェア紹介
CrystalDiskInfo CrystalDiskMark
CrystalMark 2004 CrystalCPUID
6念願の Windows ストアデビュー!!
Desktop App Converter サイコー
本日のメインテーマ
7AmorphousDiskMark
CrystalDiskMark の macOS 版!?
katsura シェアウェア
http://katsurashareware.com/index-j.html
AmorphousDiskMark by @polydron
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
公式応援キャラクター
10公式サイトにて壁紙公開中!!
超高解像度(8K/7680x4320)壁紙
http://水晶雫.com/
11【宣伝】第二世代萌え駆動開発
http://www.slideshare.net/hiyohiyo/mddwin32
ソフトウェア開発で一番大切
なことを紹介しています!!
12
Windows ストアへの道
13UWP (Universal Windows Platform) アプリとは
Windows 10 を実行する全てのデバイスで
利用可能な共通アプリプラットフォーム
出典: https://msdn.microsoft.com/ja-jp/library/windows/apps/dn894631.aspx
14UWP アプリの制限
自由なファイルアクセス 管理者権限での動作
プロセス間通信 低レイヤー API 使用
ループバック通信 データベースアクセス
高度なシステム系ツールの開発は実質不可能
従来のデスクトップアプリと長期間併存 (私見)
15Desktop Bridge
Windows デスクトップアプリ(Win32/WPFなど)
を UWP アプリパッケージに変換
• Desktop App Converter
• 3rd Party 製インストーラー
従来のデスクトップアプリと同じように動作
※管理者権限では動作出来ないなど制限あり
出典: https://developer.microsoft.com/ja-jp/windows/bridges/desktop
変換方法
16管理者権限が必要なアプリばかり…
CrystalDiskInfo CrystalDiskMark
CrystalMark 2004 CrystalCPUID
要管理者権限
要管理者権限 要管理者権限
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
Windows ストアへ登録
Desktop App Converter
Win32/.NET アプリ&インストーラー作成
Desktop App Converter セットアップ
AppX 形式に変換
開発者登録/特別な申請
19アプリ&インストーラー作成
サイレントモード対応のインストーラー必須
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
が必要です!!
21Desktop App Converter セットアップ
実行中の Windows 10 と同じバージョン
の BaseImage でセットアップ
22AppX 形式に変換
サイレントモードオプションを忘れずに!!
Inno Setup: “/VERYSILENT /SP-”
23AppX のインストール……
そのままではインストール出来ません!!
24システムへの登録
PS C:¥WINDOWS¥system32> Add-AppxPackage -Register
C:¥MyAppFolder¥CrystalDiskMark5¥PackageFiles¥AppxManifest.xml
25コード署名をすれば野良配布も可能!!
コードサイニング証明書
+
26
Windows ストアへ登録
Desktop App Converter
Win32/.NET アプリ&インストーラー作成
Desktop App Converter セットアップ
AppX 形式に変換
開発者登録/特別な申請
27Microsoft アカウントの取得
https://www.microsoft.com/ja-jp/msaccount/
28アカウント情報の登録
https://dev.windows.com/ja-jp/programs/join
29アカウント情報の登録
https://dev.windows.com/ja-jp/programs/join
30特別な申請
https://developer.microsoft.com/en-us/windows/projects/campaigns/desktop-bridge
デスクトップアプリをストア登録するため
の申請を英語で行います。
31待てど暮らせど・・・
全然連絡が来ない!!!!
32中の人降臨
US担当者に連絡取るので
詳細教えてもらえますか?
おぉ~ツイートがきっかけ!?
で中の人から連絡が!?
通常フローの待ち時間はわかりません。
関係者に連絡をすれば何とかなるかも……
33
Windows ストアへ登録
Desktop App Converter
Win32/.NET アプリ&インストーラー作成
Desktop App Converter セットアップ
AppX 形式に変換
開発者登録/特別な申請
34ストアへ登録
35統計データ
36レビュー
世界中からレビューいただきました!!
37審査はザルかもしれない…
DiskMark32.exe
DiskMark64.exe diskspd64.exe
diskspd32.exe32bit
64bit
DiskMark32.exe diskspd64.exe誤爆
UI Benchmark
38つまり……
動かなくても審査には通るのかも!?
ごめんなさい m(_ _)m
すぐに修正版に更改しました。
39まとめ
Win32/WPF/WinForms アプリをお持ちの方は
ぜひチャレンジしてみてください!!
Windows ストアを盛り上げていきましょう!!
40
NVM Express
41NVMe とは
NVM Express (NVMe)
SSD 向け次世代インターフェース
最大の特徴
速い!!
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)
43AHCI vs NVMe
ベンチマーカー視点での最重要ポイント
AHCI NVMe
Queue 1 64K
Commands/Queue 32 64K
Q32T1 Q32T4 Q32T8
TOSHIBA PX04PMC080 800GB
ランダム4KiBリード結果 (MB/s)
テストサイズ: 1GiB
44
CrystalDiskInfo
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ベンダーが多数
出現し個別対応が必要に……
46CrystalDiskInfo の開発コードネーム
1.0: Feena
2.0: Earthlight
3.0: Moonlight
4.0: Licia
5.0: Cynthia
6.0: Freesia
7.0: Marguerite
© August
第
一
世
代
第
二
世
代
萌える想いをコードに変換!!
47
CrystalDiskInfo 8
~ Marginality ~
開発は全く進んでいませんが……
© August
48NVMe 対応への道のり
CrystalDiskInfo 7
PATA/SATA RAID USB
(IEEE1394)
NVMe
49NVMe のコマンド体系
標準コマンド
必須3種類
Admin コマンド
必須10種類
50Intel SSD 750 1.2TB
51SAMSUNG SSD 950 PRO 512GB
NVMe 調査のために購入
52SAMSUNG SM951 128GB
NVMe 調査のためだけに購入
53TOSHIBA PX04PMC080 800GB
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.
55S.M.A.R.T. 情報の取得 (USBの場合)
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
どうしたら・・・
NVMe SSD の S.M.A.R.T. 情報が
Windows 上から読めない!!!!!!!!!!
NVMe \(^o^)/オワタ
58神降臨
日本語の (*´Д`)ハァハァ ツイートに
韓国の神から反応が!!
グローバルな活動が呼んだ奇跡か!?
59神降臨
http://naraeon.net/
https://github.com/ebangin127/nvmetools
60
神プロジェクトは Delphi 製だったorz
ステップ実行のため体験版ゲット(>_<)
【余談】神は Delphi 使いだったorz
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
::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隠しコマンド大好き!!
秘密の裏口
大好きです!!
隠しコマンドが
あるなんてビックリです‼
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 コマンドを送る
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 コマンドを送る
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
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ついに NVMe に対応!!
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まとめ
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月

20170211_pronama_CrystalDiskMark_UWP