Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> CreateFile ("\\\\.\\IDE21201.VXD&qu, INVALID_HANDLE_VALUE 
:(
    Опции темы
Antropoid
Дата 28.9.2006, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 786
Регистрация: 1.6.2006
Где: &Ukraine==Ode ssa

Репутация: нет
Всего: 16



Пишу
Код

VxDHandle = CreateFile ("\\\\.\\IDE21201.VXD", 0, 0, 0,
                            0, FILE_FLAG_DELETE_ON_CLOSE, 0);

если файл IDE21201.VXD находится в папке, которая названа английскими буквами - все ОК,  если русскими - возвращает INVALID_HANDLE_VALUE. В чем проблема?



--------------------
user posted image
Задыхаясь от восторга заниматься чепухой. 
PM MAIL   Вверх
Romikgy
Дата 29.9.2006, 09:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 7
Всего: 146



кодировка
но имхо 
Цитата(Antropoid @  28.9.2006,  16:20 Найти цитируемый пост)
reateFile ("\\\\.\\IDE21201.VXD"

это обращение не к файлу


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
sOckets
Дата 29.9.2006, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ЖгуПоПонедельникам
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 24.8.2006
Где: ws2.lib

Репутация: нет
Всего: 2



Код
VxDHandle = CreateFile ("\\\\.\\IDE21201.VXD", 0, 0, 0,0, FILE_FLAG_DELETE_ON_CLOSE, 0);

А почему ты не указываешь явный путь к файлу ?


--------------------
Я Будущий сотрудник Google Inc. Юзаем Google Code Search для поиска исходников. Юзаем GMail как почту.
PM   Вверх
Antropoid
Дата 29.9.2006, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 786
Регистрация: 1.6.2006
Где: &Ukraine==Ode ssa

Репутация: нет
Всего: 16



Romikgy, а как установить правильную кодировку?

sOcketsявный - это какой? мне нужно использовать возможности, встроенные в IDE21201.VXD драйвер, он находится в том же месте, где и вызывающее его приложение; если по твоему надо так
Код

VxDHandle = CreateFile ("IDE21201.VXD", 0, 0, 0,0, FILE_FLAG_DELETE_ON_CLOSE, 0);

то так не катит - бросается INVALID_HANDLE_VALUE.

 smile 


--------------------
user posted image
Задыхаясь от восторга заниматься чепухой. 
PM MAIL   Вверх
sOckets
Дата 29.9.2006, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ЖгуПоПонедельникам
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 24.8.2006
Где: ws2.lib

Репутация: нет
Всего: 2



Код

#include <windows.h>
int main()
{
    HANDLE            VxDHandle;
    char            CurDir[1000];
    if (GetCurrentDirectory(sizeof(CurDir)-1,CurDir));
    {
        strcat(CurDir,"\\");
        strcat(CurDir,"IDE21201.VXD");
    }
    VxDHandle = CreateFile(CurDir,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,NULL); 
    return 0;
}

Пойдёт ?

Добавлено @ 18:34 
Цитата
то так не катит - бросается INVALID_HANDLE_VALUE.

Используй GetLastError
geterrors.h
Код

void GET_ERROR()
{
        TCHAR szBuf[80]; 
         LPVOID lpMsgBuf;
    DWORD ERROR_DW = GetLastError(); 
    FormatMessage(
    FORMAT_MESSAGE_ALLOCATE_BUFFER | 
    FORMAT_MESSAGE_FROM_SYSTEM,
    NULL,
    ERROR_DW,
    MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
    (LPTSTR) &lpMsgBuf,
    0, NULL );
    wsprintf(szBuf,"Ошибка %d: %s",ERROR_DW, lpMsgBuf); 
    MessageBox(NULL, szBuf, "Error", MB_OK);
}

Ложи его в include каталог компилятора , и просто просле каждой функции WinAPI где есть сомнения вызывай GET_ERROR() , я так делаю ,и мне удобно.

Добавлено @ 18:36 
Ой сорри , тебе же нужно его читать....сейчас переделаю.

Добавлено @ 18:37 
Код

#include <windows.h>
#include <geterrors.h>
int main()
{
    HANDLE            VxDHandle;
    char            CurDir[1000];
    if (GetCurrentDirectory(sizeof(CurDir)-1,CurDir));
    {
        strcat(CurDir,"\\");
        strcat(CurDir,"IDE21201.VXD");
    }
    VxDHandle = CreateFile(CurDir,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
    GET_ERROR();
    return 0;
}


Работает без ошибок.


--------------------
Я Будущий сотрудник Google Inc. Юзаем Google Code Search для поиска исходников. Юзаем GMail как почту.
PM   Вверх
Romikgy
Дата 29.9.2006, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 7
Всего: 146



Antropoid
Цитата(Antropoid @  29.9.2006,  17:00 Найти цитируемый пост)
IDE21201.VXD

это драйвер? или это приложение?
если драйвер как ты его запускаешь и подкакой системой?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Antropoid
Дата 29.9.2006, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 786
Регистрация: 1.6.2006
Где: &Ukraine==Ode ssa

Репутация: нет
Всего: 16



sOckets, теперь ошибка не вылетает, но... почему-то не отрабатывают действия, возложенные на IDE21201.VXD,- дело в том, что после этого идет
Код

DeviceIoControl (VxDHandle, m_cVxDFunctionIdesDInfo,
            0, 0, pOutBufVxD, sizeof(pt_IdeDInfo), &lpBytesReturned, 0);

и если после написать
Код

GET_ERROR();

, то выскакивает "Ошибка 87: Параметр задан не верно", а DeviceIoControl возвращает 0, что говорит о его некорректной работе.
 smile

Добавлено @ 22:38 
Romikgy, это фиговина, предназначенная для считывания серийника HDD(не моя). А запускаю я ее из под Windows 98


--------------------
user posted image
Задыхаясь от восторга заниматься чепухой. 
PM MAIL   Вверх
Romikgy
Дата 29.9.2006, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 7
Всего: 146



Antropoid, если это драйвер 
Цитата(Antropoid @  29.9.2006,  21:33 Найти цитируемый пост)
для считывания серийника HDD

и плюс к этому
Цитата(Antropoid @  29.9.2006,  21:33 Найти цитируемый пост)
я ее из под Windows 98

то да будет те известно , что 98 не понимает динамической загрузки драйверов, его надо прописать/установить в системе и только тогда юзать 
Цитата(Antropoid @  28.9.2006,  16:20 Найти цитируемый пост)
VxDHandle = CreateFile ("\\\\.\\IDE21201.VXD", 0, 0, 0,
                            0, FILE_FLAG_DELETE_ON_CLOSE, 0);

потому как открывание драйвера идет через другую стезю!

имхо под 98 можно напрямую в порты свистеть, так что имхо перестань мучится с драйверами под 98, и посмотри как тоже можно сделать через порты ввода/вывода

ЗЫ и в дальнейшем указывай под какой системой работаешь и что надо сделать , а то советуют те , а смысла в этих советах ноль!


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Antropoid
Дата 29.9.2006, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 786
Регистрация: 1.6.2006
Где: &Ukraine==Ode ssa

Репутация: нет
Всего: 16



Цитата(Romikgy @  29.9.2006,  22:53 Найти цитируемый пост)
98 не понимает динамической загрузки драйверов

все прекрасно работает под Виндовс 98, если файл
Цитата(Antropoid @  28.9.2006,  17:20 Найти цитируемый пост)
IDE21201.VXD находится в папке, которая названа английскими буквами

если русскими - возвращаетINVALID_HANDLE_VALUE!
 smile 



--------------------
user posted image
Задыхаясь от восторга заниматься чепухой. 
PM MAIL   Вверх
Romikgy
Дата 29.9.2006, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 7
Всего: 146



Цитата(Antropoid @  29.9.2006,  22:31 Найти цитируемый пост)
все прекрасно работает под Виндовс 98, если файл

это не корректно имхо
ты в НТ грузил драйвера? динамически , так вот там сначало его надо в систему загрузить ! а в 98 думаешь по другому? может я и ошибаюсь , но ты видать не для себя это пишешь и неизвестно как этот код прореагирует на другой машине, даже с англ. папками

Это сообщение отредактировал(а) Romikgy - 29.9.2006, 23:36


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Antropoid
Дата 29.9.2006, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 786
Регистрация: 1.6.2006
Где: &Ukraine==Ode ssa

Репутация: нет
Всего: 16



Цитата(Romikgy @  29.9.2006,  23:33 Найти цитируемый пост)
ты видать не для себя

само собой   smile 
Цитата(Romikgy @  29.9.2006,  23:33 Найти цитируемый пост)
неизвестно как этот код прореагирует на другой машине

этот код тестировался на 5 машинах под Виндовс 98,- все ОК.
Единственная проблема - русские буквы
 smile 


--------------------
user posted image
Задыхаясь от восторга заниматься чепухой. 
PM MAIL   Вверх
Damarus
Дата 30.9.2006, 01:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 671
Регистрация: 6.5.2006

Репутация: 4
Всего: 29



Romikgy, почитай: VXD. Урок 1. Основы

Цитата(Antropoid @  29.9.2006,  23:33 Найти цитируемый пост)
почему-то не отрабатывают действия, возложенные на IDE21201.VXD,- дело в том, что после этого идет

Просто код, который написал sOckets, открывает IDE21201.VXD как обычный файл, а не как VXD. ИМХО твой код правильный.

Добавлено @ 01:40 
Цитата
Динамические VxD могут быть загpужены следующим обpазом:

  • Помещением их в папку \SYSTEM\IOSUBSYS в диpектоpии Windows. VxD в этой диpектоии загpужаются Input Output Supervisor'ом (IOS). VxD в этой папке должны поддеpживать layer device driver'а, поэтому, возможно, это не самая лучшая идея загpужать ваш VxD этим путем.
  • Используя сеpвис VxD-загpузчика. VxD-загpузчик - это статический VxD, котоpый может динамически загpужать VxD. Вы можете вызывать его сеpвисы из дpугих VxD или из 16-битного кода. 
  • Используя CreateFile API из Win32-пpиложения. Вы указываете динамический VxD, котоpый вы хотите загpузить в следующем фоpмате: 

               \\.\pathname

    Hапpимеp, если вы хотите загpузить динамический VxD под названием FirstVxD, котоpый находится в текущей диpектоpии, вам следует указать следующий путь:
    Код

    .data VxDName db "\\.\FirstVxD.VXD",0
    ...... 
    .data?
    hDevice dd ?
    .....
    .code 
    ..... 
    invoke CreateFile, addr VxDName,0,0,0,0, FILE_FLAG_DELETE_ON_CLOSE,0 
    mov hDevice,eax 
    ...... 
    invoke CloseHandle,hDevice 
    ...... 

FILE_FLAG_DELETE_ON_CLOSE - флаг, указывающий, что VxD выгpужается, когда хэндл, возвpащенный CreateFile, будет закpыт. 

Если вы используете CreateFile, чтобы загpузить динамический VxD, VxD должен поддеpживать сообщение w32_DeviceIoControl. VWIN32 посылает это контpольное сообщение вашему динамическому VxD, когда он загpужается в пеpвый pаз чеpез CreateFile. VxD должен возвpатить 0 в eax'а в качестве ответа на это сообщение.


Это сообщение отредактировал(а) Damarus - 30.9.2006, 01:55
PM MAIL ICQ Jabber   Вверх
sOckets
Дата 30.9.2006, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ЖгуПоПонедельникам
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 24.8.2006
Где: ws2.lib

Репутация: нет
Всего: 2



Я откуда знал что ему нужно по другому открывать smile
Есть решение , попробуй просто скопировать этот файл в папку с windows и открывать от-туда .


--------------------
Я Будущий сотрудник Google Inc. Юзаем Google Code Search для поиска исходников. Юзаем GMail как почту.
PM   Вверх
Antropoid
Дата 30.9.2006, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 786
Регистрация: 1.6.2006
Где: &Ukraine==Ode ssa

Репутация: нет
Всего: 16



Цитата(sOckets @  30.9.2006,  11:19 Найти цитируемый пост)
 скопировать этот файл в папку с windows

моя программа не должна вносить никаких изменений в ОС(к тому же Windows-англ.слово и все прокатит). Мне с кодировками разобраться... smile 


--------------------
user posted image
Задыхаясь от восторга заниматься чепухой. 
PM MAIL   Вверх
sOckets
Дата 30.9.2006, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ЖгуПоПонедельникам
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 24.8.2006
Где: ws2.lib

Репутация: нет
Всего: 2



Ошибка может быть в чём угодно , может быть функция CreateFile в Windows 98 не правильно работает с UNICODE , например вырезка из книги Рихтера :
Цитата
А еще лучше, если Microsoft исправит функцию CreateProcess, чтобы та не морочила нам голову. Надеюсь, в следующей версии Windows так и будет. 

тут конечно про CreateProcess , но какая разница ? один программист в Microsoft допустил ошибку , теперь все программисты страдают .
Например (с той же книги):
Цитата
Увы, программист, писавший ее код, слегка ошибся, и получилось так, что номера версии Windows поменялись местами: в старший байт попадал дополнительный номер, а в младший — основной. Поскольку многие программисты уже начали пользоваться этой функцией, Microsoft пришлось оставить все, как есть, и изменить документацию с учетом ошибки.


Поэтому скорее всего что функция CreateFile в Windows98 работает совсем подругоме нежели в NTшых.

Добавлено @ 16:18 
Цитата
Romikgy, это фиговина, предназначенная для считывания серийника HDD(не моя). А запускаю я ее из под Windows 98


Не факт что "фиговина" правльно работает.


--------------------
Я Будущий сотрудник Google Inc. Юзаем Google Code Search для поиска исходников. Юзаем GMail как почту.
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.1082 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.