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

Weblio 辞書 > コンピュータ > .NET Framework クラス ライブラリ リファレンス > SafeHandleZeroOrMinusOneIsInvalidの意味・解説 

SafeHandleZeroOrMinusOneIsInvalid クラス

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

値 0 または -1 が無効なハンドルである Win32 セーフ ハンドルの実装の基本クラスを提供します。

名前空間: Microsoft.Win32.SafeHandles
アセンブリ: mscorlib (mscorlib.dll 内)
構文構文

Public MustInherit Class
 SafeHandleZeroOrMinusOneIsInvalid
    Inherits SafeHandle
Dim instance As SafeHandleZeroOrMinusOneIsInvalid
public abstract class SafeHandleZeroOrMinusOneIsInvalid
 : SafeHandle
public ref class SafeHandleZeroOrMinusOneIsInvalid
 abstract : public SafeHandle
public abstract class SafeHandleZeroOrMinusOneIsInvalid
 extends SafeHandle
public abstract class SafeHandleZeroOrMinusOneIsInvalid
 extends SafeHandle
解説解説

このクラスは System.Runtime.InteropServices.SafeHandle クラスから派生したクラスです。このクラスは無効なハンドルの形式を記述します。たとえば、無効なハンドル値として -1 を使用するハンドルもあれば、0 を使用するハンドルもあります。このクラスからさらにファイル ハンドルやレジストリ ハンドルなどへ派生して、さらなる特化が可能です。SafeHandleZeroOrMinusOneIsInvalid から派生したクラスの例については、SafeFileHandle クラスのトピックを参照してください。

既存のマネージ ラッパーを持たないアンマネージ リソースを安全にラップする必要があるときは、SafeHandleZeroOrMinusOneIsInvalid クラスを使用します。

使用例使用例

SafeHandleZeroOrMinusOneIsInvalid クラスから派生したクラスを作成する方法のコード例を次に示します。この例では、アンマネージ メモリへのポインタをラップするクラスを作成します。

Imports System
Imports System.Security.Permissions
Imports System.Runtime.InteropServices
Imports Microsoft.Win32.SafeHandles



Module Example

    Sub Main()

        Dim ptr As IntPtr = Marshal.AllocHGlobal(10)

        Console.WriteLine("Ten bytes of unmanaged memory allocated.")

        Dim memHabdle As New
 SafeUnmanagedMemoryHandle(ptr, True)

        If memHabdle.IsInvalid Then
            Console.WriteLine("SafeUnmanagedMemoryHandle is invalid!.")
        Else
            Console.WriteLine("SafeUnmanagedMemoryHandle class
 initialized to unmanaged memory.")
        End If

        Console.ReadLine()

    End Sub
End Module




' Demand unmanaged code permission to use this class.
<SecurityPermission(SecurityAction.Demand, UnmanagedCode:=True)> _
NotInheritable Class SafeUnmanagedMemoryHandle
    Inherits SafeHandleZeroOrMinusOneIsInvalid


    ' Set ownsHandle to true for the default constructor.
    Friend Sub New()
        MyBase.New(True)

    End Sub 'New

    ' Set the handle and set ownsHandle to true.
    Friend Sub New(ByVal
 preexistingHandle As IntPtr, ByVal ownsHandle
 As Boolean)
        MyBase.New(ownsHandle)
        SetHandle(preexistingHandle)

    End Sub 'New


    ' Perform any specific actions to release the 
    ' handle in the ReleaseHandle method.
    ' Often, you need to use Pinvoke to make
    ' a call into the Win32 API to release the 
    ' handle. In this case, however, we can use
    ' the Marshal class to release the unmanaged
    ' memory.
    Protected Overrides Function
 ReleaseHandle() As Boolean
        ' "handle" is the internal
        ' value for the IntPtr handle.
        ' If the handle was set,
        ' free it. Return success.
        If handle <> IntPtr.Zero Then

            ' Free the handle.
            Marshal.FreeHGlobal(handle)

            ' Set the handle to zero.
            handle = IntPtr.Zero

            ' Return success.
            Return True
        End If

        ' Return false. 
        Return False

    End Function
End Class

using System;
using System.Security.Permissions;
using System.Runtime.InteropServices;
using Microsoft.Win32.SafeHandles;

namespace SafeHandleExamples
{
    class Example
    {
        public static void
 Main()
        {

            IntPtr ptr = Marshal.AllocHGlobal(10);

            Console.WriteLine("Ten bytes of unmanaged memory allocated.");

            SafeUnmanagedMemoryHandle memHabdle = new SafeUnmanagedMemoryHandle(ptr,
 true);

            if (memHabdle.IsInvalid)
            {
                Console.WriteLine("SafeUnmanagedMemoryHandle is invalid!.");
            }
            else
            {
                Console.WriteLine("SafeUnmanagedMemoryHandle class
 initialized to unmanaged memory.");
            }

            Console.ReadLine();
        }
    }




    // Demand unmanaged code permission to use this class.
    [SecurityPermission(SecurityAction.Demand, UnmanagedCode = true)]
    sealed class SafeUnmanagedMemoryHandle : SafeHandleZeroOrMinusOneIsInvalid
    {

        // Set ownsHandle to true for the default constructor.
        internal SafeUnmanagedMemoryHandle() : base(true)
 { }

        // Set the handle and set ownsHandle to true.
        internal SafeUnmanagedMemoryHandle(IntPtr preexistingHandle, bool
 ownsHandle)
            : base(ownsHandle)
        {
            SetHandle(preexistingHandle);
        }

        // Perform any specific actions to release the 
        // handle in the ReleaseHandle method.
        // Often, you need to use Pinvoke to make
        // a call into the Win32 API to release the 
        // handle. In this case, however, we can use
        // the Marshal class to release the unmanaged
        // memory.
        override protected bool ReleaseHandle()
        {
            // "handle" is the internal
            // value for the IntPtr handle.

            // If the handle was set,
            // free it. Return success.
            if (handle != IntPtr.Zero)
            {

                // Free the handle.
                Marshal.FreeHGlobal(handle);

                // Set the handle to zero.
                handle = IntPtr.Zero;

                // Return success.
                return true;

            }

            // Return false. 
            return false;

        }
    }
}

継承階層継承階層
System.Object
   System.Runtime.ConstrainedExecution.CriticalFinalizerObject
     System.Runtime.InteropServices.SafeHandle
      Microsoft.Win32.SafeHandles.SafeHandleZeroOrMinusOneIsInvalid
         Microsoft.Win32.SafeHandles.SafeFileHandle
         Microsoft.Win32.SafeHandles.SafeWaitHandle
スレッド セーフスレッド セーフ
この型の public static (Visual Basic では Shared) メンバはすべて、スレッド セーフです。インスタンス メンバの場合は、スレッド セーフであるとは限りません。
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照
関連項目
SafeHandleZeroOrMinusOneIsInvalid メンバ
Microsoft.Win32.SafeHandles 名前空間
SafeHandleMinusOneIsInvalid クラス
CriticalHandleMinusOneIsInvalid クラス
CriticalHandle
SafeHandle
SafeFileHandle クラス

SafeHandleZeroOrMinusOneIsInvalid コンストラクタ

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

SafeHandleZeroOrMinusOneIsInvalid クラスの新しいインスタンスを初期化し、ハンドルを安全に解放するかどうかを指定します。

名前空間: Microsoft.Win32.SafeHandles
アセンブリ: mscorlib (mscorlib.dll 内)
構文構文

Protected Sub New ( _
    ownsHandle As Boolean _
)
Dim ownsHandle As Boolean

Dim instance As New SafeHandleZeroOrMinusOneIsInvalid(ownsHandle)
protected SafeHandleZeroOrMinusOneIsInvalid (
    bool ownsHandle
)
protected:
SafeHandleZeroOrMinusOneIsInvalid (
    bool ownsHandle
)
protected SafeHandleZeroOrMinusOneIsInvalid (
    boolean ownsHandle
)
protected function SafeHandleZeroOrMinusOneIsInvalid
 (
    ownsHandle : boolean
)

パラメータ

ownsHandle

終了処理中にハンドルを安全に解放する場合は true。安全な解放を行わない場合は false (お勧めしません)。

使用例使用例

SafeHandleZeroOrMinusOneIsInvalid クラスから派生したクラスを作成する方法のコード例を次に示します。この例では、アンマネージ メモリへのポインタをラップするクラスを作成します。

Imports System
Imports System.Security.Permissions
Imports System.Runtime.InteropServices
Imports Microsoft.Win32.SafeHandles



Module Example

    Sub Main()

        Dim ptr As IntPtr = Marshal.AllocHGlobal(10)

        Console.WriteLine("Ten bytes of unmanaged memory allocated.")

        Dim memHabdle As New
 SafeUnmanagedMemoryHandle(ptr, True)

        If memHabdle.IsInvalid Then
            Console.WriteLine("SafeUnmanagedMemoryHandle is invalid!.")
        Else
            Console.WriteLine("SafeUnmanagedMemoryHandle class
 initialized to unmanaged memory.")
        End If

        Console.ReadLine()

    End Sub
End Module




' Demand unmanaged code permission to use this class.
<SecurityPermission(SecurityAction.Demand, UnmanagedCode:=True)> _
NotInheritable Class SafeUnmanagedMemoryHandle
    Inherits SafeHandleZeroOrMinusOneIsInvalid


    ' Set ownsHandle to true for the default constructor.
    Friend Sub New()
        MyBase.New(True)

    End Sub 'New

    ' Set the handle and set ownsHandle to true.
    Friend Sub New(ByVal
 preexistingHandle As IntPtr, ByVal ownsHandle
 As Boolean)
        MyBase.New(ownsHandle)
        SetHandle(preexistingHandle)

    End Sub 'New


    ' Perform any specific actions to release the 
    ' handle in the ReleaseHandle method.
    ' Often, you need to use Pinvoke to make
    ' a call into the Win32 API to release the 
    ' handle. In this case, however, we can use
    ' the Marshal class to release the unmanaged
    ' memory.
    Protected Overrides Function
 ReleaseHandle() As Boolean
        ' "handle" is the internal
        ' value for the IntPtr handle.
        ' If the handle was set,
        ' free it. Return success.
        If handle <> IntPtr.Zero Then

            ' Free the handle.
            Marshal.FreeHGlobal(handle)

            ' Set the handle to zero.
            handle = IntPtr.Zero

            ' Return success.
            Return True
        End If

        ' Return false. 
        Return False

    End Function
End Class

using System;
using System.Security.Permissions;
using System.Runtime.InteropServices;
using Microsoft.Win32.SafeHandles;

namespace SafeHandleExamples
{
    class Example
    {
        public static void
 Main()
        {

            IntPtr ptr = Marshal.AllocHGlobal(10);

            Console.WriteLine("Ten bytes of unmanaged memory allocated.");

            SafeUnmanagedMemoryHandle memHabdle = new SafeUnmanagedMemoryHandle(ptr,
 true);

            if (memHabdle.IsInvalid)
            {
                Console.WriteLine("SafeUnmanagedMemoryHandle is invalid!.");
            }
            else
            {
                Console.WriteLine("SafeUnmanagedMemoryHandle class
 initialized to unmanaged memory.");
            }

            Console.ReadLine();
        }
    }




    // Demand unmanaged code permission to use this class.
    [SecurityPermission(SecurityAction.Demand, UnmanagedCode = true)]
    sealed class SafeUnmanagedMemoryHandle : SafeHandleZeroOrMinusOneIsInvalid
    {

        // Set ownsHandle to true for the default constructor.
        internal SafeUnmanagedMemoryHandle() : base(true)
 { }

        // Set the handle and set ownsHandle to true.
        internal SafeUnmanagedMemoryHandle(IntPtr preexistingHandle, bool
 ownsHandle)
            : base(ownsHandle)
        {
            SetHandle(preexistingHandle);
        }

        // Perform any specific actions to release the 
        // handle in the ReleaseHandle method.
        // Often, you need to use Pinvoke to make
        // a call into the Win32 API to release the 
        // handle. In this case, however, we can use
        // the Marshal class to release the unmanaged
        // memory.
        override protected bool ReleaseHandle()
        {
            // "handle" is the internal
            // value for the IntPtr handle.

            // If the handle was set,
            // free it. Return success.
            if (handle != IntPtr.Zero)
            {

                // Free the handle.
                Marshal.FreeHGlobal(handle);

                // Set the handle to zero.
                handle = IntPtr.Zero;

                // Return success.
                return true;

            }

            // Return false. 
            return false;

        }
    }
}

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

SafeHandleZeroOrMinusOneIsInvalid フィールド


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

  名前 説明
プロテクト フィールド handle  ラップするハンドルを指定します。 ( SafeHandle から継承されます。)
参照参照

関連項目

SafeHandleZeroOrMinusOneIsInvalid クラス
Microsoft.Win32.SafeHandles 名前空間
SafeHandleMinusOneIsInvalid クラス
CriticalHandleMinusOneIsInvalid クラス
CriticalHandle
SafeHandle
SafeFileHandle クラス

SafeHandleZeroOrMinusOneIsInvalid プロパティ


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

参照参照

関連項目

SafeHandleZeroOrMinusOneIsInvalid クラス
Microsoft.Win32.SafeHandles 名前空間
SafeHandleMinusOneIsInvalid クラス
CriticalHandleMinusOneIsInvalid クラス
CriticalHandle
SafeHandle
SafeFileHandle クラス

SafeHandleZeroOrMinusOneIsInvalid メソッド


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

( プロテクト メソッド も参照)
  名前 説明
パブリック メソッド Close  リソースを解放するためのハンドルをマークします。 ( SafeHandle から継承されます。)
パブリック メソッド DangerousAddRef  SafeHandle インスタンスの参照カウンタを手動でインクリメントします。 ( SafeHandle から継承されます。)
パブリック メソッド DangerousGetHandle  handle フィールドの値を返します。 ( SafeHandle から継承されます。)
パブリック メソッド DangerousRelease  SafeHandle インスタンスの参照カウンタを手動でデクリメントします。 ( SafeHandle から継承されます。)
パブリック メソッド Dispose  オーバーロードされます。 SafeHandle クラスが使用しているリソースを解放します。 ( SafeHandle から継承されます。)
パブリック メソッド Equals  オーバーロードされます。 2 つの Object インスタンスが等しいかどうかを判断します。 ( Object から継承されます。)
パブリック メソッド GetHashCode  特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用に適しています。 ( Object から継承されます。)
パブリック メソッド GetType  現在のインスタンスの Type を取得します。 ( Object から継承されます。)
パブリック メソッド ReferenceEquals  指定した複数の Object インスタンスが同一かどうかを判断します。 ( Object から継承されます。)
パブリック メソッド SetHandleAsInvalid  今後は使用しないものとしてハンドルをマークします。 ( SafeHandle から継承されます。)
パブリック メソッド ToString  現在の Object を表す String を返します。 ( Object から継承されます。)
プロテクト メソッドプロテクト メソッド
参照参照

関連項目

SafeHandleZeroOrMinusOneIsInvalid クラス
Microsoft.Win32.SafeHandles 名前空間
SafeHandleMinusOneIsInvalid クラス
CriticalHandleMinusOneIsInvalid クラス
CriticalHandle
SafeHandle
SafeFileHandle クラス

SafeHandleZeroOrMinusOneIsInvalid メンバ

値 0 または -1 が無効なハンドルである Win32 セーフ ハンドルの実装の基本クラスを提供します。

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


プロテクト コンストラクタプロテクト コンストラクタ
  名前 説明
プロテクト メソッド SafeHandleZeroOrMinusOneIsInvalid SafeHandleZeroOrMinusOneIsInvalid クラスの新しいインスタンスを初期化し、ハンドルを安全に解放するかどうかを指定します。
プロテクト フィールドプロテクト フィールド
  名前 説明
プロテクト フィールド handle  ラップするハンドルを指定します。(SafeHandle から継承されます。)
パブリック プロパティパブリック プロパティ
パブリック メソッドパブリック メソッド
( プロテクト メソッド も参照)
  名前 説明
パブリック メソッド Close  リソースを解放するためのハンドルをマークします。 (SafeHandle から継承されます。)
パブリック メソッド DangerousAddRef  SafeHandle インスタンスの参照カウンタを手動でインクリメントします。 (SafeHandle から継承されます。)
パブリック メソッド DangerousGetHandle  handle フィールドの値を返します。 (SafeHandle から継承されます。)
パブリック メソッド DangerousRelease  SafeHandle インスタンスの参照カウンタを手動でデクリメントします。 (SafeHandle から継承されます。)
パブリック メソッド Dispose  オーバーロードされます。 SafeHandle クラスが使用しているリソースを解放します。 (SafeHandle から継承されます。)
パブリック メソッド Equals  オーバーロードされます。 2 つの Object インスタンスが等しいかどうかを判断します。 (Object から継承されます。)
パブリック メソッド GetHashCode  特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用に適しています。 (Object から継承されます。)
パブリック メソッド GetType  現在のインスタンスの Type を取得します。 (Object から継承されます。)
パブリック メソッド ReferenceEquals  指定した複数の Object インスタンスが同一かどうかを判断します。 (Object から継承されます。)
パブリック メソッド SetHandleAsInvalid  今後は使用しないものとしてハンドルをマークします。 (SafeHandle から継承されます。)
パブリック メソッド ToString  現在の Object を表す String を返します。 (Object から継承されます。)
プロテクト メソッドプロテクト メソッド
参照参照

関連項目

SafeHandleZeroOrMinusOneIsInvalid クラス
Microsoft.Win32.SafeHandles 名前空間
SafeHandleMinusOneIsInvalid クラス
CriticalHandleMinusOneIsInvalid クラス
CriticalHandle
SafeHandle
SafeFileHandle クラス



英和和英テキスト翻訳

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

辞書ショートカット

すべての辞書の索引

「SafeHandleZeroOrMinusOneIsInvalid」の関連用語

SafeHandleZeroOrMinusOneIsInvalidのお隣キーワード

   

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



SafeHandleZeroOrMinusOneIsInvalidのページの著作権

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

©2026 GRAS Group, Inc.RSS