Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование с использованием WinAPI

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61

Открыть новую тему     Написать ответ в эту тему

Mickey_from_nsk

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Kaylang
Смотря какая сеть...
Собственно GetUserName возвращает имя пользователя, под которым он зарегистрировался на машине - доменное или локальное.
Что имеешь в виду под Name(RDN)?

Всего записей: 636 | Зарегистр. 21-10-2002 | Отправлено: 11:45 30-06-2006
Kaylang



Вредный и упрямый
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mickey_from_nsk

Цитата:
Смотря какая сеть...

Домен на Windows2000.

Цитата:
Собственно GetUserName возвращает имя пользователя, под которым он зарегистрировался на машине - доменное или локальное.  
Что имеешь в виду под Name(RDN)?

Я не знаю, как точно в английской версии Name(RDN) у мну итальянская винда. У нас в сети в Name(RDN) указано полное имя пользователя, а GetUserName выдает логин пользователя.

Всего записей: 38546 | Зарегистр. 29-08-2002 | Отправлено: 12:05 30-06-2006 | Исправлено: Kaylang, 12:07 30-06-2006
Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Kaylang  

Цитата:
DsCrackNames
 
The DsCrackNames function converts an array of directory service object names from one format to another. Name conversion enables client applications to map between the multiple names used to identify various directory service objects. For example, user objects can be identified by SAM account names (domain\username), user principal name (username@domain.com), or distinguished name.
 
Не то?
Можно ещё это посмотреть:

Цитата:
IADsADSystemInfo
 
The IADsADSystemInfo interface gets data about the local computer if it is a Windows® 2000 computer in a Windows 2000 domain. For example, you can get the domain, site, and distinguished name of the local computer.
 
 

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 17:19 30-06-2006
gerrCrazzy



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Kaylang
Пробуй GetUserNameEx(NameDisplay,...) или TranslateName

Всего записей: 63 | Зарегистр. 27-12-2002 | Отправлено: 17:32 30-06-2006
Kaylang



Вредный и упрямый
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Abs62
gerrCrazzy
Спасибо! В понедельник попробую и доложу о результатах.

Всего записей: 38546 | Зарегистр. 29-08-2002 | Отправлено: 00:59 01-07-2006
Kaylang



Вредный и упрямый
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Abs62
gerrCrazzy
Увы, в Delphi6 нет ни одной из этих функций.
 
ЗЫ. Задал вопрос здесь, в надежде найти функцию WinAPI для этого дела...

Всего записей: 38546 | Зарегистр. 29-08-2002 | Отправлено: 14:17 03-07-2006
vshersh



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Извините что на паскале, но  
Kaylang:
GetOSUserName

Всего записей: 506 | Зарегистр. 12-01-2006 | Отправлено: 14:53 03-07-2006 | Исправлено: vshersh, 14:57 03-07-2006
gerrCrazzy



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Kaylang

Цитата:
Увы, в Delphi6 нет ни одной из этих функций.

Возможно оттого, что эти функции доступны только в NT системах?

Цитата:
ЗЫ. Задал вопрос здесь, в надежде найти функцию WinAPI для этого дела...

Дык GetUserNameEx и есть функция WinAPI, если ее нет в стандартной поставке Delphi6,     экспортируй самостоятельно из secur32.dll, описание параметров и MSDN:
Код:
BOOLEAN GetUserNameEx(
  EXTENDED_NAME_FORMAT NameFormat,
  LPTSTR lpNameBuffer,
  PULONG nSize
);

vshersh
Разве твоя функция не выдает ЛОГИН пользователя?(как я понял требуется не логин, напр. "pupkin", а полное имя вроде "Пупкин ВВ")

Всего записей: 63 | Зарегистр. 27-12-2002 | Отправлено: 16:51 03-07-2006
vshersh



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
gerrCrazzy
Да действительно...
Я невнимательно прочитал - думал речь идет об имени вида ДОМЕН\логин

Тогда конечно надо юзать  
GetUserNameEx, но она
Цитата:
Requires Windows XP or Windows 2000 Professional.

Всего записей: 506 | Зарегистр. 12-01-2006 | Отправлено: 17:50 03-07-2006
Kaylang



Вредный и упрямый
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
gerrCrazzy

Цитата:
Возможно оттого, что эти функции доступны только в NT системах?  

Дык, NT системы юзаю...

Цитата:
Дык GetUserNameEx и есть функция WinAPI, если ее нет в стандартной поставке Delphi6,     экспортируй самостоятельно из secur32.dll, описание параметров и MSDN:  

Ок! Попробую с этим разобраться завтра...  

Всего записей: 38546 | Зарегистр. 29-08-2002 | Отправлено: 19:16 03-07-2006
Mickey_from_nsk

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Kaylang
По идее имя пользователя можно получить, сделав запрос к домену. Сейчас, если найду как это делается - выложу.
 
Нашел, но только на C#. По идее эти объекты должны отображаться на COM, а с ним на Delphi работать уже можно. Посмотри, может пригодится.
 

Код:
 
        void init()
        {
            try
            {
                // Получаем список существующих доменов.
                DirectorySearcher dds = new DirectorySearcher("(objectClass=domain)", new string[] {"name", "adspath"});
                SearchResultCollection dsr = dds.FindAll();
 
                this.domainBox.Items.Clear();
                foreach (SearchResult sr in dsr)
                {
 
                    this.domainBox.Items.Add(new DomainEntry(sr.Properties["name"][0].ToString(),  
                        sr.Properties["adspath"][0].ToString()));
                }
 
                if (this.domainBox.Items.Count == 0)
                {
                    this.domainBox.Enabled = false;
                    this.listBox.Items.Clear();
                    this.listBox.Enabled = false;
                }
                else
                {
                    this.domainBox.SelectedIndex = 0;
                }
            }
            catch
            {
                this.domainBox.Enabled = false;
                this.domainBox.Items.Clear();
                this.listBox.Enabled = false;
                this.listBox.Items.Clear();
            }
        }
 
 

Всего записей: 636 | Зарегистр. 21-10-2002 | Отправлено: 08:13 04-07-2006 | Исправлено: Mickey_from_nsk, 08:22 04-07-2006
Kaylang



Вредный и упрямый
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем спасибо!  Пока искал инфу, нашел и решение тут.
 
Если вдруг кому понадобится:

Код:
 
const
  NameUnknown = 0; // Unknown name type.
  NameFullyQualifiedDN = 1;  // Fully qualified distinguished name
  NameSamCompatible = 2; // Windows NT® 4.0 account name
  NameDisplay = 3;  // A "friendly" display name
  NameUniqueId = 6; // GUID string that the IIDFromString function returns
  NameCanonical = 7;  // Complete canonical name
  NameUserPrincipal = 8; // User principal name
  NameCanonicalEx = 9;
  NameServicePrincipal = 10;  // Generalized service principal name
  DNSDomainName = 11;  // DNS domain name, plus the user name
 
procedure GetUserNameEx(NameFormat: DWORD;
  lpNameBuffer: LPSTR; nSize: PULONG); stdcall;
  external 'secur32.dll' Name 'GetUserNameExA';
 
function LoggedOnUserNameEx(fFormat: DWORD): string;
var
  UserName: array[0..250] of char;
  Size: DWORD;
begin
  Size := 250;
  GetUserNameEx(fFormat, @UserName, @Size);
  Result := UserName;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit1.Text := LoggedOnUserNameEx(NameSamCompatible);
end;
 

 
Только в моем случае использую не NameSamCompatible, а NameDisplay.

Всего записей: 38546 | Зарегистр. 29-08-2002 | Отправлено: 13:09 04-07-2006
DeADMoHAX



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Страное дело такое возникло - считываю данные из файла, а в чары считывается каким то раком данных больше чем размер массива позволяет - причем непонятно почему нет переполнения буфера. однако, strlen и подсчитывание вручную в консоли символов дают результатом то что данных не 15 например, а 39.  
вот вывод+функция, которая его дает:
http://xaknotdie.org/html/work.rar


----------
dmlabs.ru || hackconnect.ru
Выгодно России – значит, хорошо. Не выгодно России – пошёл на хер.

Всего записей: 1367 | Зарегистр. 03-02-2005 | Отправлено: 16:47 06-07-2006
tomegadeth



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DeADMoHAX
добавь местечко для нуля и обнули буфера

Код:
    char dbuff[9]={0,};
    char btbuff[9]={0,};
    char etbuff[9]={0,};
    char buffip[16]={0,};
    char mbuff[2]={0,};
    char extbuff[2]={0,};
    char space[2]={0,};
 

 
Добавлено:
сhar buff[] = "some";
strlen(buff) будет равно 4 а sizeof(buff) -> 5: делай выводы

Всего записей: 560 | Зарегистр. 22-11-2004 | Отправлено: 17:02 06-07-2006
DeADMoHAX



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
tomegadeth
а может недобавлять а просто занести сначала 0, он же потом затрется ?

----------
dmlabs.ru || hackconnect.ru
Выгодно России – значит, хорошо. Не выгодно России – пошёл на хер.

Всего записей: 1367 | Зарегистр. 03-02-2005 | Отправлено: 18:30 06-07-2006
tomegadeth



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
на самом деле размер буфера должен быть <= количеству байтов для чтения. (так в MSDN сказано) но практика показывает что нулевое окончание необходимо... пробуй в общем...

Всего записей: 560 | Зарегистр. 22-11-2004 | Отправлено: 19:11 06-07-2006
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
tomegadeth
Цитата:
на самом деле размер буфера должен быть <= количеству байтов для чтения. (так в MSDN сказано)

Хм сколько читал, везде идет примечание, что необходимо выделять столько сколько надо считать плюс ноль для терминайта (когда считывается ситмвольный буфер естессно), то есть как в случае DeADMoHAX. Иначе ошибки не будет, но занесется на 1 символ меньше, а в конце все равно будет #0.


----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 01:49 07-07-2006
tomegadeth



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ShIvADeSt

Цитата:
Хм сколько читал, везде идет примечание, что необходимо выделять столько сколько надо считать плюс ноль для терминайта
вот я тоже это читал, но искав про ReadFile такого примечания не нашел
 
дело в том, что именно при, в данном случае, ReadFile, если буфер равен 8 и читается 8 символов, то последний символ в буфере (восьмой) не будет '\0'... если сделать strcpy массива в другой буффер побольше, девятый байт будет содержать мусор, а десятый - уже '\0'...
 
При cout или MessageBox и т.д., последний символ должен быть обязательно '\0'.
Нуль для терминайта дожен быть выделен в любом случае, иначе ждите переполнения...

Всего записей: 560 | Зарегистр. 22-11-2004 | Отправлено: 10:30 07-07-2006 | Исправлено: tomegadeth, 10:33 07-07-2006
Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
tomegadeth

Цитата:
вот я тоже это читал, но искав про ReadFile такого примечания не нашел  

А ReadFile просто читает заданное количество символов. А ноль там, или не ноль - по барабану.

Цитата:
если сделать strcpy массива в другой буффер побольше, девятый байт будет содержать мусор, а десятый - уже '\0'...  

Если это сделать, результат может быть любым - от правильного результата (8 символов и завершающий 0) и до Access violation. Всё зависит от содержимого памяти за пределами выделенного буфера.

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 15:43 07-07-2006
XF

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте.
Как при помощи WinAPI определить какой процесс биндит/прослушивает определенный порт?

Всего записей: 1 | Зарегистр. 25-04-2006 | Отправлено: 19:59 08-07-2006
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование с использованием WinAPI


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru