qifeng8
驱动小牛
驱动小牛
  • 注册日期2003-08-26
  • 最后登录2013-01-31
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望80点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
阅读:4120回复:15

SetupDiGetInterfaceDeviceDetail怎么老是出错?

楼主#
更多 发布于:2004-09-23 11:02
HANDLE OpenOneDevice (HDEVINFO  HardwareDeviceInfo,
    PSP_INTERFACE_DEVICE_DATA   DeviceInfoData,char *devName)

{
     PSP_INTERFACE_DEVICE_DETAIL_DATA     functionClassDeviceData = NULL;
     ULONG           predictedLength = 0;
     ULONG           requiredLength = 0;
HANDLE hOut = INVALID_HANDLE_VALUE;
        int my_error;

SetupDiGetInterfaceDeviceDetail (HardwareDeviceInfo,DeviceInfoData,NULL,0,&requiredLength,NULL);

     predictedLength = requiredLength;// sizeof (SP_FNCLASS_DEVICE_DATA) + 512;

        functionClassDeviceData = (PSP_INTERFACE_DEVICE_DETAIL_DATA)malloc (predictedLength);
functionClassDeviceData->cbSize = sizeof (SP_INTERFACE_DEVICE_DETAIL_DATA);

     //
     // Retrieve the information from Plug and Play.
     //怎么老是这里出错,报1784
     if (! SetupDiGetInterfaceDeviceDetail (
               HardwareDeviceInfo,
               DeviceInfoData,
               functionClassDeviceData,
               predictedLength,
               &requiredLength,
               NULL))
     {
                my_error = GetLastError();
         return INVALID_HANDLE_VALUE;
     }

strcpy( devName,functionClassDeviceData->DevicePath) ;

     hOut = CreateFile (
                   functionClassDeviceData->DevicePath,
                   GENERIC_READ | GENERIC_WRITE,
                   FILE_SHARE_READ | FILE_SHARE_WRITE,
                   NULL,
                   OPEN_EXISTING,
                   0,
                   NULL);

     if (INVALID_HANDLE_VALUE == hOut)
     {
     }

free(functionClassDeviceData);

return hOut;
}
我用bcb写的,怎么老是在第二次SetupDiGetInterfaceDeviceDetail 是出错啊?报1784,怎么回事啊?
snowStart
驱动老牛
驱动老牛
  • 注册日期2004-04-06
  • 最后登录2011-06-02
  • 粉丝0
  • 关注0
  • 积分95分
  • 威望19点
  • 贡献值177点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-09-23 13:03
1784=提供给请求操作的用户缓冲区无效。
学习,关注,交流中... [email=fengyu@163.com]Email:snowstarth@163.com[/email] [url]http://bbs.zndev.com/?a=snowStart[/url]
qifeng8
驱动小牛
驱动小牛
  • 注册日期2003-08-26
  • 最后登录2013-01-31
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望80点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-09-23 14:48
问题 是为什么出现这个错啊
snowStart
驱动老牛
驱动老牛
  • 注册日期2004-04-06
  • 最后登录2011-06-02
  • 粉丝0
  • 关注0
  • 积分95分
  • 威望19点
  • 贡献值177点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-09-23 16:59
查找以前的帖子,以前有个哥们遇到过这种问题

好像VC可以正常运行,BC就出这个问题
学习,关注,交流中... [email=fengyu@163.com]Email:snowstarth@163.com[/email] [url]http://bbs.zndev.com/?a=snowStart[/url]
qifeng8
驱动小牛
驱动小牛
  • 注册日期2003-08-26
  • 最后登录2013-01-31
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望80点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-09-24 08:14
就是,我看到他的帖子了,也没下文啊
metalwing
驱动中牛
驱动中牛
  • 注册日期2003-10-13
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分178分
  • 威望58点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-09-24 09:23
不清楚.
不要给我发密语,我不知道怎么看密语.
晕.
新手上路,请多关照.
qifeng8
驱动小牛
驱动小牛
  • 注册日期2003-08-26
  • 最后登录2013-01-31
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望80点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-09-24 09:24
进来顶就散分,小弟苦思了好久了
qifeng8
驱动小牛
驱动小牛
  • 注册日期2003-08-26
  • 最后登录2013-01-31
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望80点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-09-24 09:28
你不是发过类似的帖子吗?不知道解决没有
iccctv
驱动牛犊
驱动牛犊
  • 注册日期2002-05-23
  • 最后登录2005-11-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-09-24 11:20
把 functionClassDeviceData->cbSize = sizeof (SP_INTERFACE_DEVICE_DETAIL_DATA);改成 functionClassDeviceData->cbSize = requiredLength;试验一下,
如果没有问题,那么就是版本兼容的问题了 :cool:
qifeng8
驱动小牛
驱动小牛
  • 注册日期2003-08-26
  • 最后登录2013-01-31
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望80点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-09-24 12:59
还不对啊,是什么版本兼容啊?
qifeng8
驱动小牛
驱动小牛
  • 注册日期2003-08-26
  • 最后登录2013-01-31
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望80点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-09-24 15:56
是不是还要设置环境? 唉...没人用bcb吗?
qifeng8
驱动小牛
驱动小牛
  • 注册日期2003-08-26
  • 最后登录2013-01-31
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望80点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-09-27 13:37
我现在用的是xpddk/2600,应该没问题吧?是不是要设置环境啊,怎么没人回答????
qifeng8
驱动小牛
驱动小牛
  • 注册日期2003-08-26
  • 最后登录2013-01-31
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望80点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-09-30 14:17
真的没人知道吗?很失望



--------------------------------
过完节后,一律给分(参与就有分)
fun998
驱动牛犊
驱动牛犊
  • 注册日期2004-10-01
  • 最后登录2004-10-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2004-10-01 18:29
Project->Option->Advanced complier->Data Alignment->Byte

Try it.. :P
zmwk
驱动中牛
驱动中牛
  • 注册日期2001-05-15
  • 最后登录2009-04-05
  • 粉丝0
  • 关注0
  • 积分59分
  • 威望51点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2004-10-01 23:09
我的代码,好用的:

BOOL CUsbMifareAgent::Open(UINT unIndex, CString &strErr)
{
Close();
DWORD dwErr;
DWORD flags = DIGCF_DEVICEINTERFACE | DIGCF_PRESENT ;
HANDLE hInfo;
hInfo = SetupDiGetClassDevs(&m_ReaderGuid, NULL, NULL, flags);
if(hInfo == INVALID_HANDLE_VALUE)
{
strErr.Format(_T("Failed to call SetupDiGetClassDevs, Error=%u"), GetLastError());
if(IDYES == MessageBox(NULL, _T("系统中没有安装相应的读卡器, 是否退出应用程序?"), NULL, MB_YESNO))
{
::ExitProcess(74);
}
return FALSE;
}
SP_DEVICE_INTERFACE_DATA InterfaceData;
InterfaceData.cbSize = sizeof SP_DEVICE_INTERFACE_DATA;
PSP_INTERFACE_DEVICE_DETAIL_DATA pInterfaceDetailData;
if(!SetupDiEnumDeviceInterfaces(hInfo, NULL, &m_ReaderGuid, unIndex, &InterfaceData))
{
strErr.Format(_T("Failed to call SetupDiEnumDeviceInterfaces, Error=%u"), GetLastError());
if(IDYES == MessageBox(NULL, _T("指定的读卡器没有插入USB插口,或该读写器已经休眠,是否退出应用程序?"), NULL, MB_YESNO))
{
::ExitProcess(74);
}
AfxMessageBox(_T("指定的读卡器没有插入USB插口,或该读写器已经休眠,请将之重新插入!"));
return FALSE;
}
DWORD ReqLen;
SetupDiGetInterfaceDeviceDetail(hInfo, &InterfaceData, NULL, 0, &ReqLen, NULL);
dwErr = GetLastError();
if(dwErr != ERROR_INSUFFICIENT_BUFFER)
{
strErr.Format(_T("Failed to call SetupDiGetInterfaceDeviceDetail, Error=%u"), dwErr);
AfxMessageBox(strErr);
return FALSE;
}
pInterfaceDetailData = PSP_INTERFACE_DEVICE_DETAIL_DATA(new TCHAR[ReqLen]);
if(NULL == pInterfaceDetailData)
{
strErr = _T("Insufficient memory!");
AfxMessageBox(strErr);
return FALSE;
}
pInterfaceDetailData->cbSize = sizeof SP_INTERFACE_DEVICE_DETAIL_DATA;
if(!SetupDiGetInterfaceDeviceDetail(hInfo, &InterfaceData, pInterfaceDetailData, ReqLen, &ReqLen, NULL))
{
strErr.Format(_T("Failed to call SetupDiGetInterfaceDeviceDetail, Error=%u"), GetLastError());
delete [] pInterfaceDetailData;
AfxMessageBox(strErr);
return FALSE;
}
HANDLE hDev = CreateFile(
pInterfaceDetailData->DevicePath,
GENERIC_READ | GENERIC_WRITE,
0/*FILE_SHARE_READ | FILE_SHARE_WRITE*/,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,
NULL
);
delete[] pInterfaceDetailData;
if (hDev == INVALID_HANDLE_VALUE)
{
strErr.Format(_T("Failed to open device, Erro=%u"), GetLastError());
AfxMessageBox(_T("无法打开指定的读写器,请重新拔插读写器并重试本操作!"));
return FALSE;
}
strErr.Empty();
m_hReader = hDev;
return TRUE;
}
A strong man can save himself. A great man can save another.
qifeng8
驱动小牛
驱动小牛
  • 注册日期2003-08-26
  • 最后登录2013-01-31
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望80点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2004-10-09 10:16
好可以了,为什么现在不能给分啊,老说没登录
游客

返回顶部