Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.04.22;
Скачать: CL | DM;

Вниз

Получить токен SYSTEM   Найти похожие ветки 

 
Чапаев ©   (2006-11-26 16:58) [0]

Как из службы получить токен системного пользователя? По идее, что-то с LogonUser() надо делать, но пока ничего хорошего не получается...


 
Eraser ©   (2006-11-26 17:18) [1]

> [0] Чапаев ©   (26.11.06 16:58)

а разве служба не от системного пользователя работает, всмысле SYSTEM ?


 
Чапаев ©   (2006-11-26 17:35) [2]

> [1] Eraser ©   (26.11.06 17:18)
Да, от него. Ситуация какая... Служба запускает клиента от имени пользователя (если запускать от имени SYSTEM через CreateProcess(), возникают проблемы с fast user switching), клиенту нужно работать с файлом, доступ к которому имеет только SYSTEM.


 
Eraser ©   (2006-11-26 17:44) [3]

> [2] Чапаев ©   (26.11.06 17:35)

а варинант запуска процесса сразу от SYSTEM, но в текущей терминальной сессии устроит?


 
Чапаев ©   (2006-11-26 17:47) [4]

> [3] Eraser ©   (26.11.06 17:44)
Это было бы ИДЕАЛЬНО. ;-) Но пока у меня получается только в терминальной сессии первого из залогиненных пользователей.


 
Eraser ©   (2006-11-26 17:49) [5]

> [4] Чапаев ©   (26.11.06 17:47)

хех, дык см. в сторону WinLogon Notofication Packages, именно с его помощью можно запускать приложения в текущей терм. сессии от имени системы :)


 
Eraser ©   (2006-11-26 17:50) [6]

но, как уже не раз говорили, в Висте их запретити.. вот теперь не знаю что и делать )


 
Чапаев ©   (2006-11-26 17:55) [7]

> [5] Eraser ©   (26.11.06 17:49)
> WinLogon Notofication Packages
Посмотрел (по диагонали), не понял, куда их тут прикрутить можно.


 
Eraser ©   (2006-11-26 17:59) [8]

> [7] Чапаев ©   (26.11.06 17:55)

ну регистрируются они в реестре.
винлогонпакдж представляет собой dll, которую заргужает при запуске системы winlogon, и в дальнейшем при логоне/логофе/локе пользоваетелей возникают вызовы соотв. функций библиотеки, в которых можно выполнять произвольный код от имени системы, в контексте текущей терм. сесии, в.т. CreateProcess :)


 
Чапаев ©   (2006-11-26 18:01) [9]

Эх... Щас будем что-то решать... А как с ними взаимодействовать, через именованные каналы?


 
Eraser ©   (2006-11-26 18:04) [10]

> [9] Чапаев ©   (26.11.06 18:01)

с ними (вернее с ним), думаю, и не нужно взаимодействовать, хотя при желании можно. Это package должен взаимодействовать с другими приложениями, например с пом. пайпов.
могу кинуть сюда скилет пакджа на Делфи.


 
Eraser ©   (2006-11-26 18:05) [11]

Я делал так - пакдж запускает приложение в контексте текущей терм. сесии, а уже это приложение черер именованный канал взаимодействует с сервисом.


 
Чапаев ©   (2006-11-26 18:09) [12]

> с ними (вернее с ним), думаю, и не нужно взаимодействовать,
> хотя при желании можно. Это package должен взаимодействовать
> с другими приложениями, например с пом. пайпов.
Ну я ж должен ему как-то просигнализировать, что нужно запустить программу?..


> могу кинуть сюда скилет пакджа на Делфи.
Как раз хотел об этом попросить. :-) А то вроде и элементарно, но обязательно что-то не так получится...


 
Eraser ©   (2006-11-26 18:17) [13]

> [12] Чапаев ©   (26.11.06 18:09)


> Ну я ж должен ему как-то просигнализировать, что нужно запустить
> программу?..

лучше запускать специальную программу-запускатель при логоне юзера, и отдавать команду уже ей.

хотя наверное, при желании, можно и внутри пакджа запускать доп. поток, при логоне юзера, в котором "прослушивать" именованный канал на предмет поступления команд. В любом случае что-то придумать можно.

Вот! вроде ничего лишнего не вырезал :)), обратите внимания на использования JwaWinWlx из джедаевского winapi.
library ROMwln;

uses
 SysUtils,
 JwaWinWlx;

{$R *.res}

var
 DTLC: Boolean = false;

{procedure WLEventLock(var pInfo: WLX_NOTIFICATION_INFO); stdcall;
begin

end;    }

procedure WLEventUnlock(var pInfo: WLX_NOTIFICATION_INFO); stdcall;
begin
 // Empty.
end;

procedure WLEventLogon(var pInfo: WLX_NOTIFICATION_INFO); stdcall;
begin
 // Empty.
end;

procedure WLEventLogoff(var pInfo: WLX_NOTIFICATION_INFO); stdcall;
begin
 // Empty.
end;

procedure WLEventStartup(var pInfo: WLX_NOTIFICATION_INFO); stdcall;
begin
 if not StartFUSClient then
   AddToLog("Event: Error in StartFUSClient");
end;

exports
 WLEventUnlock,
 //WLEventLock,
 WLEventLogon,
 WLEventLogoff,
 WLEventStartup;

begin
 if not DTLC then
   DisableThreadLibraryCalls(HInstance); //Не беспокоить
 DTLC := true;
end.


 
Чапаев ©   (2006-11-26 18:31) [14]

Хм... В JVCL320CompleteJCL197-Build2172 такого не нашёл...


 
Eraser ©   (2006-11-26 18:53) [15]

>
>
> [14] Чапаев ©   (26.11.06 18:31)

а.. оно не в JCL/JVCL, а отдельным архивом
http://www.delphi-jedi.org/apilibrary.html самая первая ссылка в таблице.


 
Игорь Шевченко ©   (2006-11-27 12:13) [16]

Чапаев ©   (26.11.06 17:35) [2]


> Ситуация какая... Служба запускает клиента от имени пользователя
> (если запускать от имени SYSTEM через CreateProcess(), возникают
> проблемы с fast user switching), клиенту нужно работать
> с файлом, доступ к которому имеет только SYSTEM.


А сама служба с этим файлом не может работать ? По запросам от клиента...И волки целы и овцы сыты...


 
Чапаев ©   (2006-11-27 20:04) [17]

> [16] Игорь Шевченко ©   (27.11.06 12:13)
Да, меня BiN уже настойчиво подталкивал к такой мысли в другой ветке. Так и буду делать -- со временем. Трагедия в том, что решение надо было на вчера (буквально)... :*)

Насчёт notification package...

procedure WLEventLogon(Info:WLX_NOTIFICATION_INFO);stdcall;
var
 F:THandle;
 Act,Len:Cardinal;
 S:array [Byte] of WideChar;
begin
 F:=CreateFile("c:\qwe",GENERIC_WRITE,0,nil,CREATE_ALWAYS,0,0);
 Len:=lstrlenw(Info.UserName);
 lstrcpyW(@S[0],Info.UserName);
 WriteFile(F,S[0],Len*2,Act,nil);
 CloseHandle(F);
end;

В файл выводит полную ерунду. Что не так? (Что Len байт писать, что 2*Len -- всё равно ерунда)


 
Eraser ©   (2006-11-27 20:51) [18]

> lstrcpyW(@S[0],Info.UserName);

может @s[1] ?
я бы вообще, для ясности, использовал дефевские ф-ции.


 
Чапаев ©   (2006-11-27 21:18) [19]

> может @s[1] ?
С чего бы, если array [0..255]?


> я бы вообще, для ясности, использовал дефевские ф-ции.
Какие?..

Кстати, тут дурацкая проблема какая-то... Пакет вообще перестал вызываться. В реестре пробовал свой раздел регистрации удалить и вновь создать -- не помогло.


 
Eraser ©   (2006-11-27 21:50) [20]

> [19] Чапаев ©   (27.11.06 21:18)


> С чего бы, если array [0..255]?

а .. точно.

> Какие?..

Length ;)

> Пакет вообще перестал вызываться.

старнно, скорее всего что-то где-то упустил.. у меня таких проблем не было, так что тут пакет не виноват )



Страницы: 1 вся ветка

Текущий архив: 2007.04.22;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.062 c
15-1175239220
Ketmar
2007-03-30 11:20
2007.04.22
не дали пообщаться...


2-1175254920
Alex_C
2007-03-30 15:42
2007.04.22
При FreeLibrary( hDLL ) основное окно проги пропадает


2-1175619430
Kostafey
2007-04-03 20:57
2007.04.22
ComboBox


8-1148316794
Vasiliy
2006-05-22 20:53
2007.04.22
Подскажите как воспроизвести AVI на Texture:IDIRECT3DTEXTURE8


2-1175678884
Kostafey
2007-04-04 13:28
2007.04.22
Организация модификации данных в связанных таблицах.