获取指定类型的设备,符号链接



头文件:DeviceInterfaceClassGUID.h

//keyBoard 
DEFINE_GUID(GUID_CLASS_KEYBOARD, 0x884b96c3, 0x56ef, 0x11d1, 0xbc, 0x8c, 0x00, 0xa0, 0xc9, 0x14, 0x05, 0xdd); 
//Mouse 
DEFINE_GUID(GUID_CLASS_MOUSE, 0x378de44c, 0x56ef, 0x11d1, 0xbc, 0x8c, 0x00, 0xa0, 0xc9, 0x14, 0x05, 0xdd ); 
//Parallel 
DEFINE_GUID(GUID_PARALLEL_DEVICE, 0x97F76EF0, 0xF883, 0x11D0, 0xAF, 0x1F, 0x00, 0x00, 0xF8, 0x00, 0x84, 0x5C); 
DEFINE_GUID(GUID_PARCLASS_DEVICE, 0x811FC6A5, 0xF728, 0x11D0, 0xA5, 0x37, 0x00, 0x00, 0xF8, 0x75, 0x3E, 0xD1); 
//PCMCIA 
DEFINE_GUID(GUID_PCMCIA_INTERFACE_STANDARD, 0xbed5dadfL, 0x38fb, 0x11d1, 0x94, 0x62, 0x00, 0xc0, 0x4f, 0xb9, 0x60, 0xee); 
//SCSI 
DEFINE_GUID(ScsiRawInterfaceGuid, 0x53f56309L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b); 
DEFINE_GUID(WmiScsiAddressGuid, 0x53f5630fL, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b); 
//Serial 
DEFINE_GUID(GUID_CLASS_COMPORT, 0x86e0d1e0L, 0x8089, 0x11d0, 0x9c, 0xe4, 0x08, 0x00, 0x3e, 0x30, 0x1f, 0x73); 
DEFINE_GUID(GUID_SERENUM_BUS_ENUMERATOR, 0x4D36E978L, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18); 
//Storage 
DEFINE_GUID(DiskClassGuid, 0x53f56307L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b); 
DEFINE_GUID(CdRomClassGuid, 0x53f56308L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b); 
DEFINE_GUID(PartitionClassGuid, 0x53f5630aL, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b); 
DEFINE_GUID(TapeClassGuid, 0x53f5630bL, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b); 
DEFINE_GUID(WriteOnceDiskClassGuid, 0x53f5630cL, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b); 
DEFINE_GUID(VolumeClassGuid, 0x53f5630dL, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b); 
DEFINE_GUID(MediumChangerClassGuid, 0x53f56310L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b); 
DEFINE_GUID(FloppyClassGuid, 0x53f56311L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b); 
DEFINE_GUID(CdChangerClassGuid, 0x53f56312L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b); 
DEFINE_GUID(StoragePortClassGuid, 0x2accfe60L, 0xc130, 0x11d2, 0xb0, 0x82, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);

程序代码:
//设备类型判断,获取当前计算机所有的光盘驱动器。

//by obaby tested on 2010-04-27
#include "windows.h"
#include "tchar.h"
#include "stdio.h"
#include "DeviceInterfaceClassGUID.h"
#ifdef __cplusplus
extern "C"
{
#endif
#include "winioctl.h"
#include "initguid.h"
#include "setupapi.h"
#ifdef __cplusplus
}
#endif

#pragma comment(lib,"setupapi.lib")
#define INTERFACE_DETAIL_SIZE    (1024)

int GetDevicePath(LPGUID lpGuid, LPTSTR* pszDevicePath);

int _tmain(int argc, _TCHAR* argv[])
{
	GUID tmpGuid;
	LPTSTR lpPath[10];
	for (int i=0 ;i <10;i++)
		lpPath[i]=new TCHAR[100];
	char c;
	int cdcount;
	memcpy(&tmpGuid,&CdRomClassGuid,sizeof(CdRomClassGuid));
	cdcount = GetDevicePath(&tmpGuid,lpPath);
	_tprintf(_T("All Cdroms on this computer:\n")); //打印本机的所有cd驱动器
	_tprintf(_T("============================================\n"));
	for (int j =0 ;j cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);

	nCount = 0;
	bResult = TRUE;

	// 设备序号=0,1,2... 逐一测试设备接口,到失败为止
	while (bResult)
	{
		ifdata.cbSize = sizeof(ifdata);

		// 枚举符合该GUID的设备接口
		bResult = ::SetupDiEnumDeviceInterfaces(
			hDevInfoSet,     // 设备信息集句柄
			NULL,            // 不需额外的设备描述
			lpGuid,          // GUID
			(ULONG)nCount,   // 设备信息集里的设备序号
			&ifdata);        // 设备接口信息

		if (bResult)
		{
			// 取得该设备接口的细节(设备路径)
			bResult = SetupDiGetInterfaceDeviceDetail(
				hDevInfoSet,    // 设备信息集句柄
				&ifdata,        // 设备接口信息
				pDetail,        // 设备接口细节(设备路径)
				INTERFACE_DETAIL_SIZE,   // 输出缓冲区大小
				NULL,           // 不需计算输出缓冲区大小(直接用设定值)
				NULL);          // 不需额外的设备描述
			if (bResult)
			{
				// 复制设备路径到输出缓冲区
				::_tcscpy(pszDevicePath[nCount], pDetail->DevicePath);
				// 调整计数值
				nCount++;
			}
		}
	}
	// 释放设备接口数据空间
	::GlobalFree(pDetail);
	// 关闭设备信息集句柄
	::SetupDiDestroyDeviceInfoList(hDevInfoSet);
	return nCount;
}

原创文章,转载请注明: 转载自 obaby@mars

本文标题: 《获取指定类型的设备,符号链接》

本文链接地址: https://h4ck.org.cn/2010/04/get-device-type/


分享文章:

猜你喜欢:

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注