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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> WriteFile непонятности.. что же такое... 
:(
    Опции темы
0x00
  Дата 23.3.2008, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



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

вот код функции:

Код

void CreateDriver(void){
    char buf[129];
    char buf2[129];
    HANDLE drv_file;

    GetSystemDirectory(buf, BUFF);
    wsprintf(buf2, "%s\\%s\0", buf, FRW_DRV_NAME);
    drv_file = CreateFile(buf2, GENERIC_WRITE, 0, 0, CREATE_NEW, FILE_ATTRIBUTE_SYSTEM, 0);
    WriteFile(drv_file, DriverByteCode, sizeof(DriverByteCode), NULL, NULL);
}


еще есть одно которое возможно влияет на происхождение ошибки.. это то, что массив байт очень большой - его размер больше 3000
вот как он выглядит:

Код

static BYTE DriverByteCode[] ={
0x4D,0x5A,0x90,0x00,0x03,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0xFF,0xFF,0x00,
0x00,0xB8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,

еще много-много-много-много-много-много-много-много-много-много ~3000

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};

функция в файле main.cpp
массив объявлен в main.h
все как надо..


Есть предположения почему так??
PM MAIL   Вверх
586
Дата 23.3.2008, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(0x00 @  23.3.2008,  16:11 Найти цитируемый пост)
wsprintf(buf2, "%s\\%s\0", buf, FRW_DRV_NAME);

Опечатка? Здесь нигде вроде нету Юникод-строк.
Цитата(0x00 @  23.3.2008,  16:11 Найти цитируемый пост)
WriteFile(drv_file, DriverByteCode, sizeof(DriverByteCode), NULL, NULL);

Здесь нельзя ставить NULL.
PM   Вверх
0x00
Дата 23.3.2008, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



а что там писать, если я весь массив за 1 раз записываю??
PM MAIL   Вверх
korian
Дата 23.3.2008, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 8.3.2008
Где: Украина, Харьков

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



Цитата(0x00 @  23.3.2008,  15:31 Найти цитируемый пост)
а что там писать, если я весь массив за 1 раз записываю?? 

не записываете, а пытаетесь записать
для этого оно и нужно, далеко не факт что все запишется.
PM   Вверх
0x00
Дата 23.3.2008, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



а как тогда мне записать все в файл? не подскажите?
PM MAIL   Вверх
586
Дата 23.3.2008, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Код
DWORD dwWritten;
WriteFile(drv_file, DriverByteCode, sizeof(DriverByteCode), &dwWritten, NULL);

У тебя идёт запись по нулевому адресу - отсюда и ошибка.
PM   Вверх
0x00
Дата 23.3.2008, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



спасибо. тему можно считать закрытой.
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.0476 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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