SCardEstablishContextに問題があり、 0を返しますが、 0も処理します。Integerの代わりにIntPtrを使用します。
Public Declare Function SCardEstablishContext Lib "Winscard.dll" (ByVal dwScope As Integer, _
ByVal pvReserved1 As Integer, _
ByVal pvReserved2 As Integer, _
ByRef phContext As IntPtr) As Integer
phContext は、Windows x64 (Windows 8 x64 および RDP テスト済みの Windows 2008) で有効な値を格納します。ハンドルとして使用する場合は、他の「Integer」も「IntPtr」に置き換えます。
Public Declare Function SCardConnect Lib "Winscard.dll" Alias "SCardConnectA" (ByVal hContext As IntPtr, _
ByVal szReaderName As String, _
ByVal dwShareMode As Integer, _
ByVal dwPrefProtocol As Integer, _
ByRef hCard As IntPtr, _
ByRef ActiveProtocol As IntPtr) As Integer