Xây dựng ứng dụng virtual audio cable: Phần 1 tạo virtual audio driver sử dụng Windows Driver Kit (WDK)

2 min read

1. Dựng môi trường development

  • Cài đặt Visual Studio
  • Cài đặt Windows Driver Kit (WDK) và Windows Software Development Kit (SDK)

https://learn.microsoft.com/en-us/windows-hardware/drivers/download-the-wdk

2. Tạo mới project với Visual Studio

  • Tạo mới project với template Kernel Mode Driver (KMDF)
virtual audio
  • Cấu trúc project

Driver Files: Bao gồm files .inf dùng để install driver cho window.

Device.c: Phần này dùng để xử lý các phần liên quan đến việc quản lý device objects và xử lý I/O requests cho a kernel-mode driver (không cần cho virtual audio)

Driver.c: Được chạy khi driver được load từ hệ thống. Nhà phát triển có thể register event hoặc viết code

Queue.c: Xử lý các phần liên quan tới I/O request trong driver’s U/O queue (không cần cho virtual audio)

  • Chỉnh sửa file .inf

Thay đổi Class và ClassGuid sang media

Class = Media
ClassGuid = {4d36e96c-e325-11ce-bfc1-08002be10318}

Thay đổi Manufacturer Name

[Manufacturer]
%ManufacturerName%=Standard,NT$ARCH$

[Strings]
ManufacturerName="ThienDang" ;Replace with your manufacturer name

Thay đổi hardware id (Bởi vì đang tạo driver ảo nên có thể nhập tự do)

[Standard.NT$ARCH$]
%VirtualAudioDriver.DeviceDesc%=VirtualAudioDriver_Device, Root\VirtualAudioDriver; HardwareId là "Root\VirtualAudioDriver"

Cơ bản mình đã tạo 1 virtual audio drivers (Chưa tác động gì vào kernel, sẽ sửa tại các phần tiếp theo)

3. Install driver trong test mode

  • Thực hiện build project

Sau khi build bằng Visual Studio, Output tương tụ như hình bên dưới

Chú ý file .cer là file cert dùng cho testing. Để install được device mình cần thêm cert này vào Local Machine. (Với production cần đăng ký cert với microsoft và không cần thêm thủ công cert vào Local Machine)

Cách thêm: Open file .cer –> Install Certificate… –> Local Machine –> Next.. -> Finish

Sau khi thêm cert xong mình có thể dùng devcon để install driver. Các files nằm cùng thư mục với file .cer là những file chưa được sign với cert nên không thể install. Các files đã sign nằm trong thư mục VirtualAudioDriver có thể sử dụng devcon command để install (đọc thêm ở https://learn.microsoft.com/en-us/windows-hardware/drivers/devtest/devcon)

devcon install VirtualAudioDriver.inf Root\VirtualAudioDriver

Sau khi install có thể kiểm tra ở Device Manger của Window

4. Cài đặt debug sử dụng windbg

Note: Target machine (Máy sẽ được cái driver, để phát triển driver thì được khuyên máy develop nên khác với máy test nguyên nhân khi test có thể gây crash system). Host machine (Máy dùng development)

Có 2 cách kết nối giữ máy host và máy target

  1. Kết nối qua USB
  2. Kết nối qua network (trong cùng mạng)

Phần này chỉ nói đến phương thức kết nối thông qua network

  1. Cài· đặt WDK lên máy target
  2. Cài đặt C:\Program Files (x86)\Windows Kits\10\Remote\x64\WDK Test Target Setup x64-x64_en-us.msi lên máy target (Tham khảo chi tiết hơn tại https://learn.microsoft.com/en-us/windows-hardware/drivers/gettingstarted/provision-a-target-computer-wdk-8-1)
  3. Vào properties của project sử dụng Visual Studio (trên máy Host) Chọn: Driver Install -> Deployment -> Target Device –> Chọn thêm mới device -> Next… -> Finish

Phần hostname là ip máy target

Sau khi cài đặt xong có thể deploy trực tiếp lên máy target sử dụng Visual Studio

Next: Phần 2 tạo virtual microphone và virtual speaker cho driver

References

https://learn.microsoft.com/en-us/windows-hardware/drivers/gettingstarted/

https://learn.microsoft.com/en-us/windows-hardware/drivers/gettingstarted/writing-a-very-small-kmdf–driver

https://learn.microsoft.com/en-us/windows-hardware/drivers/develop/

Avatar photo

Clean Code: Nguyên tắc viết hàm trong lập trình…

Trong quá trình phát triển phần mềm, việc viết mã nguồn dễ đọc, dễ hiểu là yếu tố then chốt để đảm bảo code...
Avatar photo Dat Tran Thanh
3 min read

Clean Code: Nguyên tắc comment trong lập trình

Trong lập trình, code không chỉ là một tập hợp các câu lệnh để máy tính thực thi, mà còn là một hình thức...
Avatar photo Dat Tran Thanh
3 min read

Clean Code: Nguyên tắc xử lý lỗi (Error Handling)

Trong quá trình phát triển phần mềm, việc xử lý lỗi không chỉ là một phần quan trọng mà còn ảnh hưởng trực tiếp...
Avatar photo Dat Tran Thanh
4 min read

Leave a Reply

Your email address will not be published. Required fields are marked *