SafeHandle.DangerousGetHandle メソッド


handle フィールドの値を返します。Returns the value of the handle field.

 IntPtr DangerousGetHandle();
public IntPtr DangerousGetHandle ();
member this.DangerousGetHandle : unit -> nativeint
Public Function DangerousGetHandle () As IntPtr



handle フィールドの値を表す IntPtrAn IntPtr representing the value of the handle field. ハンドルが SetHandleAsInvalid() で無効としてマークされている場合にも、このメソッドは元のハンドル値を返すため、返される値が古い値である可能性があります。If the handle has been marked invalid with SetHandleAsInvalid(), this method still returns the original handle value, which can be a stale value.


このメソッドを使用すると、SafeHandle 派生クラスのインスタンスから実際のハンドル値を取得できます。You can use this method to retrieve the actual handle value from an instance of the SafeHandle derived class. .NET Framework の多くのプロパティが IntPtr ハンドル型を返すため、このメソッドは下位互換性を保つために必要です。This method is needed for backwards compatibility because many properties in the .NET Framework return IntPtr handle types. IntPtr ハンドル型は、ポインターまたはハンドルを表すために使用されるプラットフォーム固有の型です。IntPtr handle types are platform-specific types used to represent a pointer or a handle.


DangerousGetHandle メソッドを使用すると、SetHandleAsInvalidでハンドルが無効とマークされている場合でも DangerousGetHandle、元の古いハンドル値が返されます。Using the DangerousGetHandle method can pose security risks because, if the handle has been marked as invalid with SetHandleAsInvalid, DangerousGetHandle still returns the original, potentially stale handle value. 返されたハンドルは、どの時点でもリサイクルできます。The returned handle can also be recycled at any point. つまり、ハンドルが突然動作しなくなる可能性があります。At best, this means the handle might suddenly stop working. 最悪の場合、ハンドルが表すハンドルまたはリソースが信頼されていないコードに公開されると、再利用または返されたハンドルに対するセキュリティ攻撃のリサイクルが発生する可能性があります。At worst, if the handle or the resource that the handle represents is exposed to untrusted code, this can lead to a recycling security attack on the reused or returned handle. たとえば、信頼されていない呼び出し元は、返されただけのハンドルのデータに対してクエリを実行し、完全に関連のないリソースに関する情報を受け取ることができます。For example, an untrusted caller can query data on the handle just returned and receive information for an entirely unrelated resource. DangerousGetHandle methodsafely 安全に使用する方法の詳細については、DangerousAddRefDangerousRelease の方法に関する説明を参照してください。See the DangerousAddRef and the DangerousRelease methods for more information about using the DangerousGetHandle methodsafely.