Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: DeviceIoControl  (Прочитано 8216 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Scorp__)
Молодой специалист

ru
Offline Offline
Пол: Мужской

« : 13-07-2004 11:28 » 

Получаю хендл на устройство, принадлежащее моему драйверу. Хендл получается отлично, а вот DeviceIoControl работать не хочет, с ошибкой ERROR_INVALID_PARAMETER. Вроде все сделано по MSDN, а не работает и все...
С чем может быть проблема, подскажите пожалуйста.
Код:
HANDLE hPulsedrv;
DWORD dwBuffer, dwError;
BYTE bErrCounter = 0;
DWORD BytesReturned;
CEdit *pedtBuf;
CHAR szErrorString[64] = "Чтение не удалось. Ошибка };
CHAR szBuffer[64] = "";
BOOL bResult = TRUE;
hPulsedrv = CreateFile("\\.\\PulseMouse", FILE_ALL_ACCESS, 0,
   0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (!hPulsedrv)
{ MessageBox(NULL, "Ошибка открытия устройства", "Ошибка", MB_OK);
ExitThread(1);
}
if (hPulsedrv == INVALID_HANDLE_VALUE)
{ dwError = GetLastError();
if (dwError != 32)
ExitThread(1);
}

do
{ bResult = DeviceIoControl(hPulsedrv, (DWORD)IOCTL_GET_PULSE, NULL,
               0, &dwBuffer, 4, &BytesReturned, NULL);
dwError = GetLastError();
         }
« Последнее редактирование: 30-11-2007 20:14 от Алексей1153++ » Записан

- А Вы сами-то верите в привидения?
- Конечно, нет, - ответил лектор и медленно растаял в воздухе.
TarasCo
Гость
« Ответ #1 : 13-07-2004 15:40 » 

А чему равен IOCTL_GET_PULSE? Напишите, как Вы его определили...
Записан
Scorp__)
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 13-07-2004 16:57 » 

Цитата

А чему равен IOCTL_GET_PULSE?


#define IOCTL_GET_PULSE \
  CTL_CODE(FILE_DEVICE_MOUSE, 0x810, METHOD_BUFFERED, \
  FILE_ANY_ACCESS)
Вот так. Правда в другом файле, но по-моему это неважно. Конечно файл включен #include-ом.

И еще, забыл Улыбаюсь В CreateFile() путь к устройству написан не так как сказано в msdn (с двумя слэшами до точки, а не с четырьмя), но почему-то работает, а как в msdn нет...
Записан

- А Вы сами-то верите в привидения?
- Конечно, нет, - ответил лектор и медленно растаял в воздухе.
HotRod
Гость
« Ответ #3 : 13-07-2004 20:03 » 

Надо с четырьмя слэшами, иначе он просто создаст в текущей папке файл с таким названием (ибо двойноq слэш преобразуется в одинараный, без всякого высшего смысла).
А если с четырьмя слэшами не открывается, то проблема с инсталляцией драйвера. Он какой, динамический или статический? Что в реестре про него есть (или в ini)?
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #4 : 14-07-2004 06:47 » 

Если драйвер загрузился и handle на его DeviceObject получен, что легко проверяется- то причина в том, что в драйвере не обрабатывается IOCTL_GET_PULSE, проще всего выяснить поставив BP в код обработки и узнать вызывается он или нет, а также проверить возвращаемое значение.
Записан
Amun Shu
Гость
« Ответ #5 : 14-07-2004 07:44 » 

CreateFile("\\\\.\\PulseMouse", F......

Вот так попробуй - у тебя просто линк не находит......

так как твой "\\.\\х" преобразуется в  "\.\х" а надо "\\.\х"
если конечно сам линк в драйвере создался... Улыбаюсь
Записан
Scorp__)
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 14-07-2004 08:12 » 

Точно, спасибо. До меня тоже вчера ночью дошло. Улыбаюсь
Ведь внутренние имена недоступны из Win32 приложений, а я целый день с этим маялся, хоть рядом книжка лежала, в которой это написано.

А в WDM драйвере можно использовать DosDeviceName, или за это винда по головке не погладит и надо использовать IoRegisterDeviceInterface вместо IoCreateSymbolicLink.
Записан

- А Вы сами-то верите в привидения?
- Конечно, нет, - ответил лектор и медленно растаял в воздухе.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines