using system;
using system.runtime.interopservices;
using system.text;
namespace devclasses
{
/// <summary>
/// summary description for class.
/// </summary>
class deviceclasses
{
/// <summary>
/// the main entry point for the application.
/// </summary>
public const int max_name_ports=7;
public const int regdisposition_openexisting=(0x00000001);
// open key only if exists
public const int cm_registry_hardware=(0x00000000);
public const int cr_success = (0x00000000);
public const int cr_no_such_value = (0x00000025);
public const int cr_invalid_data = (0x0000001f);
public const int digcf_present = (0x00000002);
public const int diocr_installer = (0x00000001);
// maximumallowed access type to reg.
public const int maximum_allowed = (0x02000000);
[structlayout(layoutkind.sequential)]
public class sp_devinfo_data
{
public int cbsize;
public guid classguid;
public int devinst; // devinst handle
public ulong reserved;
};
[dllimport("cfgmgr32.dll")]
public static extern uint32
cm_open_devnode_key(intptr dndevnode, uint32 samdesired,
uint32 ulhardwareprofile,
uint32 disposition,intptr phkdevice, uint32 ulflags);
[dllimport("cfgmgr32.dll")]
public static extern uint32
cm_enumerate_classes(uint32 classindex,ref guid classguid, uint32 params);
[dllimport("setupapi.dll")]//
public static extern boolean
setupdiclassnamefromguida(ref guid classguid,
stringbuilder classname, //char * ?
uint32 classnamesize, ref uint32 requiredsize);
[dllimport("setupapi.dll")]
public static extern intptr
setupdigetclassdevsa(ref guid classguid, uint32 enumerator,
intptr hwndparent, uint32 flags);
[dllimport("setupapi.dll")]
public static extern boolean
setupdienumdeviceinfo(intptr deviceinfoset, uint32 memberindex,
ref sp_devinfo_data deviceinfodata);
[dllimport("setupapi.dll")]
public static extern boolean
setupdidestroydeviceinfolist(intptr deviceinfoset);
[dllimport("setupapi.dll")]
public static extern intptr
setupdigetclassdevsa(ref guid classguid, uint32 samdesired,
uint32 flags, ref string hwndparent, intptr reserved);
[dllimport("setupapi.dll")]
public static extern intptr
setupdiopenclassregkeyexa(
ref guid classguid, uint32 samdesired, int flags, intptr machinename,
uint32 reserved);
[dllimport("advapi32.dll")]
public static extern uint32
regqueryvaluea(intptr keyclass,uint32 subkey,
stringbuilder classdescription,ref uint32 sizeb);
[dllimport("user32.dll")]
public static extern boolean
chartooem(string lpszsrc, stringbuilder lpszdst);
public static int enumerateclasses(uint32 classindex,
ref stringbuilder classname, stringbuilder classdescription, ref string id,
ref bool devicepresent)
{
guid classguid=guid.empty;
intptr newdeviceinfoset;
sp_devinfo_data deviceinfodata;
uint32 result;
stringbuilder name=new stringbuilder("");
bool resnam=false;
uint32 requiredsize=0;
intptr ptr;
result = cm_enumerate_classes(classindex, ref classguid,0);
classname=new stringbuilder("");
devicepresent=false;
//incorrect device class:
if(result == cr_invalid_data)
{
return -2;
}
//device class is absent
if(result == cr_no_such_value)
{
return -1;
}
//bad param. - fatal error
if(result != cr_success)
{
return -3;
}
name.capacity=0;
resnam=setupdiclassnamefromguida(ref classguid,name,requiredsize,ref requiredsize);
if(requiredsize > 0)
{
name.capacity=(int)requiredsize;
resnam=setupdiclassnamefromguida(ref classguid,name,requiredsize,ref requiredsize);
}
newdeviceinfoset=setupdigetclassdevsa(ref classguid,0,intptr.zero,digcf_present);
if(newdeviceinfoset.toint32() == -1)
{
devicepresent=false;
classname=name;
id=classguid.tostring();
return 0;}
intptr keyclass=setupdiopenclassregkeyexa(
ref classguid, maximum_allowed, diocr_installer,intptr.zero,0);
if(keyclass.toint32() == -1)
{
devicepresent=false;
classname=name;
id=classguid.tostring();
return 0;}
uint32 sizeb=1000;
stringbuilder cd=new stringbuilder("");
classdescription.capacity=1000;
uint32 res=regqueryvaluea(keyclass,0,classdescription,ref sizeb);
if(res != 0)classdescription=new stringbuilder("");
setupdidestroydeviceinfolist(newdeviceinfoset);
classname=name;
id=classguid.tostring();
devicepresent=true;
return 0;
}
[stathread]
static void main(string[] args)
{
stringbuilder classes=new stringbuilder("");
stringbuilder classesdescr=new stringbuilder("");
stringbuilder classesdescroem=new stringbuilder("");
classesdescroem.capacity=1000;
boolean devexist=false;
uint32 i=0;
string id="";
while(true)
{
int res=enumerateclasses(i,ref classes,classesdescr,ref id ,ref devexist);
if(res == -1)break;
++i;
if(res < -1 || !devexist)continue;
console.writeline("classname={0}, description={1},id={2}",classes,classesdescr,id);
}
return;
}
}
}
////////////////////////////////////////////////////////在我机子上运行结果//////////////////////////////////////////////////////////////////
classname=wceusbs, description=windows ce usb devices,id=25dbce51-6c8f-4a72-8a6d
-b54c2b4fc835
classname=security accelerator, description=security accelerators,id=268c95a1-ed
fe-11d3-95c3-0010dc4050a5
classname=usb, description=通用串行总线控制器,id=36fc9e60-c465-11cf-8056-4445535
40000
classname=pnpprinters, description=ieee 1394 和 scsi 打印机,id=4658ee7e-f050-11d
1-b6bd-00c04fa372a7
classname=dot4, description=ieee 1284.4 设备,id=48721b56-6795-11d2-b1a8-0080c72e
74a2
classname=dot4print, description=ieee 1284.4 兼容打印机,id=49ce6ac8-6f86-11d2-b1
e5-0080c72e74a2
classname=cdrom, description=dvd/cd-rom 驱动器,id=4d36e965-e325-11ce-bfc1-08002b
e10318
classname=computer, description=计算机,id=4d36e966-e325-11ce-bfc1-08002be10318
classname=diskdrive, description=磁盘驱动器,id=4d36e967-e325-11ce-bfc1-08002be10
318
classname=display, description=显示卡,id=4d36e968-e325-11ce-bfc1-08002be10318
classname=fdc, description=软盘控制器,id=4d36e969-e325-11ce-bfc1-08002be10318
classname=hdc, description=ide ata/atapi 控制器,id=4d36e96a-e325-11ce-bfc1-08002
be10318
classname=keyboard, description=键盘,id=4d36e96b-e325-11ce-bfc1-08002be10318
classname=media, description=声音、视频和游戏控制器,id=4d36e96c-e325-11ce-bfc1-0
8002be10318
classname=modem, description=调制解调器,id=4d36e96d-e325-11ce-bfc1-08002be10318
classname=monitor, description=监视器,id=4d36e96e-e325-11ce-bfc1-08002be10318
classname=mouse, description=鼠标和其它指针设备,id=4d36e96f-e325-11ce-bfc1-08002
be10318
classname=mtd, description=memory technology driver,id=4d36e970-e325-11ce-bfc1-0
8002be10318
classname=multifunction, description=多功能卡,id=4d36e971-e325-11ce-bfc1-08002be
10318
classname=net, description=网络适配器,id=4d36e972-e325-11ce-bfc1-08002be10318
classname=netclient, description=网络客户,id=4d36e973-e325-11ce-bfc1-08002be1031
8
classname=netservice, description=网络服务,id=4d36e974-e325-11ce-bfc1-08002be103
18
classname=nettrans, description=网络协议,id=4d36e975-e325-11ce-bfc1-08002be10318
classname=pcmcia, description=pcmcia 卡,id=4d36e977-e325-11ce-bfc1-08002be10318
classname=ports, description=端口 (com 和 lpt),id=4d36e978-e325-11ce-bfc1-08002b
e10318
classname=printer, description=打印机,id=4d36e979-e325-11ce-bfc1-08002be10318
classname=scsiadapter, description=scsi 和 raid 控制器,id=4d36e97b-e325-11ce-bfc
1-08002be10318
classname=system, description=系统设备,id=4d36e97d-e325-11ce-bfc1-08002be10318
classname=unknown, description=其它设备,id=4d36e97e-e325-11ce-bfc1-08002be10318
classname=floppydisk, description=软盘驱动器,id=4d36e980-e325-11ce-bfc1-08002be1
0318
classname=processor, description=处理器,id=50127dc3-0f36-415e-a6cc-4cb3be910b65
classname=multiportserial, description=多串口卡,id=50906cb8-ba12-11d1-bf5d-0000f
805f530
classname=smartcardreader, description=智能卡阅读器,id=50dd5230-ba8a-11d1-bf5d-0
000f805f530
classname=volumesnapshot, description=存储卷影副本,id=533c5b84-ec70-11d2-9505-00
c04f79deaf
classname=biometric, description=personal identification devices,id=53d29ef7-377
c-4d14-864b-eb3a85769359
classname=1394, description=ieee 1394 总线主控制器,id=6bdd1fc1-810f-11d0-bec7-08
002be2092f
classname=infrared, description=红外线设备,id=6bdd1fc5-810f-11d0-bec7-08002be209
2f
classname=image, description=图像处理设备,id=6bdd1fc6-810f-11d0-bec7-08002be2092
f
classname=tapedrive, description=磁带驱动器,id=6d807884-7d21-11cf-801c-08002be10
318
classname=volume, description=存储卷,id=71a27cdd-812a-11d0-bec7-08002be2092f
classname=battery, description=电池,id=72631e54-78a4-11d0-bcf7-00aa00b7b32a
classname=hidclass, description=人体学接口设备,id=745a17a0-74d3-11d0-b6fe-00a0c9
0f57da
classname=61883, description=61883 设备类,id=7ebefbc0-3200-11d2-b4c2-00a0c9697d0
7
classname=legacydriver, description=非即插即用驱动程序,id=8ecc055d-047f-11d1-a53
7-0000f8753ed1
classname=avc, description=avc 设备类,id=c06ff265-ae09-48f0-812c-16753d7cba83
classname=enum1394, description=ieee 1394 ip 网络计数器,id=c459df55-db08-11d1-b0
09-00a0c9081ff6
classname=mediumchanger, description=介质变换器,id=ce5939ae-ebde-11d0-b181-0000f
8753ec4
classname=sbp2, description=sbp2 ieee 1394 设备,id=d48179be-ec20-11d1-b6b8-00c04
fa372a7
文章整理:站长天空 网址:http://www.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




