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

Вниз

OpenDesktop( Winlogon , 0, FALSE, MAXIMUM_ALLOWED)   Найти похожие ветки 

 
neodiX ©   (2003-04-21 02:28) [0]

Почему OpenDesktop("Winlogon", 0, FALSE, MAXIMUM_ALLOWED) всегда возвращает 0? Как правильно использовать OpenDesktop? Moжет есть где примеры?


 
ZZ ©   (2003-04-21 02:56) [1]

Птму шта прав нету у тебя скорее всего... А GetLastError что возвращает? А другие Desktop"ы открываются (например Default)?


 
neodiX ©   (2003-04-21 14:06) [2]

GetLastError возвращает Access denied. Taк я же с правами админа работаю...
Когда открываю Default десктоп, то getlasterror возвращает: Cannot create a file when that file already exists.
Но мне надо окрыть именно Winlogon desktop.


 
neodiX ©   (2003-04-21 14:16) [3]

Пробую такой код:
var hdeskUser:HDESK;
hwinstaUser:HWINSTA;
begin
hwinstaUser := OpenWindowStation("WinSta0",FALSE, MAXIMUM_ALLOWED);
SetProcessWindowStation(hwinstaUser);
hdeskUser := OpenDesktop("Winlogon", 0, FALSE, MAXIMUM_ALLOWED);
showmessage(syserrormessage(getlasterror));

в результате AccessDenied


 
ZmeiGorin ©   (2003-04-21 14:28) [4]

Где-то читал, что к винлогоновому десктопу имеет право обращаться только винлогон. (?)


 
ZmeiGorin ©   (2003-04-21 14:38) [5]

Где-то читал, что к винлогоновому десктопу имеет право обращаться только винлогон. (?)


 
neodiX ©   (2003-04-21 14:39) [6]

А я читал, что это можно обойти, вот пытаюсь обойти. Все это реализовано в исходниках VNC, но вот у меня проблема с OpenDesktop :(

Вот код чуть изменен, но рез. тот же:
var dwThreadId:DWORD;
hwinstaSave:HWINSTA;
hdeskSave:HDESK ;
hdeskUser:HDESK;
hwinstaUser:HWINSTA;
begin
GetDesktopWindow();
hwinstaSave := GetProcessWindowStation();
dwThreadId := GetCurrentThreadId();
hdeskSave := GetThreadDesktop(dwThreadId);
hwinstaUser := OpenWindowStation("WinSta0",FALSE, MAXIMUM_ALLOWED);
SetProcessWindowStation(hwinstaUser);
hdeskUser := OpenDesktop("Winlogon", 0, FALSE,
DESKTOP_CREATEMENU or DESKTOP_CREATEWINDOW or
DESKTOP_ENUMERATE or DESKTOP_HOOKCONTROL or
DESKTOP_WRITEOBJECTS or DESKTOP_READOBJECTS or
DESKTOP_SWITCHDESKTOP or GENERIC_WRITE);
showmessage(syserrormessage(getlasterror));

SetThreadDesktop(hdeskUser);

//тут востановляем
SetThreadDesktop(hdeskSave);
SetProcessWindowStation(hwinstaSave);
CloseDesktop(hdeskUser);
CloseWindowStation(hwinstaUser);


 
neodiX ©   (2003-04-21 16:10) [7]

+ Суну все это в поток, все равно AccessDenied.
P.S. Кто нибудь попробуйте код выше, а то у меня окно конф. сканера почему то вылетает.


 
neodiX ©   (2003-04-21 16:24) [8]

Сори, т.е. код ниже (это имеет общее с кодом выше):
procedure TForm1.Button9Click(Sender: TObject);
function Call(HWND:HWnd;LPARAM:lParam):bool; export; stdcall;
begin
if IsWindowVisible(HWND) then
PostMessage(HWND, WM_HOTKEY, 0, MAKELONG(MOD_ALT or MOD_CONTROL, VK_DELETE));
Result:=true;
end;
begin
enumdesktopwindows(GetThreadDesktop(GetCurrentThreadId()),@Call,0);
end;


 
ZZ ©   (2003-04-21 16:34) [9]

Taк я же с правами админа работаю...
Ну молодец. Только этого вроде маловато будет. Попробуй прогу запустить под СИСТЕМой (например с пом. at время /INTERACTIVE proga.exe

hdeskUser := OpenDesktop("Winlogon", 0, FALSE,
DESKTOP_CREATEMENU or DESKTOP_CREATEWINDOW or
DESKTOP_ENUMERATE or DESKTOP_HOOKCONTROL or
DESKTOP_WRITEOBJECTS or DESKTOP_READOBJECTS or
DESKTOP_SWITCHDESKTOP or GENERIC_WRITE);

работает в таких условиях!


 
ZZ ©   (2003-04-21 16:35) [10]

и попутно вопрос - а собственно зачем тебе это надо???


 
Игорь Шевченко ©   (2003-04-21 16:43) [11]

Ну нельзя из под админа открыть Desktop Winlogon"a - прав нет и не будет. Читайте Руссиновича


 
neodiX ©   (2003-04-21 16:49) [12]

2 ZZ
у тебя работает?
У меня во время выполнения ничего не просиходит, а ID запущенного процесса получает статус еrror.
Выполняю такой код:
var hdeskuser:hdesk;
begin
hdeskUser := OpenDesktop("Winlogon", 0, FALSE,
DESKTOP_CREATEMENU or DESKTOP_CREATEWINDOW or
DESKTOP_ENUMERATE or DESKTOP_HOOKCONTROL or
DESKTOP_WRITEOBJECTS or DESKTOP_READOBJECTS or
DESKTOP_SWITCHDESKTOP or GENERIC_WRITE);
showmessage(inttostr(hdeskuser));
showmessage(syserrormessage(getlasterror));


 
neodiX ©   (2003-04-21 16:51) [13]

2 Игорь Шевченко
Можно!
Могу дать код на VC++, где это реализованно. Вот я пытаюсь перевести, на делфи, так столкнулся с проблемой.


 
neodiX ©   (2003-04-21 16:54) [14]

2 ZZ
а затем надо, что бы обмануть Windows, т.е когда симулируешь CAD, для вызова Winlogon oкна, то потом можно посылать клав. нажатия в это окно.



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

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

Наверх




Память: 0.5 MB
Время: 0.016 c
11-12679
Alexei Dragoner
2002-07-26 18:32
2003.05.05
Еще раз о Form.HasBorder (Form.Handle умер :)


9-12603
ProNix
2002-11-29 16:06
2003.05.05
Срочно !!!!!!!!!!!!!


14-12861
CGI
2003-04-16 12:54
2003.05.05
Посоветуйте компоненты для публикации БД в Web...


14-12914
Neft
2003-04-14 22:58
2003.05.05
Работа в Москве


14-12916
ctapik
2003-04-17 18:49
2003.05.05
Дизайнер формы.