![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Offset на строковую константу [D7, ME]
Ллирик © (2010-10-22 00:57:00)У меня не хочет компилироваться такой код:
const
Keymouse = 'Keymouse.sys';
............
asm
.......
push offset Keymouse
..........
end;
Будьте добры, подскажите, что мне сделать.
Ega23 (2010-12-03 08:34:00) [41]У школоты предсессионное обострение.
Германн (2010-12-03 02:06:00) [42]
> Ллирик © (24.10.10 16:45) [37]
>
>
> > Германн © (24.10.10 04:01) [34]
> >
> >
> > > пишу их на асме, и представьте себе они работают
Дети Кулибиных (с) ИШ
RWolf (2010-12-03 01:09:00) [43]пардон, невнимательно скопипейстил:
function StartService(hService: THandle; dwNumServiceArgs: DWORD;
ppServiceArgVectors: PChar): BOOL; stdcall; external advapi32 name 'StartServiceA';
RWolf (2010-12-03 01:07:00) [44]
> Ллирик © (03.12.10 00:19) [49]
Ничто не мешает переобъявить StartService самому:
function StartService(hService: THandle; dwNumServiceArgs: DWORD;
var lpServiceArgVectors: PChar): BOOL; stdcall; external advapi32 name 'StartServiceA';
и никто никого никуда не пошлёт.
sniknik (2010-12-03 01:05:00) [45]> Если lpServiceArgVectors NULL, этот параметр может быть нулём.
не может, т.к. в модуле в дельфи там вместо указателя на указатель объявили var параметр. что в принципе одно и тоже но компилятор нуля не пропустит.
ну, а тут такой "огород" из-за этого, вместо того чтобы указать переменную, что пожалеешь о строгой типизации дельфи... (вообще то она благо)
sniknik (2010-12-03 00:59:00) [46]> во втором и в третьем параметре!
во втором легко... в третьем тоже без проблем, делов свой описатель для функции "нарисовать".
но зачем? почему нужно коверкать стандартное, и передавать не пойми что, в функцию ожидающую другое. мы ж в отличие от тебя справку читаем. и понимаем, что делаем (в основном ;).
Inovet (2010-12-03 00:57:00) [47]> [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, этот параметр может быть нулём.
Inovet (2010-12-03 00:51:00) [48]> [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.
Ллирик (2010-12-03 00:19:00) [49]А Вы попробуйте скомпилировать StartService с нулём во втором и в третьем параметре! Да Делфи Вас пошлёт куда по дальше!
sniknik (2010-12-02 21:17:00) [50]ассемблер тут так же к месту как член на лбу...
Игорь Шевченко (2010-12-02 21:11:00) [51]Ллирик © (02.12.10 20:30) [45]
А, если конечно, не секрет, для чего тут ассемблер ?
Сергей М. (2010-12-02 20:51:00) [52]Весело..
Полтора месяца кулхацкер изобретал трехколесный asm-велосипед с VCL-педалями
Ллирик (2010-12-02 20:30:00) [53]Вот:
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-10-24 23:37:00) [54]Код пока не доделан, но драйвер уже запускается,как доделаю выложу
Andy BitOff (2010-10-24 20:34:00) [55]Кокажи код, который ты сделал, я уверен, что ты узнаешь много нового и интересного для лучшего изучения.
Ллирик (2010-10-24 19:23:00) [56]Да я уже вчера сказал, что сделал то, что мне надо было
Anatoly Podgoretsky (2010-10-24 18:19:00) [57]> Ллирик (24.10.2010 18:06:40) [40]
Если ты будешь так изучать, как до это, то возможно к пенсии дойдешь до
понимания строк, а там глядищь и динамических массивов.
Ллирик (2010-10-24 18:06:00) [58]
> Юрий Зотов © (24.10.10 16:56) [39]
>
> Пишите драйвера, зачем Вам тратить время на Delphi? За драйвера,
> кстати, и платят больше. А уж если потребуется сделать
> визуальный интерфейс, то наймите программиста Delphi - часть
> денег отдадите ему, да и Вам еще останется. И скорость разработки,
> кстати, будет выше.
не) Лучше я сам всё изучу и буду сам себе хозяин) и будет - что хочу, то и ворочу))
Юрий Зотов (2010-10-24 16:56:00) [59]Пишите драйвера, зачем Вам тратить время на Delphi? За драйвера, кстати, и платят больше. А уж если потребуется сделать визуальный интерфейс, то наймите программиста Delphi - часть денег отдадите ему, да и Вам еще останется. И скорость разработки, кстати, будет выше.
Игорь Шевченко (2010-10-24 16:52:00) [60]
> Никиты Кулькина
эт кто ?