Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.10.2009, 17:59   #1
VadEr
Форумчанин
 
Аватар для VadEr
 
Регистрация: 24.03.2009
Сообщений: 375
По умолчанию

Добрый день!
подскажите пожалуйста, как организовать следующее:
1) отключить у пользователя все права?
2) подключить ему сетевой ресурс?
3) выполнить программу под правами админа?

нашел функцию подключения сетевого ресурса - WNetAddConnection2
пожалуста подскажите другие

Последний раз редактировалось Stilet; 09.10.2009 в 08:26.
VadEr вне форума Ответить с цитированием
Старый 08.10.2009, 22:48   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
1) отключить у пользователя все права?
- ну все вы все равно не отключите, придет со своей бут-флешкой например...
- включите гостя на вход и поубирайте все в политиках безопасности (это если вы под виндой)

Цитата:
3) выполнить программу под правами админа?
...любят люди бэкдуры делать
Код:
// запуск с правами администратора-
function runadm(user, pass, cmd: string): string;
var si: tstartupinfo;
    pi: tprocessinformation;
    puser, ppass, pdomain, pprogram: array [0..255] of wchar;
    lasterror: dword;
    resultstring: string;
begin
 zeromemory(@si, sizeof(si));
 si.cb:= sizeof(si);
 zeromemory(@pi, sizeof(pi));

 stringtowidechar(user, puser, 255);
 stringtowidechar(pass, ppass, 255);
 stringtowidechar('', pdomain, 255);
 stringtowidechar(cmd, pprogram, 255);
 createprocesswithlogonw(puser,
                         pdomain,
                         ppass,
                         1,
                         pprogram,
                         nil,
                         create_default_error_mode or create_new_console or create_new_process_group or create_separate_wow_vdm,
                         nil,
                         nil,
                         si,
                         pi);
 lasterror:= getlasterror;
 case lasterror of
  0: resultstring   := 'success!';
  86: resultstring  := 'wrong password';
  1326: resultstring:= 'wrong username or password';
  1327: resultstring:= 'logon failure user account restriction';
  1385: resultstring:= 'logon failure the user has not been granted the requested logon type at this computer.';
  2: resultstring   := 'file not found';
  5: resultstring   := 'acced denied';
  else resultstring:= 'error '+inttostr(lasterror)
 end;
 result:= resultstring
end;
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 09.10.2009, 00:14   #3
VadEr
Форумчанин
 
Аватар для VadEr
 
Регистрация: 24.03.2009
Сообщений: 375
По умолчанию

Цитата:
Сообщение от raxp Посмотреть сообщение
- ну все вы все равно не отключите, придет со своей бут-флешкой например...
нет предпологается, что пользователь, к примеру, включает word - а система ему "Введите пароль", ну и не один диск не сможет открыть

Цитата:
Сообщение от raxp Посмотреть сообщение
...любят люди бэкдуры делать
я имел ввиду, что если все для пользователя отключено, но одна программа все равно запустится, которая и откроет ему сетевой ресурс

посоветуйте, хотя бы ли-ру, где про это можно почитать, а то во всех книгах по Delphi, которые я просматрел о подобных вещах ни слова

Последний раз редактировалось VadEr; 09.10.2009 в 00:18.
VadEr вне форума Ответить с цитированием
Старый 09.10.2009, 01:46   #4
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
посоветуйте, хотя бы ли-ру, где про это можно почитать, а то во всех книгах по Delphi, которые я просматрел о подобных вещах ни слова
- потому-что, то что вы хотите делает либо очень жесткий суровый админ либо... взломщик

...а если серъезно, был такой случай: ставили мы TraceMode на комп начрыбцеха и система должна была работать круглосуточно и чтоб ниче не запускали и не играли и по дискам не лазили... обошлись политиками безопасности, разрешениями (вот и поставьте разрешение только для вашей одной программы) токо для админа и т.п. и гостевым входом, все стандартными средствами... кстати, сетевой диск можно из батника подключить, даж под досом... кто с far работал тот знает

Цитата:
нет предпологается, что пользователь, к примеру, включает word - а система ему "Введите пароль"
- и поясните зачем? не проще-ли word прост не устанавливать? или вы хотите ограничить доступ к машине (про hasp ключи слышали)?
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 09.10.2009 в 01:50.
raxp вне форума Ответить с цитированием
Старый 09.10.2009, 09:36   #5
VadEr
Форумчанин
 
Аватар для VadEr
 
Регистрация: 24.03.2009
Сообщений: 375
По умолчанию

Появился новый вопрос: как перед подключением сетевого ресурса проверить, - не подключен ли он уже?

уважаемый raxp: объясните пожалуйста как работает ваш код, какой параметр отвечает за путь к запускаемой программе?
VadEr вне форума Ответить с цитированием
Старый 09.10.2009, 09:57   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я для подключения сетевого диска пользую так:
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{Подключение сет диска ConnectNetDrive('Y:','\\xp\c$','Vi','');}
 function ConnectNetDrive(DriveName,Machine,User,Pass:string):variant;

  var

NRW: TNetResource;v:variant;
begin

with NRW do
begin
dwType := RESOURCETYPE_ANY;
lpLocalName := pchar(DriveName); // подключаемся к диску с этой буквой
lpRemoteName := pchar(machine);
// Необходимо заполнить. В случае пустой строки
// используется значение lpRemoteName.
lpProvider := '';
end;
v:=WNetAddConnection2(NRW, pchar(pass), pchar(user),CONNECT_UPDATE_PROFILE);
//****** CASE ******
case v of
  ERROR_ACCESS_DENIED	:result:='ERROR_ACCESS_DENIED';
  ERROR_ALREADY_ASSIGNED:result:='ERROR_ALREADY_ASSIGNED';
  ERROR_BAD_DEV_TYPE	:result:='ERROR_BAD_DEV_TYPE';
  ERROR_BAD_DEVICE      :result:='ERROR_BAD_DEVICE';
  ERROR_BAD_NET_NAME	:result:='ERROR_BAD_NET_NAME';
  ERROR_BAD_PROFILE	:result:='ERROR_BAD_PROFILE';
  ERROR_BUSY            :result:='ERROR_BUSY';
  ERROR_CANCELLED       :result:='ERROR_CANCELLED';
  ERROR_CANNOT_OPEN_PROFILE:result:='ERROR_CANNOT_OPEN_PROFILE';
  ERROR_DEVICE_ALREADY_REMEMBERED:result:='ERROR_DEVICE_ALREADY_REMEMBERED';
  ERROR_EXTENDED_ERROR		:result:='ERROR_EXTENDED_ERROR';
  ERROR_INVALID_PASSWORD	:result:='ERROR_INVALID_PASSWORD';

  ERROR_NO_NET_OR_BAD_PATH	:result:='ERROR_NO_NET_OR_BAD_PATH';
  ERROR_NO_NETWORK	:result:='ERROR_NO_NETWORK';
else result:='';//machine+' ('+DriveName+')' ;
end;
//****** END CASE ******
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 ConnectNetDrive('Y:','\\xp\c$','Vi','');;
end;

end.
Я жирным выделил случай когда функа вернет результат о том что такое подключение существует.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.10.2009, 10:03   #7
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

параметры обращения к библиотеке advapi
Код:
function createprocesswithlogonw(lpusername: pwidechar;
                                     lpdomain: pwidechar;
                                     lppassword: pwidechar;
                                     dwlogonflags: dword;
                                     lpapplicationname: pwidechar;
                                     lpcommandline: pwidechar;
                                     dwcreationflags: dword;
                                     lpenvironment: pointer;
                                     lpcurrentdirectory: pchar;
                                     const lpstartupinfo: tstartupinfo;
                                     var lpprocessinformation: tprocessinformation): bool; external advapi32 name 'CreateProcessWithLogonW';
...а запустить це просто:
Код:
runadm(login, password,path)
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 09.10.2009, 10:26   #8
VadEr
Форумчанин
 
Аватар для VadEr
 
Регистрация: 24.03.2009
Сообщений: 375
По умолчанию

Спасибо понял, а как получить имя пользователя и пароль, что бы его не прописывать в программе, а взять из системы?
VadEr вне форума Ответить с цитированием
Старый 09.10.2009, 10:34   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
а взять из системы?
Пароль никак ) это же нарушение безопасности... Да и хранятся они в хешах, а не в чистом виде.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.10.2009, 11:14   #10
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

если вы не админ, то никак...

кроме того, шоб ця функция работала, пароль админу (если его нет) таки назначить нужно...правда под разными Nt-подобными системами есть нюансы
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подключение к SQL Server через ADO в DELPHI lenuxoid БД в Delphi 10 22.09.2012 19:33
Подключение HELP-файла (.hlp) в Delphi Ce4kok Общие вопросы Delphi 2 29.01.2009 21:55
Как организовать подключение базы на Delphi mas00777 БД в Delphi 4 29.01.2009 15:29
Использование сетевого кода xGroupers Общие вопросы Delphi 12 26.03.2008 13:33
создание сетевого чата dmitruha Работа с сетью в Delphi 2 19.11.2006 17:29