-
Добрый день.
Для определения конфига компьютера я читаю BIOS (SMBIOS) с помощью GetProcAddress(NtLayer, 'ZwOpenSection'); (текст как-то пробегал на этом форуме).
Проблема в том, что под Vista и выше получаю STATUS_ACCESS_DENIED.
А очень хотелось бы таки прочесть :) Помогите, пожалуйста ( checkcfg (Зобака) narod.ru )
-
1. Не Зобака, а AT. ) 2. http://www.delphimaster.ru/forums.shtml#rule Рекомендуется: п.11 3. Хочется - запускай под Администраторской учетной записью. Попробуй по крайней мере, подозрение на недостаточность прав учетной записи. И почитай, что это значит в MSDN.
-
Palladin :
про п.11 - не понял, при чем тут мой пост ???
про права и MSDN - права Админские. Что значит сообщение - понятно. Не понятно ЧЕМ вызвано и как обойти (если можно).
Более того, если читать БИОС с помощью 16-битного приложения - выводить кусок БИОСА через INT21 DosCall(0x40) - DOS_WRITE_TO_HANDLE где HANDLE=STDOUT то на однотипных машинах под Win2003 выводится кусок, а под Win2000 - весь запрашиваемый фрагмент E000:0000-E000:FFFE
-
> Проблема в том, что под Vista и выше получаю STATUS_ACCESS_DENIED.
что, при GetProcAddress ?
-
А выше Vista это какая?
-
Выше WinXP - Vista,2003, ( 2008 и 7ка наверно тоже ) Шевченко : GetProcAddress(NtLayer, 'ZwOpenSection') GetProcAddress(NtLayer, 'RtlNtStatusToDosError') - все Ок Status := ZwOpenSection(Section, SECTION_MAP_READ, @ObjectPhysicalMemoryAttributes); получаю STATUS_ACCESS_DENIED вот аналог.кусок кода http://book.77169.org/ask24/how163755.htm(поиск на странице текста "@ObjectPhysicalMemoryAttributes")
-
> получаю STATUS_ACCESS_DENIED
Ну да. Закрыли эту дырку наконец.
"access to this object is denied starting in Windows 2003 Service Pack 1 and Windows Vista. "
-
П.С. это - не "аналог.кусок" - это то, на основании чего я и замутил чтение SMBIOSа.
В вышепр.куске читается память F000:0000-F000:FFFF, в ней лежит заголовок SMBIOSа, он разбирается моей прогой и при необходимости дочитывается кусок с данными о железе компа.
Например, Compaq ML350 - Заголовок в F000 сегменте, а данные - в E000 сегменте, с адреса C000
Попытка читать через NTLayer выдает ошибку, тогда файлом, сделанным по чудо-методе _RomDumpCode (см.ссылку) читаем сегменты E000 и F000 под Win2000 и Win2003.
итог : под 2003 до адреса E000:E000 считываются только нули, далее считанные данные до F000:FFFE совпадают.
т.о. получаем - и так не прочесть и так - лажа получается... а програмка нужная, популярная, хочется довести :)
Андрей.
-
У меня нет Vista (и видимо не будет), но думаю, что всё станет ясно, если посмотреть на права объекта через WinObj Руссиновича.
-
2 Alex Konshin : Не пойму - на какой объект, извините ?
-
если PhisicalMemory - то Admins - QueryData & QueryState разрешены
|