我想创建一个枚举ACCESS_MASK
我必须使用P/Invoke,但我不知道这样的实现的最佳方式是什么。.NET枚举继承替代
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分割,并从基本需要:(具体枚举不知道的基本价值观本身的任何东西)
你更喜欢哪一个选项,还是有对于ACCESS_MASK
实施有什么更好的方法?
btw:什么是0x100001文件访问?
编辑:我知道有没有枚举继承和ACCESS_MASK : uint
什么样子,但虚PROCESS_ACCESS_MASK : ACCESS_MASK
会。
呃,当然忘记了'FlagsAttribute'。我目前正在使用第二个选项,但是我的应用程序需要的东西如下所示:_“给我访问掩码,我会告诉你你正在使用哪些权利组件。”_ – ordag
很难说,没有看到上下文中的代码;但只要没有冲突定义的位,我就只是在所有定义的联合上工作。当然,如果你还需要验证(*“给我访问掩码,我会告诉你这些组件并且它对你的类型对象有效”),这会发生变化。 –
很高兴没有验证。我得到了不同类型的手柄_(我知道类型)_和他们的'ACCESS_MASK',然后必须说明它们是如何打开的。问题是,例如,'PROCESS_TERMINATE'与'FILE_READ_DATA'具有相同的值_(并且类型更多:键,线程,事件,令牌......)_ – ordag