Форум: "Система";
Текущий архив: 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