Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Узнать главный диск [Delphi] (https://forum.antichat.xyz/showthread.php?t=113460)

Sin3v 28.03.2009 22:49

Узнать главный диск [Delphi]
 
Нужно узнать главный локальный диск на котором лежит винда. Например у меня лежит винда в C:

Amper128 28.03.2009 23:38

GETSYSTEMDRIVE
посмотри что-то в этом роде
щас на память не скажу точнее

gLuk! 28.03.2009 23:46

Смотри тему "[Delphi]/[Pascal] Задай вопрос, получи ответ", последние 2-3странички. Вопрос уже задавался ..

eLWAux 28.03.2009 23:47

Код:

function GetSysCD: string;
var S: array[0..MAX_PATH] of Char;
begin
GetWindowsDirectory(S,SizeOf(S));
Result:=copy(S,0,1);
end;


[K4t] 01.04.2009 09:08

{var path: array[0..max_path]of char;}
GetWindowsDirectory(path,max_path);
ShowMessage(copy(path,0,2));

По моему самый простой способ.

procedure 01.04.2009 09:16

Можешь сделать еще легче.

Я делфи не знаю, но принцип думаю один и тот же:

GetFileList("%WINDIR%");

Таким образом я получил список каталогов в папке Windows. %WINDIR% в данном случае является переменной среды. т.е. глобальная системная переменная. Таких переменных существует много. Зная их, чаще всего не требуется знать диск с ос.

К примеру так:

ReadFile(@"%WINDIR%\explorer.exe");

slesh 01.04.2009 10:39

2 eLWAux Result:=copy(S,0,1); можно заменить на result:=S[0]; :)

slesh 01.04.2009 11:46

А вообще самый быстрый способ - это юзая PEB, найти полные пути до имен загруженных библиотек. Первые либы - это ntdll и kernel32, а они всегда находятся в папке с виндой. И вот просто взять первую букву этого пути, вот и получится буква системного диска. Пример:
Код:

function SysDisk:char;assembler;
asm
 mov eax,FS:[30h] // PEB
 mov eax,[eax+12] //  PPEB_LDR_DATA
 mov eax,[eax+28] // LIST_ENTRY
 mov eax,[eax] // LDR_DATA_TABLE_ENTRY
 mov eax,[eax+24] // FULL_NAME
 mov al,[eax]
end;



Время: 09:55