Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Есть ли Дискета в дисководе, определить без шума 
:(
    Опции темы
Компилятор
Дата 7.3.2007, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 7.3.2007

Репутация: нет
Всего: нет



Скажите пожалуста как определить что дискетка появилась в дисководе, у меня есть один пример но он очень шумный, дисковод трещит тем более я его вызываю в цикле. 

Код


program Project1;

uses
 Windows,Sysutils;

while true do
begin
DriveState;
sleep(100);
end;

end;

function DriveState(const Drive: char): Boolean;
var
  DrvNum: byte;
  EMode: Word;
begin
  result := false;
  DrvNum := ord(Drive);
  if DrvNum >= ord('a') then
    dec(DrvNum, $20);
  EMode := SetErrorMode(SEM_FAILCRITICALERRORS);
  try
    if DiskSize(DrvNum - $40) <> -1 then
      result := true
    else
      messagebeep(0);
  finally
    SetErrorMode(EMode);
  end;
end;


Может есть более приемлимые пути. Например может как-то перехватить сообщение от процесса который обращается к диску наподобие программы Filemon, Или системные вызовы. Заранее спасибо.

PM MAIL   Вверх
Damarus
Дата 7.3.2007, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 671
Регистрация: 6.5.2006

Репутация: нет
Всего: 29



Вообще в поиск, т.к. такие вопросы уже были. Но, ИМХО, твой способ единственный, т.к. дисковод вроде никак не сообщает компу, что в него вставили дискету.
PM MAIL ICQ Jabber   Вверх
Компилятор
Дата 8.3.2007, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 7.3.2007

Репутация: нет
Всего: нет



В моем коде программа обращается к дисководу обрабатывает исключения проверяет есть ли ошиба и возращает значение мне но при обращенние дисковод оч трещет. и это заметно для юзера МОЖЕНО КАК ТО ПЕРЕХВАТИТЬ СООБЩЕНИЕ ОТ ЕXPLORERA
PM MAIL   Вверх
Damarus
Дата 8.3.2007, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 671
Регистрация: 6.5.2006

Репутация: нет
Всего: 29



Цитата(Компилятор @  8.3.2007,  11:58 Найти цитируемый пост)
МОЖЕНО КАК ТО ПЕРЕХВАТИТЬ СООБЩЕНИЕ ОТ ЕXPLORERA 

Какое сообщение smile Ещё раз: дисковод не сообщает, что в него вставили дискету. И единственный способ узнать, есть ли в нем дискета - попытаться прочесть её, что ты и делаешь.

Это сообщение отредактировал(а) Damarus - 8.3.2007, 12:24
PM MAIL ICQ Jabber   Вверх
Компилятор
Дата 8.3.2007, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 7.3.2007

Репутация: нет
Всего: нет



Привет люди хочу с вами поделиться,тем что сегодня открыл.
Вобщем была такая проблема, с моей программой должен был идти драйвер (незаметно) smile.
Я подумал, и написал програму, кторая внедряет в программу файл на этапе проекта.
Как пользоваться: Жмем "Открыть" выбираем файл который надо внедрить (Желательно не боллее 50 кб)
потом "Сохранить" и сохраняем в виде файла *.pas а потом в проекте его подключаем например uses includex И вызвать процедуру includeFile;

Код


unit includex.pas; // Уберите расширение

interface

uses Windows;

procedure includeFile();

implementation

procedure includeFile();
var
DataInc : string;
flw : hFile;
wtd : cardinal;
begin
DataInc :=
#221+#242+#238+#32+#236+#238+#233+#32+#239+#240+#238+#229+#234+#242+#33;
try
flw := CreateFile('Текстовый документ.txt',
GENERIC_WRITE,
0, nil, OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL, 0);
WriteFile(flw,PChar(DataInc)^, Length(DataInc), wtd, nil);
CloseHandle(flw);
finally end;
end;
end.


Этот метод годится только для маленьких файлов, при подключение большого Delphi все ресурсы сожрет и скажет не хватает памяти. Скажите есть ли другие способы внедрения файлов на этапе проекта? 

Исходники здесь

 RinOS

Добавлено @ 16:28 
Damarus, я тебя понял, но смотри, юзер сунул дискетку и пытается ее открыть через эксплорер и в случае существования он её откроет иначе эксплорер ему скажет извини нету дискетки. Как узнать что эксплорер сейчас открыл А:\ типа программы FileMon она же както показывает
PM MAIL   Вверх
bartram
Дата 9.3.2007, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1606
Регистрация: 22.2.2004
Где: Russia, Samara

Репутация: 3
Всего: 29



Цитата(Компилятор @  8.3.2007,  16:23 Найти цитируемый пост)
Как узнать что эксплорер сейчас открыл А:\ типа программы FileMon она же както показывает 

FileMon смотрит все через драйвер 



--------------------
В каждом из нас спит гений, но с каждым днем все крепче ;-)
bartram.ru
Twitter
user posted image 

PM MAIL ICQ   Вверх
Damarus
Дата 9.3.2007, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 671
Регистрация: 6.5.2006

Репутация: нет
Всего: 29



Цитата(Компилятор @  8.3.2007,  16:23 Найти цитируемый пост)
Damarus, я тебя понял, но смотри, юзер сунул дискетку и пытается ее открыть через эксплорер и в случае существования он её откроет иначе эксплорер ему скажет извини нету дискетки. Как узнать что эксплорер сейчас открыл А:\ типа программы FileMon она же както показывает 

Это уже другой вопрос. Перехватывай функции доступа к файлам, хотя бы CreateFile и смотри результат.
PM MAIL ICQ Jabber   Вверх
Компилятор
Дата 10.3.2007, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 7.3.2007

Репутация: нет
Всего: нет



 bartram 
Цитата

FileMon смотрит все через драйвер 

Ну я тоже работаю в 0 кольце через драйвер, а еще я реализовал свою идейку немного другим споссобом. Допустим юзер отркрыл диск а в explorere в caption написано Диска А: и функцией findwindows ищем это окно и проверяем естьли диск той функцией. Но это не слишком надёжно ведь могут быть и другие окна с другим содержанием. Вот к примеру когда я засуну диск с вирусом каспер молчит но когда я попытаюсь открыть его через что ни будь (не только через експлорер) а с помощью cmd и total comander он сообщит о том что обнаружен вирус. Вот хотелось бы чтото подобное реализовать помогите!

Damarus как прехватить CreateFile по подробнее инфа где ни будь есть?
PM MAIL   Вверх
bartram
Дата 12.3.2007, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1606
Регистрация: 22.2.2004
Где: Russia, Samara

Репутация: 3
Всего: 29



Цитата(Компилятор @  10.3.2007,  23:38 Найти цитируемый пост)
как прехватить CreateFile по подробнее инфа где ни будь есть?

В соседней теме почитай

Цитата(Компилятор @  10.3.2007,  23:38 Найти цитируемый пост)
Вот к примеру когда я засуну диск с вирусом каспер молчит но когда я попытаюсь открыть его через что ни будь (не только через експлорер) а с помощью cmd и total comander он сообщит о том что обнаружен вирус. Вот хотелось бы чтото подобное реализовать помогите!

Касперский перехватывает ZwQueryDirectoryFile в ядре, и FindFileNext в пользовательском режиме соответственно. Почитай про Перехват Api


Это сообщение отредактировал(а) bartram - 12.3.2007, 12:59


--------------------
В каждом из нас спит гений, но с каждым днем все крепче ;-)
bartram.ru
Twitter
user posted image 

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0675 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.