Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 | 3 |

 

  Вопрос: Драйвер на бейсике - реально? Добавлено: 22.03.09 18:41  

Автор вопроса:  VerhoLom
Я вот тут смотрел примеры из поставки FreeBASIC 0.20 и нашел интересную папку с названием Driver. В ней пример драйвера для ХР. Я еще толком не экспериментировал с ним, но, мне кажется, это все не настолько уж нереально. Я бы был за!

Вот код драйвара:


'' 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


Кто что думает по этому поводу?

Ответить

  Ответы Всего ответов: 34  

Номер ответа: 1
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #1
Добавлено: 22.03.09 23:23
Почему бы и нет, если этот компилятор это позволяет. Я лично не знаю, что это за бейсик, но погу предположить. Синтаксис разбирается "basic-компилятором" работающим как препроцессор других ЯВУ, на выходе ассемблерный код, компиляция ассемблерного листинга и последующая компоновка. На мой взгляд возможно и даже очень. Есть даже образцы изображения элементов BASIC-синтаксиса на макросах MASM. )) Возможен как промежуточный другой язык, C например.

Ответить

Номер ответа: 2
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #2
Добавлено: 23.03.09 02:57
порнография все это. для драйверов юзайте Си. Кроссплатформа и стандарт. И производители выкладывают драйвера в сорцах на си. а от драйвера на бейсике, кроме академического интереса, толку мало. Знаний написание драйверов требует высоких. А не просто натянуть кнопку на форму и дважды по ней клацнуть.

Ответить

Номер ответа: 3
Автор ответа:
 Arseny



ICQ: 298826769 

Вопросов: 53
Ответов: 1732
 Профиль | | #3 Добавлено: 25.03.09 08:03
Ra$cal пишет:
Кроссплатформа

FreeBasic - тоже кроссплатформа. :-D

Ответить

Номер ответа: 4
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #4
Добавлено: 25.03.09 15:24
а запорожец - тоже машина ;)

Ответить

Номер ответа: 5
Автор ответа:
 SergeyZuzic



ICQ: 474690219 

Вопросов: 5
Ответов: 155
 Web-сайт: vsedlysita.narod.ru
 Профиль | | #5
Добавлено: 29.03.09 15:18
Лучше юзай C++ на нем можно

Ответить

Номер ответа: 6
Автор ответа:
 VerhoLom



Вопросов: 20
Ответов: 285
 Профиль | | #6 Добавлено: 31.03.09 15:54
Для Ra$cal:
На фрибейсике кнопочек не потягаешь... Это компилятор безо всяких студий...

Ответить

Номер ответа: 7
Автор ответа:
 VerhoLom



Вопросов: 20
Ответов: 285
 Профиль | | #7 Добавлено: 31.03.09 15:56
Bообще пора уходить от стереотипов, что бейсик доходной язык... Все-таки он развивается!

Ответить

Номер ответа: 8
Автор ответа:
 VerhoLom



Вопросов: 20
Ответов: 285
 Профиль | | #8 Добавлено: 31.03.09 15:58
Для mc-black:
код на фрибейсике переводится в ГАСовский код - он и компилируется...

Ответить

Номер ответа: 9
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #9
Добавлено: 31.03.09 18:26
в ГАСовский код


Значит я был прав. Гнушный ассемблер)))

Ответить

Номер ответа: 10
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #10
Добавлено: 31.03.09 22:58
а ОО составляющая языка развивается? А то толку от этого басика? Дрова все равно не его фишка. Есть подозрение, что так и не выдет ниче более серьезного, чем семпловые дровишки.

Ответить

Номер ответа: 11
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #11
Добавлено: 01.04.09 09:01
Решил я посмотреть что там за FreeBASIC: http://www.freebasic.net/
Most important features:
    * A large number of variable types available
    * Arrays
    * BASIC Compatibility
    * Built-in gfx library
    * Clean Syntax
    * Completely *FREE*
    * Create OBJ's, LIB's, DLL's, and console or GUI EXE's
    * Debugging support
    * Enumerations (ENUM's)
    * Escape characters inside literal strings
    * Function overloading
    * Inline Assembly
    * Most of the known C libraries can be used directly, without wrappers
    * Multi-platform
    * Multi-threading
    * Name spaces
    * Optimized code generation
    * Optional function arguments
    * Pointers
    * Preprocessor
    * Typedefs
    * Unicode support
    * Unlimited number of symbols
    * User-defined Types (UDT's)
    * Variable initializers (including arrays and UDT's)


Любопытно, что символика программки - темная лошадка. На что это авторы хотели намекнуть?..
Драйвера на нем конечно массово писать не станут.

ООП - это не необходимость для написания драйверов, хотя C++ (наряду с C и ассемблером и их сочетанием) сегодня стандарт в этой области. Большая куча готовых драйверов нам досталась в наследство еще от C-программистов. Конечно, программер умеющий писать драйвера на C++ / C / ассемблере без труда может написать то же самое и на FreeBASIC, только вот станет ли он это делать? Ответ вы знаете.

А факт, что FreeBASIC на это способен - интересно, но не более.

Ответить

Номер ответа: 12
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #12
Добавлено: 01.04.09 14:23
дык я и не говорю, что ооп надо для драйверов. просто объективно на фрибейсике писать дрова не будут. значит смотритм, как он подходит под прикладные задачи. там ооп как очень требуется. и судя по всему не очень подходит. а вообще похоже что написанию фрибейсика способствовали холивары о способностях бейсиков, и они решили сделать бейсик, с блекджеком и шлюхами, чтобы был аргумент в холиварах. не вижу я в нем смысла. c++ не заменит, а кто юзать будет - хз.

Ответить

Номер ответа: 13
Автор ответа:
 VerhoLom



Вопросов: 20
Ответов: 285
 Профиль | | #13 Добавлено: 06.04.09 15:33
в драйвере на С++ не сильно то ООП и попользуешь. RTL, знаете-ли...

Ответить

Номер ответа: 14
Автор ответа:
 VerhoLom



Вопросов: 20
Ответов: 285
 Профиль | | #14 Добавлено: 06.04.09 15:35
Я б ы несильно зацикливался на Бейсике в Фрибейсике как языке, т. к. компилируется то все-таки ассемблер... (ГАС)

Ответить

Номер ответа: 15
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #15
Добавлено: 06.04.09 16:18
На GCC (G++) тот же самый GAS, только язык C++ все-таки богаче оснащен по своей природе )

Ответить

Страница: 1 | 2 | 3 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам