Я хотел бы создать перечисление для ACCESS_MASK
, которое я должен использовать с P / Invoke , но я не знаю, каков будет лучший способ для такогореализация.
1.Если бы это было возможно:
[Flags]
enum ACCESS_MASK : uint
{
STANDARD_RIGHTS_REQUIRED = 0x000F0000,
SYNCHRONIZE = 0x00100000,
// Everything reused in the specific rights ...
}
[Flags]
enum PROCESS_ACCESS_MASK : ACCESS_MASK
{
// ...
PROCESS_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFFF,
}
2.Все в одном: (автоматическое представление строки невозможно)
[Flags]
enum ACCESS_MASK : uint
{
STANDARD_RIGHTS_REQUIRED = 0x000F0000,
SYNCHRONIZE = 0x00100000,
// ...
PROCESS_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFFF,
}
3.Разделить и переписать: (Muuuuch дублированный код)
[Flags]
enum PROCESS_ACCESS_MASK : uint
{
STANDARD_RIGHTS_REQUIRED = 0x000F0000,
SYNCHRONIZE = 0x00100000,
// ...
PROCESS_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFFF,
}
4.Разделить и взять из базовых: (Конкретное перечисление ничего не знает о самих базовых значениях)
[Flags]
enum ACCESS_MASK : uint
{
STANDARD_RIGHTS_REQUIRED = 0x000F0000,
SYNCHRONIZE = 0x00100000,
// Everything reused in the specific rights ...
}
[Flags]
enum PROCESS_ACCESS_MASK : uint
{
// ...
PROCESS_ALL_ACCESS = ACCESS_MASK.STANDARD_RIGHTS_REQUIRED | ACCESS_MASK.SYNCHRONIZE | 0xFFFF,
}
Какой вариант вы предпочитаете или естьЕсть ли лучшие способы для реализации ACCESS_MASK
?
Кстати: что такое доступ к файлу 0x100001?
Редактировать: я знаю, что нет перечислениянаследование и ACCESS_MASK : uint
ничего подобного, но воображаемое PROCESS_ACCESS_MASK : ACCESS_MASK
будет.