- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
function IsRunningWithAdminPrivs: Boolean;
begin
var
List: TStringList;
begin
List := TStringList.Create;
try
try
List.Text := 'Sample';
// Use SHGetFolder path to retreive the program files folder
// here is hardcoded for the sake of the example
List.SaveToFile('C:\program files\test.txt');
Result := True;
except
Result := False;
end;
finally
List.Free;
DeleteFile('C:\program files\test.txt');
end;
end;
К слову сказать, я не знаю как под ОС с UAC, например в 7ке, проверить запущена ли программа от имени админа. :-[
Если кто знает, то рассказывайте.
индус албанец его сначала обрежет по начальному кластеру
Hello! I'm Aldo a 21y old computer science student from Albania.
Started programming at the age of 13 when presented with the Turbo Pascal 7 IDE.
Currently working in various projects mostly using Delphi and PHP.
о, как!
Очень универсально. Особенно подходит для юникс. Ага... :D
'C:\program files' - пока этот путь получают не из системной функции - это говнокод.
"test.txt" - а тут нужно было бы придумать что-нибудь по оригинальнее, что-бы точно названия файлов не совпали.
Так что тоже не тру. Лишь поглаживаю.
люблю, когда в код вшивают "c:\мои документы"
для таких все по-умолчанию оставлять стараюсь. у меня только %temp% нестандартный - B:\Temp, который Ram-drive.
И да... Своп может быть не только на диск, но и в верхнюю память, типа XMS, EMS и тд.
И даже, я где-то видел драйвер для линукса, свопающий в видеопамять, тк она не сильно используется, когда в игры не играешь...
по-умолчанию именно он лежит в контексте моей головы
зы: своп НЕ МОЖЕТ БЫТЬ без поддержки страничной адресации, по крайней мере на писи
разве нет?
1) оверлеи это НЕ свап.
2) куда бы ни была загрузка (на диск или на луну) без страничной адресации свап не возможен
внимание, вопрос: к чему был Ваш пост"?
Смотря что вы под свопом понимаете. В простейшем случае - свап.
и оттуда же ее загрузить
в случае же оверлея программа грузилась кусками по собственному желанию
нет?
В любом случае в паскале свап работал в тайне от программиста. Программисту лишь в ручную нужно было поделить программу на модули. О свапе заботился компиялтор.
Это точно не относится к определению свапа.
Очень какоето неформальное определение у вас. Сами придумали?
И помоему, на 286 организовать подкачку всеже можно было.
нафига там свап?
А вот когда её достаточно - неужели пора начинать использовать свап? :D
даже если она вся в свапе
если все адресное пространство влезает в RAM целиком
и нет многозадачности
зачем свап?
хотя оверлей тут конечно помжет, да
в другом -- смещение.
но оба регистра были по 16 бит и адресовали соответственно 2^16. а памяти было по меньше, и потому они перекрывались, тоесть один кусок памяти был доступен по двум разным адресам.
некоторые люди этим пользовались, что бы лишний раз не менять значение регистра (вот такие были оптимизаторы!)
с этим связан забавный случай, про который Вы можете узнать нагуглив "A20 gate" )
Ну а что мешало не перекрывать их? Ну пусть они могут адресовать лишнее, что такого? Ну бред же перекрывать их.
> с этим связан забавный случай, про который Вы можете узнать нагуглив "A20 gate" )
А, это про то, что можно за мегабайт адресовать почти один сегмент? Я попробовал этим воспользоваться, но походу, в НТВДМ это не катит.
хардварно так было сделано. Линию-то надо было куда-то воткнуть.
>> в НТВДМ это не катит.
может быть в V86 это не работает
только в real
>А, это про то, что можно за мегабайт адресовать почти один сегмент?
Нет. A20 - включение адресации, через порт контролера клавиатуры, к верхней памяти(HMA). Мегабайтные сегменты - не в ту степь.
на самом деле во времена 286го вполне можно было встретить писюк с метром памяти
без страницы даже дескриптора нет: негде хранить инфу что она загружена или выгружена
Впрочем это не мешает воспользоваться методом оверлея.
http://www.comp-forum.ru/showthread.php?t=2532
в начале правда советы детские какие-то:)
(это в ХР)
begin
if not FileExists(SaveDialog.FileName) then begin
Assignfile(f, SaveDialog.FileName);
rewrite(f); closefile(f);
if not FileExists(SaveDialog.FileName) then
raise Exception.Create('Error: Can`t create file. ');
end;
Вот такой вот способ создания файла. Как по-вашему, говнокод?
end;