Как зайти в Даркнет?!
25th January, 01:11
6
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
895
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
914
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
906
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6086
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4351
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4396
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Windows Vista: не удается загрузить DLL 'x.dll': недопустимый доступ к памяти. (DllNotFoundException)
Сегодня днем я тестировал на коробке клиента, которая имеет Windows Vista (у него был дом, но я тестирую на бизнес-издании с теми же результатами).
Мы используем .DLL, который получает аппаратное обеспечение ID компьютера. Его использование очень просто, и образец программы, которую я создал, работает. Dll - это от AzSdk . На самом деле, это прекрасно работает под Windows XP. Однако, по какой-то странной причине, внутри нашего проекта (намного больше) мы получаем это исключение:
Exception Type: System.DllNotFoundException
Exception Message: Unable to load DLL 'HardwareID.dll': Invalid access to memory location. (Exception from HRESULT: 0x800703E6)
Exception Target Site: GetHardwareID
Я не знаю, что может быть причиной проблемы, так как у меня есть полный контроль над папкой. Проект представляет собой приложение форм c#.net Windows, и все работает нормально, за исключением вызова внешней библиотеки.
Я объявляю его следующим образом: (Примечание: это не библиотека COM, и ее не нужно регистрировать).
[DllImport("HardwareID.dll")]
public static extern String GetHardwareID(bool HDD,
bool NIC, bool CPU, bool BIOS, string sRegistrationCode);
И тогда вызывающий код достаточно прост:
private void button1_Click(object sender, EventArgs e)
{
textBox1.Text = GetHardwareID(cb_HDD.Checked,
cb_NIC.Checked,
cb_CPU.Checked,
cb_BIOS.Checked,
"*Registration Code*");
}
Когда вы создаете пример приложения, он работает, но внутри моего проекта он не работает. Under XP работает нормально. Есть ли идеи о том, что я должен сделать в Vista, чтобы сделать эту работу? Как я уже сказал, папка и ее подпапки имеют полный контроль над "Everybody".
UPDATE: у меня не установлена Vista SP 1.
UPDATE 2: я установил Vista SP1 и теперь, когда UAC отключен, даже простой пример не работает!!! : (Чертова Виста.
Невозможно загрузить DLL 'HardwareID.dll':
Недопустимый доступ к хранилищу памяти.
(Исключение из HRESULT: 0x800703E6)
Невозможно загрузить DLL 'HardwareID.dll': Недопустимый доступ к хранилищу памяти. (Исключение из HRESULT: 0x800703E6)
Имя DllNotFoundException сбивает вас с толку - это не проблема с поиском или загрузкой файла DLL, проблема в том, что при загрузке DLL он делает незаконный доступ к памяти, который приводит к сбою процесса загрузки.
Как и другой плакат Здесь, я думаю, что это проблема DEP, и что ваши изменения UAC и т.д., наконец, позволили Вам отключить DEP для этого приложения.
@ Мартин
Причина , по которой вы не получили приглашение UAC, заключается в том, что UAC может только изменить способ запуска процесса, после того как процесс запущен, он должен оставаться на том же уровне высоты. UAC подскажет, произойдет ли это, если:
- Vista думает, что это установщик (здесь много правил , Самое простое - если он называется " setup.exe"),
- Если он помечен как "Запуск от имени администратора" (вы можете изменить это, изменив свойства ярлыка или exe), или
- Если exe содержит манифест, запрашивающий права администратора.
Первые два варианта-это обходные пути для 'legacy' приложений, которые существовали до UAC, правильный способ сделать это для новых приложений- внедрить ресурс манифеста , запрашивающий необходимые привилегии.
Некоторые программы, такие как Process Explorer , похоже, повышают уровень запущенного процесса (в этом случае вы выбираете "Show details for all process" в меню file), но на самом деле они запускают новый экземпляр, и именно этот новый экземпляр получает повышение, а не тот, который был первоначально запущен. Это рекомендуемый способ сделать это, если только некоторые части вашего приложения нуждаются в повышении уровня (например, специальный диалог 'admin options').
Является ли машина, на которой вы развернули код, 64-разрядной машиной? Вы также можете столкнуться с проблемой DEP .
Редактировать
Это Macbook Pro 1-го поколения с процессором Intel Core Duo 2 1-го поколения. Далеко не 64 бита.
Я упомянул 64 бит, потому что на низких уровнях структуры от 32 бит до 64 бит не обрабатываются должным образом. Поскольку машины не являются 64-битными, то более чем вероятно отключение DEP будет хорошим логическим следующим шагом. Vista действительно стала более безопасной, чем XP SP2.
Ну, я только что выключил DEP глобально, но безрезультатно. Та же ошибка.
Ну, я также читал, что люди получали эту ошибку после обновления машины до Vista SP1. Есть ли у этих установок Vista пакет обновления 1 на них?
Оказывается, что-то совсем другое. Просто ради тестирования я отключил de UAC (примечание: Я не получал никаких подсказок).
Отлично, я вообще-то собирался предложить это, но решил, что ты, наверное, уже пробовал.
Учитывая, что исключение составляет DllNotFoundException, вы можете попробовать проверить HardwareID.dll с помощью Dependency Walker BEFORE, устанавливая любые средства разработки на установку Vista, чтобы увидеть, действительно ли отсутствует зависимость.
В дополнение к разрешению полного контроля над "Everyone" позволяет ли расположение также записывать процессы со средним уровнем целостности?
Как мне это проверить ? Я новичок в Vista, мне это не слишком нравится, это слишком медленно внутри VM для ежедневной работы и для использования VStudio внутри виртуальной машины, это не приносит ничего нового.
В дополнение к разрешению полного контроля над "Everyone" позволяет ли расположение также записывать процессы со средним уровнем целостности?
Как мне это проверить ? Я новичок в Vista, мне это не слишком нравится, это слишком медленно внутри VM для ежедневной работы и для использования VStudio внутри виртуальной машины, это не приносит ничего нового.
Из командной строки вы можете выполнить:
icacls C:\Folder
Если вы видите строку типа "обязательный Label\High обязательный уровень", то папка доступна только для процесса с высокой степенью целостности. Если такой строки нет, то процессы целостности среды могут получить к ней доступ при условии, что нет других ACLs, запрещающих доступ (например, на основе пользователя).
EDIT: забыл упомянуть, что вы можете использовать переключатель /setintegritylevel, чтобы фактически изменить необходимый уровень целостности для доступа к объекту.