جهاز تخزين USB Serialnumber من برنامج تشغيل Minifilter (من واصف جهاز USB)

StackOverflow https://stackoverflow.com/questions/3110046

سؤال

أرغب في استخراج الرقم التسلسلي لجهاز تخزين USB من داخل برنامج تشغيل نظام ملفات Minifilter ، داخل رد الاتصال على الحالات باستخدام التقنية الموصوفة هنا الفرق الوحيد هو أنني أفعل ذلك في وضع kernel.
أنا أستعمل:

status = IoGetDeviceInterfaces( 
    &GUID_DEVINTERFACE_DISK, 
    NULL, 
    0, 
    &SymbolicLinkList
);

لتعداد واجهات محتملة (مثال على ذلك):

\??\SCSI#Disk&Ven_VMware_&Prod_VMware_Virtual_S&Rev_1.0#4&5fcaafc&0&000#{53f56307 -b6bf-11d0-94f2-00a0c91efb8b}
\??\USBSTOR#Disk&Ven_Kingston&Prod_DataTraveler_C10&Rev_1.00#001D92AD7568F030E3CC 0AFC&0#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}
\??\USBSTOR#Disk&Ven_USB_2.0&Prod_Flash_Disk&Rev_1100#AA04012700007777&0#{53f5630 7-b6bf-11d0-94f2-00a0c91efb8b}

وأريد أن أجد أي واحد منهم هو واجهة وحدة التخزين الخاصة بي عن طريق IOCTL_Storage_get_Device_Number.

لقد جربت Zwcreatefile & zwdeviceiocontrolfile لكن zwcreatefile إرجاع status_object_name_invalid.

كيف يمكنني إرسال IOCTLs إلى هذه الواجهات؟ في وضع المستخدم ، كل شيء على ما يرام ولكن في وضع kernel يفشل!

هل كانت مفيدة؟

المحلول 2

لقد قمت بحل المشكلة المزعجة من خلال تفويض الحوسبة إلى خدمة وضع المستخدم والتحدث عبر منفذ. عرجاء ولكن مفيدة حقا.

نصائح أخرى

يجب عليك تغيير ؟؟ إلى dosdevices في أسماء الأجهزة. ينبغي أن يحل مشكلتك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top