Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.02.27;
Скачать: CL | DM;

Вниз

Offset на строковую константу   Найти похожие ветки 

 
Ллирик ©   (2010-10-22 00:57) [0]

У меня не хочет компилироваться такой код:
const
Keymouse = "Keymouse.sys";
............
asm
.......
push offset   Keymouse
..........
end;
Будьте добры, подскажите, что мне сделать.


 
Плохиш ©   (2010-10-22 01:42) [1]


const
Keymouse: String = "Keymouse.sys";


 
Ллирик ©   (2010-10-22 18:21) [2]

Так String добавляет в первый байт размер строки, а мне этого не надо


 
Anatoly Podgoretsky ©   (2010-10-22 18:58) [3]

Какой String?


 
sniknik ©   (2010-10-22 19:02) [4]

чего ты там оптимизировать на ассемблере собрался с такими знаниями?


 
Ллирик ©   (2010-10-22 20:21) [5]

Я некоторые api вызвать не могу с теми аргументами, которые мне нужны, при компиляции  Делфи на них ругается) Вот и решил вызывать функции постаринке, тем более что я знаю хорошо. Это я Делфи начал изучать всего лишь две недели назад


 
Фокус_Ник   (2010-10-22 21:26) [6]

> Ллирик ©   (22.10.10 20:21) [5]

> Я некоторые api вызвать не могу с теми аргументами, которые
> мне нужны, при компиляции  Делфи на них ругается)

Наверное, там нужен PChar? И не нужны никакие ассемблеры.

> Вот и решил вызывать функции постаринке
Вместо того, чтобы почитать справку по стоковым типам, или посмотреть примеры в Инете...

> Делфи начал изучать всего лишь две недели назад
В Делфи несколько строковых типов (ShortString, AnsiString, WideString) и соответствующие им указатели (PShortString, PChar, PWideChar).

См. справку по типам данных (и особенно обратите внимание на строки с управляемым временем жизни).


 
sniknik ©   (2010-10-22 22:46) [7]

> Наверное, там нужен PChar?
не нужен.
push offset   Keymouse[1];
аналог PChar будет, и даже #0 в конце будет. дельфи магия работы со строками...

> И не нужны никакие ассемблеры.
а вот тут согласен.


 
Фокус_Ник   (2010-10-22 23:21) [8]

> sniknik ©   (22.10.10 22:46) [7]

1. Зачем делать аналог PChar, если при вызове функции API можно взять длинную строку и просто привести тип? А в случае константы даже и тип приводить не надо, все и так вызовется.

2. Сначала ассемблерный код, а потом "ассемблер не нужен". Как понять тебя, Саид?


 
sniknik ©   (2010-10-23 00:29) [9]

> если при вызове функции API можно взять длинную строку и просто привести тип?
а тут что? -> Плохиш ©   (22.10.10 01:42) [1]
и что думаешь делается при приведении типа со строки в PChar? результаты равнозначны.

> А в случае константы даже и тип приводить не надо, все и так вызовется.
а в случае константы
> не хочет компилироваться такой код:

> Сначала ассемблерный код,
автор хочет, говорит ассемблер ему понятнее
> а потом "ассемблер не нужен".
правда жизни... ради вызовов апишных функций, ассемблер не нужен.


 
Ллирик ©   (2010-10-23 01:00) [10]


> Фокус_Ник   (22.10.10 21:26) [6]
>
> Наверное, там нужен PChar? И не нужны никакие ассемблеры.

PChar пробовал. Компилируется, но потом глянул в OllyDebugger`е, по этому адресу находится не строка, а какая-то ерунда.
>
> Вместо того, чтобы почитать справку по стоковым типам, или
> посмотреть примеры в Инете...
>

Если вызывать api, не на ассемблере, то Делфи ругается не на строки, а на 0 или nil, да на 1.

> sniknik ©   (22.10.10 22:46) [7]
> не нужен.
> push offset   Keymouse[1];
> аналог PChar будет, и даже #0 в конце будет. дельфи магия
> работы со строками...
>

Наверно можно и так, но не эффективно, лишний байт в коде))


 
sniknik ©   (2010-10-23 01:25) [11]

ну, если для тебя один лишний байт неэффективно, то дельфи не для тебя...
он там будет, и не один, "лишний", причем сделаешь ты так или как-то по другому, или вообще не будешь ничего с этим делать, просто по самиму факту наличия строки. (а также динамических массивов/обьектов/rtti/vcl/модулей с их разделами инициализации/выравнивания/... везде есть свои "лишние" байты, и даже килобайты...)


 
sniknik ©   (2010-10-23 01:28) [12]

и кстати ты про какой байт? про первый или про "даже #0 в конце будет". если второе то это показатель как ты знаешь ассемблер.


 
Фокус_Ник   (2010-10-23 01:46) [13]

> PChar пробовал. Компилируется
Значит, должно работать. Конечно, если все сделано правильно.

> но потом глянул в OllyDebugger`е, по этому адресу находится не строка,
> а какая-то ерунда.
Значит, что-то сделано неправильно.

> Если вызывать api, не на ассемблере, то Делфи ругается не на строки,
> а на 0 или nil, да на 1.
Если ругается - значит, вызов неправильный.

================

Не могу понять - зачем Вам ассемблер, если даже такая элементарщина уже вызывает проблемы?

Ругается тут, ругается там... каждое такое "ругательство" как раз и говорят о причине ошибки, поэтому их надо читать, переводить, думать, въезжать и устранять. А не думать, что, мол, вызову из Ассемблера - и сразу все заработает. Потому что никакой Ассемблер неверный код верным не сделает.


 
Ллирик ©   (2010-10-23 01:51) [14]


> sniknik ©   (22.10.10 22:46) [7]
> не нужен.
> push offset   Keymouse[1];
> аналог PChar будет, и даже #0 в конце будет. дельфи магия
> работы со строками...


const
Keymouse: String = "Keymouse.sys";

push offset   Keymouse[1] не работает( Смещение получается совсем другим

> sniknik ©   (23.10.10 01:28) [12]
>
> и кстати ты про какой байт? про первый или про "даже #0
> в конце будет". если второе то это показатель как ты знаешь
> ассемблер.
>

про первый про первый) да и то шутя)


 
Фокус_Ник   (2010-10-23 01:54) [15]


> Ллирик ©   (23.10.10 01:51) [14]

Давайте конкретно - какую именно функцию Вы хотите вызвать?


 
Германн ©   (2010-10-23 02:18) [16]


> Давайте конкретно - какую именно функцию Вы хотите вызвать?

Присоединяюсь к вопросу. Любую процедуру/функцию WinAPI можно вызвать из программы на Дельфи без всяких ассемблеров.
Но вот ".sys" и "offset" меня смущают. Не пытается ли автор лезть в функции драйвера "по старинке"?


 
Anatoly Podgoretsky ©   (2010-10-23 07:18) [17]


> про первый про первый) да и то шутя)

Я уже спрашивал, но вопрос был проигнорировал - какой string?


 
Ллирик ©   (2010-10-23 18:54) [18]


> Фокус_Ник   (23.10.10 01:46) [13]
>
> > PChar пробовал. Компилируется
> Значит, должно работать. Конечно, если все сделано правильно.
>
>
> > но потом глянул в OllyDebugger`е, по этому адресу находится
> не строка,
> > а какая-то ерунда.
> Значит, что-то сделано неправильно.
>

Так подскажите, что именно неправильно

>
> > Если вызывать api, не на ассемблере, то Делфи ругается
> не на строки,
> > а на 0 или nil, да на 1.
> Если ругается - значит, вызов неправильный.
>
> ================
>
> Не могу понять - зачем Вам ассемблер, если даже такая элементарщина
> уже вызывает проблемы?
>
> Ругается тут, ругается там... каждое такое "ругательство"
> как раз и говорят о причине ошибки, поэтому их надо читать,
>  переводить, думать, въезжать и устранять. А не думать,
> что, мол, вызову из Ассемблера - и сразу все заработает.
>  Потому что никакой Ассемблер неверный код верным не сделает.

Извините, но 0 или nil я взял не с неба, а прочитал в цикле статей написаных, конечно, на ассемблере, но правильность значения от этого ни чуть не уменьшается! С 1 это, конечно, моя придумка, но моем случае API с этим значением работает как надо.


> Германн ©   (23.10.10 02:18) [16]
>
> Присоединяюсь к вопросу. Любую процедуру/функцию WinAPI
> можно вызвать из программы на Дельфи без всяких ассемблеров.
>
> Но вот ".sys" и "offset" меня смущают. Не пытается ли автор
> лезть в функции драйвера "по старинке"?


Да, я пишу программу управления для моего драйвера.


> Anatoly Podgoretsky ©   (23.10.10 07:18) [17]
>
> Я уже спрашивал, но вопрос был проигнорировал - какой string?
>
>

ShortString


 
Anatoly Podgoretsky ©   (2010-10-23 19:30) [19]

В приведеном коде никакой ShortString не обнаружен.


 
Ллирик ©   (2010-10-23 20:44) [20]


> sniknik ©   (22.10.10 22:46) [7]
>
> > Наверное, там нужен PChar?
> не нужен.
> push offset   Keymouse[1];
> аналог PChar будет, и даже #0 в конце будет. дельфи магия
> работы со строками...
>

Надо не так, а вот так:
const
 Keymouse: string = "Keymouse.sys";
.........
push [Keymouse]


 
Anatoly Podgoretsky ©   (2010-10-23 20:47) [21]

> Ллирик  (23.10.2010 20:44:20)  [20]

И где тут ShortString?


 
Ллирик ©   (2010-10-23 20:58) [22]

а  лучше так
const
 Keymouse: pansichar = "Keymouse.sys";
...........
push [Keymouse]


 
Anatoly Podgoretsky ©   (2010-10-23 21:12) [23]

> Ллирик  (23.10.2010 20:58:22)  [22]

Чем лучше?


 
Ллирик ©   (2010-10-23 21:17) [24]


> Anatoly Podgoretsky ©   (23.10.10 20:47) [21]
>
> > Ллирик  (23.10.2010 20:44:20)  [20]
>
> И где тут ShortString?

Тип String эквивалентен типу ShortString. Вам разве было об этом не известно?


 
Amoeba_   (2010-10-23 21:25) [25]


> Тип String эквивалентен типу ShortString. Вам разве было
> об этом не известно?

Ты что, с дуба рухнул?


 
Anatoly Podgoretsky ©   (2010-10-23 21:25) [26]

> Ллирик  (23.10.2010 21:17:24)  [24]

Мне это не известно, но я находил "странных" программистов, которые
принудительно это делали. Ты из них?


 
Ллирик ©   (2010-10-24 00:41) [27]

я цитирую учебник Никиты Кулькина "Основы программирования в Delphi 2007"


 
Юрий Зотов ©   (2010-10-24 00:49) [28]


> Ллирик ©   (24.10.10 00:41) [27]

А я, с Вашего разрешения, процитирую справку по Delphi 7:

The reserved word string functions like a generic type identifier. For example,
var S: string;
creates a variable S that holds a string. In the default {$H+} state, the compiler interprets string (when it appears without a bracketed number after it) as AnsiString. Use the {$H-} directive to turn string into ShortString.


Не думаю, что Delphi 2007 что-то изменилось.


 
Ллирик ©   (2010-10-24 01:11) [29]

а я английского не знаю)


 
Ллирик ©   (2010-10-24 01:15) [30]

по этому и скачал учебник на русском


 
Юрий Зотов ©   (2010-10-24 01:48) [31]

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


 
Похиш   (2010-10-24 03:07) [32]


> Тип String эквивалентен типу ShortString. Вам разве было
> об этом не известно?

И эти кадры пишут драйвера :-))) Моя гоготать...


 
Ллирик ©   (2010-10-24 03:24) [33]

да) пишу их на асме, и представьте себе они работают)


 
Германн ©   (2010-10-24 04:01) [34]


> пишу их на асме, и представьте себе они работают

Готов поверить, что они работают ибо заготовок для написания несложных драйверов полно.


 
Anatoly Podgoretsky ©   (2010-10-24 09:44) [35]


> я цитирую учебник Никиты Кулькина "Основы программирования
> в Delphi 2007"

Врешь ты все и Кулькина зря опускаешь.


 
Anatoly Podgoretsky ©   (2010-10-24 09:45) [36]

> Ллирик  (24.10.2010 03:24:33)  [33]

Врешь ты все.


 
Ллирик ©   (2010-10-24 16:45) [37]


> Германн ©   (24.10.10 04:01) [34]
>
>
> > пишу их на асме, и представьте себе они работают
>
> Готов поверить, что они работают ибо заготовок для написания
> несложных драйверов полно.
>

Если фильтр  клавиатуры, написанный с чистого листа, считается простеньким, то да, я пишу не сложные драйвера)


> Anatoly Podgoretsky ©   (24.10.10 09:44) [35]
>
> > я цитирую учебник Никиты Кулькина "Основы программирования
> > в Delphi 2007"
>
> Врешь ты все и Кулькина зря опускаешь.

Правда, вру) Не в "Основы программирования Delphi 2007", а в  "Основы программирования Delphi 7"


 
Игорь Шевченко ©   (2010-10-24 16:52) [38]


> Никиты Кулькина


эт кто ?


 
Юрий Зотов ©   (2010-10-24 16:56) [39]

Пишите драйвера, зачем Вам тратить время на Delphi? За драйвера, кстати, и платят больше. А уж если потребуется сделать визуальный интерфейс, то наймите программиста Delphi - часть денег отдадите ему, да и Вам еще останется. И скорость разработки, кстати, будет выше.


 
Ллирик ©   (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

А вот - хрень.


 
Leonid Troyanovsky ©   (2010-12-03 22:37) [81]


> Игорь Шевченко ©   (03.12.10 22:28) [80]

Как тебя не ломает это все анализировать :)

--
Regards, LVT.


 
Игорь Шевченко ©   (2010-12-03 22:50) [82]


> Как тебя не ломает это все анализировать :)


а что там анализировать - если драйверы для винды предлагают писать на ассемблере, то это мало того, что хрень, так еще и кулибинство с отягчающими. В любом DDK примеров драйверов приведено немеряно, так ни одного на ассемблере (ну кроме DDK для Win9х, но человек, который в здравом уме пишет сейчас драйверы для Win9x - это что-то невообразимое).


 
Leonid Troyanovsky ©   (2010-12-03 23:11) [83]


> Игорь Шевченко ©   (03.12.10 22:50) [82]

> приведено немеряно, так ни одного на ассемблере (ну кроме
> DDK для Win9х, но человек, который в здравом уме пишет сейчас
> драйверы для Win9x - это что-то невообразимое).

Вообразить-то легко :)
А пишут, дейс-но, всякую дрянь (конечно, я не про Alex Fedotov).

--
Regards, LVT.


 
Ллирик ©   (2010-12-03 23:36) [84]


> sniknik ©   (03.12.10 22:03) [76]
>
> ну что ж давай почитаем...
> по статье прототип описан -
> StartService proto hService:HANDLE, dwNumServiceArgs:DWORD,
>  lpServiceArgVectors:LPSTR
>
> т.е. параметр
> lpServiceArgVectors
> - указатель на массив указателей на завершающиеся нулём
> строки, которые будут переданы службе как аргументы. Драйверы
> не получают этих аргументов, поэтому мы устанавливаем этот
> параметр в NULL.
>

Так я пробовал и nil в третьем параметре, Дельфи всё равно ругается.

Сергей М. ©   (03.12.10 22:27) [79]

Если ты тычешь "ноль" компилятору, в то время кака он вполне справедливо ожидает значенеи совсем иного типа, то это называется "Я д"Артаньян, а все кто не я - п******ы" ?)


 
sniknik ©   (2010-12-03 23:48) [85]

> Дельфи всё равно ругается.
больно слышать.


 
Ллирик ©   (2010-12-04 00:00) [86]


> Сергей М. ©   (03.12.10 22:27) [79]
>
> Если ты тычешь "ноль" компилятору, в то время кака он вполне
> справедливо ожидает значенеи совсем иного типа, то это называется
> "Я д"Артаньян, а все кто не я - п******ы" ?)
>

А где написано, что этого категорически нельзя делать?) Я считаю, раз это работает, то так делать можно)


> Игорь Шевченко ©   (03.12.10 22:50) [82]
>
> а что там анализировать - если драйверы для винды предлагают
> писать на ассемблере, то это мало того, что хрень, так еще
> и кулибинство с отягчающими. В любом DDK примеров драйверов
> приведено немеряно, так ни одного на ассемблере (ну кроме
> DDK для Win9х, но человек, который в здравом уме пишет сейчас
> драйверы для Win9x - это что-то невообразимое).
>

Так DDK написан на языке С, а С я  знать не знаю. А что касается Win9x, то я сейчас и работаю в ОС этой линейки, собранной собственными руками! и в будущем планирую её радикально улучшить!


 
Игорь Шевченко ©   (2010-12-04 00:26) [87]


> Так DDK написан на языке С, а С я  знать не знаю


Проблемы индейцев шерифа не волнуют.

DDK, кстати, ни на чем не написан - DDK это набор инструментов, справки и примеров. Его писать не надо. Учите терминологию.


> А что касается Win9x, то я сейчас и работаю в ОС этой линейки,
>  собранной собственными руками!


Во свистишь-то! Винду MS собирает, если ты не в курсе.


 
Ллирик ©   (2010-12-04 01:06) [88]


> Игорь Шевченко ©   (04.12.10 00:26) [87]
>
> Проблемы индейцев шерифа не волнуют.
>
> DDK, кстати, ни на чем не написан - DDK это набор инструментов,
>  справки и примеров. Его писать не надо. Учите терминологию.
>
Так там всё на английском, а я английского  не знаю)
>
> Во свистишь-то! Винду MS собирает, если ты не в курсе.

Я собрал Винду 7 лет назад из Windows 98SE и Windows Me, со временем я заменил часть от Windows 98SE на часть от Windows 98IF, потом еще поставил KernelEx 4.0 и до сих пор в ней работаю, все отлично идет и сейчас в ней сижу


 
mike   (2010-12-04 01:58) [89]


> Я собрал Винду 7 лет назад из Windows 98SE и Windows Me,
>  со временем я заменил часть от Windows 98SE на часть от
> Windows 98IF, потом еще поставил KernelEx 4.0 и до сих пор
> в ней работаю, все отлично идет и сейчас в ней сижу

Не оскудела земля русская на народных умельцев, которые делают автомобили из деталей собранных на свалке. И ведь ездят эти автомобили! (Иногда, но ездят. Мотоцикл слесаря Полесова в счет не идет).

Хреново правда ездят, да и чинить постоянно приходится. Но это не проблема. Ведь есть руки (кривые, но рабочие), есть голова (наполненная супер-пупер прожектами. Тоже кривыми, зато гордыми! Типа "Я переплюну Микрософт с его миллионным штатом и миллиардными вложениями в разработку!").
Правда постоянно авторы пеняют на то, что "нет плашек три восьмых дюйма" обвиняя в этом всех кого могут. :)


 
Германн ©   (2010-12-04 02:29) [90]

P.S.
В добавок.
Восхищаюсь авторами "12 стульев". Их весьма тонкий юмор насчет плашек вряд ли кто понимает. Но он таки есть!
:)


 
Anatoly Podgoretsky ©   (2010-12-04 08:54) [91]

> mike  (04.12.2010 01:58:29)  [89]

Еще хуже, когда этот автомобиль не собирают, а покупают, а потом с воплями
бегут на форумы.
Зверь, Экстрим, Интим


 
Игорь Шевченко ©   (2010-12-04 11:00) [92]


> Я собрал Винду 7 лет назад из Windows 98SE и Windows Me,
>  со временем я заменил часть от Windows 98SE на часть от
> Windows 98IF, потом еще поставил KernelEx 4.0 и до сих пор
> в ней работаю, все отлично идет и сейчас в ней сижу


"Однажды, после одного такого
запоя, он вывел во двор, как барана за рога, мотоцикл,  составленный  из
кусочков автомобилей, огнетушителей, велосипедов и пишущих машинок.  Мотор в 1 1/2 силы был вандереровский, колеса  давидсоновские,  а  другие
существенные части уже давно потеряли фирму. С седла свисал на шпагатике
картонный плакат "Проба". Собралась толпа. Не глядя ни на  кого,  Виктор
Михайлович закрутил рукой педаль. Искры не было минут десять. Затем раз-
далось железное чавканье, прибор задрожал и окутался грязным дымом. Вик-
тор Михайлович кинулся в седло, и мотоцикл,  забрав  безумную  скорость,
вынес его через туннель на середину мостовой и сразу остановился, словно
срезанный пулей. Виктор Михайлович собрался было уже слезть и  обревизо-
вать свою загадочную машинку, но она дала вдруг задний  ход  и,  пронеся
своего создателя через тот же туннель, остановилась на месте отправления
- посреди двора, ворчливо ахнула и взорвалась. Виктор Михайлович  уцелел
чудом и из обломков мотоцикла в следующий запойный период устроил стаци
онарный двигатель, который был очень похож на настоящий двигатель, но не
работал.
"

(с)


 
Inovet ©   (2010-12-04 11:10) [93]

> [92] Игорь Шевченко ©   (04.12.10 11:00)
> Однажды, после одного такого запоя, он вывел во двор, как барана за рога, мотоцикл

А, сразу не понял, - это материализация являвшихся во время запоя.


 
Ega23 ©   (2010-12-04 12:47) [94]


> Я собрал Винду 7 лет назад из Windows 98SE и Windows Me,
>  со временем я заменил часть от Windows 98SE на часть от
> Windows 98IF, потом еще поставил KernelEx 4.0 и до сих пор
> в ней работаю, все отлично идет и сейчас в ней сижу


Не скудна земля русская идиотами...


 
Ллирик ©   (2010-12-04 15:28) [95]

Благодарю, господа, за хорошие отклики, другого я  не ожидал!)) А Вы и этого не можете сделать !)) только один пустозвон от вас и ничего дельного))


 
sniknik ©   (2010-12-04 16:04) [96]

> А Вы и этого не можете сделать !))
когда взрослые не дают тебе конфетку, это вовсе не значит что у них ее нет или они не могут себе ее позволить, чаще всего они просто считают, что детям вредно сладкое. а уж если взамен предлагают какой нибудь фрукт...

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


 
Ллирик ©   (2010-12-04 17:24) [97]

Господа, я задал вопрос - мне ответили, но то решение было неверным, нашел решение сам, оно меня устраивает. выложил / может кому-нибудь еще пригодиться / в ответ подняли шум, для чего? Хотите помочь -  помогайте , нет - тогда не надо накидываться сгоряча на того кто хоть что-то предложил, ведь оно имеет место существовать вопреки вашему желанию Желаю всем всего доброго и удачи в делах!



Страницы: 1 2 3 вся ветка

Текущий архив: 2011.02.27;
Скачать: CL | DM;

Наверх




Память: 0.77 MB
Время: 0.011 c
15-1290029388
Юрий
2010-11-18 00:29
2011.02.27
С днем рождения ! 18 ноября 2010 четверг


2-1291110259
vegarulez
2010-11-30 12:44
2011.02.27
обновление exe файла


15-1289748125
Sergeant88
2010-11-14 18:22
2011.02.27
Помогите найти компонент


2-1287694639
Ллирик
2010-10-22 00:57
2011.02.27
Offset на строковую константу


8-1210567473
namco
2008-05-12 08:44
2011.02.27
видео кодеки