ofer
ofer

Reputation: 4476

Creating Win32 events from c#

I'd like create a kernel(aka named events) from C#.

Do I have to interop services and wrap the native CreateEvent function or is there already a .NET class that does the job?

The function that I need to run should be something like this: hEvent = CreateEvent ( NULL , false , false , "MyCSHARPEvent" );

This should notify all procs that probing forMyCSHARPEvent about the event.

If there is a need to wrap the function, how would I translate the SECURITY_ATTRIBUTES struct from C# to win32?

Upvotes: 14

Views: 16672

Answers (2)

scottm
scottm

Reputation: 28701

If you still want to use interop, you can define the function like this:

[DllImport("kernel32.dll")]
static extern IntPtr CreateEvent(IntPtr lpEventAttributes, bool bManualReset, bool bInitialState, string lpName);

and the struct like this(you may have to mess with the Pack attribute to make it fit):

[StructLayout(LayoutKind.Sequential)]
struct SECURITY_ATTRIBUTES{
  public int length;
  public IntPtr securityDesc;
  public bool inherit;
}

Also, here's a code example of putting it all together.

Upvotes: 7

Stu Mackellar
Stu Mackellar

Reputation: 11638

Take a look at the EventWaitHandle class. It's supported from .Net 2.0 onwards and allows creation of named events. It also supports setting event security, depending on which constructor you use.

Upvotes: 22

Related Questions