Перейти к содержанию

Рекомендуемые сообщения

Опубликовано
Для программера нужно всё (ИМХО), пока неопределился
User, ну не существует программистов, одинаково в совершенстве владеющих кучей языков программирования и досконально знающих компиляторы (IDEшки, интерпретаторы) к ним. Лучше очень хорошо знать один язык, чем абы-как десяток... Такое моё имхо.
Опубликовано

Проект временно заморожен из-за нехватки времени и хм... знаний...

С.Тantin и Kilo отдельное вам спасибо.

 

 

Не преувеличивай

Хм... всё правельно вы меня не путайте ;) 10%

User, поправь орфографию в хэлпе и объясни плиз, что же ты всё-таки пишешь =)

Поправлю позже - этот хелп от старой утилиты :( , ну что то похожие на АВЗ - иногда бывает что даже АВЗ незапускается, но! она будет её второй вспомогательной утилитой, а после будет работать АВЗ.

Вот только с названием неопределился :lool:

Опубликовано

C. Tantin

 

Инсталяцию и удаления драйвера писать вот так?

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, Menus,  ShellAPI, StdCtrls, WinSVC;


type
 TForm1 = class(TForm)
private
{ Private declarations }
 public
{ Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}
procedure TForm1.N10Click(Sender: TObject);
begin
{$APPTYPE CONSOLE}
var hSCM, hSRV : THandle;
 R : LongBool;
 Param : AnsiString;

begin
 if ParamCount = 1 then
 begin
hSCM := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
Writeln('OpenSCManager ', (hSCM <> INVALID_HANDLE_VALUE));
Param := AnsiString(ParamStr(1));
hSRV := CreateService(
hSCM, 
  @Param[1], 
  @Param[1], 
  SERVICE_ALL_ACCESS, 
  SERVICE_KERNEL_DRIVER, 
  SERVICE_DEMAND_START, 
  SERVICE_ERROR_NORMAL, 
  PAnsiChar('System32\DRIVERS\' + Param + '.sys'), 
  nil, 
  nil, 
  nil, 
  nil, 
  nil);
Writeln('CreateService ', hSRV <> INVALID_HANDLE_VALUE);
R := CloseServiceHandle(hSRV);
Writeln('CloseServiceHandle ', R);
R := CloseServiceHandle(hSCM);
Writeln('CloseServiceHandle ', R);
 end;
begin
if ParamCount=1 then
 begin
  hSCM := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
  Writeln('OpenSCManager ', hSCM <> INVALID_HANDLE_VALUE);
  Param := AnsiString(ParamStr(1));
  hSRV := OpenService(hSCM, @Param[1], SERVICE_ALL_ACCESS);
  Writeln('OpenService ', hSRV <> INVALID_HANDLE_VALUE);
  R := DeleteService(hSrv);
  Writeln('DeleteService ', R);
  // очистка ресурсов
  R := CloseServiceHandle(hSRV);
  Writeln('CloseServiceHandle ', R);
  R := CloseServiceHandle(hSCM);
  Writeln('CloseServiceHandle ', R);
 end;
end.

 

Если есть в коде ошбки прошу указать :lol: и если можно показать, как их исправить :)

 

З.Ы. проект разморожен, но его разработка будет в трое дольше т.к. времени очень мало :)

Опубликовано (изменено)

User

У тебя идет обявления переменых внутри тела процедуры

begin
{$APPTYPE CONSOLE}
var hSCM, hSRV : THandle;
 R : LongBool;
 Param : AnsiString;
begin

Нужно обявлять переменые до begin

procedure TForm1.Button1Click(Sender: TObject);
var hSCM, hSRV : THandle;
 R : LongBool;
 Param : AnsiString;
begin
 if ParamCount = 1 then
 begin
hSCM := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
Writeln('OpenSCManager ', (hSCM <> INVALID_HANDLE_VALUE));
Param := AnsiString(ParamStr(1));
hSRV := CreateService(
hSCM,
  @Param[1],
  @Param[1],
  SERVICE_ALL_ACCESS,
  SERVICE_KERNEL_DRIVER,
  SERVICE_DEMAND_START,
  SERVICE_ERROR_NORMAL,
  PAnsiChar('System32\DRIVERS\WinNT_KernelSecurity.sys'),
  nil,
  nil,
  nil,
  nil,
  nil);
  {$APPTYPE CONSOLE}
Writeln('CreateService ', hSRV <> INVALID_HANDLE_VALUE);
R := CloseServiceHandle(hSRV);
Writeln('CloseServiceHandle ', R);
R := CloseServiceHandle(hSCM);
Writeln('CloseServiceHandle ', R);
 end;
if ParamCount=1 then
 begin
  hSCM := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
  Writeln('OpenSCManager ', hSCM <> INVALID_HANDLE_VALUE);
  Param := AnsiString(ParamStr(1));
  hSRV := OpenService(hSCM, @Param[1], SERVICE_ALL_ACCESS);
  Writeln('OpenService ', hSRV <> INVALID_HANDLE_VALUE);
  R := DeleteService(hSrv);
  Writeln('DeleteService ', R);
  // очистка ресурсов
  R := CloseServiceHandle(hSRV);
  Writeln('CloseServiceHandle ', R);
  R := CloseServiceHandle(hSCM);
  Writeln('CloseServiceHandle ', R);
 end;
end;

По твоему, коды ты загружаешь драйвер и тут же его выгружаешь. Хотя не первое, не второе у тебя не происходит, так как не выполняется условия

if ParamCount=1

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

Изменено пользователем User
Опубликовано
По твоему, коды ты загружаешь драйвер и тут же его выгружаешь. Хотя не первое, не второе у тебя не происходит, так как не выполняется условия

if ParamCount=1

необходимо заранее передать параметр или легче совсем не используй параметры, а написать имя драйвера

По первому понятно, а вот второе , как пишется имя драйвера?

Если убрать Пареметр ?

Опубликовано

Насколько я помню имя драйвера у тебя WinNT_KernelSecurity

Опубликовано
Насколько я помню имя драйвера у тебя WinNT_KernelSecurity

Да верно, пожалуйста покажите как параметр сменить на имя драйвера.

Опубликовано

PAnsiChar('System32\DRIVERS\WinNT_KernelSecurity.sys'),

или в сам праметр присвоить значения имя драйвера.

Опубликовано

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

В чём может быть проблема?

Опубликовано (изменено)

User

Консоль появляется сразу потому что в коде присутствует директива компилятора {$APPTYPE CONSOLE} и как компилятор встречает эту строчку он сразу пихает в екзешник консольное окно. Принципе, консоль тебе и не нужна она используется только для вывода на экран сообщений о загрузке. Удали строчки из кода отвечающий за вывод сообщений в консоль или замени на вывод в например в memo.

И самое главное у тебя не происходит загрузка так как не проходит условие

if ParamCount = 1 then так функция ParamCount возвращает число параметров преданных в консоли, а ты не передаешь не одного параметра, и поэтому это условие не выполняется и соответственно весь код загрузки и выгрузки тоже.

 

procedure TForm1.Button1Click(Sender: TObject);
var hSCM, hSRV : THandle;
 R : LongBool;
 Param : AnsiString;
begin
hSCM := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
Writeln('OpenSCManager ', (hSCM <> INVALID_HANDLE_VALUE));
Param := AnsiString('WinNT_KernelSecurity');
hSRV := CreateService(
hSCM,
  @Param[1],
  @Param[1],
  SERVICE_ALL_ACCESS,
  SERVICE_KERNEL_DRIVER,
  SERVICE_DEMAND_START,
  SERVICE_ERROR_NORMAL,
  PAnsiChar('System32\DRIVERS\WinNT_KernelSecurity.sys'),
  nil,
  nil,
  nil,
  nil,
  nil);
  {$APPTYPE CONSOLE}
Writeln('CreateService ', hSRV <> INVALID_HANDLE_VALUE);
R := CloseServiceHandle(hSRV);
Writeln('CloseServiceHandle ', R);
R := CloseServiceHandle(hSCM);
Writeln('CloseServiceHandle ', R);

end;

И потом запустить созданную службу net start WinNT_KernelSecurity

Изменено пользователем kilo
Опубликовано
procedure TForm1.Button1Click(Sender: TObject);
var hSCM, hSRV : THandle;
 R : LongBool;
 Param : AnsiString;
begin
hSCM := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
Writeln('OpenSCManager ', (hSCM <> INVALID_HANDLE_VALUE));
Param := AnsiString('WinNT_KernelSecurity');
hSRV := CreateService(
hSCM,
  @Param[1],
  @Param[1],
  SERVICE_ALL_ACCESS,
  SERVICE_KERNEL_DRIVER,
  SERVICE_DEMAND_START,
  SERVICE_ERROR_NORMAL,
  PAnsiChar('System32\DRIVERS\WinNT_KernelSecurity.sys'),
  nil,
  nil,
  nil,
  nil,
  nil);
  {$APPTYPE CONSOLE}
Writeln('CreateService ', hSRV <> INVALID_HANDLE_VALUE);
R := CloseServiceHandle(hSRV);
Writeln('CloseServiceHandle ', R);
R := CloseServiceHandle(hSCM);
Writeln('CloseServiceHandle ', R);

end;

 

Тогда если вставлять мемо то будет приблизительно вот так

 

procedure TForm1.Button1Click(Sender: TObject);
var hSCM, hSRV : THandle;
 R : LongBool;
 Param : AnsiString;
begin
hSCM := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
Writeln('OpenSCManager ', (hSCM <> INVALID_HANDLE_VALUE));
Param := AnsiString('WinNT_KernelSecurity');
hSRV := CreateService(
hSCM,
  @Param[1],
  @Param[1],
  SERVICE_ALL_ACCESS,
  SERVICE_KERNEL_DRIVER,
  SERVICE_DEMAND_START,
  SERVICE_ERROR_NORMAL,
  PAnsiChar('System32\DRIVERS\WinNT_KernelSecurity.sys'),
  nil,
  nil,
  nil,
  nil,
  nil);
  TMemo1.
Writeln('CreateService ', hSRV <> INVALID_HANDLE_VALUE);
R := CloseServiceHandle(hSRV);
Writeln('CloseServiceHandle ', R);
R := CloseServiceHandle(hSCM);
Writeln('CloseServiceHandle ', R);

end;

после чего в ней будет отражаться отчёт загрузился драйвер.

 

И потом запустить созданную службу net start WinNT_KernelSecurity

В командной строке о_О ?

Или ?

 

Собрал отдельный модуль, но что то с мемо у меня неполучаеться или я что то не так делаю? :D

Процедура запускаеться, и так же останавливаеться, даже консоль кмд подключил и решил рекомендованную вами команду попробывать то бишь:

net start WinNT_KernelSecurity

Консоль говорит:

Системная ошибка номер 2

Неудаётся найти файл

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

Выкладываю исходник, пожалуйста посмотрите скажите в чём я ошибся :give_rose:

Опубликовано
Тогда если вставлять мемо то будет приблизительно вот так

 

Код

procedure TForm1.Button1Click(Sender: TObject);

var hSCM, hSRV : THandle;

R : LongBool;

Param : AnsiString;

begin

hSCM := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);

Writeln('OpenSCManager ', (hSCM <> INVALID_HANDLE_VALUE));

Param := AnsiString('WinNT_KernelSecurity');

hSRV := CreateService(

hSCM,

@Param[1],

@Param[1],

SERVICE_ALL_ACCESS,

SERVICE_KERNEL_DRIVER,

SERVICE_DEMAND_START,

SERVICE_ERROR_NORMAL,

PAnsiChar('System32\DRIVERS\WinNT_KernelSecurity.sys'),

nil,

nil,

nil,

nil,

nil);

TMemo1.

Writeln('CreateService ', hSRV <> INVALID_HANDLE_VALUE);

R := CloseServiceHandle(hSRV);

Writeln('CloseServiceHandle ', R);

R := CloseServiceHandle(hSCM);

Writeln('CloseServiceHandle ', R);

 

end;

после чего в ней будет отражаться отчёт загрузился драйвер.

Нет так работать не будет так как во-первых не существует объекта memo1, а во вторых у memo нет свойства как Writeln.

В командной строке о_О ?

Или ?

Да в командной строке.

Собрал отдельный модуль, но что то с мемо у меня неполучаеться или я что то не так делаю?

Процедура запускаеться, и так же останавливаеться, даже консоль кмд подключил и решил рекомендованную вами команду попробывать то бишь:

Код

net start WinNT_KernelSecurity

 

Консоль говорит:

Цитата

Системная ошибка номер 2

Неудаётся найти файл

Потому что ты в коде написал расширение dll а надо было WinNT_KernelSecurity.sys и этот файл забросить заранее в папку DRIVERS

Вот что у меня получилось

post-8190-1255993677_thumb.jpg

Опубликовано
Нет так работать не будет так как во-первых не существует объекта memo1, а во вторых у memo нет свойства как Writeln.

Мдя... надо достать маны и читать :)

Потому что ты в коде написал расширение dll а надо было WinNT_KernelSecurity.sys и этот файл забросить заранее в папку DRIVERS

Вот что у меня получилось

Эм... а если убрать вот эти строчки:

{$APPTYPE CONSOLE}
Writeln('CreateService ', hSRV <> INVALID_HANDLE_VALUE);

чтобы консоль невыпрыгивала, а запускать драйвер через стандартную консоль?

И будет ли код после этого работать?

Опубликовано

То будет ошибка в тех строках где есть консольные операторы Writeln и readln то необходима заменить эти операторы

Опубликовано
То будет ошибка в тех строках где есть консольные операторы Writeln и readln то необходима заменить эти операторы

Блин тогда легче вообще от этого кода отказаться и писать другой ужос о_О сколько еще работы :)

Пожалуйста, войдите, чтобы комментировать

Вы сможете оставить комментарий после входа в



Войти
×
×
  • Создать...