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()次に、 5 を返す whichを呼び出し ます。これは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 hFile
);

于 2020-09-04T03:16:39.460 に答える