C#WriteFile(),无法写入USB HID设备

时间:2012-10-01 13:04:37

标签: c#

我对C#和Windows编程都很陌生,我正在尝试在USB HID设备之间建立通信。我使用'SetupDiGetDevicexxxxxx'成功获得了设备路径,并使用'CreateFile()'来获取Handle。以下是我的代码。

public const uint FILE_SHARE_READ = 0x00000001;
public const uint FILE_SHARE_WRITE = 0x00000002;
public const int OPEN_EXISTING = 3;
public const uint GENERIC_READ = 0x80000000;
public const uint GENERIC_WRITE = 0x40000000;
CreateFile(string Devicepath)
{
    HidHandle = CreateFile(Devicepath, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0);                     
}

获取设备句柄信息后,我正在调用写文件函数,如下所示。

Result = WriteFile(HidHandle, outputReportBuffer[], outputReportBuffer.Length, NumberOfBytesWritten, 0);     

Outputbuffer是长度为8的字节数组。由于某种原因,我无法写入USB HID设备。 “结果”始终为零。任何帮助表示赞赏。此外,任何人都可以告诉我如何验证HidHandle是否有效。当我运行该程序时,我得到它为“1124”。

我之前关于此类问题的帖子:Cannot communicate successfully with USB HID device using writefile(),但没有帮助。

以下是create file和writefile的两个方法。

[DllImport("kernel32.dll", SetLastError = true)]
private static extern int CreateFile(string lpFileName, uint dwDesiredAccess, uint dwShareMode, uint lpSecurityAttributes, uint dwCreationDisposition, uint dwFlagsAndAttributes, uint hTemplateFile );    

[DllImport("kernel32.dll")]
static public extern bool WriteFile(int hFile,  byte lpBuffer, int nNumberOfBytesToWrite,  int lpNumberOfBytesWritten, int lpOverlapped)  

2 个答案:

答案 0 :(得分:1)

您可能必须使用USB库,例如this one

答案 1 :(得分:0)

我确信你有一些理由为什么要使用这种低级别的Win32函数,但我建议你是否只想在某处使用.net中的File类来编写文件。

如果您只想写字节,那么最简单的方法之一就是使用File.WriteAllBytes()方法。

http://msdn.microsoft.com/en-us/library/system.io.file.writeallbytes.aspx