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

Вниз

Кто шарит в Winsta и Desktop-ах помогите.   Найти похожие ветки 

 
Amber   (2003-01-27 18:11) [0]

Вобщем получаю список WindowStations с помощью ф-ции EnumWindowStations().
Но работаю я через удаленный терминал на Win2k Server. В результате получаю только одну единственную станцию WinSta0. Но я точно знаю, что на этом компе локально работает юзер и еще несколько через терминалы. И у них тоже должны быть свои станции. А в списке их нет. Замечу, что я работаю с правами админа.
Ну вот, собственно, и вопрос. Как можно получить список всех станций и потом список их десктопов?


 
Amber   (2003-01-27 20:25) [1]

Нда, глухо...


 
Cobalt   (2003-01-27 21:07) [2]

поискать в MSDN?
About Window Stations and Desktops
....
This overview describes the new window station and desktop functionality, and is primarily intended for developers of Win32 services. Developers of typical applications that will be run by the logged-on user do not need to be concerned about window stations and desktops.....
Или почитать о режиме "удаленный терминал", может это его ограничение


 
Amber   (2003-01-27 21:13) [3]

Спасибо, но с MSDN я и сам умею разобраться и уже давно прочитал твою цитату. Но меня мало волнует что там MS советует мне делать. Я хочу получить доступ к Desktop-ам в других сессиях. Только вот способа пока не нашел...


 
Cobalt   (2003-01-27 21:21) [4]

Почитать о ссесиях?


Попробуй получить список непосредственно (запустив прогу) на компе. Если есть отличия - копай в ограничения удаленного терминала(независимо от того, что у ТЕБЯ - права админа(кстати, админ домена, или входишь с именем Administrator и паролем от того самого компа?) ).


 
Набережных С.   (2003-01-28 00:23) [5]

Попробуй сравнить свои права при удаленном и локальном входе. В принципе, там д.б. минимум 3 станции помимо интерактивной. К сожалению, сам я с терминалом дел не имел, поэтому могу только предположить, что в рамках сессии каждый юзер имеет собственный набор оконных станций. Попробуй решить задачу через свой сервис, запущенный на сервере.


 
Игорь Шевченко   (2003-01-28 10:04) [6]


> в рамках сессии каждый юзер имеет собственный набор оконных
> станций


Естественно. У него свой каталог объектов, где и живут эти оконные станции. \Sessions\№сеанса\Windows\WindowStations

Для доступа к другим надо перебирать именно эти объекты, что является далеко не тривиальной задачей.


 
Amber   (2003-01-28 10:34) [7]

Спасибо за ответы.

2 Cobalt

Разница есть. В терминальной сессии я вижу только одну WinSta0 и все. Если локально захожу на комп, то вижу еще несколько станций. Вот, копаю теперь...

2 Игорь Шевченко

>>Естественно. У него свой каталог объектов, где и живут эти оконные станции.
>> \Sessions\№сеанса\Windows\WindowStations
Где этот каталог находится?

Я здесь еще в одном форуме поспрашивал и мне подсказали, что надо копать в сторону winsta - API, но апи этот недокументированый. Может у кого то есть какие либо сведенья по даному апи?


 
Игорь Шевченко   (2003-01-28 10:52) [8]

Amber (28.01.03 10:34)


> Где этот каталог находится?


Упс! Известно где - у диспетчера объектов, в ядре (в сундуке, на дереве).



 
Игорь Шевченко   (2003-01-28 10:55) [9]

Рано на Enter нажал :-)

> winsta - API, но апи этот недокументированый


Какие-то сведения есть.
WinStationQueryInformationW например, описан в MSDN.

Но дело в том, что до конкретных объектов все равно, скорее всего, придется через каталог добираться.


 
Amber   (2003-01-28 10:55) [10]

Спасибо, а как сундук достать? :-)


 
Игорь Шевченко   (2003-01-28 12:28) [11]

Amber (28.01.03 10:55)


Спасибо, а как сундук достать? :-)


Начиная со слов NtOpenDirectoryObject.
Кстати, а что за задача такая, достукиваться к десктопам в сеансах ? Мож, как по-другому можно решить ?


 
Amber   (2003-01-28 12:34) [12]

Задача простая. Мне надо видеть чем занимаются юзеры на сервере. Тоесть я хочу видеть их десктопы и иметь возможность ими управлять.


 
Игорь Шевченко   (2003-01-28 13:27) [13]

Amber (28.01.03 12:34)

Есть готовые программы. В августовском номере журнала Windows 2000 был обзор.

Не советую заниматься этим самостоятельно.


 
Amber   (2003-01-28 14:51) [14]

А ссылку какую можешь дать? Или хотя бы название проги?


 
Игорь Шевченко   (2003-01-28 15:05) [15]

Не помню. Ищущий, да обрящет, прыгающий, да допрыгается.


 
Набережных С.   (2003-01-28 17:49) [16]

>Amber

Ради любопытства заглянул в MSDN. Попробуй воспользоваться WTSOpenServer, WTSEnumerateSessions/WTSEnumerateProcesses etc. Может, и получится. У меня проверить возможности нет.


 
Amber   (2003-01-28 23:51) [17]

2 Набережных С.

Спасибо, попробую...


 
Amber   (2003-01-29 14:37) [18]

Ну вот. Скачал я порт WTSAPI под делфу и пробую.
WTSOpenServer работает вроде нормально. По крайней мере хендл возвращает не нулевой, что согласно MSDN есть признак отсутствия ошибок.
Но вот WTSEnumSessions не пашет. Вернее он пашет (возвращает не нулевое значение, кое значит что все в порядке), но возвращает нулевое количество сессий. Как быть?


 
Amber   (2003-01-29 14:45) [19]

А заодно спрошу что значит ошибка RPC_X_BAD_STUB_DATA


 
Игорь Шевченко   (2003-01-29 15:21) [20]

MSDN:

RPC_X_BAD_STUB_DATA: The stub has received bad data.


 
Amber   (2003-01-29 19:26) [21]

Ну пасиба :-)
А как это на нормальный язык переводится? Я в ангцком неплохо понимаю, но понять смысла этой фразы не могу. :-)
Что такое stub и почему он получил плохие данные? :-)


 
Cobalt   (2003-01-29 21:40) [22]

Обычно это обозначает т.н. "заглушку".
Но это все бессмысленно, т.к. это у ВАС надо спросить, почему и ГДЕ он получил плохие данные. Может, забыли структуру обнулить перед заполнением полей?
ДАЙТЕ КОНТЕКСТ ОШИБКИ.


 
Amber   (2003-01-30 10:40) [23]

Даю код

Var
PI:PWTS_PROCESS_INFO;
cnt:Cardinal;
i,Res:Integer;
resb:Boolean;
s:String;
Begin
hserv:=0;
hserv:=WTSOpenServer(PChar("servername"));
cnt:=0;
resb:=WTSEnumerateProcesses(hserv,0,1,PI,cnt);
WTSFreeMemory(pI);
WTSCloseServer(hserv);


Ошибка в выделеной строке. Получаю ее с помощью GetLastError так как ф-ция возвращает False.


 
Игорь Шевченко   (2003-01-30 11:39) [24]

resb:=WTSEnumerateProcesses(hserv,0,1,PI,cnt);

Прототип функции в студию!


 
Amber   (2003-01-30 16:30) [25]

WTSEnumerateProcesses
The WTSEnumerateProcesses function retrieves information about the active processes on a specified terminal server.
BOOL WTSEnumerateProcesses(
HANDLE hServer,
DWORD Reserved,
DWORD Version,
PWTS_PROCESS_INFO* ppProcessInfo,
DWORD* pCount
);
Parameters
hServer
[in] Handle to a terminal server. Specify a handle opened by the WTSOpenServer function, or specify WTS_CURRENT_SERVER_HANDLE to indicate the terminal server on which your application is running.
Reserved
Reserved; must be zero.
Version
[in] Specifies the version of the enumeration request. Must be 1.
ppProcessInfo
[out] Pointer to a variable that receives a pointer to an array of WTS_PROCESS_INFO structures. Each structure in the array contains information about an active process on the specified terminal server. To free the returned buffer, call the WTSFreeMemory function.
pCount
[out] Pointer to a variable that receives the number of WTS_PROCESS_INFO structures returned in the ppProcessInfo buffer.
Return Values
If the function succeeds, the return value is a nonzero value.
If the function fails, the return value is zero. To get extended error information, call GetLastError.
Requirements
Client: Included in Windows XP, Windows 2000 Professional.
Server: Included in Windows Server 2003 Windows 2000 Server.
Redistributable: Requires Terminal Server 4.0 SP4 on Windows NT 4.0 SP4.
Unicode: Implemented as Unicode and ANSI versions.
Header: Declared in Wtsapi32.h.
Library: Use Wtsapi32.lib.
See Also
WTS_PROCESS_INFO

WTS_PROCESS_INFO

The WTS_PROCESS_INFO structure contains information about a process running on a terminal server.

typedef struct _WTS_PROCESS_INFO { DWORD SessionId; DWORD ProcessId; LPTSTR pProcessName; PSID pUserSid;
} WTS_PROCESS_INFO, *PWTS_PROCESS_INFO;
Members
SessionId
Terminal Services session identifier for the session associated with the process.
ProcessId
Process identifier that uniquely identifies the process on the terminal server.
pProcessName
Pointer to a null-terminated string containing the name of the executable file associated with the process.
pUserSid
Pointer to the user SID in the process"s primary access token. For more information about SIDs and access tokens, see Access Control.
Requirements
Client: Included in Windows XP, Windows 2000 Professional.
Server: Included in Windows Server 2003¬ Windows 2000 Server.
Redistributable: Requires Terminal Server 4.0 SP4 on Windows NT 4.0 SP4.
Unicode: Declared as Unicode and ANSI structures.
Header: Declared in Wtsapi32.h.

See Also
WTSEnumerateProcesses


 
Игорь Шевченко   (2003-01-30 16:47) [26]

Я MSDN читать умею. Как в Delphi фукнция объявлена ?


 
Amber   (2003-01-30 17:20) [27]

Я использовал порт заголовков под Делфу с сайта jedi-project
Там эта ф-ция так описана
{$IFDEF UNICODE}
function WTSEnumerateProcesses(hServer: THandle; Reserved: DWORD; Version: DWORD;
var ppProcessInfo: PWtsProcessInfoW; var pCount: DWORD): BOOL; stdcall;
{$EXTERNALSYM WTSEnumerateProcesses}
{$ELSE}
function WTSEnumerateProcesses(hServer: THandle; Reserved: DWORD; Version: DWORD;
var ppProcessInfo: PWtsProcessInfoA; var pCount: DWORD): BOOL; stdcall;
{$EXTERNALSYM WTSEnumerateProcesses}
{$ENDIF}


 
Amber   (2003-01-30 17:26) [28]

Я вообще не понимаю как там могут идти неправильные данные. Там же в ф-ции. передается 4 DWORD и один указатель, который, по сути, есть ничто иное как тот же DWORD.


 
Игорь Шевченко   (2003-01-30 17:54) [29]

Увы, терминального сервера под рукой нет, проверить не получится.


 
Amber   (2003-01-30 18:14) [30]

Жаль...
Вот, блин, нигде никакой нормальной инфы по этому делу нет... :-((



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

Форум: "WinAPI";
Текущий архив: 2003.03.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.013 c
3-87864
SVA
2003-03-11 09:48
2003.03.27
Помогите с Select


6-88119
SeNtiMeL
2003-02-03 03:06
2003.03.27
Подвисание приложения во время передачи файла...


14-88204
Silver_
2003-03-10 12:36
2003.03.27
что под *****


1-87988
Kpok
2003-03-12 12:27
2003.03.27
Как проверить наличие файла на диске?


3-87800
RealShip
2003-03-07 10:10
2003.03.27
Что это за ошибка такая?





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