Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.008 c
2-1291286404
Анна
2010-12-02 13:40
2011.02.27
печать данных в Excel


2-1291813130
Scott Storch
2010-12-08 15:58
2011.02.27
сравнение имен файлов по маске


11-1231103049
haword
2009-01-05 00:04
2011.02.27
Lazarus + MCK KOL + WinCE


15-1289831257
R_e_T_r_O
2010-11-15 17:27
2011.02.27
Записать из делфи в эксель


2-1291739016
Ux
2010-12-07 19:23
2011.02.27
Ошибка 11004





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский