2

У меня есть драйвер 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, если вы хотите копать.

[Обновление 01-05-2014]

Я отправил Marvell по электронной почте через официальный сайт, и, хотя они являются производителями драйверов, они не предоставляют поддержку драйверов, которые недоступны для загрузки на их веб-сайте.

Уважаемый клиент, Единственные утвержденные драйверы, которые Marvell выпускает для конечных пользователей, находятся на нашем веб-сайте:

http://www.marvell.com/support/downloads/search.do

Если нужного вам водителя здесь нет, мы его не предоставляем.

Драйверы, которые находятся на нашем веб-сайте, являются единственной поддержкой, которую мы предоставляем конечным пользователям> (клиентам, не имеющим NDA с Marvell).

Если у вас есть какие-либо другие потребности в поддержке, пожалуйста, свяжитесь с производителем вашего компьютера. Благодарю вас

Использование хитрости для добавления раздела реестра TreatAsInternalPort не работает, в основном потому, что порты не управляются драйвером Microsoft по умолчанию для AHCI. Моя интуиция говорит, что это также потому, что Microsoft изменила значения конфигурации этих драйверов в Windows 8.

2 ответа2

3

Анализ

У меня нет такого же оборудования и я не использую Windows 8.x, так что я собираюсь предоставить некоторый статический анализ.

Струны

Сначала я сканировал 64-битный файл библиотеки mvs91xx.dll с помощью утилиты Strings.

Строки просто сканируют файл, который вы передаете, на наличие строк 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 года в соответствии с его отметкой времени. Это подтверждается каталогом сборки, встроенным в файл:

d:\project\2013_10\magni_svn\windows\win\sys\amd64\mv91xxm.pdb

Расширение файла .pdb расшифровывается как Program Database, собственный формат Microsoft, в котором хранится информация об отладке. На самом деле есть также строка msvcrt.dll , что означает, что библиотека была скомпилирована с использованием некоторой версии Microsoft Visual C++.

В качестве примечания, они используют (d) Apache Subversion в качестве системы контроля версий программного обеспечения и версий.

Совместимость с Windows 8.x

Поскольку библиотека была обновлена в октябре 2013 года, разумно предположить, что она обеспечит совместимость с 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 указывает, что файл каталога совместим с версиями операционной системы Windows на базе NT.
  • Значение 6.0 указывает, что файл каталога совместим с Windows Vista.

Примечание. Если пакет драйверов совместим с несколькими версиями Windows, необходимо использовать отдельные параметры CATATTR , чтобы указать атрибут OSAttr для каждой версии Windows.

Источник: создание файла каталога для пакета драйвера не PnP

В этом случае значение OSAttr включает три версии Windows для 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

Значение DriverPolicySet представляет собой строку (REG_SZ), которую можно установить в:

  • 0 - отключить все политики.
  • 1 - Включить только кэширование драйверов.
  • 2 - Включить только безопасное удаление.
  • 3 - Включить кэширование драйверов и безопасное удаление.

Обычно он хранится в следующем разделе реестра:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E97B-E325-11CE-BFC1-08002BE10318}\0001

замечания

  • Если значение реестра отсутствует, вам необходимо создать его самостоятельно.

  • Вы должны перезапустить систему, чтобы применить изменения.

  • {4D36E97B-E325-11CE-BFC1-08002BE10318} - это GUID класса устройства, назначенный для контроллеров SCSI и RAID. Это определено в файле mvs91xx.inf .

  • Конечная часть 0001 может немного отличаться в зависимости от количества доступных контроллеров. Например, это может быть 0000 или 0002 и т.д.

2

Пояснения

Как вы сказали, они не обновляли его при переносе драйверов на Windows 8. Тем не менее, также возможно (возможно, даже вероятно), что они решили удалить его из драйвера Windows 8 из-за ошибки и / или несовместимости с Windows 8 и / или из-за другого дизайна интерфейса Windows 8 (вы обычно не видите значок области уведомлений по умолчанию).

Решение

Лучше всего просто связаться с Marvell и сообщить им, что вкладка отсутствует, и попросить обновить драйвер, чтобы исправить это. Либо они сделают это, либо объяснят, почему они это убрали.

Работа вокруг

В то же время, если вам нужна функциональность страницы, вы можете точно определить, какие записи реестра установлены, если у вас есть доступ к системе, где она доступна (например, в Windows 7):

  1. Запустить монитор процесса
  2. Установите его, чтобы отфильтровать все, кроме реестра
  3. Остановите захват и очистите результаты
  4. Откройте вкладку Политики
  5. Переключить флажок
  6. Переключитесь на ProcMon и начните захват
  7. Быстро переключиться обратно на вкладку
  8. Нажмите [Apply]
  9. Быстро переключитесь обратно в ProcMon и остановите захват
  10. Посмотрите изменения в реестре, чтобы найти соответствующие

Альтернативный обходной путь

Если у вас больше нет доступа к совместимой системе (т. Е. Вы не можете установить временную копию Windows 7 в своей системе), то вы можете попробовать альтернативное (и независимое от поставщика) решение, которое было упомянуто на странице, где вы нашли Снимок экрана, который вы разместили в своем вопросе (тот, кто писал, не проверял его в Windows 8, но стоит попробовать, если вы не можете дождаться ответа от Marvell):

  1. Перейдите к HKLM\SYSTEM\CurrentControlSet\services\msahci
  2. Создайте ключ с именем Controller0
  3. Создайте подраздел с именем Channel0
  4. Создайте DWORD с именем TreatAsInternalPort и установите для него значение 1
  5. Повторите эти действия для Channel1 , Channel2 и т.д., И, если необходимо, для Controller1 и т.д.
  6. перезагружать

Вот скрипт реестра с настройками по умолчанию, которые, по словам людей из этой цепочки, работают для них:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .