Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2003.03.31;
Скачать: [xml.tar.bz2];

Вниз

Низкоуровневый доступ к диску   Найти похожие ветки 

 
Chubais   (2003-02-05 19:05) [0]

Я конечно понимаю, что тема достаточно скользкая, но все же...
Подскажите, где поискать инфу, как делается subj. Ибо я совсем в этом деле 00h, а надо срочно сделать программку для затирания нужной инфы на диске.


 
Sha   (2003-02-05 21:28) [1]

Открыл файл Reset-ом, переписал Filesize байт - и все.


 
Chubais   (2003-02-06 08:44) [2]

мне нужно в системные области диска залезть, зная номера секторов только...


 
Chubais   (2003-02-06 10:39) [3]

раскопал я про DeviceIoControl, но заюзать ее не могу - не знаю в каком модуле описания для нее хранятся, например IOCTL_DISK_GET_DRIVE_GEOMETRY


 
Ariman   (2003-02-06 10:48) [4]

2Chubais

>>раскопал я про DeviceIoControl, но заюзать ее не могу - не >>знаю в каком модуле описания для нее хранятся, например >>IOCTL_DISK_GET_DRIVE_GEOMETRY

Нигде не хранятся. В делфю коды не перенесли.
Нужно руками портировать из winioctl.h (по-моему здесь).
Правда там это хитрые макросы, придется по файлу попрыгать :)


 
Chubais   (2003-02-06 11:12) [5]


> Нигде не хранятся. В делфю коды не перенесли.

плохо...
ищем дальше))


 
Ihor Osov'yak   (2003-02-06 11:25) [6]


Держи... Но для w9x по иному все будет..

unit ntdddisk;

// partial translete from ntdddisk.h (see Win2k ddk)

interface

uses windows,devioctl;

const




IOCTL_DISK_BASE = FILE_DEVICE_DISK;

//#define IOCTL_DISK_GET_DRIVE_GEOMETRY CTL_CODE(IOCTL_DISK_BASE, 0x0000, METHOD_BUFFERED, FILE_ANY_ACCESS)
IOCTL_DISK_GET_DRIVE_GEOMETRY = ( ((IOCTL_DISK_BASE) SHL 16) OR ((FILE_ANY_ACCESS) SHL 14) OR (($0000) SHL 2) OR (METHOD_BUFFERED) );

//#define IOCTL_DISK_GET_PARTITION_INFO CTL_CODE(IOCTL_DISK_BASE, 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS)
IOCTL_DISK_GET_PARTITION_INFO = ( ((IOCTL_DISK_BASE) SHL 16) OR ((FILE_READ_ACCESS) SHL 14) OR (($0001) SHL 2) OR (METHOD_BUFFERED) );

//#define IOCTL_DISK_SET_PARTITION_INFO CTL_CODE(IOCTL_DISK_BASE, 0x0002, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
IOCTL_DISK_SET_PARTITION_INFO = ( ((IOCTL_DISK_BASE) SHL 16) OR ((FILE_READ_ACCESS + FILE_WRITE_ACCESS) SHL 14) OR (($0002) SHL 2) OR (METHOD_BUFFERED) );

//#define IOCTL_DISK_GET_DRIVE_LAYOUT CTL_CODE(IOCTL_DISK_BASE, 0x0003, METHOD_BUFFERED, FILE_READ_ACCESS)
IOCTL_DISK_GET_DRIVE_LAYOUT = ( ((IOCTL_DISK_BASE) SHL 16) OR ((FILE_READ_ACCESS) SHL 14) OR (($0003) SHL 2) OR (METHOD_BUFFERED) );

//#define IOCTL_DISK_SET_DRIVE_LAYOUT CTL_CODE(IOCTL_DISK_BASE, 0x0004, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
IOCTL_DISK_SET_DRIVE_LAYOUT = ( ((IOCTL_DISK_BASE) SHL 16) OR ((FILE_READ_ACCESS + FILE_WRITE_ACCESS) SHL 14) OR (($0004) SHL 2) OR (METHOD_BUFFERED) );

(* line 146
// Define the partition types returnable by known disk drivers.
//

#define PARTITION_ENTRY_UNUSED 0x00 // Entry unused
#define PARTITION_FAT_12 0x01 // 12-bit FAT entries
#define PARTITION_XENIX_1 0x02 // Xenix
#define PARTITION_XENIX_2 0x03 // Xenix
#define PARTITION_FAT_16 0x04 // 16-bit FAT entries
#define PARTITION_EXTENDED 0x05 // Extended partition entry
#define PARTITION_HUGE 0x06 // Huge partition MS-DOS V4
#define PARTITION_IFS 0x07 // IFS Partition
#define PARTITION_FAT32 0x0B // FAT32
#define PARTITION_FAT32_XINT13 0x0C // FAT32 using extended int13 services
#define PARTITION_XINT13 0x0E // Win95 partition using extended int13 services
#define PARTITION_XINT13_EXTENDED 0x0F // Same as type 5 but uses extended int13 services
#define PARTITION_PREP 0x41 // PowerPC Reference Platform (PReP) Boot Partition
#define PARTITION_LDM 0x42 // Logical Disk Manager partition
#define PARTITION_UNIX 0x63 // Unix

#define VALID_NTFT 0xC0 // NTFT uses high order bits

//
// The high bit of the partition type code indicates that a partition
// is part of an NTFT mirror or striped array.
//

#define PARTITION_NTFT 0x80 // NTFT partition
*)

const
PARTITION_ENTRY_UNUSED = $00; // Entry unused
PARTITION_FAT_12 = $01; // 12-bit FAT entries
PARTITION_XENIX_1 = $02; // Xenix
PARTITION_XENIX_2 = $03; // Xenix
PARTITION_FAT_16 = $04; // 16-bit FAT entries
PARTITION_EXTENDED = $05; // Extended partition entry
PARTITION_HUGE = $06; // Huge partition MS-DOS V4
PARTITION_IFS = $07; // Installable File System (IFS), eg: HPFS and NTFS
PARTITION_FAT32 = $0B; // Fat32 Partitions
PARTITION_FAT32_XINT13 = $0C; // FAT32 using extended int13 services
PARTITION_XINT13 = $0E; // Win95 partition using extended int13 services
PARTITION_XINT13_EXTENDED = $0F; // Same as type 5 but uses extended int13 services
PARTITION_EISA = $12; // EISA partition ; this const is absent in original *.h
PARTITION_PREP = $41; // PowerPC Reference Platform (PReP) Boot Partition
PARTITION_LDM = $42; // Logical Disk Manager partition = Dynamic disk volume
PARTITION_UNIX = $63; // Unix

PARTITION_LINUXSWAP = $82; // Linux swap (add OsI)
PARTITION_LINUXEXT = $83; // Linux Ext2 (add OsI)

PARTITION_LgFT_FAT16 = $86; // Legacy FT FAT16 disk *
PARTITION_LgFT_NTFS = $87; // Legacy FT NTFS disk *
PARTITION_LgFT_FAT32 = $8B; // Legacy FT volume formatted with FAT32 *
PARTITION_LgFT_FAT32Ext = $8C; // Legacy FT volume using BIOS INT 13h extensions formatted with FAT32 *



VALID_NTFT = $C0; // NTFT uses high order bits



даллее будет


 
Ihor Osov'yak   (2003-02-06 11:26) [7]

//
// The high bit of the partition type code indicates that a partition
// is part of an NTFT mirror or striped array.
//

PARTITION_NTFT = $80; // NTFT partition



//
// Define the media types supported by the driver.
//

type MEDIA_TYPE = (
Unknown, // Format is unknown
F5_1Pt2_512, // 5.25", 1.2MB, 512 bytes/sector
F3_1Pt44_512, // 3.5", 1.44MB, 512 bytes/sector
F3_2Pt88_512, // 3.5", 2.88MB, 512 bytes/sector
F3_20Pt8_512, // 3.5", 20.8MB, 512 bytes/sector
F3_720_512, // 3.5", 720KB, 512 bytes/sector
F5_360_512, // 5.25", 360KB, 512 bytes/sector
F5_320_512, // 5.25", 320KB, 512 bytes/sector
F5_320_1024, // 5.25", 320KB, 1024 bytes/sector
F5_180_512, // 5.25", 180KB, 512 bytes/sector
F5_160_512, // 5.25", 160KB, 512 bytes/sector
RemovableMedia, // Removable media other than floppy
FixedMedia, // Fixed hard disk media
F3_120M_512, // 3.5", 120M Floppy
F3_640_512, // 3.5" , 640KB, 512 bytes/sector
F5_640_512, // 5.25", 640KB, 512 bytes/sector
F5_720_512, // 5.25", 720KB, 512 bytes/sector
F3_1Pt2_512, // 3.5" , 1.2Mb, 512 bytes/sector
F3_1Pt23_1024, // 3.5" , 1.23Mb, 1024 bytes/sector
F5_1Pt23_1024, // 5.25", 1.23MB, 1024 bytes/sector
F3_128Mb_512, // 3.5" MO 128Mb 512 bytes/sector
F3_230Mb_512, // 3.5" MO 230Mb 512 bytes/sector
F8_256_128 // 8", 256KB, 128 bytes/sector
);

type

PDISK_GEOMETRY = ^TDISK_GEOMETRY;
TDISK_GEOMETRY = packed record
Cylinders: LARGE_INTEGER;
MediaType: dword; // low bite - see MEDIA_TYPE
TracksPerCylinder: dword;
SectorsPerTrack: dword;
BytesPerSector: dword;
end;

(*line 335

//
// The following structure is returned on an IOCTL_DISK_GET_PARTITION_INFO
// and an IOCTL_DISK_GET_DRIVE_LAYOUT request. It is also used in a request
// to change the drive layout, IOCTL_DISK_SET_DRIVE_LAYOUT.
//

typedef struct _PARTITION_INFORMATION {
LARGE_INTEGER StartingOffset;
LARGE_INTEGER PartitionLength;
ULONG HiddenSectors;
ULONG PartitionNumber;
UCHAR PartitionType;
BOOLEAN BootIndicator;
BOOLEAN RecognizedPartition;
BOOLEAN RewritePartition;
} PARTITION_INFORMATION, *PPARTITION_INFORMATION;


*)
(*
PPARTITION_INFORMATION = ^PARTITION_INFORMATION;
PARTITION_INFORMATION = packed record
StartingOffset:LARGE_INTEGER;
PartitionLength:LARGE_INTEGER;
HiddenSectors:ULONG;
PartitionNumber:ULONG;
PartitionType:UCHAR; // see const PARTITION_XXXX
BootIndicator:BOOLEAN;
RecognizedPartition:BOOLEAN;
RewritePartition:BOOLEAN;
end;
*)

type
PPARTITION_INFORMATION = ^PARTITION_INFORMATION;
{$EXTERNALSYM PPARTITION_INFORMATION}
_PARTITION_INFORMATION = record
StartingOffset: LARGE_INTEGER;
PartitionLength: LARGE_INTEGER;
HiddenSectors: DWORD;
PartitionNumber: DWORD;
PartitionType: BYTE;
BootIndicator: ByteBool;
RecognizedPartition: ByteBool;
RewritePartition: ByteBool;
end;
{$EXTERNALSYM _PARTITION_INFORMATION}
PARTITION_INFORMATION = _PARTITION_INFORMATION;
{$EXTERNALSYM PARTITION_INFORMATION}
TPartitionInformation = PARTITION_INFORMATION;
PPartitionInformation = PPARTITION_INFORMATION;

(* line 362

//
// The following structures is returned on an IOCTL_DISK_GET_DRIVE_LAYOUT
// request and given as input to an IOCTL_DISK_SET_DRIVE_LAYOUT request.
//

typedef struct _DRIVE_LAYOUT_INFORMATION {
ULONG PartitionCount;
ULONG Signature;
PARTITION_INFORMATION PartitionEntry[1];
} DRIVE_LAYOUT_INFORMATION, *PDRIVE_LAYOUT_INFORMATION;
*)

PDRIVE_LAYOUT_INFORMATION = ^DRIVE_LAYOUT_INFORMATION;
DRIVE_LAYOUT_INFORMATION = record

PartitionCount: DWORD;
Signature:DWORD;
PartitionEntry:array [0..0] of PARTITION_INFORMATION;

end;

implementation

//uses sysutils;

//begin

//writeln(IntToHex(IOCTL_DISK_GET_DRIVE_LAYOUT,8))

end.


 
Chubais   (2003-02-06 11:46) [8]

спасибо!

вот только

> uses windows,devioctl;

((((


 
nvv_fr   (2003-02-06 12:02) [9]

> windows - гы-гы-гы...
>devioctl:


unit devioctl;
// partial translate from devioctl.h (see Win2k ddk)

interface

const
FILE_DEVICE_DISK = $00000007;
FILE_ANY_ACCESS = 0;
FILE_SPECIAL_ACCESS = FILE_ANY_ACCESS;
FILE_READ_ACCESS = 1; // file & pipe
FILE_WRITE_ACCESS = 2; // file & pipe


METHOD_BUFFERED = 0;



implementation

end.


Зы - при распространении ссылку на мою скромную персуну сделать :-)


 
Chubais   (2003-02-06 12:20) [10]

ок
спасибо
windows.pas кто-нить пришлите))))

попробовал - не получается блин заюзать DeviceIoControl ((((( false грит....
руки видать не из того места растут....
будем чо-нить дальше придумывать)) - где правильные руки (или голову?) взять...


 
DarkGreen   (2003-02-06 13:27) [11]

2 nvv_fr (06.02.03 12:02)
На какую персону, ник не зарегистрированный, мыла нет, или прям на nvv_fr ссылаться? ;-)



Страницы: 1 вся ветка

Форум: "Система";
Текущий архив: 2003.03.31;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.01 c
14-100430
jack128
2003-03-13 20:10
2003.03.31
Всем кто получил образование по специальности программист


3-100176
Alecs
2003-03-13 09:24
2003.03.31
Создание таблицы во внешнем файле InterBase!!!!!!!!!!!!!!!!!!!!!!


4-100505
Acidy
2003-01-26 09:59
2003.03.31
Помогите,плз,с UpdateWindow...


14-100371
Таня
2003-03-11 15:00
2003.03.31
Благодарность за поздравления


7-100468
Vitas
2003-02-05 07:33
2003.03.31
Нужен исходник или совет как можно определить набираемый номер на





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский