以 WAVEDEV 為例
IO Control Code 定義在 PUBLIC\COMMON\OAK\INC\WAVEDEV.H 中
這個 header file 的 comment 中有說明 audio driver 的複雜架構。
WAVDEV 處理的IO Control Cmd 有
- IOCTL_MIX_MESSAGE
- IOCTL_WAV_MESSAGE
device io control 又把parameter 作進一步擴充,把argument 再定義為 message (PMMDRV_MESSAGE_PARMS):
所以.. WAVEDEV 的IO Control handler 再依照 uMsg 細分 command。typedef struct {
UINT uDeviceId;
UINT uMsg;
DWORD dwUser;
DWORD dwParam1;
DWORD dwParam2;
} MMDRV_MESSAGE_PARAMS;
使用時,要先CreateFile("drivername"..),"drivername"就是那個 3 char + 1 index.
取得的handle 傳入 DevIoControl ( )作第一個argument,
prototype:
和 KernelIoControl( )比起來,除了一開始的 hDevice外,就是最後的 Overlapped. - 這個固定要用 NULL。BOOL DeviceIoControl(
HANDLE hDevice,
DWORD dwIoControlCode,
LPVOID lpInBuffer,
DWORD nInBufferSize,
LPVOID lpOutBuffer,
DWORD nOutBufferSize,
LPDWORD lpBytesReturned,
LPOVERLAPPED lpOverlapped);
沒有留言:
張貼留言