Текущий архив: 2005.10.02;
Скачать: CL | DM;
Вниз
Использование драйвера Найти похожие ветки
← →
Duk_ © (2005-07-31 19:12) [0]Как подключить и использовать драйвер. Если у кого-то есть пример - поделитесь!!!
← →
n0name (2005-07-31 19:57) [1]
procedure SendString(Str: PChar);
var
hDriver: dword;
Written: dword;
begin
hDriver := CreateFile("\\.\MyDriver", GENERIC_WRITE,
0, nil, OPEN_EXISTING, 0, 0);
WriteFile(hDriver, Str^, lstrlen(Str), Written, nil);
CloseHandle(hDriver);
end;
function InstallDriver: boolean;
const
DrvName = "Driver";
FullPath = "c:\driver.sys";
var
hSCM, hSRV: dword;
sParam: PChar;
begin
Result := false;
hSCM := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
if hSCM = INVALID_HANDLE_VALUE then Exit;
// создание системной записи о драйвере
hSRV := CreateService(hSCM, DrvName, DrvName,
SERVICE_ALL_ACCESS,
SERVICE_KERNEL_DRIVER,
SERVICE_DEMAND_START,
SERVICE_ERROR_NORMAL,
FullPath, nil, nil,
nil, nil, nil);
if hSRV = INVALID_HANDLE_VALUE then Exit;
//запускаем драйвер
StartService(hSRV, 0, sParam);
//очистка ресурсов
CloseServiceHandle(hSRV);
CloseServiceHandle(hSCM);
Result := true;
end;
← →
Duk_ © (2005-07-31 20:46) [2]n0name: Почему-то не работает. Кстати, для чего SendString.
← →
Eraser © (2005-08-01 01:57) [3]Duk_ © (31.07.05 20:46) [2]
Кстати, для чего SendString.
Демонстрирует взаимодействие драйвера с приложением, в данном случае посылается строка драйверу.
← →
n0name (2005-08-01 07:51) [4]Не работает, как не работает?
Не компилируется или не устанавливается драйвер, или не запускается?
Подключи WinSvc(насколько я помню).
← →
Duk_ © (2005-08-01 14:14) [5]Программа запускается, но почему-то ничего не выполняет, хотя по идее должен пропиликать динамик (Заранее скажу драйвер рабочий 100%).
← →
Игорь Шевченко © (2005-08-01 14:47) [6]n0name (31.07.05 19:57) [1]
А обработка или индикация ошибок нафиг не сдались
← →
Duk_ © (2005-08-01 15:47) [7]А реально что-то рабочее, кто-то может дать???
← →
n0name (2005-08-01 16:17) [8]>>Игорь Шевченко © (01.08.05 14:47) [6]
Код не мой, где-то нашёл.
>>Duk_ © (01.08.05 14:14) [5]
Покажи как ты используешь функции.
Как ты писал драйвер? Пиликает при инициализации?
>>Duk_ © (01.08.05 15:47) [7]
Могу скинуть рельно работающий код на мыло, сам пимал - сам проверял, но он большой, чтоб публиковать тут.
← →
Duk_ © (2005-08-01 17:59) [9]n0name: cкинь.
Загрузчик:
procedure Port;
function FullPath: String;
begin
result:="d:\port_please\beeper.sys";
end;
var hSCManager: SC_Handle;
acDriverPath: String;
hService: SC_Handle;
temp: PChar;
begin
hSCManager:=OpenSCManager(nil,nil,SC_MANAGER_CREATE_SERVICE);
If hSCManager>0 Then Begin
acDriverPath:="d:\port_please\beeper.sys";
temp:=nil;
hService:=CreateService(hSCManager, "beeper", "beeper",
SERVICE_ALL_ACCESS,
SERVICE_KERNEL_DRIVER,
SERVICE_DEMAND_START,
SERVICE_ERROR_NORMAL,
PChar(acDriverPath), nil, nil,
nil, nil, nil);
If hService<>0 Then Begin
Temp:=nil;
StartService(hService,0,Temp);
DeleteService(hService);
CloseServiceHandle(hService);
end Else Application.MessageBox("Can not register driver","PortOut",mb_ok);
CloseServiceHandle(hSCManager);
end Else Application.MessageBox("Can not connect to Service Control Manager","PortOut",mb_ok);
end;
Драйвер:
.386
.model flat, stdcall
option casemap:none
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
; I N C L U D E F I L E S
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
include \masm32\include\w2k\ntstatus.inc
include \masm32\include\w2k\ntddk.inc
include \masm32\include\w2k\hal.inc
includelib \masm32\lib\w2k\hal.lib
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
; U S E R D E F I N E D E Q U A T E S
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
TIMER_FREQUENCY equ 1193167 ; 1,193,167 Hz
OCTAVE equ 2
;PITCH_A equ 440 ; 440,00 Hz
;PITCH_As equ 446 ; 466,16 Hz
;PITCH_H equ 494 ; 493,88 Hz
PITCH_C equ 523 ; 523,25 Hz
PITCH_Cs equ 554 ; 554,37 Hz
PITCH_D equ 587 ; 587,33 Hz
PITCH_Ds equ 622 ; 622,25 Hz
PITCH_E equ 659 ; 659,25 Hz
PITCH_F equ 698 ; 698,46 Hz
PITCH_Fs equ 740 ; 739,99 Hz
PITCH_G equ 784 ; 783,99 Hz
PITCH_Gs equ 831 ; 830,61 Hz
PITCH_A equ 880 ; 880,00 Hz
PITCH_As equ 988 ; 987,77 Hz
PITCH_H equ 1047 ; 1046,50 Hz
; We are going to play c-major chord
TONE_1 equ TIMER_FREQUENCY/(PITCH_C*OCTAVE)
TONE_2 equ TIMER_FREQUENCY/(PITCH_E*OCTAVE)
TONE_3 equ (PITCH_G*OCTAVE); for HalMakeBeep
DELAY equ 2000000h ; for my ~1000mHz machine
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
; U S E R D E F I N E D M A C R O S
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
DO_DELAY MACRO
; Silly method, but it works ;-)
mov eax, DELAY
.while eax
dec eax
.endw
ENDM
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
; C O D E
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
.code
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
; MakeBeep1
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
MakeBeep1 proc dwPitch:DWORD
; Direct hardware access
cli
mov al, 10110110y
out 43h, al ; Timer 8253-5 (AT: 8254.2).
mov eax, dwPitch
out 42h, al
mov al, ah
out 42h, al
; speaker ON
in al, 61h
or al, 11y
out 61h, al
sti
DO_DELAY
cli
; speaker OFF
in al, 61h
and al, 11111100y
out 61h, al
sti
ret
MakeBeep1 endp
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
; MakeBeep2
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
MakeBeep2 proc dwPitch:DWORD
; Hardware access via HAL using *_PORT_UCHAR/*_PORT_UCHAR functions
cli
invoke WRITE_PORT_UCHAR, 43h, 10110110y
mov eax, dwPitch
and eax, 0FFh
invoke WRITE_PORT_UCHAR, 42h, eax
mov eax, dwPitch
shr eax, 8
and eax, 0FFh
invoke WRITE_PORT_UCHAR, 42h, eax
; speaker ON
invoke READ_PORT_UCHAR, 61h
or al, 11y
and eax, 0FFh
invoke WRITE_PORT_UCHAR, 61h, eax
sti
DO_DELAY
cli
; speaker OFF
invoke READ_PORT_UCHAR, 61h
and al, 11111100y
and eax, 0FFh
invoke WRITE_PORT_UCHAR, 61h, eax
sti
ret
MakeBeep2 endp
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
; DriverEntry
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
DriverEntry proc pDriverObject:PDRIVER_OBJECT, pusRegistryPath:PUNICODE_STRING
invoke MakeBeep1, TONE_1
invoke MakeBeep2, TONE_2
; Hardware access via hal.dll function HalMakeBeep
invoke HalMakeBeep, TONE_3
DO_DELAY
invoke HalMakeBeep, 0
mov eax, STATUS_DEVICE_CONFIGURATION_ERROR
ret
DriverEntry endp
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
end DriverEntry
Кстати мой загрузчик на асме работает нормально.
← →
Duk_ © (2005-08-01 19:13) [10]...
← →
Eraser © (2005-08-01 21:23) [11]Duk_ © (01.08.05 17:59) [9]
n0name: cкинь.
Загрузчик:procedure Port;
function FullPath: String;
begin
result:="d:\port_please\beeper.sys";
end;
var hSCManager: SC_Handle;
acDriverPath: String;
hService: SC_Handle;
temp: PChar;
begin
hSCManager:=OpenSCManager(nil,nil,SC_MANAGER_CREATE_SERVICE);
If hSCManager>0 Then Begin
acDriverPath:="d:\port_please\beeper.sys";
temp:=nil;
hService:=CreateService(hSCManager, "beeper", "beeper",
SERVICE_ALL_ACCESS,
SERVICE_KERNEL_DRIVER,
SERVICE_DEMAND_START,
SERVICE_ERROR_NORMAL,
PChar(acDriverPath), nil, nil,
nil, nil, nil);
If hService<>0 Then Begin
Temp:=nil;
StartService(hService,0,Temp);
DeleteService(hService);
CloseServiceHandle(hService);
end Else Application.MessageBox("Can not register driver","PortOut",mb_ok);
CloseServiceHandle(hSCManager);
end Else Application.MessageBox("Can not connect to Service Control Manager","PortOut",mb_ok);
end;
Так что, тут не работает? Что отладчик говорит? Что ф-ии возвращают?
← →
n0name (2005-08-02 04:20) [12]Скинул. Там 2 варианта - GUI и консоль. Они используют одну библиотеку.
← →
Duk_ © (2005-08-02 09:55) [13]>Eraser [11]: "Can not register driver"
← →
Duk_ © (2005-08-02 12:03) [14]Удалено модератором
← →
Eraser © (2005-08-02 13:40) [15]Duk_ ©
Издеваешься?
Я спросил в [11] что функции возвращают, а не твой код.
Return Values
If the function succeeds, the return value is a handle to the service.
If the function fails, the return value is NULL. To get extended error information, call GetLastError.
Errors
The following error codes can be set by the service control manager. Other error codes can be set by the registry functions that are called by the service control manager.
Value Meaning
ERROR_ACCESS_DENIED The handle to the specified service control manager database does not have SC_MANAGER_CREATE_SERVICE access.
ERROR_CIRCULAR_DEPENDENCY A circular service dependency was specified.
ERROR_DUP_NAME The display name already exists in the service control manager database either as a service name or as another display name.
ERROR_INVALID_HANDLE The handle to the specified service control manager database is invalid.
ERROR_INVALID_NAME The specified service name is invalid.
ERROR_INVALID_PARAMETER A parameter that was specified is invalid.
ERROR_INVALID_SERVICE_ACCOUNT The user account name specified in the lpServiceStartName parameter does not exist.
ERROR_SERVICE_EXISTS The specified service already exists in this database.
← →
Duk_ © (2005-08-02 15:45) [16]>>Eraser:
n0name (01.08.05 16:17) [8]
Покажи как ты используешь функции.
Как ты писал драйвер? Пиликает при инициализации?
← →
n0name (2005-08-02 17:01) [17]Моё драйвер не пиликает, и писал я его на делфи.
← →
n0name (2005-08-02 17:02) [18]А что тебе показывать, это готовое приложение, посмотри обработчики кнопок.
← →
Duk_ © (2005-08-02 19:50) [19]Удалено модератором
Примечание: Offtopic
← →
Duk_ © (2005-08-03 10:06) [20]Удалено модератором
Примечание: Создание пустых сообщений
← →
Duk_ © (2005-08-04 09:38) [21]Ну а кто-то может что-то сказать по моим исходникам. Работают они у кого-то или нет???
← →
Digitman © (2005-08-04 10:05) [22]
> Duk_ © (04.08.05 09:38) [21]
на wasm.ru есть куча примеров
← →
Duk_ © (2005-08-04 13:26) [23]Еще раз скажу. wasm.ru сайт для ассемблерщиков, но эта же прога (в смысле моя) на асме работает нормально.
← →
Digitman © (2005-08-04 13:38) [24]
> работает нормально
откуда знаешь ?
> Почему-то не работает
ты сказал ?
← →
Digitman © (2005-08-04 13:40) [25]с отладчиком дружишь ?
установи у себя WinDbg от Майкрософт и отлаживай/трассируй свой драйвер вдоль и поперек...
← →
Duk_ © (2005-08-05 11:28) [26]Драйвер нормальный. У меня не получается его загрузить в Делфи.
← →
Digitman © (2005-08-05 12:29) [27]
> не получается его загрузить в Делфи
а почему ты не проверяешь результат вызова StartService() ?
← →
Duk_ © (2005-08-06 11:37) [28]А все на CreateService останавливается.
← →
MS-REM (2005-08-06 12:44) [29]AINCity.narod.ru
← →
Маг Похмеляйнен (2005-08-06 13:57) [30]Можно вручную прописать сервис в реестре, на время отладки.
← →
Eraser © (2005-08-06 14:05) [31]Ожно ещё и INI файл установочный написать - тоже вариант.
Страницы: 1 вся ветка
Текущий архив: 2005.10.02;
Скачать: CL | DM;
Память: 0.56 MB
Время: 0.046 c