阅读:891回复:2
双卡怎么处理?
用KernelDriver写了一个驱动程序,微机中只插一个卡时,工作正常,
但是插入两个卡时,同时操作两个卡就蓝屏 :( 发现两个用户程序用CreateFile返回的句柄是一样的! :o 请问怎样区别两块卡? 这CreateFile返回一样的句柄,让人怎么处理两块卡? 是不是两块卡的设备名自动变成其它的了,俺不知道? :mad: 象串口一样COM1,COM2什么的? 救命! [编辑 - 12/9/03 by liskman] |
|
|
沙发#
发布于: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; } |
|
|
板凳#
发布于:2003-12-12 23:07
非常感谢!
|
|
|