![]() |
![]() |
|
![]() |
||||||||||||||||||
![]() |
![]() |
![]() |
||||||||||||||||
|
![]() |
|
![]() |
|
||||||||||||||
![]() |
![]() |
8 - Удаление имени NetBios / NetBIOS / Сеть |
![]() |
Шаг 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(); } Теперь нужно всё проверить. Скомпилируйте и запустите эту программу, потом не прекращая её запустите из предыдущего примера. У Вас должно быть примерно так: Как видите в отличии от предыдущего примера несмотря на то, что программа не закончила работу её имени уже нет. Загрузить проект | | | Автор Каев Артем. |
![]() |
![]() |
![]() |
|