godhuntress
驱动小牛
驱动小牛
  • 注册日期2002-12-10
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1171回复:5

怎么得到驱动的接口句柄

楼主#
更多 发布于:2003-03-24 09:43
1.写一个驱动测试程序.用SetuoDiNumDeviceInterface取得驱动程序的接口.但是我看的例子是用的GUID,SetuoDiNumDeviceInterface里的参数就写头文件里GUID的定义就行了.我的驱动用的是符号链接名,能不能用这个例程?好象并不匹配

2.看DDK写驱动时怎么根据功能查找自己需要的例程?我没有头绪

3.USB驱动是不是一定要能处理GET DESCRIPTOR, SET PORTS  ,GET_FRAME_INFO等等这些IOCTL?如果不能处理会怎样?

[编辑 -  3/26/03 by  godhuntress]

最新喜欢:

eyeszhueyeszh...
武汉新手前来报道! 请不佞赐教!
godhuntress
驱动小牛
驱动小牛
  • 注册日期2002-12-10
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-03-25 23:08
顶一下,求助啊
武汉新手前来报道! 请不佞赐教!
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2003-03-25 23:20
1、如果是symblink,在createfile就用这个linkname
mailme
驱动老牛
驱动老牛
  • 注册日期2001-05-21
  • 最后登录2010-02-25
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-03-26 20:39

// 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;
}

////////////////////////////////////////////////////////////

chris cant的解决方法,呵呵,很好用
早起早睡 精神百倍
godhuntress
驱动小牛
驱动小牛
  • 注册日期2002-12-10
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-03-26 20:55
Cant的书我有,就是看了以后不知道怎么做。因为我没有用GUID。不过现在我已经用CreateFile,ReadFile,WriteFile写出了test程序。问题是,一个CreateFile就能解决问题,Cant前面那些语句是干嘛的?是因为GUID才需要吗?
还有,
3.USB驱动是不是一定要能处理GET DESCRIPTOR, SET PORTS ,GET_FRAME_INFO等等这些IOCTL?如果不能处理会怎样?
武汉新手前来报道! 请不佞赐教!
mailme
驱动老牛
驱动老牛
  • 注册日期2001-05-21
  • 最后登录2010-02-25
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-03-27 12:12
Cant的书我有,就是看了以后不知道怎么做。因为我没有用GUID。不过现在我已经用CreateFile,ReadFile,WriteFile写出了test程序。问题是,一个CreateFile就能解决问题,Cant前面那些语句是干嘛的?是因为GUID才需要吗?
还有,
3.USB驱动是不是一定要能处理GET DESCRIPTOR, SET PORTS ,GET_FRAME_INFO等等这些IOCTL?如果不能处理会怎样?
 


1、对,那些语句是为guid调用的。关于guid与设备标识符的区别,oney的书里详细介绍了

2、usb偶正在学习,呵呵,还什么都不懂哈
早起早睡 精神百倍
游客

返回顶部