メモ
Visual Studio Communityのインストール
・ワークロードでC++によるデスクトップ開発を追加
・個別のコンポーネントでWindows10SDKとWindowsDriverKitを追加
・インストール
・個別のコンポーネントで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は、ここからダウンロード
インストールパスの選択
後はとりあえず、Nextを連打。
インストール完了。
(手順が書いてあるから、初手からこのページを参考に進めればいいのかな?)
この辺も個別のインストールで必要なのか。
「64 最新」で検索して、SDKでMFCを、コンパイラでSpectre軽減ライブラリを、追加
WDKをダウンロード。
インストールパスの選択。
ステップ1
READMEどおり
File > Open > Project/Solution
でWindows-driver-samples/audio/simpleaudiosampleのSimpleAudioSample.slnファイルを開く。
起動時にはSolution Explorerが開いていないのでメニューのViewから開く。
ステップ2
構成マネージャ(configuration manager)を開く。
とりあえず、構成とプラットフォームがすべて一致しているから良しとする。
ステップ3
ビルドした。
なんかいろいろ表示されるが、特にエラーもなくビルドできたみたい。
ステップ4
生成物をx64/Debug/packageの下に確認。
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上で証明書をインストールする。
ローカルコンピュータにインストールする
信頼されたルート証明機関を選ぶ。
信頼された発行元にもインストール
ドライバインストール
コマンドプロンプトでdevconを実行(管理者モード)。うまくいったようだ。
デバイスマネージャ(devmgmt.msc )でも見える。
!!!!このデモは仮想マイク、仮想スピーカー間でループバックしないようだ。(終了ー)!!!!
トラブルシューティング
DriverVer set to a date in the future (postdated DriverVer not allowed) in package\simpleaudiosample.inf. が出た。
ソリューションエクスプローラのPackage->packageのところで右クリック。(ほかのところだと、ダイアログの名kで設定できるプロパティが違う。(わかりにく過ぎて、おしっこ漏らしそう。))
ダイアログでUse Local Timeを設定。
(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内で行う。
→ 正しい
DriverEntry
│
└───> AddDevice
│
└───> StartDevice
│
├───> InstallAllRenderFilters
│ │
│ └───> InstallEndpointRenderFilters (各エンドポイント分ループ)
│
└───> InstallAllCaptureFilters
│
└───> InstallEndpointCaptureFilters(各エンドポイント分ループ)