В прошлом примере мы создавали и получали список имен NetBIOS. Вывод был простой, получить список имен можно только если программа сама зарегистрирует имя и используя это имя мы можем получить все остальные имена. Остался вопрос как долг существует NetBios имя. Вобщем-то до конца работы программы. Для проверки этого вывода необходимо создать две одинаковые программы, как в прошлом примере. Вы можете загрузить их из проекта и скомпилировать. Разница у этих программ в именах программ и NetBios именах.
Имя программы NetBios имя TestApp1 #define LOCALNAME "MYNET1" TestApp2 #define LOCALNAME "MYNET2"
Кроме того в файлы добавленна ссылка на библиотеку conio.h:
#include "conio.h"
И реализована задержка завершения программы до нажатия на клавишу.
........ cout << pStatus->name_count << endl; cout << "Canсel" << endl; getch(); }
Запустите и завершите программу по очереди. Вы увидите только одно NetBios имя. А вот теперь запустите TestApp1 и не завершая выполнения TestApp2. У Вас должна быть примерно такая картина:
Как видите имя живет и здравствует всем врагам назло до завершения программы.
Еще на что хочу обратить Ваше вимание это на то, как мы с Вами формировали это имя. Первое - мы завели константу.
#define LOCALNAME "MYNET2"
Вычислили её длину:
i_strlen = strlen(LOCALNAME);
Проверили длину на соответствие константе длины NCBNAMSZ и, если длина больше, то уменьшили до константы длины.
if (i_strlen > NCBNAMSZ) i_strlen = NCBNAMSZ;
Эта константа описана в файле NB30.H:
#define NCBNAMSZ 16 /* absolute length of a net name */
При заполении NCB имя помещается в ncb_name. Сначала заполняем буфер пробелами на положенную длину memset, потом копируем туда имя memcpy.
memset (ncb1.ncb_name, ' ', NCBNAMSZ); memcpy (ncb1.ncb_name, LOCALNAME, i_strlen);
И вуаля - имя готово. Надо бы сделать из этого процесса нормальную процедуру типа GenerateNetBiosName().