Форум программистов, компьютерный форум, киберфорум
Программирование драйверов
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.94/16: Рейтинг темы: голосов - 16, средняя оценка - 4.94
Dobermann76
0 / 0 / 0
Регистрация: 25.04.2016
Сообщений: 9
1

X86 или x64 под Windows 10/x64

27.04.2016, 09:39. Просмотров 3030. Ответов 9
Метки нет (Все метки)

Только начинаю разбираться с написанием драйверов и как обычно уже миллион вопросов. Установлена Windows 10 x64/VS2015/WDK10.

Такие вопросы по совместимости:

- возможно ли установить x86 драйвер на Windows 64-bit систему или драйвер под Windows64 должен быть ообязательно скомпилирован как x64 проект?

- можно ли настроить дополнительные права для драйверов в процессе компиляции, как например для приложений - работа от имени администратора или от имени пользователя?

- есть ли разграничение среды, для совместимости 32-битных драйверов на 64-битных системах как для приложений, когда приходится использовать функции типа Wow64DisableWow64FsRedirection?

Дело в том, что есть проект, скомпилированный как x64, устанавливаю его с правами администратора с помощью "devcon.exe install" на Windows 10/64. Драйвер устанавливается, работает, но только в среде Администратора. От обычного пользователя если к нему обратиться - не работает. Или это он работает в 64-битной среде, а когда к нему обращаются 32-битные приложения - он с ними не работает? Нужно ли мне в данном случае перекомпилировать этот драйвер как x86 и устанавливать в каком-то специальном режиме для совместимости?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.04.2016, 09:39
Ответы с готовыми решениями:

Драйвер WinXP x86 поправить под Win7 x64
Народ нужна помощь! Есть хасп эмуль заточенный под х86. Не получается его приручить под х64... ...

Переделка драйвера под Windows 10 x64
Уважаемые! Есть драйвер успешно работающий на Windows 7 Pro 32-bit. Может кто помочь как...

Портирование x86 драйвера USB на x64
Добрый день! Вопрос в следующем: имеется проект драйвера USB-устройства для 32-битной Windows,...

Нужен пример простейшего драйвера на C/C++. Visual Studio 2008/новее. Win 8 x64, можно и XP x86 (а лучше оба)
Совсем хорошо будет, если этот драйвер будет еще и делать что-то хоть как-то заметное юзером :) И...

9
Убежденный
Ушел с форума
Эксперт С++
16274 / 7340 / 1183
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
27.04.2016, 11:25 2
Цитата Сообщение от Dobermann76 Посмотреть сообщение
- возможно ли установить x86 драйвер на Windows 64-bit систему или драйвер под Windows64 должен быть ообязательно скомпилирован как x64 проект?
Нет. Драйверы всегда должны быть той же разрядности, что и система.

Цитата Сообщение от Dobermann76 Посмотреть сообщение
- можно ли настроить дополнительные права для драйверов в процессе компиляции, как например для приложений - работа от имени администратора или от имени пользователя?
Драйверы работают по-другому, не так, как приложения.
Например, у них нет "своего" адресного пространства, они практически всегда
работают или в контексте системы, или в контексте процесса, который вызвал
конкретный обработчик. Поэтому понятие "запуск драйвера от имени администратора"
бессмысленно.

Цитата Сообщение от Dobermann76 Посмотреть сообщение
- есть ли разграничение среды, для совместимости 32-битных драйверов на 64-битных системах как для приложений, когда приходится использовать функции типа Wow64DisableWow64FsRedirection?
32-битные драйверы вообще не работают на x64. Совсем.
Так что в этом плане меньше путаницы.

Цитата Сообщение от Dobermann76 Посмотреть сообщение
Драйвер устанавливается, работает, но только в среде Администратора. От обычного пользователя если к нему обратиться - не работает.
Драйвер может поставить на свои девайсы или другие объекты особые разрешения,
которые позволят открывать их только определенным пользователям или группам.
Возможно, это как раз такой случай.

Цитата Сообщение от Dobermann76 Посмотреть сообщение
Или это он работает в 64-битной среде, а когда к нему обращаются 32-битные приложения - он с ними не работает?
Все может быть. Драйвер, к примеру, может проверять, что к нему обратилось
32-битное приложение, а не 64-битное, и выдать ошибку.

Цитата Сообщение от Dobermann76 Посмотреть сообщение
Нужно ли мне в данном случае перекомпилировать этот драйвер как x86 и устанавливать в каком-то специальном режиме для совместимости?
Ни то, ни другое, к драйверам не применимо.
Как я уже писал выше, они всегда "правильной" разрядности, это во-первых, а во-вторых,
никакие режимы совместимости на драйверы не распостраняются, это работает только
для обычных приложений в user mode.
1
Dobermann76
0 / 0 / 0
Регистрация: 25.04.2016
Сообщений: 9
27.04.2016, 12:11  [ТС] 3
Драйвер может поставить на свои девайсы или другие объекты особые разрешения,
которые позволят открывать их только определенным пользователям или группам.
Возможно, это как раз такой случай.
Можно ли прописать подобные разрешения в .inf файле или эти разрешения должны быть указаны в коде драйвера? У меня такое подозрение, что я его неправильно устанавливаю - с неправильными ограничениями или не в ту среду. Он как буд-то устанавливается не для обычного использования. Когда подписывается драйвер с помощью Inf2Cat.exe, возможно ли там задать эти разрешения?
0
Убежденный
Ушел с форума
Эксперт С++
16274 / 7340 / 1183
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
27.04.2016, 12:15 4
Цитата Сообщение от Dobermann76 Посмотреть сообщение
Можно ли прописать подобные разрешения в .inf файле или эти разрешения должны быть указаны в коде драйвера?
В коде.

Цитата Сообщение от Dobermann76 Посмотреть сообщение
У меня такое подозрение, что я его неправильно устанавливаю - с неправильными ограничениями или не в ту среду. Он как буд-то устанавливается не для обычного использования. Когда подписывается драйвер с помощью Inf2Cat.exe, возможно ли там задать эти разрешения?
Нет. Inf2Cat.exe к разрешениям вообще не имеет никакого отношения,
эта утилита не подписывает драйвер, она просто генерирует каталог безопасности
(.cat) - обычный файл, в котором хранятся хэши файлов из пакета драйвера.
0
Dobermann76
0 / 0 / 0
Регистрация: 25.04.2016
Сообщений: 9
27.04.2016, 12:41  [ТС] 5
Но ведь в Inf2Cat.exe нужно перечислить ОСи с которыми совместим драйвер? Это ни на что не влияет, только на описание драйвера? Если я задам в Inf2Cat.exe только XP_X86, смогу ли я такой драйвер установить под Windows 10 x64?
0
Убежденный
Ушел с форума
Эксперт С++
16274 / 7340 / 1183
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
27.04.2016, 13:57 6
Цитата Сообщение от Dobermann76 Посмотреть сообщение
Но ведь в Inf2Cat.exe нужно перечислить ОСи с которыми совместим драйвер? Это ни на что не влияет, только на описание драйвера?
Это влияет на проверки, которые выполняет Inf2Cat.exe.

Цитата Сообщение от Dobermann76 Посмотреть сообщение
Если я задам в Inf2Cat.exe только XP_X86, смогу ли я такой драйвер установить под Windows 10 x64?
Сможешь или нет - это зависит от самого драйвера, от его разрядности и
того, как он написан и скомпилирован. Inf2Cat тут никаким боком вообще,
он лишь проверяет синтаксис INF-файла и генерирует по нему CAT-файл.
0
Dobermann76
0 / 0 / 0
Регистрация: 25.04.2016
Сообщений: 9
27.04.2016, 18:37  [ТС] 7
А где можно подробнее почитать про эти особые разрешения и как они задаются? Не хочется сдаваться - драйвер реально работает, но только в среде Администратора. Как-то нужно заставить его работать для пользователя.
0
Убежденный
Ушел с форума
Эксперт С++
16274 / 7340 / 1183
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
27.04.2016, 18:51 8
Сначала нужно разобраться, что именно "не работает".
Не открывается какое-то устройство или коммуникационный порт или
не расшаривается общая память или при отправке пакета ввода-вывода
возвращается ошибка и т.д. И уже от полученных данных отталкиваться.
Если исходников драйвера нет - тогда все очень плохо и шансов на
успех очень мало.
0
Dobermann76
0 / 0 / 0
Регистрация: 25.04.2016
Сообщений: 9
27.04.2016, 20:50  [ТС] 9
Пытаюсь хоть немного разобраться с драйверами. У меня есть исходники. Это исходники из примера Майкрософт для виртуального RAMDisk. У меня получилось его скомпилировать и запустить под Windows 10 x64. Он устанавливается в систему и виден в Device Manager как нормально работающий. После установки появляется виртуальный диск R:. Если открывать его в Total Commander, то диск виден, но размер его 0 и пишет невозможно открыть диск. Если Total Commander открыть от имени администратора, то диск виден и полностью рабочий - на него можно писать файлы и удалять. Как его можно заставить работать для пользователя?
0
Убежденный
Ушел с форума
Эксперт С++
16274 / 7340 / 1183
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
27.04.2016, 21:02 10
Фреймворк KMDF для всех именованных device-объектов устанавливает
специальный дескриптор безопасности, который разрешает открывать их
только членам группы "Администраторы" и системе.

Об этом написано, например, здесь:
Controlling Device Access in KMDF Drivers
https://msdn.microsoft.com/windows/h...n-kmdf-drivers
Providing Security Descriptors for Device Objects and Interfaces

Every named device object must have a security descriptor. The operating system uses the
device object's security descriptor to determine the types of users that are allowed to
access a device and its device interfaces. Security descriptors can be assigned to
device objects by:

* The operating system, which provides a default security descriptor for device objects
(see Controlling Device Access).

* The framework, which provides a default security descriptor (by using the
SDDL_DEVOBJ_SYS_ALL_ADM_ALL value) if your driver calls WdfDeviceInitAssignName to
assign a name to a device object (see SDDL for Device Objects).

* Your driver, which can override the framework's default security descriptor by calling
WdfDeviceInitAssignSDDLString.
Чтобы исправить это, нужно в RamDiskEvtDeviceAdd после WdfDeviceInitAssignName
вызвать WdfDeviceInitAssignSDDLString, задав подходящую SDDL-строку, например такую:
Код
//
// Полный доступ (GA = GENERIC_ALL) для всех (WD = World)
//
D:P(A;;GA;;;WD)
Ссылки по теме:

Controlling Device Access
https://msdn.microsoft.com/ru-ru/library/ff542063(v=vs.85).aspx

WdfDeviceInitAssignSDDLString method
https://msdn.microsoft.com/library/windows/hardware/ff546035

SDDL for Device Objects
https://msdn.microsoft.com/library/windows/hardware/ff563667

Проблема обсуждалась здесь:

Need Windows 7 RamDisk Driver Assistance
http://osronline.com/showThread.CFM?link=219449
1
27.04.2016, 21:02
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.04.2016, 21:02

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Переписать драйвер usb midi контроллера под x64
Пробовал переписать сам в результате выдает сообщение которое вложено в картинку снизу ;...

Возможно ли собрать усб-драйвер под Win7 x64 в DriverStudio 3.2?
Compuware DriverStudio 3.2 позволяет создавать usb-драйвера под 64-битные ОС. Будут такие драйверы...

Security Driver Windows XP x64
существуют какие то способы защиты с помощью драйвера от записи данных в процесс? пробую...

Загрузка драйвера в windows 7 x64
WDK 7600.16385.1 test.c #include <ntddk.h> NTSTATUS DriverEntry(PDRIVER_OBJECT...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.