Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Запрет запуска [D6, D7, WinXP]


Просто зашел ©   (2007-01-23 13:02:00) 

Прошу помощи.

Как, (желательно "малой кровью") запретить запуск конкретного приложения пользователю.
Пример:
Есть общедоступный компьютер. Один юзер знает "волшебное слово" и запускает IE. Другой не знает и ему выскакивает ругательная надпись.

Можно ли это реализовать CreateFile(.....) ???


BiN   (2007-01-23 23:56:00) [1]


> Просто зашел   (23.01.07 13:02)

Для таких вещей наряду с контролем NTFS придуманы правила хеша, сертификата или пути.


властелин колхоза   (2007-01-23 17:12:00) [2]

Пардон... Тут http://bik-bak.com/personalization.phpна русском.


властелин колхоза   (2007-01-23 17:10:00) [3]

> [0] Просто зашел   (23.01.07 13:02)
Если украинский разумеешь, http://tau-systems.org.ua/personalization.php

ЗЫ. Маленькая самореклама... :-D


Игорь Шевченко   (2007-01-23 16:18:00) [4]


> Есть общедоступный компьютер. Один юзер знает "волшебное
> слово" и запускает IE. Другой не знает и ему выскакивает
> ругательная надпись.


В реестре создаешь ключ в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options с именем того EXEшника, который надо запускать.
У этого ключа устанавливаешь строковое значение Debugger в котором указываешь путь к запускалке и имя запускалки.

Пишешь собственно запускалку, для теста я написал примерно так:

unit main;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm1 = class(TForm)
   emPassword: TEdit;
   Go: TButton;
   lbPassword: TLabel;
   procedure GoClick(Sender: TObject);
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.GoClick(Sender: TObject);
var
 pi: PROCESS_INFORMATION;
 si: STARTUPINFOA;
 Result: Boolean;
 de: DEBUG_EVENT;
begin
 if emPassword.Text = 'validpassword' then begin
   FillChar(pi,sizeof(pi), 0);
   FillChar(si,sizeof(si), 0);
   si.cb := sizeof(si);
   Result := CreateProcessA(PChar(ParamStr(1)),
     PChar(ParamStr(1)), nil, nil,
     false, DEBUG_PROCESS or DEBUG_ONLY_THIS_PROCESS, nil,
     nil, si, pi);
   if Result then begin
     CloseHandle(pi.hProcess);
     CloseHandle(pi.hThread);
     while True do begin
       WaitForDebugEvent(de, INFINITE);
       ContinueDebugEvent(de.dwProcessId, de.dwThreadId,
         DBG_CONTINUE);
       if de.dwDebugEventCode = EXIT_PROCESS_DEBUG_EVENT then
         Break;
     end;
     Close;
   end else
     RaiseLastOSError;
 end;
end;

end.


Проверялось это на тестовом же примере, был создан еще один EXEшник, с именем AppTest, был создан ключ в реестре
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\AppTest.EXE, у него параметр Debugger равный C:\BIN\AppDbg.exe.

При запуске AppTest появлялось окошко с предложением ввести пароль и после ввода запускался нужный мне EXEшник.

Удачи.

Код сырой, никакая корректная работа не гарантируется, но в качестве идеи для размышления может и пригодится.


tesseract   (2007-01-23 14:13:00) [5]


> NTFS, но логин-пароль один ;)


Сделай два.


Просто зашел   (2007-01-23 14:10:00) [6]


> clickmaker ©   (23.01.07 13:06) [1]
> Если NTFS, то права на запуск iexplore.exe разным логинам.
>
> а "волшебным словом" будет этот самый логин и пароль


NTFS, но логин-пароль один ;)


clickmaker   (2007-01-23 13:06:00) [7]

Если NTFS, то права на запуск iexplore.exe разным логинам.
а "волшебным словом" будет этот самый логин и пароль


Наверх

Титульная страница Поиск, карта сайта Написать письмо