usb wirtefile失敗

hw37du 2011-11-26 03:37:22
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.ComponentModel;
using System.Windows.Forms;

namespace usbwritefile
{
class Program

{
int HidHandle = -1;
public const uint GENERIC_READ = 0x80000000;
public const uint GENERIC_WRITE = 0x40000000;
public const uint FILE_SHARE_READ = 0x00000001;
public const uint FILE_SHARE_WRITE = 0x00000002;
public const int OPEN_EXISTING = 3;
//獲取設備文件
[DllImport("kernel32.dll", SetLastError = true)]
private static extern int CreateFile(
string lpFileName, // file name
uint dwDesiredAccess, // access mode
uint dwShareMode, // share mode
uint lpSecurityAttributes, // SD
uint dwCreationDisposition, // how to create
uint dwFlagsAndAttributes, // file attributes
uint hTemplateFile // handle to template file
);
[DllImport("Kernel32.dll")]
private static extern bool ReadFile(
IntPtr hFile,
byte[] lpBuffer,
uint nNumberOfBytesToRead,
ref uint lpNumberOfBytesRead,
IntPtr lpOverlapped
);
[DllImport("Kernel32.dll", SetLastError = true)]
private static extern bool WriteFile(
IntPtr hFile,
byte[] lpBuffer,
uint nNumberOfBytesToWrite,
ref uint lpNumberOfBytesWritten,
IntPtr lpOverlapped
);
[DllImport("kernel32.dll")]
private static extern bool CloseHandle(
IntPtr hObject
);
//--------------------------------------------------------------------------------
IntPtr hFile;
private const Int32 INVALID_HANDLE_VALUE = -1;
private const int USB_WRITENUM = 8;
private const int USB_READNUM = 8;
private byte[] m_rd_data = new byte[USB_READNUM];
public byte[] rd_data
{
get { return m_rd_data; }
set { m_rd_data = value; }
}
private byte[] m_wr_data = new byte[USB_WRITENUM];
public byte[] wr_data
{
get { return m_wr_data; }
set { m_wr_data = value; }
}
public int OnInitUSB(string DeviceName)
{
HidHandle = CreateFile(
DeviceName,
GENERIC_READ,// | GENERIC_WRITE,//讀寫,或者一起
FILE_SHARE_READ,// | FILE_SHARE_WRITE,//共享讀寫,或者一起
0,
OPEN_EXISTING,
0,
0);
if (HidHandle == -1)
{
return 0;
}
else
{
return 1;
}
}
public bool USBDataRead()
{
uint read = 0;
return ReadFile(hFile, m_rd_data, (uint)USB_READNUM, ref read, IntPtr.Zero);
}
public bool USBDataWrite()
{
uint bytesWritten = 0;
byte[] buffer = new byte[] { 0x02, 0x02, 0x00 };
bool status = WriteFile((IntPtr)HidHandle, buffer, 8, ref bytesWritten, IntPtr.Zero);
if (!status)
{
int errorCode = Marshal.GetLastWin32Error();
string errorMessage = new Win32Exception(errorCode).Message;
Console.WriteLine(errorCode + ":" + errorMessage);
MessageBox.Show(errorCode + ":" + errorMessage);
return false;
}
else
{
Console.WriteLine(bytesWritten.ToString());
return true;
}
}
public void CloseConnection()
{
if (hFile.ToInt32() != INVALID_HANDLE_VALUE)
{
CloseHandle(hFile);
hFile = IntPtr.Zero;
}
}

static void Main(string[] args)
{
Program p = new Program();
p.OnInitUSB("\\\\?\\hid#vid_046d&pid_0a29&mi_03&col02#7&ca16861&0&0001#{4d1e55b2-f16f-11cf-88cb-001111000030}");
p.USBDataWrite();
Console.ReadKey();


}
}
}

大家好.上面是我写的一个关于给usb设备发送数据的程序,但是现在出现了问题,createfile可以成功,可以获取到句柄,但是到writefile发送数据的时候,总是出现参数无效
请问大家该怎么解决?
谢谢!
...全文
123 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
hw37du 2011-11-27
  • 打赏
  • 举报
回复
求高手啊 。。
hw37du 2011-11-26
  • 打赏
  • 举报
回复
怎么没有人回答啊。
源码下载地址: https://pan.quark.cn/s/c20c5da6957d 卸载 首先,需要核实是否存在先前安装的记录,或者系统是否预置了httpd服务,可通过以下命令进行验证: # rpm -qa | grep httpd 或者: # yum list | grep httpd 我之前已经进行过一次安装,因此在此会看到相应的显示结果: 然后我将着手卸载我的httpd,首要步骤是终止httpd服务的运行,对应的命令如下: # systemctl stop httpd.service 接着,无论是使用 rpm -e 还是 yum -erase 命令均可实现卸载,但需注意使用rpm -e命令前必须自行移除相关依赖包,因此我选择使用yum -erase命令进行卸载,具体命令为: # yum erase httpd.x86_64 在执行过程中会提示确认操作 在Linux环境中,CentOS 7 是一种非常普遍的操作系统,特别是在服务器应用方面。Apache HTTP Server(通常简称为Apache或httpd)是最广受欢迎的网页服务器软件之一,主要用于承载网站及相关服务。本资源将详尽说明在CentOS 7系统中关于Apache服务的安装与移除流程。 ### 移除Apache服务 1. **核实安装情况**: 在执行卸载操作前,必须先确认Apache是否已安装。这可以通过查询已安装的软件包列表来完成,可选用以下任一命令: ```bash # rpm -qa | grep httpd # yum list | grep httpd ``` 若Apache已安装,上述命令将返回相关的软件包信息。 2. **终止服务运行**: 在卸载前,必须先停止正在运行的A...
下载代码方式:https://pan.quark.cn/s/a4b39357ea24 在信息技术行业,特别是在操作系统部署及维护方面,统一可扩展固件接口(UEFI)与Linux系统如Debian的相互配合是一个关键议题。本篇将深入分析"在Debian 9.13系统中通过UEFI启动的UEFI Shell"这一焦点,并阐述如何处理安装期间遭遇的启动障碍。 UEFI作为替代传统BIOS的新型固件架构,它带来了更为先进、更为安全的启动机制,同时支持更大容量的存储设备以及更迅捷的启动时间。在部署Debian 9.13(Stretch版本)时,用户可以选择运用UEFI模式进行安装,从而获取上述种种好处。然而,UEFI启动过程需要特定的引导管理器,一般而言是GRUB2的UEFI版本,即称作grubx64.efi。 描述中所述情形可能是由于安装阶段GRUB2引导管理器的UEFI版本未能被恰当地生成或设置,因而系统无法经由UEFI模式启动。在此情形下,"uefishell"工具便显得尤为重要。UEFI Shell是一个命令行界面,它允许用户在UEFI环境中执行多样任务,包括手动引导操作系统。它提供了一个临时的补救措施,使用户得以纠正引导故障。 为了借助UEFI Shell来纠正启动故障,必须遵循以下步骤: 1. **获取UEFI Shell**:通常,UEFI Shell作为现代计算机UEFI固件的一部分预先安装,但在某些情况下,可能需要从设备制造商的官方网站上获取最新版本。 2. **插入搭载UEFI Shell的USB存储设备**:将下载的UEFI Shell文件拷贝至一个采用FAT32格式化的USB存储设备上,并将其接入计算机。 3. **进入UEFI配置界面**:重新...

111,128

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧