Есть 2 файла драйвера - Sys и Ini как установить драйвер?
Code:
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;
function InstallDriver(drName, drPath: PChar): boolean;
function UninstallDriver(drName: PChar): boolean;
function LoadDriver(dName: PChar): boolean;
function UnloadDriver(dName: PChar): boolean;
{
Создание в реестре записи о драйвере.
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;
Статья Установка драйвера раздела ОС и Железо Драйвера может быть полезна для разработчиков на delphi & pascal.
Комментарии и вопросы
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.