如何在Win2000/xp下禁止某些硬件?比如说网卡,CD-ROM..
2004-03-12 16:24
369 查看
在NT的基础上,MS在NT4.0后的操作系统里都提供了很多以SetupDiXXXXX开头的函数,
就是大家经常所说的 SetupAPI.现在举一些简单的例子来说明这些情况:
1,首先我们要访问系统的硬件库,用API SetupDiGetClassDevs,在DDK的文档中,函数的原型如下:
2,然后利用HDEVINFO hDev 遍历所有的硬件,API原型如下:
/ Device registry property codes
// (Codes marked as read-only (R) may only be used for
// SetupDiGetDeviceRegistryProperty)
//
// These values should cover the same set of registry properties
// as defined by the CM_DRP codes in cfgmgr32.h.
//
#define SPDRP_DEVICEDESC (0x00000000) // DeviceDesc (R/W)
#define SPDRP_HARDWAREID (0x00000001) // HardwareID (R/W)
#define SPDRP_COMPATIBLEIDS (0x00000002) // CompatibleIDs (R/W)
#define SPDRP_NTDEVICEPATHS (0x00000003) // Unsupported, DO NOT USE
#define SPDRP_SERVICE (0x00000004) // Service (R/W)
#define SPDRP_CONFIGURATION (0x00000005) // Configuration (R)
#define SPDRP_CONFIGURATIONVECTOR (0x00000006) // ConfigurationVector (R)
#define SPDRP_CLASS (0x00000007) // Class (R--tied to ClassGUID)
#define SPDRP_CLASSGUID (0x00000008) // ClassGUID (R/W)
#define SPDRP_DRIVER (0x00000009) // Driver (R/W)
#define SPDRP_CONFIGFLAGS (0x0000000A) // ConfigFlags (R/W)
#define SPDRP_MFG (0x0000000B) // Mfg (R/W)
#define SPDRP_FRIENDLYNAME (0x0000000C) // FriendlyName (R/W)
#define SPDRP_LOCATION_INFORMATION (0x0000000D) // LocationInformation (R/W)
#define SPDRP_PHYSICAL_DEVICE_OBJECT_NAME (0x0000000E) // PhysicalDeviceObjectName (R)
#define SPDRP_CAPABILITIES (0x0000000F) // Capabilities (R)
#define SPDRP_UI_NUMBER (0x00000010) // UiNumber (R)
#define SPDRP_UPPERFILTERS (0x00000011) // UpperFilters (R/W)
#define SPDRP_LOWERFILTERS (0x00000012) // LowerFilters (R/W)
#define SPDRP_MAXIMUM_PROPERTY (0x00000013) // Upper bound on ordinals
也可以在过虑特定的设备如 SPDRP_DEVTYPE = NET。CDROM等。
3。现在我们可以禁止或启用特定的设备了。相关API
SetupDiSetClassInstallParams
SetupDiCallClassInstaller
至此,我们已经做到我们想要的,
程序在VC6,SP5,WinDDK2462 ,Win2000下调试通过。
就是大家经常所说的 SetupAPI.现在举一些简单的例子来说明这些情况:
1,首先我们要访问系统的硬件库,用API SetupDiGetClassDevs,在DDK的文档中,函数的原型如下:
HDEVINFO SetupDiGetClassDevs( IN LPGUID ClassGuid,OPTIONAL IN PCTSTR Enumerator,OPTIONAL IN HWND hwndParent,OPTIONAL IN DWORD Flags );成功后我们可以得到一个HANDLE,指向DECINFO。Enumerator我们可以指定特定的设备类型,如“USB”,"PCI"等
2,然后利用HDEVINFO hDev 遍历所有的硬件,API原型如下:
WINSETUPAPI BOOL WINAPI SetupDiEnumDeviceInfo( INHDEVINFO DeviceInfoSet,IN DWORD MemberIndex, OUTPSP_DEVINFO_DATA DeviceInfoData );在遍历过程中,我们可以用SetupDiGetDeviceRegistryProperty 得到硬件的属性值,如名称,GUID等,可以参考
/ Device registry property codes
// (Codes marked as read-only (R) may only be used for
// SetupDiGetDeviceRegistryProperty)
//
// These values should cover the same set of registry properties
// as defined by the CM_DRP codes in cfgmgr32.h.
//
#define SPDRP_DEVICEDESC (0x00000000) // DeviceDesc (R/W)
#define SPDRP_HARDWAREID (0x00000001) // HardwareID (R/W)
#define SPDRP_COMPATIBLEIDS (0x00000002) // CompatibleIDs (R/W)
#define SPDRP_NTDEVICEPATHS (0x00000003) // Unsupported, DO NOT USE
#define SPDRP_SERVICE (0x00000004) // Service (R/W)
#define SPDRP_CONFIGURATION (0x00000005) // Configuration (R)
#define SPDRP_CONFIGURATIONVECTOR (0x00000006) // ConfigurationVector (R)
#define SPDRP_CLASS (0x00000007) // Class (R--tied to ClassGUID)
#define SPDRP_CLASSGUID (0x00000008) // ClassGUID (R/W)
#define SPDRP_DRIVER (0x00000009) // Driver (R/W)
#define SPDRP_CONFIGFLAGS (0x0000000A) // ConfigFlags (R/W)
#define SPDRP_MFG (0x0000000B) // Mfg (R/W)
#define SPDRP_FRIENDLYNAME (0x0000000C) // FriendlyName (R/W)
#define SPDRP_LOCATION_INFORMATION (0x0000000D) // LocationInformation (R/W)
#define SPDRP_PHYSICAL_DEVICE_OBJECT_NAME (0x0000000E) // PhysicalDeviceObjectName (R)
#define SPDRP_CAPABILITIES (0x0000000F) // Capabilities (R)
#define SPDRP_UI_NUMBER (0x00000010) // UiNumber (R)
#define SPDRP_UPPERFILTERS (0x00000011) // UpperFilters (R/W)
#define SPDRP_LOWERFILTERS (0x00000012) // LowerFilters (R/W)
#define SPDRP_MAXIMUM_PROPERTY (0x00000013) // Upper bound on ordinals
也可以在过虑特定的设备如 SPDRP_DEVTYPE = NET。CDROM等。
3。现在我们可以禁止或启用特定的设备了。相关API
SetupDiSetClassInstallParams
SetupDiCallClassInstaller
至此,我们已经做到我们想要的,
程序在VC6,SP5,WinDDK2462 ,Win2000下调试通过。
相关文章推荐
- 如何实现开关CD-ROM
- 如何使USB Mass Storage驱动支持CD-ROM格式
- 如何把网卡PXE_ROM写入主板BIOS
- Linux/centos下查看网卡型号,如何查看主板型号,CPU/显卡信息,硬盘型号等硬件信息
- 如何把网卡PXE_ROM写入主板BIOS
- 在Linux/centos下查看网卡型号,如何查看主板型号,CPU/显卡信息,硬盘型号等硬件信息
- Linux:如何挂载CD-ROM光盘驱动器
- [转]如何禁止用户通过任务管理器终止进程的一种方法(Win2000/xp)
- 如何对一个禁止匿名连接的Domino SMTP服务器启用某些匿名SMTP连结
- Linux:如何查看DVD/CD-ROM驱动器的设备信息
- 如何通过程序实现网卡的启用和禁止功能?
- 请将标为Service Pack 2 CD-ROM的光盘插入CD-ROM驱动器(D:),然后单击确定。如何解决? 在windows server 2003服务器上。
- 如何将U盘变成CD-ROM?
- extaspnet 的grid如何禁止选中某些行
- 如何在 Linux 下安装及使用 CD-ROM
- 如何对一个禁止匿名连接的Domino SMTP服务器启用某些匿名SMTP连结
- 如何确定CD-ROM驱动器的盘符?
- 如何实现开关CD-ROM
- 如何禁止用户通过任务管理器终止进程的一种方法(Win2000/xp)
- 如何删除/mnt/cdrom?|如何删除只读文件系统(Read-only files ystem)? failed !bh ? 挂载光盘?挂载usb?