C#USB设备枚举Kernel32的PInvoke
- using System;
- using System.Runtime.InteropServices;
- using System.Security;
- namespace Splash
- {
- #region Kernel32
- [SuppressUnmanagedCodeSecurity]
- internal static class Kernel32
- {
- /// <summary>
- /// 无效的文件句柄
- /// </summary>
- public static readonly IntPtr INVALID_HANDLE_VALUE = new IntPtr(-1);
- #region CreateFile
- [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
- public static extern IntPtr CreateFile(
- String fileName,
- [MarshalAs(UnmanagedType.U4)] NativeFileAccess fileAccess,
- [MarshalAs(UnmanagedType.U4)] NativeFileShare fileShare,
- IntPtr securityAttributes,
- [MarshalAs(UnmanagedType.U4)] NativeFileMode creationDisposition,
- NativeFileFlag flags,
- IntPtr template
- );
- [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
- public static extern IntPtr CreateFile(
- String fileName,
- [MarshalAs(UnmanagedType.U4)] NativeFileAccess fileAccess,
- [MarshalAs(UnmanagedType.U4)] NativeFileShare fileShare,
- IntPtr securityAttributes,
- [MarshalAs(UnmanagedType.U4)] NativeFileMode creationDisposition,
- IntPtr flags,
- IntPtr template
- );
- #endregion
- [DllImport("kernel32.dll", SetLastError = true)]
- [return: MarshalAs(UnmanagedType.Bool)]
- public static extern Boolean CloseHandle(IntPtr hFile);
- #region ReadFile
- [DllImport("kernel32.dll", SetLastError = true)]
- public static extern Boolean ReadFile(
- IntPtr hFile,
- [Out] Byte[] lpBuffer,
- Int32 nNumberOfBytesToRead,
- out Int32 lpNumberOfBytesRead,
- [In] ref System.Threading.NativeOverlapped lpOverlapped
- );
- [DllImport("kernel32.dll", SetLastError = true)]
- public static extern Boolean ReadFile(
- IntPtr hFile,
- [Out] Byte[] lpBuffer,
- Int32 nNumberOfBytesToRead,
- IntPtr lpNumberOfBytesRead,
- [In] ref System.Threading.NativeOverlapped lpOverlapped
- );
- [DllImport("kernel32.dll", SetLastError = true)]
- public static extern Boolean ReadFile(
- IntPtr hFile,
- [Out] Byte[] lpBuffer,
- Int32 nNumberOfBytesToRead,
- out Int32 lpNumberOfBytesRead,
- IntPtr lpOverlapped
- );
- #endregion
- #region WriteFile
- [DllImport("kernel32.dll")]
- public static extern Boolean WriteFile(
- IntPtr hFile,
- Byte[] lpBuffer,
- Int32 nNumberOfBytesToWrite,
- out Int32 lpNumberOfBytesWritten,
- [In] ref System.Threading.NativeOverlapped lpOverlapped
- );
- [DllImport("kernel32.dll")]
- public static extern Boolean WriteFile(
- IntPtr hFile,
- Byte[] lpBuffer,
- Int32 nNumberOfBytesToWrite,
- IntPtr lpNumberOfBytesWritten,
- [In] ref System.Threading.NativeOverlapped lpOverlapped
- );
- [DllImport("kernel32.dll")]
- public static extern Boolean WriteFile(
- IntPtr hFile,
- Byte[] lpBuffer,
- Int32 nNumberOfBytesToWrite,
- IntPtr lpNumberOfBytesWritten,
- IntPtr lpOverlapped
- );
- #endregion
- [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
- public static extern Boolean GetOverlappedResult(
- IntPtr hFile,
- [In] ref System.Threading.NativeOverlapped lpOverlapped,
- out Int32 lpNumberOfBytesTransferred,
- Boolean bWait
- );
- }
- #endregion
- #region ENUM
- [Flags]
- internal enum NativeFileAccess : uint
- {
- GENERIC_READ = (0x80000000),
- GENERIC_WRITE = (0x40000000),
- GENERIC_EXECUTE = (0x20000000),
- GENERIC_ALL = (0x10000000),
- FILE_SPECIAL = 0,
- FILE_APPEND_DATA = (0x0004), // 文件
- FILE_READ_DATA = (0x0001), // 文件和管道
- FILE_WRITE_DATA = (0x0002), // 文件和管道
- FILE_READ_EA = (0x0008), // 文件和目录
- FILE_WRITE_EA = (0x0010), // 文件和目录
- FILE_READ_ATTRIBUTES = (0x0080), // 所有
- FILE_WRITE_ATTRIBUTES = (0x0100), // 所有
- DELETE = 0x00010000,
- READ_CONTROL = (0x00020000),
- WRITE_DAC = (0x00040000),
- WRITE_OWNER = (0x00080000),
- SYNCHRONIZE = (0x00100000),
- STANDARD_RIGHTS_REQUIRED = (0x000F0000),
- STANDARD_RIGHTS_READ = (READ_CONTROL),
- STANDARD_RIGHTS_WRITE = (READ_CONTROL),
- STANDARD_RIGHTS_EXECUTE = (READ_CONTROL),
- STANDARD_RIGHTS_ALL = (0x001F0000),
- SPECIFIC_RIGHTS_ALL = (0x0000FFFF),
- FILE_GENERIC_READ = (STANDARD_RIGHTS_READ | FILE_READ_DATA | FILE_READ_ATTRIBUTES | FILE_READ_EA | SYNCHRONIZE),
- FILE_GENERIC_WRITE = (STANDARD_RIGHTS_WRITE | FILE_WRITE_DATA | FILE_WRITE_ATTRIBUTES | FILE_WRITE_EA | FILE_APPEND_DATA | SYNCHRONIZE),
- SPECIAL = 0
- }
- internal enum NativeFileMode : uint
- {
- CREATE_NEW = 1,
- CREATE_ALWAYS = 2,
- OPEN_EXISTING = 3,
- OPEN_ALWAYS = 4,
- TRUNCATE_EXISTING = 5,
- }
- [Flags]
- internal enum NativeFileShare : uint
- {
- NONE = 0,
- FILE_SHARE_READ = 0x00000001,
- FILE_SHARE_WRITE = 0x00000002,
- FILE_SHARE_DEELETE = 0x00000004,
- }
- [Flags]
- internal enum NativeFileFlag : uint
- {
- FILE_ATTRIBUTE_READONLY = 0x00000001,
- FILE_ATTRIBUTE_HIDDEN = 0x00000002,
- FILE_ATTRIBUTE_SYSTEM = 0x00000004,
- FILE_ATTRIBUTE_DIRECTORY = 0x00000010,
- FILE_ATTRIBUTE_ARCHIVE = 0x00000020,
- FILE_ATTRIBUTE_DEVICE = 0x00000040,
- FILE_ATTRIBUTE_NORMAL = 0x00000080,
- FILE_ATTRIBUTE_TEMPORARY = 0x00000100,
- FILE_ATTRIBUTE_SPARSE_FILE = 0x00000200,
- FILE_ATTRIBUTE_REPARSE_POINT = 0x00000400,
- FILE_ATTRIBUTE_COMPRESSED = 0x00000800,
- FILE_ATTRIBUTE_OFFLINE = 0x00001000,
- FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = 0x00002000,
- FILE_ATTRIBUTE_ENCRYPTED = 0x00004000,
- FILE_FLAG_WRITE_THROUGH = 0x80000000,
- FILE_FLAG_OVERLAPPED = 0x40000000,
- FILE_FLAG_NO_BUFFERING = 0x20000000,
- FILE_FLAG_RANDOM_ACCESS = 0x10000000,
- FILE_FLAG_SEQUENTIAL_SCAN = 0x08000000,
- FILE_FLAG_DELETE_ON_CLOSE = 0x04000000,
- FILE_FLAG_BACKUP_SEMANTICS = 0x02000000,
- FILE_FLAG_POSIX_SEMANTICS = 0x01000000,
- FILE_FLAG_OPEN_REPARSE_POINT = 0x00200000,
- FILE_FLAG_OPEN_NO_RECALL = 0x00100000,
- FILE_FLAG_FIRST_PIPE_INSTANCE = 0x00080000,
- }
- #endregion
- }
C#USB设备枚举Kernel32的PInvoke的更多相关文章
- C#:USB设备枚举 --转自CSDN作者:Splash
(一)DeviceIoControl的PInvoke /* ---------------------------------------------------------- 文件名称:Device ...
- usb设备枚举过程
USB主机在检测到USB设备插入后,就要对设备进行枚举了.为什么要枚举呢?枚举就是从设备读取一些信息,知道设备是什么样的设备,如何进行通信,这样主机就可以根据这些信息来加载合适的驱动程序.调试USB设 ...
- USB设备驱动之设备初始化(设备枚举)
USB设备从接入HUB到正常工作之前.都属于设备枚举阶段.所谓设备枚举.就是让host控制器认识USB设备,并为其准备资源.建立好主机与设备间的数据传递机制. 该阶段的工作,是USB通信协议规定的,所 ...
- Linux下usb设备驱动详解
USB驱动分为两块,一块是USB的bus驱动,这个东西,Linux内核已经做好了,我们可以不管,我们只需要了解它的功能.形象的说,USB的bus驱动相当于铺出一条路来,让所有的信息都可以通过这条USB ...
- USB 设备驱动(写给自己看的)
集线器与控制器(USB地址7bit) 设备,配置,端点,接口 USB1.0(低速1.2),1.1(全速450m),2.0(高速,电流传输)区别 引脚4根(V,D-,D+,gnd),miniUSB增加 ...
- Windows下USB磁盘开发系列二:枚举系统中所有USB设备
上篇 <Windows下USB磁盘开发系列一:枚举系统中U盘的盘符>介绍了很简单的获取系统U盘盘符的办法,现在介绍下如何枚举系统中所有USB设备(不光是U盘). 主要调用的API如下: 1 ...
- USB协议-USB设备的枚举过程
USB主机在检测到USB设备插入后,就要对设备进行枚举了.为什么要枚举?枚举就是从设备读取各种描述符信息,这样主机就可以根据这些信息来加载合适的驱动程序,从而知道设备是什么样的设备,如何进行通信等. ...
- MFC枚举USB设备碰到的一个疑难,还没解决
代码如下: 打开USB Hub设备之后,返回句柄hHubDevice,然后使用EnumerateHubPorts来枚举Hub的端 口.疑问在代码的中文注释中. bool CUsbEnumHub::En ...
- 浅析USB之设备枚举
当一个USB设备插入主机后,会有以下活动: 配上状态图
随机推荐
- JAVA面向对象编程之购物车界面的设计与功能的实现
1.小组成员及分工 小组成员 负责工作 兰泽祥 负责总体界面.Git代码库 吴修恩 负责MVC模式.类名包名的规范化 2.Git 仓库地址 仓库地址:https://gitee.com/lanzexi ...
- Flask--四种请求钩子函数
请求钩子函数:请求前,请求后需要做的处理 @app.before_first_request-在第一次请求之前执行 @app.before_request-在每一次请求之前执行 @app.after_ ...
- C++进阶--结构体和类
// 单纯从语言上来说,两者唯一的区别是,默认成员是公有还是私有 // 从使用习惯上 // 小的消极对象,包含公有数据,没有或仅有很少的基本的成员函数 -- 数据容器 struct Person_t ...
- Hadoop 管理工具HUE配置-filebrowser配置
Hue提供了图形化截面管理HDFS数据,可谓之非常方便,但是在配置上,还是有点麻烦的. 1 /home/hadoop/software/cloud/hue/desktop/conf/pseudo-di ...
- C++之二阶构造模式
前言:C++中经常会因为调用系统资源失败导致出现BUG,所以在类调用构造函数需要分配系统资源时会出现BUG,从而导致类对象虽然被创建,但是只是个半成品,为了避免这种情况需要使用二阶构造模式 二阶构造模 ...
- android 根据滑动隐藏或显示导航 类似手机QQ好友个人信息
//重写ScrollView public class NotifyingScrollView extends ScrollView { /** * @author Cyril Mottier */ ...
- CentOS用户和用户组管理
groupadd grptest1 按照系统默认的gid创建组.根uid一样,gid也是从1000开始的. groupadd -g 1008 grptest2 创建gid=1008的用户组:g ...
- 推荐7个GitHub上不错的Python机器学习项目
1.Pylearn2 [Star:2633] Pylearn是一个让机器学习研究简单化的基于Theano的库程序. 2. Scikit-learn [Star:32449] Scikit-learn是 ...
- 变量,if.elif .else判断
一,计算机的了解 基本组成:主板+cpu+内存 cpu: 主频, 核数(16) 内存:大小(8G, 16G, 32G) 型号: DDR3, DDR4, DDR5, 主频(海盗船,玩家国度) ...
- Android忘记锁屏密码如何进入手机?
Android忘记锁屏密码如何进入手机? 1.关闭手机 2.进入recovery模式(即恢复模式,记住不是挖煤模式.进入恢复模式不同手机有不同方法,三星的话安主页键,关机键和音量+(或-键), ...