Скрытые области файлов
размера файла 512. Разницу между фактическим размером файла и
тем которое он занимает на диске можно было использовать под свои нужды и причем она была недоступна пользователю для просмотра и что
самое гланое при копировании файла копировалась только полезная часть, а скрытая нет.
----------------------------------------------------------------
Я это всё говорю к тому, что теперь возникла неоходимость подобные выходки повторить в Windows и возникло несколько проблем
(у меня Windows 2000 Pro):
Винда не позволяет работать с винтом используя физическую
адресацию и вообще на попытки выполнять биосовские прерывания
выдает мессаги - мол, чтож ты гад делаешь? И ДОСовские прерывания
винде тоже не все нравятся, что собсно есесссвено для 2000-ной...
-------------------------------------------------------------
Вообщем, вопрос в том как использовать скрытые области файлов в
Windows?
использовать ReadFile и WriteFile для записи в скрытые области файлов...
Если вы имели ввиду возможность создавать скрытые файлы то это не то...
использовать ReadFile и WriteFile для записи в скрытые области файлов...
Если вы имели ввиду возможность создавать скрытые файлы то это не то...[/QUOTE]
Смотрим в книгу, видим...
А теперь читаем MSDN по-слогам:
[QUOTE=MSDN]
CreateFile
......
Physical Disks and Volumes
[COLOR=Red]You can use the CreateFile function to open a physical disk drive or a volume.[/COLOR] The function returns a handle that can be used with the DeviceIoControl function. This enables you to access the disk's partition table. It is potentially dangerous to do so, since 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. For more information, see Running with Special Privileges.
The dwCreationDisposition parameter must have the OPEN_EXISTING 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 of the form \\.\PHYSICALDRIVE<x>. Hard disk numbers start at zero. The following table shows some example physical drive strings.
String Meaning
\\.\PHYSICALDRIVE0 Opens the first physical drive.
\\.\PHYSICALDRIVE2 Opens the third physical drive.
For an example showing how to open a physical drive, see Calling DeviceIoControl.
When opening a volume or floppy drive, the lpFileName string should be of the form \\.\<x>:. Do not use a trailing backslash. This would indicate the root directory of the drive. The following table shows some example drive strings.
String Meaning
\\.\A: Opens drive A (floppy drive).
\\.\C: Opens drive C (volume).
You can also open a volume by referring to its volume name. For more information, see Naming a Volume.
Volume handles may be opened as noncached at the discretion of the file system, even when the noncached option is not specified with CreateFile. You should assume that all Microsoft file systems open volume handles as noncached. The restrictions on noncached I/O for files apply to volumes as well.
A file system may or may not require buffer alignment even though the data is noncached. However, if the noncached option is specified when opening a volume, buffer alignment is enforced regardless of the file system on the volume. It is recommended on all file systems that you open volume handles as noncached and follow the noncached I/O restrictions.
[/QUOTE]
PS: Для товарищей которые не могут или не хотят искать то что ИМ нужно, вводная статья от господ из Microsoft лежит здесь:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/file_streams.asp
Мне же нужен последний сектор файла, а если в нём мало места,
то дописать несколько байт в файл, чтоб залесть на следующий сектор.
А с секторами через API шные функции не порабоать...
--------------------------------------------
Если не можешь прочитать то что написано в форуме, а уж тем более MSDN, то тогда, однозначно, надо писать драйвер... для прокладки между экраном и клавиатурой.
Ну, допустим не in/out, но не важно.
ЗАЧЕМ?
Зачем драйвер?
Зачем, как в DOS?
Патамушта ДРАЙВЕР - магическое слово, заклинание, которое спасает от всех невзгод!
М-да... а можно ещё руками провода коротить, получится как BIOS...
-------------------------------------------
Давай знаток напиши как писать используя API в свободную часть последнего сектора, кторая кстати не должна при этом становиться частью
файла. Застать всех почувствоватьсебя идиотами))
-------------------------------------------
Для тебя магическое, а для людей программа имеющая приоритет ядра.
[/QUOTE]
Мне повторить цитату? Или ты цветов, выделяющих главные места, не различаешь?
[QUOTE=bave]Изначально вопрос и был задан тем, кто это уже делал в винде, а не тем кто MSDN куски копирует и говорит вон... там... где-то написано.
[/QUOTE]
Там не где-то, а конкретные места показаны.
Или степень отупления достигла апогея у кого-то, кто только куски кода в свою программу копирует?
[QUOTE=bave]
У меня это кстати на русском хотя бы есть.
[/QUOTE]
Ну то что ты MSDN в оригинале не в состоянии прочесть я уже понял.
Только, видимо, и русский с трудом понимается.
[QUOTE=bave]
Для тебя магическое, а для людей программа имеющая приоритет ядра.
[/QUOTE]
А на фиг тебе "приоритет ядра"? Ты ж не в память лезешь, а на внешний девайс. Может, тебе ещё и ксива милицейская требуется? :D
Максимум что надо, так это привелегии админа у процесса.
[QUOTE=bave]
Давай знаток напиши как писать используя API в свободную часть последнего сектора, кторая кстати не должна при этом становиться частью файла.
[/QUOTE]
Ага... щаз...
Ты только по хорошему попроси, слова волшебные вспомни. Небось в школе быть вежливым учили... хотя бы когда самому что-то надо.
[QUOTE=bave]
Застать всех почувствоватьсебя идиотами))
[/QUOTE]
А вот это пожалуйста. Приготовься чувствовать!
Я умею не только копировать куски MSDN, но ещё и читать их, а так же переводить для идиотов.
"You can use the CreateFile function to open a physical disk drive or a volume.
[/COLOR]
Перевод гласит:
Вы можете (эх зналиб они, что ты не в состоянии) использовать функцию CreateFile для открытия физического диска или логических разделов.
Дальше рассказывается, как это сделать, но я переводить не буду т.к. бессмыслено. Покажу на пальцах:
int main()
{
HANDLE hDevice = CreateFile("\\\\.\\C:",
GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, OPEN_EXISTING, 0, NULL);
if(INVALID_HANDLE_VALUE == hDevice) {
return -1;
}
char bufferToRead[512];
DWORD bytes;
if( !ReadFile(hDevice, bufferToRead, sizeof bufferToRead, &bytes, NULL) ) {
return -1;
}
return 0;
}
Запусти и просмотри содержимое буфера на выходе. Ты будешь удивлен.
Не первый ли это сектор логического диска C: ?
А теперь объясни на кой хрен тебе драйвер и как ты его собирался писать, если конкретный пункт в MSDN не в состоянии прочесть?
P.S. Что-то я сегодня добрый. Наверное, день особенный.
[QUOTE=Green]М-да... а можно ещё руками провода коротить, получится как BIOS...[/QUOTE] Юмор? :-)
Драйвер даст возможность обращаться к физическому устройству, а не к логическому как ЦреатеФиле, но возникнут проблемы как с нестандартными устройствами (типа флешей) так и с самой виндой, поэтому я бы не стал это рекомендовать, если у автора нет опыта в написании драйверов.
А зачем вообще это нужно? Система защиты от копирования?
Драйвер даст возможность обращаться к физическому устройству, а не к логическому как ЦреатеФиле,
Юмор?
Что ты подразумеваешь под "физическим устройством"?
P.S. Отдельное спасибо @pixo $oft за поднятие темы годовалой давности.
[QUOTE=Green]P.S. Отдельное спасибо @pixo $oft за поднятие темы годовалой давности.[/QUOTE] А вот слона и не заметил ;-)
Как прибор... :D
А теперь внимательно, только внимательно, читаем ещё раз цитату из MSDN? которая висит здесь уже больше года:
[QUOTE=MSDN]
CreateFile
......
Physical Disks and Volumes
[COLOR=Red]You can use the CreateFile function to open a physical disk drive or a volume.[/COLOR] The function returns a handle that can be used with the DeviceIoControl function. This enables you to access the disk's partition table. It is potentially dangerous to do so, since 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. For more information, see Running with Special Privileges.
The dwCreationDisposition parameter must have the OPEN_EXISTING 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 of the form \\.\PHYSICALDRIVE<x>. Hard disk numbers start at zero. The following table shows some example physical drive strings.
String Meaning
\\.\PHYSICALDRIVE0 Opens the first physical drive.
\\.\PHYSICALDRIVE2 Opens the third physical drive.
For an example showing how to open a physical drive, see Calling DeviceIoControl.
When opening a volume or floppy drive, the lpFileName string should be of the form \\.\<x>:. Do not use a trailing backslash. This would indicate the root directory of the drive. The following table shows some example drive strings.
String Meaning
\\.\A: Opens drive A (floppy drive).
\\.\C: Opens drive C (volume).
You can also open a volume by referring to its volume name. For more information, see Naming a Volume.
Volume handles may be opened as noncached at the discretion of the file system, even when the noncached option is not specified with CreateFile. You should assume that all Microsoft file systems open volume handles as noncached. The restrictions on noncached I/O for files apply to volumes as well.
A file system may or may not require buffer alignment even though the data is noncached. However, if the noncached option is specified when opening a volume, buffer alignment is enforced regardless of the file system on the volume. It is recommended on all file systems that you open volume handles as noncached and follow the noncached I/O restrictions.
[/QUOTE]
Или этого слона ты тоже не заметил?
Иногда нужно сделать апгрейд диска. Тогда без отвертки не обойтись.
Как это соотносится с темой топика?