Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2011.02.27;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.74 MB
Время: 0.005 c
2-1291813130
Scott Storch
2010-12-08 15:58
2011.02.27
сравнение имен файлов по маске


15-1290093673
картман
2010-11-18 18:21
2011.02.27
ТЗ


10-1170751259
Juice
2007-02-06 11:40
2011.02.27
Как заставить нормально работать Early Binding?


2-1290929948
SIV5000
2010-11-28 10:39
2011.02.27
IShellFolder и диалог свойства файлов


2-1291389620
Василий Иванович
2010-12-03 18:20
2011.02.27
Поиск ключа в реестре.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский