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

Вниз

HDD   Найти похожие ветки 

 
Groove   (2002-09-20 09:46) [0]

Как узнать сколько разделов на винте и их имена


 
Kibitzer   (2002-09-20 13:01) [1]

Функция GetLogicalDrives возвращает четырёх-байтное число, каждый бит которой сообщает есть ли такой диск на компе (1-есть, 0-нет): самый младший - бит "Disk A", следующий бит - "Disk B", и т.д. Но этого конечно мало - нужно знать что это за диск (т.е. винчестер, CD, сетевой,...). Для этого есть функция GetDriveType. Недавно мне нужно было просканировать всю винчестерную память на компе (на наличие злобного вируса, Nimda, называется :)). Вот кусок из той проги:

var
c: Char;
Dir: String;
i: Integer;

...
for c := "A" to "Z" do
begin
Dir := c + ":\";
i := GetDriveType(PChar(Dir));
if i = 3 then DoSubDirs(Dir); // If fixed drive
end;


 
TPig ©   (2002-09-24 16:28) [2]

Можно так:

function LoadDrives(out DriveList: TStringList): Boolean;
var
lpBuf: Pointer;
dwReaded: DWORD;
dwTotal: DWORD;
p: PWideChar;
i: DWORD;
csDrive: String;
bIsACL: Boolean;
prefmaxlen: Integer;
resume_handle: LPDWORD;
Begin
Result:=(DriveList<>nil);
if not Result then exit;
NetApiBufferAllocate(1000,lpBuf);
prefmaxlen:=-1;
dwReaded:=0;
dwTotal:=0;
if(NetServerDiskEnum( nil,
0,
@lpBuf,
prefmaxlen,
@dwReaded,
@dwTotal,
nil)= NERR_Success ) then begin
p:=lpBuf;
for i:=0 to dwReaded-1 do begin
csDrive:=WideCharLenToString(p,2);
csDrive:=csDrive + "\";
DriveList.Add(csDrive);
p:=p+3;
end;
Result:=TRUE;
end;
NetApiBufferFree(lpBuf);
end;


{
Получаем информацию о дисковом разделе
}

function GetPartitionTypeEx( szName: LPCTSTR;
out csFileSystemName: String;
out bIsACL: Boolean): Integer;
var
szVolumeNameBuffer: array [0..MAX_PATH+1] of Char;
dwMaximumComponentLength: DWORD;
dwFileSystemFlags: DWORD;
dwVolumeSerialNumber: DWORD;
szFileSystemNameBuffer: array [0..MAX_PATH+1] of Char;
begin
if( GetVolumeInformation( szName,
szVolumeNameBuffer,
MAX_PATH,
@dwVolumeSerialNumber,
@dwMaximumComponentLength,
@dwFileSystemFlags,
szFileSystemNameBuffer,
MAX_PATH ) ) then begin
csFileSystemName:=szFileSystemNameBuffer;
bIsACL:=( dwFileSystemFlags and FS_PERSISTENT_ACLS )=FS_PERSISTENT_ACLS;
end
else begin
csFileSystemName:="unknown";
bIsACL:=FALSE;
end;
Result:=1;
end;



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

Текущий архив: 2002.11.25;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.012 c
14-82969
Junior
2002-11-05 01:02
2002.11.25
Прошел все Half-Life-ы...


3-82679
Step[B.M.]
2002-11-03 21:49
2002.11.25
Как уменьшить размер базы InterBase?


14-82954
ded_di
2002-11-05 17:08
2002.11.25
Про переезд в Киев


3-82576
Aristarh
2002-11-08 11:40
2002.11.25
Как в БД лучше всего организовать


1-82828
Odd_1
2002-11-13 21:59
2002.11.25
TCommPort