читаю KmdKit, компилирую пример, а он не работает... вот исходник примера: программа, которая зарегистрировать должна драйвер: Код (Text): ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ; ; Программа управления драйвером beeper ; ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: .386 .model flat, stdcall option casemap:none ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ; В К Л Ю Ч А Е М Ы Е Ф А Й Л Ы ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: include \masm32\include\windows.inc include \masm32\include\kernel32.inc include \masm32\include\user32.inc include \masm32\include\advapi32.inc includelib \masm32\lib\kernel32.lib includelib \masm32\lib\user32.lib includelib \masm32\lib\advapi32.lib include \masm32\Macros\Strings.mac ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ; К О Д ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: .code start proc local hSCManager:HANDLE local hService:HANDLE local acDriverPath[MAX_PATH]:CHAR invoke OpenSCManager, NULL, NULL, SC_MANAGER_CREATE_SERVICE .if eax != NULL mov hSCManager, eax push eax invoke GetFullPathName, $CTA0("beeper.sys"), sizeof acDriverPath, addr acDriverPath, esp pop eax invoke CreateService, hSCManager, $CTA0("beeper"), $CTA0("Nice Melody Beeper"), \ SERVICE_START + DELETE, SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START, \ SERVICE_ERROR_IGNORE, addr acDriverPath, NULL, NULL, NULL, NULL, NULL .if eax != NULL mov hService, eax invoke StartService, hService, 0, NULL invoke DeleteService, hService invoke CloseServiceHandle, hService .else invoke MessageBox, NULL, $CTA0("Can't register driver."), NULL, MB_ICONSTOP .endif invoke CloseServiceHandle, hSCManager .else invoke MessageBox, NULL, $CTA0("Can't connect to Service Control Manager."), \ NULL, MB_ICONSTOP .endif invoke ExitProcess, 0 start endp ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ; ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: end start исходник драйвера: Код (Text): ;@echo off ;goto make ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ; ; beeper - Драйвер режима ядра ; Пищит системным динамиком ; ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: .386 .model flat, stdcall option casemap:none ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ; В К Л Ю Ч А Е М Ы Е Ф А Й Л Ы ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: include \masm32\include\w2k\ntstatus.inc include \masm32\include\w2k\ntddk.inc include \masm32\include\w2k\hal.inc includelib \masm32\lib\w2k\hal.lib ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ; С И М В О Л Ь Н Ы Е К О Н С Т А Н Т Ы ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: TIMER_FREQUENCY equ 1193167 ; 1,193,167 Гц OCTAVE equ 2 ; множитель октавы PITCH_C equ 523 ; До - 523,25 Гц PITCH_Cs equ 554 ; До диез - 554,37 Гц PITCH_D equ 587 ; Ре - 587,33 Гц PITCH_Ds equ 622 ; Ре диез - 622,25 Гц PITCH_E equ 659 ; Ми - 659,25 Гц PITCH_F equ 698 ; Фа - 698,46 Гц PITCH_Fs equ 740 ; Фа диез - 739,99 Гц PITCH_G equ 784 ; Соль - 783,99 Гц PITCH_Gs equ 831 ; Соль диез - 830,61 Гц PITCH_A equ 880 ; Ля - 880,00 Гц PITCH_As equ 988 ; Ля диез - 987,77 Гц PITCH_H equ 1047 ; Си - 1046,50 Гц ; Нам нужны три звука для до-мажорного арпеджио (до, ми, соль) TONE_1 equ TIMER_FREQUENCY/(PITCH_C*OCTAVE) TONE_2 equ TIMER_FREQUENCY/(PITCH_E*OCTAVE) TONE_3 equ (PITCH_G*OCTAVE) ; для HalMakeBeep DELAY equ 1800000h ; для моей ~800mHz машины ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ; М А К Р О С Ы ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: DO_DELAY MACRO mov eax, DELAY .while eax dec eax .endw ENDM ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ; К О Д ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: .code ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ; MakeBeep1 ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: MakeBeep1 proc dwPitch:DWORD ; Прямой доступ к оборудованию через порты ввода-вывода 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 ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: MakeBeep2 proc dwPitch:DWORD ; Прямой доступ к оборудованию используя функции ; WRITE_PORT_UCHAR и READ_PORT_UCHAR из модуля hal.dll 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 ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: DriverEntry proc pDriverObject:PDRIVER_OBJECT, pusRegistryPath:PUNICODE_STRING invoke MakeBeep1, TONE_1 invoke MakeBeep2, TONE_2 ; Прямой доступ к оборудованию используя функцию HalMakeBeep из модуля hal.dll invoke HalMakeBeep, TONE_3 DO_DELAY invoke HalMakeBeep, 0 mov eax, STATUS_DEVICE_CONFIGURATION_ERROR ret DriverEntry endp ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ; ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: end DriverEntry ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ; С Б О Р К А Д Р А Й В Е Р А ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :make set drv=beeper \masm32\bin\ml /nologo /c /coff %drv%.bat \masm32\bin\link /nologo /driver /base:0x10000 /align:32 /out:%drv%.sys /subsystem:native %drv%.obj del %drv%.obj echo. pause все исходники у меня у папке C:\RadASM компилурую, появляются beep.exe и beeper.sys запускаю beep.exe, но динамик вообще не пиищит - вообще ничего не происходит, отлаживаю beep.exe - вроде все ок... но не пищит пробовал beeper.sys ставить в C:\WINDOWS\system32\drivers ... все-равно не получилось... помогите, пожалуйста
Незнаю, что у тебя за проблема, только что проверил всё работает. Пример из KmdKit\examples\simple\Beeper KmdKit v1.8 Copyright(C) 2002-2005 Four-F
о... нашел у себя тоже "E:\Necromancer13\Инструменты\ПРочие инструменты\KmdKit\examples\simple\Beeper\scp.exe" - запускаю, но ничего не пищит!!!( ну почему? может перезагрузить компьютер после регистрации драйвера чтоли надо?..
Можно проверить есть или нет. Отключи монотор от видюхи, при прохождении POST должен услышать характерный звук. Если не слишно то значиться нет динамика или не подключен возможно подключен но не правильно. Может быть еще вариант. Ну не прячь файлы в десятое колено да еще и с русскими именами. Было такое, что из-за этого был такой головняк, два дня мучался, а потом решил упростить путь и всё было ОК (глюк при установке дров на видео, дрова лежали глубоко и папка на русском). Вот такая вот ....
Покопай в панельуправления\администрирование\упр. компутером там может найдется инфа о динамике. Впрочем если ты никогда не слышал пищания динамика при включении компа то скорей всего его нет, нежели дров не работает. Даже и если и так - ну что с того? В kmdkit ещо много интересных примеров с использованием драйверов есть, пробуй другие дрова запускать.
По поводу наличия динамика можно вызвать например юзермодный Beep(1000, 1000); - если динамик есть, то запищит.
да, знаю, русские названия часто почему-то не поддерживаются.... не... нету динамика не, не завизжал динамик... похоже, у меня его нету... ну ничего в KmdKit еще много интересного и так кстати, [offtop]Как вы считаете, что лучше для написания драйверов, Си или АСМ?[/offtop]