![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Кто шарит в Winsta и Desktop-ах помогите. [D5, Win2k, WinXP]
Amber © (2003-01-27 18:11:00)Вобщем получаю список WindowStations с помощью ф-ции EnumWindowStations().
Но работаю я через удаленный терминал на Win2k Server. В результате получаю только одну единственную станцию WinSta0. Но я точно знаю, что на этом компе локально работает юзер и еще несколько через терминалы. И у них тоже должны быть свои станции. А в списке их нет. Замечу, что я работаю с правами админа.
Ну вот, собственно, и вопрос. Как можно получить список всех станций и потом список их десктопов?
Amber (2003-01-30 18:14:00) [1]Жаль...
Вот, блин, нигде никакой нормальной инфы по этому делу нет... :-((
Игорь Шевченко (2003-01-30 17:54:00) [2]Увы, терминального сервера под рукой нет, проверить не получится.
Amber (2003-01-30 17:26:00) [3]Я вообще не понимаю как там могут идти неправильные данные. Там же в ф-ции. передается 4 DWORD и один указатель, который, по сути, есть ничто иное как тот же DWORD.
Amber (2003-01-30 17:20:00) [4]Я использовал порт заголовков под Делфу с сайта 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}
Игорь Шевченко (2003-01-30 16:47:00) [5]Я MSDN читать умею. Как в Delphi фукнция объявлена ?
Amber (2003-01-30 16:30:00) [6]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 11:39:00) [7]resb:=WTSEnumerateProcesses(hserv,0,1,PI,cnt);
Прототип функции в студию!
Amber (2003-01-30 10:40:00) [8]Даю код
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.
Cobalt (2003-01-29 21:40:00) [9]Обычно это обозначает т.н. "заглушку".
Но это все бессмысленно, т.к. это у ВАС надо спросить, почему и ГДЕ он получил плохие данные. Может, забыли структуру обнулить перед заполнением полей?
ДАЙТЕ КОНТЕКСТ ОШИБКИ.
Amber (2003-01-29 19:26:00) [10]Ну пасиба :-)
А как это на нормальный язык переводится? Я в ангцком неплохо понимаю, но понять смысла этой фразы не могу. :-)
Что такое stub и почему он получил плохие данные? :-)
Игорь Шевченко (2003-01-29 15:21:00) [11]MSDN:
RPC_X_BAD_STUB_DATA: The stub has received bad data.
Amber (2003-01-29 14:45:00) [12]А заодно спрошу что значит ошибка RPC_X_BAD_STUB_DATA
Amber (2003-01-29 14:37:00) [13]Ну вот. Скачал я порт WTSAPI под делфу и пробую.
WTSOpenServer работает вроде нормально. По крайней мере хендл возвращает не нулевой, что согласно MSDN есть признак отсутствия ошибок.
Но вот WTSEnumSessions не пашет. Вернее он пашет (возвращает не нулевое значение, кое значит что все в порядке), но возвращает нулевое количество сессий. Как быть?
Amber (2003-01-28 23:51:00) [14]2 Набережных С.
Спасибо, попробую...
Набережных С. (2003-01-28 17:49:00) [15]>Amber
Ради любопытства заглянул в MSDN. Попробуй воспользоваться WTSOpenServer, WTSEnumerateSessions/WTSEnumerateProcesses etc. Может, и получится. У меня проверить возможности нет.
Игорь Шевченко (2003-01-28 15:05:00) [16]Не помню. Ищущий, да обрящет, прыгающий, да допрыгается.
Amber (2003-01-28 14:51:00) [17]А ссылку какую можешь дать? Или хотя бы название проги?
Игорь Шевченко (2003-01-28 13:27:00) [18]Amber (28.01.03 12:34)
Есть готовые программы. В августовском номере журнала Windows 2000 был обзор.
Не советую заниматься этим самостоятельно.
Amber (2003-01-28 12:34:00) [19]Задача простая. Мне надо видеть чем занимаются юзеры на сервере. Тоесть я хочу видеть их десктопы и иметь возможность ими управлять.
Игорь Шевченко (2003-01-28 12:28:00) [20]Amber (28.01.03 10:55)
Спасибо, а как сундук достать? :-)
Начиная со слов NtOpenDirectoryObject.
Кстати, а что за задача такая, достукиваться к десктопам в сеансах ? Мож, как по-другому можно решить ?