![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Есть *.vxd - файл. Как заставить систему видеть *.vxd файл?
Chieftain © (2003-06-18 18:26:00)
Дело в том, что на некоторых машинах код:
VxDHandle := CreateFile("\\.\IDE21201.VXD", 0, 0, nil, 0,
FILE_FLAG_DELETE_ON_CLOSE, 0);
if VxDHandle <> INVALID_HANDLE_VALUE then begin
...
end
else begin
WriteLn(SysErrorMessage(GetLastError));
end;
Вызывает ошибку: Системе не удается найти указанный файл
И ваще, что значит "\\.\"?
Chieftain (2003-06-19 10:19:00) [1]
Ваще VxD находится в той же директории, что и exe-файл. Проблема на самом деле в том, что на некоторых компах прога и так прекрасно работает, а на некоторых умудряется не находить VxD-шек, находящихся в Windows\System и Windows\System\Iosubsys. Еще одна неприятность - на тех компах что мне доступны - прога работает, а пользователи находящиеся в других городах жалуются. Как же тут нормально поковыряешся?
Спасибо за ответ, кое что начало проясняться.
Только сразу же возникает вопрос, а как гарантированно можно загрузить VxD? :)
NightAngel (2003-06-18 22:39:00) [2]
И если Вы пытаетесь загрузить VXD, где он у Вас находиться?
NightAngel (2003-06-18 21:48:00) [3]
При этом "\\.\IDE21201.VXD"если открыть VXD удалось, то значит драйвер сидит в памяти. Что происходит: Фактически, после вызова CreateFileA мы попадаем в Kernel32!ORD_0001, эта функция эмулирует VxDCall, она нас приводит к функции vxd-шки VWIN32 под названием _VWIN32_ReleaseWin32Mutex и затем мы получаем список DDB и ищем что задано. Она не грузит vxd, а просто посылает им DIOC_OPEN и DIOC_CLOSEHANDLE сообщения и находит как динамически так и не динамически загруженные VXD .
Вам необходимо, сначала загрузить VXD, а потом уже пытаться получить его HANDLE.