もくじ
https://tera1707.com/entry/2022/02/06/144447
やりたいこと
Windowsのデバイスマネージャーに出てくるような、デバイスドライバ関連の情報を取る方法を勉強したい。
で、MSのドキュメントを見たりしたが、さっぱりわからない。
職場の方に、「DevCon」というのを動かして理解したら、勉強になるよと教えていただいたので、そのコードをビルドして動かしてみる。
DevConのコードはこちら。
やったこと
下記ページに、やってみたことを全部書いた。
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の参考にした記事