テスト目的のためだけに DLL インジェクションを使用するプロジェクトを行っています。すべてうまくいったら、このテクニックを使うかもしれません。しかし、これまでのところ、DLL プロジェクトをコーディングするのは初めてだったためか、問題しかありませんでした。簡単に理解できるように、中断された explorer.exe プロセスを作成し、中断されたエクスプローラー内にこの DLL を挿入します。すべてが機能していましたが、DLL 内にタイマーを配置しようとすると、問題が発生しました。DLL コードを見てください。
uses
SysUtils,
Classes,
Windows,
ExtCtrls,
Dialogs;
{$R *.res}
type
TMyTimer = Class(TTimer)
public
procedure OnMyTimer(Sender: TObject);
end;
var
MyTimer: TMyTimer;
procedure EntryPoint(Reason: integer);
begin
if Reason = DLL_PROCESS_ATTACH then
begin
MessageBox(0, 'DLL Injected', 'DLL Injected', 0);
MyTimer := TMyTimer.Create(nil);
MyTimer.Interval := 5000;
MyTimer.OnTimer := MyTimer.OnMyTimer;
MyTimer.Enabled:= true;
end
else
if Reason = DLL_PROCESS_DETACH then
begin
MessageBox(0, 'DLL De-Injected', 'DLL De-Injected', 0);
end;
end;
procedure TMyTimer.OnMyTimer(Sender: TObject);
begin
MessageBox(0, 'Timer Running', 'Timer Running', 0);
end;
begin
DLLProc:= @EntryPoint;
EntryPoint(DLL_PROCESS_ATTACH);
end.
さて、中断された explorer.exe プロセスに DLL を挿入すると、「DLL Injected」というメッセージが表示されます...この後、タイマーが作成され、5 秒ごとに「Timer Running」というメッセージが表示されます。 ..しかし、このメッセージが表示されず、すべてを試しましたが、何も機能しません... それは完全に混乱ですか、それとも何ですか?