SafeHandleとは? わかりやすく解説

SafeHandle クラス

メモ : このクラスは、.NET Framework version 2.0新しく追加されたものです。

オペレーティング システム ハンドルラッパー クラス表します

名前空間: System.Runtime.InteropServices
アセンブリ: mscorlib (mscorlib.dll 内)
構文構文

Public MustInherit Class
 SafeHandle
    Inherits CriticalFinalizerObject
    Implements IDisposable
public abstract class SafeHandle : CriticalFinalizerObject,
 IDisposable
public ref class SafeHandle abstract : public
 CriticalFinalizerObject, IDisposable
public abstract class SafeHandle extends CriticalFinalizerObject
 implements IDisposable
public abstract class SafeHandle extends
 CriticalFinalizerObject implements IDisposable
解説解説

SafeHandle クラス使用すると、ハンドルリサイクルによるセキュリティ攻撃から保護できますまた、このクラスハンドル リソース重大な終了処理も行います。このクラス使用すると、派生クラスインスタンスラップされたアンマネージ リソース識別するハンドル (オペレーティング システム ハンドルなど) をアンマネージ コードに渡すことができます。このクラスによって、ハンドルリサイクルによるセキュリティ攻撃から保護できますハンドルリサイクル一例として、ハンドル信頼関係のないユーザーが、あるスレッドハンドル閉じ別のスレッドリソース対す操作キュー配置しようとする場合挙げられます。この信頼関係のないユーザーは、プロセス内の無関係なスレッドによってハンドルがすぐに再利用されることを期待してこれを実行しますまた、インプロセス操作によって、呼び出し元が通常アクセスできないデータ返されたり、変更されりしますSafeHandle は、重大な終了処理も行いますホストによって AppDomainアンロードされた場合や、通常のファイナライザブロックしたり、クリーンアップ時間がかかりすぎている場合でも、ReleaseHandle メソッド実行されます。

汎用ハンドル作成することはできないため、このクラス抽象クラスです。SafeHandle実装するには、オペレーティング システム ハンドルの型ごとに派生クラス作成する必要がありますSafeHandle派生クラス作成するには、オペレーティング システム ハンドル作成し解放する方法把握している必要がありますCloseHandle使用する場合もあれば、UnmapViewOfFileFindClose などの特定のメソッド使用する場合もあるため、このプロセスハンドルの型ごとに異なりますこのためオペレーティング システム ハンドルの型 (SafeRegistryHandleSafeFileHandleMySpecialSafeFileHandle など) ごとに、SafeHandle派生クラス作成する必要があります。これらの派生クラス一部は、Microsoft.Win32.SafeHandles 名前空間にあらかじめ作成され提供されています。

メモメモ

SafeHandle から派生した独自のクラス作成は高度なプログラミング技術です。SafeHandle から派生した作成済み一連のクラスは、抽象派クラスとして提供されMicrosoft.Win32.SafeHandles 名前空間あります。これらのクラスは、ファイル ハンドルオペレーティング システム ハンドルサポートする共通機能提供するように設計されています。

継承時の注意 SafeHandle から継承する場合は、IsInvalid および ReleaseHandle の両メンバオーバーライドする必要がありますまた、無効なハンドル値を表す値と、マネージ コードネイティブ ハンドル所有するかどうかを示すブール値を持つ、基本コンストラクタ呼び出す既定コンストラクタ提供することも必要です。

使用例使用例

SafeHandle クラス実装する方法次のコード例示します

using System;
using System.Runtime.InteropServices;
using System.Runtime.CompilerServices;
using System.Runtime.ConstrainedExecution;

namespace SafeHandleExample
{
    sealed class MySafeHandleSubclass : SafeHandle
    {
        // Called by P/Invoke when returning SafeHandles
        private MySafeHandleSubclass()
            : base(IntPtr.Zero, true)
        {
        }
        // If & only if you need to support user-supplied handles
        internal MySafeHandleSubclass(IntPtr preexistingHandle, bool
 ownsHandle)
            : base(IntPtr.Zero, ownsHandle)
        {
            SetHandle(preexistingHandle);
        }
        // Do not provide a finalizer - SafeHandle's critical finalizer
 will
        // call ReleaseHandle for you.
        public override bool IsInvalid
        {

            get { return IsClosed || handle
 == IntPtr.Zero; }
        }
        [DllImport("kernel32")]
        [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
        private static extern bool
 CloseHandle(IntPtr handle);

        protected override bool ReleaseHandle()
        {
            return CloseHandle(handle);
        }
        [DllImport("kernel32")]
        public static extern MySafeHandleSubclass
 CreateHandle(int someState);
    }
    class Class1
    {

        [STAThread]
        static void Main(string[]
 args)
        {
            bool ownsHandle = true;
            MySafeHandleSubclass s = new MySafeHandleSubclass(IntPtr.Zero,
 ownsHandle);
        }
    }
}
.NET Framework のセキュリティ.NET Frameworkセキュリティ
継承階層継承階層
System.Object
   System.Runtime.ConstrainedExecution.CriticalFinalizerObject
    System.Runtime.InteropServices.SafeHandle
       Microsoft.Win32.SafeHandles.SafeHandleMinusOneIsInvalid
       Microsoft.Win32.SafeHandles.SafeHandleZeroOrMinusOneIsInvalid
スレッド セーフスレッド セーフ
この型の public static (Visual Basic では Shared) メンバはすべて、スレッド セーフです。インスタンス メンバ場合は、スレッド セーフであるとは限りません。
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照
関連項目
SafeHandle メンバ
System.Runtime.InteropServices 名前空間
Microsoft.Win32.SafeHandles
CriticalHandle クラス
CriticalFinalizerObject クラス

SafeHandle クラス

名前空間: System.Security.Cryptography
アセンブリ: mscorlib (mscorlib.dll 内)
構文構文

Public MustInherit Class
 SafeHandle
    Implements IDisposable
public abstract class SafeHandle implements
 IDisposable
public abstract class SafeHandle implements
 IDisposable
継承階層継承階層
System.Object
   System.Security.Cryptography.RandomNumberGenerator
    System.Security.Cryptography.SafeHandle
スレッド セーフスレッド セーフ
この型の public static (Visual Basic では Shared) メンバはすべて、スレッド セーフです。インスタンス メンバ場合は、スレッド セーフであるとは限りません。
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照
関連項目
SafeHandle メンバ
System.Security.Cryptography 名前空間

SafeHandle コンストラクタ

メモ : このコンストラクタは、.NET Framework version 2.0新しく追加されたものです。

指定した無効なハンドル値を使用してSafeHandle クラス新しインスタンス初期化します。

名前空間: System.Runtime.InteropServices
アセンブリ: mscorlib (mscorlib.dll 内)
構文構文

Protected Sub New ( _
    invalidHandleValue As IntPtr, _
    ownsHandle As Boolean _
)
Dim invalidHandleValue As IntPtr
Dim ownsHandle As Boolean

Dim instance As New SafeHandle(invalidHandleValue,
 ownsHandle)
protected SafeHandle (
    IntPtr invalidHandleValue,
    bool ownsHandle
)
protected:
SafeHandle (
    IntPtr invalidHandleValue, 
    bool ownsHandle
)
protected SafeHandle (
    IntPtr invalidHandleValue, 
    boolean ownsHandle
)
protected function SafeHandle (
    invalidHandleValue : IntPtr, 
    ownsHandle : boolean
)

パラメータ

invalidHandleValue

無効なハンドルの値 (通常は 0 または -1)。IsInvalid の実装では、この値に対して true返す必要があります

ownsHandle

終了処理中に SafeHandle によってハンドル確実に解放する場合trueそれ以外場合false (お勧めしません)。

例外例外
解説解説

ownsHandle パラメータfalse場合、ReleaseHandle が呼び出されることはありません。したがってコードリソースリークする可能性があるため、このパラメータ値を使用することはお勧めしません。

.NET Framework のセキュリティ.NET Frameworkセキュリティ
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照
関連項目
SafeHandle クラス
SafeHandle メンバ
System.Runtime.InteropServices 名前空間

SafeHandle コンストラクタ

名前空間: System.Security.Cryptography
アセンブリ: mscorlib (mscorlib.dll 内)
構文構文

Protected Sub New ( _
    invalidHandleValue As IntPtr, _
    ownsHandle As Boolean _
)
Dim invalidHandleValue As IntPtr
Dim ownsHandle As Boolean

Dim instance As New SafeHandle(invalidHandleValue,
 ownsHandle)
protected SafeHandle (
    IntPtr invalidHandleValue,
    bool ownsHandle
)
protected:
SafeHandle (
    IntPtr invalidHandleValue, 
    bool ownsHandle
)
protected SafeHandle (
    IntPtr invalidHandleValue, 
    boolean ownsHandle
)
protected function SafeHandle (
    invalidHandleValue : IntPtr, 
    ownsHandle : boolean
)

パラメータ

invalidHandleValue
ownsHandle
プラットフォームプラットフォーム
バージョン情報バージョン情報

.NET Compact Framework

サポート対象 : 2.0
参照参照

関連項目

SafeHandle クラス
SafeHandle メンバ
System.Security.Cryptography 名前空間

SafeHandle フィールド


プロテクト フィールドプロテクト フィールド

参照参照

関連項目

SafeHandle クラス
System.Runtime.InteropServices 名前空間
Microsoft.Win32.SafeHandles
CriticalHandle クラス
CriticalFinalizerObject クラス

SafeHandle フィールド


プロテクト フィールドプロテクト フィールド

  名前 説明
プロテクト フィールド handle  
参照参照

関連項目

SafeHandle クラス
System.Security.Cryptography 名前空間

SafeHandle プロパティ


パブリック プロパティパブリック プロパティ

  名前 説明
パブリック プロパティ IsClosed ハンドル閉じているかどうかを示す値を取得します
パブリック プロパティ IsInvalid 派生クラスオーバーライドされると、ハンドル値が無効かどうかを示す値を取得します
参照参照

関連項目

SafeHandle クラス
System.Runtime.InteropServices 名前空間
Microsoft.Win32.SafeHandles
CriticalHandle クラス
CriticalFinalizerObject クラス

SafeHandle プロパティ


パブリック プロパティパブリック プロパティ

  名前 説明
パブリック プロパティ IsInvalid  
参照参照

関連項目

SafeHandle クラス
System.Security.Cryptography 名前空間

SafeHandle メソッド


パブリック メソッドパブリック メソッド

プロテクト メソッドプロテクト メソッド
参照参照

関連項目

SafeHandle クラス
System.Runtime.InteropServices 名前空間
Microsoft.Win32.SafeHandles
CriticalHandle クラス
CriticalFinalizerObject クラス

SafeHandle メソッド


SafeHandle メンバ

オペレーティング システム ハンドルラッパー クラス表します

SafeHandle データ型公開されるメンバを以下の表に示します


プロテクト コンストラクタプロテクト コンストラクタ
プロテクト フィールドプロテクト フィールド
パブリック プロパティパブリック プロパティ
  名前 説明
パブリック プロパティ IsClosed ハンドル閉じているかどうかを示す値を取得します
パブリック プロパティ IsInvalid 派生クラスオーバーライドされると、ハンドル値が無効かどうかを示す値を取得します
パブリック メソッドパブリック メソッド
プロテクト メソッドプロテクト メソッド
参照参照

関連項目

SafeHandle クラス
System.Runtime.InteropServices 名前空間
Microsoft.Win32.SafeHandles
CriticalHandle クラス
CriticalFinalizerObject クラス

SafeHandle メンバ




英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「SafeHandle」の関連用語

SafeHandleのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



SafeHandleのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2025 Microsoft.All rights reserved.

©2025 GRAS Group, Inc.RSS