Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.10.31;
Скачать: [xml.tar.bz2];

Вниз

Загрузка драйвера в Windows 7 x64   Найти похожие ветки 

 
Игорь ©   (2010-08-06 22:06) [0]

Подскажите как загрузить драйвер в Windows 7 x64, отключаю обязательную проверку цифровой подписи, не хочет ни через ZwLoadDriver, ни через сервис


 
Игорь Шевченко ©   (2010-08-06 22:12) [1]


> не хочет


Больно слышать


 
sniknik ©   (2010-08-06 22:22) [2]

если драйвер 64битный, а программа на дельфи то "не хочет" это слишком мягко сказано... будет сопротивляться до последнего.


 
Rouse_ ©   (2010-08-07 19:28) [3]


> sniknik ©   (06.08.10 22:22) [2]
> если драйвер 64битный, а программа на дельфи то "не хочет"
> это слишком мягко сказано... будет сопротивляться до последнего.

Да нет, не будет - все загружается так-же как и обычно. Ей, программе 32 битной, фиолетово на битность драйвера...


 
sniknik ©   (2010-08-07 20:10) [4]

> Ей, программе 32 битной, фиолетово на битность драйвера...
зачем тогда в 64 разрядных осях есть 2 версии odbc драйверов/и администраторов под них?
оставили бы только 64, раз фиолетово.

+
dll насколько знаю загружается(если не com) в пространство программы. как подгружать 64 битную (с таким же кодом внутри) в 32х которая, опять насколько знаю в 64 работает под эмулятором.

ну и т.д.


 
Rouse_ ©   (2010-08-07 22:16) [5]

Ты про какой драйвер? Про базы данных или полноценный, работающий в нулевом кольце? Я про последний.


 
sniknik ©   (2010-08-07 23:12) [6]

а разве есть разница? любой драйвер это кусочек кода, который вызывает другой кусочек кода - программа, или через какие нибудь промежуточные кусочки кода... неважно. но вот чтобы часть кода была 64битной, а другая 32х... это как? разная разрядность кода, разные соглашения о вызовах, разные размеры женерик типов, один из вариантов под виртуальной машиной (/эмулятором) и вдруг один вызывает другой (в момент вызова по своим правилам) и тот вдруг работает? не смешите мои тапочки, как говориться.

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

> Я про последний.
я про любой.


 
Rouse_ ©   (2010-08-07 23:26) [7]


> а разве есть разница?

Конечно. Обычный драйвер абсолютно никоим образом не завязан на приложение. Как пример мое 32 битное приложение работает с 64битными драйверами электронных ключей в 64-битной ОС. Имеет возможность их загрузки и выгрузки. Причем с этим-же драйвером могут работать и другие приложения зная соответствующие IOCTL вызовы. Если ты говоришь про псевдодрайвер базы данных грузящийся в виде банальной библиотеки в адресное простанство процесса - это абсолютно разные вещи, ибо то про что ты говоришь есть библиотека, а не драйвер.
Собственно про это и говорит автор ветки, упоминая про отключение проверки ЭЦП, без наличия которой никто в ядро сторонний код не пустит.


 
Rouse_ ©   (2010-08-07 23:31) [8]

Ну и чтобы убрать недопонимания - драйверы режима ядра не грузятся в АП процесса, поэтому никаких проблем с совместимостью из-за битности у них нет :)


 
sniknik ©   (2010-08-07 23:48) [9]

> Как пример мое 32 битное приложение работает с 64битными драйверами электронных ключей в 64-битной ОС.
я работал с аладдином, тоже электронные ключи, и у них две версии драйверов 32/64. ставятся одним инсталятором т.что можно "не обратить внимания" например.

> драйверы режима ядра не грузятся в АП процесса, поэтому никаких проблем с совместимостью из-за битности у них нет :)
да, а зачем же тогда по две версии поставляют?

ты вот у себя убери 32 разрядную dll из системы, и проверь заработает ли твое приложение как прежде...


 
Rouse_ ©   (2010-08-07 23:51) [10]

Нет у меня 32 разрядной библиотеки в системе :) Как ты не поймешь? :)
Есть только мое приложение - одна штука, и есть 64 битный драйвер режима ядра - одна штука, все - остальные файлы отсутствуют как класс.

Я думаю ты немного не понимаешь механику работы драйверов, здесь могу посоветовать начать с азов - общие принципы есть в MSDN в разделе WDK, более обширно можно посмореть у Солдатова (Шрайбера не предлагаю - там уже тонкости)


 
Rouse_ ©   (2010-08-08 00:01) [11]


> да, а зачем же тогда по две версии поставляют?

Потомучто 32 битный драйвер не запустится на 64 битной системе и наоборот. В зависимости от битности инсталится соответствующий.


 
sniknik ©   (2010-08-08 00:21) [12]

> Нет у меня 32 разрядной библиотеки в системе :) Как ты не поймешь? :)
да что тут непонятного, тип сервера, обмен только данными по какому нибудь протоколу, без взаимодействия кода. я про это писал.
только сомневаюсь что драйвера для ключей такие. опыт говорит обратное.

> Потомучто 32 битный драйвер не запустится на 64 битной системе и наоборот.
32 битные очень даже запускаются на 64 битной системе. пример те же  драйвера в odbc.


 
Rouse_ ©   (2010-08-08 00:39) [13]


> sniknik ©   (08.08.10 00:21) [12]
> 32 битные очень даже запускаются на 64 битной системе. пример
> те же  драйвера в odbc.

Первое: Ты опять путаешь понятия, драйверы уровня ядра технически
невозможно запустить на ОС с другой разрядностью. Прими как факт, подробнее есть в MSDN.

Второе: Драйверы ODBC <> драйвер режима ядра. Этот как сравнивать батник и экзешник, оба вроде работают...

Третье:

> только сомневаюсь что драйвера для ключей такие. опыт говорит обратное.

Поверь мне, это так. Приложение работает на третьем кольце, драйвер на нулевом (думаю про кольца зашиты рассказывать не надо?). Они абсолютно не пересекаются друг с другом, общение происходит посредством DeviceIOCall...


 
sniknik ©   (2010-08-08 01:27) [14]

> Первое: Ты опять путаешь понятия, драйверы уровня ядра технически
не путаю, это ты читаешь только то что хочется. или в первом абзаце я не про то писал?
> посредством DeviceIOCall...
ну вот и протокол название получил...

> Поверь мне, это так.
вот странно, почему я на все пытаюсь примеры привести, а мне предлагают все на веру принимать? просто приведи марку своего ключа, посмотрим, что на сайте у них предлагается...


 
Игорь ©   (2010-08-08 07:15) [15]

var
 hSCManager, hService: SC_HANDLE;
 lpServiceArgVectors: PWideChar;
begin
 hSCManager := 0;
 hSCManager := OpenSCManagerW(nil, nil, SC_MANAGER_ALL_ACCESS);

 if hSCManager <> 0 then
 begin
   hService := 0;
   hService := CreateServiceW(hSCManager,
     "BLABLAService",
     "BLABLADriver",
     SERVICE_ALL_ACCESS,
     SERVICE_KERNEL_DRIVER,
     SERVICE_DEMAND_START,
     SERVICE_ERROR_NORMAL,
     PWideChar(DriverPath),
     nil,
     nil,
     nil,
     nil,
     nil);

   hService := 0;
   lpServiceArgVectors := nil;

   hService := OpenServiceW(hSCManager, "BLABLAService", SERVICE_ALL_ACCESS);
   if hService <> 0 then
   begin
     if StartServiceW(hService, 0, PWideChar(lpServiceArgVectors)) then
     else
     begin
       ShowMessage(SysErrorMessage(GetLastError));
       //возвращает  
       //"Загрузка драйвера была заблокирована"


Причем и с отключенной и с включенной проверкой ЭЦП возвращает "Загрузка драйвера была заблокирована"

Может я не так отключаю эту самую проверку,  при загрузке компа F8 + "отключение обязательной проверки подписи драйверов"

Даже подписываю драйвер своим самопальным сертификатом


 
Rouse_ ©   (2010-08-08 12:00) [16]


> sniknik ©   (08.08.10 01:27) [14]
> не путаю, это ты читаешь только то что хочется. или в первом
> абзаце я не про то писал?

О как, ну раз не путаешь, то ты не стал бы утверждать заведомо неверные вещи.


> > посредством DeviceIOCall...
> ну вот и протокол название получил...

Какой протокол? Ты о чем вообще? Это же элекментарные вещи...


> вот странно, почему я на все пытаюсь примеры привести, а
> мне предлагают все на веру принимать?

Да потомучто я с этим работаю каждый день и уж извини, но знаю о чем говорю. Элементарный драйвер пишется на коленке за 3-5 минут. После чего пишется к нему банальный загрузчик на дельфи и все работает. Ну покрайней мере если руки прямые.


> просто приведи марку своего ключа, посмотрим, что на сайте
> у них предлагается...

Guardant, только чего ты там искать то хочешь. Это можно сделать практически с любым драйвером, например с драйвером видеокарты, если он поддерживает быструю выгрузку.


> Игорь ©   (08.08.10 07:15) [15]

Вызов OpenServiceW лишний


 
Rouse_ ©   (2010-08-08 12:08) [17]


> sniknik ©   (08.08.10 01:27) [14]
> не путаю

Ну и вот тебе в качестве RTFM: http://msdn.microsoft.com/en-us/library/thzzea08.aspx

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


 
sniknik ©   (2010-08-08 12:10) [18]

> PWideChar(DriverPath),
а там разве не файл должен указываться? (service"s binary)


 
sniknik ©   (2010-08-08 12:22) [19]

> Какой протокол? Ты о чем вообще? Это же элекментарные вещи...
как общаются между собой служба и приложения? прямых вызовов нет, служба как сервер крутится под менеджером а приложение должны делать запросы в службу (прямой аналог сервера бд с его запросами) ... кодом не пересекается, только данными, про что писал еще в [6], и тут да разрядность кода по фигу.
и ты тут, как понимающий, и работающий с этим каждый день мог бы просто сказать "да вот так и работают те, про которых речь", а ты вместо смысла начал сыпать терминами и "верой".


 
Rouse_ ©   (2010-08-08 12:35) [20]


> sniknik ©   (08.08.10 12:22) [19]
>
> > Какой протокол? Ты о чем вообще? Это же элекментарные
> вещи...
> как общаются между собой служба и приложения?

Да как угодно, вот тебе несколько примеров на вскидку:
1. вызов ControlService/ControlServiceEx
2. обмен данными через именованные каналы
3. обмен данными через сокеты
4. в случае интерактивных сервисов и Windows XP и ниже, через оконные сообщения

это все просто способы общения, а вот протокол это уже формат этого самого обмена.

В случае DeviceIoControl это так-же способ общения, но не протокол, реализуемый набором IOCTL команд.

Только я не понимаю при чем тут это когда изначально вопрос встал так: как запустить 64 битный драйвер из 32 разрядного приложения.


 
Игорь ©   (2010-08-08 15:07) [21]

Парни мне то че делать дальше?


 
Игорь Шевченко ©   (2010-08-08 15:40) [22]


> мне то че делать дальше?


1. Гуглить
2. Оставить затею


 
Anatoly Podgoretsky ©   (2010-08-08 17:20) [23]

> Игорь  (08.08.2010 15:07:21)  [21]

Слушай.


 
Rouse_ ©   (2010-08-08 17:36) [24]


> Игорь ©   (08.08.10 15:07) [21]
>
> Парни мне то че делать дальше?

Ошибка ERROR_DRIVER_BLOCKED в 99 процентах случаев появляется в случаях различной битности драйвера и ОС, проверь, вероятно ты пытаешся загрузить 32 битный драйвер под 64 битами.


 
Игорь ©   (2010-08-08 20:35) [25]


> Rouse_ ©   (08.08.10 17:36) [24]


Все получилось, просто скомпилил драйвер в x64 Build Environment

Спасибо



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2010.10.31;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.004 c
15-1280014034
Иксик
2010-07-25 03:27
2010.10.31
Контекстная реклама или совпадение???


15-1279851394
defen
2010-07-23 06:16
2010.10.31
Контроль приложения с помощью сервиса


2-1281417193
И. Павел
2010-08-10 09:13
2010.10.31
Два почти одинаковых запроса выполняются по разному


15-1279743038
KilkennyCat
2010-07-22 00:10
2010.10.31
В году этак 1998-ом я проходил курсы сварщика оптоволокна.


2-1281091833
AlexDn
2010-08-06 14:50
2010.10.31
Графика и координаты





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский