Использование 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
Разделы сайта
Избранное
Остальное
Избранное
Остальное
Copyright © 2016- Программирование Native API и расширенные возможности NTFS
По вопросам сотрудничества и другим вопросам по работе сайта пишите на cleogroup[собака]yandex.ru
По вопросам сотрудничества и другим вопросам по работе сайта пишите на cleogroup[собака]yandex.ru