Форум: "Начинающим";
Текущий архив: 2011.02.27;
Скачать: [xml.tar.bz2];
ВнизOffset на строковую константу Найти похожие ветки
← →
Ллирик © (2010-10-24 18:06) [40]
> Юрий Зотов © (24.10.10 16:56) [39]
>
> Пишите драйвера, зачем Вам тратить время на Delphi? За драйвера,
> кстати, и платят больше. А уж если потребуется сделать
> визуальный интерфейс, то наймите программиста Delphi - часть
> денег отдадите ему, да и Вам еще останется. И скорость разработки,
> кстати, будет выше.
не) Лучше я сам всё изучу и буду сам себе хозяин) и будет - что хочу, то и ворочу))
← →
Anatoly Podgoretsky © (2010-10-24 18:19) [41]> Ллирик (24.10.2010 18:06:40) [40]
Если ты будешь так изучать, как до это, то возможно к пенсии дойдешь до
понимания строк, а там глядищь и динамических массивов.
← →
Ллирик © (2010-10-24 19:23) [42]Да я уже вчера сказал, что сделал то, что мне надо было
← →
Andy BitOff © (2010-10-24 20:34) [43]Кокажи код, который ты сделал, я уверен, что ты узнаешь много нового и интересного для лучшего изучения.
← →
Ллирик © (2010-10-24 23:37) [44]Код пока не доделан, но драйвер уже запускается,как доделаю выложу
← →
Ллирик © (2010-12-02 20:30) [45]Вот:
program Mkkm;
uses
Windows, WinSvc, Forms,
Mkkm1 in "Mkkm1.pas" {Form1};
{$R *.res}
const
Keymouse: pansichar = "Keymouse.sys";
ccaption: pansichar = "MouseKey and KeyRemapper";
var
KeyHandle: HKEY;
Res: LongInt;
aTargetFullName: array[0..MAX_PATH] of Char;
begin
hSCManager := OpenSCManager(nil, niL, SC_MANAGER_CREATE_SERVICE);
if hSCManager = 0 then
begin
MessageBox(0, "Can`t connect to Service Control Manager.", ccaption, MB_ICONSTOP);
exit;
end
else
begin
asm
push 0
push offset aTargetFullName
push 104h
push [Keymouse]
call GetFullPathName
end;
hService:= CreateService(hSCManager, "Keymouse", ccaption,
SERVICE_ALL_ACCESS, SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START,
SERVICE_ERROR_IGNORE, @aTargetFullName, NiL, NiL, NiL, NiL, NiL);
if hService <> 0 then
begin
asm
push 0
push 0
push hService
call StartService
mov cb, eax
end;
if cb = 0 then
begin
res := GetLastError();
if Res <> ERROR_SERVICE_ALREADY_RUNNING then
begin
DeleteService(hService);
cCloseServiceHandle();
MessageBox(0, "Error: can`t find the Keymouse.sys in folder", ccaption, MB_ICONSTOP);
exit;
end;
end;
cCloseServiceHandle();
end
else
begin
res := GetLastError();
if Res <> ERROR_SERVICE_EXISTS then
begin
cCloseServiceHandle();
DelServis();
MessageBox(0, "Can`t create service", ccaption, MB_ICONSTOP);
exit;
end;
end;
begin
hDevi := CreateFile("\\\\.\\Keymouse", GENERIC_READ + GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
if hDevi = INVALID_HANDLE_VALUE then
begin
MessageBox(0, "The device is used by other application", ccaption, MB_ICONSTOP);
exit;
end;
Res := RegOpenKeyEx(hKey_Current_User,"Software\Mkkm", 0, KEY_QUERY_VALUE, KeyHandle);
if Res = ERROR_SUCCESS then
begin
cb :=1;
RegQueryValueEx(KeyHandle, "language", nil, nil, @language1, @cb);
RegCloseKey(KeyHandle);
end;
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end;
end;
end.
но изменения ещё будут. А долго не показывал его потому, что занимался другим проектом.
← →
Сергей М. © (2010-12-02 20:51) [46]Весело..
Полтора месяца кулхацкер изобретал трехколесный asm-велосипед с VCL-педалями
← →
Игорь Шевченко © (2010-12-02 21:11) [47]Ллирик © (02.12.10 20:30) [45]
А, если конечно, не секрет, для чего тут ассемблер ?
← →
sniknik © (2010-12-02 21:17) [48]ассемблер тут так же к месту как член на лбу...
← →
Ллирик © (2010-12-03 00:19) [49]А Вы попробуйте скомпилировать StartService с нулём во втором и в третьем параметре! Да Делфи Вас пошлёт куда по дальше!
← →
Inovet © (2010-12-03 00:51) [50]> [49] Ллирик © (03.12.10 00:19)
> А Вы попробуйте скомпилировать StartService с нулём во втором
> и в третьем параметре!
Это что ли?
dwNumServiceArgs [in]
The number of strings in the lpServiceArgVectors array. If lpServiceArgVectors is NULL, this parameter can be zero.
← →
Inovet © (2010-12-03 00:57) [51]> [29] Ллирик © (24.10.10 01:11)
> а я английского не знаю)
> [50] Inovet © (03.12.10 00:51)
> dwNumServiceArgs [in]
> The number of strings in the lpServiceArgVectors array.
> If lpServiceArgVectors is NULL, this parameter can be zero.
Я тоже не знаю, но несколько знакомых слов вижу. Примерно так будет
dwNumServiceArgs [in]
The number of strings in the lpServiceArgVectors array. If lpServiceArgVectors is NULL, this parameter can be zero.
Количество строк в массиве lpServiceArgVectors. Если lpServiceArgVectors NULL, этот параметр может быть нулём.
← →
sniknik © (2010-12-03 00:59) [52]> во втором и в третьем параметре!
во втором легко... в третьем тоже без проблем, делов свой описатель для функции "нарисовать".
но зачем? почему нужно коверкать стандартное, и передавать не пойми что, в функцию ожидающую другое. мы ж в отличие от тебя справку читаем. и понимаем, что делаем (в основном ;).
← →
sniknik © (2010-12-03 01:05) [53]> Если lpServiceArgVectors NULL, этот параметр может быть нулём.
не может, т.к. в модуле в дельфи там вместо указателя на указатель объявили var параметр. что в принципе одно и тоже но компилятор нуля не пропустит.
ну, а тут такой "огород" из-за этого, вместо того чтобы указать переменную, что пожалеешь о строгой типизации дельфи... (вообще то она благо)
← →
RWolf © (2010-12-03 01:07) [54]
> Ллирик © (03.12.10 00:19) [49]
Ничто не мешает переобъявить StartService самому:function StartService(hService: THandle; dwNumServiceArgs: DWORD;
var lpServiceArgVectors: PChar): BOOL; stdcall; external advapi32 name "StartServiceA";
и никто никого никуда не пошлёт.
← →
RWolf © (2010-12-03 01:09) [55]пардон, невнимательно скопипейстил:
function StartService(hService: THandle; dwNumServiceArgs: DWORD;
ppServiceArgVectors: PChar): BOOL; stdcall; external advapi32 name "StartServiceA";
← →
Германн © (2010-12-03 02:06) [56]
> Ллирик © (24.10.10 16:45) [37]
>
>
> > Германн © (24.10.10 04:01) [34]
> >
> >
> > > пишу их на асме, и представьте себе они работают
Дети Кулибиных (с) ИШ
← →
Ega23 © (2010-12-03 08:34) [57]У школоты предсессионное обострение.
← →
Игорь Шевченко © (2010-12-03 10:20) [58]
> А Вы попробуйте скомпилировать StartService с нулём во втором
> и в третьем параметре! Да Делфи Вас пошлёт куда по дальше!
>
Можно скомпилировать
← →
Slym © (2010-12-03 11:57) [59]Есть магическая переменная Dummy...
program Mkkm;
uses Windows, WinSvc, SysUtils,Forms,
Mkkm1 in "Mkkm1.pas" {Form1};
{$R *.res}
const
Keymouse = "Keymouse.sys";
Caption = "MouseKey and KeyRemapper";
var
hSCManager,hService,hDev:THandle;
aTargetFullName,language: string;
Dummy:LongInt;
KeyHandle: HKEY;
begin
try
hSCManager := OpenSCManager(nil, niL, SC_MANAGER_CREATE_SERVICE);
if hSCManager = 0 then
raise Exception.Create("Can`t connect to Service Control Manager.");
SetLength(aTargetFullName,MAX_PATH);
SetLength(aTargetFullName,GetFullPathName(PChar(Keymouse),
length(aTargetFullName),PChar(aTargetFullName),PChar(Dummy)));
hService:= CreateService(hSCManager, "Keymouse", Caption,
SERVICE_ALL_ACCESS, SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START,
SERVICE_ERROR_IGNORE, @aTargetFullName, NiL, NiL, NiL, NiL, NiL);
if hService <> 0 then
begin
if not StartService(hService,0,PChar(Dummy)) then
begin
if GetLastError <> ERROR_SERVICE_ALREADY_RUNNING then
begin
DeleteService(hService);
CloseServiceHandle(hService);
raise Exception.Create("Error: can`t find the Keymouse.sys in folder");
end;
end;
CloseServiceHandle(hService);
end else
begin
if GetLastError <> ERROR_SERVICE_EXISTS then
begin
DeleteService(hService);
CloseServiceHandle(hService);
raise Exception.Create("Can`t create service");
end;
end;
hDev := CreateFile("\\\\.\\Keymouse", GENERIC_READ + GENERIC_WRITE, 0, nil, OPEN_EXISTING, 0, 0);
if hDev = INVALID_HANDLE_VALUE then
raise Exception.Create("The device is used by other application");
if RegOpenKeyEx(hKey_Current_User,"Software\Mkkm", 0, KEY_QUERY_VALUE, KeyHandle) = ERROR_SUCCESS then
begin
Dummy:=255;
SetLength(language,Dummy);
RegQueryValueEx(KeyHandle, "language", nil, nil, PByte(@language[1]), @Dummy);
SetLength(language,Dummy);
RegCloseKey(KeyHandle);
end;
except
on E:Exception do
MessageBox(0, PChar(E.Message), Caption, MB_ICONSTOP);
end;
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
← →
Slym © (2010-12-03 11:58) [60]Slym © (03.12.10 11:57) [59]
hService:= CreateService(hSCManager, "Keymouse", Caption,
SERVICE_ALL_ACCESS, SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START,
SERVICE_ERROR_IGNORE, @aTargetFullName, NiL, NiL, NiL, NiL, NiL);hService:= CreateService(hSCManager, "Keymouse", Caption,
SERVICE_ALL_ACCESS, SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START,
SERVICE_ERROR_IGNORE, PChar(aTargetFullName), NiL, NiL, NiL, NiL, NiL);
← →
Ллирик © (2010-12-03 18:29) [61]
> sniknik © (03.12.10 00:59) [52]
>
> > во втором и в третьем параметре!
> во втором легко... в третьем тоже без проблем, делов свой
> описатель для функции "нарисовать".
> но зачем? почему нужно коверкать стандартное, и передавать
> не пойми что, в функцию ожидающую другое. мы ж в отличие
> от тебя справку читаем. и понимаем, что делаем (в основном
> ;).
>
Я тоже читаю, но никакие-то там справки, а статьи с реальными примерами на ассемблере и там во втором и третьем параметре стоят 0 и StartService прекрасно с этими параметрами работает.
> Slym © (03.12.10 11:57) [59]
>
> Есть магическая переменная Dummy...
А зачем мудрить?) Мне проще написать это на асме без всяких там ЛИШНИХ переменных)
← →
Сергей М. © (2010-12-03 19:12) [62]
> Ллирик © (03.12.10 00:19) [49]
>
> А Вы попробуйте скомпилировать StartService с нулём во втором
> и в третьем параметре! Да Делфи Вас пошлёт куда по дальше!
>
Зачем же ты, "кулхацкер", тычешь "нуль" третьим параметром ?)
Я вот не тычу туда "ноль" , а подставляю туда то что требуется прототипом. И никто меня никуда не посылает)
Так что если тебя "послали", значит ССЗБ)
← →
sniknik © (2010-12-03 19:46) [63]> А зачем мудрить?)
"мудришь" ты, а переменная там положена по определению.
> Мне проще написать это на асме без всяких там ЛИШНИХ переменных)
проще? тебе? не смешите мои тапочки, после показанного убожества...
насчет "лишних" переменных...
не понимаешь, что "экономия на спичках" к хорошему не приводит, и ожидаемого результата не дает... вот добавь в своей программе 5-50 лишних указателей, переменных, вместо одной, и проверь как изменился размер программы после, думаешь на 50*SizeOf(PChar) больше стал? чего ь=ты там экономишь?
асемблерщик блин, доморощенный, на статьях других кулхацкеров, а не каких то там справках, взрощенный...
← →
Ллирик © (2010-12-03 19:46) [64]
> Сергей М. © (03.12.10 19:12) [62]
>
>
> Зачем же ты, "кулхацкер", тычешь "нуль" третьим параметром
> ?)
> Я вот не тычу туда "ноль" , а подставляю туда то что требуется
> прототипом. И никто меня никуда не посылает)
>
> Так что если тебя "послали", значит ССЗБ)
>
Прежде чем обзываться, почитайте http://www.wasm.ru/article.php?article=drvw2k02
И кстати, почему я должен тупо следовать указаниям справок? Если API функция может работать с нестандартным значением параметра, то почему бы и нет?)
← →
Ллирик © (2010-12-03 19:52) [65]sniknik и Вы тоже почитайте http://www.wasm.ru/article.php?article=drvw2k02 много нового узнаете)
← →
sniknik © (2010-12-03 19:54) [66]> И кстати, почему я должен тупо следовать указаниям справок? Если API функция может работать с нестандартным значением параметра, то почему бы и нет?)
ну хотя бы ради совместимости программы с разными версиями виндовс...
понимаю тебя это не волнует, ведь прямо здесь и сейчас "работает же", но ты сам спросил.
← →
sniknik © (2010-12-03 19:56) [67]> много нового узнаете)
ой сомневаюсь...
← →
Ллирик © (2010-12-03 20:03) [68]sniknik, Вы драйвера пишите?
← →
sniknik © (2010-12-03 20:10) [69]я все пишу.
драйвер кстати это одно из самых простых заданий, что у меня были. правда писал я его на С.
← →
Ллирик © (2010-12-03 20:26) [70]аааа....... я С вообще не знаю. ссылка, ведёт на статью из цикла статей о написании драйверов на ассемблере.
← →
Сергей М. © (2010-12-03 20:44) [71]
> Ллирик © (03.12.10 19:46) [64]
> Прежде чем обзываться
Детский сад - штаны на лямках)
Кто тебя "обзывает", любезный ?)
> Если API функция может работать с нестандартным значением
> параметра, то почему бы и нет?
Какими такими "нестандартными" ? Что за ахинею ты порешь ?)
Тебя компилятор за "ноль" в треьем параметре послал ? Послал. И правильно сделал.
Ты разобрался почему ? Нет, не разобрался.
Так какого же хрена тыт тут, спрашивается, рожу обидную корчишь ?))
← →
Ллирик © (2010-12-03 20:55) [72]Сергей М По Вашему какое значение должно быть в третьем параметре?
← →
Сергей М. © (2010-12-03 20:57) [73]
> Ллирик © (03.12.10 20:55) [72]
А что, взглянуть в WinSvc религия не позволяет ?
← →
Ллирик © (2010-12-03 21:16) [74]
> Сергей М. © (03.12.10 20:57) [73]
>
>
> А что, взглянуть в WinSvc религия не позволяет ?
Это Вам почитать на http://www.wasm.ru/article.php?article=drvw2k02 религия не позволяет))
← →
Игорь Шевченко © (2010-12-03 21:57) [75]
> ссылка, ведёт на статью из цикла статей о написании драйверов
> на ассемблере
Обзац. Не перевелись на земле российской потомки Ивана Кулибина, все б им гланды через задницу удалять, так мало того, что через задницу, так еще через чужую задницу.
А потом всякие юноши бледные со вхором горящим начитавшись всякой хрени начинают по форумам спрашивать, отчего это у них все или глючит или торомозит.
← →
sniknik © (2010-12-03 22:03) [76]ну что ж давай почитаем...
по статье прототип описан -StartService proto hService:HANDLE, dwNumServiceArgs:DWORD, lpServiceArgVectors:LPSTR
т.е. параметр
lpServiceArgVectors
- указатель на массив указателей на завершающиеся нулём строки, которые будут переданы службе как аргументы. Драйверы не получают этих аргументов, поэтому мы устанавливаем этот параметр в NULL.
т.е. не практически не отличается от того, что тебе тут говорили, как правильно...
так с какого перепуга ты туда ноль пихаешь? (и не надо про то что это тоже самое, в дельфи строгая типизация, про которую тоже говорили)
единственное отличие в дельфи от этого, это параметр задан как var, т.е. тот же указатель только задается не константой, а через(и на) переменную (что чаще всего упрощает написание, но не через ж... конечно).
p.s. закономерный вопрос, а ты читать то умеешь? так чтобы со смыслом, а не "по верхушкам/скорочтением".
> начитавшись всякой хрени
статьи не такая уж и хрень... хрень его интерпретация.
← →
sniknik © (2010-12-03 22:05) [77]> т.е. не практически не отличается от того, что тебе тут говорили, как правильно...
->
т.е. практически, не отличается от того, что тебе тут говорили, как правильно...
← →
sniknik © (2010-12-03 22:18) [78]+
кстати, а если посмотреть как описан NULL, то там случайно не переменную найдешь? тогда будет вообще 1 в 1.
← →
Сергей М. © (2010-12-03 22:27) [79]
> Ллирик © (03.12.10 21:16) [74]
Ты совсем дебил, да ?)
Если ты тычешь "ноль" компилятору, в то время кака он вполне справедливо ожидает значенеи совсем иного типа, то это называется "Я д"Артаньян, а все кто не я - п******ы" ?)
← →
Игорь Шевченко © (2010-12-03 22:28) [80]sniknik © (03.12.10 22:03) [76]
> статьи не такая уж и хрень... хрень его интерпретация.
http://rsdn.ru/article/baseserv/svcadmin-1.xml
http://rsdn.ru/article/baseserv/svcadmin-2.xml
вот - не хрень.
http://www.wasm.ru/article.php?article=drvw2k02
А вот - хрень.
Страницы: 1 2 3 вся ветка
Форум: "Начинающим";
Текущий архив: 2011.02.27;
Скачать: [xml.tar.bz2];
Память: 0.63 MB
Время: 0.005 c