MSDN中的内容位置: DEVICE I/O下的 Device Management
MSDN的Windows Multimedia
#include <windows.h>
#include <stdio.h>
#include <setupapi.h>
#include <devguid.h>
#include <regstr.h>
#include <shlwapi.h>
#pragma comment(lib,"setupapi.lib")
#define BUFSIZE 1024
#define SM_SERVERR2 89
void _tmain()
{
HDEVINFO hDevInfo;
SP_DEVINFO_DATA DeviceInfoData;
DWORD i;
hDevInfo = SetupDiGetClassDevs((LPGUID) &GUID_DEVCLASS_CDROM, 0, 0,DIGCF_PRESENT);
/*
GUID_DEVCLASS_FDC 软盘控制器
GUID_DEVCLASS_DISPLAY 显示卡
GUID_DEVCLASS_CDROM 光驱
GUID_DEVCLASS_KEYBOARD 键盘
GUID_DEVCLASS_COMPUTER 计算机
GUID_DEVCLASS_SYSTEM 系统
GUID_DEVCLASS_DISKDRIVE 磁盘驱动器
GUID_DEVCLASS_MEDIA 声音、视频和游戏控制器
GUID_DEVCLASS_MODEM MODEM
GUID_DEVCLASS_MOUSE 鼠标和其他指针设备
GUID_DEVCLASS_NET 网络设备器
GUID_DEVCLASS_USB 通用串行总线控制器
GUID_DEVCLASS_FLOPPYDISK 软盘驱动器
GUID_DEVCLASS_UNKNOWN 未知设备
GUID_DEVCLASS_SCSIADAPTER SCSI 和 RAID 控制器
GUID_DEVCLASS_HDC IDE ATA/ATAPI 控制器
GUID_DEVCLASS_PORTS 端口(COM 和 LPT)
GUID_DEVCLASS_MONITOR 监视器
*/
if (hDevInfo == INVALID_HANDLE_VALUE)
{
// Insert error handling here.
return 1;
}
// Enumerate through all devices in Set.
DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
for (i=0;SetupDiEnumDeviceInfo(hDevInfo,i,
&DeviceInfoData);i++)
{
DWORD DataT;
//LPTSTR buffer = NULL;
char buffer[2048];
DWORD buffersize =sizeof(buffer);
while (!SetupDiGetDeviceRegistryProperty(
hDevInfo,
&DeviceInfoData,
SPDRP_FRIENDLYNAME,
&DataT,
(PBYTE)buffer,
buffersize,
&buffersize))
{
if (GetLastError() ==
ERROR_INSUFFICIENT_BUFFER)
{
// Change the buffer size.
//if (buffer) LocalFree(buffer);
//buffer = (PSP_INF_INFORMATION)LocalAlloc(LPTR,buffersize);
}
else
{
// Insert error handling here.
break;
}
}
if (buffer != NULL && i == 0)
{
temp.Format("<光盘驱动器>");
str += temp;
}
temp.Format("<VALUE>%s</VALUE>",buffer);
str += temp;
if (buffer) LocalFree(buffer);
}
if (i != 0)
{
temp.Format("</光盘驱动器>");
str += temp;
}
if ( GetLastError()!=NO_ERROR &&
GetLastError()!=ERROR_NO_MORE_ITEMS )
{
return 1;
}
// Cleanup
SetupDiDestroyDeviceInfoList(hDevInfo);
}
BOOL SetupDiOpenDeviceInterface(
HDEVINFO DeviceInfoSet,
PCTSTR DevicePath,
DWORD OpenFlags,
PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData
)
SetupDiEnumDeviceInterfaces(
IN HDEVINFO DeviceInfoSet,
IN PSP_DEVINFO_DATA DeviceInfoData, OPTIONAL
IN LPGUID InterfaceClassGuid,
IN DWORD MemberIndex,
OUT PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData
);
DeviceInterfaceData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
SetupDiEnumDeviceInterfaces(hDevInfo,NULL,
&InterfaceClassGuid,i,&DeviceInterfaceData);