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

Multithreading CreateEvent在线程中使用时失败(Delphi XE+;),multithreading,delphi,events,kernel,driver,Multithreading,Delphi,Events,Kernel,Driver,我创建了一个内核模式驱动程序,并在其中做了一些事情。 我有一个用Delphi编写的用户模式应用程序,名为MyApp,用于与驱动程序和MyApp进行通信 我必须在Driver和MyApp之间使用Event sharing方法 我用一根线来做这项工作。在线程的构造函数中,我使用CreateEvent创建了一个用户模式事件: ... var xxx:THandle; .... xxx:=CreateEvent(nil, False, False, nil); 并将其传递给我的驱动程序并进行验证 但

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

我必须在
Driver
MyApp
之间使用
Event sharing
方法

我用一根线来做这项工作。在线程的构造函数中,我使用
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
)是有效的句柄

编辑:

当我使用Delphi7时,xxx句柄是有效的!仅在XE+中无效。 编辑我的代码

请注意,我必须使用线程,并且必须在
MyThread
中创建事件。 有什么想法吗


(如果我的英语不好,请原谅)

句柄无效
-如何确定句柄的有效性?我在内核模式下验证句柄@JensG在内核中使用
ObReferenceObjectByHandle
可以确定从use land传递的句柄是否有效。我想问题最终在于驱动程序和用户应用程序运行的上下文。我建议您切换到可以在进程之间共享的命名事件。查看@KenWhite谢谢,我编辑了我的代码;)
procedure TfrmMain.FormCreate(Sender: TObject);
Var
 xxx::THandle;
begin
  xxx:=CreateEvent(nil, False, False, nil);
end;