C: יצירת קשר עם device
אני מנסה ליצור קשר עם usb interface device כלשהו. לפי מה שהבנתי, אפשר לפתוח את הקשר עם ה-device בעזרת CreateFile. הבעייה היא הפרמטר הראשון שצריך לתת ל-CreateFile , והוא שם ה-device. כדי למצוא את שם ה-device אמורים לעשות enumeration של כל ה-devices שמתאימים ל-GUID שיש לי ביד, ולבחור את ה-device המתאים מביניהם. אני מקווה שעד כאן הכל נכון. הנה הנסיון שלי לכתוב את זה בקוד: בהתחלה אני מגיד איזשהו שם (USB_MY_DEVICE) שייצג את ה-GUID.
אני מנסה ליצור קשר עם usb interface device כלשהו. לפי מה שהבנתי, אפשר לפתוח את הקשר עם ה-device בעזרת CreateFile. הבעייה היא הפרמטר הראשון שצריך לתת ל-CreateFile , והוא שם ה-device. כדי למצוא את שם ה-device אמורים לעשות enumeration של כל ה-devices שמתאימים ל-GUID שיש לי ביד, ולבחור את ה-device המתאים מביניהם. אני מקווה שעד כאן הכל נכון. הנה הנסיון שלי לכתוב את זה בקוד: בהתחלה אני מגיד איזשהו שם (USB_MY_DEVICE) שייצג את ה-GUID.
DEFINE_GUID(USB_MY_DEVICE, 0x4D36E972, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18);
אח"כ, עם הפונקציה SetupDiGetClassDevs, אני מקבל את כל האינפורמציה של כל ה-devices שעונים ל-GUID שאני רוצה. ובסוף, עם הפונקציה SetupDiEnumInterfaceDevice, אני עובר על כל ה-devices שנמצאו. הבעייה שהפונקציה SetupDiEnumInterfaceDevice מחזירה לי כישלון על הפעם הראשונה, ו-GetLastError מחזיר 0. אבל לפי מה שהבנתי, אם הפונקציה נכשלת כי אין יותר devices (אם i גדול שווה למספר ה-devices שנמצאו), אז GetLastError אמור להחזיר ERROR_NO_MORE_ITEMS. או אם הפונקציה נכשלת מסיבה אחרת, GetLastError אמור להחזיר ערך שגיאה כלשהו. מישהו יודע מה יכולה להיות הבעייה?HDEVINFO hInfo ; hInfo = SetupDiGetClassDevs((LPGUID)&USB_MY_DEVICE,NULL,NULL,DIGCF_PRESENT | DIGCF_DEVICEINTERFACE ) ; if (hInfo == INVALID_HANDLE_VALUE) return 1; for (DWORD i=0; ; ++i) { SP_INTERFACE_DEVICE_DATA Interface_Info; Interface_Info.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA); // Enumerate device if (! SetupDiEnumInterfaceDevice(hInfo, NULL, (LPGUID)&USB_MY_DEVICE,i, &Interface_Info)) { SetupDiDestroyDeviceInfoList(hInfo); return(i); } }