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 名前空間


このページでは「.NET Framework クラス ライブラリ リファレンス」からSafeHandle クラスを検索した結果を表示しています。
Weblioに収録されているすべての辞書からSafeHandle クラスを検索する場合は、下記のリンクをクリックしてください。
 全ての辞書からSafeHandle クラス を検索

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

辞書ショートカット

すべての辞書の索引

「SafeHandle クラス」の関連用語

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

   

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



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

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

©2025 GRAS Group, Inc.RSS