操作USB裝置

2021-08-02 04:44:04 字數 3220 閱讀 7932

using system;

using system.collections.generic;

using system.io;

using system.linq;

using system.runtime.interopservices;

using system.text;

using system.threading.tasks;

using system.windows;

using system.windows.controls;

using system.windows.data;

using system.windows.documents;

using system.windows.input;

using system.windows.interop;

using system.windows.media;

using system.windows.media.imaging;

using system.windows.shapes;

namespace wpf_datagrid_rowdraganddrop

private void window_loaded(object sender, routedeventargs e)

}string panfu = "";

public const int wm_devicechange = 0x219;//u盤插入後,os的底層會自動檢測到,然後向應用程式傳送「硬體裝置狀態改變「的訊息

public const int dbt_devicearrival = 0x8000; //就是用來表示u盤可用的。乙個裝置或**已被插入一塊,現在可用。

public const int dbt_configchangecanceled = 0x0019; //要求更改當前的配置(或取消停靠碼頭)已被取消。

public const int dbt_configchanged = 0x0018; //當前的配置發生了變化,由於碼頭或取消固定。

public const int dbt_customevent = 0x8006; //自定義的事件發生。 的windows nt 4.0和windows 95:此值不支援。

public const int dbt_devicequeryremove = 0x8001; //審批要求刪除乙個裝置或**作品。任何應用程式也不能否認這一要求,並取消刪除。

public const int dbt_devicequeryremovefailed = 0x8002; //請求刪除乙個裝置或**片已被取消。

public const int dbt_deviceremovecomplete = 0x8004; //乙個裝置或**片已被刪除。

public const int dbt_deviceremovepending = 0x8003; //乙個裝置或**一塊即將被刪除。不能否認的。

public const int dbt_devicetypespecific = 0x8005; //乙個裝置特定事件發生。

public const int dbt_devnodes_changed = 0x0007; //一種裝置已被新增到或從系統中刪除。

public const int dbt_querychangeconfig = 0x0017; //許可是要求改變目前的配置(碼頭或取消固定)。

public const int dbt_userdefined = 0xffff; //此訊息的含義是使用者定義的

public const uint generic_read = 0x80000000;

public const int generic_write = 0x40000000;

public const int file_share_read = 0x1;

public const int file_share_write = 0x2;

public const int ioctl_storage_eject_media = 0x2d4808;

private intptr wndproc(intptr hwnd, int msg, intptr wparam, intptr lparam, ref bool handled)

return false;

});break;

case dbt_deviceremovecomplete:

messagebox.show("u盤解除安裝");

break;

default:

break;}}

return intptr.zero;

}private void dirsearch(string path)

foreach (string d in directory.getdirectories(path))

}catch (exception)

}private void button_click(object sender, routedeventargs e)

[dllimport("kernel32.dll", setlasterror = true, charset = charset.auto)]

private static extern intptr createfile(

string lpfilename,

uint dwdesireaccess,

uint dwsharemode,

intptr securityattributes,

uint dwcreationdisposition,

uint dwflagsandattributes,

intptr htemplatefile);

[dllimport("kernel32.dll", exactspelling = true, setlasterror = true, charset = charset.auto)]

private static extern bool deviceiocontrol(

intptr hdevice,

uint dwiocontrolcode,

intptr lpinbuffer,

uint ninbuffersize,

intptr lpoutbuffer,

uint noutbuffersize,

out uint lpbytesreturned,);}

}

USB裝置分類

usb裝置分類 usb從裝置的分類可以從usb裝置介面描述符 standard inte ce descriptor 對應的的binte ceclass這乙個byte得到。binte ceclass的典型 為1,2,3,6,7,8,9,10,11,255。分別代表意思為 1 audio 表示乙個音訊...

USB裝置分類

usb裝置分類 usb從裝置的分類可以從usb裝置介面描述符 standard inte ce descriptor 對應的的binte ceclass這乙個byte得到。binte ceclass的典型 為1,2,3,6,7,8,9,10,11,255。分別代表意思為 1 audio 表示乙個音訊...

USB裝置驅動

1.linux usb架構 usb通訊都是由host端發起的。usb裝置驅動程式分配並初始化乙個urb發給usb core,usb core改一改,發給usb主機控制器驅動,usb主機控制器驅動把它解析成包,在匯流排上進行傳送。usb core是由核心實現的,其實也就是把host control d...