oktava-studio.ru

Получения списка имён 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).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//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







Copyright © 2016-2025 Программирование Native API и расширенные возможности NTFS
По вопросам сотрудничества и другим вопросам по работе сайта пишите на cleogroup[собака]yandex.ru