hex.pp.ua

Получения списка имён NETBIOS по IP-адресу

Использование 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)
 }
система комментирования CACKLE

Автор: Сергей Васкецов
Дата: 03.02.2003


Разделы сайта
Главная
Блог
Native API
NTFS и ReFS
Микроконтроллеры
Справочник NTDLL
Коды NTSTATUS
Разное

Избранное
NTFS Stream Explorer
Native Shell
Тенгвар

Остальное
nvpnhcknn (архив)
English pages
Контакты

Ленты atom
Лента Atom сайта Лента Atom блога



При копировании материалов хорошим тоном будет указание авторства и ссылка на сайт.