阅读:2396回复:0
在windows下获取设备分配的硬件资源的一般办法.
前几天,因为要直接对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); |
|