· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› InstallHinfSection не работает в WinXP, хотя через Rundll32.exe вызывается.

Посл.отвђт Сообщен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