Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Offset на строковую константу [D7, ME]


Страницы:   1 2 3 4 5

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

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


sniknik   (2010-12-03 22:05:00) [21]

> т.е. не практически не отличается от того, что тебе тут говорили, как правильно...
->  
т.е. практически, не отличается от того, что тебе тут говорили, как правильно...


sniknik   (2010-12-03 22:03:00) [22]

ну что ж давай почитаем...
по статье прототип описан -
StartService proto hService:HANDLE, dwNumServiceArgs:DWORD, lpServiceArgVectors:LPSTR

т.е. параметр
lpServiceArgVectors
- указатель на массив указателей на завершающиеся нулём строки, которые будут переданы службе как аргументы. Драйверы не получают этих аргументов, поэтому мы устанавливаем этот параметр в NULL.

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

p.s. закономерный вопрос, а ты читать то умеешь? так чтобы со смыслом, а не "по верхушкам/скорочтением".

> начитавшись всякой хрени
статьи не такая уж и хрень... хрень его интерпретация.


Игорь Шевченко   (2010-12-03 21:57:00) [23]


> ссылка, ведёт на статью из цикла  статей о написании драйверов
> на ассемблере


Обзац. Не перевелись на земле российской потомки Ивана Кулибина, все б им гланды через задницу удалять, так мало того, что через задницу, так еще через чужую задницу.

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


Ллирик   (2010-12-03 21:16:00) [24]


> Сергей М. ©   (03.12.10 20:57) [73]
>
>
> А что, взглянуть в  WinSvc религия не позволяет ?

Это Вам почитать на http://www.wasm.ru/article.php?article=drvw2k02 религия не позволяет))


Сергей М.   (2010-12-03 20:57:00) [25]


> Ллирик ©   (03.12.10 20:55) [72]


А что, взглянуть в  WinSvc религия не позволяет ?


Ллирик   (2010-12-03 20:55:00) [26]

Сергей М По Вашему какое значение должно быть в третьем параметре?


Сергей М.   (2010-12-03 20:44:00) [27]


> Ллирик ©   (03.12.10 19:46) [64]



> Прежде чем обзываться


Детский сад - штаны на лямках)
Кто тебя "обзывает", любезный ?)


> Если API функция  может работать с нестандартным значением
> параметра, то почему бы и нет?


Какими такими "нестандартными" ? Что за ахинею ты порешь ?)

Тебя компилятор за "ноль" в треьем параметре послал ? Послал. И правильно сделал.
Ты разобрался почему ? Нет, не разобрался.
Так какого же хрена тыт тут, спрашивается, рожу обидную корчишь ?))


Ллирик   (2010-12-03 20:26:00) [28]

аааа....... я С вообще не знаю. ссылка, ведёт на статью из цикла  статей о написании драйверов на ассемблере.


sniknik   (2010-12-03 20:10:00) [29]

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


Ллирик   (2010-12-03 20:03:00) [30]

sniknik, Вы драйвера пишите?


sniknik   (2010-12-03 19:56:00) [31]

> много нового узнаете)
ой сомневаюсь...


sniknik   (2010-12-03 19:54:00) [32]

> И кстати, почему я должен тупо следовать указаниям справок? Если API функция  может работать с нестандартным значением параметра, то почему бы и нет?)
ну хотя бы ради совместимости программы с разными версиями виндовс...
понимаю тебя это не волнует, ведь прямо здесь и сейчас "работает же", но ты сам спросил.


Ллирик   (2010-12-03 19:52:00) [33]

sniknikи Вы тоже почитайте http://www.wasm.ru/article.php?article=drvw2k02много нового узнаете)


Ллирик   (2010-12-03 19:46:00) [34]


> Сергей М. ©   (03.12.10 19:12) [62]
>
>
> Зачем же ты, "кулхацкер", тычешь "нуль" третьим параметром
> ?)
> Я вот не тычу туда "ноль" , а подставляю туда то что требуется
> прототипом. И никто меня никуда не посылает)
>
> Так что если тебя "послали", значит ССЗБ)
>

Прежде чем обзываться, почитайте http://www.wasm.ru/article.php?article=drvw2k02
И кстати, почему я должен тупо следовать указаниям справок? Если API функция  может работать с нестандартным значением параметра, то почему бы и нет?)


sniknik   (2010-12-03 19:46:00) [35]

> А зачем мудрить?)
"мудришь" ты, а переменная там положена по определению.

> Мне проще написать это на асме без всяких там ЛИШНИХ переменных)
проще? тебе? не смешите мои тапочки, после показанного убожества...

насчет "лишних" переменных...
не понимаешь, что "экономия на спичках" к хорошему не приводит, и ожидаемого результата не дает... вот добавь в своей программе 5-50 лишних указателей, переменных, вместо одной, и проверь как изменился размер программы после, думаешь на 50*SizeOf(PChar) больше стал? чего ь=ты там экономишь?
асемблерщик блин, доморощенный, на статьях других кулхацкеров, а не каких то там справках,  взрощенный...


Сергей М.   (2010-12-03 19:12:00) [36]


> Ллирик ©   (03.12.10 00:19) [49]
>
> А Вы попробуйте скомпилировать StartService с нулём во втором
> и в третьем параметре! Да Делфи Вас пошлёт куда по дальше!
>


Зачем же ты, "кулхацкер", тычешь "нуль" третьим параметром ?)
Я вот не тычу туда "ноль" , а подставляю туда то что требуется прототипом. И никто меня никуда не посылает)

Так что если тебя "послали", значит ССЗБ)


Ллирик   (2010-12-03 18:29:00) [37]


> sniknik ©   (03.12.10 00:59) [52]
>
> > во втором и в третьем параметре!
> во втором легко... в третьем тоже без проблем, делов свой
> описатель для функции "нарисовать".
> но зачем? почему нужно коверкать стандартное, и передавать
> не пойми что, в функцию ожидающую другое. мы ж в отличие
> от тебя справку читаем. и понимаем, что делаем (в основном
> ;).
>

Я тоже читаю, но никакие-то там справки, а статьи с реальными примерами на ассемблере и там во втором и третьем параметре стоят 0 и StartService прекрасно с этими параметрами работает.

> Slym ©   (03.12.10 11:57) [59]
>
> Есть магическая переменная Dummy...


А зачем мудрить?) Мне проще написать это на асме без всяких там ЛИШНИХпеременных)


Slym   (2010-12-03 11:58:00) [38]

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);


Slym   (2010-12-03 11:57:00) [39]

Есть магическая переменная 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.


Игорь Шевченко   (2010-12-03 10:20:00) [40]


> А Вы попробуйте скомпилировать StartService с нулём во втором
> и в третьем параметре! Да Делфи Вас пошлёт куда по дальше!
>


Можно скомпилировать


Страницы:   1 2 3 4 5

Наверх

Титульная страница Поиск, карта сайта Написать письмо