Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.034 c
1-1172073940
DelphiLexx
2007-02-21 19:05
2007.04.22
Плоский ScrollBar


2-1175270259
Dmitry_177
2007-03-30 19:57
2007.04.22
переменная SYSTEMTIME определить что она пустая


1-1172447590
Германн
2007-02-26 02:53
2007.04.22
События компонента и Application.ProcessMessages


2-1175426386
tyj
2007-04-01 15:19
2007.04.22
Как вставлять в memo from clipboard;


6-1153968464
FFx01
2006-07-27 06:47
2007.04.22
Не посылается письмо размером больше 6 кб





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский