贴上代码:
网络上抄袭的
;made by correy
;Email:leguanyuan@126.com
;QQ:112426112
;不足之处,敬请指导。
;使计算机的主板上的蜂鸣器发出超声波与次声波的程序。
;声音虽然听不到但用计算机的任务管理器可以看到,有待你用共振器检测。
;发出超声波的程序我就不多说了,很容易实现,网上的电子蚊香就是利用此制作成的,可以用电脑驱除一些昆虫及动物。
;MessageBeep与QueryPerformanceFrequency函数我就不多说了。
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;先来个实验。
;有的声音小,有的主板可能没有蜂鸣器,可能听不到。
;rc me.rc
;ml /coff test.asm /link /subsystem:windows me.res
.386
.model flat,stdcall
option casemap:none
include kernel32.inc
includelib kernel32.lib
.code
start:mov esi,37
again:invoke Beep,esi,55
inc esi
cmp esi,32767
jne again
ret
end start
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;下面是用驱动实现的,当然也可以提升运行级别,改变i/o许可位图来实现。
;先是服务控制程序。
.386
.model flat, stdcall
option casemap:none
include windows.inc
include kernel32.inc
include advapi32.inc
includelib kernel32.lib
includelib advapi32.lib
.data
correy db "correy",0
filename db "sys.sys",0
.data?
hSCManager dd ?
hService dd ?
acDriverPath db 260 dup(?)
.code
start:
invoke OpenSCManager,0,0,SC_MANAGER_CREATE_SERVICE
mov hSCManager, eax
push eax;为何要保存eax的值呢?
invoke GetFullPathName,addr filename, sizeof acDriverPath, addr acDriverPath, esp
pop eax
invoke CreateService, hSCManager,addr correy,addr correy, \
SERVICE_START + DELETE, SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START, \
SERVICE_ERROR_IGNORE, addr acDriverPath, 0, 0, 0, 0, 0
mov hService, eax
invoke StartService, hService, 0, 0
invoke DeleteService, hService
invoke CloseServiceHandle, hService
invoke CloseServiceHandle, hSCManager
ret
end start
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;rc me.rc >error.txt
;ml /nologo /c /coff sys.asm >>error.txt
;link /nologo /driver /base:0x10000 /align:32 /out:sys.sys /subsystem:native sys.obj>>error.txt
.386
.model flat, stdcall
option casemap:none
include ntstatus.inc
include ntddk.inc
include hal.inc
includelib hal.lib
DO_DELAY MACRO;延时
mov eax, 99999999h
.while eax
dec eax
.endw
ENDM
.code
MakeBeep1 proc dwPitch:DWORD;方法1
cli
mov al, 10110110y
out 43h, al
mov eax, dwPitch
out 42h, al
mov al, ah
out 42h, al
in al, 61h
or al, 11y
out 61h, al
sti
DO_DELAY
cli
in al, 61h
and al, 11111100y
out 61h, al
sti
ret
MakeBeep1 endp
MakeBeep2 proc dwPitch:DWORD;方法2
cli
invoke WRITE_PORT_UCHAR, 43h, 10110110y
mov eax, dwPitch
invoke WRITE_PORT_UCHAR, 42h, al
mov eax, dwPitch
invoke WRITE_PORT_UCHAR, 42h, ah
invoke READ_PORT_UCHAR, 61h
or al, 11y
invoke WRITE_PORT_UCHAR, 61h, al
sti
DO_DELAY
cli
invoke READ_PORT_UCHAR, 61h
and al, 11111100y
invoke WRITE_PORT_UCHAR, 61h, al
sti
ret
MakeBeep2 endp
DriverEntry proc pDriverObject:PDRIVER_OBJECT, pusRegistryPath:PUNICODE_STRING
invoke MakeBeep1, 119318;10hz
invoke HalMakeBeep,9;方法3。这个函数与1193167有关。
DO_DELAY
invoke MakeBeep2, 1193180;1hz
invoke HalMakeBeep, 0
mov eax, STATUS_DEVICE_CONFIGURATION_ERROR
ret
DriverEntry endp
end DriverEntry