1. using System;
  2. using System.Runtime.InteropServices;
  3. using System.Security;
  4. namespace Splash
  5. {
  6. #region Kernel32
  7. [SuppressUnmanagedCodeSecurity]
  8. internal static class Kernel32
  9. {
  10. /// <summary>
  11. /// 无效的文件句柄
  12. /// </summary>
  13. public static readonly IntPtr INVALID_HANDLE_VALUE = new IntPtr(-1);
  14. #region CreateFile
  15. [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
  16. public static extern IntPtr CreateFile(
  17. String fileName,
  18. [MarshalAs(UnmanagedType.U4)] NativeFileAccess fileAccess,
  19. [MarshalAs(UnmanagedType.U4)] NativeFileShare fileShare,
  20. IntPtr securityAttributes,
  21. [MarshalAs(UnmanagedType.U4)] NativeFileMode creationDisposition,
  22. NativeFileFlag flags,
  23. IntPtr template
  24. );
  25. [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
  26. public static extern IntPtr CreateFile(
  27. String fileName,
  28. [MarshalAs(UnmanagedType.U4)] NativeFileAccess fileAccess,
  29. [MarshalAs(UnmanagedType.U4)] NativeFileShare fileShare,
  30. IntPtr securityAttributes,
  31. [MarshalAs(UnmanagedType.U4)] NativeFileMode creationDisposition,
  32. IntPtr flags,
  33. IntPtr template
  34. );
  35. #endregion
  36. [DllImport("kernel32.dll", SetLastError = true)]
  37. [return: MarshalAs(UnmanagedType.Bool)]
  38. public static extern Boolean CloseHandle(IntPtr hFile);
  39. #region ReadFile
  40. [DllImport("kernel32.dll", SetLastError = true)]
  41. public static extern Boolean ReadFile(
  42. IntPtr hFile,
  43. [Out] Byte[] lpBuffer,
  44. Int32 nNumberOfBytesToRead,
  45. out Int32 lpNumberOfBytesRead,
  46. [In] ref System.Threading.NativeOverlapped lpOverlapped
  47. );
  48. [DllImport("kernel32.dll", SetLastError = true)]
  49. public static extern Boolean ReadFile(
  50. IntPtr hFile,
  51. [Out] Byte[] lpBuffer,
  52. Int32 nNumberOfBytesToRead,
  53. IntPtr lpNumberOfBytesRead,
  54. [In] ref System.Threading.NativeOverlapped lpOverlapped
  55. );
  56. [DllImport("kernel32.dll", SetLastError = true)]
  57. public static extern Boolean ReadFile(
  58. IntPtr hFile,
  59. [Out] Byte[] lpBuffer,
  60. Int32 nNumberOfBytesToRead,
  61. out Int32 lpNumberOfBytesRead,
  62. IntPtr lpOverlapped
  63. );
  64. #endregion
  65. #region WriteFile
  66. [DllImport("kernel32.dll")]
  67. public static extern Boolean WriteFile(
  68. IntPtr hFile,
  69. Byte[] lpBuffer,
  70. Int32 nNumberOfBytesToWrite,
  71. out Int32 lpNumberOfBytesWritten,
  72. [In] ref System.Threading.NativeOverlapped lpOverlapped
  73. );
  74. [DllImport("kernel32.dll")]
  75. public static extern Boolean WriteFile(
  76. IntPtr hFile,
  77. Byte[] lpBuffer,
  78. Int32 nNumberOfBytesToWrite,
  79. IntPtr lpNumberOfBytesWritten,
  80. [In] ref System.Threading.NativeOverlapped lpOverlapped
  81. );
  82. [DllImport("kernel32.dll")]
  83. public static extern Boolean WriteFile(
  84. IntPtr hFile,
  85. Byte[] lpBuffer,
  86. Int32 nNumberOfBytesToWrite,
  87. IntPtr lpNumberOfBytesWritten,
  88. IntPtr lpOverlapped
  89. );
  90. #endregion
  91. [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
  92. public static extern Boolean GetOverlappedResult(
  93. IntPtr hFile,
  94. [In] ref System.Threading.NativeOverlapped lpOverlapped,
  95. out Int32 lpNumberOfBytesTransferred,
  96. Boolean bWait
  97. );
  98. }
  99. #endregion
  100. #region ENUM
  101. [Flags]
  102. internal enum NativeFileAccess : uint
  103. {
  104. GENERIC_READ = (0x80000000),
  105. GENERIC_WRITE = (0x40000000),
  106. GENERIC_EXECUTE = (0x20000000),
  107. GENERIC_ALL = (0x10000000),
  108. FILE_SPECIAL = 0,
  109. FILE_APPEND_DATA = (0x0004),    // 文件
  110. FILE_READ_DATA = (0x0001),      // 文件和管道
  111. FILE_WRITE_DATA = (0x0002),     // 文件和管道
  112. FILE_READ_EA = (0x0008),        // 文件和目录
  113. FILE_WRITE_EA = (0x0010),       // 文件和目录
  114. FILE_READ_ATTRIBUTES = (0x0080),    // 所有
  115. FILE_WRITE_ATTRIBUTES = (0x0100),   // 所有
  116. DELETE = 0x00010000,
  117. READ_CONTROL = (0x00020000),
  118. WRITE_DAC = (0x00040000),
  119. WRITE_OWNER = (0x00080000),
  120. SYNCHRONIZE = (0x00100000),
  121. STANDARD_RIGHTS_REQUIRED = (0x000F0000),
  122. STANDARD_RIGHTS_READ = (READ_CONTROL),
  123. STANDARD_RIGHTS_WRITE = (READ_CONTROL),
  124. STANDARD_RIGHTS_EXECUTE = (READ_CONTROL),
  125. STANDARD_RIGHTS_ALL = (0x001F0000),
  126. SPECIFIC_RIGHTS_ALL = (0x0000FFFF),
  127. FILE_GENERIC_READ = (STANDARD_RIGHTS_READ | FILE_READ_DATA | FILE_READ_ATTRIBUTES | FILE_READ_EA | SYNCHRONIZE),
  128. FILE_GENERIC_WRITE = (STANDARD_RIGHTS_WRITE | FILE_WRITE_DATA | FILE_WRITE_ATTRIBUTES | FILE_WRITE_EA | FILE_APPEND_DATA | SYNCHRONIZE),
  129. SPECIAL = 0
  130. }
  131. internal enum NativeFileMode : uint
  132. {
  133. CREATE_NEW = 1,
  134. CREATE_ALWAYS = 2,
  135. OPEN_EXISTING = 3,
  136. OPEN_ALWAYS = 4,
  137. TRUNCATE_EXISTING = 5,
  138. }
  139. [Flags]
  140. internal enum NativeFileShare : uint
  141. {
  142. NONE = 0,
  143. FILE_SHARE_READ = 0x00000001,
  144. FILE_SHARE_WRITE = 0x00000002,
  145. FILE_SHARE_DEELETE = 0x00000004,
  146. }
  147. [Flags]
  148. internal enum NativeFileFlag : uint
  149. {
  150. FILE_ATTRIBUTE_READONLY = 0x00000001,
  151. FILE_ATTRIBUTE_HIDDEN = 0x00000002,
  152. FILE_ATTRIBUTE_SYSTEM = 0x00000004,
  153. FILE_ATTRIBUTE_DIRECTORY = 0x00000010,
  154. FILE_ATTRIBUTE_ARCHIVE = 0x00000020,
  155. FILE_ATTRIBUTE_DEVICE = 0x00000040,
  156. FILE_ATTRIBUTE_NORMAL = 0x00000080,
  157. FILE_ATTRIBUTE_TEMPORARY = 0x00000100,
  158. FILE_ATTRIBUTE_SPARSE_FILE = 0x00000200,
  159. FILE_ATTRIBUTE_REPARSE_POINT = 0x00000400,
  160. FILE_ATTRIBUTE_COMPRESSED = 0x00000800,
  161. FILE_ATTRIBUTE_OFFLINE = 0x00001000,
  162. FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = 0x00002000,
  163. FILE_ATTRIBUTE_ENCRYPTED = 0x00004000,
  164. FILE_FLAG_WRITE_THROUGH = 0x80000000,
  165. FILE_FLAG_OVERLAPPED = 0x40000000,
  166. FILE_FLAG_NO_BUFFERING = 0x20000000,
  167. FILE_FLAG_RANDOM_ACCESS = 0x10000000,
  168. FILE_FLAG_SEQUENTIAL_SCAN = 0x08000000,
  169. FILE_FLAG_DELETE_ON_CLOSE = 0x04000000,
  170. FILE_FLAG_BACKUP_SEMANTICS = 0x02000000,
  171. FILE_FLAG_POSIX_SEMANTICS = 0x01000000,
  172. FILE_FLAG_OPEN_REPARSE_POINT = 0x00200000,
  173. FILE_FLAG_OPEN_NO_RECALL = 0x00100000,
  174. FILE_FLAG_FIRST_PIPE_INSTANCE = 0x00080000,
  175. }
  176. #endregion
  177. }

C#USB设备枚举Kernel32的PInvoke的更多相关文章

  1. C#:USB设备枚举 --转自CSDN作者:Splash

    (一)DeviceIoControl的PInvoke /* ---------------------------------------------------------- 文件名称:Device ...

  2. usb设备枚举过程

    USB主机在检测到USB设备插入后,就要对设备进行枚举了.为什么要枚举呢?枚举就是从设备读取一些信息,知道设备是什么样的设备,如何进行通信,这样主机就可以根据这些信息来加载合适的驱动程序.调试USB设 ...

  3. USB设备驱动之设备初始化(设备枚举)

    USB设备从接入HUB到正常工作之前.都属于设备枚举阶段.所谓设备枚举.就是让host控制器认识USB设备,并为其准备资源.建立好主机与设备间的数据传递机制. 该阶段的工作,是USB通信协议规定的,所 ...

  4. Linux下usb设备驱动详解

    USB驱动分为两块,一块是USB的bus驱动,这个东西,Linux内核已经做好了,我们可以不管,我们只需要了解它的功能.形象的说,USB的bus驱动相当于铺出一条路来,让所有的信息都可以通过这条USB ...

  5. USB 设备驱动(写给自己看的)

    集线器与控制器(USB地址7bit) 设备,配置,端点,接口 USB1.0(低速1.2),1.1(全速450m),2.0(高速,电流传输)区别 引脚4根(V,D-,D+,gnd),miniUSB增加 ...

  6. Windows下USB磁盘开发系列二:枚举系统中所有USB设备

    上篇 <Windows下USB磁盘开发系列一:枚举系统中U盘的盘符>介绍了很简单的获取系统U盘盘符的办法,现在介绍下如何枚举系统中所有USB设备(不光是U盘). 主要调用的API如下: 1 ...

  7. USB协议-USB设备的枚举过程

    USB主机在检测到USB设备插入后,就要对设备进行枚举了.为什么要枚举?枚举就是从设备读取各种描述符信息,这样主机就可以根据这些信息来加载合适的驱动程序,从而知道设备是什么样的设备,如何进行通信等. ...

  8. MFC枚举USB设备碰到的一个疑难,还没解决

    代码如下: 打开USB Hub设备之后,返回句柄hHubDevice,然后使用EnumerateHubPorts来枚举Hub的端 口.疑问在代码的中文注释中. bool CUsbEnumHub::En ...

  9. 浅析USB之设备枚举

    当一个USB设备插入主机后,会有以下活动: 配上状态图

随机推荐

  1. Unity3d- 资源

    Data与Resources文件夹一般只读文件放到Resources目录Data用于新建的文件或者要修改的文件============================================= ...

  2. win server 2003 x64 IIS配置

    新装IIS第一个报错 The 'Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine 原因是 服务器 IIS ...

  3. 基于Kafka消息驱动最终一致事务(二)

    实现用例分析 上篇基于Kafka消息驱动最终一致事务(一)介绍BASE的理论,接着我们引入一个实例看如何实现BASE,我们会用图7显示的算法实现BASE.

  4. 学习笔记之Visual Studio Code & Clang

    Mac上XCode太占空间,卸载然后安装VSCode和Clang.在VSCode中再安装extension C/C++和Code Runner,配置Tasks: Configure Task,就可以开 ...

  5. go中的make和new的区别

    适用范围:make 只能创建内建类型(slice map channel), new 则是可以对所有类型进行内存分配 返回值: new 返回指针, make 返回引用 填充值: new 填充零值, m ...

  6. ocr 文字区域检测及识别

    ocr 文字区域检测及识别 # coding=utf- from PIL import Image, ImageFilter, ImageEnhance from skimage.filters im ...

  7. [UE4]一个好用的虚幻4插件,根据资源名称动态加载资源,GetCurrentLeveName(获得当前地图名称)

    下载地址 一.下载与UE4相对应的版本 二.在工程根目录新建Plugins目录,解压插件. 三.如果工程已经打开,则需要重新打开   四.重新打开工程后,右下角会有提示有新插件可用. 五.这个插件提供 ...

  8. [UE4]射击起点、终点的计算方法

    一.射击起点,这个简单,一般是以角色的相机位置为作为射击起点,而不是枪口的位置作为起点 二.射击终点,角色朝向 * 射击距离 + 射击起点 角色朝向:单位向量 角色朝向 * 射击距离:向量长度 向量长 ...

  9. RHEL6安装配置DNS服务

    RHEL6安装配置DNS服务 作者:Eric 微信:loveoracle11g 安装软件包 [root@rac1 ~]# yum -y install bind bind-chroot caching ...

  10. Windows 2016 无域故障转移群集部署方法 超详细图文教程 (二)

    上一章我们配置了一台设备,接着根据那个配置,配置其它设备.这里我配置了三台设备: 创建故障转移群集,并添加设备. 之前的操作都是每台服务器都要做的,而这个操作,只需要任选一台去做即可,我这里选d1 1 ...