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

Ваш аккаунт

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

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

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

Вопрос по DeviceIoControl

841
20 января 2007 года
_nic
199 / / 29.07.2006
У меня возникла необходимость в написании программы для создания образов флоппидисков.Я размышлял так: Поскольку с помощью CreateFile можно открыть почти все что угодно как файл , то с помощью этой ф-ции открыть диск А("\\.\A:") , полученный хендл передать DeviceIoControl и получить из lpOutBuffer содержимое флоппика.Но я к сожалению запутался в кодах управления :( , люди подскажите какой должен быть dwIoControlCode?
PS:возможен другой способ без DeviceIoControl ?
261
20 января 2007 года
ahilles
1.5K / / 03.11.2005
обычно программы которые обращаются к флоппи рабатают с помощью readfile и writefile, а эти функции указывают код IRP_MJ_READ, IRP_MJ_WRITE соответственно.
841
20 января 2007 года
_nic
199 / / 29.07.2006
Цитата: ahilles
обычно программы которые обращаются к флоппи рабатают с помощью readfile и writefile, а эти функции указывают код IRP_MJ_READ, IRP_MJ_WRITE соответственно.


Немного не понял readfile и writefile вместо DeviceIoControl , или совместно с ним?

261
21 января 2007 года
ahilles
1.5K / / 03.11.2005
readfile(writefile) являются оболочками вокруг функции DeviceIoControl и указывают в коде управления код функции IRP_MJ_READ(IRP_MJ_WRITE) (2-13 биты)
841
21 января 2007 года
_nic
199 / / 29.07.2006
Цитата: ahilles
readfile(writefile) являются оболочками вокруг функции DeviceIoControl и указывают в коде управления код функции IRP_MJ_READ(IRP_MJ_WRITE) (2-13 биты)


А какие тогда нужно проводить манипуляции с входным и выходным массивами DeviceIoControl если чтение происходит в массив ReadFile(насколько я понял)?И сколько максимум байт можно прочитать с помощью ReadFile чтобы не было переполнения стека?

3.3K
22 января 2007 года
GENA_DJ
123 / / 08.03.2005
Цитата: _nic
сколько максимум байт можно прочитать с помощью ReadFile чтобы не было переполнения стека?


Зависит от размера области памяти, выделенной под стек. Не храните данные в стеке, а храните в куче - и тогда Вы обезопасите себя многих проблем, связанных с переполнением.

841
22 января 2007 года
_nic
199 / / 29.07.2006
Цитата: GENA_DJ
Не храните данные в стеке, а храните в куче - и тогда Вы обезопасите себя многих проблем, связанных с переполнением.


Можно поподробней как это сделать?

3.3K
22 января 2007 года
GENA_DJ
123 / / 08.03.2005
Цитата: _nic
Можно поподробней как это сделать?



Допустим, используя функцию LocalAlloc.

Посмотрите здесь

261
22 января 2007 года
ahilles
1.5K / / 03.11.2005
перепонение стека никогда не произойдёт потому передаётся только указатель на него, а для резервирования памяти лучше использовать VirtualAlloc (VirtualFree)
841
23 января 2007 года
_nic
199 / / 29.07.2006
Цитата: ahilles
перепонение стека никогда не произойдёт потому передаётся только указатель на него, а для резервирования памяти лучше использовать VirtualAlloc (VirtualFree)



У меня борланд билдер 6 все таки ругается на переполнение стека(stack owerflow).И на скрлько я знаю по умолчанию в стек можно записать где то только 1 мегабайт.

3.3K
23 января 2007 года
GENA_DJ
123 / / 08.03.2005
[QUOTE=ahilles]перепонение стека никогда не произойдёт потому передаётся только указатель на него[/QUOTE]

Вот с этого места напишите поподробнее, пожалуйста. Если в функцию (ReadFile, например) передать указатель на переменку, лежащую в стеке, а размер данных для чтения указать больше, чем размер стека, то гарантировано произойдет переполнение со всеми вытекающими последствиями(в том числе, произойдет подмена адреса возврата из функции, что делает программу небезопасной).

_nic, не храните данные в стеке, пожалуйста, это плохо.

[QUOTE=ahilles]а для резервирования памяти лучше использовать VirtualAlloc (VirtualFree)[/QUOTE]
Чем лучше?
261
23 января 2007 года
ahilles
1.5K / / 03.11.2005
Лучше пользоваться настоящими API функциями (а лучше вообще VirtualAllocEx), чем их аналогами из старых win 3.x систем, которые были оставлены в новых версиях только для поддержки старых программ
8.2K
31 января 2007 года
mohito
35 / / 24.11.2005
На Wasm.ru/forum видел код который создает образ дисков... тока букву подставляй=)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог