Nie można pomyślnie komunikować się z urządzeniem USB HID za pomocą writefile ()
Jestem dość nowy w C #, jak również programowaniu w systemie Windows i próbuję nawiązać komunikację między urządzeniem USB HID a aplikacją napisaną w c # na komputerze z systemem Windows XP. Udało mi się uzyskać ścieżkę urządzenia i użyłem tego do ustanowienia prawidłowego uchwytu na urządzeniu:
IntPtr drive = CreateFile(devicePath, GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE, IntPtr.Zero,
OPEN_EXISTING, FILE_FLAG_DELETE_ON_CLOSE, IntPtr.Zero);
Okazało się, że jest to prawidłowy uchwyt, który podczas testowania daje dodatnią liczbę całkowitą. Po utworzeniu uchwytu wywołuję 'HidD_GetPreparsedData' i 'HidP_GetCaps', które dają wcześniej zaimportowaną strukturę (HIDP_CAPS), która przechowuje określone dane związane z podłączonym urządzeniem. Następnie próbuję wywołać writefile ():
bool success = WriteFile(drive, ref outputReportBuffer,
caps.OutputReportByteLength, ref numberOfBytesWritten,
IntPtr.Zero);
napęd: uchwyt urządzenia
outputReportBuffer: Tablica bajtów do zapisu [65]
caps.OutputReportByteLength: Ilość bajtów do zapisania, caps to struktura HIDP_CAPS
numberOfBytesWritten: zakodowany na 0
IntPtr.Zero: Wszystko, co przeczytałem, przekazuje ten ostatni parametr, tak jak ja to zrobiłem. W formalnych parametrach 'writefile' ostatni parametr jest wymieniony jako 'IntPtr ipOverlapped', ale nie byłem w stanie dowiedzieć się, co to jest, z wyjątkiem tego, że powinno być przekazane jako forma 0
Jak importowany jest plik WriteFile:
[DllImport("kernel32.dll", SetLastError = true)]
public static extern bool WriteFile(IntPtr hFile,
ref byte[] lpBuffer,
uint nNumberOfBytesToWrite,
ref uint lpNumberOfBytesWritten,
IntPtr ipOverlapped);
Po wykonaniu writefile po prostu nic nie robi. Nie popełniam błędu, ale po przetestowaniu ujawnia, że komunikacja nigdy nie została nawiązana i nie udało się. Gdyby ktoś mógł podzielić się jakąkolwiek wiedzą lub udostępnić jakiekolwiek zasoby, aby mi pomóc, naprawdę bym to docenił. Dziękuję za przeczytanie.
Pozdrowienia.