C#: EventRecord свойство Keywords

В описании этого свойства в статье с MSDN указано, что оно возвращает значение типа long, при этом может принимать значение NULL. В качестве замечания указывается, что каждое ключевое слово — это бит в 64-битной маске.

Когда я пытался получить значение из этого свойства, получалась какая-то чушь. А все из-за того, что я не учитывал еще одну особенность этого свойства — только 16 позиций этой маски нужно было обрабатывать, поэтому окончательный код выглядел так:

dr["keywords"] = String.Format("{0:G}",
 (StandardEventKeywords)(eventdetail.Keywords.GetValueOrDefault() & 0xFFFF0000000000));

Здесь это делалось с помощью добавления к результату 0xFFFF0000000000, а значения брались из перечисления enum [FlagsAttribute] StandardEventKeywords. Причем, по скольку это перечисление было FlagsAttribute, то в результирующую строку могло передаваться сразу несколько результатов через запятую (хотя в EventViewer я такого не видел).