使用wince系统中的CreateFile()打开设备,DeviceIoControlCE()控制设备 /// <summary> /// 打开设备 /// </summary> /// <param name="lpFileName">要打开的文件的名字</param> /// <param name="dwDesiredAccess">如果为 GENERIC_READ 表示允许对设备进行读访问;如果为 GENERIC_WRITE 表示允许对设备进行写访问(可组合使用);如果为零,表示只允许获取与一个设备有关的信息 </param> /// <param name="dwShareMode">零表示不共享; FILE_SHARE_READ 和 / 或 FILE_SHARE_WRITE 表示允许对文件进行共享访问</param> /// <param name="lpSecurityAttributes">指向安全属性的指针</param> /// <param name="dwCreationDisposition">如何创建(CREATE_NEW 创建文件;如文件存在则会出错 CREATE_ALWAYS 创建文件,会改写前一个文件 OPEN_EXISTING 文件必须已经存在。由设备提出要求 OPEN_ALWAYS 如文件不存在则创建它 TRUNCATE_EXISTING 讲现有文件缩短为零长度 )</param> /// <param name="dwFlagsAndAttributes">文件属性,可由一个或多个下述常数组成 </param> /// <param name="hTemplateFile">如果不为零,则指定一个文件句柄。新文件将从这个文件中复制扩展属性 </param> /// <returns>如执行成功,则返回文件句柄。 INVALID_HANDLE_VALUE 表示出错,会设置 GetLastError 。即使函数成功,但若文件存在,且指定了 CREATE_ALWAYS 或 OPEN_ALWAYS , GetLastError 也会设为 ERROR_ALREADY_EXISTS </returns> [DllImport("coredll", SetLastError = true)] public static extern IntPtr CreateFile( String lpFileName, UInt32 dwDesiredAccess, UInt32 dwShareMode, IntPtr lpSecurityAttributes, UInt32 dwCreationDisposition, UInt32 dwFlagsAndAttributes, IntPtr hTemplateFile); /// <summary> /// 与驱动程序进行通信,包括读和写两种操作 /// </summary> /// <param name="hDevice">CreateFile返回的设备句柄</param> /// <param name="dwIoControlCode">应用程序调用驱动程序的控制命令,根据具体的设备有相关的定义 </param> /// <param name="lpInBuffer">应用程序传递给驱动程序的数据缓冲区地址</param> /// <param name="nInBufferSize">应用程序传递给驱动程序的数据缓冲区大小,字节数</param> /// <param name="lpOutBuffer">驱动程序返回给应用程序的数据缓冲区地址</param> /// <param name="nOutBufferSize">驱动程序返回给应用程序的数据缓冲区大小,字节数</param> /// <param name="lpBytesReturned">驱动程序实际返回给应用程序的数据字节数地址</param> /// <param name="lpOverlapped">重叠操作结构</param> /// <returns>非0成功,0失败</returns> [DllImport("coredll.dll", EntryPoint = "DeviceIoControl", SetLastError = true)] internal static extern int DeviceIoControlCE( int hDevice, int dwIoControlCode, byte[] lpInBuffer, int nInBufferSize, byte[] lpOutBuffer, int nOutBufferSize, ref int lpBytesReturned, IntPtr lpOverlapped);