HID扫描器-CreateFile拒绝访问

时间:2019-06-14 09:25:57

标签: c# hid kernel32

使用以下代码,当尝试使用qt_ext::QListWidgetView读取扫描仪(这是HID设备)时,出现错误5(访问被拒绝)。 In this post有人建议以独占模式打开键盘,这是不可能的。我见过其他人说他们没有遇到这样的问题。

有可能吗?参数有问题吗?

对于那些拒绝投票的人,请问我是新来的,您认为我有什么毛病。

Ps。我在使用CreateFileUser32.dll方法拦截原始数据方面取得了一些成功,但这不是一个长期的解决方案。

GetRawxxx

更新

试图更改为...

public class Hid
{
    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;

    string DeviceId = "...";

    private SafeFileHandle _ReadSafeFileHandle;
    private FileStream _ReadFileStream;
    private const int ReadBufferSize = 65;

    public async Task<string> Read()
    {
        _ReadSafeFileHandle = CreateFile(DeviceId, GENERIC_READ, FILE_SHARE_READ, IntPtr.Zero, OPEN_EXISTING, 0, IntPtr.Zero);

        if (_ReadSafeFileHandle.IsInvalid) 
            return "Invalid handle " + Marshal.GetLastWin32Error();

        _ReadFileStream = new FileStream(_ReadSafeFileHandle, FileAccess.ReadWrite, ReadBufferSize, false);
        var bytes = new byte[ReadBufferSize];
        await _ReadFileStream.ReadAsync(bytes, 0, bytes.Length);

        return System.Text.ASCIIEncoding.ASCII.GetString(bytes);
    }

    [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
    public static extern SafeFileHandle CreateFile(string lpFileName, uint dwDesiredAccess, uint dwShareMode, IntPtr lpSecurityAttributes, uint dwCreationDisposition, uint dwFlagsAndAttributes, IntPtr hTemplateFile);
}

我得到一个有效的文件句柄,但是调用 _CreateFile(DeviceId, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, IntPtr.Zero, OPEN_EXISTING, 0, IntPtr.Zero); 只会返回空缓冲区。尝试创建ReadFile会导致“访问路径被拒绝”。

0 个答案:

没有答案