misc.log

日常茶飯事とお仕事と

レジストリのDWORDとBINARYで桁の並びが違う件

忘れるのでメモっておこう。

このところ、レジストリ直接編集なんて久しぶりの作業を頻繁に行う機会がありまして。その中で、設定値の記述方法で引っかかりがちな項目があるのでメモしておきます。

DWORDでの表現

DWORD形式でのレジストリ値の設定は、CPUがデータを取り扱う方式(エンディアン: endian)の違いによって並びが変わります。インテルx86系CPU、いわゆるPentiumナントカ、やCoreナントカってやつは「リトルエンディアン」という形式。その場合、もともと「12 34 56 78」という数字の並びのデータは「78 56 34 12」と並べる必要があります*1

従って、BINARY形式(レジストリエディタだと、REG_BINARY)で「00 00 01 00」という設定は、DWORD形式だと「00 01 00 00」になります。

参考情報

マイクロソフトのサイトに公式に記載されていますね。

Registry Value Types/Windows Dev Center
https://msdn.microsoft.com/en-us/library/windows/desktop/ms724884(v=vs.85).aspx

また、このあたりにも末尾の備考に書いてあります。

JSI Tip 8407. How does the EditFlags Value Name control a users ability to modify a files association?/Windows IT Pro
http://windowsitpro.com/windows/jsi-tip-8407-how-does-editflags-value-name-control-users-ability-modify-files-association

*1:トルエンディアン: わざわざこんなわかりづらい並べかたにする理由は、コンピューターが内部処理するのにこの方が楽、という都合によるものです。人間よりもコンピューターを優先したデータ保持方式ということであきらめましょう。