我对“海量存储设备"有疑问 [英] I have a problem with "Mass-Storage Device"

查看:80
本文介绍了我对“海量存储设备"有疑问的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好,

"Mass-Storage Device"存在问题(MSD).我开发了一些管道,用于与设备之间的传递请求或响应数据.我在内核模式下工作,并为所有USB设备传递到OS GUID.我有一个可以识别的类(CDeviceList :: Initialize() )我的PC和CDeviceList中的所有USB设备都插入到arrayList这样的每个设备路径中( USB #Vid_04e8& Pid_503b#0002F9A9828E0F06#{a5dcbf10-6530-11d2-901f-00c04fb951ed} )和功能

Hello all,

I have a problem with "Mass-Storage Device" (MSD). I develop some pipe for pass request or response data to or from device . I work in Kernel mode and pass to OS GUID for all USB device. I have a class (CDeviceList:: Initialize()) that can identify all USB devices in my PC and CDeviceList insert to arrayList each device path  like that(USB#Vid_04e8&Pid_503b#0002F9A9828E0F06#{a5dcbf10-6530-11d2-901f-00c04fb951ed}) and function Initialize() return number USB devices in my PC.

CDeviceList :: Initialize()

{

HDEVINFO信息= SetupDiGetClassDevs(& m_guid,NULL,NULL,DIGCF_ALLCLASSES | DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);

>

>

如果(信息== INVALID_HANDLE_VALUE)

      if (info == INVALID_HANDLE_VALUE)

span style ="color:blue">返回 0;

            return 0;

SP_INTERFACE_DEVICE_DATA ifdata;

ifdata .cbSize = sizeof (ifdata);

      ifdata.cbSize = sizeof(ifdata);

DWORD devindex;

>

for (devindex = 0; SetupDiEnumDeviceInterfaces(info,NULL,& m_guid,devindex,& ifdata); ++ devindex)

      for (devindex = 0; SetupDiEnumDeviceInterfaces(info, NULL, &m_guid, devindex, &ifdata); ++devindex)

{

DWORD需要;

SetupDiGetDeviceInterfaceDetail (info,& ifdata,NULL,0,& need,NULL);

PSP_INTERFACE_DEVICE_DETAIL_DATA详细信息=(PSP_INTERFACE_DEVICE_DETAIL_DATA)malloc(需要);

>

详细信息-> cbSize = sizeof (SP_INTERFACE_DEVICE_DETAIL_DATA);

            detail->cbSize = sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA);

SP_DEVINFO_DATA did = { sizeof (SP_DEVINFO_DATA)};

            SP_DEVINFO_DATA did = {sizeof(SP_DEVINFO_DATA)};

SetupDiGetDeviceInterfaceDetail (信息,& ifdata,详细信息,必需的,NULL和& did);

TCHAR fname [256];

span style ="color:blue">如果(!SetupDiGetDeviceRegistryProperty(info,& did,SPDRP_FRIENDLYNAME,NULL,(PBYTE)fname, sizeof (fname ),NULL)&&!SetupDiGetDeviceRegistryProperty(info,& did,SPDRP_DEVICEDESC,NULL,(PBYTE)fname, sizeof (fname),NULL))

            if (!SetupDiGetDeviceRegistryProperty(info, &did, SPDRP_FRIENDLYNAME, NULL, (PBYTE)fname, sizeof(fname), NULL) && !SetupDiGetDeviceRegistryProperty(info, &did, SPDRP_DEVICEDESC, NULL, (PBYTE)fname, sizeof(fname), NULL))

{

(fname,detail-> DevicePath,256);

>

CDeviceListEntry e(detail-> DevicePath,fname);

免费(((PVOID)详细信息);

m_list .Add(e);

>

}

SetupDiDestroyDeviceInfoList (info);

返回 m_list.GetSize();

      return m_list.GetSize();

}

然后我想从我的设备中获取信息,例如VendorID或ProductID. t因为CreateFile返回错误的指针和我的问题 为什么???

CHWDetectDlg :: FindMass_Storage_Device()

{

DEVICE_DESCRIPTOR m_desc;

DWORD测试;

>

HIDD_CONFIGURATION config;

//CDeviceList devList(GUID_DEVINTERFACE_USBSTOR);

//hidguid = GUID_DEVINTERFACE_USBSTOR;

//HidD_GetHidGuid(& hidguid);

CDeviceList devList(GUID_DEVINTERFACE_USB_DEVICE);

int ndevices = devList.Initialize();

      int ndevices = devList.Initialize();

for ( int i = 0; i< ndevices; i ++)

      for(int i=0; i<ndevices; i++)

{

>

CString m_tmp_linkName = devList.m_list [i] .m_linkname;//文件://%3f/usb%23vid_13fe& pid_1c27%23070075881b000020%23%7ba5dcbf10-6530-11d2-901f-00c04fb951ed%7d

>

>

CString m_frendlyName = devList.m_list [i] .m_friendlyname;//USB大容量存储设备

h = CreateFile(devList.m_list [i] .m_linkname,0,FILE_SHARE_READ | FILE_SHARE_WRITE,(LPSECURITY_ATTRIBUTES)NULL,OPEN_EXISTING,0,NULL);

>

>

span style ="color:blue">如果(h == INVALID_HANDLE_VALUE)

            if(h == INVALID_HANDLE_VALUE)

span style ="color:blue">继续;

                  continue;

>

HIDD_ATTRIBUTES attr = { sizeof (HIDD_ATTRIBUTES)};

            HIDD_ATTRIBUTES attr = {sizeof(HIDD_ATTRIBUTES)};

/span>

           

BOOLEAN好的= HidD_GetAttributes(h,& attr);

>

span style ="color:blue">如果(attr.VendorID == VENDOR_MOUSE_ID)

            if(attr.VendorID == VENDOR_MOUSE_ID)

{

span style ="color:blue">如果(attr.ProductID == PRODUCT_ID)

                  if (attr.ProductID == PRODUCT_ID)

span style ="color:green">//PHIDP_DEVICE_DESC dev;

span style ="color:green">/* PHIDP_REPORT_DESCRIPTOR reportDesc;

}

>

}


1.如何从设备中获取信息?
2.如何在GET_MAX_LUN中使用?

谢谢,

最好的问候.

推荐答案

尊敬的

Dear Elephant,

感谢您参加MSDN论坛,但是此论坛部分保留用于Visual C ++常规问题.对于设备信息获取问题,您可以将问题发布到 development.device.drivers

Thanks for participating on the MSDN Forum, but this forum section is reserved for Visual C++ General Questions. For device information acquisition question, you can post your question on the development.device.drivers newsgroup, there you find experts and your question should be answered in no time.

谢谢!


这篇关于我对“海量存储设备"有疑问的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆