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. 1でのすべて:(可能性はありません自動文字列表現)
[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'を忘れてしまいました。私は現在その2番目のオプションを使用していますが、悲しいことに私のアプリケーションには次のようなものが必要です。_ "アクセスマスクを与えて、使用している権利コンポーネントを教えてくれます。" _ – ordag
コンテキストでコードを見ることなく、 ;しかし、矛盾する定義を持つビットがない限り、私はすべての定義の和集合で作業します。もちろん、これはまた、あなたが(* "アクセスマスクを与えて、コンポーネントを教えてくれます - あなたのオブジェクトのタイプには有効です")、検証する必要がある場合に変更されます。 –
喜んで妥当性検査はありません。私は異なる種類のハンドル(型を知っています)_とそのACCESS_MASKを取得し、それらがどのように開かれているかを述べなければなりません。問題は、例えば、 'PROCESS_TERMINATE'は' FILE_READ_DATA'_と同じ値を持っています(さらに、キー、スレッド、イベント、トークンなど多くの型があります...)_ – ordag