Использование Native API для получения списка имён NETBIOS по IP
Все устройства, которые программно создаются драйвером NetBt (также известным как NBT или Netbios over Tcpip), перечислены в разделе HKLM\System\CurrentControlSet\Services\NetBt\Linkage
в параметре Export. Этот параметр имеет тип REG_MULTI_SZ и имена отдельных устройств в нём разделены нулевым символом, а в конце — два нулевых символа. Будем считать, что hNetBt — это открытый хэндл на любое из приведённых там устройств. Код открытия полностью аналогичен приведённому.
Для получения списка имён NETBIOS по IP-адресу необходимо выполнить следующий код (см. nb30.h).
//ULONG ReversedRemoteAddress — IP-адрес подопытного компьютера #define IOCTL_NETBT_GETNAMES _TDI_CONTROL_CODE( 43, METHOD_OUT_DIRECT) //0x2100AE IO_STATUS_BLOCK iosb; struct { ADAPTER_STATUS status; NAME_BUFFER names[30]; } outdata; struct { TDI_REQUEST Request; DWORD a, b, c, d; } indata; indata.Request.Handle.AddressHandle = (void *) ReversedRemoteAddress; indata.Request.RequestNotifyObject = (void *)1; indata.Request.RequestContext = (void *) 0x110012; indata.Request.TdiStatus = 0x2a0000; indata.a = 0; indata.b = 0; indata.c = 0; indata.d = 0; NTSTATUS ns = ZwDeviceIoControlFile (hNetBt, NULL, NULL, NULL, &iosb, IOCTL_NETBT_GETNAMES, &indata, sizeof indata, &outdata, sizeof outdata); if (ns == STATUS_PENDING) { //ожидание на hNetBt //в nbtstat.exe оно выполняется как ZwWaitForSingleObject(hNetBt, TRUE, NULL) }
Автор: Сергей Васкецов
Дата: 03.02.2003
Разделы сайта
Избранное
Остальное
Лента atom
Избранное
Остальное
Лента atom
При копировании материалов хорошим тоном будет указание авторства и ссылка на сайт. По поводу рекламы обращайтесь на почту [email protected]