Вверх ↑
Этот топик читают: Гость
Ответов: 1342
Рейтинг: 31
#1: 2020-05-02 17:57:10 ЛС | профиль | цитата
Происходит ошибка под компилятором FPC64, в то время как FPC32 работает.

Как понял из поиска причины, то ошибка возникает на строчке:

RtlInitUnicodeString(Ustr,StringToPWide('\registry\machine\SYSTEM\CurrentControlSet\Services\'+DRIVER_SVC_NAME));

3-й день не могу это решить и всё остановилось из за этого.
Есть особенность, если драйвер заранее загрузить любой другой утилитой, то код отрабатывает нормально и выдаёт handle (на FPC64), но если драйвер не загружен, то ошибка Access Violation.

В архиве схема и тест драйвер с подписью.


Редактировалось 3 раз(а), последний 2020-05-02 18:04:04
карма: 2

0
файлы: 1TestDriver.zip [8.5KB] [328]
vip
#1.1контекстная реклама от партнеров
Ответов: 4621
Рейтинг: 746
#2: 2020-05-05 11:47:15 ЛС | профиль | цитата
"FPC64" - какой? Юникодный? Ошибка какая - во время исполнения или компиляции?
Исправить ошибки компиляции в FPC-64U:
- заменить "pansichar" на "pchar" в function SetPriviledge(name:pchar):boolean;
- закомментировать функцию StringToPWide()
- заменить использование StringToPWide():
RtlInitUnicodeString(Ustr,PWideChar(WideString('\registry\machine\SYSTEM\CurrentControlSet\Services\'+DRIVER_SVC_NAME)));

Будет ли после этого работать - без понятия.
карма: 26

0
Ответов: 1342
Рейтинг: 31
#3: 2020-05-05 13:26:37 ЛС | профиль | цитата
Netspirit писал(а):
"FPC64" - какой? Юникодный?


при Unicode ошибки такие:

HiAsmUnit.pas(65,31) Error: Incompatible type for arg no. 2: Got "PChar", expected "PWideChar"
HiAsmUnit.pas(90,43) Error: Incompatible type for arg no. 3: Got "PWideChar", expected "PChar"

без Unicode ошибок нет при компиляции, ошибка лишь в работе приложения, когда дрв загружается, вылазит Access Violation или Runtime, с 32 битным компилятором FPC без unicode - ошибок нет и загружается всё нормально. с правками кода, под FPC64U ошибки пропадают, но толку от всего этого нет.

Netspirit писал(а):
Исправить ошибки компиляции в FPC-64U:
- заменить "pansichar" на "pchar" в function SetPriviledge(name:pchar):boolean;
- закомментировать функцию StringToPWide()
- заменить использование StringToPWide():
RtlInitUnicodeString(Ustr,PWideChar(WideString('\registry\machine\SYSTEM\CurrentControlSet\Services\'+DRIVER_SVC_NAME)));

Будет ли после этого работать - без понятия.


попробовал, ну и так же на 32 работает, а на 64 всё тоже самое, ошибка при работе приложения
попробовал так же и 64U, ошибка не поменялась, всё тоже самое.

может ошибка где то чуть в другом месте?

Редактировалось 2 раз(а), последний 2020-05-05 13:30:24
карма: 2

0
Ответов: 4621
Рейтинг: 746
#4: 2020-05-05 15:08:29 ЛС | профиль | цитата
"ntdll:Cardinal;" должно быть "ntdll:THandle;"
карма: 26

1
Голосовали:Rysik
Ответов: 1342
Рейтинг: 31
#5: 2020-05-05 16:03:45 ЛС | профиль | цитата
Netspirit писал(а):
"ntdll:Cardinal;" должно быть "ntdll:THandle;"


помогло
карма: 2

0
5
Сообщение
...
Прикрепленные файлы
(файлы не залиты)