Open9

メモ

wokwok

Visual Studio Communityのインストール
・ワークロードでC++によるデスクトップ開発を追加

・個別のコンポーネントでWindows10SDKとWindowsDriverKitを追加

・インストール

wokwok

・個別のコンポーネントでWindows10SDKとWindowsDriverKitを追加したが、ChatGPTによると本体は別に必要のようだ。(謎すぎる。)

Visual Studioのインストール時に「個別のコンポーネント」で「Windows Driver Kit(WDK)」を選択すると、Visual Studio用のWDK拡張機能がインストールされます。しかし、WDK本体は別途インストールする必要があります。

手順:

Visual Studioのインストール:

「C++によるデスクトップ開発」ワークロードを選択します。
「個別のコンポーネント」で「Windows Driver Kit」を選択します。
Windows SDKのインストール:

Windows SDKのダウンロードページから、最新のWindows SDKをダウンロードしてインストールします。
WDK本体のインストール:

WDKのダウンロードページから、対応するバージョンのWDKをダウンロードしてインストールします。
これらの手順を完了することで、仮想オーディオケーブルの開発に必要な環境が整います。

WindowsSDKは、ここからダウンロード
https://developer.microsoft.com/ja-jp/windows/downloads/windows-sdk/

インストールパスの選択

後はとりあえず、Nextを連打。

インストール完了。

wokwok

https://learn.microsoft.com/ja-jp/windows-hardware/drivers/download-the-wdk
(手順が書いてあるから、初手からこのページを参考に進めればいいのかな?)

この辺も個別のインストールで必要なのか。

「64 最新」で検索して、SDKでMFCを、コンパイラでSpectre軽減ライブラリを、追加

WDKをダウンロード。

インストールパスの選択。

wokwok

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

ステップ1

READMEどおり
File > Open > Project/Solution
でWindows-driver-samples/audio/simpleaudiosampleのSimpleAudioSample.slnファイルを開く。

起動時にはSolution Explorerが開いていないのでメニューのViewから開く。

ステップ2


構成マネージャ(configuration manager)を開く。


とりあえず、構成とプラットフォームがすべて一致しているから良しとする。

ステップ3

ビルドした。
なんかいろいろ表示されるが、特にエラーもなくビルドできたみたい。

ステップ4

生成物をx64/Debug/packageの下に確認。

wokwok

VMへのインストール

QEMUでやってみる。

ステップ1


VMにもWDKが必要と書いてあるが、不要という情報もあるのでとりあえずなしでやってみる。

なんかエラーが出る。

セキュアブートを無効化しないといけないようだ。

UEFIの設定で無効化してみる。UEFIの設定画面に入る。
DeviceManager -> Secure Boot Configuration

再度実行(管理者モード)で成功した。リブートする。

devcon.exeをVMにコピーする。Readmeと異なり、
C:\Program Files (x86)\Windows Kits\10\Tools\10.0.26100.0\x64
にあった。わけわからんので、wslでfindで見つけるべし。

ビルドしたドライバ一式もコピーする。

VM上で証明書をインストールする。

ローカルコンピュータにインストールする

信頼されたルート証明機関を選ぶ。

信頼された発行元にもインストール

wokwok

ドライバインストール

コマンドプロンプトでdevconを実行(管理者モード)。うまくいったようだ。

デバイスマネージャ(devmgmt.msc )でも見える。

!!!!このデモは仮想マイク、仮想スピーカー間でループバックしないようだ。(終了ー)!!!!

wokwok

トラブルシューティング

DriverVer set to a date in the future (postdated DriverVer not allowed) in package\simpleaudiosample.inf. が出た。

https://learn.microsoft.com/ja-jp/windows-hardware/drivers/devtest/inf2cat

ソリューションエクスプローラのPackage->packageのところで右クリック。(ほかのところだと、ダイアログの名kで設定できるプロパティが違う。(わかりにく過ぎて、おしっこ漏らしそう。))
ダイアログでUse Local Timeを設定。

wokwok

(1) devconで仮想デバイスをインストールする。
(2) このdevconのパラメータにはINFファイルとデバイスIDが指定される。
(3) devconはデバイスIDに従った仮想デバイスを作成して(OSに登録して)、その仮想デバイスと.sysを関連付ける。どの.sysを使用するかはINFに記載されている。
(4) OSは仮想デバイスを検出すると(登録されると)、それに対応するSysをロードし、DriverEntryをコールする。この時渡されるDriverObjectはテンプレートであり、各種設定はDriverEntry内で行う。

(1) devconで仮想デバイスをインストールする。
→ 正しい(devcon install INF ファイルとIDで仮想デバイスを登録)

(2) このdevconのパラメータにはINFファイルとデバイスIDが指定される。
→ 正しい(devcon install <inf> <hardware_id>)

(3) devconはデバイスIDに従った仮想デバイスを作成して(OSに登録して)、その仮想デバイスと.sysを関連付ける。どの.sysを使用するかはINFに記載されている。
→ 概ね正しい
 ※厳密には「devconが.sysを関連付ける」のではなく、INFを元にOSのPnPマネージャが仮想デバイスと.sysを関連付けます。

(4) OSは仮想デバイスを検出すると(登録されると)、それに対応するSysをロードし、DriverEntryをコールする。この時渡されるDriverObjectはテンプレートであり、各種設定はDriverEntry内で行う。
→ 正しい
wokwok
DriverEntry
    │
    └───> AddDevice
              │
              └───> StartDevice
                          │
                          ├───> InstallAllRenderFilters
                          │          │
                          │          └───> InstallEndpointRenderFilters (各エンドポイント分ループ)
                          │
                          └───> InstallAllCaptureFilters
                                     │
                                     └───> InstallEndpointCaptureFilters(各エンドポイント分ループ)