Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.08.28;
Скачать: CL | DM;

Вниз

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 вся ветка

Текущий архив: 2005.08.28;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.071 c
14-1123314339
Alex Konshin
2005-08-06 11:45
2005.08.28
Электронные географические карты мира


14-1123052197
Alexander Panov
2005-08-03 10:56
2005.08.28
Что такое опять в Москве происходит?


14-1123174696
TStas
2005-08-04 20:58
2005.08.28
Кто спарашвал про функцию, которая сумму прописью пишет?


1-1123612655
Aleksandrrr
2005-08-09 22:37
2005.08.28
Блокировка выделенных клавиш !!!


4-1120565306
Vallos
2005-07-05 16:08
2005.08.28
возвращаясь к задержкам ...