A. 如何用vc + DDK 创建虚拟磁盘
你可以使用DOS命令subst将一个普通目录设置为一个盘符
B. 如何根据程序崩溃时的DMP文件使用WinDbg查找调用堆栈
使用 Windbg.exe 打开转储文件
下载并安装调试程序。 要下载调试程序,请访问下面的 Microsoft 网站:
Microsoft 调试工具
http://www.microsoft.com/whdc/devtools/ddk/default.mspx(http://www.microsoft.com/whdc/devtools/ddk/default.mspx)
打开安装调试程序,文件夹,然后双击 Windbg.exe 启动调试器。
在 文件 菜单上单击 打开的崩溃转储 (或按 Ctrl+D),然后选择要查看该转储文件。
回到顶端
使用 Windbg.exe 确定异常堆栈
在 Windbg.exe,打开进程的.dmp 文件。
请确保您符号路径指向正确的位置。 有关如何执行此操作,请访问下面的 Microsoft Web 站点:
如何获得符号
http://www.microsoft.com/whdc/devtools/ddk/default.mspx(http://www.microsoft.com/whdc/devtools/ddk/default.mspx)
在命令提示符下键入 ~ * kb 以列出所有进程中的线程。
标识对函数调用的线程 Kernel32! UnhandledExceptionFilter 。 它类似于以下:
120 id: f0f0f0f0.a1c Suspend: 1 Teb 7ff72000 Unfrozen
ChildEBP RetAddr Args to Child
09a8f334 77eb9b46 0000244c 00000001 00000000 ntdll!ZwWaitForSingleObject+0xb [i386/usrstubs.asm @ 2004]
09a8f644 77ea7e7a 09a8f66c 77e861ae 09a8f674 KERNEL32!UnhandledExceptionFilter+0x2b5
[D:/nt/private/windows/base/client/thread.c @ 1753]
09a8ffec 00000000 787bf0b8 0216fe94 00000000 KERNEL32!BaseThreadStart+0x65 [D:/nt/private/windows/base/client/support.c @ 453]
切换到该线程 (在本例中,该线程是"~120s")。
在第一个参数的指定位置显示内存内容 Kernel32! UnhandledExceptionFilter 通过 添加 第一个参数 。 此指向 EXCEPTION_POINTERS 结构
0:120> dd 09a8f66c
09a8f66c 09a8f738 09a8f754 09a8f698 77f8f45c
09a8f67c 09a8f738 09a8ffdc 09a8f754 09a8f710
09a8f68c 09a8ffdc 77f8f5b5 09a8ffdc 09a8f720
09a8f69c 77f8f3fa 09a8f738 09a8ffdc 09a8f754
09a8f6ac 09a8f710 77e8615b 09a8fad4 00000000
09a8f6bc 09a8f738 74a25336 09a8f6e0 09a8f910
09a8f6cc 01dc8ad8 0d788918 00000001 018d1f28
09a8f6dc 00000001 61746164 7073612e 09a8f71c
第一个 DWORD 代表异常记录。 若要获取有关异常的类型信息,请请在命令提示符处运行以下:
.exr first DWORD from step 6
0:120> .exr 09a8f738
ExceptionAddress: 78011f32 (MSVCRT!strnicmp+0x00000092)
ExceptionCode: c0000005
ExceptionFlags: 00000000
NumberParameters: 2
Parameter[0]: 00000000
Parameter[1]: 00000000
Attempt to read from address 00000000
第二个 DWORD 是上下文记录。 若要获取上下文的信息,请在命令提示符处运行以下:
.cxr second DWORD from step 6
0:120> .cxr 09a8f754
eax=027470ff ebx=7803cb28 ecx=00000000 edx=00000000 esi=00000000 edi=09a8fad4
eip=78011f32 esp=09a8fa20 ebp=09a8fa2c iopl=0 nv up ei ng nz na po nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00010286
MSVCRT!strnicmp+92:
78011f32 8a06 mov al,[esi]
运行 kv 命令获得实际的异常的调用堆栈。 这有助于您识别可能未被处理正确的过程中实际问题
0:120> kv
ChildEBP RetAddr Args to Child
WARNING: Stack unwind information not available. Following frames may be wrong.
09a8fa2c 780119ab 09a8fad4 00000000 09a8faa8 MSVCRT!strnicmp+0x92
09a8fa40 7801197c 09a8fad4 00000000 6d7044fd MSVCRT!stricmp+0x3c
09a8fa80 6e5a6ef6 09a8fad4 2193d68d 00e5e298 MSVCRT!stricmp+0xd
09a8fa94 6d7043bf 09a8fad4 09a8faa8 0000001c IisRTL!CLKRHashTable::FindKey+0x59 (FPO: [2,0,1])
09a8faac 749fc22d 09a8fad4 01d553b0 0000001c ISATQ!CDirMonitor::FindEntry+0x1e
(FPO: [Non-Fpo]) [D:/nt/private/inet/iis/svcs/infocomm/atq/dirmon.cpp @ 884]
09a8fac4 749fd1cb 09a8fad4 09a8fb10 525c3a46 asp!RegisterASPDirMonitorEntry+0x6e
(FPO: [EBP 0x09a8fb08] [2,0,4]) [D:/nt/private/inet/iis/svcs/cmp/asp/aspdmon.cpp @ 534]
09a8fb08 749fcdd6 00000000 09a8fcbc 018d1f28 asp!CTemplateCacheManager::+0x8a
(FPO: [Non-Fpo]) [D:/nt/private/inet/iis/svcs/cmp/asp/cachemgr.cpp @ 621]
09a8fb3c 74a08bfe 00000000 000000fa 74a30958 asp!CTemplateCacheManager::Load+0x382
(FPO: [Non-Fpo]) [D:/nt/private/inet/iis/svcs/cmp/asp/cachemgr.cpp @ 364]
09a8fc68 74a0d4c9 04c12518 018d1f28 09a8fcbc asp!LoadTemplate+0x42
(FPO: [Non-Fpo]) [D:/nt/private/inet/iis/svcs/cmp/asp/exec.cpp @ 1037]
09a8fcc0 74a2c3e5 00000000 0637ee38 09a8fd58 asp!CHitObj::ViperAsyncCallback+0x3e8
(FPO: [Non-Fpo]) [D:/nt/private/inet/iis/svcs/cmp/asp/hitobj.cpp @ 2414]
09a8fcd8 787c048a 00000000 77aa1b03 01e91ed8 asp!CViperAsyncRequest::OnCall+0x3f
(FPO: [Non-Fpo]) [D:/nt/private/inet/iis/svcs/cmp/asp/viperint.cpp @ 194]
09a8fce0 77aa1b03 01e91ed8 77a536d8 00000000 COMSVCS!STAActivityWorkHelper+0xa
(FPO: [1,0,0])
09a8fd24 77aa1927 000752f8 000864dc 787c0480 ole32!EnterForCallback+0x6a
(FPO: [Non-Fpo]) [D:/nt/private/ole32/com/dcomrem/crossctx.cxx @ 1759]
09a8fe50 77aa17ea 000864dc 787c0480 01e91ed8 ole32!SwitchForCallback+0x12b
(FPO: [Non-Fpo]) [D:/nt/private/ole32/com/dcomrem/crossctx.cxx @ 1644]
09a8fe78 77aa60c1 000864dc 787c0480 01e91ed8 ole32!PerformCallback+0x50
(FPO: [Non-Fpo]) [D:/nt/private/ole32/com/dcomrem/crossctx.cxx @ 1559]
09a8fed4 77aa5fa6 04f2b4c0 787c0480 01e91ed8 ole32!CObjectContext::InternalContextCallback+0xf5
(FPO: [Non-Fpo]) [D:/nt/private/ole32/com/dcomrem/context.cxx @ 3866]
09a8fef4 787bd3c3 04f2b4c0 787c0480 01e91ed8 ole32!CObjectContext::DoCallback+0x1a
(FPO: [Non-Fpo]) [D:/nt/private/ole32/com/dcomrem/context.cxx @ 3746]
09a8ff24 787bf373 0216fb3c 00000007 09a8ffec COMSVCS!STAActivityWork::DoWork+0x73
(FPO: [0,4,2])
09a8ffb4 77e8758a 0216fe94 0216fb3c 00000007 COMSVCS!STAThread::STAThreadWorker+0x2bb
(FPO: [EBP 0x09a8ffec] [1,31,4])
09a8ffec 00000000 787bf0b8 0216fe94 00000000 KERNEL32!BaseThreadStart+0x52
(FPO: [Non-Fpo]) [D:/nt/private/windows/base/client/support.c @ 451]
C. vc2008遇到的问题
警告:可能是你的代码文件里面有一些中文注释之类的字符
错误:_cvReleaseImage这个符号定义的文件或得lib,可能是没有包含进来
D. 获取鼠标的设备 ID 时,出现一个错误
首先,应该解决如何实现“开始”---“运行”的正常使用。你可以试试这个方法是否可以让你进入到注册表中:
找一个程序的快捷方式,右键点击"属性"
"目标"中写"regedit"这样可以打开注册表.
然后打开HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies \Explorer,在右边空白处单击鼠标右键,选择"新建"的"DWORD",然后输入名字为"NoRun",再双击它,修改NoRun 为1 表示禁用"运行",0 则相反。
如果真的可以进入注册表了,运行也可以正常使用了,那么“设备管理器”的重新使用就显得十分简单了。
试试看下面的方法吧,不知道是否可行:
1. 重新从Windows CD中解压devmgmt.msc和devmgmt.dll,命令如下:
expand cdrom:\i386\devmgmt.ms_ %systemroot%\system32\devmgmt.msc
expand cdrom:\i386\devmgr.dl_ %systemroot%\system32\devmgr.dll
2.重新注册一下msxml parser,命令如下:
regsvr32 C:\Windows\system32\msxml3.dll
3.如果2还不行,去
下载Microsoft XML Parser 3.0, 可能带SP一类的,然后安装那个msxml3xxx.msi文件。
一般这个问题还伴随Windows Update不灵的问题,你也可以检查一下。
先试试第2种方法,不行后再试试1和3,毕竟2比较简单一些。
最后,
这是来自微软的信息,希望对你有用。
DevCon 命令行实用工具可替代设备管理器
察看本文应用于的产品
文章编号 : 311272
最后修改 : 2005年11月23日
修订 : 4.2
本文的发布号曾为 CHS311272
本页
概要
更多信息
使用 DevCon
DevCon 命令示例
注意
这篇文章中的信息适用于:
概要
DevCon 实用工具是一种命令行实用工具,可以替代设备管理器。使用 DevCon,您可以启用、禁用、重新启动、更新、删除和查询单个设备或一组设备。DevCon 还提供与驱动程序开发人员有关、但无法在设备管理器中看到的信息。
可以将 DevCon 用于 Microsoft Windows 2000、Windows XP 和 Windows Server 2003,但不能将其用于 Windows 95、Windows 98 或 Windows Millennium Edition。
回到顶端
更多信息
DevCon 不可再分发。提供它是为了用作调试和开发工具。您可以随意修改 DevCon 以供个人专用。此示例演示了如何有效地同时使用 SetupAPI 和 CfgMgr32 函数来枚举设备和执行设备操作。 可以从 Microsoft 下载中心下载以下文件:
立即下载 DevCon 软件包。 () 发布日期:2003 年 1 月 29 日
有关如何下载 Microsoft 支持文件的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
119591 () 如何从联机服务获取 Microsoft 支持文件
Microsoft 已对此文件进行了病毒扫描。Microsoft 使用的是该文件发布时可以获得的最新病毒检测软件。该文件存储在安全性得到增强的服务器上,以防止在未经授权的情况下对其进行更改。
DevCon.exe 文件包含以下文件:
文件 说明
I386\DevCon.exe 32 位 DevCon 工具的二进制文件。此文件在 64 位 Windows 上不能充分发挥作用。
Ia64\DevCon.exe 64 位 DevCon 工具的二进制文件。
注意:DevCon 的源代码也可以从 Windows DDK(位于 ())中得到,路径是 DDK root\Src\Setup\Devcon,此位置还提供了文档。
回到顶端
使用 DevCon
DevCon 是一个带有内置文档的命令行实用工具。如果您运行 devcon help 命令,将会出现以下命令列表和描述信息。devcon help 命令可提供关于任何命令的详细帮助。使用其中的某些命令,您可以指定远程目标计算机。如果您在 WOW64 上使用 32 位版的 DevCon,则以下命令有效。设备控制台帮助:
devcon.exe [-r] [-m:\\<machine>] <command> [<arg>...]
-r 如果指定它,在命令完成后若需要则重新启动计算机。
<machine> 是目标计算机的名称。
<command> 是将要执行的命令(如下所示)。
<arg>... 是命令需要的一个或多个参数。
要获取关于某一特定命令的帮助,请键入:devcon.exe help <command>
classfilter 允许修改类别筛选程序。
classes 列出所有设备安装类别。
disable 禁用与指定的硬件或实例 ID 匹配的设备。
driverfiles 列出针对设备安装的驱动程序文件。
drivernodes 列出设备的所有驱动程序节点。
enable 启用与指定的硬件或实例 ID 匹配的设备。
find 查找与指定的硬件或实例 ID 匹配的设备。
findall 查找设备,包括那些未显示的设备。
help 显示此信息。
hwids 列出设备的硬件 ID。
install 手动安装设备。
listclass 列出某一安装类别的所有设备。
reboot 重新启动本地计算机。
remove 删除与特定的硬件或实例 ID 匹配的设备。
rescan 扫描以发现新的硬件。
resources 列出设备的硬件资源。
restart 重新启动与特定的硬件或实例 ID 匹配的设备。
stack 列出预期的设备驱动程序堆栈。
status 列出设备的运行状态。
update 手动更新设备。
UpdateNI 手动更新设备,无用户提示
SetHwID 添加、删除和更改根枚举设备的硬件 ID 的顺序。
DevCon 命令示例
devcon -m:\\test find pci\*
列出计算机 test 上的所有已知 PCI 设备。(通过使用 -m,您可以指定一个目标计算机。您必须使用“进程间通信”(IPC) 访问此计算机。)
devcon -r install %WINDIR%\Inf\Netloop.inf *MSLOOP
安装一个新的 Microsoft 环回适配器实例。这将创建一个新的根枚举设备节点,使用此节点您可以安装“虚拟设备”,如环回适配器。如果需要重新启动计算机,此命令还将以安静模式重新启动计算机。
devcon classes
列出所有已知的安装类别。输出结果包含短的未本地化的名称(例如,“USB”)和描述性名称(例如,“通用串行总线控制器”)。
devcon classfilter upper !filter1 !filter2
删除这两个指定的筛选程序。
devcon classfilter lower !badfilter +goodfilter
用“goodfilter”替换“badfilter”。
devcon driverfiles =ports
列出与 ports 安装类别中的每一个设备关联的文件。
devcon disable *MSLOOP
禁用硬件 ID 以“MSLOOP”结尾(包括“*MSLOOP”)的所有设备。
devcon drivernodes @ROOT\PCI_HAL\PNP0A03
列出设备“ROOT\PCI_HAL\PNP0A03”的所有兼容驱动程序。这可以用来确定为什么选择原配的设备信息 (.inf) 文件而不选第三方 .inf 文件。
devcon enable '*MSLOOP
启用硬件 ID 为“*MSLOOP”的所有设备。单引号指示必须严格按字面解释硬件 ID(换句话说,星号 [“*”] 真的是 一个星号,而不是通配符)。
devcon find *
列出本地计算机上存在的所有设备的设备实例。
devcon find pci\*
列出本地计算机上所有已知的“外围组件互连”(PCI) 设备(如果一个设备的硬件 ID 以“PCI\”为前缀,此命令就认为该设备是 PCI 设备)。
devcon find =ports *pnp*
列出存在的作为 ports 安装类别的成员而且硬件 ID 中包含“PNP”的设备。
devcon find =ports @root\*
列出存在的作为 ports 安装类别的成员而且在枚举树的“root”分支中的设备(实例 ID 以“root\”为前缀)。请注意,有关实例 ID 的格式化方式,不应作任何编程假定。要确定根设备,可以检查设备状态位。此功能包括在 DevCon 中是为了帮助进行调试。
devcon findall =ports
列出 ports 类别的“不存在”的设备和存在的设备。这包括已经被删除的设备、从一个插槽移到另一个插槽的设备,以及在某些情况下由于 BIOS 改变而被不同地枚举的设备。
devcon listclass usb 1394
列出命令中所列的每个类别(本例中是 USB 和 1394)的所有存在的设备。
devcon remove @usb\*
删除所有 USB 设备。被删除的设备列出时将显示其删除状态。
devcon rescan
重新扫描以发现新的“即插即用”设备。
devcon resources =ports
列出由 ports 安装类别中的所有设备使用的资源。
devcon restart =net @'ROOT\*MSLOOP\0000
重新启动环回适配器“ROOT\*MSLOOP\0000”。命令中的单引号指示必须按字面解释实例 ID。
devcon hwids=mouse
列出系统中鼠标类设备的所有硬件 ID。
devcon sethwid @ROOT\LEGACY_BEEP\0000 := beep
将硬件 ID beep 赋予旧式蜂鸣设备。
devcon stack =ports
列出设备预期的驱动程序堆栈。包括设备和类别高层/低层筛选程序,以及控制服务。
devcon status @pci\*
列出实例 ID 以“pci\”开头的每一个存在设备的状态。
devcon status @ACPI\PNP0501\1
列出特定设备实例的状态,在本例中是一个高级配置和电源界面 (ACPI) - 枚举的串行端口。
devcon status @root\rdp_mou\0000
列出 Microsoft 终端服务器或终端服务鼠标驱动程序的状态。
devcon status *PNP05*
列出所有 COM 端口的状态。
devcon update mydev.inf *pnp0501
更新与硬件 ID *pnp0501 严格匹配的所有设备,让它们使用 Mydev.inf 中与硬件 ID *pnp0501 关联的最好的驱动程序。
注意:即使系统上已经存在更好的匹配项,这一更新也将强制所有设备使用 Mydev.inf 中的驱动程序。如果在获得签名之前,您想要在开发过程中安装驱动程序的新版本,则这是很有用的。此更新仅影响与指定的硬件 ID 匹配的设备,不会影响到其子设备。如果指定的 .inf 文件未经签名,则 Windows 可能会显示一个对话框,提示您确认是否应安装此驱动程序。如果需要重新启动计算机,将报告这一情况并且 DevCon 返回一个级别 1 错误。如果指定 -r,在需要重新启动计算机时就会自动重启。
注意
? DevCon 将返回一个在脚本中使用的错误级别:
“0”指示成功。
“1”指示需要重新启动。
“2”指示失败。
“3”指示语法错误。
? 如果您指定 -r 并且需要重新启动,则在处理完所有设备后,将在无任何警告信息的情况下重新启动。
? 如果您指定 -m:\\computer 并且命令对远程计算机不起作用,将报告一个错误。
? 为便于交互,DevCon 允许在实例 ID 中使用通配符。不要根据一台计算机或一种操作系统版本去推测有关另一台计算机或另一种操作系统版本的实例 ID 格式的任何信息。
回到顶端
--------------------------------------------------------------------------------
这篇文章中的信息适用于:
? Microsoft Windows 2000 Driver Development Kit (DDK)
? Microsoft Windows XP 驱动程序开发工具包
? Microsoft Windows Server 2003 Driver Development Kit
E. 怎么在DOS下编译C++程序
对于初学c/c++的人,我建议最好在使用dos 环境下的编译器,这样不至于在GUI的环境(比如vc、bcb)里给弄糊涂了。那么在dos环境下如何使用c/c++的编译器了,其实很简单,下面用vc为例;
首先你告诉LIB和INCLUDE在什么地方,在就告诉编译的程序在什么地方,这样我们可以在任何目录下都可以使用编译器,要作到上面的,就理所当然要设定path了!设定如下:
假定你的vc安装在如下目录:
C:\Program Files\Microsoft Visual Studio\VC98\Include
C:\Program Files\Microsoft Visual Studio\VC98\MFC\Include
C:\Program Files\Microsoft Visual Studio\VC98\Lib
C:\Program Files\Microsoft Visual Studio\VC98\MFC\Lib
C:\Program Files\Microsoft Visual Studio\VC98\Bin
C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin
那么写一个批处理文件(autoexec.bat),内容如下:
set path=C:\Program Files\Microsoft Visual Studio\VC98\Bin;C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin (找到vc的编译器cl.exe位置,同时也可以调用MSPDB60.DLL文件)
set Include=C:\Program Files\Microsoft Visual Studio\VC98\Include;C:\Program Files\Microsoft Visual Studio\VC98\MFC\Include
set Lib=C:\Program Files\Microsoft Visual Studio\VC98\Lib;
C:\Program Files\Microsoft Visual Studio\VC98\MFC\Lib
当然如果你不用mfc也可以这样:
set path=C:\Program Files\Microsoft Visual Studio\VC98\Bin;C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin
set Include=C:\Program Files\Microsoft Visual Studio\VC98\Include
set Lib=C:\Program Files\Microsoft Visual Studio\VC98\Lib
如果你是使用的bcb的编译器,设置方法与上面类似!
那么如何在dos 用c/c++的编译器编译程序呢?
那就更简单了!如下:
C:\> CL test.cpp <回车>(呵呵,当然你可以在其他目录下去执行,只要是你编译的cpp文件的目录就行)
至于执行cl.exe有些什么参数实现条件编译,就要自己去查了!:)
当然,上面的方法不适合开发大型的项目,因为很明显文档、程序管理不方便!
F. 自动启动
我的Windows
启动项包括:
启动项:
High
Definition
Audio
Property
Page
Shortcut
命令行:
HDAShCut.exe
启动位置:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
文件信息:
High
Definition
Audio
Property
Page
Shortcut
v1.0a,
Windows
(R)
Server
2003
DDK
provider
启动项:
Alcmtr
命令行:
ALCMTR.EXE
启动位置:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
文件信息:
Realtek
Azalia
Audio
-
Event
Monitor,
Realtek
Semiconctor
Corp.
--------------这些是你的声卡的附加文件
启动项:
AssistSystray
命令行:
F:\全能优化大师\AssistSystray.exe
启动位置:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
文件信息:
全能助手后台服务,
全能助手工作室
——————————————这个是优化大师的后台文件
启动项:
KvMonXP
命令行:
"C:\PROGRA~1\KV2005\KVMonXP.kxp"
/auto
启动位置:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
文件信息:
KVmonxp,
JiangMin
Co.Ltd
-------------------这个是你的江明杀毒软件
动项:
Update
命令行:
C:\Program
Files\Common
Files\UPDATE\Update.exe
启动位置:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
文件信息:
---------这个是系统自动更新的程序
启动项:
res
命令行:
C:\WINDOWS\system32\res.exe
启动位置:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
文件信息:
------这个应该是修改注册表的文件吧
启动项:
ctfmon.exe
命令行:
C:\WINDOWS\system32\ctfmon.exe
启动位置:
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
文件信息:
CTF
Loader,
Microsoft
Corporation
不知道哪些可以去掉,请各位指教!
——------这个是输入法指示器
——————————————————
上面的都可以去掉
没有什么大的实际作用
还有问题加群11034751
附带你的问题
我晚上通过验证
不要一直加不停!!!
G. 用编程的方法禁用某一硬件设备.求代码
首先,应该解决如何实现“开始”---“运行”的正常使用。你可以试试这个方法是否可以让你进入到注册表中:
找一个程序的快捷方式,右键点击"属性"
"目标"中写"regedit"这样可以打开注册表.
然后打开HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies \Explorer,在右边空白处单击鼠标右键,选择"新建"的"DWORD",然后输入名字为"NoRun",再双击它,修改NoRun 为1 表示禁用"运行",0 则相反。
如果真的可以进入注册表了,运行也可以正常使用了,那么“设备管理器”的重新使用就显得十分简单了。
试试看下面的方法吧,不知道是否可行:
1. 重新从Windows CD中解压devmgmt.msc和devmgmt.dll,命令如下:
expand cdrom:\i386\devmgmt.ms_ %systemroot%\system32\devmgmt.msc
expand cdrom:\i386\devmgr.dl_ %systemroot%\system32\devmgr.dll
2.重新注册一下msxml parser,命令如下:
regsvr32 C:\Windows\system32\msxml3.dll
3.如果2还不行,去
下载Microsoft XML Parser 3.0, 可能带SP一类的,然后安装那个msxml3xxx.msi文件。
一般这个问题还伴随Windows Update不灵的问题,你也可以检查一下。
先试试第2种方法,不行后再试试1和3,毕竟2比较简单一些。
最后,
这是来自微软的信息,希望对你有用。
DevCon 命令行实用工具可替代设备管理器
察看本文应用于的产品
文章编号 : 311272
最后修改 : 2005年11月23日
修订 : 4.2
本文的发布号曾为 CHS311272
本页
概要
更多信息
使用 DevCon
DevCon 命令示例
注意
这篇文章中的信息适用于:
概要
DevCon 实用工具是一种命令行实用工具,可以替代设备管理器。使用 DevCon,您可以启用、禁用、重新启动、更新、删除和查询单个设备或一组设备。DevCon 还提供与驱动程序开发人员有关、但无法在设备管理器中看到的信息。
可以将 DevCon 用于 Microsoft Windows 2000、Windows XP 和 Windows Server 2003,但不能将其用于 Windows 95、Windows 98 或 Windows Millennium Edition。
回到顶端
更多信息
DevCon 不可再分发。提供它是为了用作调试和开发工具。您可以随意修改 DevCon 以供个人专用。此示例演示了如何有效地同时使用 SetupAPI 和 CfgMgr32 函数来枚举设备和执行设备操作。 可以从 Microsoft 下载中心下载以下文件:
立即下载 DevCon 软件包。 () 发布日期:2003 年 1 月 29 日
有关如何下载 Microsoft 支持文件的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
119591 () 如何从联机服务获取 Microsoft 支持文件
Microsoft 已对此文件进行了病毒扫描。Microsoft 使用的是该文件发布时可以获得的最新病毒检测软件。该文件存储在安全性得到增强的服务器上,以防止在未经授权的情况下对其进行更改。
DevCon.exe 文件包含以下文件:
文件 说明
I386\DevCon.exe 32 位 DevCon 工具的二进制文件。此文件在 64 位 Windows 上不能充分发挥作用。
Ia64\DevCon.exe 64 位 DevCon 工具的二进制文件。
注意:DevCon 的源代码也可以从 Windows DDK(位于 ())中得到,路径是 DDK root\Src\Setup\Devcon,此位置还提供了文档。
回到顶端
使用 DevCon
DevCon 是一个带有内置文档的命令行实用工具。如果您运行 devcon help 命令,将会出现以下命令列表和描述信息。devcon help 命令可提供关于任何命令的详细帮助。使用其中的某些命令,您可以指定远程目标计算机。如果您在 WOW64 上使用 32 位版的 DevCon,则以下命令有效。设备控制台帮助:
devcon.exe [-r] [-m:\\<machine>] <command> [<arg>...]
-r 如果指定它,在命令完成后若需要则重新启动计算机。
<machine> 是目标计算机的名称。
<command> 是将要执行的命令(如下所示)。
<arg>... 是命令需要的一个或多个参数。
要获取关于某一特定命令的帮助,请键入:devcon.exe help <command>
classfilter 允许修改类别筛选程序。
classes 列出所有设备安装类别。
disable 禁用与指定的硬件或实例 ID 匹配的设备。
driverfiles 列出针对设备安装的驱动程序文件。
drivernodes 列出设备的所有驱动程序节点。
enable 启用与指定的硬件或实例 ID 匹配的设备。
find 查找与指定的硬件或实例 ID 匹配的设备。
findall 查找设备,包括那些未显示的设备。
help 显示此信息。
hwids 列出设备的硬件 ID。
install 手动安装设备。
listclass 列出某一安装类别的所有设备。
reboot 重新启动本地计算机。
remove 删除与特定的硬件或实例 ID 匹配的设备。
rescan 扫描以发现新的硬件。
resources 列出设备的硬件资源。
restart 重新启动与特定的硬件或实例 ID 匹配的设备。
stack 列出预期的设备驱动程序堆栈。
status 列出设备的运行状态。
update 手动更新设备。
UpdateNI 手动更新设备,无用户提示
SetHwID 添加、删除和更改根枚举设备的硬件 ID 的顺序。
DevCon 命令示例
devcon -m:\\test find pci\*
列出计算机 test 上的所有已知 PCI 设备。(通过使用 -m,您可以指定一个目标计算机。您必须使用“进程间通信”(IPC) 访问此计算机。)
devcon -r install %WINDIR%\Inf\Netloop.inf *MSLOOP
安装一个新的 Microsoft 环回适配器实例。这将创建一个新的根枚举设备节点,使用此节点您可以安装“虚拟设备”,如环回适配器。如果需要重新启动计算机,此命令还将以安静模式重新启动计算机。
devcon classes
列出所有已知的安装类别。输出结果包含短的未本地化的名称(例如,“USB”)和描述性名称(例如,“通用串行总线控制器”)。
devcon classfilter upper !filter1 !filter2
删除这两个指定的筛选程序。
devcon classfilter lower !badfilter +goodfilter
用“goodfilter”替换“badfilter”。
devcon driverfiles =ports
列出与 ports 安装类别中的每一个设备关联的文件。
devcon disable *MSLOOP
禁用硬件 ID 以“MSLOOP”结尾(包括“*MSLOOP”)的所有设备。
devcon drivernodes @ROOT\PCI_HAL\PNP0A03
列出设备“ROOT\PCI_HAL\PNP0A03”的所有兼容驱动程序。这可以用来确定为什么选择原配的设备信息 (.inf) 文件而不选第三方 .inf 文件。
devcon enable '*MSLOOP
启用硬件 ID 为“*MSLOOP”的所有设备。单引号指示必须严格按字面解释硬件 ID(换句话说,星号 [“*”] 真的是 一个星号,而不是通配符)。
devcon find *
列出本地计算机上存在的所有设备的设备实例。
devcon find pci\*
列出本地计算机上所有已知的“外围组件互连”(PCI) 设备(如果一个设备的硬件 ID 以“PCI\”为前缀,此命令就认为该设备是 PCI 设备)。
devcon find =ports *pnp*
列出存在的作为 ports 安装类别的成员而且硬件 ID 中包含“PNP”的设备。
devcon find =ports @root\*
列出存在的作为 ports 安装类别的成员而且在枚举树的“root”分支中的设备(实例 ID 以“root\”为前缀)。请注意,有关实例 ID 的格式化方式,不应作任何编程假定。要确定根设备,可以检查设备状态位。此功能包括在 DevCon 中是为了帮助进行调试。
devcon findall =ports
列出 ports 类别的“不存在”的设备和存在的设备。这包括已经被删除的设备、从一个插槽移到另一个插槽的设备,以及在某些情况下由于 BIOS 改变而被不同地枚举的设备。
devcon listclass usb 1394
列出命令中所列的每个类别(本例中是 USB 和 1394)的所有存在的设备。
devcon remove @usb\*
删除所有 USB 设备。被删除的设备列出时将显示其删除状态。
devcon rescan
重新扫描以发现新的“即插即用”设备。
devcon resources =ports
列出由 ports 安装类别中的所有设备使用的资源。
devcon restart =net @'ROOT\*MSLOOP\0000
重新启动环回适配器“ROOT\*MSLOOP\0000”。命令中的单引号指示必须按字面解释实例 ID。
devcon hwids=mouse
列出系统中鼠标类设备的所有硬件 ID。
devcon sethwid @ROOT\LEGACY_BEEP\0000 := beep
将硬件 ID beep 赋予旧式蜂鸣设备。
devcon stack =ports
列出设备预期的驱动程序堆栈。包括设备和类别高层/低层筛选程序,以及控制服务。
devcon status @pci\*
列出实例 ID 以“pci\”开头的每一个存在设备的状态。
devcon status @ACPI\PNP0501\1
列出特定设备实例的状态,在本例中是一个高级配置和电源界面 (ACPI) - 枚举的串行端口。
devcon status @root\rdp_mou\0000
列出 Microsoft 终端服务器或终端服务鼠标驱动程序的状态。
devcon status *PNP05*
列出所有 COM 端口的状态。
devcon update mydev.inf *pnp0501
更新与硬件 ID *pnp0501 严格匹配的所有设备,让它们使用 Mydev.inf 中与硬件 ID *pnp0501 关联的最好的驱动程序。
注意:即使系统上已经存在更好的匹配项,这一更新也将强制所有设备使用 Mydev.inf 中的驱动程序。如果在获得签名之前,您想要在开发过程中安装驱动程序的新版本,则这是很有用的。此更新仅影响与指定的硬件 ID 匹配的设备,不会影响到其子设备。如果指定的 .inf 文件未经签名,则 Windows 可能会显示一个对话框,提示您确认是否应安装此驱动程序。如果需要重新启动计算机,将报告这一情况并且 DevCon 返回一个级别 1 错误。如果指定 -r,在需要重新启动计算机时就会自动重启。
注意
? DevCon 将返回一个在脚本中使用的错误级别:
“0”指示成功。
“1”指示需要重新启动。
“2”指示失败。
“3”指示语法错误。
? 如果您指定 -r 并且需要重新启动,则在处理完所有设备后,将在无任何警告信息的情况下重新启动。
? 如果您指定 -m:\\computer 并且命令对远程计算机不起作用,将报告一个错误。
? 为便于交互,DevCon 允许在实例 ID 中使用通配符。不要根据一台计算机或一种操作系统版本去推测有关另一台计算机或另一种操作系统版本的实例 ID 格式的任何信息。
回到顶端
--------------------------------------------------------------------------------
这篇文章中的信息适用于:
? Microsoft Windows 2000 Driver Development Kit (DDK)
? Microsoft Windows XP 驱动程序开发工具包
? Microsoft Windows Server 2003 Driver Development Kit
H. 什么叫 SDK 还有 DDK 是什么意思
SDK 就是 Software Development Kit 的缩写,中文意思就是“软件开发工具包”。这是一个覆盖面相当广泛的名词,可以这么说:辅助开发某一类软件的相关文档、范例和工具的集合都可以叫做“SDK”。具体到我们这个系列教程,我们后面只讨论广义 SDK 的一个子集——即开发 Windows 平台下的应用程序所使用的 SDK。
呵呵,其实上面只是说了一个 SDK 大概的概念而已,理解什么是 SDK 真有这么容易吗?恐怕没这么简单!为了解释什么是 SDK 我们不得不引入 API、动态链接库、导入库等等概念。^_^,不要怕,也就是几个新的名词而已,我也是到了大学快结束的时候才体会到其实学习新知识就是在学习新名词、新概念和新术语。
首先要接触的是“API”,也就是 Application Programming Interface,其实就是操作系统留给应用程序的一个调用接口,应用程序通过调用操作系统的 API 而使操作系统去执行应用程序的命令(动作)。其实早在 DOS 时代就有 API 的概念,只不过那个时候的 API 是以中断调用的形式(INT 21h)提供的,在 DOS 下跑的应用程序都直接或间接的通过中断调用来使用操作系统功能,比如将 AH 置为 30h 后调用 INT 21h 就可以得到 DOS 操作系统的版本号。而在 Windows 中,系统 API 是以函数调用的方式提供的。同样是取得操作系统的版本号,在 Windows 中你所要做的就是调用 GetVersionEx() 函数。可以这么说,DOS API 是“Thinking in 汇编语言”的,而 Windows API 则是“Thinking in 高级语言”的。DOS API 是系统程序的一部分,他们与系统一同被载入内存并且可以通过中断矢量表找到他们的入口,那么 Windows API 呢?要说明白这个问题就不得不引入我们下面要介绍得这个概念——DLL。
DLL(又是一个缩写,感觉 IT 这个行业里三字头缩写特别多),即 Dynamic Link Library(动态链接库)。我们经常会看到一些 .dll 格式的文件,这些文件就是动态链接库文件,其实也是一种可执行文件格式。跟 .exe 文件不同的是,.dll 文件不能直接执行,他们通常由 .exe 在执行时装入,内含有一些资源以及可执行代码等。其实 Windows 的三大模块就是以 DLL 的形式提供的(Kernel32.dll,User32.dll,GDI32.dll),里面就含有了 API 函数的执行代码。为了使用 DLL 中的 API 函数,我们必须要有 API 函数的声明(.H)和其导入库(.LIB),函数的原型声明不难理解,那么导入库又是做什么用的呢?我们暂时先这样理解:导入库是为了在 DLL 中找到 API 的入口点而使用的。
所以,为了使用 API 函数,我们就要有跟 API 所对应的 .H 和 .LIB 文件,而 SDK 正是提供了一整套开发 Windows 应用程序所需的相关文件、范例和工具的“工具包”。到此为止,我们才真正的解释清楚了 SDK 的含义。
由于 SDK 包含了使用 API 的必需资料,所以人们也常把仅使用 API 来编写 Windows 应用程序的开发方式叫做“SDK 编程”。而 API 和 SDK 是开发 Windows 应用程序所必需的东西,所以其它编程框架和类库都是建立在它们之上的,比如 VCL 和 MFC,虽然他们比起“SDK 编程”来有着更高的抽象度,但这丝毫不妨碍它们在需要的时候随时直接调用 API 函数