デバイスの状態の検知が終わりましたので、状態操作のために『setupapi.dll』を利用します。
ここで注意点ですが、ビルドや動作状態が32bitである必要があります。
管理人は Windows7(64bit)にて動作確認を行いましたが、32bitビルドを行う必要がありました。
([IntPtr].sizeの差などの要因があるため)
まずは状態の格納を行うための構造体等を用意。
[Flags()]
internal enum SetupFlag
{Default = 1, Present = 2,AllClasses = 4, Profile = 8,DeviceInterface = (int)0x10}
internal enum Function
{
Select = 1,Install = 2,Properties = 4,
Remove = 5,FoundDevice = 7,PropertyChange = (int)0x12,
}
/// デバイス状態格納
internal enum StatusAction
{Enable = 1, Disable = 2,PropChange = 3, Start = 4,Stop = 5}
[Flags()]
internal enum Scope
{Global = 1, ConfigSpecific = 2,ConfigGeneral = 4}
[StructLayout(LayoutKind.Sequential)]
internal struct DeviceInfoData
{
public int Size;
public Guid ClassGuid;
public int DevInst;
public int Reserved;
}
[StructLayout(LayoutKind.Sequential)]
internal struct PropertyParameters
{
public int Size;
public Function MyFunction;
public StatusAction StateChange;
public Scope Scope;
public int Profile;
}
これらを『setupapi.dll』利用の際の引数などするための受け皿とします。
【各ページへのリンク】
→ [c#]USB接続デバイス管理 4-構造体の準備