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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> драйверописательство, проблемы при загрузгке драйвера 
:(
    Опции темы
nanoo
Дата 18.6.2010, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 19.10.2007

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



Доброе время суток.
Имеется опыт в разработке драверов под linux. Довольно большой.
Встала задача написать драйвер под windows. Прочитал чуть-чуть msdn, Комисарову ну и пару тематических статей.
Со всеми этими знаниямы попытался написать элементарный wdf драйвер режима ядра. Но не тут то было.
Код

#include<ntddk.h>
#include<wdf.h>

//EVT_WDF_DRIVER_UNLOAD EvtDriverUnload;
DRIVER_INITIALIZE DriverEntry;
EVT_WDF_DRIVER_DEVICE_ADD EvtDriverDeviceAdd;

NTSTATUS EvtDriverDeviceAdd(__in  WDFDRIVER Driver,
                            __in  PWDFDEVICE_INIT DeviceInit)
{
    return STATUS_SUCCESS;
}

//VOID EvtDriverUnload(__in WDFDRIVER Driver)
//{
//  DbgPrint("Driver:: Bye, Kernel!\n");
//}

NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING strRegistryPath )
{
    NTSTATUS ret;
    WDF_DRIVER_CONFIG wdf_config;
    WDF_DRIVER_CONFIG_INIT(&wdf_config, EvtDriverDeviceAdd);
    
    ret = WdfDriverCreate(pDriverObject,
                            strRegistryPath,
                            WDF_NO_OBJECT_ATTRIBUTES,
                            &wdf_config,
                            WDF_NO_HANDLE);

    DbgPrint("Driver:: Hello, Kernel!\n");
    return ret;
}



сделал build, получил mydriver.sys.
копирую его в system32.
После этого делаю так:
Код

sc create mydriver type= kernel binpath= "system32\mydrivers\mydriver.sys"
sc start mydriver

на что мне отвечают файл не найден (the system cannot find the file specified).
Имена файлов и путей проверил - всё правильно (в regedit смотрел).
Вопрос: Где ошибка? Что я делаю не так? Когда же я уже увижу в окне деббагера сообщение от моего драйвера?
Спасибо.
PM MAIL   Вверх
nanoo
Дата 18.6.2010, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 19.10.2007

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



Ну что, никто не знает? Или знают все, но вопрос на столько туп, что никто не хочет отвечать?  smile 

Это сообщение отредактировал(а) nanoo - 18.6.2010, 23:40
PM MAIL   Вверх
xvr
Дата 19.6.2010, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Попробуйте в binpath написать полный путь (C:\win...)

PM MAIL   Вверх
nanoo
Дата 20.6.2010, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 19.10.2007

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



Цитата(xvr @ 19.6.2010,  13:13)
Попробуйте в binpath написать полный путь (C:\win...)

Попробовал.
В реестре появилось '\??\c:\windows\system32\mydrivers\mydriver.sys'
Не работает. Симптомы точно такие же.
PM MAIL   Вверх
xvr
Дата 20.6.2010, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Цитата(nanoo @  18.6.2010,  19:39 Найти цитируемый пост)
копирую его в system32.

Цитата(nanoo @  20.6.2010,  15:01 Найти цитируемый пост)
В реестре появилось '\??\c:\windows\system32\mydrivers\mydriver.sys'

Так все таки куда, в system32 или в system32\mydrivers?

PM MAIL   Вверх
nanoo
Дата 21.6.2010, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 19.10.2007

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



Цитата(xvr @ 20.6.2010,  21:10)
Цитата(nanoo @  18.6.2010,  19:39 Найти цитируемый пост)
копирую его в system32.

Цитата(nanoo @  20.6.2010,  15:01 Найти цитируемый пост)
В реестре появилось '\??\c:\windows\system32\mydrivers\mydriver.sys'

Так все таки куда, в system32 или в system32\mydrivers?

В system32\mydrivers.

Может быть существует какой-нибудь другой метод загурзки драйвера в ядро в виндовсе? В линуксе для этого существует insmod/modprobe, вот я по аналогии с линуксом и попробовал service control. Но может быть есть какой-то другой способ?

Вот тут http://www.techtalkz.com/microsoft-device-...wont-start.html у людей точно такая же проблема, но решить её, как я понял, не смогли.
Вот тут http://www.codeguru.com/forum/showthread.php?t=479023 дядька написал дравер. Он у него первый раз стартует и останавливаеться при помощи sc start/stop, но второй раз уже не стартует - пишет то же что и у меня. Так же он пишет, что у него какая-то ошибка  в драйвере.
Может и у меня ошибка? Тогда где? Компилируется драйвер даже без ворнингов.

Это сообщение отредактировал(а) nanoo - 21.6.2010, 14:03
PM MAIL   Вверх
bra1ny
Дата 21.6.2010, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 26.12.2008

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



NtLoadDriver().
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
xvr
Дата 21.6.2010, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Цитата(nanoo @  21.6.2010,  13:34 Найти цитируемый пост)
Может быть существует какой-нибудь другой метод загурзки драйвера в ядро в виндовсе?
Через OpenSCManager и пр. Но собственно sc его и использует

Может быть проблема с \??\ в пути - это ссылка на текущую глобальную директорию и она зависит от текущего пользователя, тут я не уверен.

PM MAIL   Вверх
bra1ny
Дата 21.6.2010, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 26.12.2008

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



Цитата(xvr @ 21.6.2010,  15:56)
Цитата(nanoo @  21.6.2010,  13:34 Найти цитируемый пост)
Может быть существует какой-нибудь другой метод загурзки драйвера в ядро в виндовсе?
Через OpenSCManager и пр. Но собственно sc его и использует

Может быть проблема с \??\ в пути - это ссылка на текущую глобальную директорию и она зависит от текущего пользователя, тут я не уверен.

сервис манагер при загрузке драйвера выызвает NtLoadDriver(). Так чтобы не париться с сервисами лучше сразу  напрямую.



попробуйте изменить поле ImagePath на system32\mydrivers\mydriver.sys
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
nanoo
Дата 21.6.2010, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 19.10.2007

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



Цитата(xvr @ 21.6.2010,  15:56)
Цитата(nanoo @  21.6.2010,  13:34 Найти цитируемый пост)
Может быть существует какой-нибудь другой метод загурзки драйвера в ядро в виндовсе?
Через OpenSCManager и пр. Но собственно sc его и использует

Может быть проблема с \??\ в пути - это ссылка на текущую глобальную директорию и она зависит от текущего пользователя, тут я не уверен.

Я в курсе, что sc использует OpenSCManager. Об этом на масм.ру пишут. Именно по этому я этот sc и использую. Я полагаю это "стандартный" способ запуска драйверов в виндовс. Пишешь в реестр данные о сервисе. Типа это дравер, лежить здесь, дополнительные параметры такие-то, там-парам. А потом sc start и всё. Но вот такая вот проблемка получается.

Добавлено через 11 минут и 27 секунд
Цитата(bra1ny @ 21.6.2010,  16:03)
Цитата(xvr @ 21.6.2010,  15:56)
Цитата(nanoo @  21.6.2010,  13:34 Найти цитируемый пост)
Может быть существует какой-нибудь другой метод загурзки драйвера в ядро в виндовсе?
Через OpenSCManager и пр. Но собственно sc его и использует

Может быть проблема с \??\ в пути - это ссылка на текущую глобальную директорию и она зависит от текущего пользователя, тут я не уверен.

сервис манагер при загрузке драйвера выызвает NtLoadDriver(). Так чтобы не париться с сервисами лучше сразу  напрямую.



попробуйте изменить поле ImagePath на system32\mydrivers\mydriver.sys

ImagePath стаяла system32\mydrivers\mydriver.sys с самого начала. Я просто не удачно выразился в первом посте.

Т.е. вы предлагаете написать свою собственную програмку, которая вызывая NtLoadDriver загружает дравер сама? Я вас правильно понял?
Но в документации 
Цитата

Parameters

DriverServiceName [in]

    Pointer to a counted Unicode string that specifies a path to the driver's registry key, \Registry\Machine\System\CurrentControlSet\Services\DriverName, where DriverName is the name of the driver. 

говориться, что эта ф-ия смотрит в реестр для того, что бы драйвер загрузить. И мне кажеться что вызов этой ф-и закончиться точно так же как и с sc start.


Я вот думаю, может у меня действительно с драйвером что-то не то? Если кто писал дравейра, посмотрите пожалуйста нет ли там ошибки.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0833 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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