DevConのサンプルコードをビルドして動かす(コンパクト版)

もくじ
https://tera1707.com/entry/2022/02/06/144447

やりたいこと

Windowsのデバイスマネージャーに出てくるような、デバイスドライバ関連の情報を取る方法を勉強したい。

で、MSのドキュメントを見たりしたが、さっぱりわからない。

職場の方に、「DevCon」というのを動かして理解したら、勉強になるよと教えていただいたので、そのコードをビルドして動かしてみる。

DevConのコードはこちら。

github.com

やったこと

下記ページに、やってみたことを全部書いた。

https://tera1707.com/entry/2024/02/14/232911

が、たぶん余計なことをいろいろしていたので、最低限必要なことだけピックアップしてみた。

やったこと抜粋

サンプルコードダウンロード

DevConを含む「Windows-driver-samples」をダウンロードする。

https://github.com/microsoft/Windows-driver-samples/tree/main

そこの中のDevConのソリューションを開く。

githubでいうところの下記。

https://github.com/microsoft/Windows-driver-samples/blob/main/setup/devcon/devcon.sln

ダウンロードしたslnを開いてビルドする

まずビルドすると、下記のようなエラーが出る。

「Spectre Mitigation」が有効になっているとこうなるらしいので、この設定を「無効」にする。

msg.hがないエラーになる?

ここまでやると、ビルドが通った。

のだが、前回、予行演習でDevConを試したときは、ここで「msg.hがない」旨のエラーがでて、ビルドが通らなかった。

なぜか今回はエラーにならず、前回エラーになって苦しんだmsg.hは、ビルドをすると、どこからかコピーされて、出力先フォルダの中に勝手に生成されてる様子。

必要なヘッダーがない、ビルドが通らないなんてMSのコードはどうなってるのか?と前回思ってしまっていたが、どこからかコピーされて生成されるのが意図?仕様?だったのか?

詳細は分からないが、前回そのエラーが出てた時はこちらに書いたやり方で、別のrepoからとってきて回避したので、もしまたそういう状態になったらそっちをやってみること。

DevConの出力した日本語文字列が化ける

ビルドできて、リポジトリのreadmeに書いてあるコマンドを実行すると、うまく出力はされるが、日本語が化ける。

ターミナルでchcp 65001とかしてもダメだった。

ここを参考にして、setlocaleをしてやると、日本語が化けずに出力されるようになった。

devcon.cppの冒頭に下記を書いて、

#include <locale.h>

devcon.cpp の _tmain() の開始直後に下記を入れた。

setlocale(LC_ALL, "Japanese");

これで、うまく日本語が出てくれた。

完了

これで、DevConを動かすことはできた。

動かすところで力尽きたが、本来の目的はこれを動かして、コードの中で使われているドライバ関連の情報を取るためのAPIを理解することなので、ここから中身を見て、APIをあれこれしてみる。

参考

DevConのMSリポジトリ(ドライバのサンプル)

https://github.com/microsoft/Windows-driver-samples/tree/main/setup/devcon

前回、サンプルをビルドしたけどエラー出たときに、何が悪いかわからなくて試行錯誤したときのメモ記事
もし今回書いたやり方でうまくいかないときは、下記の前回記事でやったこともやってみたら、なにか役に立つかもしれない。

https://tera1707.com/entry/2024/02/14/232911

Spectre Mitigation(Spectre軽減)のエラー対処方法

https://learn.microsoft.com/ja-jp/visualstudio/msbuild/errors/msb8040?view=vs-2022

setlocaleの参考にした記事

https://oshiete.goo.ne.jp/qa/5388646.html