在线程中使用CreateEvent失败(Delphi XE +)

时间:2014-01-07 19:18:21

标签: multithreading delphi events kernel driver

我创建了一个内核模式驱动程序并在其中执行某些操作。 我有一个用Delphi编写的名为MyApp用户模式应用程序,用于与驱动程序和MyApp进行通信。

我必须在Event sharingDriver之间使用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中创建事件。 有什么想法吗?

(对不起,如果我的英语不好)

0 个答案:

没有答案