I am trying to programatically disable the built-in webcam on my laptop.
To do this, I have been refering to Win32 API function to programmatically enable/disable device (solution by justin grant) and Enable/Disable a device programmatically with VB.Net using the setup api.
I have made some changes to target the camera instead of the touchpad (changing the GUID and the device instance ID), however I am still getting an error.
I am new to using Win32 and am confused as to what the error might be.
The following code is the segment that throws the error. Apart from changing what was mentioned above, the code is identical to that provided in the first link, so I have only posted the following code:
private static void EnableDevice(SafeDeviceInfoSetHandle handle, DeviceInfoData diData, bool enable)
{
PropertyChangeParameters @params = new PropertyChangeParameters();
// The size is just the size of the header, but we've flattened the structure.
// The header comprises the first two fields, both integer.
@params.Size = 8;
@params.DiFunction = DiFunction.PropertyChange;
@params.Scope = Scopes.Global;
if (enable)
{
@params.StateChange = StateChangeAction.Enable;
}
else
{
@params.StateChange = StateChangeAction.Disable;
}
bool result = NativeMethods.SetupDiSetClassInstallParams(handle, ref diData, ref @params, Marshal.SizeOf(@params));
if (result == false) throw new Win32Exception();
result = NativeMethods.SetupDiCallClassInstaller(DiFunction.PropertyChange, handle, ref diData);
if (result == false)
{
int err = Marshal.GetLastWin32Error();
if (err == (int)SetupApiError.NotDisableable)
throw new ArgumentException("Device can't be disabled (programmatically or in Device Manager).");
else if (err >= (int)SetupApiError.NoAssociatedClass && err <= (int)SetupApiError.OnlyValidateViaAuthenticode)
throw new Win32Exception("SetupAPI error: " + ((SetupApiError)err).ToString());
else
throw new Win32Exception();
}
}
The error appears in the if
statement at the bottom on the line:
throw new Win32Exception("SetupAPI error: " + ((SetupApiError)err).ToString());
System.ComponentModel.Win32Exception: 'SetupAPI error: InWow64'