?? main.cpp
字號:
#include <windows.h>
#include <stdio.h>
//使用CTL_CODE必須加入winioctl.h
#include <winioctl.h>
#include "..\NT_Driver\Ioctls.h"
UCHAR In_8(HANDLE hDevice,USHORT port)
{
DWORD dwOutput ;
DWORD inputBuffer[2] =
{
port,//對port進行操作
1//1代表8位操作,2代表16位操作,4代表32位操作
};
DWORD dResult;
DeviceIoControl(hDevice, READ_PORT, inputBuffer, sizeof(inputBuffer), &dResult, sizeof(DWORD), &dwOutput, NULL);
return (UCHAR) dResult;
}
void Out_8(HANDLE hDevice,USHORT port,UCHAR value)
{
DWORD dwOutput ;
DWORD inputBuffer[3] =
{
port,//對port進行操作
1,//1代表8位操作,2代表16位操作,4代表32位操作
value//輸出字節
};
DeviceIoControl(hDevice, WRITE_PORT, inputBuffer, sizeof(inputBuffer), NULL, 0, &dwOutput, NULL);
}
//發音程序,參數f代表頻率
void Sound(HANDLE hDevice,int f)
{
//計數為1193180/F
USHORT B=1193180/f;
//從端口0x61取數
UCHAR temp = In_8(hDevice,0x61);
//兩低位置1
temp = temp | 3;
//輸出到0x61端口
Out_8(hDevice,0x61,temp);
//輸出到0x61端口
Out_8(hDevice,0x43,0xB6);
//輸出到0x42端口,寫低8位
Out_8(hDevice,0x42,B&0xF);
//輸出到0x42端口,寫高8位
Out_8(hDevice,0x42,(B>>8)&0xF);
}
// 關閉聲音
void SoundOff(HANDLE hDevice)
{
//取端口0x61的字節
UCHAR value = In_8(hDevice,0x61);
//強制置最后兩位為0
value = value & 0xFC;
//返送端口0x61
Out_8(hDevice,0x61,value);
}
int main()
{
HANDLE hDevice =
CreateFile("\\\\.\\HelloDDK",
GENERIC_READ | GENERIC_WRITE,
0, // share mode none
NULL, // no security
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL ); // no template
if (hDevice == INVALID_HANDLE_VALUE)
{
printf("Failed to obtain file handle to device: "
"%s with Win32 error code: %d\n",
"MyWDMDevice", GetLastError() );
return 1;
}
//產生2KHz頻率的聲音
Sound(hDevice,2000);
//持續200毫秒
Sleep(200);
SoundOff(hDevice);
CloseHandle(hDevice);
return 0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -