C. Tantin Опубликовано 10 октября, 2009 Опубликовано 10 октября, 2009 Для программера нужно всё (ИМХО), пока неопределился User, ну не существует программистов, одинаково в совершенстве владеющих кучей языков программирования и досконально знающих компиляторы (IDEшки, интерпретаторы) к ним. Лучше очень хорошо знать один язык, чем абы-как десяток... Такое моё имхо.
Apollon Опубликовано 12 октября, 2009 Автор Опубликовано 12 октября, 2009 Проект временно заморожен из-за нехватки времени и хм... знаний... С.Тantin и Kilo отдельное вам спасибо. Не преувеличивай Хм... всё правельно вы меня не путайте 10% User, поправь орфографию в хэлпе и объясни плиз, что же ты всё-таки пишешь =) Поправлю позже - этот хелп от старой утилиты , ну что то похожие на АВЗ - иногда бывает что даже АВЗ незапускается, но! она будет её второй вспомогательной утилитой, а после будет работать АВЗ. Вот только с названием неопределился
Apollon Опубликовано 13 октября, 2009 Автор Опубликовано 13 октября, 2009 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. Если есть в коде ошбки прошу указать и если можно показать, как их исправить З.Ы. проект разморожен, но его разработка будет в трое дольше т.к. времени очень мало
kilo Опубликовано 14 октября, 2009 Опубликовано 14 октября, 2009 (изменено) 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 необходимо заранее передать параметр или легче совсем не используй параметры, а написать имя драйвера. Изменено 16 октября, 2009 пользователем User
Apollon Опубликовано 14 октября, 2009 Автор Опубликовано 14 октября, 2009 По твоему, коды ты загружаешь драйвер и тут же его выгружаешь. Хотя не первое, не второе у тебя не происходит, так как не выполняется условия if ParamCount=1 необходимо заранее передать параметр или легче совсем не используй параметры, а написать имя драйвера По первому понятно, а вот второе , как пишется имя драйвера? Если убрать Пареметр ?
kilo Опубликовано 14 октября, 2009 Опубликовано 14 октября, 2009 Насколько я помню имя драйвера у тебя WinNT_KernelSecurity
Apollon Опубликовано 14 октября, 2009 Автор Опубликовано 14 октября, 2009 Насколько я помню имя драйвера у тебя WinNT_KernelSecurity Да верно, пожалуйста покажите как параметр сменить на имя драйвера.
kilo Опубликовано 15 октября, 2009 Опубликовано 15 октября, 2009 PAnsiChar('System32\DRIVERS\WinNT_KernelSecurity.sys'), или в сам праметр присвоить значения имя драйвера.
Apollon Опубликовано 17 октября, 2009 Автор Опубликовано 17 октября, 2009 загрузка как и длл так и сис драйверов непроисходит, коносль которая требовалась для подгрузки драйверов и отгрузки в коде который был описан выше запускается без надобности. В чём может быть проблема?
kilo Опубликовано 19 октября, 2009 Опубликовано 19 октября, 2009 (изменено) 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 Изменено 19 октября, 2009 пользователем kilo
Apollon Опубликовано 19 октября, 2009 Автор Опубликовано 19 октября, 2009 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 В командной строке о_О ? Или ? Собрал отдельный модуль, но что то с мемо у меня неполучаеться или я что то не так делаю? Процедура запускаеться, и так же останавливаеться, даже консоль кмд подключил и решил рекомендованную вами команду попробывать то бишь: net start WinNT_KernelSecurity Консоль говорит: Системная ошибка номер 2Неудаётся найти файл хотя я зарание подгрузил в папку драйверс , свой драйвер. Выкладываю исходник, пожалуйста посмотрите скажите в чём я ошибся
kilo Опубликовано 19 октября, 2009 Опубликовано 19 октября, 2009 Тогда если вставлять мемо то будет приблизительно вот так Код 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 Вот что у меня получилось
Apollon Опубликовано 20 октября, 2009 Автор Опубликовано 20 октября, 2009 Нет так работать не будет так как во-первых не существует объекта memo1, а во вторых у memo нет свойства как Writeln. Мдя... надо достать маны и читать Потому что ты в коде написал расширение dll а надо было WinNT_KernelSecurity.sys и этот файл забросить заранее в папку DRIVERSВот что у меня получилось Эм... а если убрать вот эти строчки: {$APPTYPE CONSOLE} Writeln('CreateService ', hSRV <> INVALID_HANDLE_VALUE); чтобы консоль невыпрыгивала, а запускать драйвер через стандартную консоль? И будет ли код после этого работать?
kilo Опубликовано 20 октября, 2009 Опубликовано 20 октября, 2009 То будет ошибка в тех строках где есть консольные операторы Writeln и readln то необходима заменить эти операторы
Apollon Опубликовано 20 октября, 2009 Автор Опубликовано 20 октября, 2009 То будет ошибка в тех строках где есть консольные операторы Writeln и readln то необходима заменить эти операторы Блин тогда легче вообще от этого кода отказаться и писать другой ужос о_О сколько еще работы
Рекомендуемые сообщения
Пожалуйста, войдите, чтобы комментировать
Вы сможете оставить комментарий после входа в
Войти