Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.06.2014, 13:31   #1
xe3
Пользователь
 
Аватар для xe3
 
Регистрация: 11.12.2012
Сообщений: 29
По умолчанию Win32/Win64 - драйвера и программы

Господа, проясните мне такой вопрос. Сначала предыстория.

Есть некое устройство (в моем случае камера 1394) и Win7 64 бита. Моя программа написана в х86, т.е. 32 бита, и обращается к этой камере. Какое-то время все работало хорошо и я не задумывался, а как программа 32 бита получает данные от драйвера 64 бит. А потом все перестало работать. Точнее - откомпилированная в 64 бита - работает, а в 32 - категорически отказывается. Причем это как-то синхронно произошло с камерами разных производителей.

Ну в связи с этим вопросы:

1) действительно ли требования того, что драйвера устройств в 64-битной Виндоуз должны должны быть 64 бит - абсолюты? Может до этого я ставил 32-битные драйвера? Это возможно?
2) Ткните носом в мануал или на пальцах объясните как 32-битные программы взаимодействуют с 64-битными драйверами ОС?

Хоть бы за что-то зацепиться, производители камер молчат как партизаны...

Спасибо!
xe3 вне форума Ответить с цитированием
Старый 01.06.2014, 16:07   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
действительно ли требования того, что драйвера устройств в 64-битной Виндоуз должны должны быть 64 бит - абсолюты?
Сложно сказать, зависит от драйвера. Но аксиому Win64 винда -win64 истемное ПО - лучше бдить.
Цитата:
2) Ткните носом в мануал или на пальцах объясните как 32-битные программы взаимодействуют с 64-битными драйверами ОС?
32битый код пропускается через эмулятор, благодаря чему процессор его понимает и исполняет.
Человек_Борща вне форума Ответить с цитированием
Старый 01.06.2014, 17:05   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
32битый код пропускается через эмулятор, благодаря чему процессор его понимает и исполняет.
эмм, что? О_О
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 01.06.2014, 17:11   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Цитата:
Сообщение от xe3 Посмотреть сообщение
Ну в связи с этим вопросы:
Неправильные у вас вопросы. Спрашивать надо "что изменилось в системе, что привело к проблеме". Само по себе ничего ломается (и не чинится).

Драйвера на х64 всегда только х64 и всегда только подписанные.
waleri вне форума Ответить с цитированием
Старый 01.06.2014, 17:25   #5
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,774
По умолчанию

Цитата:
Сообщение от xe3 Посмотреть сообщение
как 32-битные программы взаимодействуют с 64-битными драйверами ОС?
Через подсистему SysWOW64, вестимо. Она обеспечивает переходники (thunk), позволяющие взаимодействовать 32-битному прикладному коду с 64-битным системным окружением.
Vapaamies вне форума Ответить с цитированием
Старый 01.06.2014, 17:29   #6
xe3
Пользователь
 
Аватар для xe3
 
Регистрация: 11.12.2012
Сообщений: 29
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Неправильные у вас вопросы. Спрашивать надо "что изменилось в системе, что привело к проблеме". Само по себе ничего ломается (и не чинится).
Драйвера на х64 всегда только х64 и всегда только подписанные.
Это понятно. Не первый год интегрируем. Танцы с бубнами - наше все. Но, все течет, все меняется, сейчас с утра входя в систему с опаской ждешь, какие новые проблемы принесли последние обновления. Отследить эти процессы, если проблема внезапно появилась через полгода после обновления - уже невозможно. А поменялось все - и система, и СДК-еи камер... Главное что две камеры перестали работать... Производители утверждают, что все ОК. Игрался уже и с голой системой... Безнадега. Вот появилась желание разобраться в деталях процессов.

А тут я посмотрю, консенсуса тоже нет. Наверное, придется зарываться в эти FM, но я никогда не собирался писать драйверы.

Так как взаимодействуют 64 битные драйвера с 32 битными программами? Очевидно, что-то сломалось именно в этом механизме? Или нет?
xe3 вне форума Ответить с цитированием
Старый 01.06.2014, 18:49   #7
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

Цитата:
Сообщение от xe3
откомпилированная в 64 бита - работает, а в 32 - категорически отказывается. Причем это как-то синхронно произошло с камерами разных производителей.
драйвера тут не причем.

что в программе изменилось?
f.hump вне форума Ответить с цитированием
Старый 02.06.2014, 10:43   #8
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Человек_Борща

Сложно сказать, зависит от драйвера.

А теперь - правильный ответ: на 64-битную винду можно установить только 64-битный драйвер


32битый код пропускается через эмулятор, благодаря чему процессор его понимает и исполняет.

Rififi вне форума Ответить с цитированием
Старый 02.06.2014, 11:57   #9
xe3
Пользователь
 
Аватар для xe3
 
Регистрация: 11.12.2012
Сообщений: 29
По умолчанию

Цитата:
Сообщение от Vapaamies Посмотреть сообщение
Через подсистему SysWOW64, вестимо. Она обеспечивает переходники (thunk), позволяющие взаимодействовать 32-битному прикладному коду с 64-битным системным окружением.
Большое спасибо! А не могли бы прояснить такой вопрос - вот есть драйвер, для него должен быть какой-то модуль к wow64? Или wow64 реализует какой-то универсальный механизм моделирования функционала драйверов в 32 битовой среде?

Цитата:
Сообщение от f.hump Посмотреть сообщение
драйвера тут не причем.
что в программе изменилось?
Программа тут не при чем. Естественно, я все проверял на примерах и утилитах из СДК разработчиков...
xe3 вне форума Ответить с цитированием
Старый 02.06.2014, 12:37   #10
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Приложения напрямую драйвера не вызывают.
Windows API автоматически конвертирует все вызовы из х32 в х64.

Вы либо изменили ваше приложение, либо изменили драйвера, либо какую-то настройку в драйверах и/или приложении. Ну или поменяли сам девайс.

Само по себе ничего не ломается и ничего не чинится.
waleri вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
VBA и Win64 Aent Microsoft Office Excel 4 22.11.2014 11:30
От Win32 к Win64 shuaal Visual C++ 0 25.10.2010 13:30
win32 API.Visual Studio 2008.Создание проекта Win32 Aleksandr_Yanov Visual C++ 2 12.09.2010 13:09
Windows 7 win64 и SQL Dux SQL, базы данных 0 17.03.2010 23:52
HLLW.Shadow.based / Net-Worm.Win32.Kido / Win32.Conficker / W32.Downadup Pirotexnik Безопасность, Шифрование 13 27.03.2009 14:02