rkt_001
驱动牛犊
驱动牛犊
  • 注册日期2002-11-19
  • 最后登录2004-03-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2339回复:0

在windows下获取设备分配的硬件资源的一般办法.

楼主#
更多 发布于:2004-02-13 20:17
前几天,因为要直接对PARALLEL PROT 进行读写,在网上找了好长时间的,未果.后来,仔细琢磨了一下MSDN中的相关内容.发现其实是对VSDK不熟悉导致的.

这里就把方法列出来, 希望和我一样是新手的兄弟有点收获.以下是
获取最后一个LPT口的IO_RESOURCE的办法.
这些函数,在SDK的帮助里有比较详细的介绍.关于IO资源的结构,非常的多,看完了,基本上在WINDOWS下的硬件编程就显得很是容易了。

需要的头文件 SETUPAPI.H CFGMGR32.H
需要的LIB   SETUPAPI.LIB
const GUID PARAPORT  = {0x97F76EF0L, 0xF883, 0x11D0, {0xAF, 0x1F, 0x00, 0x00,0xF8, 0x00, 0x84, 0x5C }};
HDEVINFO hDev;
hDev = SetupDiGetClassDevs(&PARAPORT,NULL,NULL,DIGCF_DEVICEINTERFACE);
DWORD dwIndex = 0,dwBufferSize = 0;
SP_DEVINFO_DATA spData = {0};
spData.cbSize = sizeof(SP_DEVINFO_DATA);
for(;;)
{
if( !SetupDiEnumDeviceInfo(hDev,dwIndex,&spData) )
{
if( GetLastError() == ERROR_NO_MORE_ITEMS)
break;
}
dwIndex++;
}

LOG_CONF LogConf;
           CM_Get_First_Log_Conf(&LogConf,spData.DevInst,ALLOC_LOG_CONF);

RES_DES ResDes;
RESOURCEID  ResId;
CM_Get_Next_Res_Des(&ResDes,LogConf,ResType_IO,&ResId,0);
CM_Get_Res_Des_Data_Size(&dwBufferSize,ResDes,0);
LPVOID pRes = GlobalAlloc(GPTR,dwBufferSize);
CM_Get_Res_Des_Data(ResDes,pRes,dwBufferSize,0);
PIO_RESOURCE pIoRes = (PIO_RESOURCE)pRes;

CM_Free_Log_Conf_Handle(LogConf);
CM_Free_Log_Conf_Handle(ResDes);
SetupDiDestroyDeviceInfoList(hDev);
游客

返回顶部