आप विंडोज़ में एचआईडी डिवाइस से कच्चे डिस्क्रिप्टर डेटा कैसे प्राप्त करते हैं?आप विंडोज़ में यूएसबी एचआईडी डिवाइस से कच्चे डिस्क्रिप्टर डेटा कैसे प्राप्त करते हैं?
पृष्ठभूमि:
मैं Windows में एक HID डिवाइस से निर्माता, उत्पाद का नाम, और सीरियल नंबर प्राप्त करने के लिए की जरूरत है। मैं functions seen here का उपयोग कर उपकरणों तक पहुंचने के लिए hid.dll का उपयोग कर रहा हूं। मेरा सवाल बहुत ही to this one है। मैं कुछ छिपाई उपकरणों से निर्माता स्ट्रिंग और उत्पाद स्ट्रिंग प्राप्त करने में सक्षम हूं, लेकिन अधिकांश डेटा को HidD_GetManufacturerString के साथ झूठी लौटने में विफल रहता है। हालांकि, मुझे पता है कि इन उपकरणों में उनके वर्णनकर्ताओं में स्ट्रिंग जानकारी है क्योंकि मैं इसे using USBTreeView देख पा रहा हूं।
दिलचस्प बात यह है कि यहां तक कि उन डिवाइसों के लिए भी जो निर्माता और उत्पाद नाम लौटाते हैं, hid.dll के माध्यम से जो मूल्य मैं प्राप्त कर रहा हूं, वे उपर्युक्त टूल का उपयोग करके देखे गए मानों से बहुत अलग हैं जो कच्चे डेटा से प्राप्त होते हैं यूएसबी यंत्र।
उदाहरण के लिए, एक 360 नियंत्रक:
Via USB Tree View:
Device Description : Xbox 360 Controller for Windows
Language 0x0409 : "©Microsoft Corporation"
iProduct : 0x02
Language 0x0409 : "Controller"
iSerialNumber : 0x03
Language 0x0409 : "0843806"
Via hid.dll using HidD_GetManufacturerString, HidD_GetProductString, and HidD_GetSerialNumberString:
Description : HID-compliant game controller
Product : Controller (XBOX 360 Controller for Windows)
Manufacturer : FAILS
Serial Number : FAILS
WinUSB सब पर इन उपकरणों को खोलने के लिए के रूप में वे winusb.sys ड्राइवर का उपयोग नहीं करते इस डेटा पुनः प्राप्त करने में असमर्थ है।
1) मुझे समझ में नहीं आता कि क्यों एचआईडीडी कार्यों द्वारा लौटाए गए मान यूएसबी डिस्क्रिप्टर में मानों से मेल नहीं खाते हैं। 2) मुझे छुपा डिवाइस के लिए कच्चे यूएसबी डिस्क्रिप्टर डेटा तक पहुंचने का कोई तरीका नहीं मिल रहा है क्योंकि मैं WinUSB के साथ उन तक नहीं पहुंच सकता।
संपादित करें 1:
ठीक है, तो मैं HID बारे में कुछ और सीखा है। ऐसा लगता है कि hid.dll के माध्यम से जो डेटा मैं प्राप्त कर रहा हूं वह ड्राइवर-निर्दिष्ट डेटा है, न कि यूएसबी डिवाइस से डेटा आ रहा है। छिपाई यूएसबी के अलावा अन्य परिवहन पर उपकरणों पर भी लागू हो सकती है। तो यह ठीक है। आखिरकार, मैं वास्तव में जानना चाहता हूं कि जब मैं छुपा डिवाइस प्राप्त करता हूं और उसके लिए मैं किस एपीआई का उपयोग करता हूं तो मैं यूएसबी डिवाइस कैसे प्राप्त कर सकता हूं। WinUSB के अलावा जो काम नहीं करता है, केवल एक चीज जो मैं पा सकता हूं कर्नेल-स्तरीय कार्य IOCTL हैं। मुझे नहीं पता कि यह एक सामान्य, गैर व्यवस्थापक अनुप्रयोग के लिए उपयुक्त है या नहीं।
मुझे लगता है कि यूएसबी डिवाइस एचआईडी डिवाइस का अभिभावक होगा (इस तरह यह डिवाइस सिस्टम में कम से कम मेरे सिस्टम पर दिखाई देता है) तो शायद आप CM_Get_Parent और संबंधित कार्यों का उपयोग कर सकते हैं? –
@ हैरीजोहनस्टन टिप के लिए धन्यवाद। दुर्भाग्यवश, माता-पिता हमेशा यूएसबी डिवाइस नहीं होते हैं क्योंकि कुछ छिपाई उपकरण कई स्तरों को घोंसले में घिरे होते हैं। आखिरकार, कुंजी मुख्य कार्य था हालांकि। मैं एक जवाब जोड़ूंगा। – Guavaman