FreeBasic умеет делать драйвера?
Участников: 4
FreeBasic :: Программирование :: Общее
Страница 1 из 1
FreeBasic умеет делать драйвера?
Я вот тут смотрел на примеры из поставки FreeBasic и обнаружил интересный пример в папке Driver. Это выходит, что на FreeBasic можно писать драйвера?
У кого каккие мнения на этот счет?
Вот текст драйвера:
А вот - компиляционный батник:
Я бы всеми четырьмя конечностями был ЗА!
У кого каккие мнения на этот счет?
Вот текст драйвера:
- Код:
'' NT driver example, written by voodooattack
#include once "win\ddk\winddk.bi"
#undef fb_RtInit
declare function DriverEntry stdcall alias "DriverEntry" (byval pDriverObject as PDRIVER_OBJECT, _
byval pRegistryPath as PUNICODE_STRING) as NTSTATUS
static shared dev_name as wstring ptr = @wstr("\Device\FBExample")
static shared dev_dos_name as wstring ptr = @wstr("\DosDevices\FBExample")
declare sub fb_RtInit stdcall alias "fb_RtInit"()
declare function FBDriver_UnsupportedFunction(byval as PDEVICE_OBJECT, byval as PIRP) as NTSTATUS
declare function FBDriver_Create(byval as PDEVICE_OBJECT, byval as PIRP) as NTSTATUS
declare function FBDriver_Close(byval as PDEVICE_OBJECT, byval as PIRP) as NTSTATUS
declare function FBDriver_IoControl(byval as PDEVICE_OBJECT, byval as PIRP) as NTSTATUS
declare function FBDriver_Read(byval as PDEVICE_OBJECT, byval as PIRP) as NTSTATUS
declare function FBDriver_Write(byval as PDEVICE_OBJECT, byval as PIRP) as NTSTATUS
declare sub FBDriver_Unload(byval as PDRIVER_OBJECT)
function DriverEntry(byval pDriverObject as PDRIVER_OBJECT, _
byval pRegistryPath as PUNICODE_STRING) as NTSTATUS
dim Status as NTSTATUS = STATUS_SUCCESS
dim pDeviceObject as PDEVICE_OBJECT = NULL
dim as UNICODE_STRING usDriverName, usDosDeviceName
dim i as integer
DbgPrint(@!"FBExample: DriverEntry Called \r\n")
RtlInitUnicodeString(@usDriverName, dev_name)
RtlInitUnicodeString(@usDosDeviceName, dev_dos_name)
Status = IoCreateDevice(pDriverObject, _
0, _
@usDriverName, _
FILE_DEVICE_UNKNOWN, _
FILE_DEVICE_SECURE_OPEN, _
FALSE, _
@pDeviceObject)
if (Status = STATUS_SUCCESS) then
DbgPrint(@!"FBExample: Device created \r\n")
for i = 0 to IRP_MJ_MAXIMUM_FUNCTION - 1
pDriverObject->MajorFunction(i) = @FBDriver_UnsupportedFunction
next
with *pDriverObject
.MajorFunction(IRP_MJ_CLOSE) = @FBDriver_Close
.MajorFunction(IRP_MJ_CREATE) = @FBDriver_Create
.MajorFunction(IRP_MJ_DEVICE_CONTROL) = @FBDriver_IoControl
.MajorFunction(IRP_MJ_READ) = @FBDriver_Read
.MajorFunction(IRP_MJ_WRITE) = @FBDriver_Write
.DriverUnload = @FBDriver_Unload
.Flags or= DO_DIRECT_IO
.Flags and= NOT (DO_DEVICE_INITIALIZING)
end with
IoCreateSymbolicLink(@usDosDeviceName, @usDriverName)
else
DbgPrint(@!"FBExample: Error creating device \r\n")
end if
return Status
end function
sub fb_RtInit()
DbgPrint(@!"FBExample: fb_RtInit Called \r\n")
return
end sub
declare function KeTickCount stdcall alias "KeTickCount" () as PLARGE_INTEGER
function KeTickCount () as LARGE_INTEGER ptr
static as LARGE_INTEGER c
KeQueryTickCount(@c)
return @c
end function
sub FBDriver_Unload(byval DriverObject as PDRIVER_OBJECT)
dim usDosDeviceName as UNICODE_STRING
DbgPrint(@!"FBExample: unloading.. \r\n")
RtlInitUnicodeString(@usDosDeviceName, dev_dos_name)
IoDeleteSymbolicLink(@usDosDeviceName)
IoDeleteDevice(DriverObject->DeviceObject)
end sub
function FBDriver_UnsupportedFunction(byval DeviceObject as PDEVICE_OBJECT, byval Irp as PIRP) as NTSTATUS
DbgPrint(@!"FBExample: Unsupported Function \r\n")
return STATUS_NOT_SUPPORTED
end function
function FBDriver_Create(byval DeviceObject as PDEVICE_OBJECT, byval Irp as PIRP) as NTSTATUS
DbgPrint(@!"FBExample: FBDriver_Create \r\n")
return STATUS_SUCCESS
end function
function FBDriver_Close(byval DeviceObject as PDEVICE_OBJECT, byval Irp as PIRP) as NTSTATUS
DbgPrint(@!"FBExample: FBDriver_Close \r\n")
return STATUS_SUCCESS
end function
function FBDriver_IoControl(byval DeviceObject as PDEVICE_OBJECT, byval Irp as PIRP) as NTSTATUS
DbgPrint(@!"FBExample: FBDriver_IoControl \r\n")
return STATUS_SUCCESS
end function
function FBDriver_Read(byval DeviceObject as PDEVICE_OBJECT, byval Irp as PIRP) as NTSTATUS
DbgPrint(@!"FBExample: FBDriver_Read \r\n")
return STATUS_SUCCESS
end function
function FBDriver_Write(byval DeviceObject as PDEVICE_OBJECT, byval Irp as PIRP) as NTSTATUS
DbgPrint(@!"FBExample: FBDriver_Write \r\n")
return STATUS_SUCCESS
end function
А вот - компиляционный батник:
- Код:
@echo off
set drvname=driver
fbc %drvname%.bas -c
link %drvname%.o /DRIVER /align:0x80 /FULLBUILD /base:0x10000 /release /osversion:5.1 /version:5.1 /OPT:ICF /OPT:REF /SECTION:INIT,d /MERGE:_PAGE=PAGE /MERGE:.data=PAGE /MERGE:.ctors=PAGE /MERGE:_INIT=INIT /MERGE:_TEXT=.text /subsystem:native,5.01 /entry:GsDriverEntry@8 bufferoverflowk.lib ntoskrnl.lib /OUT:%drvname%.sys
Я бы всеми четырьмя конечностями был ЗА!
vbman- Сообщения : 52
Дата регистрации : 2008-11-19
Возраст : 42
Откуда : Украина, Кировоград
Re: FreeBasic умеет делать драйвера?
Блин, а оказывается правда можно... Только страшновато. Нет отладчика в исходных кодах, поэтому отлаживать сайсом в ассемблерных инструкциях неудобно будет. И большой размер файла, к тому же неоптимизированный код, а для режима ядра это критически важно. А в остальном все рабоче.
Дрова надо писать на си или асме, остальное не признаю...
Дрова надо писать на си или асме, остальное не признаю...
DiG. GeRR- Сообщения : 101
Дата регистрации : 2009-01-30
Возраст : 32
Откуда : Рудный, Казахстан
Re: FreeBasic умеет делать драйвера?
DiG. GeRR пишет:Блин, а оказывается правда можно... Только страшновато. Нет отладчика в исходных кодах, поэтому отлаживать сайсом в ассемблерных инструкциях неудобно будет. И большой размер файла, к тому же неоптимизированный код, а для режима ядра это критически важно. А в остальном все рабоче.
Дрова надо писать на си или асме, остальное не признаю...
А если опция -g?
vbman- Сообщения : 52
Дата регистрации : 2008-11-19
Возраст : 42
Откуда : Украина, Кировоград
Re: FreeBasic умеет делать драйвера?
-g? Это не так много дает - по большому счету, только имена переменных и функций. Но и дело не в этом. Сложно к тому же будет найти какие-то исходники именно на фб, только на си. А зачем переводить с си, если можно на нем писать?
DiG. GeRR- Сообщения : 101
Дата регистрации : 2009-01-30
Возраст : 32
Откуда : Рудный, Казахстан
Re: FreeBasic умеет делать драйвера?
во превых код на ФБ немногим то хуже, чем на Си, единственное, там меньше оптимизации, а во сторых компилятор транслирует код в ассемблер, а потом компилит в бинарник, и кк тому же встроенный ассемблер никто не отменял, где необходима высокая производительность, то мона прям в коде кусок на асме написатьДрова надо писать на си или асме, остальное не признаю...
а зачем переводить, когда откомпиленый кусок кода на Си прекрасно линкуется с кодом, написаным на ФБ (гдето на форуме я ето демонстрировал)А зачем переводить с си, если можно на нем писать?
Re: FreeBasic умеет делать драйвера?
а зачем переводить, когда откомпиленый кусок кода на Си прекрасно линкуется с кодом, написаным на ФБ (гдето на форуме я ето демонстрировал)
И зачем тогда нужен фрибацик? Просто ради спортивного интереса?
DiG. GeRR- Сообщения : 101
Дата регистрации : 2009-01-30
Возраст : 32
Откуда : Рудный, Казахстан
Re: FreeBasic умеет делать драйвера?
ну а зачем тогда по вашему нужен Си?
лично мне иногда удобней написать код на ФБ, допустим когда надо много работать со строками
Да и всегда хорошо, когда есть алтернативные инструменты для аналогичных задач, у каждого свои предпочтения...
лично мне иногда удобней написать код на ФБ, допустим когда надо много работать со строками
Да и всегда хорошо, когда есть алтернативные инструменты для аналогичных задач, у каждого свои предпочтения...
Re: FreeBasic умеет делать драйвера?
блин, вот это все так красивенько звучит "драайвеерр...". А для чего собсно он нужен в данном случае ???
Это же обычное приложение как и все, только с непосредственным общением с железом, что можно было и с помощью встроенного асма реализовать (как мне кажется).
P.S. Или же оно компилится не в .exe ?
Это же обычное приложение как и все, только с непосредственным общением с железом, что можно было и с помощью встроенного асма реализовать (как мне кажется).
P.S. Или же оно компилится не в .exe ?
Andrew- Сообщения : 45
Дата регистрации : 2008-09-23
Возраст : 35
Откуда : Киев
FreeBasic :: Программирование :: Общее
Страница 1 из 1
Права доступа к этому форуму:
Вы не можете отвечать на сообщения
|
|