Форум программистов, компьютерный форум, киберфорум
Программирование драйверов
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 11.08.2015
Сообщений: 123

Как соединить интерфейс с драйвером(Что же все таки в том опенсоурснике)

24.04.2016, 19:53. Показов 1349. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
http://www.acc.umu.se/~bosse/
FileDisk
Release 21 (2015-12-16)
filedisk-21.zip

Вот линка на скачивание самого примера.
http://www.acc.umu.se/~bosse/f... isk-21.zip

на этом сайте нашел пример опен соурс программки,для монтирование виртуальных дисков, все вроде бы хорошо,но я в никакую не понимаю, зачем мы пишем filedisk.c низкоуровневый, а потом filedisk.c в С++ , причем я пока ,что не нашел никакой связи между приложением в консоли и самим устанавливаемым драйвером.

Вкратце взаимодействует ли как-то написанное в папке "exe" с тем ,что лежит в папке "sys".
Буду благодарен если кратко объясните.

Добавлено через 7 часов 42 минуты
Походу немного понял, соль в DeviceIoControl, DefineDosDevice function и IRP_MJ_DEVICE_CONTROL, только пока еще не ясно почему наша программа, выбирает именно наш драйвер, на каком именно моменте создается устройство ,и на каком моменте передается управление драйверу его,из (как я понял) user-mode.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.04.2016, 19:53
Ответы с готовыми решениями:

Все таки интерфейс или как?
у меня такой вопрос как получается что при использовании ADOX создается именно объект интерфейса Catalog? объекты интерфейсов же нельзя...

О том, как Linux перестал дружить с драйвером Broadcom
Пользуюсь в основном Ubuntu и Ubuntu-based ОС (Linux Mint, Elementary OS, etc). Очень нравилось когда с версии 12.04 wi-fi драйвера на мой...

И что же все-таки лучше?
Сейчас у меня phpbb3, в целом все устраивает, но не нравится установка модулей, возникают иногда проблемы, ну и вообще..а дле меня...

6
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
25.04.2016, 10:10
Цитата Сообщение от Smeh_ Посмотреть сообщение
только пока еще не ясно почему наша программа, выбирает именно наш драйвер, на каком именно моменте создается устройство ,и на каком моменте передается управление драйверу его,из (как я понял) user-mode.
Драйвер FileDisk создает одно или несколько устройств в формате \Device\FileDisk\N или
\Device\FileDisk\CdN, где N - порядковый номер, см. функцию FileDiskCreateDevice.
Когда приложению нужно смонтировать диск, оно создает символьную ссылку вида "G:"
(диск G) на соответствующее устройство, см. функцию FileDiskMount, а затем оповещает
систему, что появился новый том SHChangeNotify. Все остальное делает система и
файловые драйверы. Т.е. после монтирования приложения и система "видят" новый том G
таким же, как и другие тома. Поддержка стандартных IOCTL для томов реализована в
IRP_MJ_XXX-обработчиках драйвера.
2
0 / 0 / 0
Регистрация: 11.08.2015
Сообщений: 123
29.04.2016, 23:09  [ТС]
А можно ли сделать так,что бы создание устройств происходило по команде из user-mode? Получается ,что все это время как бы устройства созданы, но так как нет символьной ссылки ,мы их не видим?
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
30.04.2016, 00:17
Цитата Сообщение от Smeh_ Посмотреть сообщение
А можно ли сделать так,что бы создание устройств происходило по команде из user-mode?
Можно. Например, прямо в обработчике I/O-запроса.

Цитата Сообщение от Smeh_ Посмотреть сообщение
Получается ,что все это время как бы устройства созданы, но так как нет символьной ссылки ,мы их не видим?
Все верно, user mode не может напрямую обращаться к устройству, ему
для этого требуется символьная ссылка. А в ядре можно, к примеру,
найти DEVICE_OBJECT, зареференсить его и слать IRP-запросы напрямую...
2
0 / 0 / 0
Регистрация: 25.04.2016
Сообщений: 9
10.06.2016, 10:39
filedisk требует задать номер диска N как в этом примере Убеждённого: "\Device\FileDisk\N" Если в системе несколько дисков уже установлено - чем определить свободный номер диска? Как опросить например "\Device\FileDisk\9" и получить ответ - занят он в системе или свободен? Нашёл в интернете подобное, но на Windows 10 у меня почему-то не работает или может это не весь путь я передаю "\Device\FileDisk\5":

DevUsed("\Device\FileDisk\5");


C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
int DevUsed(char *VolumeName)
{
    HANDLE                  Device;
    POPEN_FILE_INFORMATION  OpenFileInformation;
    DWORD                   BytesReturned;
 
    Device = CreateFile(
        VolumeName,
        GENERIC_READ,
        FILE_SHARE_READ | FILE_SHARE_WRITE,
        NULL,
        OPEN_EXISTING,
        FILE_FLAG_NO_BUFFERING,
        NULL
        );
 
    if (Device == INVALID_HANDLE_VALUE)
    {
        //PrintLastError(VolumeName);
        return -1;
    }
 
    OpenFileInformation = malloc(sizeof(OPEN_FILE_INFORMATION) + MAX_PATH);
 
    if (!DeviceIoControl(
                Device,
                IOCTL_FILE_DISK_QUERY_FILE,
                NULL,
                0,
                OpenFileInformation,
                sizeof(OPEN_FILE_INFORMATION) + MAX_PATH,
                &BytesReturned,
                NULL
                ))
    {
        //PrintLastError(VolumeName);
        free(OpenFileInformation);
        CloseHandle(Device);
        return 0;       //Not used
    }
 
    free(OpenFileInformation);
    CloseHandle(Device);
    return 1;       //used
 
}
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
10.06.2016, 11:06
Цитата Сообщение от Dobermann76 Посмотреть сообщение
Если в системе несколько дисков уже установлено - чем определить свободный номер диска?
Во-первых, можно перечислить все существующие тома, - а имя тома - это символьная ссылка, - и
для каждого тома узнать имя соответствующего DEVICE_OBJECT. Например, GetLogicalDriveStrings ->
QueryDosDevice и т.п.

Во-вторых, можно сразу открыть каталог '\Device' менеджера объектов и поискать там свободное
имя среди \Device\FileDisk\X. См. NtOpenSymbolicLinkObject и NtQuerySymbolicLinkObject.

Ну и никто же не мешает в драйвере реализовать какой-то специальный
IOCTL-обработчик, который будет возвращать первый свободный номер диска.
1
0 / 0 / 0
Регистрация: 25.04.2016
Сообщений: 9
10.06.2016, 16:30
Спасибо. Первый вариант подошёл. Получил список дисков из GetLogicalDriveStrings, пролистал диски и получил пути из QueryDosDevice. Отсортировал пути типа \Device\FileDisk\FileDiskN выковырял из них номера N и заполнил ими массив. Для второго варианта необходимо проверять наличие dll и подключать функции из неё, до третьего варианта я ещё не дорос.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.06.2016, 16:30
Помогаю со студенческими работами здесь

Что же все-таки со скрытом разделом?
Здравствуйте форумчане. Решил обратиться к вам за помощью т.к. самостоятельно ничего не получается. Ноутбук Lenovo b590 Windows 7...

Цифровик, что же всё таки лучше.
Здравствуйте, помогите выбрать цифровик стоимостью до 6000 т. руб. Вот ссылка на магазин КЕЙ, с уже отсортированным списком по цене до...

Что же все таки возвращает codePointAt?
Здравствуйте! Не могу понять, почему именно такое значение возвращает функция codePointAt. Знал раньше, что есть функция codePointAt (int...

Что же все-таки такое ServerName?
Добрый день, уважаемые форумчане. В настоящее время пытаюсь разобраться в настройках Апача, в файле httpd.conf. C самого начала обратил...

Всё таки что возможно написать?
Здравствуйте! Простите за наглость но нужна реальная и актуальная консультация по этому поводу, от настоящих и шарящих. У меня...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru