我创建了一个内核模式驱动程序并在其中执行某些操作。
我有一个用Delphi编写的名为MyApp
的用户模式应用程序,用于与驱动程序和MyApp
进行通信。
我必须在Event sharing
和Driver
之间使用MyApp
方法。
我正在使用线程来完成这项工作。在我的线程的构造函数中,我使用CreateEvent
创建了一个用户模式事件:
...
var xxx:THandle;
....
xxx:=CreateEvent(nil, False, False, nil);
并将其传递给我的驱动程序并验证。
但是当创建这个事件时,它的句柄无效,当我尝试使用时,即使没有任何错误或异常也没有发生:
procedure TMyThread.Execute;
begin
while Active do
begin
if WaitForSingleObject(xxx, INFINITE) <> WAIT_FAILED then
begin
Synchronize(DoSomething)
end
else
begin
RaiseLastOSError;
Break;
end;
Sleep(1);
end;
end;
驱动程序创建一个事件,并通过此用户模式事件句柄(xxx)的句柄将其传递给MyApp
。
但是当我在主线程中创建此事件时: 例如:
procedure TfrmMain.FormCreate(Sender: TObject);
Var
xxx::THandle;
begin
xxx:=CreateEvent(nil, False, False, nil);
end;
事件句柄(xxx
)是一个有效的句柄!!!
修改
当我使用Delphi 7时,xxx句柄有效!仅在XE +中它无效。 编辑我的代码!
请注意,我必须使用线程,我必须在MyThread
中创建事件。
有什么想法吗?
(对不起,如果我的英语不好)