#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
Код:
#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();
}
#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();
}
Что выдает?
Цитата: Alexandoros
Что выдает?
"Errorrrrr: 87"
Цитата: elsuk
"Errorrrrr: 87"
Попробуй указать в CreateFile флаг OPEN_EXISTING
Еще нужны права администратора
Цитата: GRIENDERS
Попробуй указать в CreateFile флаг OPEN_EXISTING
Еще нужны права администратора
Еще нужны права администратора
сделал так
Код:
hFile = CreateFile( "\\\\.\\A:",
GENERIC_WRITE,
FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
0,
NULL );
GENERIC_WRITE,
FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
0,
NULL );
выдает туже ошибку 87. У меня всегда права админа.
Почему же не записывает? и что это за ошибка 87? У вас этот кусок программы работает?
87(ERROR_INVALID_PARAMETER ) - The parameter is incorrect.
Код:
//...
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);
//...
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.
Цитата:
Вот цитата из 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).
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).
Цитата: 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();
}
#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". вообще работает у кого нибуть самый первый вариант проги? Если работают то Может у меня проблемы из-за винды, а не ошибка в исходниках.
Цитата: GRIENDERS
Matush а ты видел где нибудь дискету [COLOR=red]без[/COLOR] загрузочного сектора?
Сорри, дал маху.
Дисковода у меня нету. Проверить код не могу.
Код:
#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();
}
#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();
}
Цитата: GRIENDERS
Matush а ты видел где нибудь дискету [COLOR="Red"]без[/COLOR] загрузочного сектора?
Это дискеты с запоротой 0 дорожкой. И встречаются довольно таки регулярно.
Цитата: Alexandoros
Это дискеты с запоротой 0 дорожкой. И встречаются довольно таки регулярно.
Не знаю, не слышал. И что такие дискеты нормально работают?
Винда их отформатить не сможет. Была такая софтина Лоза. Она их умела форматить. И после этого их можна было юзать, но не как загрузочные. А сейчас я их просто выкидаю, т.к. нах они мне надо.