![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Получить токен SYSTEM
Чапаев © (2006-11-26 16:58:00)Как из службы получить токен системного пользователя? По идее, что-то с LogonUser() надо делать, но пока ничего хорошего не получается...
Eraser (2006-11-27 21:50:00) [1]> [19] Чапаев © (27.11.06 21:18)
> С чего бы, если array [0..255]?
а .. точно.
> Какие?..
Length ;)
> Пакет вообще перестал вызываться.
старнно, скорее всего что-то где-то упустил.. у меня таких проблем не было, так что тут пакет не виноват )
Чапаев (2006-11-27 21:18:00) [2]> может @s[1] ?
С чего бы, если array [0..255]?
> я бы вообще, для ясности, использовал дефевские ф-ции.
Какие?..
Кстати, тут дурацкая проблема какая-то... Пакет вообще перестал вызываться. В реестре пробовал свой раздел регистрации удалить и вновь создать -- не помогло.
Eraser (2006-11-27 20:51:00) [3]> lstrcpyW(@S[0],Info.UserName);
может @s[1] ?
я бы вообще, для ясности, использовал дефевские ф-ции.
Чапаев (2006-11-27 20:04:00) [4]> [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 -- всё равно ерунда)
Игорь Шевченко (2006-11-27 12:13:00) [5]Чапаев © (26.11.06 17:35) [2]
> Ситуация какая... Служба запускает клиента от имени пользователя
> (если запускать от имени SYSTEM через CreateProcess(), возникают
> проблемы с fast user switching), клиенту нужно работать
> с файлом, доступ к которому имеет только SYSTEM.
А сама служба с этим файлом не может работать ? По запросам от клиента...И волки целы и овцы сыты...
Eraser (2006-11-26 18:53:00) [6]>
>
> [14] Чапаев © (26.11.06 18:31)
а.. оно не в JCL/JVCL, а отдельным архивом
http://www.delphi-jedi.org/apilibrary.htmlсамая первая ссылка в таблице.
Чапаев (2006-11-26 18:31:00) [7]Хм... В JVCL320CompleteJCL197-Build2172 такого не нашёл...
Eraser (2006-11-26 18:17:00) [8]> [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:09:00) [9]> с ними (вернее с ним), думаю, и не нужно взаимодействовать,
> хотя при желании можно. Это package должен взаимодействовать
> с другими приложениями, например с пом. пайпов.
Ну я ж должен ему как-то просигнализировать, что нужно запустить программу?..
> могу кинуть сюда скилет пакджа на Делфи.
Как раз хотел об этом попросить. :-) А то вроде и элементарно, но обязательно что-то не так получится...
Eraser (2006-11-26 18:05:00) [10]Я делал так - пакдж запускает приложение в контексте текущей терм. сесии, а уже это приложение черер именованный канал взаимодействует с сервисом.
Eraser (2006-11-26 18:04:00) [11]> [9] Чапаев © (26.11.06 18:01)
с ними (вернее с ним), думаю, и не нужно взаимодействовать, хотя при желании можно. Это package должен взаимодействовать с другими приложениями, например с пом. пайпов.
могу кинуть сюда скилет пакджа на Делфи.
Чапаев (2006-11-26 18:01:00) [12]Эх... Щас будем что-то решать... А как с ними взаимодействовать, через именованные каналы?
Eraser (2006-11-26 17:59:00) [13]> [7] Чапаев © (26.11.06 17:55)
ну регистрируются они в реестре.
винлогонпакдж представляет собой dll, которую заргужает при запуске системы winlogon, и в дальнейшем при логоне/логофе/локе пользоваетелей возникают вызовы соотв. функций библиотеки, в которых можно выполнять произвольный код от имени системы, в контексте текущей терм. сесии, в.т. CreateProcess :)
Чапаев (2006-11-26 17:55:00) [14]> [5] Eraser © (26.11.06 17:49)
> WinLogon Notofication Packages
Посмотрел (по диагонали), не понял, куда их тут прикрутить можно.
Eraser (2006-11-26 17:50:00) [15]но, как уже не раз говорили, в Висте их запретити.. вот теперь не знаю что и делать )
Eraser (2006-11-26 17:49:00) [16]> [4] Чапаев © (26.11.06 17:47)
хех, дык см. в сторону WinLogon Notofication Packages, именно с его помощью можно запускать приложения в текущей терм. сессии от имени системы :)
Чапаев (2006-11-26 17:47:00) [17]> [3] Eraser © (26.11.06 17:44)
Это было бы ИДЕАЛЬНО. ;-) Но пока у меня получается только в терминальной сессии первого из залогиненных пользователей.
Eraser (2006-11-26 17:44:00) [18]> [2] Чапаев © (26.11.06 17:35)
а варинант запуска процесса сразу от SYSTEM, но в текущей терминальной сессии устроит?
Чапаев (2006-11-26 17:35:00) [19]> [1] Eraser © (26.11.06 17:18)
Да, от него. Ситуация какая... Служба запускает клиента от имени пользователя (если запускать от имени SYSTEM через CreateProcess(), возникают проблемы с fast user switching), клиенту нужно работать с файлом, доступ к которому имеет только SYSTEM.
Eraser (2006-11-26 17:18:00) [20]> [0] Чапаев © (26.11.06 16:58)
а разве служба не от системного пользователя работает, всмысле SYSTEM ?