C#:USB设备枚举(四)Kernel32的PInvoke

215 篇文章 2 订阅
120 篇文章 3 订阅

作者:Splash

转自:http://blog.csdn.net/jhqin/article/details/6931282


[csharp] view plain copy
  1. /* ---------------------------------------------------------- 
  2. 文件名称:Kernel32.cs 
  3.  
  4. 作者:秦建辉 
  5.  
  6. MSN:splashcn@msn.com 
  7. QQ:36748897 
  8.  
  9. 博客:http://blog.csdn.net/jhqin 
  10.  
  11. 开发环境: 
  12.     Visual Studio V2010 
  13.     .NET Framework 4 Client Profile 
  14.  
  15. 版本历史: 
  16.     V1.0    2011年09月05日 
  17.             实现对Kernel32.dll接口的PInvoke 
  18.  
  19. 参考资料: 
  20.     http://www.pinvoke.net/ 
  21. ------------------------------------------------------------ */  
  22. using System;  
  23. using System.Runtime.InteropServices;  
  24. using System.Security;  
  25.   
  26. namespace Splash  
  27. {  
  28.     #region Kernel32  
  29.     [SuppressUnmanagedCodeSecurity]  
  30.     internal static class Kernel32  
  31.     {  
  32.         /// <summary>  
  33.         /// 无效的文件句柄  
  34.         /// </summary>  
  35.         public static readonly IntPtr INVALID_HANDLE_VALUE = new IntPtr(-1);  
  36.  
  37.         #region CreateFile  
  38.         [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]  
  39.         public static extern IntPtr CreateFile(  
  40.             String fileName,  
  41.             [MarshalAs(UnmanagedType.U4)] NativeFileAccess fileAccess,  
  42.             [MarshalAs(UnmanagedType.U4)] NativeFileShare fileShare,  
  43.             IntPtr securityAttributes,  
  44.             [MarshalAs(UnmanagedType.U4)] NativeFileMode creationDisposition,  
  45.             NativeFileFlag flags,  
  46.             IntPtr template  
  47.             );  
  48.   
  49.         [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]  
  50.         public static extern IntPtr CreateFile(  
  51.             String fileName,  
  52.             [MarshalAs(UnmanagedType.U4)] NativeFileAccess fileAccess,  
  53.             [MarshalAs(UnmanagedType.U4)] NativeFileShare fileShare,  
  54.             IntPtr securityAttributes,  
  55.             [MarshalAs(UnmanagedType.U4)] NativeFileMode creationDisposition,  
  56.             IntPtr flags,  
  57.             IntPtr template  
  58.             );  
  59.         #endregion  
  60.   
  61.         [DllImport("kernel32.dll", SetLastError = true)]  
  62.         [return: MarshalAs(UnmanagedType.Bool)]  
  63.         public static extern Boolean CloseHandle(IntPtr hFile);  
  64.  
  65.         #region ReadFile  
  66.         [DllImport("kernel32.dll", SetLastError = true)]  
  67.         public static extern Boolean ReadFile(  
  68.             IntPtr hFile,  
  69.             [Out] Byte[] lpBuffer,  
  70.             Int32 nNumberOfBytesToRead,  
  71.             out Int32 lpNumberOfBytesRead,  
  72.             [In] ref System.Threading.NativeOverlapped lpOverlapped  
  73.             );  
  74.   
  75.         [DllImport("kernel32.dll", SetLastError = true)]  
  76.         public static extern Boolean ReadFile(  
  77.             IntPtr hFile,  
  78.             [Out] Byte[] lpBuffer,  
  79.             Int32 nNumberOfBytesToRead,  
  80.             IntPtr lpNumberOfBytesRead,  
  81.             [In] ref System.Threading.NativeOverlapped lpOverlapped  
  82.             );  
  83.   
  84.         [DllImport("kernel32.dll", SetLastError = true)]  
  85.         public static extern Boolean ReadFile(  
  86.             IntPtr hFile,  
  87.             [Out] Byte[] lpBuffer,  
  88.             Int32 nNumberOfBytesToRead,  
  89.             out Int32 lpNumberOfBytesRead,  
  90.             IntPtr lpOverlapped  
  91.             );  
  92.         #endregion  
  93.  
  94.         #region WriteFile  
  95.         [DllImport("kernel32.dll")]  
  96.         public static extern Boolean WriteFile(  
  97.             IntPtr hFile,  
  98.             Byte[] lpBuffer,  
  99.             Int32 nNumberOfBytesToWrite,  
  100.             out Int32 lpNumberOfBytesWritten,  
  101.             [In] ref System.Threading.NativeOverlapped lpOverlapped  
  102.             );  
  103.   
  104.         [DllImport("kernel32.dll")]  
  105.         public static extern Boolean WriteFile(  
  106.             IntPtr hFile,  
  107.             Byte[] lpBuffer,  
  108.             Int32 nNumberOfBytesToWrite,  
  109.             IntPtr lpNumberOfBytesWritten,  
  110.             [In] ref System.Threading.NativeOverlapped lpOverlapped  
  111.             );  
  112.   
  113.         [DllImport("kernel32.dll")]  
  114.         public static extern Boolean WriteFile(  
  115.             IntPtr hFile,  
  116.             Byte[] lpBuffer,  
  117.             Int32 nNumberOfBytesToWrite,  
  118.             IntPtr lpNumberOfBytesWritten,  
  119.             IntPtr lpOverlapped  
  120.             );  
  121.         #endregion  
  122.   
  123.         [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]  
  124.         public static extern Boolean GetOverlappedResult(  
  125.             IntPtr hFile,  
  126.             [In] ref System.Threading.NativeOverlapped lpOverlapped,  
  127.             out Int32 lpNumberOfBytesTransferred,  
  128.             Boolean bWait  
  129.             );          
  130.     }  
  131.     #endregion  
  132.  
  133.     #region ENUM  
  134.     [Flags]  
  135.     internal enum NativeFileAccess : uint  
  136.     {  
  137.         GENERIC_READ = (0x80000000),  
  138.         GENERIC_WRITE = (0x40000000),  
  139.         GENERIC_EXECUTE = (0x20000000),  
  140.         GENERIC_ALL = (0x10000000),  
  141.   
  142.         FILE_SPECIAL = 0,  
  143.         FILE_APPEND_DATA = (0x0004),    // 文件  
  144.         FILE_READ_DATA = (0x0001),      // 文件和管道  
  145.         FILE_WRITE_DATA = (0x0002),     // 文件和管道  
  146.         FILE_READ_EA = (0x0008),        // 文件和目录  
  147.         FILE_WRITE_EA = (0x0010),       // 文件和目录  
  148.         FILE_READ_ATTRIBUTES = (0x0080),    // 所有  
  149.         FILE_WRITE_ATTRIBUTES = (0x0100),   // 所有  
  150.         DELETE = 0x00010000,  
  151.         READ_CONTROL = (0x00020000),  
  152.         WRITE_DAC = (0x00040000),  
  153.         WRITE_OWNER = (0x00080000),  
  154.         SYNCHRONIZE = (0x00100000),  
  155.         STANDARD_RIGHTS_REQUIRED = (0x000F0000),  
  156.         STANDARD_RIGHTS_READ = (READ_CONTROL),  
  157.         STANDARD_RIGHTS_WRITE = (READ_CONTROL),  
  158.         STANDARD_RIGHTS_EXECUTE = (READ_CONTROL),  
  159.         STANDARD_RIGHTS_ALL = (0x001F0000),  
  160.         SPECIFIC_RIGHTS_ALL = (0x0000FFFF),  
  161.         FILE_GENERIC_READ = (STANDARD_RIGHTS_READ | FILE_READ_DATA | FILE_READ_ATTRIBUTES | FILE_READ_EA | SYNCHRONIZE),  
  162.         FILE_GENERIC_WRITE = (STANDARD_RIGHTS_WRITE | FILE_WRITE_DATA | FILE_WRITE_ATTRIBUTES | FILE_WRITE_EA | FILE_APPEND_DATA | SYNCHRONIZE),  
  163.         SPECIAL = 0  
  164.     }  
  165.   
  166.     internal enum NativeFileMode : uint  
  167.     {  
  168.         CREATE_NEW = 1,  
  169.         CREATE_ALWAYS = 2,  
  170.         OPEN_EXISTING = 3,  
  171.         OPEN_ALWAYS = 4,  
  172.         TRUNCATE_EXISTING = 5,  
  173.     }  
  174.   
  175.     [Flags]  
  176.     internal enum NativeFileShare : uint  
  177.     {  
  178.         NONE = 0,  
  179.         FILE_SHARE_READ = 0x00000001,  
  180.         FILE_SHARE_WRITE = 0x00000002,  
  181.         FILE_SHARE_DEELETE = 0x00000004,  
  182.     }  
  183.   
  184.     [Flags]  
  185.     internal enum NativeFileFlag : uint  
  186.     {  
  187.         FILE_ATTRIBUTE_READONLY = 0x00000001,  
  188.         FILE_ATTRIBUTE_HIDDEN = 0x00000002,  
  189.         FILE_ATTRIBUTE_SYSTEM = 0x00000004,  
  190.         FILE_ATTRIBUTE_DIRECTORY = 0x00000010,  
  191.         FILE_ATTRIBUTE_ARCHIVE = 0x00000020,  
  192.         FILE_ATTRIBUTE_DEVICE = 0x00000040,  
  193.         FILE_ATTRIBUTE_NORMAL = 0x00000080,  
  194.         FILE_ATTRIBUTE_TEMPORARY = 0x00000100,  
  195.         FILE_ATTRIBUTE_SPARSE_FILE = 0x00000200,  
  196.         FILE_ATTRIBUTE_REPARSE_POINT = 0x00000400,  
  197.         FILE_ATTRIBUTE_COMPRESSED = 0x00000800,  
  198.         FILE_ATTRIBUTE_OFFLINE = 0x00001000,  
  199.         FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = 0x00002000,  
  200.         FILE_ATTRIBUTE_ENCRYPTED = 0x00004000,  
  201.         FILE_FLAG_WRITE_THROUGH = 0x80000000,  
  202.         FILE_FLAG_OVERLAPPED = 0x40000000,  
  203.         FILE_FLAG_NO_BUFFERING = 0x20000000,  
  204.         FILE_FLAG_RANDOM_ACCESS = 0x10000000,  
  205.         FILE_FLAG_SEQUENTIAL_SCAN = 0x08000000,  
  206.         FILE_FLAG_DELETE_ON_CLOSE = 0x04000000,  
  207.         FILE_FLAG_BACKUP_SEMANTICS = 0x02000000,  
  208.         FILE_FLAG_POSIX_SEMANTICS = 0x01000000,  
  209.         FILE_FLAG_OPEN_REPARSE_POINT = 0x00200000,  
  210.         FILE_FLAG_OPEN_NO_RECALL = 0x00100000,  
  211.         FILE_FLAG_FIRST_PIPE_INSTANCE = 0x00080000,  
  212.     }  
  213.     #endregion  
  214. }  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值