Установка драйвера

Previous  Top  Next

    
 

 

Есть 2 файла драйвера - Sys и Ini как установить драйвер?

Code:

{©Drkb v.3(2007): www.drkb.ru}

function Install: Boolean;

const

StartType =

{$IFDEF SERVICE_DEBUG}          

   SERVICE_DEMAND_START;

{$ELSE}

   SERVICE_AUTO_START;

{$ENDIF}

var

SCManager, Service: SC_HANDLE;

Info: String;

begin

SCManager := OpenSCManager(nil, nil, SC_MANAGER_CREATE_SERVICE);

if SCManager <> 0 then

try

   Service := CreateService(SCManager, PChar(ServiceName), ServiceDisplayName,

     SERVICE_ALL_ACCESS, SERVICE_WIN32_SHARE_PROCESS or SERVICE_INTERACTIVE_PROCESS,

     StartType, SERVICE_ERROR_NORMAL, PChar('"' + ParamStr(0) + '" -service'),

     nil, nil, nil, nil, nil);

   if Service <> 0 then

   try

     Result := ChangeServiceConfig(Service, SERVICE_NO_CHANGE,

       SERVICE_NO_CHANGE, SERVICE_NO_CHANGE, nil, nil,

       nil, nil, nil, nil, nil);

     Info := ServiceInfo;

     if Result then

       Result := ChangeServiceConfig2(Service,

         SERVICE_CONFIG_DESCRIPTION, @Info);

   finally

     CloseServiceHandle(Service);

   end

   else

     Result := GetLastError = ERROR_SERVICE_EXISTS;

finally

   CloseServiceHandle(SCManager);

end

else

   Result := False

end;

Автор: Rouse_

©Drkb::01335

Взято из http://forum.sources.ru

 

 

 

Code:

unit DrvMgr;

 

interface

 

uses

windows, NativeAPI, advApiHook;

 

function InstallDriver(drName, drPath: PChar): boolean;

function UninstallDriver(drName: PChar): boolean;

function LoadDriver(dName: PChar): boolean;

function UnloadDriver(dName: PChar): boolean;

 

implementation

 

const

DrRegPath = '\registry\machine\system\CurrentControlSet\Services\';

 

{

Создание в реестре записи о драйвере.

drName - имя драйвера,

drPath - путь к файлу драйвера,

Result - успешность установки.

}

function InstallDriver(drName, drPath: PChar): boolean;

var

Key, Key2: HKEY;

dType: dword;

Err: dword;

NtPath: array[0..MAX_PATH] of Char;

begin

Result := false;

dType := 1;

Err := RegOpenKeyA(HKEY_LOCAL_MACHINE, 'system\CurrentControlSet\Services', Key);

if Err = ERROR_SUCCESS then

  begin

   Err := RegCreateKeyA(Key, drName, Key2);

   if Err <> ERROR_SUCCESS then Err := RegOpenKeyA(Key, drName, Key2);

   if Err = ERROR_SUCCESS then

     begin

      lstrcpy(NtPath, PChar('\??\' + drPath));

      RegSetValueExA(Key2, 'ImagePath', 0, REG_SZ, @NtPath, lstrlen(NtPath));

      RegSetValueExA(Key2, 'Type', 0, REG_DWORD, @dType, SizeOf(dword));

      RegCloseKey(Key2);

      Result := true;

     end;

   RegCloseKey(Key);

  end;

end;

 

{

Удаление записи о драйвере из реестра.

}

function UninstallDriver(drName: PChar): boolean;

var

Key: HKEY;

begin

Result := false;

if RegOpenKeyA(HKEY_LOCAL_MACHINE, 'system\CurrentControlSet\Services', Key) = ERROR_SUCCESS then

   begin

     RegDeleteKey(Key, PChar(drName+'\Enum'));

     RegDeleteKey(Key, PChar(drName+'\Security'));

     Result := RegDeleteKey(Key, drName) = ERROR_SUCCESS;

     RegCloseKey(Key);

   end;

end;

 

{

Загрузка драйвера.

}

function LoadDriver(dName: PChar): boolean;

var

Image: TUnicodeString;

Buff: array [0..MAX_PATH] of WideChar;

begin

StringToWideChar(DrRegPath + dName, Buff, MAX_PATH);

RtlInitUnicodeString(@Image, Buff);

Result := ZwLoadDriver(@Image) = STATUS_SUCCESS;

end;

 

 

{

Выгрузка драйвера.

}

function UnloadDriver(dName: PChar): boolean;

var

Image: TUnicodeString;

Buff: array [0..MAX_PATH] of WideChar;

begin

StringToWideChar(DrRegPath + dName, Buff, MAX_PATH);

RtlInitUnicodeString(@Image, Buff);

Result := ZwUnloadDriver(@Image) = STATUS_SUCCESS;

end;

 

initialization

EnablePrivilege('SeLoadDriverPrivilege');

 

end.

Автор: Arazel

©Drkb::01336

Взято из http://forum.sources.ru