Форум: "WinAPI";
Текущий архив: 2007.04.22;
Скачать: [xml.tar.bz2];
ВнизПолучить токен 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 вся ветка
Форум: "WinAPI";
Текущий архив: 2007.04.22;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.049 c