diff --git a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/TdsParserSafeHandles.cs b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/TdsParserSafeHandles.cs
deleted file mode 100644
index 276a353141..0000000000
--- a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/TdsParserSafeHandles.cs
+++ /dev/null
@@ -1,315 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-using System.Threading;
-using Microsoft.Data.Common;
-
-namespace Microsoft.Data.SqlClient
-{
- internal sealed class SNILoadHandle : SafeHandle
- {
- internal static readonly SNILoadHandle SingletonInstance = new SNILoadHandle();
-
- internal readonly SNINativeMethodWrapper.SqlAsyncCallbackDelegate ReadAsyncCallbackDispatcher = new SNINativeMethodWrapper.SqlAsyncCallbackDelegate(ReadDispatcher);
- internal readonly SNINativeMethodWrapper.SqlAsyncCallbackDelegate WriteAsyncCallbackDispatcher = new SNINativeMethodWrapper.SqlAsyncCallbackDelegate(WriteDispatcher);
-
- private readonly UInt32 _sniStatus = TdsEnums.SNI_UNINITIALIZED;
- private readonly EncryptionOptions _encryptionOption = EncryptionOptions.OFF;
- private bool? _clientOSEncryptionSupport = null;
-
- private SNILoadHandle() : base(IntPtr.Zero, true)
- {
- // SQL BU DT 346588 - from security review - SafeHandle guarantees this is only called once.
- // The reason for the safehandle is guaranteed initialization and termination of SNI to
- // ensure SNI terminates and cleans up properly.
- RuntimeHelpers.PrepareConstrainedRegions();
- try
- { }
- finally
- {
- _sniStatus = SNINativeMethodWrapper.SNIInitialize();
- base.handle = (IntPtr)1; // Initialize to non-zero dummy variable.
- }
- }
-
- ///
- /// Verify client encryption possibility.
- ///
- public bool ClientOSEncryptionSupport
- {
- get
- {
- if (_clientOSEncryptionSupport is null)
- {
- // VSDevDiv 479597: If initialize fails, don't call QueryInfo.
- if (TdsEnums.SNI_SUCCESS == _sniStatus)
- {
- try
- {
- UInt32 value = 0;
- // Query OS to find out whether encryption is supported.
- SNINativeMethodWrapper.SNIQueryInfo(SNINativeMethodWrapper.QTypes.SNI_QUERY_CLIENT_ENCRYPT_POSSIBLE, ref value);
- _clientOSEncryptionSupport = value != 0;
- }
- catch (Exception e)
- {
- SqlClientEventSource.Log.TryTraceEvent(" Exception occurs during resolving encryption possibility: {0}", e.Message);
- }
- }
- }
- return _clientOSEncryptionSupport.Value;
- }
- }
-
- public override bool IsInvalid => (IntPtr.Zero == base.handle);
-
- override protected bool ReleaseHandle()
- {
- if (base.handle != IntPtr.Zero)
- {
- if (TdsEnums.SNI_SUCCESS == _sniStatus)
- {
- LocalDBAPI.ReleaseDLLHandles();
- SNINativeMethodWrapper.SNITerminate();
- }
- base.handle = IntPtr.Zero;
- }
-
- return true;
- }
-
- public UInt32 SNIStatus => _sniStatus;
-
- public EncryptionOptions Options => _encryptionOption;
-
- static private void ReadDispatcher(IntPtr key, IntPtr packet, UInt32 error)
- {
- // This is the app-domain dispatcher for all async read callbacks, It
- // simply gets the state object from the key that it is passed, and
- // calls the state object's read callback.
- Debug.Assert(IntPtr.Zero != key, "no key passed to read callback dispatcher?");
- if (IntPtr.Zero != key)
- {
- // NOTE: we will get a null ref here if we don't get a key that
- // contains a GCHandle to TDSParserStateObject; that is
- // very bad, and we want that to occur so we can catch it.
- GCHandle gcHandle = (GCHandle)key;
- TdsParserStateObject stateObj = (TdsParserStateObject)gcHandle.Target;
-
- if (null != stateObj)
- {
- stateObj.ReadAsyncCallback(IntPtr.Zero, packet, error);
- }
- }
- }
-
- static private void WriteDispatcher(IntPtr key, IntPtr packet, UInt32 error)
- {
- // This is the app-domain dispatcher for all async write callbacks, It
- // simply gets the state object from the key that it is passed, and
- // calls the state object's write callback.
- Debug.Assert(IntPtr.Zero != key, "no key passed to write callback dispatcher?");
- if (IntPtr.Zero != key)
- {
- // NOTE: we will get a null ref here if we don't get a key that
- // contains a GCHandle to TDSParserStateObject; that is
- // very bad, and we want that to occur so we can catch it.
- GCHandle gcHandle = (GCHandle)key;
- TdsParserStateObject stateObj = (TdsParserStateObject)gcHandle.Target;
-
- if (null != stateObj)
- {
- stateObj.WriteAsyncCallback(IntPtr.Zero, packet, error);
- }
- }
- }
- }
-
- internal sealed class SNIHandle : SafeHandle
- {
- private readonly UInt32 _status = TdsEnums.SNI_UNINITIALIZED;
- private readonly bool _fSync = false;
-
- // creates a physical connection
- internal SNIHandle(
- SNINativeMethodWrapper.ConsumerInfo myInfo,
- string serverName,
- byte[] spnBuffer,
- bool ignoreSniOpenTimeout,
- int timeout,
- out byte[] instanceName,
- bool flushCache,
- bool fSync,
- bool fParallel,
- TransparentNetworkResolutionState transparentNetworkResolutionState,
- int totalTimeout,
- SqlConnectionIPAddressPreference ipPreference,
- SQLDNSInfo cachedDNSInfo,
- string hostNameInCertificate)
- : base(IntPtr.Zero, true)
- {
-
- RuntimeHelpers.PrepareConstrainedRegions();
- try
- { }
- finally
- {
- _fSync = fSync;
- instanceName = new byte[256]; // Size as specified by netlibs.
- if (ignoreSniOpenTimeout)
- {
- // UNDONE: ITEM12001110 (DB Mirroring Reconnect) Old behavior of not truly honoring timeout presevered
- // for non-failover scenarios to avoid breaking changes as part of a QFE. Consider fixing timeout
- // handling in next full release and removing ignoreSniOpenTimeout parameter.
- timeout = Timeout.Infinite; // -1 == native SNIOPEN_TIMEOUT_VALUE / INFINITE
- }
-
- int transparentNetworkResolutionStateNo = (int)transparentNetworkResolutionState;
- _status = SNINativeMethodWrapper.SNIOpenSyncEx(myInfo, serverName, ref base.handle,
- spnBuffer, instanceName, flushCache, fSync, timeout, fParallel, transparentNetworkResolutionStateNo, totalTimeout,
- ADP.IsAzureSqlServerEndpoint(serverName), ipPreference, cachedDNSInfo, hostNameInCertificate);
- }
- }
-
- // constructs SNI Handle for MARS session
- internal SNIHandle(SNINativeMethodWrapper.ConsumerInfo myInfo, SNIHandle parent, SqlConnectionIPAddressPreference ipPreference, SQLDNSInfo cachedDNSInfo) : base(IntPtr.Zero, true)
- {
- RuntimeHelpers.PrepareConstrainedRegions();
- try
- { }
- finally
- {
- _status = SNINativeMethodWrapper.SNIOpenMarsSession(myInfo, parent, ref base.handle, parent._fSync, ipPreference, cachedDNSInfo);
- }
- }
-
- public override bool IsInvalid
- {
- get
- {
- return (IntPtr.Zero == base.handle);
- }
- }
-
- override protected bool ReleaseHandle()
- {
- // NOTE: The SafeHandle class guarantees this will be called exactly once.
- IntPtr ptr = base.handle;
- base.handle = IntPtr.Zero;
- if (IntPtr.Zero != ptr)
- {
- if (0 != SNINativeMethodWrapper.SNIClose(ptr))
- {
- return false; // SNIClose should never fail.
- }
- }
- return true;
- }
-
- internal UInt32 Status
- {
- get
- {
- return _status;
- }
- }
- }
-
- internal sealed class SNIPacket : SafeHandle
- {
-
- internal SNIPacket(SafeHandle sniHandle) : base(IntPtr.Zero, true)
- {
- SNINativeMethodWrapper.SNIPacketAllocate(sniHandle, SNINativeMethodWrapper.IOType.WRITE, ref base.handle);
- if (IntPtr.Zero == base.handle)
- {
- throw SQL.SNIPacketAllocationFailure();
- }
- }
-
- public override bool IsInvalid
- {
- get
- {
- return (IntPtr.Zero == base.handle);
- }
- }
-
- override protected bool ReleaseHandle()
- {
- // NOTE: The SafeHandle class guarantees this will be called exactly once.
- IntPtr ptr = base.handle;
- base.handle = IntPtr.Zero;
- if (IntPtr.Zero != ptr)
- {
- SNINativeMethodWrapper.SNIPacketRelease(ptr);
- }
- return true;
- }
- }
-
- internal sealed class WritePacketCache : IDisposable
- {
- private bool _disposed;
- private Stack _packets;
-
- public WritePacketCache()
- {
- _disposed = false;
- _packets = new Stack();
- }
-
- public SNIPacket Take(SNIHandle sniHandle)
- {
- SNIPacket packet;
- if (_packets.Count > 0)
- {
- // Success - reset the packet
- packet = _packets.Pop();
- SNINativeMethodWrapper.SNIPacketReset(sniHandle, SNINativeMethodWrapper.IOType.WRITE, packet, SNINativeMethodWrapper.ConsumerNumber.SNI_Consumer_SNI);
- }
- else
- {
- // Failed to take a packet - create a new one
- packet = new SNIPacket(sniHandle);
- }
- return packet;
- }
-
- public void Add(SNIPacket packet)
- {
- if (!_disposed)
- {
- _packets.Push(packet);
- }
- else
- {
- // If we're disposed, then get rid of any packets added to us
- packet.Dispose();
- }
- }
-
- public void Clear()
- {
- while (_packets.Count > 0)
- {
- _packets.Pop().Dispose();
- }
- }
-
- public void Dispose()
- {
- if (!_disposed)
- {
- _disposed = true;
- Clear();
- }
- }
- }
-}