Форум: "Основная";
Текущий архив: 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