Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.03.31;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.023 c
7-100494
serikoff
2003-02-03 13:20
2003.03.31
translate


14-100435
Anton.
2003-03-14 12:21
2003.03.31
Breakpoint


1-100240
Zarba
2003-03-18 14:19
2003.03.31
DriveComboBox.drive & ini - sory


3-100168
menart
2003-03-12 15:34
2003.03.31
база данных и иерархическое дерево


1-100286
IrviS
2003-03-19 12:52
2003.03.31
Объединение ячеек в Excel