liskman
驱动牛犊
驱动牛犊
  • 注册日期2002-05-11
  • 最后登录2007-08-31
  • 粉丝0
  • 关注0
  • 积分61分
  • 威望7点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
阅读:891回复:2

双卡怎么处理?

楼主#
更多 发布于:2003-12-09 00:23
用KernelDriver写了一个驱动程序,微机中只插一个卡时,工作正常,
但是插入两个卡时,同时操作两个卡就蓝屏 :(

发现两个用户程序用CreateFile返回的句柄是一样的! :o

请问怎样区别两块卡?
这CreateFile返回一样的句柄,让人怎么处理两块卡?

是不是两块卡的设备名自动变成其它的了,俺不知道? :mad:
象串口一样COM1,COM2什么的?

救命!


[编辑 -  12/9/03 by  liskman]
流云
AthlonXP
驱动小牛
驱动小牛
  • 注册日期2003-05-11
  • 最后登录2010-01-20
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-12-10 15:36
用下面这个函数,第二个参数就是设备实例的编号,0是第一个设备,1是第二个设备,依次类推

/////////////////////////////////////////////////////////////////////////////
// GetDeviceViaInterface: Open a handle via a device interface
//  获得硬件设备接口
HANDLE GetDeviceViaInterface( GUID* pGuid, DWORD instance)
{
// Get handle to relevant device information set
HDEVINFO info = SetupDiGetClassDevs(pGuid, NULL, NULL, DIGCF_PRESENT | DIGCF_INTERFACEDEVICE);
if(info==INVALID_HANDLE_VALUE)
return NULL;

// Get interface data for the requested instance
SP_INTERFACE_DEVICE_DATA ifdata;
ifdata.cbSize = sizeof(ifdata);
if(!SetupDiEnumDeviceInterfaces(info, NULL, pGuid, instance, &ifdata))
{
SetupDiDestroyDeviceInfoList(info);
return NULL;
}

// Get size of symbolic link name
DWORD ReqLen;
SetupDiGetDeviceInterfaceDetail(info, &ifdata, NULL, 0, &ReqLen, NULL);
PSP_INTERFACE_DEVICE_DETAIL_DATA ifDetail = (PSP_INTERFACE_DEVICE_DETAIL_DATA)malloc(ReqLen);
if( ifDetail==NULL)
{
SetupDiDestroyDeviceInfoList(info);
return NULL;
}

// Get symbolic link name
ifDetail->cbSize = sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA);
if(!SetupDiGetDeviceInterfaceDetail(info, &ifdata, ifDetail, ReqLen, NULL, NULL))
{
SetupDiDestroyDeviceInfoList(info);
//delete ifDetail;
free( (PVOID)ifDetail );
return NULL;
}
// Open file
HANDLE rv = CreateFile(ifDetail->DevicePath,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, OPEN_EXISTING,
0,//FILE_ATTRIBUTE_NORMAL,
NULL);
if(rv==INVALID_HANDLE_VALUE) rv = NULL;

//delete ifDetail;
free( (PVOID)ifDetail );
SetupDiDestroyDeviceInfoList(info);
return rv;
}
AthlonXP是个好人,他一生没有欺压过同侪,没有背叛过朋友。从小到大,他都是个好孩子,没有出过什么差错,没有让家人师长担过心。虽然用一句时髦的话,他不善于"推销"自己,但是做学问扎扎实实,不会投机取巧;做工作也是一步一个脚印,不会敷衍塞责。他虽然是个大烟枪,偶尔也喝喝酒,但是没有什么见不得人的恶习。他花钱虽然不特别大方,可是也不吝啬。许多不如他的人,或幸或不幸,一般的也都成了家。可是为什么MM不喜欢他呢??
liskman
驱动牛犊
驱动牛犊
  • 注册日期2002-05-11
  • 最后登录2007-08-31
  • 粉丝0
  • 关注0
  • 积分61分
  • 威望7点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-12-12 23:07
非常感谢!

流云
游客

返回顶部