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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Маппинг или совместное использование памяти, драйвера с app 
V
    Опции темы
Ak47black
  Дата 28.6.2007, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

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



Здравствуйте.
Вообщем я пищу драйвер и к нему прогу.
Прога получает инфу от драйвера через маппинг, всёбы хорошо но у меня очень редко 1 раз в 20 мин иногда только, появляется blue screen.
Смотрел crush dump и понял что проблема скорей всего с использованием этой общей памяти.
Можете ктонибудь просмотреть мой код который делает мапинг, может ктонибудь сможет выявить тут ошибки которые являются причиной редкого сбоя.
Тоесть я предполагаю что там с правами доступа чтото нетак.
Код

var
  ShfHandle: Integer;
  ShfMap: Integer;
  ShfPointer: Pointer;
begin 
   ShfHandle:= FileOpen(FileName,fmOpenReadWrite);
    ShfFileSize:= GetFileSize(ShfHandle,nil);
    if ShfHandle = 0 then
    begin
      ShowMessage('Failed to map.');
      Exit;
    end;

    ShfMap:= CreateFileMapping(ShfHandle, nil, PAGE_READWRITE, 0, ShfFileSize, nil);
    if ShfMap = 0 then
    begin
      ShowMessage('Failed to map.');
      Exit;
    end;

    ShfPointer:= MapViewOfFile(ShfMap, FILE_MAP_WRITE, 0, 0, ShfFileSize);
    if ShfPointer = nil then
    begin
      ShowMessage('Failed to map.');
      Exit;
    end;

PM MAIL   Вверх
MetalFan
Дата 28.6.2007, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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



эммм... это код из приложения? ))
если да, то причем тут BSOD...

Это сообщение отредактировал(а) MetalFan - 28.6.2007, 20:36


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Ak47black
Дата 28.6.2007, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

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



MetalFan, да приложения.
Я просто хочю узнать правильный-ли я код сделал, так как возможно я неправильно пользуюсь общей памятью со стороны app что привод к ошибке.
PM MAIL   Вверх
MetalFan
Дата 28.6.2007, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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



ну ошибок вроде критичных нет.
есть пара недочетов и лишний код.
я бы переписал тот кусок так:
Код

var
  ShfHandle: Integer;
  ShfMap: Integer;
  ShfPointer: Pointer;
begin
  ShfHandle:= FileOpen(FileName,fmOpenReadWrite);
  if ShfHandle = 0 then
  begin
    ShowMessage('Failed to map.');
    Exit;
  end;
  try //обязательно в Try..Finally, чтобы закрыть открытый файл в случае исключения
    ShfMap:= CreateFileMapping(ShfHandle, nil, PAGE_READWRITE, 0, 0, nil);
    //если указать dwMaximumSizeLow = 0, то создастся MMF "размером" с исходный файл
    //но тогда, в случае, если размер файла = 0, то словим ERROR_FILE_INVALID
    if ShfMap = 0 then
    begin
      ShowMessage('Failed to map.');
      Exit;
    end;
    try //опять же, чтобы закрыть MMF
      ShfPointer:= MapViewOfFile(ShfMap, FILE_MAP_WRITE, 0, 0, 0);
      //опять же, если указать dwNumberOfBytesToMap = 0, то замапица весь остаток файла...
      //ето не есть хорошо... если файл будет большой - то засрется память...
      if ShfPointer = nil then
      begin
        ShowMessage('Failed to map.');
        Exit;
      end;
    finally
      CloseHandle( ShfMap ); 
    end;
  finally
    FileClose( ShfHandle ); 
  end;




--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Ak47black
Дата 29.6.2007, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

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



MetalFan, я шас нашел ещё один баг с использованием мапинга, изза того что драйвер неможет расширить или удалить файл.
Вообщем можно-ди сделать так что-бы когда я использую мапинг файл можно-бы удалить?

Добавлено через 1 минуту и 24 секунды
Драйвер тоже через мапинг работает, но с функциями которые на уровне ядра предоставляются.
PM MAIL   Вверх
MetalFan
Дата 29.6.2007, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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



Цитата(Ak47black @  29.6.2007,  13:19 Найти цитируемый пост)
Вообщем можно-ди сделать так что-бы когда я использую мапинг файл можно-бы удалить? 

прости, но смысл фразы не улавливаю


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
W4FhLF
Дата 30.6.2007, 06:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


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

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



Ak47black, а что на синум экране пишет? Дай название исключения. 


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
Ak47black
Дата 1.7.2007, 07:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

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



W4FhLF, да там было вроде изза того что неправильно память выделил (количество) в самом драйвере, шас вроде всё норм пока  smile .

Это сообщение отредактировал(а) Ak47black - 1.7.2007, 07:16
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0457 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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