mirror of
https://github.com/Ryujinx/Opentk.git
synced 2025-02-03 07:11:03 +00:00
[Win] Check registry keys before accessing
Fixes crashes when using OpenTK over the Remote Desktop Client for Mac (version 2010).
This commit is contained in:
parent
811126c47b
commit
1b3b510376
|
@ -103,10 +103,11 @@ namespace OpenTK.Platform.Windows
|
||||||
// This is a keyboard or USB keyboard device. In the latter case, discover if it really is a
|
// This is a keyboard or USB keyboard device. In the latter case, discover if it really is a
|
||||||
// keyboard device by qeurying the registry.
|
// keyboard device by qeurying the registry.
|
||||||
RegistryKey regkey = GetRegistryKey(name);
|
RegistryKey regkey = GetRegistryKey(name);
|
||||||
string deviceDesc = (string)regkey.GetValue("DeviceDesc");
|
if (regkey == null)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
string deviceDesc = (string)regkey.GetValue("DeviceDesc");
|
||||||
string deviceClass = (string)regkey.GetValue("Class");
|
string deviceClass = (string)regkey.GetValue("Class");
|
||||||
|
|
||||||
string deviceClassGUID = (string)regkey.GetValue("ClassGUID"); // for windows 8 support via OpenTK issue 3198
|
string deviceClassGUID = (string)regkey.GetValue("ClassGUID"); // for windows 8 support via OpenTK issue 3198
|
||||||
|
|
||||||
// making a guess at backwards compatability. Not sure what older windows returns in these cases...
|
// making a guess at backwards compatability. Not sure what older windows returns in these cases...
|
||||||
|
@ -205,10 +206,15 @@ namespace OpenTK.Platform.Windows
|
||||||
|
|
||||||
static RegistryKey GetRegistryKey(string name)
|
static RegistryKey GetRegistryKey(string name)
|
||||||
{
|
{
|
||||||
|
if (name.Length < 4)
|
||||||
|
return null;
|
||||||
|
|
||||||
// remove the \??\
|
// remove the \??\
|
||||||
name = name.Substring(4);
|
name = name.Substring(4);
|
||||||
|
|
||||||
string[] split = name.Split('#');
|
string[] split = name.Split('#');
|
||||||
|
if (split.Length < 3)
|
||||||
|
return null;
|
||||||
|
|
||||||
string id_01 = split[0]; // ACPI (Class code)
|
string id_01 = split[0]; // ACPI (Class code)
|
||||||
string id_02 = split[1]; // PNP0303 (SubClass code)
|
string id_02 = split[1]; // PNP0303 (SubClass code)
|
||||||
|
|
|
@ -110,11 +110,13 @@ namespace OpenTK.Platform.Windows
|
||||||
// This is a mouse or a USB mouse device. In the latter case, discover if it really is a
|
// This is a mouse or a USB mouse device. In the latter case, discover if it really is a
|
||||||
// mouse device by qeurying the registry.
|
// mouse device by qeurying the registry.
|
||||||
RegistryKey regkey = FindRegistryKey(name);
|
RegistryKey regkey = FindRegistryKey(name);
|
||||||
string deviceDesc = (string)regkey.GetValue("DeviceDesc");
|
if (regkey == null)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
string deviceDesc = (string)regkey.GetValue("DeviceDesc");
|
||||||
string deviceClass = (string)regkey.GetValue("Class") as string;
|
string deviceClass = (string)regkey.GetValue("Class") as string;
|
||||||
if(deviceClass == null){
|
if(deviceClass == null)
|
||||||
|
{
|
||||||
// Added to address OpenTK issue 3198 with mouse on Windows 8
|
// Added to address OpenTK issue 3198 with mouse on Windows 8
|
||||||
string deviceClassGUID = (string)regkey.GetValue("ClassGUID");
|
string deviceClassGUID = (string)regkey.GetValue("ClassGUID");
|
||||||
RegistryKey classGUIDKey = Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\Control\Class\" + deviceClassGUID);
|
RegistryKey classGUIDKey = Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\Control\Class\" + deviceClassGUID);
|
||||||
|
@ -266,10 +268,15 @@ namespace OpenTK.Platform.Windows
|
||||||
|
|
||||||
static RegistryKey FindRegistryKey(string name)
|
static RegistryKey FindRegistryKey(string name)
|
||||||
{
|
{
|
||||||
|
if (name.Length < 4)
|
||||||
|
return null;
|
||||||
|
|
||||||
// remove the \??\
|
// remove the \??\
|
||||||
name = name.Substring(4);
|
name = name.Substring(4);
|
||||||
|
|
||||||
string[] split = name.Split('#');
|
string[] split = name.Split('#');
|
||||||
|
if (split.Length < 3)
|
||||||
|
return null;
|
||||||
|
|
||||||
string id_01 = split[0]; // ACPI (Class code)
|
string id_01 = split[0]; // ACPI (Class code)
|
||||||
string id_02 = split[1]; // PNP0303 (SubClass code)
|
string id_02 = split[1]; // PNP0303 (SubClass code)
|
||||||
|
|
Loading…
Reference in a new issue