Шаг 8 - Удаление имени NetBios

Зачем удалять имя NetBios, естественно для того, чтобы запретить обращаться по этому имени. А это может быть использовано для специфических операций, когда работа с программой нежелательна. То есть программа работает, но используя NetBios к ней не обратишься. Удаление имени NetBios производится командой NCBDELNAME. При этом нужно указать только NetBios имя программы, которая обращается и вызвать команду. Вот так это должно выглядеть.

NCB ncb;
int i;
memset(&ncb, 0, sizeof (ncb));
i_strlen = strlen(LOCALNAME);
if (i_strlen > NCBNAMSZ)
	i_strlen = NCBNAMSZ;
memset(ncb.nbc_name, ' ', NCBNAMSZ);
memcpy(ncb.nbc_name, LOCALNAME, i_strlen);
ncb.ncb_command=NCBDELNAME;
uRetCode = Netbios((NCB*) &ncb );

В код проекта я внес некоторые изменения. Ну во-первых, сделал глобальной переменную NCB. В этом нет ничего плохого, всё равно memset её обнуляет. И это обязательно надо делать:

.......
NCB ncb;
.......

Во-вторых, объявил глобальную переменную uRetCode:

UCHAR uRetCode; 

Теперь я могу создать функцию, которая будет тестировать возврат и не делать это каждый раз при вызове команд.

void TestNetBiosOperation()
{
	if ( uRetCode != 0 )  
	{
		cout << "error  " << endl;
		exit(1);
	}
}

Так как NCB глобальная можно создать функцию, которая будет вызывать команду NetBios и сразу тестировать результат.

void RunNetBiosCommand(UCHAR  ncb_command)
{
	ncb.ncb_command=ncb_command;
	uRetCode = Netbios((NCB*) &ncb );
	TestNetBiosOperation();
}

Так же я написал обещанную функцию GenerateNetBiosName.

void GenerateNetBiosName(unsigned char* chNetBiosName)
{
	int i_strlen;
	i_strlen = strlen(LOCALNAME);
	if (i_strlen > NCBNAMSZ) i_strlen = NCBNAMSZ;
	memset(chNetBiosName, ' ', NCBNAMSZ);
	memcpy(chNetBiosName, LOCALNAME, i_strlen);
}

И процедура удаления имеет теперь вид.

void DeleteNetBiosName()
{
	memset (&ncb, 0, sizeof (ncb));
	GenerateNetBiosName(ncb.ncb_name);
	  	RunNetBiosCommand(NCBDELNAME);
}

А добавления:

void AddNetBiosName()
{
	memset(&ncb, 0, sizeof (ncb));
	GenerateNetBiosName(ncb.ncb_name);
	ncb.ncb_lana_num = LANANUM;
	RunNetBiosCommand(NCBADDNAME);
}

Всё можете посмотреть загрузив проект. Но код намного читабельнее. Общий вид программы Вот:

void main()
{
	ResetNetBios();
	AddNetBiosName();
	ViewNetBiosName();
	DeleteNetBiosName();
	cout << "Canсel" << endl;
	getch();
}

Теперь нужно всё проверить. Скомпилируйте и запустите эту программу, потом не прекращая её запустите из предыдущего примера. У Вас должно быть примерно так:

gif/8_1.gif (5405 b)

Как видите в отличии от предыдущего примера несмотря на то, что программа не закончила работу её имени уже нет.


Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 10.01.2000