Вверх ↑
Этот топик читают: Гость
Ответов: 1341
Рейтинг: 31
#1: 2018-12-01 12:11:15 ЛС | профиль | цитата
Как можно сделать и можно ли вообще, изменять название функции IOCTL_CARDPORT и данные $b8999, $d9284 уже в работающей программе?
Сделав что то на подобие CallDllEx, но для драйверов


unit HiAsmUnit;

interface

uses Windows,kol,Share,Debug,tlhelp32;

type
THiAsmClass = class(TDebug)

private

public
procedure doInit(var _Data:TData; Index:word);
end;


implementation


function CTL_CODE(DeviceType,Func, Method, Access:DWORD):DWORD;
begin
CTL_CODE:=(DeviceType shl 16) or (Access shl 14) or (Func shl 2) or Method;
end;

function IOCTL_CARDPORT():DWORD;
begin
Result:=CTL_CODE($b8999, $d9284, 0, 1 or 2);
end;



procedure THiAsmClass.doInit;

begin
//
end;

end.
карма: 2

0
vip
#1.1контекстная реклама от партнеров
Ответов: 5227
Рейтинг: 585
#2: 2018-12-01 14:30:50 ЛС | профиль | цитата
Rysik, больше похоже на вызов функций/процедур с разными аргументами по фиксированному адресу. В теории более чем возможно. Может даже найдёшь реализацию, но сомневаюсь что на этом форуме.
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Ответов: 1341
Рейтинг: 31
#3: 2018-12-01 14:36:36 ЛС | профиль | цитата
Пытаюсь собрать все функции из отдельных Inline, в один компонент, и даже если переношу прям 1 в 1 функцию, процедуры прочее из inline в компонент, компилируется, но не работает, для кода требуется ProcID и DriverHandle.

DriverHandle получаю через Inline, при загрузке драйвера в систему, так вот, может оно как то не передаётся в компонент?, не понимаю..
карма: 2

0
Ответов: 2059
Рейтинг: 131
#4: 2018-12-03 19:35:12 ЛС | профиль | цитата
Rysik, копай в эту сторону:
interface

uses kol, Share, Debug;
type
TCallbackProcess = packed record
POPEDX: Byte;
MOVEAX: Byte;
SelfPtr: Pointer;
PUSHEAX: Byte;
PUSHEDX: Byte;
JMP: Byte;
JmpOffset: Integer;
end;
type
....
Callback: TCallbackProcess;
private
......
public
.....
constructor Create;
destructor Destroy; override;
end;

implementation

constructor THiAsmClass.Create;
begin
inherited Create;
Callback.POPEDX := $5A;
Callback.MOVEAX := $B8;
Callback.SelfPtr :=Self;
Callback.PUSHEAX := $50;
Callback.PUSHEDX := $52;
Callback.JMP := $E9;
Callback.JmpOffset := Integer(@TTHiAsmClass.doInit) - Integer(@Callback.JMP) - 5;
end;
destructor THiAsmClass.Destroy;
begin
inherited
end;

procedure THiAsmClass.doInit; stdcall;

begin
//
end;

end.
http://delphimaster.net/view/15-1391169590/all
http://programmerz.ru/questions/155014/how-to-pass-a-method-as-callback-to-a-windows-api-call-follow-up-question.html
P.S.
и даже если переношу прям 1 в 1 функцию

Это зря.
Поэтому и
не работает, для кода требуется ProcID и DriverHandle.

Обрати внимание на:
unit himy;
....
type
THImy = class(TDebug)
....
implementation

procedure THImy._work_doXXX;
.....

Редактировалось 5 раз(а), последний 2018-12-03 22:57:53
карма: 6

0
4
Сообщение
...
Прикрепленные файлы
(файлы не залиты)