Чтение онлайн

ЖАНРЫ

Советы по Delphi. Версия 1.4.3 от 1.1.2001

Озеров Валентин

Шрифт:

 else WindowsDirectory := StrPas(PChar(@ABuffer));

end; {WindowsDirectory}

function GetIni(const IniFile, Section, Entry: string): string;

{----------------------------------------------------------------}

{ Получаем инициализационную 'profile' строку из определенного }

{ пункта (Entry) определенной секции [Section] определенного }

{ INI-файла (дополняем '.ini',
если отсутствует). Возвращаем }

{ нулевую строку, если IniFile, Section или Entry не найден. }

{----------------------------------------------------------------}

var

 IniFileVar: string;

 IniFileObj: TIniFile;

begin

 if StrEndsWith(IniFile, '.ini') then IniFileVar := IniFile

 else IniFileVar := IniFile + '.ini';

 IniFileObj := TIniFile.Create(IniFileVar);

 GetIni := IniFileObj.ReadString(Section, Entry, '');

 IniFileObj.Free;

end; {GetIni}
 

Как исправить проблемы с вызовом помощи при одновременно стоящих Delphi 1 и Delphi 2?

Nomadic отвечает:

A: (AP): Решаются так…

В regedit убейте из секции HKLM\SOFTWARE\Microsoft\Windows\Help все, что равно «…\help».

Изменив соответствующие пути, импортируйте в реестр следующий файлик:

REGEDIT4

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\AppPaths\delphi32.exe]

@="C:\\DELPHI2\\BIN\\delphi32.exe

"Path"="C:\\DELPHI2\\HELP"

Защита 

Борьба с SoftIce

Igor Nikolaev aKa The Sprite пишет:

Hаткнулся в инете на некий модуль StopIce, и любопытство сделало своё дело. Как долго я смеялся… :))))

Для тех, кто не в курсе: посмотрите export NmSymIsSoftIceLoaded (или что-то подобное) в nmtrans.dll.

Вот полный юнит против SOFTICE, при обнаружении отладчика перезагружает компьютер:

unit StopIce;

interface

implementation

uses Windows;

Function IsSoftIce95Loaded: boolean;

Var hFile: Thandle;

Begin

 result := false;

 hFile := CreateFileA('\\.\SICE', GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);

 if (hFile <> INVALID_HANDLE_VALUE) then begin

CloseHandle(hFile);

result := TRUE;

 end;

End;

Function IsSoftIceNTLoaded: boolean;

Var hFile: Thandle;

Begin

 result := false;

 hFile := CreateFileA('\\.\NTICE', GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);

 if (hFile <> INVALID_HANDLE_VALUE) then begin

CloseHandle(hFile);

result := TRUE;

 end;

End;

function WinExit(flags: integer): boolean;

 function SetPrivilege(privilegeName: string; enable: boolean): boolean;

 var

tpPrev, tp: TTokenPrivileges;

token: THandle;

dwRetLen: DWord;

 begin

result := False;

OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, token);

tp.PrivilegeCount := 1;

if LookupPrivilegeValue(nil, pchar(privilegeName), tp.Privileges[0].LUID) then begin

if enable then tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED

else tp.Privileges[0].Attributes := 0;

dwRetLen := 0;

result := AdjustTokenPrivileges(token, False, tp, SizeOf(tpPrev), tpPrev, dwRetLen);

end;

CloseHandle(token);

 end;

begin

 if SetPrivilege('SeShutdownPrivilege', true) then begin

ExitWindowsEx(flags, 0);

SetPrivilege('SeShutdownPrivilege', False)

 end;

end;

initialization

 if IsSoftIce95Loaded or IsSoftIceNTLoaded then begin

WinExit(EWX_SHUTDOWN or EWX_FORCE);

Поделиться с друзьями: