Ответ 1
Взгляните на класс EventWaitHandle. Он поддерживается с .Net 2.0 и позволяет создавать именованные события. Он также поддерживает настройку безопасности событий в зависимости от того, какой конструктор вы используете.
Я хотел бы создать ядро (aka named events) из С#.
Нужно ли мне взаимодействовать с сервисами и обернуть собственную функцию CreateEvent или уже существует класс .NET, который выполняет эту работу?
Функция, которую мне нужно запустить, должна выглядеть примерно так: hEvent = CreateEvent (NULL, false, false, "MyCSHARPEvent" );
Это должно уведомить все procs о том, что зондирование для MyCSHARPEvent о событии.
Если необходимо обернуть функцию, как бы я перевел структуру SECURITY_ATTRIBUTES с С# на win32?
Взгляните на класс EventWaitHandle. Он поддерживается с .Net 2.0 и позволяет создавать именованные события. Он также поддерживает настройку безопасности событий в зависимости от того, какой конструктор вы используете.
Если вы все еще хотите использовать 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;
}
Кроме того, здесь пример кода, чтобы собрать все это вместе.