Win32 API FAQ
Страница 18.



40)----------------------------------------------------------------------------

Q> Можно ли в 95 использовать функции Net*() (NetFileEnum и т.п.)?

A> Можно.

Вариант 1: Делаем по порядку -

    п.1 - Покупаем качественный бубен.
    п.2 - Периодически постукивая бубном и обходя нижеприведенные
          грабли пишем прогу.

В Win95 вы должны включать файл svrapi.h,а не lm.h как в NT.
Также нужно использовать svrapi.lib и svrapi.dll,а не netapi32.lib и
netapi32.dll.Если хочется поддерживать обе платформы - прийдется dll
грузить динамически.
Внимание: в 95 Net*() функции имеют другую семантику по сравнению с NT.
Строки должны быть в ANSI,не все уровни доступны.Возвращаемые структуры
различны.Управление памятью различно.
Для NT требуется адрес указателя на буфер,95-му надо указатель на буфер.

       // Windows NT
       BYTE *buf;
       DWORD prefmaxlen;
       // ...
       buf = NULL;
       prefmaxlen = 8192; // or whatever
       result = NetSomeFunction( ..., &buf, prefmaxlen, ... );
       // process buffer ...
       NetApiBufferFree( buf );

       // Windows 9X
       BYTE *buf;
       WORD cbBuffer;
       // ...
       cbBuffer = 8192; // or whatever
       buf = (BYTE *) malloc( cbBuffer );
       result = NetSomeFunction( ..., buf, cbBuffer ... );
       // process buffer ...
       free( buf );

Крайне рекомендуется посмотреть svrapi.h файл.

PS: Если ничего не получается - то или эта функция вообще отсутствует
       в srvapi.h и dll(неплохо бы сначала посмотреть), или мало трясли бубном.
PPS: Говорят еще хорошо помогает дудочка из малой берцовой кости
        девственницы - духов хорошо ублажает ;-)

Вариант 2:


Для Windows 95 есть что-то типа Administration Kit (лежит в WinNT Resource
Kit). Вот там есть 2 dll-ины (radmin32.dll & rlocal32.dll), в
которых описаны все или почти все функции NT-евой netapi32.dll. Hадо
юзать эти dll-ины.

41)----------------------------------------------------------------------------

Q> Как определить частоту процессора?

A>

WinNT:

HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\
System\CentralProcessor\0\~Mhz

42)---------------------------------------------------------------------------

Q> Как узнать MAC адрес сетевой карты?

A>

    Вариант1:

    From : Sergey Gazimagomedov 2:453/11.13

Мне нужен был МАС адpес, так я его получал, пользуясь NetBIOS.
Добавляешь имя NetBIOS и посылаешь на имя станции, нужной для опpеделения(можно
и своей) датагpамный пакет с заполненным NCB.
Вот исходник моей функции для опpеделения МАС адpеса.

    UCHAR MYLIBAPI GetAdapterID(char *Name, // NetBIOS имя станции
                                   UINT lana_num,
                                   CARDID *ID) // 6 байтовый массив
{
UCHAR rc = 0;
UCHAR Status[256];

     while( lstrlen(Name) - 15)
            lstrcat(Name, " ");

     memset(&SNcb, 0, sizeof(NCB));
     SNcb.ncb_command = NCBASTAT;
     SNcb.ncb_buffer = (LPSTR)Status;
     SNcb.ncb_length = 256;
     lstrcpy(SNcb.ncb_callname, Name);
     SNcb.ncb_lana_num = lana_num;
     rc = Netbios( &SNcb );
     if(rc ==0){
           memcpy(ID, Status, 6);
         }
     return(SNcb.ncb_cmd_cplt);
    }

Это под Win32. Конечно должен быть пpотокол NetBIOS, но он в фоpточках и так
необходим.

 
« Предыдущая статья   Следующая статья »