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

Вниз

NetWkstaUserEnum   Найти похожие ветки 

 
DeepProg   (2005-07-07 15:31) [0]

Цель: {конечная}получить имя пользователя, интерактивно залогиненного на удаленной машине.
     {текущая} получить список всех залогиненных пользователей на удаленной машине.
Для достижения текущей цели пытаюсь применить NetWkstaUserEnum(http://msdn.microsoft.com/library/default.asp?url=/library/en-us/netmgmt/netmgmt/netwkstausergetinfo.as p)
И пытаюсь запустить код, приведенный здесь: http://narod.yandex.ru/cgi-bin/yandmarkup?cluster=14&prog=0x2757571A&HndlQuery=348071376&PageNum=0&g=2&d=0&q0=88727872&p =

Если вызывать как там описано - ругается на несоответвие типов формальных и фактических параметров в вызове фукнции NetWkstaUserEnum везде, где прописаны константы.
Вопрос 1 Почему это происходит?

Если ввести данные через переменные, например так:
  Buff: Pointer;
  Error: LongInt;
  cLevel: cardinal;
  cLen: cardinal;


...
cLevel := 1;
cLen := 256*Integer(pTotal);
...
Error := NetWkstaUserEnum(PWideChar(HostName),
   cLevel,
Buff,
cLen,
   pCount,
pTotal,
hResume);

то будет ERROR_INVALID_LEVEL;
Вопрос 2: Связано ли это с первой проблемой?
Вопрос 3: Если это моя ошибка, то как ее исправить? Если нет, то как обойти?
Альтернативные методы решения поставленных задач также будут интересны.


 
AbrosimovA   (2005-07-07 16:09) [1]

У меня это работает:

function EnumNetUsers(HostName: WideString {; Users: TStrings}): THostInfo;
const
  STR_ERROR_ACCESS_DENIED = "The user does not have access to the requested information.";
  STR_ERROR_MORE_DATA = "Specify a large enough buffer to receive all entries.";
  STR_ERROR_INVALID_LEVEL = "The level parameter is invalid.";
var
  Info: Pointer;
  ElTotal: PDWord;
  ElCount: PDWord;
  Resume: PDWord;
  Error: Longint;
  cLevel,cLen: cardinal;
  // UI : PWKSTA_USER_INFO_0;
 // i : Integer;
begin
  Resume := 0;
  NetWkstaUserEnum(PWideChar(HostName),
    1,
    Info,
    0,
    ElCount,
    ElTotal,
    Resume);
  cLevel := 1;
  cLen := 256*Integer(ElTotal);
  Error := NetWkstaUserEnum(PWideChar(HostName),
    cLevel,
    Info,
    cLen,
    ElCount,
    ElTotal,
    Resume);

  case Error of
    ERROR_ACCESS_DENIED: Result.  UserName   := STR_ERROR_ACCESS_DENIED;
    ERROR_MORE_DATA: Result.  UserName       := STR_ERROR_MORE_DATA;
    ERROR_INVALID_LEVEL: Result.  UserName   := STR_ERROR_INVALID_LEVEL
      else
        if Info <> nil then
        begin
          Result := THostInfo(info^);
    {
   To retrieve all users:
   UI := PWKSTA_USER_INFO_0(Info);
   for i := 1 to DWord(ElCount) do
   begin
     Users.Add(UI^.wkui0_  username  );
     inc(UI);
   end;
   }
        end
        else
          begin
            Result.  UserName        := "N/A";
            Result.logon_domain  := "N/A";
            Result.other_domains := "N/A";
            Result.logon_server  := "N/A";
          end;
  end;
end;


 
AbrosimovA   (2005-07-07 16:15) [2]

Resume:=nil


 
BiN ©   (2005-07-07 16:27) [3]

AbrosimovA   (07.07.05 16:09) [1]

Где NetApiBufferFree? На Out of memory напрашиваешься.


 
AbrosimovA   (2005-07-07 16:33) [4]


> BiN ©   (07.07.05 16:27) [3]


Это код не мой, а со ссылки из [1].


 
DeepProg   (2005-07-07 22:29) [5]

Ребят, во-первых извините, что ссылку не на ту функцию привел(правда, не думаю, что кто-нибудь пострадал) - копировал из сроки browser"a, не посмотрел только из которого, а когда заметил коннект пропал.

Во-вторых. Я не спорю, что у вас это работает. Но ведь я выделил вопросы, обратите на них внимание.
Вполне вероятно, что программист, работавший с этой функцией, может сказать, почему она  у меня не воспринимает константы. Может, нужно объявить ее вызов из dll по-другомую.
Может, это окажется важным: EnumNetUsers объявлена в отдельном модуле, который использует только необходимые для него стандартные модули, может нужно подключить еще какой-то, чтобы она работала без этой придури с константами (хотя это уже чушь, по-моему).

> AbrosimovA   (07.07.05 16:09) [1]
> У меня это работает:

Ты в сети это пробовал или на локальной машине? Распиши конфигурацию, pls. Я попробую соотнести это с примечаниями от Microsoft


 
AbrosimovA   (2005-07-08 10:59) [6]

Проверялось в локальной сети.

Настройки следующие(Win2000):
 1. Клиент для сети Microsoft      
 2. Служба доступа к файлам и принтерам
 3. TCP/IP протокол (явно указаны IP и маска подсети)


 
BiN ©   (2005-07-08 11:01) [7]

AbrosimovA   (07.07.05 16:33) [4]
> BiN ©   (07.07.05 16:27) [3]
Это код не мой, а со ссылки из [1].


Ок. Все равно напрашиваешься, если не изменил перед запуском -).


 
AbrosimovA   (2005-07-08 11:18) [8]


> BiN ©   (08.07.05 11:01) [7]


Спасибо. Учту ваши замечания.


 
DeepProg   (2005-07-08 12:04) [9]


> BiN ©   (07.07.05 16:27) [3]

А просто FreeMemory(Info) нельзя?


 
BiN ©   (2005-07-08 14:21) [10]

DeepProg   (08.07.05 12:04) [9]


NetWkstaUserEnum

The NetWkstaUserEnum function lists information about all users currently logged on to the workstation. This list includes interactive, service and batch logons.

NET_API_STATUS NetWkstaUserEnum(
 LPWSTR servername,
 DWORD level,
 LPBYTE* bufptr,
 DWORD prefmaxlen,
 LPDWORD entriesread,
 LPDWORD totalentries,
 LPDWORD resumehandle
);

Parameters
...

bufptr
[out] Pointer to the buffer that receives the data. The format of this data depends on the value of the level parameter. This buffer is allocated by the system and must be freed using the NetApiBufferFree function. Note that you must free the buffer even if the function fails with ERROR_MORE_DATA.



 
VMcL ©   (2005-07-08 14:29) [11]

>>DeepProg   (08.07.05 12:04) [9]

Откуда Windows API функция узнает о Delphi"йском менеджере памяти?



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

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

Наверх





Память: 0.48 MB
Время: 0.035 c
1-1123544473
Yura32
2005-08-09 03:41
2005.08.28
Assembler


9-1113457023
parovoZZ
2005-04-14 09:37
2005.08.28
Наложение текстуры на OGL - е


3-1121338676
erika
2005-07-14 14:57
2005.08.28
Построение запросов и поиск по полям


1-1123230053
Mx
2005-08-05 12:20
2005.08.28
Так, а если общение через интерфейс, но интерфейс в DLL?


4-1121244324
unregister_256
2005-07-13 12:45
2005.08.28
лейбел - гиперссылка





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