1

我正在使用CreateFile函数来创建 HID 设备句柄。下面是示例代码。执行代码后,我总是得到 HidHandle value -1,这是不应该的。请有任何建议。

public int CreateFile(string FileName)
{
    HidHandle = CreateFile(FileName,GENERIC_READ | GENERIC_WRITE,
        FILE_SHARE_READ | FILE_SHARE_WRITE,0,OPEN_EXISTING,0,0);           
}

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

调用GetLastWin32Error()返回值5

4

3 回答 3

4

CreateFile正在返回INVALID_HANDLE_VALUE,表示失败。然后调用 GetLastWin32Error()which 返回 5。这是ERROR_ACCESS_DENIED. 换句话说,您的进程没有足够的权限打开该文件。

于 2012-09-19T21:44:28.450 回答
1

尝试将其更改为

public int CreateFile(string FileName)
{
  return CreateFile(FileName,GENERIC_READ | GENERIC_WRITE,
       FILE_SHARE_READ | FILE_SHARE_WRITE,0,OPEN_EXISTING,0,0);           
}
于 2012-09-20T15:32:39.083 回答
0

CreateFile 不是 kernel32.dll 导出的函数 kernel32.dll 导出 CreateFileW 或 CreateFileA

你应该使用

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

于 2020-09-04T03:16:39.460 回答