Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Ошибка чтения или записи в защищённую память. Это свидетельствует о том, что ....

49K
07 июня 2010 года
asus1988
5 / / 14.07.2009
При работе программы возникает ошибка: " Ошибка чтения или записи в защищённую память. Это свидетельствует о том, что .... бал-бла-бла...."
вот часть текста программы:

HANDLE fizika;
// открываю физ диск
fizika = CreateFile (LPCdrive, GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE, NULL,
OPEN_EXISTING, FILE_FLAG_NO_BUFFERING, NULL);
DISK_PERFORMANCE diskspead;
LPDWORD osh;
INT64 size;
size=sizeof(diskspead);

DeviceIoControl(
fizika,
IOCTL_DISK_PERFORMANCE,
NULL,
0,
&diskspead,
size,
osh,
0);

error=GetLastError();

DeviceIoControl( fizika,
IOCTL_DISK_PERFORMANCE_OFF,
NULL,
0,
NULL,
0,
osh,
0
);
Собственно после того, как я добавил функцию DeviceIoControl с кодом IOCTL_DISK_PERFORMANCE, начала появляться та самая ошибка.
Пишу в MS Visaul Studio 2008 проект Windows Form C++
5
07 июня 2010 года
hardcase
4.5K / / 09.08.2005
Переменные вообще-то стоит инициализировать, прежде чем передавать их куда-либо:

 
Код:
DISK_PERFORMANCE diskspead;
LPDWORD osh;
INT64 size;
49K
08 июня 2010 года
asus1988
5 / / 14.07.2009
Цитата: hardcase
Переменные вообще-то стоит инициализировать, прежде чем передавать их куда-либо:

 
Код:
DISK_PERFORMANCE diskspead;
LPDWORD osh;
INT64 size;



DISK_PERFORMANCE - вообще структура.
size инициализируется: size=sizeof(diskspead);
а переменной osh - какая разница??

да и инициализация не помогла, проверил=)

5
08 июня 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: asus1988

да и инициализация не помогла, проверил=)


В соответствии с IOCTL_DISK_PERFORMANCE Control Code:

 
Код:
DeviceIoControl(
    fizika,
    IOCTL_DISK_PERFORMANCE,
    NULL,
    0,
    &diskspead,
    sizeof(DISK_PERFORMANCE),
    &osh,
    NULL);
49K
11 июня 2010 года
asus1988
5 / / 14.07.2009
Цитата: hardcase
В соответствии с IOCTL_DISK_PERFORMANCE Control Code:
 
Код:
DeviceIoControl(
    fizika,
    IOCTL_DISK_PERFORMANCE,
    NULL,
    0,
    &diskspead,
    sizeof(DISK_PERFORMANCE),
    &osh,
    NULL);



Если в вызове функции передать не имя переменной "osh", а указатель на нее, то при компиляции происходит ошибка (невозможно преобразовать параметр 7 из LPDWORD* в LPDWORD).
Если же делать ее не указателем, то "возвращаемся к моим баранам" AccessViolationExeption (Ошибка чтения или записи в память....)

5
11 июня 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: asus1988
Если в вызове функции передать не имя переменной "osh", а указатель на нее, то при компиляции происходит ошибка (невозможно преобразовать параметр 7 из LPDWORD* в LPDWORD).
Если же делать ее не указателем, то "возвращаемся к моим баранам" AccessViolationExeption (Ошибка чтения или записи в память....)


У вас osh объявлена как указатель:

 
Код:
LPDWORD osh

А должна быть как число:
 
Код:
DWORD osh
49K
16 июня 2010 года
asus1988
5 / / 14.07.2009
Цитата: hardcase
У вас osh объявлена как указатель:
 
Код:
LPDWORD osh

А должна быть как число:
 
Код:
DWORD osh



Спасибо hardcase!!
учу мат часть;)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог