Member
Статус: Не в сети Регистрация: 14.01.2004 Откуда: Киев, Украина
Что-то не выходит, делаю так:
Код:
function TMainFormONS.LoadIODriver: boolean; var s:String; hManager,hService:SC_HANDLE; b:PChar; TR:TResourceStream; tmpsdir:array[0..255] of char; m_hDriver:THandle; begin if Win32Platform<>VER_PLATFORM_WIN32_NT then begin result:=true; exit; end; s:=ExtractFilePath(ParamStr(0))+'giveio.sys';
hManager := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS); if (hManager=0) then begin //ShowMessage(frmMain.GetString(3055)); result:=false; exit; end; hService := CreateService (hManager // SCManager database , 'giveio' // name of service , 'giveio' // name to display , SERVICE_ALL_ACCESS // desired access , SERVICE_KERNEL_DRIVER // service type , SERVICE_DEMAND_START // start type , SERVICE_ERROR_NORMAL // error control type , pchar(s) // service's binary , nil // no load ordering group , nil // no tag identifier , nil // no dependencies , nil // LocalSystem account , nil // no password ); if (hService=0) then begin //RaiseLastOSError; result:=false; exit;
end; if (hService<>0) then CloseServiceHandle(hService); hService := OpenService(hManager, 'giveio', SERVICE_ALL_ACCESS); if (hService<>0) then begin b:=nil; if StartService(hService, 0, b) then CloseServiceHandle(hService) else ;//RaiseLastOSError; end;
m_hDriver := CreateFile('\.giveio', GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); if (m_hDriver = INVALID_HANDLE_VALUE) then begin CloseServiceHandle(hManager); result:=FALSE; exit; end; CloseServiceHandle(hManager); result:=true; end;
Добавлено спустя 17 минут, 4 секунды: Первый раз при инсталле драйвера все ОК. Затем при последующих запусках функция выдает false. Покдключаюсь к драйверу через m_hDriver := CreateFile('\\.\giveio', GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
Всеравно не пашет, но если запускаю драйвер через панель диспетчер устройств, функция выдает false, но при подключении через CreateFile все работает нормально, может тип запуска драйвера поменять, например, что бы грузился при старте винды?
Advanced member
Статус: Не в сети Регистрация: 09.06.2003 Откуда: USSR
Ну тот код малость устарел, вот тебе кусок из ATT
Цитата:
hService := CreateService (hManager // SCManager database , PChar(s_rvxedit) // name of service , PChar(s_rvxedit) // name to display , SERVICE_ALL_ACCESS // desired access , SERVICE_KERNEL_DRIVER // service type , SERVICE_DEMAND_START // start type , SERVICE_ERROR_NORMAL // error control type , pchar(s) // service's binary , nil // no load ordering group , nil // no tag identifier , nil // no dependencies , nil // LocalSystem account , nil // no password );
{$IFDEF debug_ver} SaveToLog('CreateService result:'+inttostr(hService)+' : LastOSError '+inttostr(GetLastError())); {$ENDIF} err:=GetlastError(); if (hService=0) and (err<>ERROR_DUP_NAME)and (err<>ERROR_SERVICE_EXISTS) then begin // RaiseLastOSError; m_hDriver:=INVALID_HANDLE_VALUE; result:=false; exit;
end;
Как видиш если вернулось ERROR_DUP_NAME или ERROR_SERVICE_EXISTS то ничего страшного, значить он уже проинсталлирован и можно дальше идти.
Member
Статус: Не в сети Регистрация: 14.01.2004 Откуда: Киев, Украина
Сенкс еще раз
Добавлено спустя 11 часов, 27 минут, 40 секунд: Занялся данной байдой, перелопатил старый код, покоцал, влепил новый и теперь работает безотказно. Рекомпайленный IOaccess тоже работает отлично. Спасибо который раз.
PS Может знает кто, какой драйвер дает возможность под виндой выполнять rdmsr и wrmsr?
Добавлено спустя 10 часов, 31 минуту, 10 секунд: А может кто подскажет как выгрузить драйвер или стопорнуть его работу, а то после завершения программы он остаеться работать.
Member
Статус: Не в сети Регистрация: 14.01.2004 Откуда: Киев, Украина
Ray Adams сенкс
Вопрос следующего плана, помещаю программу в автозагрузку, так при старте Винды, прога неправильно читает конфигурационные файлы и данные из реестра. Или вообще не читает В чем может быть лажа?
Да, и глупый вопрос, как увеличить количество столбцов в компоненте ValueListEditor?
Member
Статус: Не в сети Регистрация: 09.06.2003 Откуда: [Omsk Team]
Всем ХЕЛП ME! РГР задали, а инфы нигде нет. Задание заключается в "распозновании" всяких кружков и линий сохраненных из AutoCAD'а в формате .DXF. Проблема - отсутствие подробного описания этого формата!!!
Всем спасибо за внимание.
_________________ 3D Mark 2001->13946
3D Mark 2003->4010 PC Mark->4100 AquaMark3->31781
Заблокирован Статус: Не в сети Регистрация: 02.11.2003 Откуда: Россия,Москва
Люди плиз объясните.Я только 1 раз за Delphi и ни как не могу понять что ж у меня в этой проге все время загарается строка красным
procedure TForm1.Button1Click(Sender: TObject);- вот эта??Просто что то догнать не могу.Прога для пересчета фунтов в килограммы.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения