DISK_PERFORMANCE diskspead;
LPDWORD osh;
INT64 size;
Ошибка чтения или записи в защищённую память. Это свидетельствует о том, что ....
вот часть текста программы:
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++
Код:
Цитата: hardcase
Переменные вообще-то стоит инициализировать, прежде чем передавать их куда-либо:
Код:
DISK_PERFORMANCE diskspead;
LPDWORD osh;
INT64 size;
LPDWORD osh;
INT64 size;
DISK_PERFORMANCE - вообще структура.
size инициализируется: size=sizeof(diskspead);
а переменной osh - какая разница??
да и инициализация не помогла, проверил=)
Цитата: asus1988
да и инициализация не помогла, проверил=)
В соответствии с IOCTL_DISK_PERFORMANCE Control Code:
Код:
DeviceIoControl(
fizika,
IOCTL_DISK_PERFORMANCE,
NULL,
0,
&diskspead,
sizeof(DISK_PERFORMANCE),
&osh,
NULL);
fizika,
IOCTL_DISK_PERFORMANCE,
NULL,
0,
&diskspead,
sizeof(DISK_PERFORMANCE),
&osh,
NULL);
Цитата: hardcase
В соответствии с IOCTL_DISK_PERFORMANCE Control Code:
Код:
DeviceIoControl(
fizika,
IOCTL_DISK_PERFORMANCE,
NULL,
0,
&diskspead,
sizeof(DISK_PERFORMANCE),
&osh,
NULL);
fizika,
IOCTL_DISK_PERFORMANCE,
NULL,
0,
&diskspead,
sizeof(DISK_PERFORMANCE),
&osh,
NULL);
Если в вызове функции передать не имя переменной "osh", а указатель на нее, то при компиляции происходит ошибка (невозможно преобразовать параметр 7 из LPDWORD* в LPDWORD).
Если же делать ее не указателем, то "возвращаемся к моим баранам" AccessViolationExeption (Ошибка чтения или записи в память....)
Цитата: asus1988
Если в вызове функции передать не имя переменной "osh", а указатель на нее, то при компиляции происходит ошибка (невозможно преобразовать параметр 7 из LPDWORD* в LPDWORD).
Если же делать ее не указателем, то "возвращаемся к моим баранам" AccessViolationExeption (Ошибка чтения или записи в память....)
Если же делать ее не указателем, то "возвращаемся к моим баранам" AccessViolationExeption (Ошибка чтения или записи в память....)
У вас osh объявлена как указатель:
Код:
LPDWORD osh
А должна быть как число:
Код:
DWORD osh
Цитата: hardcase
У вас osh объявлена как указатель:
А должна быть как число:
Код:
LPDWORD osh
А должна быть как число:
Код:
DWORD osh
Спасибо hardcase!!
учу мат часть;)