0 / 0 / 0
Регистрация: 11.08.2015
Сообщений: 123

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

24.04.2016, 19:53. Показов 1369. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: показать затраченные материалы за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В качестве. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru