|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Апр 9, 2004 02:02:51 · Поправил: Duncan MacLeod Есть следующий код: .386 .model flat, stdcall option casemap :none include c:\masm32\include\windows.inc include c:\masm32\include\kernel32.inc includelib c:\masm32\lib\kernel32.lib include c:\masm32\include\setupapi.inc includelib c:\masm32\lib\setupapi.lib .data lpFileName db "ov519.inf",0 lpFilePart dd ? Win9x db "OVT.USBDCam0519 132 " WinNT db "OVT.USBDCam0519.NT 132 " FullPath db 260 dup (?) .code start: mov ax,ds ;приравняем DS и ES test al,4 ;проверяем, что за ОС jz OS_WinNT OS_Win9x: push offset lpFilePart push offset WinNT push 260 push offset lpFileName call GetFullPathName ;получить путь к файлу ov519.inf push NULL push offset Win9x push NULL push NULL call InstallHinfSection jmp Exit OS_WinNT: push offset lpFilePart push offset FullPath push 260 push offset lpFileName call GetFullPathName ;получить путь к файлу ov519.inf push NULL push offset WinNT push NULL push NULL call InstallHinfSection Exit: push NULL call ExitProcess end start Данный код, прекрасно работает под Win9x, а под WinXP отказывается! :( Объясните, почему? Что я не так сделал? И, кстати, если написать: rundll32.exe setupapi.dll,InstallHinfSection OVT.USBDCam0519.NT 132 c:\inf\ov519.inf то все работает и устанавливается. Я пока, еще только начинаю под Вынь писать, так что не пинайте, если что не оптимизировано и т.д. И сразу вопрос, нужно ли что-то делать с сегментными регистрами при строковых операциях? |
|
|
Дата: Апр 9, 2004 03:47:10 Странный код ;-) А что нельзя было два куска одинакового кода в одну процедуру оформить? Что до проблемы, отладчик то чего говорит? В Olly не пробовал посмотреть где косячит, может строка не та приходит или твой хитрый код определения ОС глючит? |
|
|
Дата: Апр 9, 2004 12:17:33 · Поправил: Duncan MacLeod А что нельзя было два куска одинакового кода в одну процедуру оформить? Тогда я об этом не думал! :) Мне надо было быстро набросать программу и проверить как она работает! Что до проблемы, отладчик то чего говорит? Проблема и в WinXP и в Win2000, когда доходит до call InstallHinfSection ничего не происходит, а под Win98 все выполняется на этом участке. Зашел в функцию, а там весь код - retn 10. В приложении, то что показывает Olly. (там уже не много переделанная программа). твой хитрый код определения ОС глючит? - это не мой хитрый код, я его здесь видел! :) И он не глючит! :) _1552402466__Inf.jpg
А вот что написано в MSDN Client: Requires Windows XP, Windows 2000 Professional, Windows NT Workstation 4.0, Windows Me, Windows 98, or Windows 95. Server: Requires Windows Server 2003, Windows 2000 Server, or Windows NT Server 4.0. Unicode: Implemented as Unicode and ANSI versions, except on Windows Me/98/95. Я просто не давно работаю с SDK, поэтому, может тут чего страшного написано про работу в WinXP/2000, а я не понял!? |
|
|
Дата: Апр 9, 2004 19:34:54 Эти строки наверно должны завершаться 0 ?? Win9xdb"OVT.USBDCam0519 132 " WinNTdb"OVT.USBDCam0519.NT 132 " Это ошибка или описка?: OS_Win9x: push offset lpFilePart push offset WinNT <-----!!! push 260 push offset lpFileName call GetFullPathName ;получить путь к файлу ov519.inf |
|
|
Дата: Апр 10, 2004 00:40:38 так они и будут завершаться нулем, после того, как я получу полный путь к inf файлу. А то что Вы указали, так, это так и задумано, чтобы не создавать два буфера для пути. Просто за место строки, для WinNT, запишеться путь к файлу. Этот код 100% работает для Win9x, а для Win2000/XP отказывается, не выполняется функция InstallHinfSection. Меня интересует ?_П_О_Ч_Е_М_У_? |
|
|
Дата: Апр 10, 2004 20:11:47 · Поправил: amitophia Duncan MacLeod Под XP/2k используй InstallHinfSectionW, а под 9x - InstallHinfSectionA (или InstallHinfSection - это одно и то же) (не забыв передалать строку в юникод) |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.043 |