Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как вызывать API? 
:(
    Опции темы
Wanderer2019
Дата 5.10.2005, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 937
Регистрация: 3.12.2004
Где: Санкт-Петербург/П рага

Репутация: 7
Всего: 17



Подскажите пожалуйста где почитать или какие либо наводки по поводу Win API. т.е. готового кода много в сети... а как самому реально научиться вызывать эти функции???
т.е. предположим есть что то типа:
Код

NET_API_STATUS NetServerEnum(
  LPCWSTR servername,
  DWORD level,
  LPBYTE* bufptr,
  DWORD prefmaxlen,
  LPDWORD entriesread,
  LPDWORD totalentries,
  DWORD servertype,
  LPCWSTR domain,
  LPDWORD resume_handle
);


и как же ее правильно вызвать???? (в сети уже нашел, но сам бы никогда не догадался)
ответ нашел такой:
Код

[DllImport("netapi32.dll", EntryPoint="NetServerEnum")]
        public static extern NERR NetServerEnum([MarshalAs(UnmanagedType.LPWStr)]string ServerName, int Level, out IntPtr BufPtr, int PrefMaxLen, ref int EntriesRead, ref int TotalEntries, SV_101_TYPES ServerType, [MarshalAs(UnmanagedType.LPWStr)]string Domain, int ResumeHandle);

        [DllImport("netapi32.dll", EntryPoint="NetApiBufferFree")]
        public static extern NERR NetApiBufferFree(IntPtr Buffer);

        [Flags]
        public enum SV_101_TYPES : uint
        {
            SV_TYPE_WORKSTATION    = 0x00000001,
            SV_TYPE_SERVER    = 0x00000002,
            SV_TYPE_SQLSERVER    = 0x00000004,
            SV_TYPE_DOMAIN_CTRL    = 0x00000008,
            SV_TYPE_DOMAIN_BAKCTRL= 0x00000010,
            SV_TYPE_TIME_SOURCE    = 0x00000020,
            SV_TYPE_AFP        = 0x00000040,
            SV_TYPE_NOVELL    = 0x00000080,
            SV_TYPE_DOMAIN_MEMBER    = 0x00000100,
            SV_TYPE_PRINTQ_SERVER    = 0x00000200,
            SV_TYPE_DIALIN_SERVER    = 0x00000400,
            SV_TYPE_XENIX_SERVER    = 0x00000800,
            SV_TYPE_SERVER_UNIX    = SV_TYPE_XENIX_SERVER,
            SV_TYPE_NT        = 0x00001000,
            SV_TYPE_WFW        = 0x00002000,
            SV_TYPE_SERVER_MFPN    = 0x00004000,
            SV_TYPE_SERVER_NT    = 0x00008000,
            SV_TYPE_POTENTIAL_BROWSER = 0x00010000,
            SV_TYPE_BACKUP_BROWSER= 0x00020000,
            SV_TYPE_MASTER_BROWSER= 0x00040000,
            SV_TYPE_DOMAIN_MASTER    = 0x00080000,
            SV_TYPE_SERVER_OSF    = 0x00100000,
            SV_TYPE_SERVER_VMS    = 0x00200000,
            SV_TYPE_WINDOWS    = 0x00400000, 
            SV_TYPE_DFS        = 0x00800000, 
            SV_TYPE_CLUSTER_NT    = 0x01000000, 
            SV_TYPE_TERMINALSERVER= 0x02000000, 
            SV_TYPE_CLUSTER_VS_NT    = 0x04000000, 
            SV_TYPE_DCE        = 0x10000000, 
            SV_TYPE_ALTERNATE_XPORT=0x20000000, 
            SV_TYPE_LOCAL_LIST_ONLY=0x40000000, 
            SV_TYPE_DOMAIN_ENUM    = 0x80000000,
            SV_TYPE_ALL        = 0xFFFFFFFF,
        }

        [StructLayout(LayoutKind.Sequential)]
        public struct SERVER_INFO_101
        {
                [MarshalAs(UnmanagedType.U4)]     public uint   sv101_platform_id;
            [MarshalAs(UnmanagedType.LPWStr)] public string sv101_name;
            [MarshalAs(UnmanagedType.U4)]     public uint   sv101_version_major;
            [MarshalAs(UnmanagedType.U4)]     public uint   sv101_version_minor;
            [MarshalAs(UnmanagedType.U4)]     public uint   sv101_type;
            [MarshalAs(UnmanagedType.LPWStr)] public string sv101_comment;
        }
        public enum PLATFORM_ID : uint
        {
                PLATFORM_ID_DOS = 300,
            PLATFORM_ID_OS2 = 400,
            PLATFORM_ID_NT  = 500,
            PLATFORM_ID_OSF = 600,
            PLATFORM_ID_VMS = 700,
        }
        public enum NERR
        {
                NERR_Success            = 0, // Success
            ERROR_ACCESS_DENIED        = 5,
            ERROR_NOT_ENOUGH_MEMORY    = 8,
            ERROR_BAD_NETPATH        = 53,
            ERROR_NETWORK_BUSY        = 54,
            ERROR_INVALID_PARAMETER    = 87,
            ERROR_INVALID_LEVEL        = 124,
            ERROR_MORE_DATA        = 234,
            ERROR_EXTENDED_ERROR        = 1208,
            ERROR_NO_NETWORK        = 1222,
            ERROR_INVALID_HANDLE_STATE    = 1609,
            ERROR_NO_BROWSER_SERVERS_FOUND= 6118,
        }
        public ArrayList GetServerList()
        {
            SERVER_INFO_101 si;
            IntPtr pInfo    =IntPtr.Zero;
            int etriesread  =0;
            int totalentries=0;
            ArrayList srvs  =new ArrayList();

            try
            {
                NERR err=NetServerEnum(null, 101, out pInfo, -1, ref etriesread, ref totalentries, SV_101_TYPES.SV_TYPE_ALL, null, 0);
                if((err==NERR.NERR_Success || err==NERR.ERROR_MORE_DATA) && pInfo!=IntPtr.Zero)
                {
                    int ptr=pInfo.ToInt32();
                    for(int i=0; i<etriesread; i++)
                    {
                        si=(SERVER_INFO_101)Marshal.PtrToStructure(new IntPtr(ptr), typeof(SERVER_INFO_101));
                        srvs.Add(si.sv101_name); // добавляем имя сервера в список
                    
                        ptr+=Marshal.SizeOf(si);
                    }
                }
            }
            catch(Exception){ /* обработка ошибки */ }
            finally
            { // освобождаем выделенную память
                if(pInfo!=IntPtr.Zero) NetApiBufferFree(pInfo);
            }
            return(srvs);
        }

откуда все это берется???
т.е где например взять значения всех этих:
Код

SV_TYPE_WORKSTATION    = 0x00000001,
            SV_TYPE_SERVER    = 0x00000002,
            SV_TYPE_SQLSERVER    = 0x00000004,
            SV_TYPE_DOMAIN_CTRL    = 0x00000008,
            SV_TYPE_DOMAIN_BAKCTRL= 0x00000010,
            SV_TYPE_TIME_SOURCE    = 0x00000020,
                        ...

и т.д.
Спасибо!

PM ICQ MSN   Вверх
Дрон
Дата 5.10.2005, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 24
Всего: 93



Цитата(Wanderer2019 @ 5.10.2005, 12:09)
т.е где например взять значения всех этих:

Допустим у тебя студия 2003 установлена по умолчанию.

Тогда в папке:
C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\
лежат стандартные .h файлы Visual С++.

Выполняешь поиск по ним, на слово SV_TYPE_WORKSTATION и находишь файл LMServer.h
В нём такая штука:
Код

#define SV_TYPE_WORKSTATION         0x00000001
#define SV_TYPE_SERVER              0x00000002
#define SV_TYPE_SQLSERVER           0x00000004
#define SV_TYPE_DOMAIN_CTRL         0x00000008
#define SV_TYPE_DOMAIN_BAKCTRL      0x00000010

Дальше думаю понятно...


--------------------
Да. Именно так.
PM   Вверх
Wanderer2019
Дата 5.10.2005, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 937
Регистрация: 3.12.2004
Где: Санкт-Петербург/П рага

Репутация: 7
Всего: 17



ага понятно.. спасибо...
помню в 6-ке было что то типа API Viewer... в .NET такого нет?
PM ICQ MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0458 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.