低レベルプログラミング

タイトルにつられ気味で、この本を買いました。

タイトルや副題が心に刺さったので買ったのですが、予想通りにいい本だったと思います。
今時珍しい、C言語とアセンブラを繋いでくれる内容となっています。しかも”古くさいC”ではなく”今時のC言語”ですし、 8086 や 486 のアセンブラでは無く、 x64 のアセンブラとなっています。

昔は割と低レベルといえば、以下の書籍が定番だったように思います。

  • はじめて読む486―32ビットコンピュータをやさしく語る
  • はじめて読む8086―16ビット・コンピュータをやさしく語る

これらの現代版といった感じになるのかなという印象でした。

ここのブログを読んでくれているような人は分かっていると思いますが、「低レベルプログラミング」というのはハードウェアに近いレイヤでのプログラミングのことを差しています。最近は書籍の種類も減ってきている中、こういったレイヤの書籍が出てくるのは本当に嬉しく思いました。前に読んだ同類な印象のものは以下の書籍たちでした。

自分としては 30日でできる~のほうが、読みやすかったし読んでいてワクワクした記憶があります。ただどちらもハードウェアに近い部分の話をしてくれているので面白かったですね。


WPF TreeView with SelectedPath binding

Windows エクスプローラーが備えているフォルダツリーのようなものを、 WPF を利用している自作アプリケーションで使用したいことがあります。
調べてみるといくつかの実装が見つかりますが、フォルダツリーの実現のためにビューモデルとビューが分離されている本気度の高いものが多く、もう少し手軽なものがないかなと思った次第です。

以前に以下のアドレスで公開されていた方式が割と気に入っていたのですが、現時点においてアクセスが出来なくなってしまいました。
http://khmylov.com/blog/2010/11/wpf-explorer-treeview-with-selectedpath-binding/

ちょっとしたときにはこれで十分だったりしてお気に入り実装だったので、元の記事を自分なりに再解釈してみたいと思います。

続きを読む


Microsoft Store と Thumbnail Handler

Microsoft ストアでデスクトップアプリも配布できるようになったおかげで、一部のシェル拡張も配布出来るようになりました。
現時点においては、サムネイルハンドラやプレビューハンドラ、プロパティハンドラが対応しているようです。 Paint.Net もストアでの配布が始まり、そのタイミングで tga と dds ファイルのサムネイルハンドラが機能するようになったみたいです。
サムネイルハンドラと聞いて、これはちょっと調べておかないとと思ったので、記録として残しておきます。

情報について

元は Desktop Bridge: Creators Update のブログで書かれた内容が最初でした。
従来のデスクトップアプリをストアで配布出来るように、 Desktop Bridge の機能が用意されました。ここでファイルの関連付けや各ハンドラのようなレジストリの変更が必要なものも対応出来るように機能拡張されて使えるようになりました。

続きを読む


Windows10 で x86/x64 インストールディスクをまとめる その2

以前のチャレンジでは UEFI に対応できていない状態だったので、 UEFI 対応のインストールディスクに出来ないかをチャレンジしてみました。
まずは USB メモリに 32bit, 64bit どちらの UEFI からでも使えるようにデータを構築したいと思います。 ただ多くの環境では 64bit UEFI のため、 32bit のほうは出番が少ないと思います。
たまに 32bit UEFI を搭載している場合があるので、そのときのことを考慮しなければ、 UEFI は 64bit のみ、と割り切ると作業が楽になるかもとは思います。

続きを読む


Windows10 で x86/x64 インストールディスクをまとめる

dism を使って wim を操作している際に、実は x86 版と x64 版のインストールディスクも結合できるのではないかと思ったので挑戦してみました。結果は一部課題が残っていますが、悪くはないのかなと思っています。

準備

それぞれのインストールディスクから中身をコピーしておきます。
とりあえず Fドライブに 32bit のディスクが、 Gドライブに 64bit のディスクがセットされているとして、 d:\work ディレクトリ以下にコピーするコマンドは以下のようになります。

よく使うエディションが Professional のものなのでこれだけを取り出して使用することにします。他のエディションも使いたい場合にはそれのインデックス番号を確認して取り出してください。

このようにして取り出すと、 install.wim よりはファイルサイズが若干小さくなりました。容量をケチる方法として、 export-image を使うことも出来そうな気がします。

続きを読む


Windows7 の WindowsUpdate 適用済みディスクを作る (2018/01版)

当ブログで人気のある記事の1つに「Windows7SP1 ディスクに ロールアップKB3125574 を統合する」 がありますが、これは 2016 年夏のものでした。
今でもこの方法で、うまく結合できることは確認しましたが、ロールアップや累積的な更新プログラムが何度か出ているので、手順も更新したほうが良いと感じたのでまとめ直しました。
以降の内容では、 x64 版で作業していますが、 x86 版でもファイル名などの読み替え程度で適用できるようにしています。

関連記事

作業環境

Windows10 Professional 1703 x64 の環境で本記事の作業を行いました。それ以外の環境で当作業を行う場合には、 dism のバージョンが違うことによるオプションの違いが発生するかと思われます。
また、最後の起動ディスクイメージ作成に oscdimg を使用するために、 Windows ADK をインストールしてあります。この中に含まれる Deployment tools をインストールすると oscdimg が使用可能となりました。
USB メモリに起動ディスクを作成する場合には、 oscdimg は不要です。

続きを読む


DirectX11 でマルチフルスクリーン その3

DirectX11 でマルチディスプレイ環境で全てのディスプレイでフルスクリーンモードとしたいのに SetFullscreenState が失敗してしまう件の続報です。
この症状は、 Windows10 Creators Update 適用環境でも発生します。おそらく RTM 版から挙動は変わっていないのでは、と思います。詳しくは、前回までの記事を参照してもらうとして、今回は「どうしてもフルスクリーンモードを使いたいんだ」ということで、1つの提案を出してみたいと思います。

続きを読む



DirectX11 でマルチフルスクリーン

Windwos 10 になってから、 DirectX11 の挙動で妙な点を発見しました。
以前 Windows 8.0 で OpenGL をマルチディスプレイで使った際にも変な動きがありました。それについての詳細情報は以前の日記を参照してください。OpenGL での問題の動きは Windows10 1703 でも発生していないようです。
今回の問題は、 SetFullscreenState が失敗して、各ディスプレイでフルスクリーンに遷移できないというものです。

現挙動の確認

昔ながらのコードが悪いのかと思い、 IDXGIFactory2 を使用して、 CreateSwapChainForHwnd でスワップチェインを作成するようにしてみました。
また、 DXGI_SWAP_CHAIN_FULLSCREEN_DESC にも各ディスプレイから取得した情報で値をセットするようにし、 Windowed メンバを TRUE にした状態で、フルスクリーンのスワップチェインを作成するようにしました。もちろん、各画面に応じて別のウィンドウとなるため、ウィンドウ (HWND) は2つ作成しています。

これでアプリケーションを実行すると、一瞬フルスクリーンモードになるのですが、すぐに解除されてしまいウィンドウモードでの実行となってしまいました。 NVIDIA, Intel ともに同じ動きをしているので、 Microsoft Windows 側の仕様変更が疑われます。

GetFullscreenState で状態を確認して、フルスクリーンモードに再度遷移する、と実装を修正して実行を試みました。結果はある程度はフルスクリーンモード状態になって、その後解除され、再びフルスクリーンモードに遷移して・・・と繰り返す動きでした。

続きを読む


CentOS (on Hyper-V) に Chinachu をセットアップ

Windows10 の Hyper-V の中に Chinachu をセットアップしてみました。
基本的には CentOS 7 (1708) へ Chinachu のインストール手順と変わらないです。以前に構築した Mirakurun の環境と接続するため、実行環境が別、 OS も別、という条件下になります。
同一の OS に Mirakurun, Chinachu をインストールして使う場合には今回のような手順にはならない点には注意してください

仮想マシンの準備

Hyper-V の第2世代の仮想マシンとして作成しました。以下のような構成にしています。ポイントになるのはネットワークアクセスが必要なので、仮想スイッチを作成、外に出られるようにしておくことです。

仮想スイッチマネージャでインターネットへアクセスできるように仮想スイッチを作成します。
種類は “外部ネットワーク” を選択して、実際に搭載しているネットワークアダプタをコンボボックスで選べばよいと思います。複数のネットワークアダプタを搭載している場合には、ここでインターネットに出られるアダプタを選択する必要があります。ここで作成した仮想スイッチを使うように仮想マシンを設定します。

続いて CentOS は 最小インストールで構築したためいくつかのパッケージが不足している状態です。
そのため以下のパッケージをインストールしておきます。

定番の作業ではありますが、 SELinux も無効にしておきます。
/etc/sysconfig/selinux ファイルを編集して、 SELINUX=disabled としておきます。その後再起動を行います。

時刻合わせのために chrony のセットアップをしておきます。

/etc/chrony.conf を開いて、 server の項目を変更しておきます。

この部分は、各自の NTP サーバーとして近いところを記述しておくのが理想的です。

続きを読む