Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.05.05;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.199 c
14-12926
Навичек
2003-04-18 02:40
2003.05.05
Не получается поставить компонент Ehlib


14-12876
Ajax
2003-04-14 16:15
2003.05.05
StretchBlt


3-12612
Alex_t
2003-04-15 13:00
2003.05.05
Помогите с stored procedure


14-12900
Zmei-Gorin
2003-04-17 15:04
2003.05.05
Принцип работы FD, diff и иже с ними...


11-12675
zetta
2002-07-11 10:59
2003.05.05
где грабли? delphi и система виснут при попытке закр. программы





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский