我有一个 Marvell 驱动程序,在早期版本的 Windows 中,它在设备管理器的属性中显示“策略”选项卡,但在 Windows 8/8.1 中不再显示。
它是这样的:
虽然它在 Windows 7 和 Vista 中呈现良好,但在 Windows 8 中不存在此新选项卡。我挖掘出来,罪魁祸首(?)是mv91xxm.dll
处理对话框的。反编译器(NikPEViewer)向我展示了一个MFC 图标, 一个出口名为ESATAPortPropPageProvider
,其原始名称hotplug.exe
曾经是。Marvell 的那些懒惰程序员从 2009 年起就忘记更新此文件了。
此对话框的主要用途是启用 Marvell 控制器中的驱动程序缓存模式并禁用 Windows 中的“安全删除”行为(对于连接到控制器的驱动器)。
我不知道如何修复该问题,也不知道是否更新或创建注册表项(我猜是其中的某些内容HKLM\System\CurrentControlSet\Services\mvs91xx
)或编辑某些文件等。
任何形式的帮助都将受到感谢。
笔记: 我将驱动程序上传到 Mega,以防你想挖掘。
[2014 年 5 月 1 日更新]
我给 Marvell 发了电子邮件通过官方网站,虽然他们是驱动程序的制造商,但他们不为网站上无法下载的驱动程序提供支持
尊敬的客户,Marvell 向最终用户发布的唯一经过批准的驱动程序位于我们的网站上:
http://www.marvell.com/support/downloads/search.do
如果您要找的司机不在这里,那么我们不提供。
我们网站上的驱动程序是我们为最终用户(未与 Marvell 签订保密协议的客户)提供的唯一支持。
如果您有任何其他支持需求,请联系您的计算机制造商。谢谢
使用添加注册表项的技巧TreatAsInternalPort
不起作用,主要是因为端口不受 AHCI 的默认 Microsoft 驱动程序管理。我的直觉告诉我,这也是因为 Microsoft 在 Windows 8 中更改了这些驱动程序的配置值。
答案1
分析
我没有相同的硬件,也没有使用 Windows 8.x,所以我将提供一些静态分析。
字符串
首先我mvs91xx.dll
使用 Strings 实用程序扫描了 64 位库文件。
字符串仅扫描您传递给它的文件中的 UNICODE(或 ASCII)字符串,其默认长度为 3 个或更多 UNICODE(或 ASCII)字符。
来源:字符串
以下是完整输出:
!This program cannot be run in DOS mode.
Rich
.text
`.data
.pdata
@.rsrc
@.reloc
EEE
('8PW
700PP
```hhh
xppwpp
SeShutdownPrivilege
Change Cahce Module Policy
You must restart your computer before the new settings will take effect.
Do you want to restart your computer now?
RSDS
d:\project\2013_10\magni_svn\windows\win\sys\amd64\mv91xxm.pdb
%f&
B@H
L$ H
D$ `
D$(H
D$$
D$HH
D$0f
D$XH
\$P
s I
NtH
(tL
t?3
\$0H
t$8H
D$PD
D$1
D$3A
T$0A
8M;
t.H
|$8H+
T$0H
tJH
0t4H
|$8H
L$0
D$(
D$
|$0H
D$0D
L$(H
D$
L$PH3
\$`I
s I
d$X
d$P
!D$0
D$T
D$4
D$8
D$<
D$X
D$PH
D$PH
L$XH
d$(
d$
D$0A
D$4
D$0
D$<
L$X
D$0
d$
%L!
u'H
d$
d$
tUH
D$(
D$
L$0H3
\$XH
D$(
D$
D$4H
D$(H
D$@E3
D$4P
D$
D$4H
D$(H
D$0E3
D$4
D$
L$0
L$0
L$@
L$@
ATH
d$
t2M
d$
t$@H
0A\
VWATAUAVH
t7H
t!H
\$PH
l$XH
A^A]A\_^
SVWH
\$
\$
uxH
D$
\$
t/L
D$
\$
D$
\$
uoE3
\$ E3
\$ H
\$
uaL
D$
\$
D$
\$
_^[
\$0H
t$8H
@SH
McP
A8H
HcH<H
9PE
f9Q
LcA<E3
(E;
t"M+
d$0
L$0
\$0
L$8D
\$8L3
\$@H
\$XE3
T$`H
L$X
D$PH
|$P
tAH
D$8
D$HH
D$0H
D$@H
D$(H
D$ L
L$PL
D$XH
T$`3
D$hH
D$p3
@UH
EP=csm
E0H
@UH
Ep=csm
E8H
@UH
E`=csm
EHH
@UH
=csm
E$H
@UH
E(=csm
E4H
@UH
E@=csm
ELH
@UH
EX=csm
EhH
@UH
Ex=csm
@UH
@UH
pd
pd
strchr
atol
_XcptFilter
malloc
_initterm
free
_amsg_exit
__C_specific_handler
msvcrt.dll
SetupDiOpenDevRegKey
SETUPAPI.dll
HeapAlloc
GetCurrentProcess
HeapFree
GetProcessHeap
GetLastError
DisableThreadLibraryCalls
OutputDebugStringA
CloseHandle
LocalFree
Sleep
RtlVirtualUnwind
RtlLookupFunctionEntry
RtlCaptureContext
QueryPerformanceCounter
GetTickCount
GetCurrentThreadId
GetCurrentProcessId
GetSystemTimeAsFileTime
TerminateProcess
UnhandledExceptionFilter
SetUnhandledExceptionFilter
KERNEL32.dll
OpenProcessToken
RegSetValueExA
RegQueryValueExA
LookupPrivilegeValueA
AdjustTokenPrivileges
RegCloseKey
InitiateSystemShutdownExA
ADVAPI32.dll
EnableWindow
SetWindowLongPtrA
GetDlgItem
MessageBoxA
GetFocus
SendDlgItemMessageA
GetWindowLongPtrA
USER32.dll
DestroyPropertySheetPage
CreatePropertySheetPageA
COMCTL32.dll
MVCOINST.dll
ESATAPortPropPageProvider
N@
kU'9
&D(
HMXB
9;5
?q=
?Zd;
?3=
?/L[
S;uD
?$#
;1a
z?aUY
D?$?
*?}
d|F
U>c{
#Tw
zc%C1
.:3q
,%I
-64OS
NKeb
eSATAport
MatchingDeviceId
eSATAportCount
DriverPolicySet
0123
wwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwww
www
wwww
wwwwwwwwwww}
wwwwwwww
wwwwwwwwwwwwww
wwwwwwwwwwwwww
wwwwwww}
wwww
wwwwwww}x
}wwwwwww}
wwww
wXk
qN]
tno
<sa
_`__``_``a`_`_aaaa`
! !
i\\\\\\\\[\\\\\\\[\\a///2/////////2/22///
i\^
da2/
BB<<<<777111,,,*/
i\^
na2/
RFGHJCDKLL=>>88+/
h\^
}qq
[`//"QRT$
1=>>8+2
j\^
sccy
\`2/"OQ
$%=>>*2
i\^
sccy
\a//"NO
66**
L=>(2
i\]~
rccy
\a//"WN
FTHI*++LL=(/
h\^|~
rccs
\`//'VW
RFTHJCDKLL)2
j\]x|~
rccp~
\_//'VV
QRFTHJCDKL(/
i\^wx|~pcccccb
\`//'UV
OQRFGHJCDK(/
i\]wwx|pcckrss
\a//0UU
NOQRSGHIJD(2
i\^vwwxpccr
\`///YU
WNOQRFTHIJ)/
j\]uvwwmccp
\`//9YY
VWNO5;*THI)2
j\]uuvwmccp
\a//9XY
VVWN
STH)2
i\]ouuvmccbbbbbs
\a//@XX0
RST)/
i\]oouulefffggkt
\`/2@ZXX:
;NPRF(/
h\]loouuvwwx|~
\_2/@ZZXXYYUUUVWNOPQ(/
i\]ffggkkqqqzzz{{{
\_//?MMMMEEEAAAA3345
i\\\\\\\\\\\\\\\\\\\`//&&&&&--&&&&-&&&&./
illlllllll
##"
nPh
_s-
>w+
3Zz
]ZZZZZZZZZZZWV-1---------1-
mV2.AHBC5D;<<(-
kV2.P:#
!!+=>(-
kV239
$=(-
{co
kV73@
GJ'
0<(-
^e~
xco
kV78@
OGJKD;*1
]d}~wca``
kV78F
OOGJKD*1
\dy}rch{
kV7EF
MNOGIK/1
\buyrcj
kV?EE
RR.#:I/-
[btuncfssv
kV?LE
&%"
9G41
]_ptqhhhjj
kV?LTE
@NO41
]_mptuy}~
lV6SUTTQQQRRN91
[WXXXYXXYXYYWV-)))))))))),,
uVh
_s-
F5><<==.
ECK2LPV.
E@J3MOU.
D?H31IT.
-,%
B;G1JKS.(
E9A011R.&#
E/4678:."&'
NQWhX^XXXe
rpq
t}~]
djklnoc
sgba`_f|
ux||||
# # #
#! #
#! #! #
# #
#gdc
# #! #
# # #
# #
# #
# # # #
! #
t5! #! #
lR! #
.Bu
mS! #
<Bv
lR! #
lR! #
d0_
lR! #
b0`
lR! #
`0_
lR! #
]1`
lR! #
[0_
lR! #
V0_
lR! #
U0_
lR! #
O0_
lR! #
M0_
lR! #
K0_
lR! #
F0_
lR! #
lR! #
lS! #
lR! #
lR! #
b;wi=ua=ua=ua=ua<u`=ua=ua<u`9d[qikunntnntnnunntnnunnunntpwyr
cVgdc
y]q
nkgdc
wYl
gdc
rP`
gdc
oJY
gdc
y|~$s
hJ[
rcgdc
4@egdc
5@fgdc
5@fgdc
4@egdc
5Afgdc
4@egdc
5@fgdc
5@fgdc
4@egdc
4@egdc
5@fgdc
5Afgdc
5@egdc
5@fgdc
BL@BM@BM@BL@BL@BL@BL@BM@CMABM@BL@BL@
#w\Rv\Rw]Sw\Rw\Rw\Sv\Rv\Rw\Rw]Sw]Sw]StYQ1-/
_s-
t6REE
F_s-
t6RDD
<_s-
t5REE
=^s,
t5RDE
=_s-
u6RDD
y0_
=_s-
=REE
t0_
=^s,
=REE
j0_
=_s-
=SEE
f0_
=_s-
=REE
[0_
>w+^
=^s,
=REE
=_s-
=SEE
<^s,
=SEE
_s-
;tcc
3ZzWo
vWj
pM\
XBe
4@e
?Ru
CXz
CXz
CYz
CXz
BXz
CXz
CY{
=_s-
|Xfdc
_s-
Zgec
_s-
Zfdc
_s-
Zfdc
y=z
^s-
Zfdc
^<y
_s-
Yfdc
>_s-
vVh
7<K
8<K
7<K
8<K
Policies
MS Shell Dlg
This setting enables driver caching to improve disk performance. This setting will be ignored and un-checked if enabled safely remove disk
Enable driver cache mode.
Note:
The setting will not take effect until you restart system
This setting enables remove disk safely. To disconnect disk from controller, click the Safely Remove Hardware icon in the taskbar notification area.
Enable safely remove disk.
VS_VERSION_INFO
StringFileInfo
040904e4
CompanyName
<Marvell>
FileDescription
Coinstaller
FileVersion
1.0.0.2
InternalName
hotplug.exe
LegalCopyright
2009 (c) <Marvell>. All rights reserved.
OriginalFilename
hotplug.exe
ProductName
driver feature policy
ProductVersion
1.0.0.2
VarFileInfo
Translation
不出所料,结果并非没有垃圾。我将仅突出显示最重要的位。
图书馆信息
虽然版权信息自 2009 年以来没有更新,但根据时间戳,该文件最后一次修改是在 2013 年 10 月。文件中嵌入的构建目录似乎证实了这一点:
d:\project\2013_10\magni_svn\windows\win\sys\amd64\mv91xxm.pdb
文件.pdb
扩展名代表程序数据库,一种存储调试信息的专有 Microsoft 格式。实际上,还有一个msvcrt.dll
字符串,表示该库是使用某个版本的微软 Visual C++。
附注:他们使用(d)Apache Subversion作为他们的软件版本和修订控制系统。
Windows 8.x 兼容性
由于该库于 2013 年 10 月更新,因此有理由认为它们将提供与 Windows 8 的兼容性,甚至可能与 Windows 8.1 兼容。检查mvs91xx.cat
目录文件,以下是与库文件相关的详细信息mvs91xx.dll
:
Tag 9B1349794EE18ECCCBBD7F38FEEA9D44CC42746E
Thumbprint algorithm sha1
Thumbprint 9b 13 49 79 4e e1 8e cc cb bd 7f 38 fe ea 9d 44 cc 42 74 6e
OSAttr 2:6.1,2:6.2,2:6.3
File mvs91xx.dll
OSAttr:2:6.0
该
OSAttr
属性指定目标 Windows 版本,其签名要求与驱动程序包。该属性的值指定以下内容:
- 该值
2
指定目录文件与基于 NT 的 Windows 操作系统版本兼容。- 该值
6.0
指定目录文件与 Windows Vista 兼容。笔记如果驱动程序包与多个 Windows 版本兼容,您必须使用单独的选项为每个 Windows 版本
CATATTR
指定该属性。OSAttr
在这种情况下,该OSAttr
值包括三个基于 NT 的 Windows 版本:Windows 7 ( 6.1
)、Windows 8 ( 6.2
) 和 Windows 8.1 ( 6.3
)。这意味着驱动程序包至少在纸面上与 Windows 8/8.1 兼容;政策Windows 8.x 中没有窗格。我不知道是操作系统还是库文件的问题。
注册表函数
驱动程序设置通常存储在注册表中,并且库确实包含一些 Windows注册表函数:
RegSetValueExA
RegQueryValueExA
RegCloseKey
在寻找与策略相关的字符串时,我偶然发现了DriverPolicySet
。通过对该库进行逆向工程,我确认确实使用了注册表函数,并且上面提到的字符串是正在读取或写入的注册表路径的一部分。
手动策略调整
"DriverPolicySet"
在网上搜索结果不多,但很有趣。特别是在日本论坛上发帖和一个在俄罗斯论坛上回复通过翻译和整合这些信息,我能够得到更清晰的画面——确实是这样的。
该DriverPolicySet
值是一个字符串(REG_SZ
),可以设置为:
0
- 禁用所有策略。1
- 仅启用驱动程序缓存。2
- 仅启用安全删除。3
- 启用驱动程序缓存和安全删除。
它通常存储在以下注册表项中:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E97B-E325-11CE-BFC1-08002BE10318}\0001
评论
答案2
解释
就像你说的,他们在将驱动程序移植到 Windows 8 时没有更新它。话虽如此,也有可能(甚至可能可能) 他们选择删除它因 Windows 8 驱动程序中的错误和/或与 Windows 8 不兼容和/或由于 Windows 8 的不同界面设计(默认情况下您通常看不到通知区域图标)而被删除。
解决方案
你最好的选择就是接触Marvell,并告知他们该选项卡已丢失,并要求他们更新驱动程序以修复该问题。他们要么会这样做,要么会具体解释他们删除该选项卡的原因。
解决方法
与此同时,如果您需要该页面的功能,您可以准确确定设置了哪些注册表项(如果您可以访问有该功能的系统(例如,在 Windows 7 中):
- 跑步进程监控
- 将其设置为过滤掉除注册表之外的所有内容
- 停止捕获并清除结果
- 打开政策标签
- 切换复选框
- 切换到 ProcMon 并开始捕获
- 快速切换回标签页
- 点击
[Apply]
- 快速切换回 ProcMon 并停止捕获
- 查看注册表更改以找到相关
替代解决方法
如果你不再能使用兼容的系统(即,你无法在系统上安装 Windows 7 的临时副本),那么你可以尝试备用系统(并且独立于供应商) 解决方案提到这一页您在哪里找到了您在问题中发布的屏幕截图(发布者尚未在 Windows 8 中测试过,但如果您等不及 Marvell 的回复,那么值得一试):
- 导航
HKLM\SYSTEM\CurrentControlSet\services\msahci
- 创建一个名为
Controller0
- 创建名为
Channel0
- 创建一个名为的 DWORD
TreatAsInternalPort
并将其设置为1
- 重复
Channel1
、Channel2
等,如有必要Controller1
,重复 等。 - 重启
这是一个具有默认设置的注册表脚本,该线程中的人们表示该脚本对他们有用:
REGEDIT4
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\msahci\Controller0\Channel0]
"TreatAsInternalPort"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\msahci\Controller0\Channel1]
"TreatAsInternalPort"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\msahci\Controller0\Channel2]
"TreatAsInternalPort"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\msahci\Controller0\Channel3]
"TreatAsInternalPort"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\msahci\Controller0\Channel4]
"TreatAsInternalPort"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\msahci\Controller0\Channel5]
"TreatAsInternalPort"=dword:00000001
答案3
我在使用 WD“My Book”USB 驱动器时也遇到了同样的问题。我有两台电脑,都运行相同的 Windows 10 Pro 版本 20H2。插入相同的驱动器,在一台计算机上,设备属性中显示“策略”选项卡,并且在任务栏中有一个安全删除设备的条目,而在另一台计算机上,两者都丢失了。
我使用了这个答案在工作计算机上查找哪个注册表项包含所需的设置。令人惊讶的是,结果与其他答案中报告的位置完全不同:更改的值位于
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USBSTOR
找到磁盘的条目。 在我的例子中:
...\Disk&Ven_WD&Prod_My_Book_25EE&Rev_4009\<instance id>
在此注册表项下,有一个子注册表项,其中包含计算机上一个值为(=3)的Device Parameters
附加注册表项,该子注册表项显示“策略”选项卡。将此注册表项和值添加到另一台计算机后,会出现“策略”选项卡,现在可以安全地从任务栏菜单中删除该设备。Classpnp
DWORD
UserRemovalPolicy