Создание событий Win32 из С#

Я хотел бы создать ядро ​​(aka named events) из С#.

Нужно ли мне взаимодействовать с сервисами и обернуть собственную функцию CreateEvent или уже существует класс .NET, который выполняет эту работу?

Функция, которую мне нужно запустить, должна выглядеть примерно так: hEvent = CreateEvent (NULL, false, false, "MyCSHARPEvent" );

Это должно уведомить все procs о том, что зондирование для MyCSHARPEvent о событии.

Если необходимо обернуть функцию, как бы я перевел структуру SECURITY_ATTRIBUTES с С# на win32?

Ответ 1

Взгляните на класс EventWaitHandle. Он поддерживается с .Net 2.0 и позволяет создавать именованные события. Он также поддерживает настройку безопасности событий в зависимости от того, какой конструктор вы используете.

Ответ 2

Если вы все еще хотите использовать interop, вы можете определить функцию следующим образом:

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

и структура, подобная этой (вам, возможно, придется испортить атрибут Pack, чтобы она соответствовала):

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

Кроме того, здесь пример кода, чтобы собрать все это вместе.