0

散発的に機能するコードをいくつか作成しましたが、成功または失敗する理由がわかりません。問題のコードはかなり単純で、VB.NETからCreateFile()を1回呼び出すだけです。

Dim Handle As Integer = Win32.CreateFile(KeyboardPath, GENERIC_READ Or GENERIC_WRITE, _
                                         FILE_SHARE_READ Or FILE_SHARE_WRITE, Nothing, _
                                         OPEN_EXISTING, &H80, 0)

問題は、これを呼び出すと、win32エラーERROR_ACCESS_DENIEDが発生することですが、GENERIC_READ要求を削除すると、ハンドルは正常に付与されます。これは以前に(別のマシンで)発生したことがあり、どの一連のイベントがデバイスへの書き込みとデバイスからの読み取りを行わないようになるかについて、私は完全に困惑しています。問題のデバイスはLogitechG510キーボードであり、このコードは以前はVista 32ビットシステムで正常に機能していました(現在、Win7 x64システムでテストしており、互換性の問題をすべて修正しています)。

私の質問は、CreateFileが散発的に書き込みアクセスのみを許可するようにフォールバックする原因、それを引き起こす原因となっている何が間違っているのか、そしてどのように問題を修正するのかということです。以下に完全な関数を含めました-GENERIC_READフラグのみが渡された場合、ハンドルも割り当てられないことに注意してください(同じエラー)

参考までに、私が使用している特定のデバイスパスは次のとおりです\\?\hid#vid_046d&pid_c22d&mi_00#7&1a08be07&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}(これはLogitech G510ゲーミングキーボード用です)また、コードは管理者権限の有無にかかわらず同様に実行されました。私はそれらを必要としないので特権(そしてそれは私のビスタシステムでそれらを正常に動作させるためにそれらを必要としません)。

Private Function OpenInterface(ByVal KeyboardPath As String) As Integer
    Dim Handle As Integer = Win32.CreateFile(KeyboardPath, GENERIC_READ Or GENERIC_WRITE, _
                                             FILE_SHARE_READ Or FILE_SHARE_WRITE, Nothing, _
                                             OPEN_EXISTING, &H80, 0)
    Dim ee As Integer = GetLastError()
    Return Handle
End Function
4

1 に答える 1

2

キーボードに通常のキーボード クラスに収まらない機能がある場合は、複数のデバイス インスタンス (通常のキーボードの動作を含むものと凝ったもの用のもの) が公開される可能性があります。

また、インスタンスの 1 つが書き込み専用である可能性もあります。

于 2011-04-18T01:43:45.230 に答える