Pregunta

Me gustaría ciclo (simular desenchufe y volver a insertar) un dispositivo USB (módem) después de un determinado evento ha disparado. He encontrado una muestra de CodeProject:

  

http://www.codeproject.com/KB/system/usbeject.aspx

Eso me permite identificar y eyectar el dispositivo a través de su serie no volátil, pero lo necesito para reciclar, no sólo expulsar.

He leído esto:

  

http: //www.tech-archive.net/Archive/Development/microsoft.public.development.device.drivers/2005-02/1292.html

No entiendo a él.

Esto ha sido mencionado en otros puestos relacionados con USB:

  

http://www.codeproject.com/KB/system/DriveDetector.aspx

No es relevante para mi problema.

¿Fue útil?

Solución

tengo trabajo mediante el uso de una herramienta de línea de comandos llamada devcon, que luego me llamó desde código.

Caído devcon.exe en una de las rutas del sistema por lo que funciona en todas partes.

Devcon: devcon

llamada: DEVCON Eliminar * USB "* MI_01"

A continuación, se llama: DEVCON vuelva a explorar

código:

 System.Diagnostics.Process proc = new System.Diagnostics.Process();
 proc.StartInfo.FileName = "DEVCON";
 proc.StartInfo.Arguments = "Remove *usb"*MI_01";
 proc.StartInfo.RedirectStandardError = true;
 proc.StartInfo.RedirectStandardOutput = true;
 proc.StartInfo.UseShellExecute = false;
 proc.Start();

Otros consejos

Puede utilizar el C # Hardware ayudante Lib y añadir la ResetDevice función .

Sólo asegúrese de añadir

public const int DICS_PROPCHANGE = ((0x00000003)); 

en la public class Native bajo // PARMS,

public bool ResetDevice( IntPtr hDevInfo, IntPtr devInfoData )
{
int szOfPcp;
IntPtr ptrToPcp;
int szDevInfoData;
IntPtr ptrToDevInfoData;

Native.SP_PROPCHANGE_PARAMS pcp = new Native.SP_PROPCHANGE_PARAMS();
pcp.ClassInstallHeader.cbSize = Marshal.SizeOf(typeof(Native.SP_CLASSINSTALL_HEADER));
pcp.ClassInstallHeader.InstallFunction = Native.DIF_PROPERTYCHANGE;
pcp.StateChange = Native.DICS_PROPCHANGE; // for reset
pcp.Scope = Native.DICS_FLAG_CONFIGSPECIFIC;
pcp.HwProfile = 0;

szOfPcp = Marshal.SizeOf(pcp);
ptrToPcp = Marshal.AllocHGlobal(szOfPcp);
Marshal.StructureToPtr(pcp, ptrToPcp, true);
szDevInfoData = Marshal.SizeOf(devInfoData);
ptrToDevInfoData = Marshal.AllocHGlobal(szDevInfoData);
Marshal.StructureToPtr(devInfoData, ptrToDevInfoData, true);

bool rslt1 = Native.SetupDiSetClassInstallParams(hDevInfo, ptrToDevInfoData, ptrToPcp, Marshal.SizeOf(typeof(Native.SP_PROPCHANGE_PARAMS)));
bool rstl2 = Native.SetupDiCallClassInstaller(Native.DIF_PROPERTYCHANGE, hDevInfo, ptrToDevInfoData);

if (rslt1 && rstl2)
{
    return true;
}
return false;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top