Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++/WinApi] Работа с памятью 
V
    Опции темы
Bondleha
Дата 19.4.2010, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ребят помогите организовать программку!
вопрос:
Написать приложение, реализующее проецирование в память файла c:\flexlm\license.dat с последующим освобождением памяти. Создать снимок процессов в системе до и после создания проекции файла. 

вот первую часть сделал! ТОк стал вопрос "с последующим освобождением памяти".
и вторую не придумаю вот что получилось!
Код

#include <windows.h>
#include <winbase.h>
#include <iostream.h>
#include <conio.h>
void main()
{
  HANDLE hFile ; /* дескриптор файла*/
   HANDLE hMapFile; /* дескриптор объекта проецируемый файл */
   
   char * lpcTheFile = 
"C:\\flexlm\\license.dat"; /* файл, который обрабатывается*/
  /* Создание объекта  файл */
  hFile = CreateFile(lpcTheFile, /*указатель на имя файла */
         GENERIC_READ , /* атрибут доступа файлу */
          0,   /* совместный доступ */
          NULL, /* атрибут защиты */
          OPEN_EXISTING , /* атрибут открытия файла */
          FILE_ATTRIBUTE_NORMAL, /*атрибут файла*/
          NULL);  /* файл шаблона */
  if (hFile != INVALID_HANDLE_VALUE) /*   файл  открыт */
   /* Сообщение об успешном открытии  файла*/
      cout << "Open file Ok"<< endl;
  else /*   файл не создан */
      /* Сообщение об ошибке создания  файла*/
      cout << "Error open file "<< endl;
  /* Создание объекта  "проекция файла"  */
  hMapFile = CreateFileMapping(hFile,  /* Текущий дескриптор файла */
    NULL,                          /* Стандартная защита*/
    PAGE_READONLY,  /* Разрешение чтения */
    0,                                 /* Макс.размер объекта */
    0,                                  /* Мин.размер объекта */
    NULL);            /* Имя объекта отображения */
if (hMapFile != NULL) /*  проекция  создана */
  /* Сообщение об успешном создании  проекции*/
      cout << "Create MapFile Ok"<< endl;
  else /*   проекция не создана */
    /* Сообщение об ошибке создания  проекции*/
    cout << "Error create MapFile "<< endl;
    /*Закрытие дескрипторов*/
    CloseHandle(hMapFile);
   CloseHandle(hFile);
  getch();
  }

PM MAIL   Вверх
azesmcar
Дата 19.4.2010, 19:53 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



Делай UnmapViewOfFile, потом CloseHandle, как говорит MSDN.
Цитата

 Mapped views of a file mapping object maintain internal references to the object, and a file mapping object does not close until all references to it are released. Therefore, to fully close a file mapping object, an application must unmap all mapped views of the file mapping object by calling UnmapViewOfFile and close the file mapping object handle by calling CloseHandle. These functions can be called in any order. 

Для снимка процессов используй CreateToolHelp32Snapshot.

PM   Вверх
Bondleha
Дата 19.4.2010, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



а пример не можешь показать

Добавлено через 1 минуту и 29 секунд
прост я в этом деле новичек особо не знаю алгоритма!!

Добавлено через 2 минуты и 34 секунды
в моем примере если можешь smile 
PM MAIL   Вверх
azesmcar
Дата 19.4.2010, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



сейчас нет такой возможности..завтра если будет время гляну.
PM   Вверх
Bondleha
Дата 19.4.2010, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо!! Глянь пжл!! А то на среду нужно!! За ранее благодарен!!
PM MAIL   Вверх
azesmcar
Дата 19.4.2010, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



Цитата(Bondleha @  19.4.2010,  20:17 Найти цитируемый пост)
Спасибо!! Глянь пжл!! А то на среду нужно!! За ранее благодарен!! 

Ну на форуме не я один, авось да завтра кто еще поможет..лучше попробуй сам сделать, ссылку на документацию я дал..там и примеры есть.
PM   Вверх
12usver12
Дата 20.4.2010, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Код

LPVOID MapCreateFile(char* file_path)
{
    HANDLE hFile = CreateFile(file_path, GENERIC_READ| GENERIC_WRITE, FILE_SHARE_WRITE|FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if(INVALID_HANDLE_VALUE == hFile){return 0;}

//DWORD numbytes = 0; numbytes = GetFileSize(hFile,0);

HANDLE hMapFile = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, 0, NULL);
CloseHandle(hFile);
if(!hMapFile) {return 0;}

LPVOID lpFile = (LPVOID)MapViewOfFile(hMapFile, FILE_MAP_READ, 0, 0, 0);
CloseHandle(hMapFile);

return lpFile;
}
//////////////////////////////////////////////////
DWORD nd = 0;
    EnumProcesses(pids, sizeof(pids),&nd);
LPVOID mapping = MapCreateFile("c:\\flexlm\\license.dat");
EnumProcesses(pids, sizeof(pids),&nd);
UnmapViewOfFile(mapping);

PM MAIL   Вверх
Bondleha
Дата 20.4.2010, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



а чем мой пример не угадил?? Вроде там все правильно?? ток кое что добавить и все!! а что я не пойму!! Уже все облазил((
PM MAIL   Вверх
azesmcar
Дата 20.4.2010, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



Цитата(Bondleha @  20.4.2010,  10:31 Найти цитируемый пост)
ток кое что добавить и все!! а что я не пойму!! 

MapViewOfFile и UnmapViewOfFile в конце.
Еще CreateToolHelp32Snapshot до MapViewOfFile и после UnmapViewOfFile, я же писал..
только я не пойму какие изменения ты хочешь увидеть в списке процессов.
PM   Вверх
Bondleha
Дата 20.4.2010, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



это такое задание на лабу!! Просто winapi изучаем!

Добавлено через 41 секунду
а closehandle() память не очищает??
PM MAIL   Вверх
azesmcar
Дата 20.4.2010, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



Цитата(Bondleha @  20.4.2010,  10:44 Найти цитируемый пост)
это такое задание на лабу!! Просто winapi изучаем!

А смысл какой-то должен быть в этой лабе или нет?

Цитата(Bondleha @  20.4.2010,  10:44 Найти цитируемый пост)
а closehandle() память не очищает?? 

Повторю цитату
Цитата(MSDN)

 Mapped views of a file mapping object maintain internal references to the object, and a file mapping object does not close until all references to it are released. Therefore, to fully close a file mapping object, an application must unmap all mapped views of the file mapping object by calling UnmapViewOfFile and close the file mapping object handle by calling CloseHandle. These functions can be called in any order. 

нужен перевод?
PM   Вверх
Bondleha
Дата 20.4.2010, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



спасибо огромное и последнее!! Как этот код в main() обавить!!
Код

LPVOID MapCreateFile(char* file_path)
{
    HANDLE hFile = CreateFile(file_path, GENERIC_READ| GENERIC_WRITE, FILE_SHARE_WRITE|FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if(INVALID_HANDLE_VALUE == hFile){return 0;}
//DWORD numbytes = 0; numbytes = GetFileSize(hFile,0);
HANDLE hMapFile = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, 0, NULL);
CloseHandle(hFile);
if(!hMapFile) {return 0;}
LPVOID lpFile = (LPVOID)MapViewOfFile(hMapFile, FILE_MAP_READ, 0, 0, 0);
CloseHandle(hMapFile);
return lpFile;
}
//////////////////////////////////////////////////
DWORD nd = 0;
    EnumProcesses(pids, sizeof(pids),&nd);
LPVOID mapping = MapCreateFile("c:\\flexlm\\license.dat");
EnumProcesses(pids, sizeof(pids),&nd);
UnmapViewOfFile(mapping);

PM MAIL   Вверх
xvr
Дата 20.4.2010, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(Bondleha @  20.4.2010,  10:54 Найти цитируемый пост)
спасибо огромное и последнее!! Как этот код в main() обавить!!
Похоже тему пора переносить к начинающим  smile 

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


Шустрый
*


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

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



уже не надо!! Я все сделал!! В Builder C++ было легче)) всем спасибо
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

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


 




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


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

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