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

Ваш аккаунт

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

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

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

Почему не записывает

11K
03 января 2007 года
elsuk
31 / / 23.10.2006
вот кусок программы
Код:
#include <windows.h>
   #include <stdio.h>
   int main( )
   {
      HANDLE hFile, hStream;
      DWORD dwRet;
      hFile   = CreateFile( "\\\\.\\A:",
                            GENERIC_WRITE,
                            FILE_SHARE_WRITE,
                            NULL,
                            OPEN_ALWAYS,
                            0,
                            NULL );
          if (!WriteFile( hFile, "T", 1, &dwRet, NULL ))
          printf( "Errorrrrr" );;
   getchar();
   
   }


Пытаюсь записать в загрузочный сектор дискеты но у меня постоянно выдает сообщение "Errorrrrr". кто знает почему? Перемычка на дисекте в правильном положении.
ах да забыл написать. проверяю записалось или нет через прогу WinHex
398
03 января 2007 года
Alexandoros
630 / / 21.10.2005
Код:
#include <windows.h>
   #include <stdio.h>
   int main( )
   {
      HANDLE hFile, hStream;
      DWORD dwRet;
      hFile   = CreateFile( "\\\\.\\A:",
                            GENERIC_WRITE,
                            FILE_SHARE_WRITE,
                            NULL,
                            OPEN_ALWAYS,
                            0,
                            NULL );
        if(!hFile)
         {
             printf("error: %d", GetLastError());
             getchar();
             return 1;
        }

          if (!WriteFile( hFile, "T", 1, &dwRet, NULL ))
             printf( "Errorrrrr: %d", GetLastError());
   getchar();
   
   }


Что выдает?
11K
03 января 2007 года
elsuk
31 / / 23.10.2006
Цитата: Alexandoros

Что выдает?


"Errorrrrr: 87"

4.1K
04 января 2007 года
GRIENDERS
117 / / 06.06.2006
Цитата: elsuk
"Errorrrrr: 87"


Попробуй указать в CreateFile флаг OPEN_EXISTING
Еще нужны права администратора

11K
04 января 2007 года
elsuk
31 / / 23.10.2006
Цитата: GRIENDERS
Попробуй указать в CreateFile флаг OPEN_EXISTING
Еще нужны права администратора


сделал так

 
Код:
hFile   = CreateFile( "\\\\.\\A:",
                            GENERIC_WRITE,
                            FILE_SHARE_WRITE,
                            NULL,
                            OPEN_EXISTING,
                            0,
                            NULL );

выдает туже ошибку 87. У меня всегда права админа.
Почему же не записывает? и что это за ошибка 87? У вас этот кусок программы работает?
257
04 января 2007 года
kosfiz
1.6K / / 18.09.2005
[quote=elsuk]и что это за ошибка 87?[/quote]
87(ERROR_INVALID_PARAMETER ) - The parameter is incorrect.
292
04 января 2007 года
Matush
726 / / 14.01.2004
Это должно пахать
 
Код:
//...
HANDLE hFile = CreateFile(Path, GENERIC_WRITE, NULL, NULL, CREATE_ALWAYS, NULL, NULL);
if(hFile == INVALID_HANDLE_VALUE)
   return;
DWORD count;
WriteFile(hFile, "T", 1, &count, NULL);
 
CloseHandle(hFile);
//...


то GRIENDERS:
OPEN_EXISTING - Opens the file. The function [COLOR=red]fails[/COLOR] if the file does not exist.
4.1K
04 января 2007 года
GRIENDERS
117 / / 06.06.2006
Matush а ты видел где нибудь дискету [COLOR="Red"]без[/COLOR] загрузочного сектора?

Цитата:
Вот цитата из MSDN

You can use the CreateFile function to open a physical disk drive or a volume. The function returns a handle that can be used with the DeviceIoControl function. This enables you to access the disk partition table. However, it is potentially dangerous to do so, because an incorrect write to a disk could make its contents inaccessible. The following requirements must be met for such a call to succeed:


The caller must have administrative privileges.
The dwCreationDisposition parameter must have the [COLOR="#ff0000"]OPEN_EXISTING[/COLOR] flag.
When opening a volume or floppy disk, the dwShareMode parameter must have the FILE_SHARE_WRITE flag.
When opening a physical drive x, the lpFileName string should be the following form: \\.\PHYSICALDRIVE<x>. Hard disk numbers start at 0 (zero). The following table shows some examples of physical drive strings.

String Meaning
\\.\PHYSICALDRIVE0 Opens the first physical drive.
\\.\PHYSICALDRIVE2 Opens the third physical drive.

When opening a volume or floppy drive, the lpFileName string should be the following form: \\.\<x>:. Do not use a trailing backslash, which indicates the root directory of a drive. The following table shows some examples of drive strings.

String Meaning
\\.\A: Opens drive A (floppy drive).
\\.\C: Opens drive C (volume).

11K
04 января 2007 года
elsuk
31 / / 23.10.2006
Цитата: Matush
Это должно пахать


Код:
#include <windows.h>
   #include <stdio.h>
   int main( )
   {
HANDLE hFile = CreateFile("\\\\.\\A:", GENERIC_WRITE, NULL, NULL, CREATE_ALWAYS, NULL, NULL);
if(hFile == INVALID_HANDLE_VALUE) {printf( "Err: %d", GetLastError()); getchar();return 0;}
DWORD count;
if (!WriteFile(hFile, "T", 1, &count, NULL))
             printf( "Errorrrrr: %d", GetLastError());
 
CloseHandle(hFile);
   getchar();
   
   }

не работет. выдает сообщение "Err:5". вообще работает у кого нибуть самый первый вариант проги? Если работают то Может у меня проблемы из-за винды, а не ошибка в исходниках.
292
04 января 2007 года
Matush
726 / / 14.01.2004
Цитата: GRIENDERS
Matush а ты видел где нибудь дискету [COLOR=red]без[/COLOR] загрузочного сектора?



Сорри, дал маху.

Дисковода у меня нету. Проверить код не могу.

1.8K
04 января 2007 года
k3Eahn
365 / / 19.12.2005
Ну а как насчёт вот этого:
Код:
#include <windows.h>
#include <stdio.h>

int main( )
{
    HANDLE hFile;
   
    hFile = CreateFile("\\\\.\\A:",
        GENERIC_WRITE, FILE_SHARE_WRITE,
        NULL, OPEN_EXISTING, 0, NULL);

    if(INVALID_HANDLE_VALUE == hFile)
    {
        printf("error: %d", GetLastError());
        getchar();
        return 1;
    };

    char buffer[512];
    DWORD dwRet;

    buffer[0] = 'X';
       
    if(!WriteFile(hFile, buffer, 512, &dwRet, NULL))
        printf("Errorrrrr: %d", GetLastError());

    CloseHandle(hFile);
    getchar();
}
398
04 января 2007 года
Alexandoros
630 / / 21.10.2005
Цитата: GRIENDERS
Matush а ты видел где нибудь дискету [COLOR="Red"]без[/COLOR] загрузочного сектора?



Это дискеты с запоротой 0 дорожкой. И встречаются довольно таки регулярно.

4.1K
05 января 2007 года
GRIENDERS
117 / / 06.06.2006
Цитата: Alexandoros
Это дискеты с запоротой 0 дорожкой. И встречаются довольно таки регулярно.


Не знаю, не слышал. И что такие дискеты нормально работают?

398
05 января 2007 года
Alexandoros
630 / / 21.10.2005
Винда их отформатить не сможет. Была такая софтина Лоза. Она их умела форматить. И после этого их можна было юзать, но не как загрузочные. А сейчас я их просто выкидаю, т.к. нах они мне надо.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог